[{"data":1,"prerenderedAt":173106},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2024-10-10-html-he-css-xue-xi\u002Fch02-vscode-bi-bei-nei-rong":3,"wiki-doc-nav":162},{"id":4,"title":5,"body":6,"description":154,"extension":155,"meta":156,"navigation":157,"path":158,"seo":159,"stem":160,"__hash__":161},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":8,"toc":140},"minimark",[9,13,18,22,26,38,42,45,48,51,55,62,68,72,79,90,94,97,101,104,108,111,115,118,122,125,128,131,134,137],[10,11,5],"h1",{"id":12},"_2-vscode必备内容",[14,15,17],"h2",{"id":16},"_21-标签分类","2.1 标签分类",[19,20,21],"p",{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,23,25],{"id":24},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,27,28,29,33,34,37],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[30,31,32],"code",{},"!"," 然后按 ",[30,35,36],{},"Tab","，快速自动生成基本结构。",[14,39,41],{"id":40},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,43,44],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,46,47],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,49,50],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,52,54],{"id":53},"_24-视图缩放","2.4 视图缩放",[19,56,57,58,61],{},"缩放视图 ",[30,59,60],{},"ctrl+"," 可实现代码增大。",[19,63,64,67],{},[30,65,66],{},"ctrl-"," 可实现代码减小。",[14,69,71],{"id":70},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,73,74,75,78],{},"VSCode 新建文件快捷键为 ",[30,76,77],{},"ctrl+N","。",[19,80,81,82,85,86,89],{},"保存快捷键为 ",[30,83,84],{},"ctrl+S","，将文本保存为 ",[30,87,88],{},".html"," 文件。",[14,91,93],{"id":92},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,95,96],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,98,100],{"id":99},"_27-vscode-icons","2.7 vscode-icons",[19,102,103],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,105,107],{"id":106},"_28-easy-less","2.8 Easy LESS",[19,109,110],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,112,114],{"id":113},"_29-会了吧插件","2.9 会了吧插件",[19,116,117],{},"会了吧插件可以展示代码中英语单词的意思。",[14,119,121],{"id":120},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,123,124],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,126,127],{},"②选定多个相同的单词:ctrl+D",[19,129,130],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,132,133],{},"④全局替换某些单词:ctrl+h",[19,135,136],{},"⑤快速定位到某一行:ctrl+g",[19,138,139],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":141,"searchDepth":142,"depth":142,"links":143},"",2,[144,145,146,147,148,149,150,151,152,153],{"id":16,"depth":142,"text":17},{"id":24,"depth":142,"text":25},{"id":40,"depth":142,"text":41},{"id":53,"depth":142,"text":54},{"id":70,"depth":142,"text":71},{"id":92,"depth":142,"text":93},{"id":99,"depth":142,"text":100},{"id":106,"depth":142,"text":107},{"id":113,"depth":142,"text":114},{"id":120,"depth":142,"text":121},null,"md",{},true,"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":5,"description":154},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",[163,5277,6385,7805,10794,12145,13634,14723,23486,23498,24097,24123,24247,24488,24553,24571,24584,24631,24755,24924,25123,25303,25508,25644,25739,25776,25789,26099,26840,27548,27569,28588,30219,30370,30383,30395,30696,50508,50523,50540,50573,53445,76793,92938,92959,93072,93193,93963,94626,94987,95025,95131,95231,95274,95300,95361,97015,97116,97141,97632,98132,99212,99495,100237,100739,100751,102767,104431,105934,107632,109549,111468,113490,116960,117392,117855,118604,121548,121896,121918,122274,125581,125593,125996,126019,126110,126277,126482,126783,127340,127997,129928,131526,132175,133669,135100,136335,138029,139781,142191,142307,143242,143453,144338,145573,145801,145814,146969,149381,151749,155070,157547,159191,160968,162981,166033,168213,170740,172934],{"id":164,"title":165,"body":166,"description":141,"extension":155,"meta":5272,"navigation":157,"path":5273,"seo":5274,"stem":5275,"__hash__":5276},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":167,"toc":5244},[168,171,175,178,182,195,199,204,207,210,213,216,219,253,257,260,263,266,269,322,326,345,347,361,364,372,375,1237,1244,1261,1265,1356,1360,1366,1455,1459,1497,1501,1565,1569,1573,1580,1591,1595,1600,1604,1609,1613,1618,1622,1626,1631,1901,1906,2044,2049,2306,2309,2317,2321,2326,2429,2432,2738,2747,2848,2851,2854,2857,2860,3120,3125,3265,3268,3447,3450,3578,3581,3733,3737,3742,3745,3756,3764,3767,3874,3878,3882,3887,3937,3942,3947,3971,3976,4029,4032,4037,4214,4219,4504,4509,4906,4910,4915,4972,4977,4985,4988,5128,5131,5240],[10,169,165],{"id":170},"_1基础入门",[14,172,174],{"id":173},"_11注释","1.1注释",[19,176,177],{},"\u002F\u002F或者\u002F* *\u002F",[14,179,181],{"id":180},"_12命名","1.2命名",[183,184,185,189,192],"ol",{},[186,187,188],"li",{},"字母数字下划线",[186,190,191],{},"开头必须是字母或_",[186,193,194],{},"不能使用关键词",[14,196,198],{"id":197},"_13数据类型","1.3数据类型",[200,201,203],"h3",{"id":202},"_131整形","1.3.1整形",[19,205,206],{},"short 短整形 2",[19,208,209],{},"int 整形 4",[19,211,212],{},"long 长整形 win4 linux32位4 linux64位8",[19,214,215],{},"long long 长长整形 8",[19,217,218],{},"利用sizeof可以求数据类型占用的内存空间大小",[220,221,225],"pre",{"className":222,"code":223,"language":224,"meta":141,"style":141},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[30,226,227,246],{"__ignoreMap":141},[228,229,232,236,240,243],"span",{"class":230,"line":231},"line",1,[228,233,235],{"class":234},"szBVR","sizeof",[228,237,239],{"class":238},"sVt8B","(",[228,241,242],{"class":234},"int",[228,244,245],{"class":238},")\n",[228,247,248,250],{"class":230,"line":142},[228,249,235],{"class":234},[228,251,252],{"class":238},"(num)\n",[200,254,256],{"id":255},"_132浮点型","1.3.2浮点型",[19,258,259],{},"float 单精度 4节 7位有效数字",[19,261,262],{},"double 双精度 8节 15-16有效数字",[19,264,265],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,267,268],{},"注意点：",[220,270,272],{"className":222,"code":271,"language":224,"meta":141,"style":141},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[30,273,274,299],{"__ignoreMap":141},[228,275,276,279,282,285,289,292,295],{"class":230,"line":231},[228,277,278],{"class":234},"float",[228,280,281],{"class":238}," f1",[228,283,284],{"class":234},"=",[228,286,288],{"class":287},"sj4cs","3.14",[228,290,291],{"class":234},"f",[228,293,294],{"class":238},";",[228,296,298],{"class":297},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[228,300,301,303,306,308,311,314,317,319],{"class":230,"line":142},[228,302,278],{"class":234},[228,304,305],{"class":238}," f2",[228,307,284],{"class":234},[228,309,310],{"class":287},"3",[228,312,313],{"class":234},"e",[228,315,316],{"class":287},"2",[228,318,294],{"class":238},[228,320,321],{"class":297}," \u002F\u002F科学记数法\n",[200,323,325],{"id":324},"_133字符型","1.3.3字符型",[220,327,329],{"className":222,"code":328,"language":224,"meta":141,"style":141},"char ch='a'\n",[30,330,331],{"__ignoreMap":141},[228,332,333,336,339,341],{"class":230,"line":231},[228,334,335],{"class":234},"char",[228,337,338],{"class":238}," ch",[228,340,284],{"class":234},[228,342,344],{"class":343},"sZZnC","'a'\n",[19,346,268],{},[183,348,349,352,355,358],{},[186,350,351],{},"在显示字符型变量时，只能单引号，双引号x",[186,353,354],{},"单引号内只能一个字符，不能字符串",[186,356,357],{},"c和c++字符型变量只占用一个字符",[186,359,360],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,362,363],{},"ASCII码大致由以下两部分组成：",[183,365,366,369],{},[186,367,368],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[186,370,371],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,373,374],{},"ASCII码表格：",[376,377,378,422],"table",{},[379,380,381],"thead",{},[382,383,384,392,397,401,406,410,414,418],"tr",{},[385,386,387,391],"th",{},[388,389,390],"strong",{},"ASCII","值",[385,393,394],{},[388,395,396],{},"控制字符",[385,398,399,391],{},[388,400,390],{},[385,402,403],{},[388,404,405],{},"字符",[385,407,408,391],{},[388,409,390],{},[385,411,412],{},[388,413,405],{},[385,415,416,391],{},[388,417,390],{},[385,419,420],{},[388,421,405],{},[423,424,425,452,477,502,527,553,578,603,629,654,680,706,732,757,783,809,835,859,884,909,934,959,984,1009,1034,1059,1084,1110,1135,1160,1185,1211],"tbody",{},[382,426,427,431,434,437,440,443,446,449],{},[428,429,430],"td",{},"0",[428,432,433],{},"NUT",[428,435,436],{},"32",[428,438,439],{},"(space)",[428,441,442],{},"64",[428,444,445],{},"@",[428,447,448],{},"96",[428,450,451],{},"、",[382,453,454,457,460,463,465,468,471,474],{},[428,455,456],{},"1",[428,458,459],{},"SOH",[428,461,462],{},"33",[428,464,32],{},[428,466,467],{},"65",[428,469,470],{},"A",[428,472,473],{},"97",[428,475,476],{},"a",[382,478,479,481,484,487,490,493,496,499],{},[428,480,316],{},[428,482,483],{},"STX",[428,485,486],{},"34",[428,488,489],{},"\"",[428,491,492],{},"66",[428,494,495],{},"B",[428,497,498],{},"98",[428,500,501],{},"b",[382,503,504,506,509,512,515,518,521,524],{},[428,505,310],{},[428,507,508],{},"ETX",[428,510,511],{},"35",[428,513,514],{},"#",[428,516,517],{},"67",[428,519,520],{},"C",[428,522,523],{},"99",[428,525,526],{},"c",[382,528,529,532,535,538,541,544,547,550],{},[428,530,531],{},"4",[428,533,534],{},"EOT",[428,536,537],{},"36",[428,539,540],{},"$",[428,542,543],{},"68",[428,545,546],{},"D",[428,548,549],{},"100",[428,551,552],{},"d",[382,554,555,558,561,564,567,570,573,576],{},[428,556,557],{},"5",[428,559,560],{},"ENQ",[428,562,563],{},"37",[428,565,566],{},"%",[428,568,569],{},"69",[428,571,572],{},"E",[428,574,575],{},"101",[428,577,313],{},[382,579,580,583,586,589,592,595,598,601],{},[428,581,582],{},"6",[428,584,585],{},"ACK",[428,587,588],{},"38",[428,590,591],{},"&",[428,593,594],{},"70",[428,596,597],{},"F",[428,599,600],{},"102",[428,602,291],{},[382,604,605,608,611,614,617,620,623,626],{},[428,606,607],{},"7",[428,609,610],{},"BEL",[428,612,613],{},"39",[428,615,616],{},",",[428,618,619],{},"71",[428,621,622],{},"G",[428,624,625],{},"103",[428,627,628],{},"g",[382,630,631,634,637,640,642,645,648,651],{},[428,632,633],{},"8",[428,635,636],{},"BS",[428,638,639],{},"40",[428,641,239],{},[428,643,644],{},"72",[428,646,647],{},"H",[428,649,650],{},"104",[428,652,653],{},"h",[382,655,656,659,662,665,668,671,674,677],{},[428,657,658],{},"9",[428,660,661],{},"HT",[428,663,664],{},"41",[428,666,667],{},")",[428,669,670],{},"73",[428,672,673],{},"I",[428,675,676],{},"105",[428,678,679],{},"i",[382,681,682,685,688,691,694,697,700,703],{},[428,683,684],{},"10",[428,686,687],{},"LF",[428,689,690],{},"42",[428,692,693],{},"*",[428,695,696],{},"74",[428,698,699],{},"J",[428,701,702],{},"106",[428,704,705],{},"j",[382,707,708,711,714,717,720,723,726,729],{},[428,709,710],{},"11",[428,712,713],{},"VT",[428,715,716],{},"43",[428,718,719],{},"+",[428,721,722],{},"75",[428,724,725],{},"K",[428,727,728],{},"107",[428,730,731],{},"k",[382,733,734,737,740,743,745,748,751,754],{},[428,735,736],{},"12",[428,738,739],{},"FF",[428,741,742],{},"44",[428,744,616],{},[428,746,747],{},"76",[428,749,750],{},"L",[428,752,753],{},"108",[428,755,756],{},"l",[382,758,759,762,765,768,771,774,777,780],{},[428,760,761],{},"13",[428,763,764],{},"CR",[428,766,767],{},"45",[428,769,770],{},"-",[428,772,773],{},"77",[428,775,776],{},"M",[428,778,779],{},"109",[428,781,782],{},"m",[382,784,785,788,791,794,797,800,803,806],{},[428,786,787],{},"14",[428,789,790],{},"SO",[428,792,793],{},"46",[428,795,796],{},".",[428,798,799],{},"78",[428,801,802],{},"N",[428,804,805],{},"110",[428,807,808],{},"n",[382,810,811,814,817,820,823,826,829,832],{},[428,812,813],{},"15",[428,815,816],{},"SI",[428,818,819],{},"47",[428,821,822],{},"\u002F",[428,824,825],{},"79",[428,827,828],{},"O",[428,830,831],{},"111",[428,833,834],{},"o",[382,836,837,840,843,846,848,851,854,857],{},[428,838,839],{},"16",[428,841,842],{},"DLE",[428,844,845],{},"48",[428,847,430],{},[428,849,850],{},"80",[428,852,853],{},"P",[428,855,856],{},"112",[428,858,19],{},[382,860,861,864,867,870,872,875,878,881],{},[428,862,863],{},"17",[428,865,866],{},"DCI",[428,868,869],{},"49",[428,871,456],{},[428,873,874],{},"81",[428,876,877],{},"Q",[428,879,880],{},"113",[428,882,883],{},"q",[382,885,886,889,892,895,897,900,903,906],{},[428,887,888],{},"18",[428,890,891],{},"DC2",[428,893,894],{},"50",[428,896,316],{},[428,898,899],{},"82",[428,901,902],{},"R",[428,904,905],{},"114",[428,907,908],{},"r",[382,910,911,914,917,920,922,925,928,931],{},[428,912,913],{},"19",[428,915,916],{},"DC3",[428,918,919],{},"51",[428,921,310],{},[428,923,924],{},"83",[428,926,927],{},"S",[428,929,930],{},"115",[428,932,933],{},"s",[382,935,936,939,942,945,947,950,953,956],{},[428,937,938],{},"20",[428,940,941],{},"DC4",[428,943,944],{},"52",[428,946,531],{},[428,948,949],{},"84",[428,951,952],{},"T",[428,954,955],{},"116",[428,957,958],{},"t",[382,960,961,964,967,970,972,975,978,981],{},[428,962,963],{},"21",[428,965,966],{},"NAK",[428,968,969],{},"53",[428,971,557],{},[428,973,974],{},"85",[428,976,977],{},"U",[428,979,980],{},"117",[428,982,983],{},"u",[382,985,986,989,992,995,997,1000,1003,1006],{},[428,987,988],{},"22",[428,990,991],{},"SYN",[428,993,994],{},"54",[428,996,582],{},[428,998,999],{},"86",[428,1001,1002],{},"V",[428,1004,1005],{},"118",[428,1007,1008],{},"v",[382,1010,1011,1014,1017,1020,1022,1025,1028,1031],{},[428,1012,1013],{},"23",[428,1015,1016],{},"TB",[428,1018,1019],{},"55",[428,1021,607],{},[428,1023,1024],{},"87",[428,1026,1027],{},"W",[428,1029,1030],{},"119",[428,1032,1033],{},"w",[382,1035,1036,1039,1042,1045,1047,1050,1053,1056],{},[428,1037,1038],{},"24",[428,1040,1041],{},"CAN",[428,1043,1044],{},"56",[428,1046,633],{},[428,1048,1049],{},"88",[428,1051,1052],{},"X",[428,1054,1055],{},"120",[428,1057,1058],{},"x",[382,1060,1061,1064,1067,1070,1072,1075,1078,1081],{},[428,1062,1063],{},"25",[428,1065,1066],{},"EM",[428,1068,1069],{},"57",[428,1071,658],{},[428,1073,1074],{},"89",[428,1076,1077],{},"Y",[428,1079,1080],{},"121",[428,1082,1083],{},"y",[382,1085,1086,1089,1092,1095,1098,1101,1104,1107],{},[428,1087,1088],{},"26",[428,1090,1091],{},"SUB",[428,1093,1094],{},"58",[428,1096,1097],{},":",[428,1099,1100],{},"90",[428,1102,1103],{},"Z",[428,1105,1106],{},"122",[428,1108,1109],{},"z",[382,1111,1112,1115,1118,1121,1123,1126,1129,1132],{},[428,1113,1114],{},"27",[428,1116,1117],{},"ESC",[428,1119,1120],{},"59",[428,1122,294],{},[428,1124,1125],{},"91",[428,1127,1128],{},"[",[428,1130,1131],{},"123",[428,1133,1134],{},"{",[382,1136,1137,1140,1143,1146,1149,1152,1154,1157],{},[428,1138,1139],{},"28",[428,1141,1142],{},"FS",[428,1144,1145],{},"60",[428,1147,1148],{},"\u003C",[428,1150,1151],{},"92",[428,1153,822],{},[428,1155,1156],{},"124",[428,1158,1159],{},"|",[382,1161,1162,1165,1168,1171,1173,1176,1179,1182],{},[428,1163,1164],{},"29",[428,1166,1167],{},"GS",[428,1169,1170],{},"61",[428,1172,284],{},[428,1174,1175],{},"93",[428,1177,1178],{},"]",[428,1180,1181],{},"125",[428,1183,1184],{},"}",[382,1186,1187,1190,1193,1196,1199,1202,1205,1208],{},[428,1188,1189],{},"30",[428,1191,1192],{},"RS",[428,1194,1195],{},"62",[428,1197,1198],{},">",[428,1200,1201],{},"94",[428,1203,1204],{},"^",[428,1206,1207],{},"126",[428,1209,1210],{},"`",[382,1212,1213,1216,1219,1222,1225,1228,1231,1234],{},[428,1214,1215],{},"31",[428,1217,1218],{},"US",[428,1220,1221],{},"63",[428,1223,1224],{},"?",[428,1226,1227],{},"95",[428,1229,1230],{},"_",[428,1232,1233],{},"127",[428,1235,1236],{},"DEL",[19,1238,1239,1240,1243],{},"ASCII 码大致由以下",[388,1241,1242],{},"两部分组","成：",[1245,1246,1247,1254],"ul",{},[186,1248,1249,1250,1253],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[388,1251,1252],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[186,1255,1256,1257,1260],{},"ASCII 打印字符：数字 ",[388,1258,1259],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[200,1262,1264],{"id":1263},"_134转义字符","1.3.4转义字符",[220,1266,1268],{"className":222,"code":1267,"language":224,"meta":141,"style":141},"\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",[30,1269,1270,1275,1291,1306,1312,1326,1332],{"__ignoreMap":141},[228,1271,1272],{"class":230,"line":231},[228,1273,1274],{"class":297},"\u002F\u002F换行符\n",[228,1276,1277,1280,1283,1286,1288],{"class":230,"line":142},[228,1278,1279],{"class":238},"cout ",[228,1281,1282],{"class":234},"\u003C\u003C",[228,1284,1285],{"class":343},"\"hello world\u002Fn\"",[228,1287,294],{"class":238},[228,1289,1290],{"class":297}," \u002F\u002F就等同于如下：\n",[228,1292,1294,1296,1298,1301,1303],{"class":230,"line":1293},3,[228,1295,1279],{"class":238},[228,1297,1282],{"class":234},[228,1299,1300],{"class":343},"\"hello world\"",[228,1302,1282],{"class":234},[228,1304,1305],{"class":238},"endl;\n",[228,1307,1309],{"class":230,"line":1308},4,[228,1310,1311],{"class":297},"\u002F\u002F反斜杠\n",[228,1313,1315,1317,1319,1322,1324],{"class":230,"line":1314},5,[228,1316,1279],{"class":238},[228,1318,1282],{"class":234},[228,1320,1321],{"class":343},"\"\u002F\u002F\"",[228,1323,1282],{"class":234},[228,1325,1305],{"class":238},[228,1327,1329],{"class":230,"line":1328},6,[228,1330,1331],{"class":297},"\u002F\u002F水平制表符\n",[228,1333,1335,1337,1339,1342,1345,1348,1350,1353],{"class":230,"line":1334},7,[228,1336,1279],{"class":238},[228,1338,1282],{"class":234},[228,1340,1341],{"class":343},"\"aaaa",[228,1343,1344],{"class":287},"\\t",[228,1346,1347],{"class":343},"helloworld\"",[228,1349,1282],{"class":234},[228,1351,1352],{"class":238},"endl;",[228,1354,1355],{"class":297}," \u002F\u002F输出窗口时有对齐效果\n",[200,1357,1359],{"id":1358},"_135字符串型","1.3.5字符串型",[19,1361,1362,1363,1365],{},"char 变量名",[228,1364],{},"=\"字符串值\"",[220,1367,1369],{"className":222,"code":1368,"language":224,"meta":141,"style":141},"\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",[30,1370,1371,1376,1381,1386,1391,1405,1418,1423,1429,1441],{"__ignoreMap":141},[228,1372,1373],{"class":230,"line":231},[228,1374,1375],{"class":297},"\u002F\u002Fc风格字符串\n",[228,1377,1378],{"class":230,"line":142},[228,1379,1380],{"class":297},"\u002F\u002F注意事项：\n",[228,1382,1383],{"class":230,"line":1293},[228,1384,1385],{"class":297},"\u002F\u002F1.char字符串名[]\n",[228,1387,1388],{"class":230,"line":1308},[228,1389,1390],{"class":297},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[228,1392,1393,1395,1398,1400,1402],{"class":230,"line":1314},[228,1394,335],{"class":234},[228,1396,1397],{"class":238}," str[]",[228,1399,284],{"class":234},[228,1401,1300],{"class":343},[228,1403,1404],{"class":238},";\n",[228,1406,1407,1409,1411,1414,1416],{"class":230,"line":1328},[228,1408,1279],{"class":238},[228,1410,1282],{"class":234},[228,1412,1413],{"class":238},"str",[228,1415,1282],{"class":234},[228,1417,1305],{"class":238},[228,1419,1420],{"class":230,"line":1334},[228,1421,1422],{"class":297},"\u002F\u002Fc++风格字符串\n",[228,1424,1426],{"class":230,"line":1425},8,[228,1427,1428],{"class":297},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[228,1430,1432,1435,1437,1439],{"class":230,"line":1431},9,[228,1433,1434],{"class":238},"string str2",[228,1436,284],{"class":234},[228,1438,1300],{"class":343},[228,1440,1404],{"class":238},[228,1442,1444,1446,1448,1451,1453],{"class":230,"line":1443},10,[228,1445,1279],{"class":238},[228,1447,1282],{"class":234},[228,1449,1450],{"class":238},"str2",[228,1452,1282],{"class":234},[228,1454,1305],{"class":238},[200,1456,1458],{"id":1457},"_136布尔类型bool","1.3.6布尔类型bool",[220,1460,1462],{"className":222,"code":1461,"language":224,"meta":141,"style":141},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[30,1463,1464,1479],{"__ignoreMap":141},[228,1465,1466,1469,1472,1474,1477],{"class":230,"line":231},[228,1467,1468],{"class":234},"bool",[228,1470,1471],{"class":238}," flag",[228,1473,284],{"class":234},[228,1475,1476],{"class":287},"true",[228,1478,1404],{"class":238},[228,1480,1481,1484,1487,1490,1492,1494],{"class":230,"line":142},[228,1482,1483],{"class":238},"cout",[228,1485,1486],{"class":234},"\u003C\u003Csizeof",[228,1488,1489],{"class":238},"(flag)",[228,1491,1282],{"class":234},[228,1493,1352],{"class":238},[228,1495,1496],{"class":297}," \u002F\u002F查看布尔占内存空间\n",[14,1498,1500],{"id":1499},"_14键盘输入cin","1.4键盘输入cin",[220,1502,1504],{"className":222,"code":1503,"language":224,"meta":141,"style":141},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[30,1505,1506,1519,1536,1547],{"__ignoreMap":141},[228,1507,1508,1510,1513,1515,1517],{"class":230,"line":231},[228,1509,242],{"class":234},[228,1511,1512],{"class":238}," a",[228,1514,284],{"class":234},[228,1516,430],{"class":287},[228,1518,1404],{"class":238},[228,1520,1521,1523,1525,1528,1530,1532,1534],{"class":230,"line":142},[228,1522,1483],{"class":238},[228,1524,1282],{"class":234},[228,1526,1527],{"class":343},"\"请给整型变量a赋值\"",[228,1529,1282],{"class":234},[228,1531,476],{"class":238},[228,1533,1282],{"class":234},[228,1535,1305],{"class":238},[228,1537,1538,1541,1544],{"class":230,"line":1293},[228,1539,1540],{"class":238},"cin ",[228,1542,1543],{"class":234},">>",[228,1545,1546],{"class":238}," a;\n",[228,1548,1549,1551,1553,1556,1559,1561,1563],{"class":230,"line":1308},[228,1550,1279],{"class":238},[228,1552,1282],{"class":234},[228,1554,1555],{"class":343}," \"整型变量a=\"",[228,1557,1558],{"class":234}," \u003C\u003C",[228,1560,476],{"class":238},[228,1562,1282],{"class":234},[228,1564,1305],{"class":238},[14,1566,1568],{"id":1567},"_15运算符","1.5运算符",[200,1570,1572],{"id":1571},"_151算术运算符","1.5.1算术运算符",[19,1574,1575,1579],{},[1576,1577],"img",{"alt":141,"src":1578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[183,1581,1582,1585,1588],{},[186,1583,1584],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[186,1586,1587],{},"两个小数不可以做取模运算",[186,1589,1590],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[200,1592,1594],{"id":1593},"_152赋值运算符","1.5.2赋值运算符",[19,1596,1597],{},[1576,1598],{"alt":141,"src":1599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[200,1601,1603],{"id":1602},"_153比较运算符","1.5.3比较运算符",[19,1605,1606],{},[1576,1607],{"alt":141,"src":1608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[200,1610,1612],{"id":1611},"_154逻辑运算符","1.5.4逻辑运算符",[19,1614,1615],{},[1576,1616],{"alt":141,"src":1617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,1619,1621],{"id":1620},"_16程序流程结构","1.6程序流程结构",[200,1623,1625],{"id":1624},"_161选择结构","1.6.1选择结构",[183,1627,1628],{},[186,1629,1630],{},"if语句\n单行、多行、多条件if语句",[220,1632,1634],{"className":222,"code":1633,"language":224,"meta":141,"style":141},"\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",[30,1635,1636,1641,1656,1661,1675,1680,1685,1694,1707,1711,1724,1729,1735,1740,1754,1759,1765,1786,1791,1805,1810,1839,1844,1861,1866,1871,1876,1890,1895],{"__ignoreMap":141},[228,1637,1638],{"class":230,"line":231},[228,1639,1640],{"class":297},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[228,1642,1643,1646,1649,1651,1654],{"class":230,"line":142},[228,1644,1645],{"class":234},"if",[228,1647,1648],{"class":238},"(score",[228,1650,1198],{"class":234},[228,1652,1653],{"class":287},"600",[228,1655,245],{"class":238},[228,1657,1658],{"class":230,"line":1293},[228,1659,1660],{"class":238},"{\n",[228,1662,1663,1666,1668,1671,1673],{"class":230,"line":1308},[228,1664,1665],{"class":238},"    cout",[228,1667,1282],{"class":234},[228,1669,1670],{"class":343},"'这是单行if语句'",[228,1672,1282],{"class":234},[228,1674,1305],{"class":238},[228,1676,1677],{"class":230,"line":1314},[228,1678,1679],{"class":238},"}\n",[228,1681,1682],{"class":230,"line":1328},[228,1683,1684],{"class":297},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[228,1686,1687,1689,1691],{"class":230,"line":1334},[228,1688,1540],{"class":238},[228,1690,1543],{"class":234},[228,1692,1693],{"class":238}," score\n",[228,1695,1696,1698,1700,1703,1705],{"class":230,"line":1425},[228,1697,1645],{"class":234},[228,1699,1648],{"class":238},[228,1701,1702],{"class":234},"\u003C=",[228,1704,1653],{"class":287},[228,1706,245],{"class":238},[228,1708,1709],{"class":230,"line":1431},[228,1710,1660],{"class":238},[228,1712,1713,1715,1717,1720,1722],{"class":230,"line":1443},[228,1714,1665],{"class":238},[228,1716,1543],{"class":234},[228,1718,1719],{"class":343},"\"小于等于600\"",[228,1721,1282],{"class":234},[228,1723,1305],{"class":238},[228,1725,1727],{"class":230,"line":1726},11,[228,1728,1679],{"class":238},[228,1730,1732],{"class":230,"line":1731},12,[228,1733,1734],{"class":234},"else\n",[228,1736,1738],{"class":230,"line":1737},13,[228,1739,1660],{"class":238},[228,1741,1743,1745,1747,1750,1752],{"class":230,"line":1742},14,[228,1744,1665],{"class":238},[228,1746,1543],{"class":234},[228,1748,1749],{"class":343},"\"大于600\"",[228,1751,1543],{"class":234},[228,1753,1305],{"class":238},[228,1755,1757],{"class":230,"line":1756},15,[228,1758,1679],{"class":238},[228,1760,1762],{"class":230,"line":1761},16,[228,1763,1764],{"class":297},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[228,1766,1768,1770,1773,1775,1777,1780,1782,1784],{"class":230,"line":1767},17,[228,1769,1645],{"class":234},[228,1771,1772],{"class":238}," (",[228,1774,430],{"class":287},[228,1776,1148],{"class":234},[228,1778,1779],{"class":238},"num",[228,1781,1148],{"class":234},[228,1783,549],{"class":287},[228,1785,245],{"class":238},[228,1787,1789],{"class":230,"line":1788},18,[228,1790,1660],{"class":238},[228,1792,1794,1796,1798,1801,1803],{"class":230,"line":1793},19,[228,1795,1665],{"class":238},[228,1797,1282],{"class":234},[228,1799,1800],{"class":343},"\"小于100\"",[228,1802,1282],{"class":234},[228,1804,1305],{"class":238},[228,1806,1808],{"class":230,"line":1807},20,[228,1809,1679],{"class":238},[228,1811,1813,1816,1819,1822,1825,1827,1830,1832,1834,1837],{"class":230,"line":1812},21,[228,1814,1815],{"class":234},"else",[228,1817,1818],{"class":234}," if",[228,1820,1821],{"class":238}," (nmu",[228,1823,1824],{"class":234},">=",[228,1826,549],{"class":287},[228,1828,1829],{"class":234},"&&",[228,1831,1779],{"class":238},[228,1833,1148],{"class":234},[228,1835,1836],{"class":287},"200",[228,1838,245],{"class":238},[228,1840,1842],{"class":230,"line":1841},22,[228,1843,1660],{"class":238},[228,1845,1847,1849,1851,1854,1856,1858],{"class":230,"line":1846},23,[228,1848,1665],{"class":238},[228,1850,1282],{"class":234},[228,1852,1853],{"class":343},"\"不小于100且小于200\"",[228,1855,1282],{"class":234},[228,1857,1352],{"class":238},[228,1859,1860],{"class":297}," \u002F\u002F可以无限else if,python中是elif：\n",[228,1862,1864],{"class":230,"line":1863},24,[228,1865,1679],{"class":238},[228,1867,1869],{"class":230,"line":1868},25,[228,1870,1734],{"class":234},[228,1872,1874],{"class":230,"line":1873},26,[228,1875,1660],{"class":238},[228,1877,1879,1881,1883,1886,1888],{"class":230,"line":1878},27,[228,1880,1665],{"class":238},[228,1882,1282],{"class":234},[228,1884,1885],{"class":343},"\"不小于200\"",[228,1887,1282],{"class":234},[228,1889,1305],{"class":238},[228,1891,1893],{"class":230,"line":1892},28,[228,1894,1679],{"class":238},[228,1896,1898],{"class":230,"line":1897},29,[228,1899,1900],{"class":297},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[183,1902,1903],{"start":142},[186,1904,1905],{},"三目运算符",[220,1907,1909],{"className":222,"code":1908,"language":224,"meta":141,"style":141},"\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",[30,1910,1911,1916,1921,1947,1969,1986,1991,2014,2029],{"__ignoreMap":141},[228,1912,1913],{"class":230,"line":231},[228,1914,1915],{"class":297},"\u002F\u002F创建三个变量a,b,c\n",[228,1917,1918],{"class":230,"line":142},[228,1919,1920],{"class":297},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[228,1922,1923,1925,1927,1929,1931,1934,1936,1938,1941,1943,1945],{"class":230,"line":1293},[228,1924,242],{"class":234},[228,1926,1512],{"class":238},[228,1928,284],{"class":234},[228,1930,938],{"class":287},[228,1932,1933],{"class":238},",b",[228,1935,284],{"class":234},[228,1937,684],{"class":287},[228,1939,1940],{"class":238},",c",[228,1942,284],{"class":234},[228,1944,430],{"class":287},[228,1946,1404],{"class":238},[228,1948,1949,1951,1953,1956,1958,1960,1962,1964,1966],{"class":230,"line":1308},[228,1950,526],{"class":238},[228,1952,284],{"class":234},[228,1954,1955],{"class":238},"(a",[228,1957,1198],{"class":234},[228,1959,501],{"class":238},[228,1961,1224],{"class":234},[228,1963,476],{"class":238},[228,1965,1097],{"class":234},[228,1967,1968],{"class":238},"b)\n",[228,1970,1971,1973,1975,1978,1980,1982,1984],{"class":230,"line":1314},[228,1972,1483],{"class":238},[228,1974,1282],{"class":234},[228,1976,1977],{"class":343},"\"c=\"",[228,1979,1282],{"class":234},[228,1981,526],{"class":238},[228,1983,1282],{"class":234},[228,1985,1305],{"class":238},[228,1987,1988],{"class":230,"line":1328},[228,1989,1990],{"class":297},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[228,1992,1993,1995,1997,1999,2001,2003,2005,2008,2010,2012],{"class":230,"line":1334},[228,1994,1955],{"class":238},[228,1996,1198],{"class":234},[228,1998,501],{"class":238},[228,2000,1224],{"class":234},[228,2002,476],{"class":238},[228,2004,1097],{"class":234},[228,2006,2007],{"class":238},"b)",[228,2009,284],{"class":234},[228,2011,549],{"class":287},[228,2013,1404],{"class":238},[228,2015,2016,2018,2020,2022,2024,2026],{"class":230,"line":1425},[228,2017,1483],{"class":238},[228,2019,1282],{"class":234},[228,2021,476],{"class":238},[228,2023,1282],{"class":234},[228,2025,1352],{"class":238},[228,2027,2028],{"class":297}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[228,2030,2031,2033,2035,2037,2039,2041],{"class":230,"line":1431},[228,2032,1483],{"class":238},[228,2034,1282],{"class":234},[228,2036,501],{"class":238},[228,2038,1282],{"class":234},[228,2040,1352],{"class":238},[228,2042,2043],{"class":297}," \u002F\u002F10   a>b,b还是原值\n",[183,2045,2046],{"start":1293},[186,2047,2048],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[220,2050,2052],{"className":222,"code":2051,"language":224,"meta":141,"style":141},"\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",[30,2053,2054,2059,2067,2081,2091,2095,2109,2122,2132,2140,2145,2170,2191,2213,2234,2256,2277,2297,2302],{"__ignoreMap":141},[228,2055,2056],{"class":230,"line":231},[228,2057,2058],{"class":297},"\u002F\u002F案例-电影打分\n",[228,2060,2061,2064],{"class":230,"line":142},[228,2062,2063],{"class":234},"#include",[228,2065,2066],{"class":343},"\u003Ciostream>\n",[228,2068,2069,2072,2075,2079],{"class":230,"line":1293},[228,2070,2071],{"class":234},"using",[228,2073,2074],{"class":234}," namespace",[228,2076,2078],{"class":2077},"sScJk"," std",[228,2080,1404],{"class":238},[228,2082,2083,2085,2088],{"class":230,"line":1308},[228,2084,242],{"class":234},[228,2086,2087],{"class":2077}," main",[228,2089,2090],{"class":238},"()\n",[228,2092,2093],{"class":230,"line":1314},[228,2094,1660],{"class":238},[228,2096,2097,2100,2103,2105,2107],{"class":230,"line":1328},[228,2098,2099],{"class":234},"    int",[228,2101,2102],{"class":238}," score",[228,2104,284],{"class":234},[228,2106,430],{"class":287},[228,2108,1404],{"class":238},[228,2110,2111,2113,2115,2118,2120],{"class":230,"line":1334},[228,2112,1665],{"class":238},[228,2114,1282],{"class":234},[228,2116,2117],{"class":343},"\"电影打分：\"",[228,2119,1282],{"class":234},[228,2121,1305],{"class":238},[228,2123,2124,2127,2129],{"class":230,"line":1425},[228,2125,2126],{"class":238},"    cin",[228,2128,1543],{"class":234},[228,2130,2131],{"class":238},"score;\n",[228,2133,2134,2137],{"class":230,"line":1431},[228,2135,2136],{"class":234},"    switch",[228,2138,2139],{"class":238},"(score)\n",[228,2141,2142],{"class":230,"line":1443},[228,2143,2144],{"class":238},"    {\n",[228,2146,2147,2150,2153,2156,2158,2161,2163,2165,2168],{"class":230,"line":1726},[228,2148,2149],{"class":234},"        case",[228,2151,2152],{"class":287}," 10",[228,2154,2155],{"class":238},":cout",[228,2157,1282],{"class":234},[228,2159,2160],{"class":343},"\"经典\"",[228,2162,1282],{"class":234},[228,2164,1352],{"class":238},[228,2166,2167],{"class":234},"break",[228,2169,1404],{"class":238},[228,2171,2172,2174,2177,2179,2181,2183,2185,2187,2189],{"class":230,"line":1731},[228,2173,2149],{"class":234},[228,2175,2176],{"class":287}," 9",[228,2178,2155],{"class":238},[228,2180,1282],{"class":234},[228,2182,2160],{"class":343},[228,2184,1282],{"class":234},[228,2186,1352],{"class":238},[228,2188,2167],{"class":234},[228,2190,1404],{"class":238},[228,2192,2193,2195,2198,2200,2202,2205,2207,2209,2211],{"class":230,"line":1737},[228,2194,2149],{"class":234},[228,2196,2197],{"class":287}," 8",[228,2199,2155],{"class":238},[228,2201,1282],{"class":234},[228,2203,2204],{"class":343},"\"非常好\"",[228,2206,1282],{"class":234},[228,2208,1352],{"class":238},[228,2210,2167],{"class":234},[228,2212,1404],{"class":238},[228,2214,2215,2217,2220,2222,2224,2226,2228,2230,2232],{"class":230,"line":1742},[228,2216,2149],{"class":234},[228,2218,2219],{"class":287}," 7",[228,2221,2155],{"class":238},[228,2223,1282],{"class":234},[228,2225,2204],{"class":343},[228,2227,1282],{"class":234},[228,2229,1352],{"class":238},[228,2231,2167],{"class":234},[228,2233,1404],{"class":238},[228,2235,2236,2238,2241,2243,2245,2248,2250,2252,2254],{"class":230,"line":1756},[228,2237,2149],{"class":234},[228,2239,2240],{"class":287}," 6",[228,2242,2155],{"class":238},[228,2244,1282],{"class":234},[228,2246,2247],{"class":343},"\"一般\"",[228,2249,1282],{"class":234},[228,2251,1352],{"class":238},[228,2253,2167],{"class":234},[228,2255,1404],{"class":238},[228,2257,2258,2260,2263,2265,2267,2269,2271,2273,2275],{"class":230,"line":1761},[228,2259,2149],{"class":234},[228,2261,2262],{"class":287}," 5",[228,2264,2155],{"class":238},[228,2266,1282],{"class":234},[228,2268,2247],{"class":343},[228,2270,1282],{"class":234},[228,2272,1352],{"class":238},[228,2274,2167],{"class":234},[228,2276,1404],{"class":238},[228,2278,2279,2282,2284,2286,2289,2291,2293,2295],{"class":230,"line":1767},[228,2280,2281],{"class":234},"        default",[228,2283,2155],{"class":238},[228,2285,1282],{"class":234},[228,2287,2288],{"class":343},"\"烂片\"",[228,2290,1282],{"class":234},[228,2292,1352],{"class":238},[228,2294,2167],{"class":234},[228,2296,1404],{"class":238},[228,2298,2299],{"class":230,"line":1788},[228,2300,2301],{"class":238},"    }\n",[228,2303,2304],{"class":230,"line":1793},[228,2305,1679],{"class":238},[19,2307,2308],{},"if和switch区别：",[1245,2310,2311,2314],{},[186,2312,2313],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[186,2315,2316],{},"switch优点：结构清晰，执行效率高",[200,2318,2320],{"id":2319},"_162循环结构","1.6.2循环结构",[183,2322,2323],{},[186,2324,2325],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[220,2327,2329],{"className":222,"code":2328,"language":224,"meta":141,"style":141},"\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",[30,2330,2331,2336,2344,2348,2361,2375,2379,2399,2409,2413,2425],{"__ignoreMap":141},[228,2332,2333],{"class":230,"line":231},[228,2334,2335],{"class":297},"\u002F\u002F打印0-9数字\n",[228,2337,2338,2340,2342],{"class":230,"line":142},[228,2339,242],{"class":234},[228,2341,2087],{"class":2077},[228,2343,2090],{"class":238},[228,2345,2346],{"class":230,"line":1293},[228,2347,1660],{"class":238},[228,2349,2350,2352,2355,2357,2359],{"class":230,"line":1308},[228,2351,2099],{"class":234},[228,2353,2354],{"class":238}," num",[228,2356,284],{"class":234},[228,2358,430],{"class":287},[228,2360,1404],{"class":238},[228,2362,2363,2366,2369,2371,2373],{"class":230,"line":1314},[228,2364,2365],{"class":234},"    while",[228,2367,2368],{"class":238},"(num",[228,2370,1148],{"class":234},[228,2372,684],{"class":287},[228,2374,245],{"class":238},[228,2376,2377],{"class":230,"line":1328},[228,2378,2144],{"class":238},[228,2380,2381,2384,2387,2389,2391,2393,2396],{"class":230,"line":1334},[228,2382,2383],{"class":2077},"       std",[228,2385,2386],{"class":238},"::cout",[228,2388,1282],{"class":234},[228,2390,1779],{"class":238},[228,2392,1282],{"class":234},[228,2394,2395],{"class":2077},"std",[228,2397,2398],{"class":238},"::endl;\n",[228,2400,2401,2404,2407],{"class":230,"line":1425},[228,2402,2403],{"class":238},"        num",[228,2405,2406],{"class":234},"++",[228,2408,1404],{"class":238},[228,2410,2411],{"class":230,"line":1431},[228,2412,2301],{"class":238},[228,2414,2415,2418,2420,2423],{"class":230,"line":1443},[228,2416,2417],{"class":2077},"    system",[228,2419,239],{"class":238},[228,2421,2422],{"class":343},"\"pause\"",[228,2424,245],{"class":238},[228,2426,2427],{"class":230,"line":1726},[228,2428,1679],{"class":238},[19,2430,2431],{},"注意：写好循环条件，避免死循环情况",[220,2433,2435],{"className":222,"code":2434,"language":224,"meta":141,"style":141},"\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",[30,2436,2437,2442,2449,2456,2466,2474,2478,2483,2510,2515,2520,2528,2555,2560,2565,2578,2588,2592,2602,2607,2620,2625,2639,2644,2659,2663,2676,2680,2685,2689,2703,2711,2716,2722,2728,2733],{"__ignoreMap":141},[228,2438,2439],{"class":230,"line":231},[228,2440,2441],{"class":297},"\u002F\u002F循环结构-猜数字\n",[228,2443,2444,2446],{"class":230,"line":142},[228,2445,2063],{"class":234},[228,2447,2448],{"class":343}," \u003Ciostream>\n",[228,2450,2451,2453],{"class":230,"line":1293},[228,2452,2063],{"class":234},[228,2454,2455],{"class":343}," \u003Cctime>\n",[228,2457,2458,2460,2462,2464],{"class":230,"line":1308},[228,2459,2071],{"class":234},[228,2461,2074],{"class":234},[228,2463,2078],{"class":2077},[228,2465,1404],{"class":238},[228,2467,2468,2470,2472],{"class":230,"line":1314},[228,2469,242],{"class":234},[228,2471,2087],{"class":2077},[228,2473,2090],{"class":238},[228,2475,2476],{"class":230,"line":1328},[228,2477,1660],{"class":238},[228,2479,2480],{"class":230,"line":1334},[228,2481,2482],{"class":297},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[228,2484,2485,2488,2491,2494,2497,2499,2502,2504,2507],{"class":230,"line":1425},[228,2486,2487],{"class":2077},"    srand",[228,2489,2490],{"class":238},"((",[228,2492,2493],{"class":234},"unsigned",[228,2495,2496],{"class":234}," int",[228,2498,667],{"class":238},[228,2500,2501],{"class":2077},"time",[228,2503,239],{"class":238},[228,2505,2506],{"class":287},"NULL",[228,2508,2509],{"class":238},"));\n",[228,2511,2512],{"class":230,"line":1431},[228,2513,2514],{"emptyLinePlaceholder":157},"\n",[228,2516,2517],{"class":230,"line":1443},[228,2518,2519],{"class":297},"    \u002F\u002F1.系统生成随机数\n",[228,2521,2522,2525],{"class":230,"line":1726},[228,2523,2524],{"class":297},"    \u002F\u002Frand()%100",[228,2526,2527],{"class":297}," \u002F\u002F生成0-99的随机数\n",[228,2529,2530,2532,2534,2536,2539,2542,2544,2546,2548,2550,2552],{"class":230,"line":1731},[228,2531,2099],{"class":234},[228,2533,2354],{"class":238},[228,2535,284],{"class":234},[228,2537,2538],{"class":2077},"rand",[228,2540,2541],{"class":238},"()",[228,2543,566],{"class":234},[228,2545,549],{"class":287},[228,2547,719],{"class":234},[228,2549,456],{"class":287},[228,2551,294],{"class":238},[228,2553,2554],{"class":297}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[228,2556,2557],{"class":230,"line":1737},[228,2558,2559],{"class":297},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[228,2561,2562],{"class":230,"line":1742},[228,2563,2564],{"class":297},"    \u002F\u002F2.玩家猜测\n",[228,2566,2567,2569,2572,2574,2576],{"class":230,"line":1756},[228,2568,2099],{"class":234},[228,2570,2571],{"class":238}," val",[228,2573,284],{"class":234},[228,2575,430],{"class":287},[228,2577,1404],{"class":238},[228,2579,2580,2582,2584,2586],{"class":230,"line":1761},[228,2581,2365],{"class":234},[228,2583,1772],{"class":238},[228,2585,456],{"class":287},[228,2587,245],{"class":238},[228,2589,2590],{"class":230,"line":1767},[228,2591,2144],{"class":238},[228,2593,2594,2597,2599],{"class":230,"line":1788},[228,2595,2596],{"class":238},"        cin",[228,2598,1543],{"class":234},[228,2600,2601],{"class":238},"val;\n",[228,2603,2604],{"class":230,"line":1793},[228,2605,2606],{"class":297},"        \u002F\u002F3.判断玩家猜测\n",[228,2608,2609,2612,2615,2617],{"class":230,"line":1807},[228,2610,2611],{"class":234},"        if",[228,2613,2614],{"class":238},"(val",[228,2616,1148],{"class":234},[228,2618,2619],{"class":238},"num) \n",[228,2621,2622],{"class":230,"line":1812},[228,2623,2624],{"class":238},"        {\n",[228,2626,2627,2630,2632,2635,2637],{"class":230,"line":1841},[228,2628,2629],{"class":238},"            cout",[228,2631,1282],{"class":234},[228,2633,2634],{"class":343},"\"猜小了！\"",[228,2636,1282],{"class":234},[228,2638,1305],{"class":238},[228,2640,2641],{"class":230,"line":1846},[228,2642,2643],{"class":238},"        }\n",[228,2645,2646,2649,2651,2654,2656],{"class":230,"line":1863},[228,2647,2648],{"class":234},"        else",[228,2650,1818],{"class":234},[228,2652,2653],{"class":238}," (val",[228,2655,1198],{"class":234},[228,2657,2658],{"class":238},"num)\n",[228,2660,2661],{"class":230,"line":1868},[228,2662,2624],{"class":238},[228,2664,2665,2667,2669,2672,2674],{"class":230,"line":1873},[228,2666,2629],{"class":238},[228,2668,1282],{"class":234},[228,2670,2671],{"class":343},"\"猜大了！\"",[228,2673,1282],{"class":234},[228,2675,1305],{"class":238},[228,2677,2678],{"class":230,"line":1878},[228,2679,2643],{"class":238},[228,2681,2682],{"class":230,"line":1892},[228,2683,2684],{"class":234},"        else\n",[228,2686,2687],{"class":230,"line":1897},[228,2688,2624],{"class":238},[228,2690,2692,2694,2696,2699,2701],{"class":230,"line":2691},30,[228,2693,2629],{"class":238},[228,2695,1282],{"class":234},[228,2697,2698],{"class":343},"\"猜对了！\"",[228,2700,1282],{"class":234},[228,2702,1305],{"class":238},[228,2704,2706,2709],{"class":230,"line":2705},31,[228,2707,2708],{"class":234},"            break",[228,2710,1404],{"class":238},[228,2712,2714],{"class":230,"line":2713},32,[228,2715,2643],{"class":238},[228,2717,2719],{"class":230,"line":2718},33,[228,2720,2721],{"class":297},"        \u002F\u002F猜对 退出游戏\n",[228,2723,2725],{"class":230,"line":2724},34,[228,2726,2727],{"class":297},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[228,2729,2731],{"class":230,"line":2730},35,[228,2732,2301],{"class":238},[228,2734,2736],{"class":230,"line":2735},36,[228,2737,1679],{"class":238},[183,2739,2740],{"start":142},[186,2741,2742,2743,2746],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[388,2744,2745],{},"do...while会先执行一次循环语句","，在判断循环语句",[220,2748,2750],{"className":222,"code":2749,"language":224,"meta":141,"style":141},"\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",[30,2751,2752,2757,2765,2769,2781,2789,2793,2810,2817,2821,2834,2844],{"__ignoreMap":141},[228,2753,2754],{"class":230,"line":231},[228,2755,2756],{"class":297},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[228,2758,2759,2761,2763],{"class":230,"line":142},[228,2760,242],{"class":234},[228,2762,2087],{"class":2077},[228,2764,2090],{"class":238},[228,2766,2767],{"class":230,"line":1293},[228,2768,1660],{"class":238},[228,2770,2771,2773,2775,2777,2779],{"class":230,"line":1308},[228,2772,2099],{"class":234},[228,2774,2354],{"class":238},[228,2776,284],{"class":234},[228,2778,430],{"class":287},[228,2780,1404],{"class":238},[228,2782,2783,2786],{"class":230,"line":1314},[228,2784,2785],{"class":234},"    do",[228,2787,2788],{"class":238}," \n",[228,2790,2791],{"class":230,"line":1328},[228,2792,2144],{"class":238},[228,2794,2795,2798,2800,2802,2804,2806,2808],{"class":230,"line":1334},[228,2796,2797],{"class":2077},"        std",[228,2799,2386],{"class":238},[228,2801,1282],{"class":234},[228,2803,1779],{"class":238},[228,2805,1282],{"class":234},[228,2807,2395],{"class":2077},[228,2809,2398],{"class":238},[228,2811,2812,2814],{"class":230,"line":1425},[228,2813,2403],{"class":238},[228,2815,2816],{"class":234},"++\n",[228,2818,2819],{"class":230,"line":1431},[228,2820,2301],{"class":238},[228,2822,2823,2825,2827,2829,2831],{"class":230,"line":1443},[228,2824,2365],{"class":234},[228,2826,2368],{"class":238},[228,2828,1148],{"class":234},[228,2830,684],{"class":287},[228,2832,2833],{"class":238},");\n",[228,2835,2836,2838,2840,2842],{"class":230,"line":1726},[228,2837,2417],{"class":2077},[228,2839,239],{"class":238},[228,2841,2422],{"class":343},[228,2843,2833],{"class":238},[228,2845,2846],{"class":230,"line":1731},[228,2847,1679],{"class":238},[19,2849,2850],{},"案例-水仙花数",[19,2852,2853],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,2855,2856],{},"例如：1^3+5^3+3^3=153",[19,2858,2859],{},"请用do...while语句，求出所有3位数的水仙花数",[220,2861,2863],{"className":222,"code":2862,"language":224,"meta":141,"style":141},"#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",[30,2864,2865,2871,2881,2889,2893,2898,2910,2916,2920,2925,2941,2957,2973,2988,3007,3022,3070,3074,3086,3090,3098,3102,3116],{"__ignoreMap":141},[228,2866,2867,2869],{"class":230,"line":231},[228,2868,2063],{"class":234},[228,2870,2448],{"class":343},[228,2872,2873,2875,2877,2879],{"class":230,"line":142},[228,2874,2071],{"class":234},[228,2876,2074],{"class":234},[228,2878,2078],{"class":2077},[228,2880,1404],{"class":238},[228,2882,2883,2885,2887],{"class":230,"line":1293},[228,2884,242],{"class":234},[228,2886,2087],{"class":2077},[228,2888,2090],{"class":238},[228,2890,2891],{"class":230,"line":1308},[228,2892,1660],{"class":238},[228,2894,2895],{"class":230,"line":1314},[228,2896,2897],{"class":297},"    \u002F\u002F1.先打印所有三位数字\n",[228,2899,2900,2902,2904,2906,2908],{"class":230,"line":1328},[228,2901,2099],{"class":234},[228,2903,2354],{"class":238},[228,2905,284],{"class":234},[228,2907,549],{"class":287},[228,2909,1404],{"class":238},[228,2911,2912,2914],{"class":230,"line":1334},[228,2913,2785],{"class":234},[228,2915,2788],{"class":238},[228,2917,2918],{"class":230,"line":1425},[228,2919,2144],{"class":238},[228,2921,2922],{"class":230,"line":1431},[228,2923,2924],{"class":297},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[228,2926,2927,2930,2932,2934,2936,2938],{"class":230,"line":1443},[228,2928,2929],{"class":234},"        int",[228,2931,1512],{"class":238},[228,2933,284],{"class":234},[228,2935,430],{"class":287},[228,2937,294],{"class":238},[228,2939,2940],{"class":297}," \u002F\u002F个位\n",[228,2942,2943,2945,2948,2950,2952,2954],{"class":230,"line":1726},[228,2944,2929],{"class":234},[228,2946,2947],{"class":238}," b",[228,2949,284],{"class":234},[228,2951,430],{"class":287},[228,2953,294],{"class":238},[228,2955,2956],{"class":297}," \u002F\u002F十位\n",[228,2958,2959,2961,2964,2966,2968,2970],{"class":230,"line":1731},[228,2960,2929],{"class":234},[228,2962,2963],{"class":238}," c",[228,2965,284],{"class":234},[228,2967,430],{"class":287},[228,2969,294],{"class":238},[228,2971,2972],{"class":297}," \u002F\u002F百位\n",[228,2974,2975,2978,2980,2982,2984,2986],{"class":230,"line":1737},[228,2976,2977],{"class":238},"        a",[228,2979,284],{"class":234},[228,2981,1779],{"class":238},[228,2983,566],{"class":234},[228,2985,684],{"class":287},[228,2987,1404],{"class":238},[228,2989,2990,2993,2995,2997,2999,3001,3003,3005],{"class":230,"line":1742},[228,2991,2992],{"class":238},"        b",[228,2994,284],{"class":234},[228,2996,1779],{"class":238},[228,2998,822],{"class":234},[228,3000,684],{"class":287},[228,3002,566],{"class":234},[228,3004,684],{"class":287},[228,3006,1404],{"class":238},[228,3008,3009,3012,3014,3016,3018,3020],{"class":230,"line":1756},[228,3010,3011],{"class":238},"        c",[228,3013,284],{"class":234},[228,3015,1779],{"class":238},[228,3017,822],{"class":234},[228,3019,549],{"class":287},[228,3021,1404],{"class":238},[228,3023,3024,3026,3028,3030,3032,3034,3036,3038,3040,3042,3044,3046,3048,3050,3052,3054,3056,3058,3061,3064,3067],{"class":230,"line":1761},[228,3025,2611],{"class":234},[228,3027,1955],{"class":238},[228,3029,693],{"class":234},[228,3031,476],{"class":238},[228,3033,693],{"class":234},[228,3035,476],{"class":238},[228,3037,719],{"class":234},[228,3039,501],{"class":238},[228,3041,693],{"class":234},[228,3043,501],{"class":238},[228,3045,693],{"class":234},[228,3047,501],{"class":238},[228,3049,719],{"class":234},[228,3051,526],{"class":238},[228,3053,693],{"class":234},[228,3055,526],{"class":238},[228,3057,693],{"class":234},[228,3059,3060],{"class":238},"c ",[228,3062,3063],{"class":234},"==",[228,3065,3066],{"class":238}," num)",[228,3068,3069],{"class":297}," \u002F\u002F如果是水仙花数，才打印\n",[228,3071,3072],{"class":230,"line":1767},[228,3073,2624],{"class":238},[228,3075,3076,3078,3080,3082,3084],{"class":230,"line":1788},[228,3077,2629],{"class":238},[228,3079,1282],{"class":234},[228,3081,1779],{"class":238},[228,3083,1282],{"class":234},[228,3085,1305],{"class":238},[228,3087,3088],{"class":230,"line":1793},[228,3089,2643],{"class":238},[228,3091,3092,3094,3096],{"class":230,"line":1807},[228,3093,2403],{"class":238},[228,3095,2406],{"class":234},[228,3097,1404],{"class":238},[228,3099,3100],{"class":230,"line":1812},[228,3101,2301],{"class":238},[228,3103,3104,3106,3109,3111,3114],{"class":230,"line":1841},[228,3105,2365],{"class":234},[228,3107,3108],{"class":238}," (num ",[228,3110,1148],{"class":234},[228,3112,3113],{"class":287}," 1000",[228,3115,2833],{"class":238},[228,3117,3118],{"class":230,"line":1846},[228,3119,1679],{"class":238},[183,3121,3122],{"start":1293},[186,3123,3124],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[220,3126,3128],{"className":222,"code":3127,"language":224,"meta":141,"style":141},"\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",[30,3129,3130,3135,3164,3168,3180,3184,3189,3200,3207,3211,3225,3229,3236,3240,3252,3261],{"__ignoreMap":141},[228,3131,3132],{"class":230,"line":231},[228,3133,3134],{"class":297},"\u002F\u002F从数字0-9打印\n",[228,3136,3137,3140,3142,3144,3147,3149,3151,3154,3156,3158,3160,3162],{"class":230,"line":142},[228,3138,3139],{"class":234},"for",[228,3141,239],{"class":238},[228,3143,242],{"class":234},[228,3145,3146],{"class":238}," i",[228,3148,284],{"class":234},[228,3150,430],{"class":287},[228,3152,3153],{"class":238},";i",[228,3155,1148],{"class":234},[228,3157,684],{"class":287},[228,3159,3153],{"class":238},[228,3161,2406],{"class":234},[228,3163,245],{"class":238},[228,3165,3166],{"class":230,"line":1293},[228,3167,1660],{"class":238},[228,3169,3170,3172,3174,3176,3178],{"class":230,"line":1308},[228,3171,1665],{"class":238},[228,3173,1282],{"class":234},[228,3175,679],{"class":238},[228,3177,1282],{"class":234},[228,3179,1305],{"class":238},[228,3181,3182],{"class":230,"line":1314},[228,3183,1679],{"class":238},[228,3185,3186],{"class":230,"line":1328},[228,3187,3188],{"class":297},"\u002F\u002F上式可以进行拆分\n",[228,3190,3191,3193,3195,3197],{"class":230,"line":1334},[228,3192,242],{"class":234},[228,3194,3146],{"class":238},[228,3196,284],{"class":234},[228,3198,3199],{"class":287},"0\n",[228,3201,3202,3204],{"class":230,"line":1425},[228,3203,3139],{"class":234},[228,3205,3206],{"class":238},"(;;;)\n",[228,3208,3209],{"class":230,"line":1431},[228,3210,1660],{"class":238},[228,3212,3213,3216,3219,3221,3223],{"class":230,"line":1443},[228,3214,3215],{"class":234},"    if",[228,3217,3218],{"class":238},"(i",[228,3220,1824],{"class":234},[228,3222,684],{"class":287},[228,3224,245],{"class":238},[228,3226,3227],{"class":230,"line":1726},[228,3228,2144],{"class":238},[228,3230,3231,3234],{"class":230,"line":1731},[228,3232,3233],{"class":234},"        break",[228,3235,1404],{"class":238},[228,3237,3238],{"class":230,"line":1737},[228,3239,2301],{"class":238},[228,3241,3242,3244,3246,3248,3250],{"class":230,"line":1742},[228,3243,1665],{"class":238},[228,3245,1282],{"class":234},[228,3247,679],{"class":238},[228,3249,1282],{"class":234},[228,3251,1305],{"class":238},[228,3253,3254,3257,3259],{"class":230,"line":1756},[228,3255,3256],{"class":238},"    i",[228,3258,2406],{"class":234},[228,3260,1404],{"class":238},[228,3262,3263],{"class":230,"line":1761},[228,3264,1679],{"class":238},[19,3266,3267],{},"小练习",[220,3269,3271],{"className":222,"code":3270,"language":224,"meta":141,"style":141},"#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",[30,3272,3273,3279,3289,3297,3301,3306,3311,3339,3343,3348,3353,3394,3398,3411,3415,3419,3423,3435,3439,3443],{"__ignoreMap":141},[228,3274,3275,3277],{"class":230,"line":231},[228,3276,2063],{"class":234},[228,3278,2066],{"class":343},[228,3280,3281,3283,3285,3287],{"class":230,"line":142},[228,3282,2071],{"class":234},[228,3284,2074],{"class":234},[228,3286,2078],{"class":2077},[228,3288,1404],{"class":238},[228,3290,3291,3293,3295],{"class":230,"line":1293},[228,3292,242],{"class":234},[228,3294,2087],{"class":2077},[228,3296,2090],{"class":238},[228,3298,3299],{"class":230,"line":1308},[228,3300,1660],{"class":238},[228,3302,3303],{"class":230,"line":1314},[228,3304,3305],{"class":297},"    \u002F\u002F敲桌子案例\n",[228,3307,3308],{"class":230,"line":1328},[228,3309,3310],{"class":297},"    \u002F\u002F1.先输出1-100的数字\n",[228,3312,3313,3316,3318,3320,3322,3324,3326,3329,3331,3333,3335,3337],{"class":230,"line":1334},[228,3314,3315],{"class":234},"    for",[228,3317,239],{"class":238},[228,3319,242],{"class":234},[228,3321,3146],{"class":238},[228,3323,284],{"class":234},[228,3325,456],{"class":287},[228,3327,3328],{"class":238},"; i",[228,3330,1702],{"class":234},[228,3332,549],{"class":287},[228,3334,3328],{"class":238},[228,3336,2406],{"class":234},[228,3338,245],{"class":238},[228,3340,3341],{"class":230,"line":1425},[228,3342,2144],{"class":238},[228,3344,3345],{"class":230,"line":1431},[228,3346,3347],{"class":297},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[228,3349,3350],{"class":230,"line":1443},[228,3351,3352],{"class":297},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[228,3354,3355,3357,3359,3361,3363,3365,3367,3370,3372,3374,3376,3378,3380,3382,3384,3386,3388,3390,3392],{"class":230,"line":1726},[228,3356,2611],{"class":234},[228,3358,3218],{"class":238},[228,3360,566],{"class":234},[228,3362,607],{"class":287},[228,3364,3063],{"class":234},[228,3366,430],{"class":287},[228,3368,3369],{"class":234}," ||",[228,3371,3146],{"class":238},[228,3373,566],{"class":234},[228,3375,684],{"class":287},[228,3377,3063],{"class":234},[228,3379,607],{"class":287},[228,3381,3369],{"class":234},[228,3383,3146],{"class":238},[228,3385,822],{"class":234},[228,3387,684],{"class":287},[228,3389,3063],{"class":234},[228,3391,607],{"class":287},[228,3393,245],{"class":238},[228,3395,3396],{"class":230,"line":1731},[228,3397,2624],{"class":238},[228,3399,3400,3402,3404,3407,3409],{"class":230,"line":1737},[228,3401,2629],{"class":238},[228,3403,1282],{"class":234},[228,3405,3406],{"class":343},"\"敲桌子\"",[228,3408,1282],{"class":234},[228,3410,1305],{"class":238},[228,3412,3413],{"class":230,"line":1742},[228,3414,2643],{"class":238},[228,3416,3417],{"class":230,"line":1756},[228,3418,2684],{"class":234},[228,3420,3421],{"class":230,"line":1761},[228,3422,2624],{"class":238},[228,3424,3425,3427,3429,3431,3433],{"class":230,"line":1767},[228,3426,2629],{"class":238},[228,3428,1282],{"class":234},[228,3430,679],{"class":238},[228,3432,1282],{"class":234},[228,3434,1305],{"class":238},[228,3436,3437],{"class":230,"line":1788},[228,3438,2643],{"class":238},[228,3440,3441],{"class":230,"line":1793},[228,3442,2301],{"class":238},[228,3444,3445],{"class":230,"line":1807},[228,3446,1679],{"class":238},[19,3448,3449],{},"嵌套实现星图",[220,3451,3453],{"className":222,"code":3452,"language":224,"meta":141,"style":141},"#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",[30,3454,3455,3461,3471,3479,3483,3509,3513,3542,3546,3557,3561,3570,3574],{"__ignoreMap":141},[228,3456,3457,3459],{"class":230,"line":231},[228,3458,2063],{"class":234},[228,3460,2066],{"class":343},[228,3462,3463,3465,3467,3469],{"class":230,"line":142},[228,3464,2071],{"class":234},[228,3466,2074],{"class":234},[228,3468,2078],{"class":2077},[228,3470,1404],{"class":238},[228,3472,3473,3475,3477],{"class":230,"line":1293},[228,3474,242],{"class":234},[228,3476,2087],{"class":2077},[228,3478,2090],{"class":238},[228,3480,3481],{"class":230,"line":1308},[228,3482,1660],{"class":238},[228,3484,3485,3487,3489,3491,3493,3495,3497,3499,3501,3503,3505,3507],{"class":230,"line":1314},[228,3486,3315],{"class":234},[228,3488,1772],{"class":238},[228,3490,242],{"class":234},[228,3492,3146],{"class":238},[228,3494,284],{"class":234},[228,3496,430],{"class":287},[228,3498,3153],{"class":238},[228,3500,1148],{"class":234},[228,3502,684],{"class":287},[228,3504,3153],{"class":238},[228,3506,2406],{"class":234},[228,3508,245],{"class":238},[228,3510,3511],{"class":230,"line":1328},[228,3512,2144],{"class":238},[228,3514,3515,3518,3520,3522,3525,3527,3529,3532,3534,3536,3538,3540],{"class":230,"line":1334},[228,3516,3517],{"class":234},"        for",[228,3519,1772],{"class":238},[228,3521,242],{"class":234},[228,3523,3524],{"class":238}," j",[228,3526,284],{"class":234},[228,3528,430],{"class":287},[228,3530,3531],{"class":238},";j",[228,3533,1148],{"class":234},[228,3535,684],{"class":287},[228,3537,3531],{"class":238},[228,3539,2406],{"class":234},[228,3541,245],{"class":238},[228,3543,3544],{"class":230,"line":1425},[228,3545,2624],{"class":238},[228,3547,3548,3550,3552,3555],{"class":230,"line":1431},[228,3549,2629],{"class":238},[228,3551,1282],{"class":234},[228,3553,3554],{"class":343},"\"*\"",[228,3556,1404],{"class":238},[228,3558,3559],{"class":230,"line":1443},[228,3560,2643],{"class":238},[228,3562,3563,3566,3568],{"class":230,"line":1726},[228,3564,3565],{"class":238},"        cout",[228,3567,1282],{"class":234},[228,3569,1305],{"class":238},[228,3571,3572],{"class":230,"line":1731},[228,3573,2301],{"class":238},[228,3575,3576],{"class":230,"line":1737},[228,3577,1679],{"class":238},[19,3579,3580],{},"乘法口诀表",[220,3582,3584],{"className":222,"code":3583,"language":224,"meta":141,"style":141},"#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",[30,3585,3586,3592,3602,3610,3614,3640,3644,3669,3673,3713,3717,3725,3729],{"__ignoreMap":141},[228,3587,3588,3590],{"class":230,"line":231},[228,3589,2063],{"class":234},[228,3591,2448],{"class":343},[228,3593,3594,3596,3598,3600],{"class":230,"line":142},[228,3595,2071],{"class":234},[228,3597,2074],{"class":234},[228,3599,2078],{"class":2077},[228,3601,1404],{"class":238},[228,3603,3604,3606,3608],{"class":230,"line":1293},[228,3605,242],{"class":234},[228,3607,2087],{"class":2077},[228,3609,2090],{"class":238},[228,3611,3612],{"class":230,"line":1308},[228,3613,1660],{"class":238},[228,3615,3616,3618,3620,3622,3624,3626,3628,3630,3632,3634,3636,3638],{"class":230,"line":1314},[228,3617,3315],{"class":234},[228,3619,239],{"class":238},[228,3621,242],{"class":234},[228,3623,3146],{"class":238},[228,3625,284],{"class":234},[228,3627,456],{"class":287},[228,3629,3153],{"class":238},[228,3631,1148],{"class":234},[228,3633,684],{"class":287},[228,3635,3153],{"class":238},[228,3637,2406],{"class":234},[228,3639,245],{"class":238},[228,3641,3642],{"class":230,"line":1328},[228,3643,2144],{"class":238},[228,3645,3646,3648,3650,3652,3654,3656,3658,3660,3662,3665,3667],{"class":230,"line":1334},[228,3647,3517],{"class":234},[228,3649,239],{"class":238},[228,3651,242],{"class":234},[228,3653,3524],{"class":238},[228,3655,284],{"class":234},[228,3657,456],{"class":287},[228,3659,3531],{"class":238},[228,3661,1702],{"class":234},[228,3663,3664],{"class":238},"i;j",[228,3666,2406],{"class":234},[228,3668,245],{"class":238},[228,3670,3671],{"class":230,"line":1425},[228,3672,2624],{"class":238},[228,3674,3675,3677,3679,3681,3683,3685,3687,3689,3691,3694,3696,3698,3700,3702,3704,3707,3709,3711],{"class":230,"line":1431},[228,3676,2629],{"class":238},[228,3678,1282],{"class":234},[228,3680,705],{"class":238},[228,3682,1282],{"class":234},[228,3684,3554],{"class":343},[228,3686,1282],{"class":234},[228,3688,679],{"class":238},[228,3690,1282],{"class":234},[228,3692,3693],{"class":343},"\"=\"",[228,3695,1282],{"class":234},[228,3697,679],{"class":238},[228,3699,693],{"class":234},[228,3701,705],{"class":238},[228,3703,1282],{"class":234},[228,3705,3706],{"class":343},"'",[228,3708,1344],{"class":287},[228,3710,3706],{"class":343},[228,3712,1404],{"class":238},[228,3714,3715],{"class":230,"line":1443},[228,3716,2643],{"class":238},[228,3718,3719,3721,3723],{"class":230,"line":1726},[228,3720,3565],{"class":238},[228,3722,1282],{"class":234},[228,3724,1305],{"class":238},[228,3726,3727],{"class":230,"line":1731},[228,3728,2301],{"class":238},[228,3730,3731],{"class":230,"line":1737},[228,3732,1679],{"class":238},[200,3734,3736],{"id":3735},"_163跳出语句","1.6.3跳出语句",[183,3738,3739],{},[186,3740,3741],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,3743,3744],{},"break使用时机：",[1245,3746,3747,3750,3753],{},[186,3748,3749],{},"出现在switch条件语句中，作用是终止case并跳出switch",[186,3751,3752],{},"出现在循环结构中，作用是跳出当前的循环结构",[186,3754,3755],{},"出现在嵌套循环中，跳出最近的内层循环语句",[183,3757,3758,3761],{"start":142},[186,3759,3760],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[186,3762,3763],{},"goto语句\n语法：goto 标记;",[19,3765,3766],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[220,3768,3770],{"className":222,"code":3769,"language":224,"meta":141,"style":141},"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",[30,3771,3772,3780,3784,3797,3807,3820,3833,3846,3854,3870],{"__ignoreMap":141},[228,3773,3774,3776,3778],{"class":230,"line":231},[228,3775,242],{"class":234},[228,3777,2087],{"class":2077},[228,3779,2090],{"class":238},[228,3781,3782],{"class":230,"line":142},[228,3783,1660],{"class":238},[228,3785,3786,3788,3790,3793,3795],{"class":230,"line":1293},[228,3787,1665],{"class":238},[228,3789,1282],{"class":234},[228,3791,3792],{"class":343},"\"1\"",[228,3794,1282],{"class":234},[228,3796,1305],{"class":238},[228,3798,3799,3802,3805],{"class":230,"line":1308},[228,3800,3801],{"class":234},"    goto",[228,3803,3804],{"class":2077}," FLAG",[228,3806,1404],{"class":238},[228,3808,3809,3811,3813,3816,3818],{"class":230,"line":1314},[228,3810,1665],{"class":238},[228,3812,1282],{"class":234},[228,3814,3815],{"class":343},"\"2\"",[228,3817,1282],{"class":234},[228,3819,1305],{"class":238},[228,3821,3822,3824,3826,3829,3831],{"class":230,"line":1328},[228,3823,1665],{"class":238},[228,3825,1282],{"class":234},[228,3827,3828],{"class":343},"\"3\"",[228,3830,1282],{"class":234},[228,3832,1305],{"class":238},[228,3834,3835,3837,3839,3842,3844],{"class":230,"line":1334},[228,3836,1665],{"class":238},[228,3838,1282],{"class":234},[228,3840,3841],{"class":343},"\"4\"",[228,3843,1282],{"class":234},[228,3845,1305],{"class":238},[228,3847,3848,3851],{"class":230,"line":1425},[228,3849,3850],{"class":2077},"    FLAG",[228,3852,3853],{"class":238},":\n",[228,3855,3856,3858,3860,3863,3865,3867],{"class":230,"line":1431},[228,3857,1665],{"class":238},[228,3859,1282],{"class":234},[228,3861,3862],{"class":343},"\"5\"",[228,3864,1282],{"class":234},[228,3866,1352],{"class":238},[228,3868,3869],{"class":297},"\u002F\u002F跳过了2,3,4,直接到5\n",[228,3871,3872],{"class":230,"line":1443},[228,3873,1679],{"class":238},[14,3875,3877],{"id":3876},"_17数组","1.7数组",[200,3879,3881],{"id":3880},"_171一维数组","1.7.1一维数组",[183,3883,3884],{},[186,3885,3886],{},"一维数组定义方式",[376,3888,3889,3899],{},[379,3890,3891],{},[382,3892,3893,3896],{},[385,3894,3895],{},"方式",[385,3897,3898],{},"注意事项",[423,3900,3901,3915,3925],{},[382,3902,3903,3909],{},[428,3904,3905,3906,294],{},"数据类型 数组名",[228,3907,3908],{},"数组长度",[428,3910,3911,3912,3914],{},"这种方式是先定义再arr",[228,3913,679],{},"赋值",[382,3916,3917,3922],{},[428,3918,3905,3919,3921],{},[228,3920,3908],{},"={值1,值2....};",[428,3923,3924],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[382,3926,3927,3931],{},[428,3928,3905,3929,3921],{},[228,3930],{},[428,3932,3933,3934,3936],{},"int arr",[228,3935],{},";这是不正确的，按照这样的方式定义必须有初始长度",[183,3938,3939],{"start":142},[186,3940,3941],{},"一维数组数组名\n用途：",[1245,3943,3944],{},[186,3945,3946],{},"1.可以统计整个数组在内存中的长度：",[220,3948,3950],{"className":222,"code":3949,"language":224,"meta":141,"style":141},"sizeof(arr);\nsizeof(arr[0]);\n",[30,3951,3952,3959],{"__ignoreMap":141},[228,3953,3954,3956],{"class":230,"line":231},[228,3955,235],{"class":234},[228,3957,3958],{"class":238},"(arr);\n",[228,3960,3961,3963,3966,3968],{"class":230,"line":142},[228,3962,235],{"class":234},[228,3964,3965],{"class":238},"(arr[",[228,3967,430],{"class":287},[228,3969,3970],{"class":238},"]);\n",[1245,3972,3973],{},[186,3974,3975],{},"2.可以获取数组在内存中的首地址:",[220,3977,3979],{"className":222,"code":3978,"language":224,"meta":141,"style":141},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[30,3980,3981,3986,3999,4004],{"__ignoreMap":141},[228,3982,3983],{"class":230,"line":231},[228,3984,3985],{"class":297},"\u002F\u002F查看16进制的首地址\n",[228,3987,3988,3990,3992,3995,3997],{"class":230,"line":142},[228,3989,1483],{"class":238},[228,3991,1282],{"class":234},[228,3993,3994],{"class":238},"arr",[228,3996,1282],{"class":234},[228,3998,1305],{"class":238},[228,4000,4001],{"class":230,"line":1293},[228,4002,4003],{"class":297},"\u002F\u002F看10进制数\n",[228,4005,4006,4008,4010,4012,4014,4016,4018,4021,4023,4025,4027],{"class":230,"line":1308},[228,4007,1483],{"class":238},[228,4009,1282],{"class":234},[228,4011,239],{"class":238},[228,4013,242],{"class":234},[228,4015,667],{"class":238},[228,4017,591],{"class":234},[228,4019,4020],{"class":238},"arr[",[228,4022,430],{"class":287},[228,4024,1178],{"class":238},[228,4026,1282],{"class":234},[228,4028,1305],{"class":238},[19,4030,4031],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1245,4033,4034],{},[186,4035,4036],{},"1️⃣五只小猪称体重",[220,4038,4040],{"className":222,"code":4039,"language":224,"meta":141,"style":141},"#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",[30,4041,4042,4048,4058,4066,4070,4110,4123,4149,4153,4165,4169,4179,4183,4187,4200,4210],{"__ignoreMap":141},[228,4043,4044,4046],{"class":230,"line":231},[228,4045,2063],{"class":234},[228,4047,2066],{"class":343},[228,4049,4050,4052,4054,4056],{"class":230,"line":142},[228,4051,2071],{"class":234},[228,4053,2074],{"class":234},[228,4055,2078],{"class":2077},[228,4057,1404],{"class":238},[228,4059,4060,4062,4064],{"class":230,"line":1293},[228,4061,242],{"class":234},[228,4063,2087],{"class":2077},[228,4065,2090],{"class":238},[228,4067,4068],{"class":230,"line":1308},[228,4069,1660],{"class":238},[228,4071,4072,4074,4077,4079,4081,4083,4085,4088,4090,4093,4095,4097,4099,4102,4104,4107],{"class":230,"line":1314},[228,4073,2099],{"class":234},[228,4075,4076],{"class":238}," arr[",[228,4078,557],{"class":287},[228,4080,1178],{"class":238},[228,4082,284],{"class":234},[228,4084,1134],{"class":238},[228,4086,4087],{"class":287},"300",[228,4089,616],{"class":238},[228,4091,4092],{"class":287},"350",[228,4094,616],{"class":238},[228,4096,1836],{"class":287},[228,4098,616],{"class":238},[228,4100,4101],{"class":287},"400",[228,4103,616],{"class":238},[228,4105,4106],{"class":287},"250",[228,4108,4109],{"class":238},"};\n",[228,4111,4112,4114,4117,4119,4121],{"class":230,"line":1328},[228,4113,2099],{"class":234},[228,4115,4116],{"class":238}," tmp",[228,4118,284],{"class":234},[228,4120,430],{"class":287},[228,4122,1404],{"class":238},[228,4124,4125,4127,4129,4131,4133,4135,4137,4139,4141,4143,4145,4147],{"class":230,"line":1334},[228,4126,3315],{"class":234},[228,4128,1772],{"class":238},[228,4130,242],{"class":234},[228,4132,3146],{"class":238},[228,4134,284],{"class":234},[228,4136,430],{"class":287},[228,4138,3153],{"class":238},[228,4140,1148],{"class":234},[228,4142,557],{"class":287},[228,4144,3153],{"class":238},[228,4146,2406],{"class":234},[228,4148,245],{"class":238},[228,4150,4151],{"class":230,"line":1425},[228,4152,2144],{"class":238},[228,4154,4155,4157,4160,4162],{"class":230,"line":1431},[228,4156,2611],{"class":234},[228,4158,4159],{"class":238},"(tmp",[228,4161,1148],{"class":234},[228,4163,4164],{"class":238},"arr[i])\n",[228,4166,4167],{"class":230,"line":1443},[228,4168,2624],{"class":238},[228,4170,4171,4174,4176],{"class":230,"line":1726},[228,4172,4173],{"class":238},"            tmp",[228,4175,284],{"class":234},[228,4177,4178],{"class":238},"arr[i];\n",[228,4180,4181],{"class":230,"line":1731},[228,4182,2643],{"class":238},[228,4184,4185],{"class":230,"line":1737},[228,4186,2301],{"class":238},[228,4188,4189,4191,4193,4196,4198],{"class":230,"line":1742},[228,4190,1665],{"class":238},[228,4192,1282],{"class":234},[228,4194,4195],{"class":238},"tmp",[228,4197,1282],{"class":234},[228,4199,1305],{"class":238},[228,4201,4202,4205,4208],{"class":230,"line":1756},[228,4203,4204],{"class":234},"    return",[228,4206,4207],{"class":287}," 0",[228,4209,1404],{"class":238},[228,4211,4212],{"class":230,"line":1761},[228,4213,1679],{"class":238},[1245,4215,4216],{},[186,4217,4218],{},"2️⃣数组元素逆置",[220,4220,4222],{"className":222,"code":4221,"language":224,"meta":141,"style":141},"\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",[30,4223,4224,4229,4235,4245,4253,4257,4292,4308,4340,4353,4358,4363,4375,4385,4395,4400,4409,4419,4424,4429,4456,4460,4476,4480,4491,4500],{"__ignoreMap":141},[228,4225,4226],{"class":230,"line":231},[228,4227,4228],{"class":297},"\u002F\u002F元素逆置\n",[228,4230,4231,4233],{"class":230,"line":142},[228,4232,2063],{"class":234},[228,4234,2066],{"class":343},[228,4236,4237,4239,4241,4243],{"class":230,"line":1293},[228,4238,2071],{"class":234},[228,4240,2074],{"class":234},[228,4242,2078],{"class":2077},[228,4244,1404],{"class":238},[228,4246,4247,4249,4251],{"class":230,"line":1308},[228,4248,242],{"class":234},[228,4250,2087],{"class":2077},[228,4252,2090],{"class":238},[228,4254,4255],{"class":230,"line":1314},[228,4256,1660],{"class":238},[228,4258,4259,4262,4264,4266,4268,4270,4272,4274,4276,4278,4280,4282,4284,4286,4288,4290],{"class":230,"line":1328},[228,4260,4261],{"class":234},"   int",[228,4263,4076],{"class":238},[228,4265,557],{"class":287},[228,4267,1178],{"class":238},[228,4269,284],{"class":234},[228,4271,1134],{"class":238},[228,4273,456],{"class":287},[228,4275,616],{"class":238},[228,4277,316],{"class":287},[228,4279,616],{"class":238},[228,4281,310],{"class":287},[228,4283,616],{"class":238},[228,4285,531],{"class":287},[228,4287,616],{"class":238},[228,4289,557],{"class":287},[228,4291,4109],{"class":238},[228,4293,4294,4296,4299,4301,4303,4305],{"class":230,"line":1334},[228,4295,4261],{"class":234},[228,4297,4298],{"class":238}," start",[228,4300,284],{"class":234},[228,4302,430],{"class":287},[228,4304,294],{"class":238},[228,4306,4307],{"class":297},"\u002F\u002F起始下标\n",[228,4309,4310,4312,4315,4318,4321,4324,4326,4328,4331,4333,4335,4337],{"class":230,"line":1425},[228,4311,4261],{"class":234},[228,4313,4314],{"class":238}," end",[228,4316,4317],{"class":234},"=sizeof",[228,4319,4320],{"class":238},"(arr)",[228,4322,4323],{"class":234},"\u002Fsizeof",[228,4325,3965],{"class":238},[228,4327,430],{"class":287},[228,4329,4330],{"class":238},"])",[228,4332,770],{"class":234},[228,4334,456],{"class":287},[228,4336,294],{"class":238},[228,4338,4339],{"class":297},"\u002F\u002F结束下标\n",[228,4341,4342,4345,4348,4350],{"class":230,"line":1431},[228,4343,4344],{"class":234},"   while",[228,4346,4347],{"class":238}," (start",[228,4349,1148],{"class":234},[228,4351,4352],{"class":238},"end)\n",[228,4354,4355],{"class":230,"line":1443},[228,4356,4357],{"class":238},"   {\n",[228,4359,4360],{"class":230,"line":1726},[228,4361,4362],{"class":297},"    \u002F\u002F实现元素互换代码\n",[228,4364,4365,4367,4370,4372],{"class":230,"line":1731},[228,4366,2099],{"class":234},[228,4368,4369],{"class":238}," temp",[228,4371,284],{"class":234},[228,4373,4374],{"class":238},"arr[start];\n",[228,4376,4377,4380,4382],{"class":230,"line":1737},[228,4378,4379],{"class":238},"    arr[start]",[228,4381,284],{"class":234},[228,4383,4384],{"class":238},"arr[end];\n",[228,4386,4387,4390,4392],{"class":230,"line":1742},[228,4388,4389],{"class":238},"    arr[end]",[228,4391,284],{"class":234},[228,4393,4394],{"class":238},"temp;\n",[228,4396,4397],{"class":230,"line":1756},[228,4398,4399],{"class":297},"    \u002F\u002F下标更新\n",[228,4401,4402,4405,4407],{"class":230,"line":1761},[228,4403,4404],{"class":238},"    start",[228,4406,2406],{"class":234},[228,4408,1404],{"class":238},[228,4410,4411,4414,4417],{"class":230,"line":1767},[228,4412,4413],{"class":238},"    end",[228,4415,4416],{"class":234},"--",[228,4418,1404],{"class":238},[228,4420,4421],{"class":230,"line":1788},[228,4422,4423],{"class":238},"   }\n",[228,4425,4426],{"class":230,"line":1793},[228,4427,4428],{"class":297},"   \u002F\u002F输出逆置后的数组\n",[228,4430,4431,4434,4436,4438,4440,4442,4444,4446,4448,4450,4452,4454],{"class":230,"line":1807},[228,4432,4433],{"class":234},"   for",[228,4435,1772],{"class":238},[228,4437,242],{"class":234},[228,4439,3146],{"class":238},[228,4441,284],{"class":234},[228,4443,430],{"class":287},[228,4445,3153],{"class":238},[228,4447,1148],{"class":234},[228,4449,557],{"class":287},[228,4451,3153],{"class":238},[228,4453,2406],{"class":234},[228,4455,245],{"class":238},[228,4457,4458],{"class":230,"line":1812},[228,4459,4357],{"class":238},[228,4461,4462,4464,4466,4469,4471,4474],{"class":230,"line":1841},[228,4463,1665],{"class":238},[228,4465,1282],{"class":234},[228,4467,4468],{"class":238},"arr[i]",[228,4470,1282],{"class":234},[228,4472,4473],{"class":343},"\" \"",[228,4475,1404],{"class":238},[228,4477,4478],{"class":230,"line":1846},[228,4479,4423],{"class":238},[228,4481,4482,4485,4487,4489],{"class":230,"line":1863},[228,4483,4484],{"class":2077},"   system",[228,4486,239],{"class":238},[228,4488,2422],{"class":343},[228,4490,2833],{"class":238},[228,4492,4493,4496,4498],{"class":230,"line":1868},[228,4494,4495],{"class":234},"   return",[228,4497,4207],{"class":287},[228,4499,1404],{"class":238},[228,4501,4502],{"class":230,"line":1873},[228,4503,1679],{"class":238},[1245,4505,4506],{},[186,4507,4508],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[220,4510,4512],{"className":222,"code":4511,"language":224,"meta":141,"style":141},"\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",[30,4513,4514,4519,4525,4535,4543,4547,4599,4612,4638,4642,4656,4660,4665,4670,4700,4704,4709,4743,4747,4752,4772,4777,4789,4805,4820,4825,4829,4833,4846,4872,4876,4890,4894,4902],{"__ignoreMap":141},[228,4515,4516],{"class":230,"line":231},[228,4517,4518],{"class":297},"\u002F\u002F冒泡排序,升序\n",[228,4520,4521,4523],{"class":230,"line":142},[228,4522,2063],{"class":234},[228,4524,2066],{"class":343},[228,4526,4527,4529,4531,4533],{"class":230,"line":1293},[228,4528,2071],{"class":234},[228,4530,2074],{"class":234},[228,4532,2078],{"class":2077},[228,4534,1404],{"class":238},[228,4536,4537,4539,4541],{"class":230,"line":1308},[228,4538,242],{"class":234},[228,4540,2087],{"class":2077},[228,4542,2090],{"class":238},[228,4544,4545],{"class":230,"line":1314},[228,4546,1660],{"class":238},[228,4548,4549,4551,4553,4555,4558,4560,4563,4565,4567,4569,4571,4573,4575,4577,4579,4581,4583,4585,4587,4589,4591,4593,4595,4597],{"class":230,"line":1328},[228,4550,2099],{"class":234},[228,4552,4076],{"class":238},[228,4554,658],{"class":287},[228,4556,4557],{"class":238},"] ",[228,4559,284],{"class":234},[228,4561,4562],{"class":238}," {",[228,4564,531],{"class":287},[228,4566,616],{"class":238},[228,4568,316],{"class":287},[228,4570,616],{"class":238},[228,4572,633],{"class":287},[228,4574,616],{"class":238},[228,4576,430],{"class":287},[228,4578,616],{"class":238},[228,4580,557],{"class":287},[228,4582,616],{"class":238},[228,4584,607],{"class":287},[228,4586,616],{"class":238},[228,4588,456],{"class":287},[228,4590,616],{"class":238},[228,4592,310],{"class":287},[228,4594,616],{"class":238},[228,4596,658],{"class":287},[228,4598,4109],{"class":238},[228,4600,4601,4603,4605,4608,4610],{"class":230,"line":1334},[228,4602,1665],{"class":238},[228,4604,1282],{"class":234},[228,4606,4607],{"class":343},"\"排序前：\"",[228,4609,1282],{"class":234},[228,4611,1305],{"class":238},[228,4613,4614,4616,4618,4620,4622,4624,4626,4628,4630,4632,4634,4636],{"class":230,"line":1425},[228,4615,3315],{"class":234},[228,4617,1772],{"class":238},[228,4619,242],{"class":234},[228,4621,3146],{"class":238},[228,4623,284],{"class":234},[228,4625,430],{"class":287},[228,4627,3153],{"class":238},[228,4629,1148],{"class":234},[228,4631,658],{"class":287},[228,4633,3153],{"class":238},[228,4635,2406],{"class":234},[228,4637,245],{"class":238},[228,4639,4640],{"class":230,"line":1431},[228,4641,2144],{"class":238},[228,4643,4644,4646,4648,4650,4652,4654],{"class":230,"line":1443},[228,4645,3565],{"class":238},[228,4647,1282],{"class":234},[228,4649,4468],{"class":238},[228,4651,1282],{"class":234},[228,4653,4473],{"class":343},[228,4655,1404],{"class":238},[228,4657,4658],{"class":230,"line":1726},[228,4659,2301],{"class":238},[228,4661,4662],{"class":230,"line":1731},[228,4663,4664],{"class":297},"    \u002F\u002F开始冒泡排序\n",[228,4666,4667],{"class":230,"line":1737},[228,4668,4669],{"class":297},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[228,4671,4672,4674,4676,4678,4680,4682,4684,4686,4688,4690,4692,4694,4696,4698],{"class":230,"line":1742},[228,4673,3315],{"class":234},[228,4675,1772],{"class":238},[228,4677,242],{"class":234},[228,4679,3146],{"class":238},[228,4681,284],{"class":234},[228,4683,430],{"class":287},[228,4685,3153],{"class":238},[228,4687,1148],{"class":234},[228,4689,658],{"class":287},[228,4691,770],{"class":234},[228,4693,456],{"class":287},[228,4695,3153],{"class":238},[228,4697,2406],{"class":234},[228,4699,245],{"class":238},[228,4701,4702],{"class":230,"line":1756},[228,4703,2144],{"class":238},[228,4705,4706],{"class":230,"line":1761},[228,4707,4708],{"class":297},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[228,4710,4711,4713,4715,4717,4719,4721,4723,4725,4727,4729,4731,4733,4735,4737,4739,4741],{"class":230,"line":1767},[228,4712,3517],{"class":234},[228,4714,1772],{"class":238},[228,4716,242],{"class":234},[228,4718,3524],{"class":238},[228,4720,284],{"class":234},[228,4722,430],{"class":287},[228,4724,3531],{"class":238},[228,4726,1148],{"class":234},[228,4728,658],{"class":287},[228,4730,770],{"class":234},[228,4732,679],{"class":238},[228,4734,770],{"class":234},[228,4736,456],{"class":287},[228,4738,3531],{"class":238},[228,4740,2406],{"class":234},[228,4742,245],{"class":238},[228,4744,4745],{"class":230,"line":1788},[228,4746,2624],{"class":238},[228,4748,4749],{"class":230,"line":1793},[228,4750,4751],{"class":297},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[228,4753,4754,4757,4760,4762,4765,4767,4769],{"class":230,"line":1807},[228,4755,4756],{"class":234},"            if",[228,4758,4759],{"class":238},"(arr[j]",[228,4761,1198],{"class":234},[228,4763,4764],{"class":238},"arr[j",[228,4766,719],{"class":234},[228,4768,456],{"class":287},[228,4770,4771],{"class":238},"])\n",[228,4773,4774],{"class":230,"line":1812},[228,4775,4776],{"class":238},"            {\n",[228,4778,4779,4782,4784,4786],{"class":230,"line":1841},[228,4780,4781],{"class":234},"                int",[228,4783,4369],{"class":238},[228,4785,284],{"class":234},[228,4787,4788],{"class":238},"arr[j];\n",[228,4790,4791,4794,4796,4798,4800,4802],{"class":230,"line":1846},[228,4792,4793],{"class":238},"                arr[j]",[228,4795,284],{"class":234},[228,4797,4764],{"class":238},[228,4799,719],{"class":234},[228,4801,456],{"class":287},[228,4803,4804],{"class":238},"];\n",[228,4806,4807,4810,4812,4814,4816,4818],{"class":230,"line":1863},[228,4808,4809],{"class":238},"                arr[j",[228,4811,719],{"class":234},[228,4813,456],{"class":287},[228,4815,1178],{"class":238},[228,4817,284],{"class":234},[228,4819,4394],{"class":238},[228,4821,4822],{"class":230,"line":1868},[228,4823,4824],{"class":238},"            }\n",[228,4826,4827],{"class":230,"line":1873},[228,4828,2643],{"class":238},[228,4830,4831],{"class":230,"line":1878},[228,4832,2301],{"class":238},[228,4834,4835,4837,4839,4842,4844],{"class":230,"line":1892},[228,4836,1665],{"class":238},[228,4838,1282],{"class":234},[228,4840,4841],{"class":343},"\"排序后：\"",[228,4843,1282],{"class":234},[228,4845,1305],{"class":238},[228,4847,4848,4850,4852,4854,4856,4858,4860,4862,4864,4866,4868,4870],{"class":230,"line":1897},[228,4849,3315],{"class":234},[228,4851,1772],{"class":238},[228,4853,242],{"class":234},[228,4855,3146],{"class":238},[228,4857,284],{"class":234},[228,4859,430],{"class":287},[228,4861,3153],{"class":238},[228,4863,1148],{"class":234},[228,4865,658],{"class":287},[228,4867,3153],{"class":238},[228,4869,2406],{"class":234},[228,4871,245],{"class":238},[228,4873,4874],{"class":230,"line":2691},[228,4875,2144],{"class":238},[228,4877,4878,4880,4882,4884,4886,4888],{"class":230,"line":2705},[228,4879,3565],{"class":238},[228,4881,1282],{"class":234},[228,4883,4468],{"class":238},[228,4885,1282],{"class":234},[228,4887,4473],{"class":343},[228,4889,1404],{"class":238},[228,4891,4892],{"class":230,"line":2713},[228,4893,2301],{"class":238},[228,4895,4896,4898,4900],{"class":230,"line":2718},[228,4897,4204],{"class":234},[228,4899,4207],{"class":287},[228,4901,1404],{"class":238},[228,4903,4904],{"class":230,"line":2724},[228,4905,1679],{"class":238},[200,4907,4909],{"id":4908},"_172二维数组","1.7.2二维数组",[183,4911,4912],{},[186,4913,4914],{},"二维数组的四种定义方式",[376,4916,4917,4926],{},[379,4918,4919],{},[382,4920,4921,4924],{},[385,4922,4923],{},"序号",[385,4925,3895],{},[423,4927,4928,4938,4947,4956,4965],{},[382,4929,4930,4932],{},[428,4931,456],{},[428,4933,4934,4935,294],{},"数据类型 数组名[行数]",[228,4936,4937],{},"列数",[382,4939,4940,4942],{},[428,4941,316],{},[428,4943,4934,4944,4946],{},[228,4945,4937],{},"={ {数据1,数据2}，{数据3，数据4}... }",[382,4948,4949,4951],{},[428,4950,310],{},[428,4952,4934,4953,4955],{},[228,4954,4937],{},"={数据1,数据2,数据3...}",[382,4957,4958,4960],{},[428,4959,531],{},[428,4961,4962,4963,4955],{},"数据类型 数组名[]",[228,4964,4937],{},[382,4966,4967,4970],{},[428,4968,4969],{},"注意：不能只省略列数",[428,4971],{},[183,4973,4974],{"start":142},[186,4975,4976],{},"二维数组数组名",[1245,4978,4979,4982],{},[186,4980,4981],{},"1.查看二维数组所占内存空间",[186,4983,4984],{},"2.获取二维数组首地址",[19,4986,4987],{},"已知二维数组，求二维数组的行数与列数",[220,4989,4991],{"className":222,"code":4990,"language":224,"meta":141,"style":141},"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",[30,4992,4993,5001,5005,5023,5027,5045,5061,5066,5091,5124],{"__ignoreMap":141},[228,4994,4995,4997,4999],{"class":230,"line":231},[228,4996,242],{"class":234},[228,4998,2087],{"class":2077},[228,5000,2090],{"class":238},[228,5002,5003],{"class":230,"line":142},[228,5004,1660],{"class":238},[228,5006,5007,5009,5011,5013,5016,5018,5020],{"class":230,"line":1293},[228,5008,2099],{"class":234},[228,5010,4076],{"class":238},[228,5012,316],{"class":287},[228,5014,5015],{"class":238},"][",[228,5017,310],{"class":287},[228,5019,1178],{"class":238},[228,5021,5022],{"class":234},"=\n",[228,5024,5025],{"class":230,"line":1308},[228,5026,2144],{"class":238},[228,5028,5029,5032,5034,5036,5038,5040,5042],{"class":230,"line":1314},[228,5030,5031],{"class":238},"        {",[228,5033,456],{"class":287},[228,5035,616],{"class":238},[228,5037,316],{"class":287},[228,5039,616],{"class":238},[228,5041,310],{"class":287},[228,5043,5044],{"class":238},"},\n",[228,5046,5047,5049,5051,5053,5055,5057,5059],{"class":230,"line":1328},[228,5048,5031],{"class":238},[228,5050,531],{"class":287},[228,5052,616],{"class":238},[228,5054,557],{"class":287},[228,5056,616],{"class":238},[228,5058,582],{"class":287},[228,5060,1679],{"class":238},[228,5062,5063],{"class":230,"line":1334},[228,5064,5065],{"class":238},"    };\n",[228,5067,5068,5070,5072,5075,5077,5079,5081,5083,5085,5087,5089],{"class":230,"line":1425},[228,5069,1665],{"class":238},[228,5071,1282],{"class":234},[228,5073,5074],{"class":343},"\"二维数组的行数\"",[228,5076,1486],{"class":234},[228,5078,4320],{"class":238},[228,5080,4323],{"class":234},[228,5082,3965],{"class":238},[228,5084,430],{"class":287},[228,5086,4330],{"class":238},[228,5088,1282],{"class":234},[228,5090,1305],{"class":238},[228,5092,5093,5095,5097,5100,5102,5104,5106,5108,5110,5112,5114,5116,5118,5120,5122],{"class":230,"line":1431},[228,5094,1665],{"class":238},[228,5096,1282],{"class":234},[228,5098,5099],{"class":343},"\"二维数组的列数\"",[228,5101,1486],{"class":234},[228,5103,3965],{"class":238},[228,5105,430],{"class":287},[228,5107,4330],{"class":238},[228,5109,4323],{"class":234},[228,5111,3965],{"class":238},[228,5113,430],{"class":287},[228,5115,5015],{"class":238},[228,5117,430],{"class":287},[228,5119,4330],{"class":238},[228,5121,1282],{"class":234},[228,5123,1305],{"class":238},[228,5125,5126],{"class":230,"line":1443},[228,5127,1679],{"class":238},[19,5129,5130],{},"查看二维数组首地址",[220,5132,5134],{"className":222,"code":5133,"language":224,"meta":141,"style":141},"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",[30,5135,5136,5153,5179,5204],{"__ignoreMap":141},[228,5137,5138,5140,5142,5145,5147,5149,5151],{"class":230,"line":231},[228,5139,1483],{"class":238},[228,5141,1282],{"class":234},[228,5143,5144],{"class":343},"\"二维数组首地址：\"",[228,5146,1282],{"class":234},[228,5148,3994],{"class":238},[228,5150,1282],{"class":234},[228,5152,1305],{"class":238},[228,5154,5155,5157,5159,5162,5164,5166,5168,5171,5173,5175,5177],{"class":230,"line":142},[228,5156,1483],{"class":238},[228,5158,1282],{"class":234},[228,5160,5161],{"class":343},"\"二维数组第一行的首地址：\"",[228,5163,1282],{"class":234},[228,5165,239],{"class":238},[228,5167,242],{"class":234},[228,5169,5170],{"class":238},")arr[",[228,5172,430],{"class":287},[228,5174,1178],{"class":238},[228,5176,1282],{"class":234},[228,5178,1305],{"class":238},[228,5180,5181,5183,5185,5188,5190,5192,5194,5196,5198,5200,5202],{"class":230,"line":1293},[228,5182,1483],{"class":238},[228,5184,1282],{"class":234},[228,5186,5187],{"class":343},"\"二维数组第二行的首地址：\"",[228,5189,1282],{"class":234},[228,5191,239],{"class":238},[228,5193,242],{"class":234},[228,5195,5170],{"class":238},[228,5197,456],{"class":287},[228,5199,1178],{"class":238},[228,5201,1282],{"class":234},[228,5203,1305],{"class":238},[228,5205,5206,5208,5210,5213,5215,5217,5219,5221,5223,5225,5227,5229,5231,5233,5235,5237],{"class":230,"line":1308},[228,5207,1483],{"class":238},[228,5209,1282],{"class":234},[228,5211,5212],{"class":343},"\"二维数组第一个元素的首地址:\"",[228,5214,1282],{"class":234},[228,5216,239],{"class":238},[228,5218,242],{"class":234},[228,5220,667],{"class":238},[228,5222,591],{"class":234},[228,5224,4020],{"class":238},[228,5226,430],{"class":287},[228,5228,5015],{"class":238},[228,5230,430],{"class":287},[228,5232,1178],{"class":238},[228,5234,1282],{"class":234},[228,5236,1352],{"class":238},[228,5238,5239],{"class":297},"\u002F\u002F对于数，要加取址符\n",[5241,5242,5243],"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":141,"searchDepth":142,"depth":142,"links":5245},[5246,5247,5248,5256,5257,5263,5268],{"id":173,"depth":142,"text":174},{"id":180,"depth":142,"text":181},{"id":197,"depth":142,"text":198,"children":5249},[5250,5251,5252,5253,5254,5255],{"id":202,"depth":1293,"text":203},{"id":255,"depth":1293,"text":256},{"id":324,"depth":1293,"text":325},{"id":1263,"depth":1293,"text":1264},{"id":1358,"depth":1293,"text":1359},{"id":1457,"depth":1293,"text":1458},{"id":1499,"depth":142,"text":1500},{"id":1567,"depth":142,"text":1568,"children":5258},[5259,5260,5261,5262],{"id":1571,"depth":1293,"text":1572},{"id":1593,"depth":1293,"text":1594},{"id":1602,"depth":1293,"text":1603},{"id":1611,"depth":1293,"text":1612},{"id":1620,"depth":142,"text":1621,"children":5264},[5265,5266,5267],{"id":1624,"depth":1293,"text":1625},{"id":2319,"depth":1293,"text":2320},{"id":3735,"depth":1293,"text":3736},{"id":3876,"depth":142,"text":3877,"children":5269},[5270,5271],{"id":3880,"depth":1293,"text":3881},{"id":4908,"depth":1293,"text":4909},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":165,"description":141},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5278,"title":5279,"body":5280,"description":141,"extension":155,"meta":6380,"navigation":157,"path":6381,"seo":6382,"stem":6383,"__hash__":6384},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5281,"toc":6372},[5282,5285,5289,5297,5305,5308,5374,5378,5381,5457,5461,5464,5467,5470,5683,5687,5692,5756,5761,5828,5833,5924,5927,6032,6036,6039,6045,6189,6193,6196,6210,6213,6258,6261,6369],[10,5283,5279],{"id":5284},"_2函数",[14,5286,5288],{"id":5287},"_21函数概述","2.1函数概述",[183,5290,5291,5294],{},[186,5292,5293],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[186,5295,5296],{},"语法：",[220,5298,5303],{"className":5299,"code":5301,"language":5302,"meta":141},[5300],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[30,5304,5301],{"__ignoreMap":141},[19,5306,5307],{},"小案例",[220,5309,5311],{"className":222,"code":5310,"language":224,"meta":141,"style":141},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[30,5312,5313,5318,5342,5346,5363,5370],{"__ignoreMap":141},[228,5314,5315],{"class":230,"line":231},[228,5316,5317],{"class":297},"\u002F\u002Fnum1,num2形参\n",[228,5319,5320,5322,5325,5327,5329,5333,5335,5337,5340],{"class":230,"line":142},[228,5321,242],{"class":234},[228,5323,5324],{"class":2077}," add",[228,5326,239],{"class":238},[228,5328,242],{"class":234},[228,5330,5332],{"class":5331},"s4XuR"," num1",[228,5334,616],{"class":238},[228,5336,242],{"class":234},[228,5338,5339],{"class":5331}," num2",[228,5341,245],{"class":238},[228,5343,5344],{"class":230,"line":1293},[228,5345,1660],{"class":238},[228,5347,5348,5350,5353,5355,5358,5360],{"class":230,"line":1308},[228,5349,2099],{"class":234},[228,5351,5352],{"class":238}," sum",[228,5354,284],{"class":234},[228,5356,5357],{"class":238},"num1",[228,5359,719],{"class":234},[228,5361,5362],{"class":238},"num2;\n",[228,5364,5365,5367],{"class":230,"line":1314},[228,5366,4204],{"class":234},[228,5368,5369],{"class":238}," sum;\n",[228,5371,5372],{"class":230,"line":1328},[228,5373,1679],{"class":238},[14,5375,5377],{"id":5376},"_22函数调用","2.2函数调用",[19,5379,5380],{},"调用刚刚写的求和函数",[220,5382,5384],{"className":222,"code":5383,"language":224,"meta":141,"style":141},"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",[30,5385,5386,5394,5398,5403,5415,5427,5436,5441,5453],{"__ignoreMap":141},[228,5387,5388,5390,5392],{"class":230,"line":231},[228,5389,242],{"class":234},[228,5391,2087],{"class":2077},[228,5393,2090],{"class":238},[228,5395,5396],{"class":230,"line":142},[228,5397,1660],{"class":238},[228,5399,5400],{"class":230,"line":1293},[228,5401,5402],{"class":297},"    \u002F\u002Fa,b实参\n",[228,5404,5405,5407,5409,5411,5413],{"class":230,"line":1308},[228,5406,2099],{"class":234},[228,5408,1512],{"class":238},[228,5410,284],{"class":234},[228,5412,430],{"class":287},[228,5414,1404],{"class":238},[228,5416,5417,5419,5421,5423,5425],{"class":230,"line":1314},[228,5418,2099],{"class":234},[228,5420,2947],{"class":238},[228,5422,284],{"class":234},[228,5424,430],{"class":287},[228,5426,1404],{"class":238},[228,5428,5429,5431,5433],{"class":230,"line":1328},[228,5430,2126],{"class":238},[228,5432,1543],{"class":234},[228,5434,5435],{"class":238},"a,b;\n",[228,5437,5438],{"class":230,"line":1334},[228,5439,5440],{"class":297},"    \u002F\u002F调用函数时，实参值传给了形参\n",[228,5442,5443,5445,5447,5450],{"class":230,"line":1425},[228,5444,1665],{"class":238},[228,5446,1282],{"class":234},[228,5448,5449],{"class":2077},"add",[228,5451,5452],{"class":238},"(a,b);\n",[228,5454,5455],{"class":230,"line":1431},[228,5456,1679],{"class":238},[14,5458,5460],{"id":5459},"_23值传递","2.3值传递",[19,5462,5463],{},"值传递就是函数调用时实参将数值传给形参",[19,5465,5466],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,5468,5469],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[220,5471,5473],{"className":222,"code":5472,"language":224,"meta":141,"style":141},"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",[30,5474,5475,5497,5501,5514,5531,5549,5560,5569,5578,5591,5607,5623,5632,5636,5644,5648,5660,5672,5679],{"__ignoreMap":141},[228,5476,5477,5480,5483,5485,5487,5489,5491,5493,5495],{"class":230,"line":231},[228,5478,5479],{"class":234},"void",[228,5481,5482],{"class":2077}," swap",[228,5484,239],{"class":238},[228,5486,242],{"class":234},[228,5488,5332],{"class":5331},[228,5490,616],{"class":238},[228,5492,242],{"class":234},[228,5494,5339],{"class":5331},[228,5496,245],{"class":238},[228,5498,5499],{"class":230,"line":142},[228,5500,1660],{"class":238},[228,5502,5503,5505,5507,5510,5512],{"class":230,"line":1293},[228,5504,1665],{"class":238},[228,5506,1282],{"class":234},[228,5508,5509],{"class":343},"\"交换前：\"",[228,5511,1282],{"class":234},[228,5513,1305],{"class":238},[228,5515,5516,5518,5520,5523,5525,5527,5529],{"class":230,"line":1308},[228,5517,1665],{"class":238},[228,5519,1282],{"class":234},[228,5521,5522],{"class":343},"\"num1=\"",[228,5524,1282],{"class":234},[228,5526,5357],{"class":238},[228,5528,1282],{"class":234},[228,5530,1305],{"class":238},[228,5532,5533,5535,5537,5540,5542,5545,5547],{"class":230,"line":1314},[228,5534,1665],{"class":238},[228,5536,1282],{"class":234},[228,5538,5539],{"class":343},"\"num2=\"",[228,5541,1282],{"class":234},[228,5543,5544],{"class":238},"num2",[228,5546,1282],{"class":234},[228,5548,1305],{"class":238},[228,5550,5551,5553,5555,5557],{"class":230,"line":1328},[228,5552,2099],{"class":234},[228,5554,4369],{"class":238},[228,5556,284],{"class":234},[228,5558,5559],{"class":238},"num1;\n",[228,5561,5562,5565,5567],{"class":230,"line":1334},[228,5563,5564],{"class":238},"    num1",[228,5566,284],{"class":234},[228,5568,5362],{"class":238},[228,5570,5571,5574,5576],{"class":230,"line":1425},[228,5572,5573],{"class":238},"    num2",[228,5575,284],{"class":234},[228,5577,4394],{"class":238},[228,5579,5580,5582,5584,5587,5589],{"class":230,"line":1431},[228,5581,1665],{"class":238},[228,5583,1282],{"class":234},[228,5585,5586],{"class":343},"\"交换后：\"",[228,5588,1282],{"class":234},[228,5590,1305],{"class":238},[228,5592,5593,5595,5597,5599,5601,5603,5605],{"class":230,"line":1443},[228,5594,1665],{"class":238},[228,5596,1282],{"class":234},[228,5598,5522],{"class":343},[228,5600,1282],{"class":234},[228,5602,5357],{"class":238},[228,5604,1282],{"class":234},[228,5606,1305],{"class":238},[228,5608,5609,5611,5613,5615,5617,5619,5621],{"class":230,"line":1726},[228,5610,1665],{"class":238},[228,5612,1282],{"class":234},[228,5614,5539],{"class":343},[228,5616,1282],{"class":234},[228,5618,5544],{"class":238},[228,5620,1282],{"class":234},[228,5622,1305],{"class":238},[228,5624,5625,5627,5629],{"class":230,"line":1731},[228,5626,4204],{"class":234},[228,5628,294],{"class":238},[228,5630,5631],{"class":297},"\u002F\u002F或者不写\n",[228,5633,5634],{"class":230,"line":1737},[228,5635,1679],{"class":238},[228,5637,5638,5640,5642],{"class":230,"line":1742},[228,5639,242],{"class":234},[228,5641,2087],{"class":2077},[228,5643,2090],{"class":238},[228,5645,5646],{"class":230,"line":1756},[228,5647,1660],{"class":238},[228,5649,5650,5652,5654,5656,5658],{"class":230,"line":1761},[228,5651,2099],{"class":234},[228,5653,1512],{"class":238},[228,5655,284],{"class":234},[228,5657,684],{"class":287},[228,5659,1404],{"class":238},[228,5661,5662,5664,5666,5668,5670],{"class":230,"line":1767},[228,5663,2099],{"class":234},[228,5665,2947],{"class":238},[228,5667,284],{"class":234},[228,5669,938],{"class":287},[228,5671,1404],{"class":238},[228,5673,5674,5677],{"class":230,"line":1788},[228,5675,5676],{"class":2077},"    swap",[228,5678,5452],{"class":238},[228,5680,5681],{"class":230,"line":1793},[228,5682,1679],{"class":238},[14,5684,5686],{"id":5685},"_24函数的常见形式","2.4函数的常见形式",[183,5688,5689],{},[186,5690,5691],{},"无参无返",[220,5693,5695],{"className":222,"code":5694,"language":224,"meta":141,"style":141},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[30,5696,5697,5706,5710,5723,5727,5735,5739,5744,5752],{"__ignoreMap":141},[228,5698,5699,5701,5704],{"class":230,"line":231},[228,5700,5479],{"class":234},[228,5702,5703],{"class":2077}," test01",[228,5705,2090],{"class":238},[228,5707,5708],{"class":230,"line":142},[228,5709,1660],{"class":238},[228,5711,5712,5714,5716,5719,5721],{"class":230,"line":1293},[228,5713,1665],{"class":238},[228,5715,1282],{"class":234},[228,5717,5718],{"class":343},"\"你好\"",[228,5720,1282],{"class":234},[228,5722,1305],{"class":238},[228,5724,5725],{"class":230,"line":1308},[228,5726,1679],{"class":238},[228,5728,5729,5731,5733],{"class":230,"line":1314},[228,5730,242],{"class":234},[228,5732,2087],{"class":2077},[228,5734,2090],{"class":238},[228,5736,5737],{"class":230,"line":1328},[228,5738,1660],{"class":238},[228,5740,5741],{"class":230,"line":1334},[228,5742,5743],{"class":297},"    \u002F\u002F函数调用\n",[228,5745,5746,5749],{"class":230,"line":1425},[228,5747,5748],{"class":2077},"    test01",[228,5750,5751],{"class":238},"();\n",[228,5753,5754],{"class":230,"line":1431},[228,5755,1679],{"class":238},[183,5757,5758],{"start":142},[186,5759,5760],{},"有参无返",[220,5762,5764],{"className":222,"code":5763,"language":224,"meta":141,"style":141},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[30,5765,5766,5781,5785,5797,5801,5809,5813,5824],{"__ignoreMap":141},[228,5767,5768,5770,5773,5775,5777,5779],{"class":230,"line":231},[228,5769,5479],{"class":234},[228,5771,5772],{"class":2077}," test02",[228,5774,239],{"class":238},[228,5776,242],{"class":234},[228,5778,1512],{"class":5331},[228,5780,245],{"class":238},[228,5782,5783],{"class":230,"line":142},[228,5784,1660],{"class":238},[228,5786,5787,5789,5791,5793,5795],{"class":230,"line":1293},[228,5788,1665],{"class":238},[228,5790,1282],{"class":234},[228,5792,5718],{"class":343},[228,5794,1282],{"class":234},[228,5796,1305],{"class":238},[228,5798,5799],{"class":230,"line":1308},[228,5800,1679],{"class":238},[228,5802,5803,5805,5807],{"class":230,"line":1314},[228,5804,242],{"class":234},[228,5806,2087],{"class":2077},[228,5808,2090],{"class":238},[228,5810,5811],{"class":230,"line":1328},[228,5812,1660],{"class":238},[228,5814,5815,5818,5820,5822],{"class":230,"line":1334},[228,5816,5817],{"class":2077},"    test02",[228,5819,239],{"class":238},[228,5821,549],{"class":287},[228,5823,2833],{"class":238},[228,5825,5826],{"class":230,"line":1425},[228,5827,1679],{"class":238},[183,5829,5830],{"start":1293},[186,5831,5832],{},"无参有返",[220,5834,5836],{"className":222,"code":5835,"language":224,"meta":141,"style":141},"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",[30,5837,5838,5847,5851,5863,5872,5876,5884,5888,5901,5920],{"__ignoreMap":141},[228,5839,5840,5842,5845],{"class":230,"line":231},[228,5841,242],{"class":234},[228,5843,5844],{"class":2077}," test03",[228,5846,2090],{"class":238},[228,5848,5849],{"class":230,"line":142},[228,5850,1660],{"class":238},[228,5852,5853,5855,5857,5859,5861],{"class":230,"line":1293},[228,5854,1665],{"class":238},[228,5856,1282],{"class":234},[228,5858,5718],{"class":343},[228,5860,1282],{"class":234},[228,5862,1305],{"class":238},[228,5864,5865,5867,5870],{"class":230,"line":1308},[228,5866,4204],{"class":234},[228,5868,5869],{"class":287}," 100",[228,5871,1404],{"class":238},[228,5873,5874],{"class":230,"line":1314},[228,5875,1679],{"class":238},[228,5877,5878,5880,5882],{"class":230,"line":1328},[228,5879,242],{"class":234},[228,5881,2087],{"class":2077},[228,5883,2090],{"class":238},[228,5885,5886],{"class":230,"line":1334},[228,5887,1660],{"class":238},[228,5889,5890,5892,5894,5896,5899],{"class":230,"line":1425},[228,5891,2099],{"class":234},[228,5893,5332],{"class":238},[228,5895,284],{"class":234},[228,5897,5898],{"class":2077},"test03",[228,5900,5751],{"class":238},[228,5902,5903,5905,5907,5909,5911,5913,5915,5917],{"class":230,"line":1431},[228,5904,1665],{"class":238},[228,5906,1282],{"class":234},[228,5908,5522],{"class":343},[228,5910,1282],{"class":234},[228,5912,5357],{"class":238},[228,5914,1282],{"class":234},[228,5916,1352],{"class":238},[228,5918,5919],{"class":297}," \u002F\u002F100\n",[228,5921,5922],{"class":230,"line":1443},[228,5923,1679],{"class":238},[19,5925,5926],{},"4.有参有返",[220,5928,5930],{"className":222,"code":5929,"language":224,"meta":141,"style":141},"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",[30,5931,5932,5947,5951,5964,5970,5974,5983,5987,5999,6013,6028],{"__ignoreMap":141},[228,5933,5934,5936,5939,5941,5943,5945],{"class":230,"line":231},[228,5935,242],{"class":234},[228,5937,5938],{"class":2077}," test04",[228,5940,239],{"class":238},[228,5942,242],{"class":234},[228,5944,1512],{"class":5331},[228,5946,245],{"class":238},[228,5948,5949],{"class":230,"line":142},[228,5950,1660],{"class":238},[228,5952,5953,5955,5957,5960,5962],{"class":230,"line":1293},[228,5954,1665],{"class":238},[228,5956,1282],{"class":234},[228,5958,5959],{"class":343},"\"hello\"",[228,5961,1282],{"class":234},[228,5963,1305],{"class":238},[228,5965,5966,5968],{"class":230,"line":1308},[228,5967,4204],{"class":234},[228,5969,1546],{"class":238},[228,5971,5972],{"class":230,"line":1314},[228,5973,1679],{"class":238},[228,5975,5976,5978,5981],{"class":230,"line":1328},[228,5977,242],{"class":234},[228,5979,5980],{"class":2077}," mian",[228,5982,2090],{"class":238},[228,5984,5985],{"class":230,"line":1334},[228,5986,1660],{"class":238},[228,5988,5989,5991,5993,5995,5997],{"class":230,"line":1425},[228,5990,2099],{"class":234},[228,5992,2947],{"class":238},[228,5994,284],{"class":234},[228,5996,456],{"class":287},[228,5998,1404],{"class":238},[228,6000,6001,6003,6005,6007,6010],{"class":230,"line":1431},[228,6002,2099],{"class":234},[228,6004,2963],{"class":238},[228,6006,284],{"class":234},[228,6008,6009],{"class":2077},"test04",[228,6011,6012],{"class":238},"(b);\n",[228,6014,6015,6017,6019,6021,6023,6025],{"class":230,"line":1443},[228,6016,1665],{"class":238},[228,6018,1282],{"class":234},[228,6020,526],{"class":238},[228,6022,1282],{"class":234},[228,6024,1352],{"class":238},[228,6026,6027],{"class":297}," \u002F\u002F1\n",[228,6029,6030],{"class":230,"line":1726},[228,6031,1679],{"class":238},[14,6033,6035],{"id":6034},"_25函数的声明","2.5函数的声明",[19,6037,6038],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,6040,6041,6042],{},"函数的",[388,6043,6044],{},"声明可以多次，但是函数的定义只能有一次",[220,6046,6048],{"className":222,"code":6047,"language":224,"meta":141,"style":141},"\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",[30,6049,6050,6055,6060,6085,6094,6098,6110,6122,6138,6142,6162,6166,6185],{"__ignoreMap":141},[228,6051,6052],{"class":230,"line":231},[228,6053,6054],{"class":297},"\u002F\u002F函数声明\n",[228,6056,6057],{"class":230,"line":142},[228,6058,6059],{"class":297},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[228,6061,6062,6064,6067,6069,6071,6073,6075,6077,6079,6082],{"class":230,"line":1293},[228,6063,242],{"class":234},[228,6065,6066],{"class":2077}," max",[228,6068,239],{"class":238},[228,6070,242],{"class":234},[228,6072,1512],{"class":5331},[228,6074,616],{"class":238},[228,6076,242],{"class":234},[228,6078,2947],{"class":5331},[228,6080,6081],{"class":238},");",[228,6083,6084],{"class":297},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[228,6086,6087,6089,6091],{"class":230,"line":1308},[228,6088,242],{"class":234},[228,6090,2087],{"class":2077},[228,6092,6093],{"class":238},"() \n",[228,6095,6096],{"class":230,"line":1314},[228,6097,1660],{"class":238},[228,6099,6100,6102,6104,6106,6108],{"class":230,"line":1328},[228,6101,2099],{"class":234},[228,6103,1512],{"class":238},[228,6105,284],{"class":234},[228,6107,684],{"class":287},[228,6109,1404],{"class":238},[228,6111,6112,6114,6116,6118,6120],{"class":230,"line":1334},[228,6113,2099],{"class":234},[228,6115,2947],{"class":238},[228,6117,284],{"class":234},[228,6119,938],{"class":287},[228,6121,1404],{"class":238},[228,6123,6124,6126,6128,6131,6134,6136],{"class":230,"line":1425},[228,6125,1665],{"class":238},[228,6127,1282],{"class":234},[228,6129,6130],{"class":2077},"max",[228,6132,6133],{"class":238},"(a,b)",[228,6135,1282],{"class":234},[228,6137,1305],{"class":238},[228,6139,6140],{"class":230,"line":1431},[228,6141,1679],{"class":238},[228,6143,6144,6146,6148,6150,6152,6154,6156,6158,6160],{"class":230,"line":1443},[228,6145,242],{"class":234},[228,6147,6066],{"class":2077},[228,6149,239],{"class":238},[228,6151,242],{"class":234},[228,6153,1512],{"class":5331},[228,6155,616],{"class":238},[228,6157,242],{"class":234},[228,6159,2947],{"class":5331},[228,6161,245],{"class":238},[228,6163,6164],{"class":230,"line":1726},[228,6165,1660],{"class":238},[228,6167,6168,6170,6172,6174,6176,6178,6180,6182],{"class":230,"line":1731},[228,6169,4204],{"class":234},[228,6171,1512],{"class":238},[228,6173,1198],{"class":234},[228,6175,501],{"class":238},[228,6177,1224],{"class":234},[228,6179,476],{"class":238},[228,6181,1097],{"class":234},[228,6183,6184],{"class":238},"b;\n",[228,6186,6187],{"class":230,"line":1737},[228,6188,1679],{"class":238},[14,6190,6192],{"id":6191},"_26函数的分文件编写","2.6函数的分文件编写",[19,6194,6195],{},"4个步骤：",[1245,6197,6198,6201,6204,6207],{},[186,6199,6200],{},"1.创建后缀名为.h的头文件",[186,6202,6203],{},"2.创建后缀名为.cpp的源文件",[186,6205,6206],{},"3.在头文件中写函数的定义",[186,6208,6209],{},"4.在源文件中写函数的定义\n示例：",[19,6211,6212],{},"头文件：swap.h",[220,6214,6216],{"className":222,"code":6215,"language":224,"meta":141,"style":141},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[30,6217,6218,6224,6234,6238],{"__ignoreMap":141},[228,6219,6220,6222],{"class":230,"line":231},[228,6221,2063],{"class":234},[228,6223,2066],{"class":343},[228,6225,6226,6228,6230,6232],{"class":230,"line":142},[228,6227,2071],{"class":234},[228,6229,2074],{"class":234},[228,6231,2078],{"class":2077},[228,6233,1404],{"class":238},[228,6235,6236],{"class":230,"line":1293},[228,6237,6054],{"class":297},[228,6239,6240,6242,6244,6246,6248,6250,6252,6254,6256],{"class":230,"line":1308},[228,6241,5479],{"class":234},[228,6243,5482],{"class":2077},[228,6245,239],{"class":238},[228,6247,242],{"class":234},[228,6249,1512],{"class":5331},[228,6251,616],{"class":238},[228,6253,242],{"class":234},[228,6255,2947],{"class":5331},[228,6257,2833],{"class":238},[19,6259,6260],{},"源文件：swap.cpp",[220,6262,6264],{"className":222,"code":6263,"language":224,"meta":141,"style":141},"#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",[30,6265,6266,6273,6278,6298,6302,6313,6322,6331,6348,6365],{"__ignoreMap":141},[228,6267,6268,6270],{"class":230,"line":231},[228,6269,2063],{"class":234},[228,6271,6272],{"class":343}," \"swap.h\"\n",[228,6274,6275],{"class":230,"line":142},[228,6276,6277],{"class":297},"\u002F\u002F函数的定义\n",[228,6279,6280,6282,6284,6286,6288,6290,6292,6294,6296],{"class":230,"line":1293},[228,6281,5479],{"class":234},[228,6283,5482],{"class":2077},[228,6285,239],{"class":238},[228,6287,242],{"class":234},[228,6289,1512],{"class":5331},[228,6291,616],{"class":238},[228,6293,242],{"class":234},[228,6295,2947],{"class":5331},[228,6297,245],{"class":238},[228,6299,6300],{"class":230,"line":1308},[228,6301,1660],{"class":238},[228,6303,6304,6306,6308,6310],{"class":230,"line":1314},[228,6305,2099],{"class":234},[228,6307,4369],{"class":238},[228,6309,284],{"class":234},[228,6311,6312],{"class":238},"a;\n",[228,6314,6315,6318,6320],{"class":230,"line":1328},[228,6316,6317],{"class":238},"    a",[228,6319,284],{"class":234},[228,6321,6184],{"class":238},[228,6323,6324,6327,6329],{"class":230,"line":1334},[228,6325,6326],{"class":238},"    b",[228,6328,284],{"class":234},[228,6330,4394],{"class":238},[228,6332,6333,6335,6337,6340,6342,6344,6346],{"class":230,"line":1425},[228,6334,1665],{"class":238},[228,6336,1282],{"class":234},[228,6338,6339],{"class":343},"\"a=\"",[228,6341,1282],{"class":234},[228,6343,476],{"class":238},[228,6345,1282],{"class":234},[228,6347,1305],{"class":238},[228,6349,6350,6352,6354,6357,6359,6361,6363],{"class":230,"line":1431},[228,6351,1665],{"class":238},[228,6353,1282],{"class":234},[228,6355,6356],{"class":343},"\"b=\"",[228,6358,1282],{"class":234},[228,6360,501],{"class":238},[228,6362,1282],{"class":234},[228,6364,1305],{"class":238},[228,6366,6367],{"class":230,"line":1443},[228,6368,1679],{"class":238},[5241,6370,6371],{},"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":141,"searchDepth":142,"depth":142,"links":6373},[6374,6375,6376,6377,6378,6379],{"id":5287,"depth":142,"text":5288},{"id":5376,"depth":142,"text":5377},{"id":5459,"depth":142,"text":5460},{"id":5685,"depth":142,"text":5686},{"id":6034,"depth":142,"text":6035},{"id":6191,"depth":142,"text":6192},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5279,"description":141},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6386,"title":6387,"body":6388,"description":6395,"extension":155,"meta":7800,"navigation":157,"path":7801,"seo":7802,"stem":7803,"__hash__":7804},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6389,"toc":7790},[6390,6393,6396,6400,6562,6566,6569,6572,6575,6578,6718,6722,6725,6728,6731,6796,6800,6805,6872,6875,6879,6882,6893,6898,6918,6921,6926,6945,6948,6952,6971,6974,6978,7213,7217,7220,7223,7226,7388,7391,7395,7398,7404,7787],[10,6391,6387],{"id":6392},"_3指针",[19,6394,6395],{},"通过指针保存一个地址，指针就是个地址",[14,6397,6399],{"id":6398},"_31定义指针","3.1定义指针",[220,6401,6403],{"className":222,"code":6402,"language":224,"meta":141,"style":141},"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",[30,6404,6405,6413,6417,6422,6434,6439,6447,6457,6475,6495,6499,6504,6509,6514,6528,6544,6558],{"__ignoreMap":141},[228,6406,6407,6409,6411],{"class":230,"line":231},[228,6408,242],{"class":234},[228,6410,2087],{"class":2077},[228,6412,2090],{"class":238},[228,6414,6415],{"class":230,"line":142},[228,6416,1660],{"class":238},[228,6418,6419],{"class":230,"line":1293},[228,6420,6421],{"class":297},"    \u002F\u002F1.定义指针\n",[228,6423,6424,6426,6428,6430,6432],{"class":230,"line":1308},[228,6425,2099],{"class":234},[228,6427,1512],{"class":238},[228,6429,284],{"class":234},[228,6431,684],{"class":287},[228,6433,1404],{"class":238},[228,6435,6436],{"class":230,"line":1314},[228,6437,6438],{"class":297},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[228,6440,6441,6444],{"class":230,"line":1328},[228,6442,6443],{"class":234},"    int*",[228,6445,6446],{"class":238},"p;\n",[228,6448,6449,6452,6455],{"class":230,"line":1334},[228,6450,6451],{"class":238},"    p",[228,6453,6454],{"class":234},"=&",[228,6456,6312],{"class":238},[228,6458,6459,6461,6463,6466,6469,6471,6473],{"class":230,"line":1425},[228,6460,1665],{"class":238},[228,6462,1282],{"class":234},[228,6464,6465],{"class":343},"\"a的地址为：\"",[228,6467,6468],{"class":234},"\u003C\u003C&",[228,6470,476],{"class":238},[228,6472,1282],{"class":234},[228,6474,1305],{"class":238},[228,6476,6477,6479,6481,6484,6486,6488,6490,6492],{"class":230,"line":1431},[228,6478,1665],{"class":238},[228,6480,1282],{"class":234},[228,6482,6483],{"class":343},"\"指针p为：\"",[228,6485,1282],{"class":234},[228,6487,19],{"class":238},[228,6489,1282],{"class":234},[228,6491,1352],{"class":238},[228,6493,6494],{"class":297},"\u002F\u002F指针p表示的就是a的地址\n",[228,6496,6497],{"class":230,"line":1443},[228,6498,2514],{"emptyLinePlaceholder":157},[228,6500,6501],{"class":230,"line":1726},[228,6502,6503],{"class":297},"    \u002F\u002F2.使用指针\n",[228,6505,6506],{"class":230,"line":1731},[228,6507,6508],{"class":297},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[228,6510,6511],{"class":230,"line":1737},[228,6512,6513],{"class":297},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[228,6515,6516,6519,6521,6523,6526],{"class":230,"line":1742},[228,6517,6518],{"class":234},"    *",[228,6520,19],{"class":238},[228,6522,284],{"class":234},[228,6524,6525],{"class":287},"1000",[228,6527,1404],{"class":238},[228,6529,6530,6532,6535,6537,6539,6541],{"class":230,"line":1756},[228,6531,1665],{"class":238},[228,6533,6534],{"class":234},"\u003C\u003C*",[228,6536,19],{"class":238},[228,6538,1282],{"class":234},[228,6540,1352],{"class":238},[228,6542,6543],{"class":297},"\u002F\u002F1000\n",[228,6545,6546,6548,6550,6552,6554,6556],{"class":230,"line":1761},[228,6547,1665],{"class":238},[228,6549,1282],{"class":234},[228,6551,476],{"class":238},[228,6553,1282],{"class":234},[228,6555,1352],{"class":238},[228,6557,6543],{"class":297},[228,6559,6560],{"class":230,"line":1767},[228,6561,1679],{"class":238},[14,6563,6565],{"id":6564},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,6567,6568],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,6570,6571],{},"在32位操作系统下：占用4个字节空间",[19,6573,6574],{},"在64位操作系统下：占用8个字节空间",[19,6576,6577],{},"上方是不管啥数据类型的",[220,6579,6581],{"className":222,"code":6580,"language":224,"meta":141,"style":141},"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",[30,6582,6583,6591,6595,6600,6612,6617,6622,6627,6640,6662,6688,6714],{"__ignoreMap":141},[228,6584,6585,6587,6589],{"class":230,"line":231},[228,6586,242],{"class":234},[228,6588,2087],{"class":2077},[228,6590,2090],{"class":238},[228,6592,6593],{"class":230,"line":142},[228,6594,1660],{"class":238},[228,6596,6597],{"class":230,"line":1293},[228,6598,6599],{"class":297},"    \u002F\u002F指针所占内存空间\n",[228,6601,6602,6604,6606,6608,6610],{"class":230,"line":1308},[228,6603,2099],{"class":234},[228,6605,1512],{"class":238},[228,6607,284],{"class":234},[228,6609,684],{"class":287},[228,6611,1404],{"class":238},[228,6613,6614],{"class":230,"line":1314},[228,6615,6616],{"class":297},"    \u002F\u002Fint *p;\n",[228,6618,6619],{"class":230,"line":1328},[228,6620,6621],{"class":297},"    \u002F\u002Fp=&a;\n",[228,6623,6624],{"class":230,"line":1334},[228,6625,6626],{"class":297},"    \u002F\u002F上述可以写为以下：\n",[228,6628,6629,6631,6634,6636,6638],{"class":230,"line":1425},[228,6630,2099],{"class":234},[228,6632,6633],{"class":234}," *",[228,6635,19],{"class":238},[228,6637,6454],{"class":234},[228,6639,6312],{"class":238},[228,6641,6642,6645,6647,6650,6652,6655,6657,6659],{"class":230,"line":1431},[228,6643,6644],{"class":238},"    cout ",[228,6646,1282],{"class":234},[228,6648,6649],{"class":343},"\"sizeof(int *)\"",[228,6651,1486],{"class":234},[228,6653,6654],{"class":238},"(p)",[228,6656,1282],{"class":234},[228,6658,1352],{"class":238},[228,6660,6661],{"class":297},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[228,6663,6664,6666,6668,6670,6672,6674,6676,6678,6680,6682,6685],{"class":230,"line":1443},[228,6665,6644],{"class":238},[228,6667,1282],{"class":234},[228,6669,6649],{"class":343},[228,6671,1486],{"class":234},[228,6673,239],{"class":238},[228,6675,242],{"class":234},[228,6677,6633],{"class":234},[228,6679,667],{"class":238},[228,6681,1282],{"class":234},[228,6683,6684],{"class":238},"endl",[228,6686,6687],{"class":297},"  \u002F\u002F4字节(32位的话)\n",[228,6689,6690,6692,6694,6697,6699,6701,6703,6705,6707,6709,6711],{"class":230,"line":1726},[228,6691,6644],{"class":238},[228,6693,1282],{"class":234},[228,6695,6696],{"class":343},"\"sizeof(char *)\"",[228,6698,1486],{"class":234},[228,6700,239],{"class":238},[228,6702,335],{"class":234},[228,6704,6633],{"class":234},[228,6706,667],{"class":238},[228,6708,1282],{"class":234},[228,6710,1352],{"class":238},[228,6712,6713],{"class":297}," \u002F\u002F4字节(32位的话)\n",[228,6715,6716],{"class":230,"line":1731},[228,6717,1679],{"class":238},[14,6719,6721],{"id":6720},"_33空指针","3.3空指针",[19,6723,6724],{},"空指针：指针变量指向内存中编号为0的空间",[19,6726,6727],{},"用途：初始化指针变量",[19,6729,6730],{},"注意：空指针指向的内存是不可以访问的",[220,6732,6734],{"className":222,"code":6733,"language":224,"meta":141,"style":141},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[30,6735,6736,6744,6748,6753,6767,6772,6787,6792],{"__ignoreMap":141},[228,6737,6738,6740,6742],{"class":230,"line":231},[228,6739,242],{"class":234},[228,6741,2087],{"class":2077},[228,6743,2090],{"class":238},[228,6745,6746],{"class":230,"line":142},[228,6747,1660],{"class":238},[228,6749,6750],{"class":230,"line":1293},[228,6751,6752],{"class":297},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[228,6754,6755,6757,6759,6761,6763,6765],{"class":230,"line":1308},[228,6756,2099],{"class":234},[228,6758,6633],{"class":234},[228,6760,19],{"class":238},[228,6762,284],{"class":234},[228,6764,2506],{"class":287},[228,6766,1404],{"class":238},[228,6768,6769],{"class":230,"line":1314},[228,6770,6771],{"class":297},"    \u002F\u002F2.空指针不能进行访问\n",[228,6773,6774,6776,6778,6780,6782,6784],{"class":230,"line":1328},[228,6775,6518],{"class":234},[228,6777,19],{"class":238},[228,6779,284],{"class":234},[228,6781,549],{"class":287},[228,6783,294],{"class":238},[228,6785,6786],{"class":297},"\u002F\u002F直接报错，压根不能访问\n",[228,6788,6789],{"class":230,"line":1334},[228,6790,6791],{"class":297},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[228,6793,6794],{"class":230,"line":1425},[228,6795,1679],{"class":238},[14,6797,6799],{"id":6798},"_34野指针","3.4野指针",[19,6801,6802],{},[388,6803,6804],{},"指针变量指向非法的内存空间",[220,6806,6808],{"className":222,"code":6807,"language":224,"meta":141,"style":141},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[30,6809,6810,6818,6822,6851,6856,6868],{"__ignoreMap":141},[228,6811,6812,6814,6816],{"class":230,"line":231},[228,6813,242],{"class":234},[228,6815,2087],{"class":2077},[228,6817,2090],{"class":238},[228,6819,6820],{"class":230,"line":142},[228,6821,1660],{"class":238},[228,6823,6824,6826,6828,6830,6832,6834,6836,6838,6840,6843,6846,6848],{"class":230,"line":1293},[228,6825,2099],{"class":234},[228,6827,6633],{"class":234},[228,6829,19],{"class":238},[228,6831,284],{"class":234},[228,6833,239],{"class":238},[228,6835,242],{"class":234},[228,6837,6633],{"class":234},[228,6839,667],{"class":238},[228,6841,6842],{"class":234},"0x",[228,6844,6845],{"class":287},"1100",[228,6847,294],{"class":238},[228,6849,6850],{"class":297}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[228,6852,6853],{"class":230,"line":1308},[228,6854,6855],{"class":297},"    \u002F\u002F访问野指针报错\n",[228,6857,6858,6860,6862,6864,6866],{"class":230,"line":1314},[228,6859,1665],{"class":238},[228,6861,6534],{"class":234},[228,6863,19],{"class":238},[228,6865,1282],{"class":234},[228,6867,1305],{"class":238},[228,6869,6870],{"class":230,"line":1328},[228,6871,1679],{"class":238},[19,6873,6874],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,6876,6878],{"id":6877},"_35const修饰指针","3.5const修饰指针",[19,6880,6881],{},"三种情况：",[1245,6883,6884,6887,6890],{},[186,6885,6886],{},"const修饰指针 常量指针",[186,6888,6889],{},"const修饰常量 指针常量",[186,6891,6892],{},"const即修饰指针，又修饰常量",[183,6894,6895],{},[186,6896,6897],{},"常量指针",[220,6899,6901],{"className":222,"code":6900,"language":224,"meta":141,"style":141},"const int *p=&a;\n",[30,6902,6903],{"__ignoreMap":141},[228,6904,6905,6908,6910,6912,6914,6916],{"class":230,"line":231},[228,6906,6907],{"class":234},"const",[228,6909,2496],{"class":234},[228,6911,6633],{"class":234},[228,6913,19],{"class":238},[228,6915,6454],{"class":234},[228,6917,6312],{"class":238},[19,6919,6920],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[183,6922,6923],{"start":142},[186,6924,6925],{},"指针常量",[220,6927,6929],{"className":222,"code":6928,"language":224,"meta":141,"style":141},"int *const p=&a;\n",[30,6930,6931],{"__ignoreMap":141},[228,6932,6933,6935,6938,6941,6943],{"class":230,"line":231},[228,6934,242],{"class":234},[228,6936,6937],{"class":234}," *const",[228,6939,6940],{"class":238}," p",[228,6942,6454],{"class":234},[228,6944,6312],{"class":238},[19,6946,6947],{},"指针的指向不可以改，指针指向的值可以改",[183,6949,6950],{"start":1293},[186,6951,6892],{},[220,6953,6955],{"className":222,"code":6954,"language":224,"meta":141,"style":141},"const int *const p=&a;\n",[30,6956,6957],{"__ignoreMap":141},[228,6958,6959,6961,6963,6965,6967,6969],{"class":230,"line":231},[228,6960,6907],{"class":234},[228,6962,2496],{"class":234},[228,6964,6937],{"class":234},[228,6966,6940],{"class":238},[228,6968,6454],{"class":234},[228,6970,6312],{"class":238},[19,6972,6973],{},"指针的指向和指针指向的值都不可以改变",[14,6975,6977],{"id":6976},"_36指针和数组","3.6指针和数组",[220,6979,6981],{"className":222,"code":6980,"language":224,"meta":141,"style":141},"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",[30,6982,6983,6991,6995,7000,7054,7075,7091,7107,7118,7135,7140,7154,7180,7184,7196,7205,7209],{"__ignoreMap":141},[228,6984,6985,6987,6989],{"class":230,"line":231},[228,6986,242],{"class":234},[228,6988,2087],{"class":2077},[228,6990,2090],{"class":238},[228,6992,6993],{"class":230,"line":142},[228,6994,1660],{"class":238},[228,6996,6997],{"class":230,"line":1293},[228,6998,6999],{"class":297},"    \u002F\u002F利用指针访问数组中的元素\n",[228,7001,7002,7004,7006,7008,7010,7012,7014,7016,7018,7020,7022,7024,7026,7028,7030,7032,7034,7036,7038,7040,7042,7044,7046,7048,7050,7052],{"class":230,"line":1308},[228,7003,2099],{"class":234},[228,7005,4076],{"class":238},[228,7007,684],{"class":287},[228,7009,1178],{"class":238},[228,7011,284],{"class":234},[228,7013,1134],{"class":238},[228,7015,456],{"class":287},[228,7017,616],{"class":238},[228,7019,316],{"class":287},[228,7021,616],{"class":238},[228,7023,310],{"class":287},[228,7025,616],{"class":238},[228,7027,531],{"class":287},[228,7029,616],{"class":238},[228,7031,557],{"class":287},[228,7033,616],{"class":238},[228,7035,582],{"class":287},[228,7037,616],{"class":238},[228,7039,607],{"class":287},[228,7041,616],{"class":238},[228,7043,633],{"class":287},[228,7045,616],{"class":238},[228,7047,658],{"class":287},[228,7049,616],{"class":238},[228,7051,684],{"class":287},[228,7053,4109],{"class":238},[228,7055,7056,7058,7060,7063,7065,7067,7069,7071,7073],{"class":230,"line":1314},[228,7057,1665],{"class":238},[228,7059,1282],{"class":234},[228,7061,7062],{"class":343},"\"数组的第一个元素为：\"",[228,7064,1282],{"class":234},[228,7066,4020],{"class":238},[228,7068,430],{"class":287},[228,7070,1178],{"class":238},[228,7072,1282],{"class":234},[228,7074,1305],{"class":238},[228,7076,7077,7079,7081,7083,7085,7088],{"class":230,"line":1328},[228,7078,2099],{"class":234},[228,7080,6633],{"class":234},[228,7082,19],{"class":238},[228,7084,284],{"class":234},[228,7086,7087],{"class":238},"arr;",[228,7089,7090],{"class":297},"\u002F\u002F注意数才要加取地址符号&\n",[228,7092,7093,7095,7097,7099,7101,7103,7105],{"class":230,"line":1334},[228,7094,1665],{"class":238},[228,7096,1282],{"class":234},[228,7098,7062],{"class":343},[228,7100,6534],{"class":234},[228,7102,19],{"class":238},[228,7104,1282],{"class":234},[228,7106,1305],{"class":238},[228,7108,7109,7111,7113,7115],{"class":230,"line":1425},[228,7110,6451],{"class":238},[228,7112,2406],{"class":234},[228,7114,294],{"class":238},[228,7116,7117],{"class":297}," \u002F\u002F让指针向后偏移4个字节\n",[228,7119,7120,7122,7124,7127,7129,7131,7133],{"class":230,"line":1431},[228,7121,1665],{"class":238},[228,7123,1282],{"class":234},[228,7125,7126],{"class":343},"\"数组的第二个元素为：\"",[228,7128,6534],{"class":234},[228,7130,19],{"class":238},[228,7132,1282],{"class":234},[228,7134,1305],{"class":238},[228,7136,7137],{"class":230,"line":1443},[228,7138,7139],{"class":297},"    \u002F\u002F利用指针遍历数组\n",[228,7141,7142,7144,7146,7149,7151],{"class":230,"line":1726},[228,7143,2099],{"class":234},[228,7145,6633],{"class":234},[228,7147,7148],{"class":238},"p2",[228,7150,284],{"class":234},[228,7152,7153],{"class":238},"arr;\n",[228,7155,7156,7158,7160,7162,7164,7166,7168,7170,7172,7174,7176,7178],{"class":230,"line":1731},[228,7157,3315],{"class":234},[228,7159,1772],{"class":238},[228,7161,242],{"class":234},[228,7163,3146],{"class":238},[228,7165,284],{"class":234},[228,7167,430],{"class":287},[228,7169,3153],{"class":238},[228,7171,1148],{"class":234},[228,7173,684],{"class":287},[228,7175,3153],{"class":238},[228,7177,2406],{"class":234},[228,7179,245],{"class":238},[228,7181,7182],{"class":230,"line":1737},[228,7183,2144],{"class":238},[228,7185,7186,7188,7190,7192,7194],{"class":230,"line":1742},[228,7187,3565],{"class":238},[228,7189,6534],{"class":234},[228,7191,7148],{"class":238},[228,7193,1282],{"class":234},[228,7195,1305],{"class":238},[228,7197,7198,7201,7203],{"class":230,"line":1756},[228,7199,7200],{"class":238},"        p2",[228,7202,2406],{"class":234},[228,7204,1404],{"class":238},[228,7206,7207],{"class":230,"line":1761},[228,7208,2301],{"class":238},[228,7210,7211],{"class":230,"line":1767},[228,7212,1679],{"class":238},[14,7214,7216],{"id":7215},"_37指针和函数","3.7指针和函数",[19,7218,7219],{},"利用指针做函数参数，可以修改实参的值",[19,7221,7222],{},"值传递：只改变形参，不改变实参",[19,7224,7225],{},"地址传递：",[220,7227,7229],{"className":222,"code":7228,"language":224,"meta":141,"style":141},"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",[30,7230,7231,7256,7260,7272,7283,7293,7297,7305,7309,7321,7333,7338,7354,7369,7384],{"__ignoreMap":141},[228,7232,7233,7235,7237,7239,7241,7243,7246,7248,7250,7252,7254],{"class":230,"line":231},[228,7234,5479],{"class":234},[228,7236,5482],{"class":2077},[228,7238,239],{"class":238},[228,7240,242],{"class":234},[228,7242,6633],{"class":234},[228,7244,7245],{"class":5331},"p1",[228,7247,616],{"class":238},[228,7249,242],{"class":234},[228,7251,6633],{"class":234},[228,7253,7148],{"class":5331},[228,7255,245],{"class":238},[228,7257,7258],{"class":230,"line":142},[228,7259,1660],{"class":238},[228,7261,7262,7264,7266,7269],{"class":230,"line":1293},[228,7263,2099],{"class":234},[228,7265,4369],{"class":238},[228,7267,7268],{"class":234},"=*",[228,7270,7271],{"class":238},"p1;\n",[228,7273,7274,7276,7278,7280],{"class":230,"line":1308},[228,7275,6518],{"class":234},[228,7277,7245],{"class":238},[228,7279,7268],{"class":234},[228,7281,7282],{"class":238},"p2;\n",[228,7284,7285,7287,7289,7291],{"class":230,"line":1314},[228,7286,6518],{"class":234},[228,7288,7148],{"class":238},[228,7290,284],{"class":234},[228,7292,4394],{"class":238},[228,7294,7295],{"class":230,"line":1328},[228,7296,1679],{"class":238},[228,7298,7299,7301,7303],{"class":230,"line":1334},[228,7300,242],{"class":234},[228,7302,2087],{"class":2077},[228,7304,2090],{"class":238},[228,7306,7307],{"class":230,"line":1425},[228,7308,1660],{"class":238},[228,7310,7311,7313,7315,7317,7319],{"class":230,"line":1431},[228,7312,2099],{"class":234},[228,7314,1512],{"class":238},[228,7316,284],{"class":234},[228,7318,684],{"class":287},[228,7320,1404],{"class":238},[228,7322,7323,7325,7327,7329,7331],{"class":230,"line":1443},[228,7324,2099],{"class":234},[228,7326,2947],{"class":238},[228,7328,284],{"class":234},[228,7330,938],{"class":287},[228,7332,1404],{"class":238},[228,7334,7335],{"class":230,"line":1726},[228,7336,7337],{"class":297},"    \u002F\u002F地址传递\n",[228,7339,7340,7342,7344,7346,7349,7351],{"class":230,"line":1731},[228,7341,5676],{"class":2077},[228,7343,239],{"class":238},[228,7345,591],{"class":234},[228,7347,7348],{"class":238},"a,",[228,7350,591],{"class":234},[228,7352,7353],{"class":238},"b);\n",[228,7355,7356,7358,7360,7362,7364,7366],{"class":230,"line":1737},[228,7357,1665],{"class":238},[228,7359,1282],{"class":234},[228,7361,476],{"class":238},[228,7363,1282],{"class":234},[228,7365,1352],{"class":238},[228,7367,7368],{"class":297},"\u002F\u002F20\n",[228,7370,7371,7373,7375,7377,7379,7381],{"class":230,"line":1742},[228,7372,1665],{"class":238},[228,7374,1282],{"class":234},[228,7376,501],{"class":238},[228,7378,1282],{"class":234},[228,7380,1352],{"class":238},[228,7382,7383],{"class":297},"\u002F\u002F10\n",[228,7385,7386],{"class":230,"line":1756},[228,7387,1679],{"class":238},[19,7389,7390],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,7392,7394],{"id":7393},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,7396,7397],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,7399,7400,7401,7403],{},"例如数组：int arr",[228,7402,684],{},"={4,3,6,9,1,2,10,8,7,5}",[220,7405,7407],{"className":222,"code":7406,"language":224,"meta":141,"style":141},"#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",[30,7408,7409,7415,7425,7449,7453,7484,7488,7522,7526,7544,7548,7559,7574,7589,7593,7597,7601,7605,7609,7617,7621,7626,7680,7692,7704,7709,7717,7721,7726,7751,7755,7770,7779,7783],{"__ignoreMap":141},[228,7410,7411,7413],{"class":230,"line":231},[228,7412,2063],{"class":234},[228,7414,2066],{"class":343},[228,7416,7417,7419,7421,7423],{"class":230,"line":142},[228,7418,2071],{"class":234},[228,7420,2074],{"class":234},[228,7422,2078],{"class":2077},[228,7424,1404],{"class":238},[228,7426,7427,7429,7432,7434,7436,7438,7440,7442,7444,7447],{"class":230,"line":1293},[228,7428,5479],{"class":234},[228,7430,7431],{"class":2077}," bubbleSort",[228,7433,239],{"class":238},[228,7435,242],{"class":234},[228,7437,6633],{"class":234},[228,7439,19],{"class":5331},[228,7441,616],{"class":238},[228,7443,242],{"class":234},[228,7445,7446],{"class":5331}," len",[228,7448,245],{"class":238},[228,7450,7451],{"class":230,"line":1308},[228,7452,1660],{"class":238},[228,7454,7455,7457,7459,7461,7463,7465,7467,7469,7471,7474,7476,7478,7480,7482],{"class":230,"line":1314},[228,7456,3315],{"class":234},[228,7458,239],{"class":238},[228,7460,242],{"class":234},[228,7462,3146],{"class":238},[228,7464,284],{"class":234},[228,7466,430],{"class":287},[228,7468,3153],{"class":238},[228,7470,1148],{"class":234},[228,7472,7473],{"class":238},"len",[228,7475,770],{"class":234},[228,7477,456],{"class":287},[228,7479,3153],{"class":238},[228,7481,2406],{"class":234},[228,7483,245],{"class":238},[228,7485,7486],{"class":230,"line":1328},[228,7487,2144],{"class":238},[228,7489,7490,7492,7494,7496,7498,7500,7502,7504,7506,7508,7510,7512,7514,7516,7518,7520],{"class":230,"line":1334},[228,7491,3517],{"class":234},[228,7493,239],{"class":238},[228,7495,242],{"class":234},[228,7497,3524],{"class":238},[228,7499,284],{"class":234},[228,7501,430],{"class":287},[228,7503,3531],{"class":238},[228,7505,1148],{"class":234},[228,7507,7473],{"class":238},[228,7509,770],{"class":234},[228,7511,679],{"class":238},[228,7513,770],{"class":234},[228,7515,456],{"class":287},[228,7517,3531],{"class":238},[228,7519,2406],{"class":234},[228,7521,245],{"class":238},[228,7523,7524],{"class":230,"line":1425},[228,7525,2624],{"class":238},[228,7527,7528,7530,7533,7535,7538,7540,7542],{"class":230,"line":1431},[228,7529,4756],{"class":234},[228,7531,7532],{"class":238},"(p[j]",[228,7534,1198],{"class":234},[228,7536,7537],{"class":238},"p[j",[228,7539,719],{"class":234},[228,7541,456],{"class":287},[228,7543,4771],{"class":238},[228,7545,7546],{"class":230,"line":1443},[228,7547,4776],{"class":238},[228,7549,7550,7552,7554,7556],{"class":230,"line":1726},[228,7551,4781],{"class":234},[228,7553,4369],{"class":238},[228,7555,284],{"class":234},[228,7557,7558],{"class":238},"p[j];\n",[228,7560,7561,7564,7566,7568,7570,7572],{"class":230,"line":1731},[228,7562,7563],{"class":238},"                p[j]",[228,7565,284],{"class":234},[228,7567,7537],{"class":238},[228,7569,719],{"class":234},[228,7571,456],{"class":287},[228,7573,4804],{"class":238},[228,7575,7576,7579,7581,7583,7585,7587],{"class":230,"line":1737},[228,7577,7578],{"class":238},"                p[j",[228,7580,719],{"class":234},[228,7582,456],{"class":287},[228,7584,1178],{"class":238},[228,7586,284],{"class":234},[228,7588,4394],{"class":238},[228,7590,7591],{"class":230,"line":1742},[228,7592,4824],{"class":238},[228,7594,7595],{"class":230,"line":1756},[228,7596,2643],{"class":238},[228,7598,7599],{"class":230,"line":1761},[228,7600,2301],{"class":238},[228,7602,7603],{"class":230,"line":1767},[228,7604,1679],{"class":238},[228,7606,7607],{"class":230,"line":1788},[228,7608,2514],{"emptyLinePlaceholder":157},[228,7610,7611,7613,7615],{"class":230,"line":1793},[228,7612,242],{"class":234},[228,7614,2087],{"class":2077},[228,7616,2090],{"class":238},[228,7618,7619],{"class":230,"line":1807},[228,7620,1660],{"class":238},[228,7622,7623],{"class":230,"line":1812},[228,7624,7625],{"class":297},"    \u002F\u002F 1.创建数组\n",[228,7627,7628,7630,7632,7634,7636,7638,7640,7642,7644,7646,7648,7650,7652,7654,7656,7658,7660,7662,7664,7666,7668,7670,7672,7674,7676,7678],{"class":230,"line":1841},[228,7629,2099],{"class":234},[228,7631,4076],{"class":238},[228,7633,684],{"class":287},[228,7635,1178],{"class":238},[228,7637,284],{"class":234},[228,7639,1134],{"class":238},[228,7641,531],{"class":287},[228,7643,616],{"class":238},[228,7645,310],{"class":287},[228,7647,616],{"class":238},[228,7649,582],{"class":287},[228,7651,616],{"class":238},[228,7653,658],{"class":287},[228,7655,616],{"class":238},[228,7657,456],{"class":287},[228,7659,616],{"class":238},[228,7661,316],{"class":287},[228,7663,616],{"class":238},[228,7665,684],{"class":287},[228,7667,616],{"class":238},[228,7669,633],{"class":287},[228,7671,616],{"class":238},[228,7673,607],{"class":287},[228,7675,616],{"class":238},[228,7677,557],{"class":287},[228,7679,4109],{"class":238},[228,7681,7682,7684,7686,7688,7690],{"class":230,"line":1846},[228,7683,2099],{"class":234},[228,7685,7446],{"class":238},[228,7687,284],{"class":234},[228,7689,684],{"class":287},[228,7691,1404],{"class":238},[228,7693,7694,7696,7698,7700,7702],{"class":230,"line":1863},[228,7695,2099],{"class":234},[228,7697,6633],{"class":234},[228,7699,19],{"class":238},[228,7701,284],{"class":234},[228,7703,7153],{"class":238},[228,7705,7706],{"class":230,"line":1868},[228,7707,7708],{"class":297},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[228,7710,7711,7714],{"class":230,"line":1873},[228,7712,7713],{"class":2077},"    bubbleSort",[228,7715,7716],{"class":238},"(p,len);\n",[228,7718,7719],{"class":230,"line":1878},[228,7720,2514],{"emptyLinePlaceholder":157},[228,7722,7723],{"class":230,"line":1892},[228,7724,7725],{"class":297},"    \u002F\u002F 3.打印排序后的数组\n",[228,7727,7728,7730,7732,7734,7736,7738,7740,7742,7744,7747,7749],{"class":230,"line":1897},[228,7729,3315],{"class":234},[228,7731,1772],{"class":238},[228,7733,242],{"class":234},[228,7735,3146],{"class":238},[228,7737,284],{"class":234},[228,7739,430],{"class":287},[228,7741,3328],{"class":238},[228,7743,1148],{"class":234},[228,7745,7746],{"class":238},"len; i",[228,7748,2406],{"class":234},[228,7750,245],{"class":238},[228,7752,7753],{"class":230,"line":2691},[228,7754,2144],{"class":238},[228,7756,7757,7759,7761,7763,7765,7768],{"class":230,"line":2705},[228,7758,3565],{"class":238},[228,7760,6534],{"class":234},[228,7762,19],{"class":238},[228,7764,1282],{"class":234},[228,7766,7767],{"class":343},"\"\"",[228,7769,1404],{"class":238},[228,7771,7772,7775,7777],{"class":230,"line":2713},[228,7773,7774],{"class":238},"        p",[228,7776,2406],{"class":234},[228,7778,1404],{"class":238},[228,7780,7781],{"class":230,"line":2718},[228,7782,2301],{"class":238},[228,7784,7785],{"class":230,"line":2724},[228,7786,1679],{"class":238},[5241,7788,7789],{},"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":141,"searchDepth":142,"depth":142,"links":7791},[7792,7793,7794,7795,7796,7797,7798,7799],{"id":6398,"depth":142,"text":6399},{"id":6564,"depth":142,"text":6565},{"id":6720,"depth":142,"text":6721},{"id":6798,"depth":142,"text":6799},{"id":6877,"depth":142,"text":6878},{"id":6976,"depth":142,"text":6977},{"id":7215,"depth":142,"text":7216},{"id":7393,"depth":142,"text":7394},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6387,"description":6395},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7806,"title":7807,"body":7808,"description":7815,"extension":155,"meta":10789,"navigation":157,"path":10790,"seo":10791,"stem":10792,"__hash__":10793},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7809,"toc":10780},[7810,7813,7816,7820,7823,7826,7837,8175,8178,8182,8185,8192,8447,8451,8454,8457,8612,8616,8619,8622,8828,8832,8835,9138,9141,9149,9153,9156,9307,9309,9320,9377,9381,9386,10043,10051,10054,10148,10151,10771,10777],[10,7811,7807],{"id":7812},"_4结构体",[19,7814,7815],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,7817,7819],{"id":7818},"_41结构体定义与使用","4.1结构体定义与使用",[19,7821,7822],{},"语法：struct 结构体名 {结构体成员列表}；",[19,7824,7825],{},"通过结构体创建变量的方式：",[1245,7827,7828,7831,7834],{},[186,7829,7830],{},"struct 结构体名 变量名",[186,7832,7833],{},"struct 结构体名 变量名={成员1值，成员2值...}",[186,7835,7836],{},"定义结构体时顺便创建变量",[220,7838,7840],{"className":222,"code":7839,"language":224,"meta":141,"style":141},"#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",[30,7841,7842,7848,7858,7865,7870,7878,7882,7887,7891,7896,7901,7906,7913,7918,7925,7929,7936,7940,7944,7948,7952,7956,7960,7966,7970,7976,7984,7992,7996,8001,8006,8017,8022,8034,8045,8056,8061,8085,8090,8096,8123,8128,8134,8146,8158,8170],{"__ignoreMap":141},[228,7843,7844,7846],{"class":230,"line":231},[228,7845,2063],{"class":234},[228,7847,2066],{"class":343},[228,7849,7850,7852,7854,7856],{"class":230,"line":142},[228,7851,2071],{"class":234},[228,7853,2074],{"class":234},[228,7855,2078],{"class":2077},[228,7857,1404],{"class":238},[228,7859,7860,7862],{"class":230,"line":1293},[228,7861,2063],{"class":234},[228,7863,7864],{"class":343},"\u003Cstring>\n",[228,7866,7867],{"class":230,"line":1308},[228,7868,7869],{"class":297},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[228,7871,7872,7875],{"class":230,"line":1314},[228,7873,7874],{"class":234},"struct",[228,7876,7877],{"class":2077}," Student\n",[228,7879,7880],{"class":230,"line":1328},[228,7881,1660],{"class":238},[228,7883,7884],{"class":230,"line":1334},[228,7885,7886],{"class":297},"    \u002F\u002F成员列表\n",[228,7888,7889],{"class":230,"line":1425},[228,7890,2514],{"emptyLinePlaceholder":157},[228,7892,7893],{"class":230,"line":1431},[228,7894,7895],{"class":297},"    \u002F\u002F姓名\n",[228,7897,7898],{"class":230,"line":1443},[228,7899,7900],{"class":238},"    string name;\n",[228,7902,7903],{"class":230,"line":1726},[228,7904,7905],{"class":297},"    \u002F\u002F年龄\n",[228,7907,7908,7910],{"class":230,"line":1731},[228,7909,2099],{"class":234},[228,7911,7912],{"class":238}," age;\n",[228,7914,7915],{"class":230,"line":1737},[228,7916,7917],{"class":297},"    \u002F\u002F分数\n",[228,7919,7920,7922],{"class":230,"line":1742},[228,7921,2099],{"class":234},[228,7923,7924],{"class":238}," score;\n",[228,7926,7927],{"class":230,"line":1756},[228,7928,4109],{"class":238},[228,7930,7931,7933],{"class":230,"line":1761},[228,7932,7874],{"class":234},[228,7934,7935],{"class":2077}," School\n",[228,7937,7938],{"class":230,"line":1767},[228,7939,1660],{"class":238},[228,7941,7942],{"class":230,"line":1788},[228,7943,7886],{"class":297},[228,7945,7946],{"class":230,"line":1793},[228,7947,2514],{"emptyLinePlaceholder":157},[228,7949,7950],{"class":230,"line":1807},[228,7951,7895],{"class":297},[228,7953,7954],{"class":230,"line":1812},[228,7955,7900],{"class":238},[228,7957,7958],{"class":230,"line":1841},[228,7959,7905],{"class":297},[228,7961,7962,7964],{"class":230,"line":1846},[228,7963,2099],{"class":234},[228,7965,7912],{"class":238},[228,7967,7968],{"class":230,"line":1863},[228,7969,7917],{"class":297},[228,7971,7972,7974],{"class":230,"line":1868},[228,7973,2099],{"class":234},[228,7975,7924],{"class":238},[228,7977,7978,7981],{"class":230,"line":1873},[228,7979,7980],{"class":238},"} s3;",[228,7982,7983],{"class":297}," \u002F\u002F创建结构体时就创建了变量\n",[228,7985,7986,7988,7990],{"class":230,"line":1878},[228,7987,242],{"class":234},[228,7989,2087],{"class":2077},[228,7991,2090],{"class":238},[228,7993,7994],{"class":230,"line":1892},[228,7995,1660],{"class":238},[228,7997,7998],{"class":230,"line":1897},[228,7999,8000],{"class":297},"    \u002F\u002F2.通过学生类型创建具体学生\n",[228,8002,8003],{"class":230,"line":2691},[228,8004,8005],{"class":297},"    \u002F\u002F2.1 struct Student s1;\n",[228,8007,8008,8011,8014],{"class":230,"line":2705},[228,8009,8010],{"class":234},"    struct",[228,8012,8013],{"class":2077}," Student",[228,8015,8016],{"class":238}," s1;\n",[228,8018,8019],{"class":230,"line":2713},[228,8020,8021],{"class":297},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[228,8023,8024,8027,8029,8032],{"class":230,"line":2718},[228,8025,8026],{"class":238},"    s1.name",[228,8028,284],{"class":234},[228,8030,8031],{"class":343},"\"张三\"",[228,8033,1404],{"class":238},[228,8035,8036,8039,8041,8043],{"class":230,"line":2724},[228,8037,8038],{"class":238},"    s1.age",[228,8040,284],{"class":234},[228,8042,888],{"class":287},[228,8044,1404],{"class":238},[228,8046,8047,8050,8052,8054],{"class":230,"line":2730},[228,8048,8049],{"class":238},"    s1.score",[228,8051,284],{"class":234},[228,8053,492],{"class":287},[228,8055,1404],{"class":238},[228,8057,8058],{"class":230,"line":2735},[228,8059,8060],{"class":297},"    \u002F\u002F输出结果\n",[228,8062,8064,8066,8068,8071,8073,8076,8078,8081,8083],{"class":230,"line":8063},37,[228,8065,1665],{"class":238},[228,8067,1282],{"class":234},[228,8069,8070],{"class":238},"s1.name",[228,8072,1282],{"class":234},[228,8074,8075],{"class":238},"s1.age",[228,8077,1282],{"class":234},[228,8079,8080],{"class":238},"s1.score",[228,8082,1282],{"class":234},[228,8084,1305],{"class":238},[228,8086,8088],{"class":230,"line":8087},38,[228,8089,2514],{"emptyLinePlaceholder":157},[228,8091,8093],{"class":230,"line":8092},39,[228,8094,8095],{"class":297},"    \u002F\u002F2.2 struct Student s2={...}\n",[228,8097,8099,8101,8103,8106,8108,8110,8113,8115,8117,8119,8121],{"class":230,"line":8098},40,[228,8100,8010],{"class":234},[228,8102,8013],{"class":2077},[228,8104,8105],{"class":238}," s2",[228,8107,284],{"class":234},[228,8109,1134],{"class":238},[228,8111,8112],{"class":343},"\"王五\"",[228,8114,616],{"class":238},[228,8116,888],{"class":287},[228,8118,616],{"class":238},[228,8120,492],{"class":287},[228,8122,4109],{"class":238},[228,8124,8126],{"class":230,"line":8125},41,[228,8127,2514],{"emptyLinePlaceholder":157},[228,8129,8131],{"class":230,"line":8130},42,[228,8132,8133],{"class":297},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[228,8135,8137,8140,8142,8144],{"class":230,"line":8136},43,[228,8138,8139],{"class":238},"    s3.name",[228,8141,284],{"class":234},[228,8143,3792],{"class":343},[228,8145,1404],{"class":238},[228,8147,8149,8152,8154,8156],{"class":230,"line":8148},44,[228,8150,8151],{"class":238},"    s3.age",[228,8153,284],{"class":234},[228,8155,888],{"class":287},[228,8157,1404],{"class":238},[228,8159,8161,8164,8166,8168],{"class":230,"line":8160},45,[228,8162,8163],{"class":238},"    s3.score",[228,8165,284],{"class":234},[228,8167,938],{"class":287},[228,8169,1404],{"class":238},[228,8171,8173],{"class":230,"line":8172},46,[228,8174,1679],{"class":238},[19,8176,8177],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,8179,8181],{"id":8180},"_42结构体数组","4.2结构体数组",[19,8183,8184],{},"将自定义的结构体放入到数组中方便维护",[19,8186,8187,8188,8191],{},"语法：struct 结构体名 数组名",[228,8189,8190],{},"元素个数","={ {}，{},...{} };",[220,8193,8195],{"className":222,"code":8194,"language":224,"meta":141,"style":141},"#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",[30,8196,8197,8203,8213,8219,8224,8230,8234,8238,8244,8250,8254,8258,8266,8270,8275,8290,8294,8310,8326,8330,8335,8351,8366,8381,8386,8412,8416,8439,8443],{"__ignoreMap":141},[228,8198,8199,8201],{"class":230,"line":231},[228,8200,2063],{"class":234},[228,8202,2066],{"class":343},[228,8204,8205,8207,8209,8211],{"class":230,"line":142},[228,8206,2071],{"class":234},[228,8208,2074],{"class":234},[228,8210,2078],{"class":2077},[228,8212,1404],{"class":238},[228,8214,8215,8217],{"class":230,"line":1293},[228,8216,2063],{"class":234},[228,8218,7864],{"class":343},[228,8220,8221],{"class":230,"line":1308},[228,8222,8223],{"class":297},"\u002F\u002F1.定义结构体\n",[228,8225,8226,8228],{"class":230,"line":1314},[228,8227,7874],{"class":234},[228,8229,7877],{"class":2077},[228,8231,8232],{"class":230,"line":1328},[228,8233,1660],{"class":238},[228,8235,8236],{"class":230,"line":1334},[228,8237,7900],{"class":238},[228,8239,8240,8242],{"class":230,"line":1425},[228,8241,2099],{"class":234},[228,8243,7912],{"class":238},[228,8245,8246,8248],{"class":230,"line":1431},[228,8247,2099],{"class":234},[228,8249,7924],{"class":238},[228,8251,8252],{"class":230,"line":1443},[228,8253,2514],{"emptyLinePlaceholder":157},[228,8255,8256],{"class":230,"line":1726},[228,8257,4109],{"class":238},[228,8259,8260,8262,8264],{"class":230,"line":1731},[228,8261,242],{"class":234},[228,8263,2087],{"class":2077},[228,8265,2090],{"class":238},[228,8267,8268],{"class":230,"line":1737},[228,8269,1660],{"class":238},[228,8271,8272],{"class":230,"line":1742},[228,8273,8274],{"class":297},"    \u002F\u002F2.创建结构体数组\n",[228,8276,8277,8279,8281,8284,8286,8288],{"class":230,"line":1756},[228,8278,8010],{"class":234},[228,8280,8013],{"class":2077},[228,8282,8283],{"class":238}," stuArray[",[228,8285,316],{"class":287},[228,8287,1178],{"class":238},[228,8289,5022],{"class":234},[228,8291,8292],{"class":230,"line":1761},[228,8293,2144],{"class":238},[228,8295,8296,8298,8300,8302,8304,8306,8308],{"class":230,"line":1767},[228,8297,5031],{"class":238},[228,8299,8031],{"class":343},[228,8301,616],{"class":238},[228,8303,888],{"class":287},[228,8305,616],{"class":238},[228,8307,549],{"class":287},[228,8309,5044],{"class":238},[228,8311,8312,8314,8316,8318,8320,8322,8324],{"class":230,"line":1788},[228,8313,5031],{"class":238},[228,8315,3792],{"class":343},[228,8317,616],{"class":238},[228,8319,813],{"class":287},[228,8321,616],{"class":238},[228,8323,813],{"class":287},[228,8325,1679],{"class":238},[228,8327,8328],{"class":230,"line":1793},[228,8329,2301],{"class":238},[228,8331,8332],{"class":230,"line":1807},[228,8333,8334],{"class":297},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[228,8336,8337,8340,8342,8345,8347,8349],{"class":230,"line":1812},[228,8338,8339],{"class":238},"    stuArray[",[228,8341,456],{"class":287},[228,8343,8344],{"class":238},"].name",[228,8346,284],{"class":234},[228,8348,3815],{"class":343},[228,8350,1404],{"class":238},[228,8352,8353,8355,8357,8360,8362,8364],{"class":230,"line":1841},[228,8354,8339],{"class":238},[228,8356,456],{"class":287},[228,8358,8359],{"class":238},"].age",[228,8361,284],{"class":234},[228,8363,316],{"class":287},[228,8365,1404],{"class":238},[228,8367,8368,8370,8372,8375,8377,8379],{"class":230,"line":1846},[228,8369,8339],{"class":238},[228,8371,456],{"class":287},[228,8373,8374],{"class":238},"].score",[228,8376,284],{"class":234},[228,8378,316],{"class":287},[228,8380,1404],{"class":238},[228,8382,8383],{"class":230,"line":1863},[228,8384,8385],{"class":297},"    \u002F\u002F4.遍历结构体数组\n",[228,8387,8388,8390,8392,8394,8396,8398,8400,8402,8404,8406,8408,8410],{"class":230,"line":1868},[228,8389,3315],{"class":234},[228,8391,1772],{"class":238},[228,8393,242],{"class":234},[228,8395,3146],{"class":238},[228,8397,284],{"class":234},[228,8399,430],{"class":287},[228,8401,3153],{"class":238},[228,8403,1148],{"class":234},[228,8405,316],{"class":287},[228,8407,3153],{"class":238},[228,8409,2406],{"class":234},[228,8411,245],{"class":238},[228,8413,8414],{"class":230,"line":1873},[228,8415,2144],{"class":238},[228,8417,8418,8420,8422,8425,8427,8430,8432,8435,8437],{"class":230,"line":1878},[228,8419,3565],{"class":238},[228,8421,1282],{"class":234},[228,8423,8424],{"class":238},"stuArray[i].name",[228,8426,1282],{"class":234},[228,8428,8429],{"class":238},"stuArray[i].age",[228,8431,1282],{"class":234},[228,8433,8434],{"class":238},"stuArray[i].score",[228,8436,1282],{"class":234},[228,8438,1305],{"class":238},[228,8440,8441],{"class":230,"line":1892},[228,8442,2301],{"class":238},[228,8444,8445],{"class":230,"line":1897},[228,8446,1679],{"class":238},[14,8448,8450],{"id":8449},"_43结构体指针","4.3结构体指针",[19,8452,8453],{},"作用：通过指针访问结构体中的成员",[19,8455,8456],{},"利用操作符->可以通过结构体指针访问结构体属性",[220,8458,8460],{"className":222,"code":8459,"language":224,"meta":141,"style":141},"#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",[30,8461,8462,8468,8478,8484,8488,8494,8498,8502,8508,8514,8518,8526,8530,8535,8560,8565,8580,8585,8608],{"__ignoreMap":141},[228,8463,8464,8466],{"class":230,"line":231},[228,8465,2063],{"class":234},[228,8467,2066],{"class":343},[228,8469,8470,8472,8474,8476],{"class":230,"line":142},[228,8471,2071],{"class":234},[228,8473,2074],{"class":234},[228,8475,2078],{"class":2077},[228,8477,1404],{"class":238},[228,8479,8480,8482],{"class":230,"line":1293},[228,8481,2063],{"class":234},[228,8483,7864],{"class":343},[228,8485,8486],{"class":230,"line":1308},[228,8487,8223],{"class":297},[228,8489,8490,8492],{"class":230,"line":1314},[228,8491,7874],{"class":234},[228,8493,7877],{"class":2077},[228,8495,8496],{"class":230,"line":1328},[228,8497,1660],{"class":238},[228,8499,8500],{"class":230,"line":1334},[228,8501,7900],{"class":238},[228,8503,8504,8506],{"class":230,"line":1425},[228,8505,2099],{"class":234},[228,8507,7912],{"class":238},[228,8509,8510,8512],{"class":230,"line":1431},[228,8511,2099],{"class":234},[228,8513,7924],{"class":238},[228,8515,8516],{"class":230,"line":1443},[228,8517,4109],{"class":238},[228,8519,8520,8522,8524],{"class":230,"line":1726},[228,8521,242],{"class":234},[228,8523,2087],{"class":2077},[228,8525,2090],{"class":238},[228,8527,8528],{"class":230,"line":1731},[228,8529,1660],{"class":238},[228,8531,8532],{"class":230,"line":1737},[228,8533,8534],{"class":297},"    \u002F\u002F创建学生结构体变量\n",[228,8536,8537,8539,8541,8544,8546,8548,8550,8552,8554,8556,8558],{"class":230,"line":1742},[228,8538,8010],{"class":234},[228,8540,8013],{"class":2077},[228,8542,8543],{"class":238}," s",[228,8545,284],{"class":234},[228,8547,1134],{"class":238},[228,8549,8031],{"class":343},[228,8551,616],{"class":238},[228,8553,888],{"class":287},[228,8555,616],{"class":238},[228,8557,1836],{"class":287},[228,8559,4109],{"class":238},[228,8561,8562],{"class":230,"line":1756},[228,8563,8564],{"class":297},"    \u002F\u002F通过指针指向结构体变量\n",[228,8566,8567,8569,8571,8573,8575,8577],{"class":230,"line":1761},[228,8568,8010],{"class":234},[228,8570,8013],{"class":2077},[228,8572,6633],{"class":234},[228,8574,19],{"class":238},[228,8576,6454],{"class":234},[228,8578,8579],{"class":238},"s\n",[228,8581,8582],{"class":230,"line":1767},[228,8583,8584],{"class":297},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[228,8586,8587,8589,8591,8594,8596,8599,8601,8604,8606],{"class":230,"line":1788},[228,8588,1665],{"class":238},[228,8590,1282],{"class":234},[228,8592,8593],{"class":238},"p->name",[228,8595,1282],{"class":234},[228,8597,8598],{"class":238},"p->age",[228,8600,1282],{"class":234},[228,8602,8603],{"class":238},"p->score",[228,8605,1282],{"class":234},[228,8607,1305],{"class":238},[228,8609,8610],{"class":230,"line":1793},[228,8611,1679],{"class":238},[14,8613,8615],{"id":8614},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,8617,8618],{},"作用：结构体中的成员可以是另一个结构体",[19,8620,8621],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[220,8623,8625],{"className":222,"code":8624,"language":224,"meta":141,"style":141},"#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",[30,8626,8627,8633,8643,8649,8654,8662,8666,8670,8676,8682,8686,8691,8698,8702,8709,8713,8719,8724,8728,8736,8740,8745,8750,8755,8766,8778,8789,8802,8813,8824],{"__ignoreMap":141},[228,8628,8629,8631],{"class":230,"line":231},[228,8630,2063],{"class":234},[228,8632,2066],{"class":343},[228,8634,8635,8637,8639,8641],{"class":230,"line":142},[228,8636,2071],{"class":234},[228,8638,2074],{"class":234},[228,8640,2078],{"class":2077},[228,8642,1404],{"class":238},[228,8644,8645,8647],{"class":230,"line":1293},[228,8646,2063],{"class":234},[228,8648,7864],{"class":343},[228,8650,8651],{"class":230,"line":1308},[228,8652,8653],{"class":297},"\u002F\u002F定义学生结构体\n",[228,8655,8656,8658,8660],{"class":230,"line":1314},[228,8657,7874],{"class":234},[228,8659,8013],{"class":2077},[228,8661,2788],{"class":238},[228,8663,8664],{"class":230,"line":1328},[228,8665,1660],{"class":238},[228,8667,8668],{"class":230,"line":1334},[228,8669,7900],{"class":238},[228,8671,8672,8674],{"class":230,"line":1425},[228,8673,2099],{"class":234},[228,8675,7912],{"class":238},[228,8677,8678,8680],{"class":230,"line":1431},[228,8679,2099],{"class":234},[228,8681,7924],{"class":238},[228,8683,8684],{"class":230,"line":1443},[228,8685,1679],{"class":238},[228,8687,8688],{"class":230,"line":1726},[228,8689,8690],{"class":297},"\u002F\u002F定义老师结构体\n",[228,8692,8693,8695],{"class":230,"line":1731},[228,8694,7874],{"class":234},[228,8696,8697],{"class":2077}," Teacher\n",[228,8699,8700],{"class":230,"line":1737},[228,8701,1660],{"class":238},[228,8703,8704,8706],{"class":230,"line":1742},[228,8705,2099],{"class":234},[228,8707,8708],{"class":238}," id;\n",[228,8710,8711],{"class":230,"line":1756},[228,8712,7900],{"class":238},[228,8714,8715,8717],{"class":230,"line":1761},[228,8716,2099],{"class":234},[228,8718,7912],{"class":238},[228,8720,8721],{"class":230,"line":1767},[228,8722,8723],{"class":238},"    Student stu;\n",[228,8725,8726],{"class":230,"line":1788},[228,8727,1679],{"class":238},[228,8729,8730,8732,8734],{"class":230,"line":1793},[228,8731,242],{"class":234},[228,8733,2087],{"class":2077},[228,8735,6093],{"class":238},[228,8737,8738],{"class":230,"line":1807},[228,8739,1660],{"class":238},[228,8741,8742],{"class":230,"line":1812},[228,8743,8744],{"class":297},"    \u002F\u002F结构体嵌套结构体\n",[228,8746,8747],{"class":230,"line":1841},[228,8748,8749],{"class":297},"    \u002F\u002F创建老师\n",[228,8751,8752],{"class":230,"line":1846},[228,8753,8754],{"class":238},"    Teacher t;\n",[228,8756,8757,8760,8762,8764],{"class":230,"line":1863},[228,8758,8759],{"class":238},"    t.id",[228,8761,284],{"class":234},[228,8763,549],{"class":287},[228,8765,1404],{"class":238},[228,8767,8768,8771,8773,8776],{"class":230,"line":1868},[228,8769,8770],{"class":238},"    t.name",[228,8772,284],{"class":234},[228,8774,8775],{"class":343},"\"老王\"",[228,8777,1404],{"class":238},[228,8779,8780,8783,8785,8787],{"class":230,"line":1873},[228,8781,8782],{"class":238},"    t.age",[228,8784,284],{"class":234},[228,8786,888],{"class":287},[228,8788,1404],{"class":238},[228,8790,8791,8794,8796,8799],{"class":230,"line":1878},[228,8792,8793],{"class":238},"    t.stu.name",[228,8795,284],{"class":234},[228,8797,8798],{"class":343},"\"小王\"",[228,8800,8801],{"class":238},"；\n",[228,8803,8804,8807,8809,8811],{"class":230,"line":1892},[228,8805,8806],{"class":238},"    t.stu.age",[228,8808,284],{"class":234},[228,8810,938],{"class":287},[228,8812,1404],{"class":238},[228,8814,8815,8818,8820,8822],{"class":230,"line":1897},[228,8816,8817],{"class":238},"    t.stu.score",[228,8819,284],{"class":234},[228,8821,582],{"class":287},[228,8823,1404],{"class":238},[228,8825,8826],{"class":230,"line":2691},[228,8827,1679],{"class":238},[14,8829,8831],{"id":8830},"_45结构体做函数参数","4.5结构体做函数参数",[19,8833,8834],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[220,8836,8838],{"className":222,"code":8837,"language":224,"meta":141,"style":141},"#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",[30,8839,8840,8846,8856,8862,8868,8872,8876,8882,8888,8892,8897,8902,8919,8923,8956,8960,8965,8984,8988,9019,9023,9031,9035,9044,9056,9068,9080,9093,9101,9114,9126,9134],{"__ignoreMap":141},[228,8841,8842,8844],{"class":230,"line":231},[228,8843,2063],{"class":234},[228,8845,2066],{"class":343},[228,8847,8848,8850,8852,8854],{"class":230,"line":142},[228,8849,2071],{"class":234},[228,8851,2074],{"class":234},[228,8853,2078],{"class":2077},[228,8855,1404],{"class":238},[228,8857,8858,8860],{"class":230,"line":1293},[228,8859,2063],{"class":234},[228,8861,7864],{"class":343},[228,8863,8864,8866],{"class":230,"line":1308},[228,8865,7874],{"class":234},[228,8867,7877],{"class":2077},[228,8869,8870],{"class":230,"line":1314},[228,8871,1660],{"class":238},[228,8873,8874],{"class":230,"line":1328},[228,8875,7900],{"class":238},[228,8877,8878,8880],{"class":230,"line":1334},[228,8879,2099],{"class":234},[228,8881,7912],{"class":238},[228,8883,8884,8886],{"class":230,"line":1425},[228,8885,2099],{"class":234},[228,8887,7924],{"class":238},[228,8889,8890],{"class":230,"line":1431},[228,8891,4109],{"class":238},[228,8893,8894],{"class":230,"line":1443},[228,8895,8896],{"class":297},"\u002F\u002F打印学生信息的函数\n",[228,8898,8899],{"class":230,"line":1726},[228,8900,8901],{"class":297},"\u002F\u002F值传递\n",[228,8903,8904,8906,8909,8911,8913,8915,8917],{"class":230,"line":1731},[228,8905,5479],{"class":234},[228,8907,8908],{"class":2077}," printStudent1",[228,8910,239],{"class":238},[228,8912,7874],{"class":234},[228,8914,8013],{"class":2077},[228,8916,8543],{"class":5331},[228,8918,245],{"class":238},[228,8920,8921],{"class":230,"line":1737},[228,8922,1660],{"class":238},[228,8924,8925,8927,8929,8932,8934,8937,8939,8942,8944,8946,8948,8951,8953],{"class":230,"line":1742},[228,8926,6644],{"class":238},[228,8928,1282],{"class":234},[228,8930,8931],{"class":238}," s.name ",[228,8933,1282],{"class":234},[228,8935,8936],{"class":343}," \" \"",[228,8938,1558],{"class":234},[228,8940,8941],{"class":238}," s.age ",[228,8943,1282],{"class":234},[228,8945,8936],{"class":343},[228,8947,1558],{"class":234},[228,8949,8950],{"class":238}," s.score ",[228,8952,1282],{"class":234},[228,8954,8955],{"class":238}," endl;\n",[228,8957,8958],{"class":230,"line":1756},[228,8959,1679],{"class":238},[228,8961,8962],{"class":230,"line":1761},[228,8963,8964],{"class":297},"\u002F\u002F地址传递\n",[228,8966,8967,8969,8972,8974,8976,8978,8980,8982],{"class":230,"line":1767},[228,8968,5479],{"class":234},[228,8970,8971],{"class":2077}," printStudent2",[228,8973,239],{"class":238},[228,8975,7874],{"class":234},[228,8977,8013],{"class":2077},[228,8979,6633],{"class":234},[228,8981,933],{"class":5331},[228,8983,245],{"class":238},[228,8985,8986],{"class":230,"line":1788},[228,8987,1660],{"class":238},[228,8989,8990,8992,8994,8997,8999,9001,9003,9006,9008,9010,9012,9015,9017],{"class":230,"line":1793},[228,8991,6644],{"class":238},[228,8993,1282],{"class":234},[228,8995,8996],{"class":238}," s->name ",[228,8998,1282],{"class":234},[228,9000,8936],{"class":343},[228,9002,1558],{"class":234},[228,9004,9005],{"class":238}," s->age ",[228,9007,1282],{"class":234},[228,9009,8936],{"class":343},[228,9011,1558],{"class":234},[228,9013,9014],{"class":238}," s->score ",[228,9016,1282],{"class":234},[228,9018,8955],{"class":238},[228,9020,9021],{"class":230,"line":1807},[228,9022,1679],{"class":238},[228,9024,9025,9027,9029],{"class":230,"line":1812},[228,9026,242],{"class":234},[228,9028,2087],{"class":2077},[228,9030,2090],{"class":238},[228,9032,9033],{"class":230,"line":1841},[228,9034,1660],{"class":238},[228,9036,9037,9039,9041],{"class":230,"line":1846},[228,9038,8010],{"class":234},[228,9040,8013],{"class":2077},[228,9042,9043],{"class":238}," s;\n",[228,9045,9046,9049,9051,9054],{"class":230,"line":1863},[228,9047,9048],{"class":238},"    s.name ",[228,9050,284],{"class":234},[228,9052,9053],{"class":343}," \"张三\"",[228,9055,1404],{"class":238},[228,9057,9058,9061,9063,9066],{"class":230,"line":1868},[228,9059,9060],{"class":238},"    s.age ",[228,9062,284],{"class":234},[228,9064,9065],{"class":287}," 20",[228,9067,1404],{"class":238},[228,9069,9070,9073,9075,9078],{"class":230,"line":1873},[228,9071,9072],{"class":238},"    s.score ",[228,9074,284],{"class":234},[228,9076,9077],{"class":287}," 85",[228,9079,1404],{"class":238},[228,9081,9082,9084,9086,9089,9091],{"class":230,"line":1878},[228,9083,1665],{"class":238},[228,9085,1282],{"class":234},[228,9087,9088],{"class":343},"\"值传递:\"",[228,9090,1282],{"class":234},[228,9092,1305],{"class":238},[228,9094,9095,9098],{"class":230,"line":1892},[228,9096,9097],{"class":2077},"    printStudent1",[228,9099,9100],{"class":238},"(s);\n",[228,9102,9103,9105,9107,9110,9112],{"class":230,"line":1897},[228,9104,1665],{"class":238},[228,9106,1282],{"class":234},[228,9108,9109],{"class":343},"\"地址传递:\"",[228,9111,1282],{"class":234},[228,9113,1305],{"class":238},[228,9115,9116,9119,9121,9123],{"class":230,"line":2691},[228,9117,9118],{"class":2077},"    printStudent2",[228,9120,239],{"class":238},[228,9122,591],{"class":234},[228,9124,9125],{"class":238},"s); \n",[228,9127,9128,9130,9132],{"class":230,"line":2705},[228,9129,4204],{"class":234},[228,9131,4207],{"class":287},[228,9133,1404],{"class":238},[228,9135,9136],{"class":230,"line":2713},[228,9137,1679],{"class":238},[19,9139,9140],{},"注意：",[1245,9142,9143,9146],{},[186,9144,9145],{},"1.先定义结构体，不要在函数中写结构体的定义",[186,9147,9148],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,9150,9152],{"id":9151},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,9154,9155],{},"用const防止误操作",[220,9157,9159],{"className":222,"code":9158,"language":224,"meta":141,"style":141},"#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",[30,9160,9161,9167,9177,9183,9188,9192,9196,9202,9208,9212,9228,9232,9255,9259,9267,9271,9292,9299,9303],{"__ignoreMap":141},[228,9162,9163,9165],{"class":230,"line":231},[228,9164,2063],{"class":234},[228,9166,2066],{"class":343},[228,9168,9169,9171,9173,9175],{"class":230,"line":142},[228,9170,2071],{"class":234},[228,9172,2074],{"class":234},[228,9174,2078],{"class":2077},[228,9176,1404],{"class":238},[228,9178,9179,9181],{"class":230,"line":1293},[228,9180,2063],{"class":234},[228,9182,7864],{"class":343},[228,9184,9185],{"class":230,"line":1308},[228,9186,9187],{"class":238},"sctuct Student\n",[228,9189,9190],{"class":230,"line":1314},[228,9191,1660],{"class":238},[228,9193,9194],{"class":230,"line":1328},[228,9195,7900],{"class":238},[228,9197,9198,9200],{"class":230,"line":1334},[228,9199,2099],{"class":234},[228,9201,7912],{"class":238},[228,9203,9204,9206],{"class":230,"line":1425},[228,9205,2099],{"class":234},[228,9207,7924],{"class":238},[228,9209,9210],{"class":230,"line":1431},[228,9211,4109],{"class":238},[228,9213,9214,9216,9219,9221,9224,9226],{"class":230,"line":1443},[228,9215,5479],{"class":234},[228,9217,9218],{"class":2077}," printStudents",[228,9220,239],{"class":238},[228,9222,9223],{"class":2077},"student",[228,9225,8543],{"class":5331},[228,9227,245],{"class":238},[228,9229,9230],{"class":230,"line":1726},[228,9231,1660],{"class":238},[228,9233,9234,9236,9238,9241,9243,9246,9248,9251,9253],{"class":230,"line":1731},[228,9235,1665],{"class":238},[228,9237,1282],{"class":234},[228,9239,9240],{"class":238},"s.name",[228,9242,1282],{"class":234},[228,9244,9245],{"class":238},"s.age",[228,9247,1282],{"class":234},[228,9249,9250],{"class":238},"s.score",[228,9252,1282],{"class":234},[228,9254,1305],{"class":238},[228,9256,9257],{"class":230,"line":1737},[228,9258,1679],{"class":238},[228,9260,9261,9263,9265],{"class":230,"line":1742},[228,9262,242],{"class":234},[228,9264,2087],{"class":2077},[228,9266,6093],{"class":238},[228,9268,9269],{"class":230,"line":1756},[228,9270,1660],{"class":238},[228,9272,9273,9276,9278,9280,9282,9284,9286,9288,9290],{"class":230,"line":1761},[228,9274,9275],{"class":238},"    Student s",[228,9277,284],{"class":234},[228,9279,1134],{"class":238},[228,9281,8031],{"class":343},[228,9283,616],{"class":238},[228,9285,888],{"class":287},[228,9287,616],{"class":238},[228,9289,888],{"class":287},[228,9291,4109],{"class":238},[228,9293,9294,9297],{"class":230,"line":1767},[228,9295,9296],{"class":2077},"    printStudent",[228,9298,9100],{"class":238},[228,9300,9301],{"class":230,"line":1788},[228,9302,2514],{"emptyLinePlaceholder":157},[228,9304,9305],{"class":230,"line":1793},[228,9306,1679],{"class":238},[19,9308,9140],{},[1245,9310,9311,9314,9317],{},[186,9312,9313],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[186,9315,9316],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[186,9318,9319],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[220,9321,9323],{"className":222,"code":9322,"language":224,"meta":141,"style":141},"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",[30,9324,9325,9344,9348,9353,9373],{"__ignoreMap":141},[228,9326,9327,9329,9331,9333,9335,9338,9340,9342],{"class":230,"line":231},[228,9328,5479],{"class":234},[228,9330,9218],{"class":2077},[228,9332,239],{"class":238},[228,9334,6907],{"class":234},[228,9336,9337],{"class":2077}," student",[228,9339,6633],{"class":234},[228,9341,933],{"class":5331},[228,9343,245],{"class":238},[228,9345,9346],{"class":230,"line":142},[228,9347,1660],{"class":238},[228,9349,9350],{"class":230,"line":1293},[228,9351,9352],{"class":297},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[228,9354,9355,9357,9359,9361,9363,9365,9367,9369,9371],{"class":230,"line":1308},[228,9356,1665],{"class":238},[228,9358,1282],{"class":234},[228,9360,9240],{"class":238},[228,9362,1282],{"class":234},[228,9364,9245],{"class":238},[228,9366,1282],{"class":234},[228,9368,9250],{"class":238},[228,9370,1282],{"class":234},[228,9372,1305],{"class":238},[228,9374,9375],{"class":230,"line":1314},[228,9376,1679],{"class":238},[14,9378,9380],{"id":9379},"_47案例","4.7案例",[183,9382,9383],{},[186,9384,9385],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[220,9387,9389],{"className":222,"code":9388,"language":224,"meta":141,"style":141},"#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",[30,9390,9391,9397,9407,9413,9420,9424,9430,9434,9439,9445,9451,9455,9459,9465,9469,9474,9479,9492,9496,9501,9527,9531,9543,9570,9574,9586,9596,9600,9605,9634,9638,9650,9659,9686,9697,9707,9711,9715,9719,9724,9748,9752,9776,9780,9799,9825,9829,9854,9877,9901,9906,9911,9916,9925,9930,9936,9957,9963,9977,9983,10010,10019,10025,10033,10038],{"__ignoreMap":141},[228,9392,9393,9395],{"class":230,"line":231},[228,9394,2063],{"class":234},[228,9396,2066],{"class":343},[228,9398,9399,9401,9403,9405],{"class":230,"line":142},[228,9400,2071],{"class":234},[228,9402,2074],{"class":234},[228,9404,2078],{"class":2077},[228,9406,1404],{"class":238},[228,9408,9409,9411],{"class":230,"line":1293},[228,9410,2063],{"class":234},[228,9412,7864],{"class":343},[228,9414,9415,9417],{"class":230,"line":1308},[228,9416,2063],{"class":234},[228,9418,9419],{"class":343},"\u003Cctime>\n",[228,9421,9422],{"class":230,"line":1314},[228,9423,8653],{"class":297},[228,9425,9426,9428],{"class":230,"line":1328},[228,9427,7874],{"class":234},[228,9429,7877],{"class":2077},[228,9431,9432],{"class":230,"line":1334},[228,9433,1660],{"class":238},[228,9435,9436],{"class":230,"line":1425},[228,9437,9438],{"class":238},"    string sName;\n",[228,9440,9441,9443],{"class":230,"line":1431},[228,9442,2099],{"class":234},[228,9444,7912],{"class":238},[228,9446,9447,9449],{"class":230,"line":1443},[228,9448,2099],{"class":234},[228,9450,7924],{"class":238},[228,9452,9453],{"class":230,"line":1726},[228,9454,4109],{"class":238},[228,9456,9457],{"class":230,"line":1731},[228,9458,8690],{"class":297},[228,9460,9461,9463],{"class":230,"line":1737},[228,9462,7874],{"class":234},[228,9464,8697],{"class":2077},[228,9466,9467],{"class":230,"line":1742},[228,9468,1660],{"class":238},[228,9470,9471],{"class":230,"line":1756},[228,9472,9473],{"class":238},"    string tName;\n",[228,9475,9476],{"class":230,"line":1761},[228,9477,9478],{"class":297},"    \u002F\u002F学生数组\n",[228,9480,9481,9483,9485,9488,9490],{"class":230,"line":1767},[228,9482,8010],{"class":234},[228,9484,8013],{"class":2077},[228,9486,9487],{"class":238}," sArray[",[228,9489,557],{"class":287},[228,9491,4804],{"class":238},[228,9493,9494],{"class":230,"line":1788},[228,9495,4109],{"class":238},[228,9497,9498],{"class":230,"line":1793},[228,9499,9500],{"class":297},"\u002F\u002F给老师和学生赋值的函数\n",[228,9502,9503,9505,9508,9510,9512,9515,9518,9521,9523,9525],{"class":230,"line":1807},[228,9504,5479],{"class":234},[228,9506,9507],{"class":2077}," allocateSpace",[228,9509,239],{"class":238},[228,9511,7874],{"class":234},[228,9513,9514],{"class":2077}," Teacher",[228,9516,9517],{"class":5331}," tArray",[228,9519,9520],{"class":238},"[],",[228,9522,242],{"class":234},[228,9524,7446],{"class":5331},[228,9526,245],{"class":238},[228,9528,9529],{"class":230,"line":1812},[228,9530,1660],{"class":238},[228,9532,9533,9536,9538,9541],{"class":230,"line":1841},[228,9534,9535],{"class":238},"    string nameSeed",[228,9537,284],{"class":234},[228,9539,9540],{"class":343},"\"ABCDE\"",[228,9542,1404],{"class":238},[228,9544,9545,9547,9549,9551,9554,9556,9558,9561,9563,9566,9568],{"class":230,"line":1846},[228,9546,3315],{"class":234},[228,9548,1772],{"class":238},[228,9550,242],{"class":234},[228,9552,9553],{"class":238}," i ",[228,9555,284],{"class":234},[228,9557,4207],{"class":287},[228,9559,9560],{"class":238},"; i ",[228,9562,1148],{"class":234},[228,9564,9565],{"class":238}," len; i",[228,9567,2406],{"class":234},[228,9569,245],{"class":238},[228,9571,9572],{"class":230,"line":1863},[228,9573,2144],{"class":238},[228,9575,9576,9579,9581,9584],{"class":230,"line":1868},[228,9577,9578],{"class":238},"        tArray[i].tName ",[228,9580,284],{"class":234},[228,9582,9583],{"class":343}," \"Teacher_\"",[228,9585,1404],{"class":238},[228,9587,9588,9590,9593],{"class":230,"line":1873},[228,9589,9578],{"class":238},[228,9591,9592],{"class":234},"+=",[228,9594,9595],{"class":238},"nameSeed[i];\n",[228,9597,9598],{"class":230,"line":1878},[228,9599,2514],{"emptyLinePlaceholder":157},[228,9601,9602],{"class":230,"line":1892},[228,9603,9604],{"class":297},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[228,9606,9607,9609,9611,9613,9616,9618,9620,9623,9625,9627,9630,9632],{"class":230,"line":1897},[228,9608,3517],{"class":234},[228,9610,1772],{"class":238},[228,9612,242],{"class":234},[228,9614,9615],{"class":238}," j ",[228,9617,284],{"class":234},[228,9619,4207],{"class":287},[228,9621,9622],{"class":238},"; j ",[228,9624,1148],{"class":234},[228,9626,2262],{"class":287},[228,9628,9629],{"class":238},"; j",[228,9631,2406],{"class":234},[228,9633,245],{"class":238},[228,9635,9636],{"class":230,"line":2691},[228,9637,2624],{"class":238},[228,9639,9640,9643,9645,9648],{"class":230,"line":2705},[228,9641,9642],{"class":238},"            tArray[i].sArray[j].sName ",[228,9644,284],{"class":234},[228,9646,9647],{"class":343}," \"Student_\"",[228,9649,1404],{"class":238},[228,9651,9652,9654,9656],{"class":230,"line":2713},[228,9653,9642],{"class":238},[228,9655,9592],{"class":234},[228,9657,9658],{"class":238}," nameSeed[j];\n",[228,9660,9661,9664,9667,9669,9671,9673,9675,9677,9679,9681,9683],{"class":230,"line":2718},[228,9662,9663],{"class":234},"            int",[228,9665,9666],{"class":238}," random",[228,9668,284],{"class":234},[228,9670,2538],{"class":2077},[228,9672,2541],{"class":238},[228,9674,566],{"class":234},[228,9676,1145],{"class":287},[228,9678,719],{"class":234},[228,9680,639],{"class":287},[228,9682,294],{"class":238},[228,9684,9685],{"class":297},"\u002F\u002F40~99\n",[228,9687,9688,9691,9693,9695],{"class":230,"line":2724},[228,9689,9690],{"class":238},"            tArray[i].sArray[j].age ",[228,9692,284],{"class":234},[228,9694,9065],{"class":287},[228,9696,1404],{"class":238},[228,9698,9699,9702,9704],{"class":230,"line":2730},[228,9700,9701],{"class":238},"            tArray[i].sArray[j].score ",[228,9703,284],{"class":234},[228,9705,9706],{"class":238}," random;\n",[228,9708,9709],{"class":230,"line":2735},[228,9710,2643],{"class":238},[228,9712,9713],{"class":230,"line":8063},[228,9714,2301],{"class":238},[228,9716,9717],{"class":230,"line":8087},[228,9718,1679],{"class":238},[228,9720,9721],{"class":230,"line":8092},[228,9722,9723],{"class":297},"\u002F\u002F打印所有信息的函数\n",[228,9725,9726,9728,9731,9733,9735,9737,9739,9742,9744,9746],{"class":230,"line":8098},[228,9727,5479],{"class":234},[228,9729,9730],{"class":2077}," printInfo",[228,9732,239],{"class":238},[228,9734,7874],{"class":234},[228,9736,9514],{"class":2077},[228,9738,9517],{"class":5331},[228,9740,9741],{"class":238},"[], ",[228,9743,242],{"class":234},[228,9745,7446],{"class":5331},[228,9747,245],{"class":238},[228,9749,9750],{"class":230,"line":8125},[228,9751,1660],{"class":238},[228,9753,9754,9756,9758,9760,9762,9764,9766,9768,9770,9772,9774],{"class":230,"line":8130},[228,9755,3315],{"class":234},[228,9757,1772],{"class":238},[228,9759,242],{"class":234},[228,9761,9553],{"class":238},[228,9763,284],{"class":234},[228,9765,4207],{"class":287},[228,9767,9560],{"class":238},[228,9769,1148],{"class":234},[228,9771,9565],{"class":238},[228,9773,2406],{"class":234},[228,9775,245],{"class":238},[228,9777,9778],{"class":230,"line":8136},[228,9779,2144],{"class":238},[228,9781,9782,9785,9787,9790,9792,9795,9797],{"class":230,"line":8148},[228,9783,9784],{"class":238},"        cout ",[228,9786,1282],{"class":234},[228,9788,9789],{"class":343}," \"Teacher: \"",[228,9791,1558],{"class":234},[228,9793,9794],{"class":238}," tArray[i].tName ",[228,9796,1282],{"class":234},[228,9798,8955],{"class":238},[228,9800,9801,9803,9805,9807,9809,9811,9813,9815,9817,9819,9821,9823],{"class":230,"line":8160},[228,9802,3517],{"class":234},[228,9804,1772],{"class":238},[228,9806,242],{"class":234},[228,9808,9615],{"class":238},[228,9810,284],{"class":234},[228,9812,4207],{"class":287},[228,9814,9622],{"class":238},[228,9816,1148],{"class":234},[228,9818,2262],{"class":287},[228,9820,9629],{"class":238},[228,9822,2406],{"class":234},[228,9824,245],{"class":238},[228,9826,9827],{"class":230,"line":8172},[228,9828,2624],{"class":238},[228,9830,9832,9835,9837,9840,9842,9845,9847,9850,9852],{"class":230,"line":9831},47,[228,9833,9834],{"class":238},"            cout ",[228,9836,1282],{"class":234},[228,9838,9839],{"class":343}," \"",[228,9841,1344],{"class":287},[228,9843,9844],{"class":343},"Student: \"",[228,9846,1558],{"class":234},[228,9848,9849],{"class":238}," tArray[i].sArray[j].sName",[228,9851,1282],{"class":234},[228,9853,1305],{"class":238},[228,9855,9857,9859,9861,9863,9865,9868,9870,9873,9875],{"class":230,"line":9856},48,[228,9858,9834],{"class":238},[228,9860,1282],{"class":234},[228,9862,9839],{"class":343},[228,9864,1344],{"class":287},[228,9866,9867],{"class":343},"Age: \"",[228,9869,1558],{"class":234},[228,9871,9872],{"class":238}," tArray[i].sArray[j].age ",[228,9874,1282],{"class":234},[228,9876,8955],{"class":238},[228,9878,9880,9882,9884,9886,9888,9891,9893,9896,9898],{"class":230,"line":9879},49,[228,9881,9834],{"class":238},[228,9883,1282],{"class":234},[228,9885,9839],{"class":343},[228,9887,1344],{"class":287},[228,9889,9890],{"class":343},"Score: \"",[228,9892,1558],{"class":234},[228,9894,9895],{"class":238}," tArray[i].sArray[j].score ",[228,9897,1282],{"class":234},[228,9899,9900],{"class":238}," endl;   \n",[228,9902,9904],{"class":230,"line":9903},50,[228,9905,2643],{"class":238},[228,9907,9909],{"class":230,"line":9908},51,[228,9910,2301],{"class":238},[228,9912,9914],{"class":230,"line":9913},52,[228,9915,1679],{"class":238},[228,9917,9919,9921,9923],{"class":230,"line":9918},53,[228,9920,242],{"class":234},[228,9922,2087],{"class":2077},[228,9924,2090],{"class":238},[228,9926,9928],{"class":230,"line":9927},54,[228,9929,1660],{"class":238},[228,9931,9933],{"class":230,"line":9932},55,[228,9934,9935],{"class":297},"    \u002F\u002F随机数种子\n",[228,9937,9939,9941,9943,9945,9947,9949,9951,9953,9955],{"class":230,"line":9938},56,[228,9940,2487],{"class":2077},[228,9942,2490],{"class":238},[228,9944,2493],{"class":234},[228,9946,2496],{"class":234},[228,9948,667],{"class":238},[228,9950,2501],{"class":2077},[228,9952,239],{"class":238},[228,9954,2506],{"class":287},[228,9956,2509],{"class":238},[228,9958,9960],{"class":230,"line":9959},57,[228,9961,9962],{"class":297},"    \u002F\u002F1.创建3名老师的数组\n",[228,9964,9966,9968,9970,9973,9975],{"class":230,"line":9965},58,[228,9967,8010],{"class":234},[228,9969,9514],{"class":2077},[228,9971,9972],{"class":238}," tArray[",[228,9974,310],{"class":287},[228,9976,4804],{"class":238},[228,9978,9980],{"class":230,"line":9979},59,[228,9981,9982],{"class":297},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[228,9984,9986,9988,9991,9993,9996,9999,10001,10003,10006,10008],{"class":230,"line":9985},60,[228,9987,2099],{"class":234},[228,9989,9990],{"class":238}," len ",[228,9992,284],{"class":234},[228,9994,9995],{"class":234}," sizeof",[228,9997,9998],{"class":238},"(tArray) ",[228,10000,822],{"class":234},[228,10002,9995],{"class":234},[228,10004,10005],{"class":238},"(tArray[",[228,10007,430],{"class":287},[228,10009,3970],{"class":238},[228,10011,10013,10016],{"class":230,"line":10012},61,[228,10014,10015],{"class":2077},"    allocateSpace",[228,10017,10018],{"class":238},"(tArray, len);\n",[228,10020,10022],{"class":230,"line":10021},62,[228,10023,10024],{"class":297},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[228,10026,10028,10031],{"class":230,"line":10027},63,[228,10029,10030],{"class":2077},"    printInfo",[228,10032,10018],{"class":238},[228,10034,10036],{"class":230,"line":10035},64,[228,10037,2514],{"emptyLinePlaceholder":157},[228,10039,10041],{"class":230,"line":10040},65,[228,10042,1679],{"class":238},[183,10044,10045],{"start":142},[186,10046,10047,10050],{},[388,10048,10049],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,10052,10053],{},"五名英雄信息如下：",[220,10055,10059],{"className":10056,"code":10057,"language":10058,"meta":141,"style":141},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[30,10060,10061,10079,10096,10113,10130],{"__ignoreMap":141},[228,10062,10063,10065,10068,10070,10072,10074,10077],{"class":230,"line":231},[228,10064,5031],{"class":238},[228,10066,10067],{"class":343},"\"刘备\"",[228,10069,616],{"class":238},[228,10071,1013],{"class":287},[228,10073,616],{"class":238},[228,10075,10076],{"class":343},"\"男\"",[228,10078,5044],{"class":238},[228,10080,10081,10083,10086,10088,10090,10092,10094],{"class":230,"line":142},[228,10082,5031],{"class":238},[228,10084,10085],{"class":343},"\"关羽\"",[228,10087,616],{"class":238},[228,10089,988],{"class":287},[228,10091,616],{"class":238},[228,10093,10076],{"class":343},[228,10095,5044],{"class":238},[228,10097,10098,10100,10103,10105,10107,10109,10111],{"class":230,"line":1293},[228,10099,5031],{"class":238},[228,10101,10102],{"class":343},"\"张飞\"",[228,10104,616],{"class":238},[228,10106,938],{"class":287},[228,10108,616],{"class":238},[228,10110,10076],{"class":343},[228,10112,5044],{"class":238},[228,10114,10115,10117,10120,10122,10124,10126,10128],{"class":230,"line":1308},[228,10116,5031],{"class":238},[228,10118,10119],{"class":343},"\"赵云\"",[228,10121,616],{"class":238},[228,10123,963],{"class":287},[228,10125,616],{"class":238},[228,10127,10076],{"class":343},[228,10129,5044],{"class":238},[228,10131,10132,10134,10137,10139,10141,10143,10146],{"class":230,"line":1314},[228,10133,5031],{"class":238},[228,10135,10136],{"class":343},"\"貂蝉\"",[228,10138,616],{"class":238},[228,10140,913],{"class":287},[228,10142,616],{"class":238},[228,10144,10145],{"class":343},"\"女\"",[228,10147,5044],{"class":238},[19,10149,10150],{},"代码：",[220,10152,10154],{"className":222,"code":10153,"language":224,"meta":141,"style":141},"#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",[30,10155,10156,10162,10172,10178,10185,10189,10193,10199,10204,10208,10213,10236,10240,10265,10269,10302,10307,10336,10341,10356,10382,10402,10407,10412,10416,10420,10425,10447,10451,10475,10479,10541,10545,10549,10557,10561,10566,10577,10581,10597,10613,10629,10645,10661,10665,10685,10707,10712,10725,10732,10737,10743,10748,10761,10767],{"__ignoreMap":141},[228,10157,10158,10160],{"class":230,"line":231},[228,10159,2063],{"class":234},[228,10161,2066],{"class":343},[228,10163,10164,10166,10168,10170],{"class":230,"line":142},[228,10165,2071],{"class":234},[228,10167,2074],{"class":234},[228,10169,2078],{"class":2077},[228,10171,1404],{"class":238},[228,10173,10174,10176],{"class":230,"line":1293},[228,10175,2063],{"class":234},[228,10177,7864],{"class":343},[228,10179,10180,10182],{"class":230,"line":1308},[228,10181,7874],{"class":234},[228,10183,10184],{"class":2077}," Sanguo\n",[228,10186,10187],{"class":230,"line":1314},[228,10188,1660],{"class":238},[228,10190,10191],{"class":230,"line":1328},[228,10192,7900],{"class":238},[228,10194,10195,10197],{"class":230,"line":1334},[228,10196,2099],{"class":234},[228,10198,7912],{"class":238},[228,10200,10201],{"class":230,"line":1425},[228,10202,10203],{"class":238},"    string gender;\n",[228,10205,10206],{"class":230,"line":1431},[228,10207,4109],{"class":238},[228,10209,10210],{"class":230,"line":1443},[228,10211,10212],{"class":297},"\u002F\u002F定义排序函数\n",[228,10214,10215,10217,10219,10221,10224,10226,10228,10230,10232,10234],{"class":230,"line":1726},[228,10216,5479],{"class":234},[228,10218,7431],{"class":2077},[228,10220,239],{"class":238},[228,10222,10223],{"class":2077},"Sanguo",[228,10225,6633],{"class":234},[228,10227,933],{"class":5331},[228,10229,616],{"class":238},[228,10231,242],{"class":234},[228,10233,7446],{"class":5331},[228,10235,245],{"class":238},[228,10237,10238],{"class":230,"line":1731},[228,10239,1660],{"class":238},[228,10241,10242,10244,10246,10248,10250,10252,10254,10256,10258,10261,10263],{"class":230,"line":1737},[228,10243,3315],{"class":234},[228,10245,239],{"class":238},[228,10247,242],{"class":234},[228,10249,3146],{"class":238},[228,10251,284],{"class":234},[228,10253,430],{"class":287},[228,10255,3153],{"class":238},[228,10257,1148],{"class":234},[228,10259,10260],{"class":238},"len;i",[228,10262,2406],{"class":234},[228,10264,245],{"class":238},[228,10266,10267],{"class":230,"line":1742},[228,10268,2144],{"class":238},[228,10270,10271,10274,10276,10278,10280,10282,10284,10286,10288,10290,10292,10294,10296,10298,10300],{"class":230,"line":1756},[228,10272,10273],{"class":234},"     for",[228,10275,1772],{"class":238},[228,10277,242],{"class":234},[228,10279,3524],{"class":238},[228,10281,284],{"class":234},[228,10283,430],{"class":287},[228,10285,3531],{"class":238},[228,10287,1148],{"class":234},[228,10289,7473],{"class":238},[228,10291,770],{"class":234},[228,10293,456],{"class":287},[228,10295,770],{"class":234},[228,10297,3664],{"class":238},[228,10299,2406],{"class":234},[228,10301,245],{"class":238},[228,10303,10304],{"class":230,"line":1761},[228,10305,10306],{"class":238},"     {\n",[228,10308,10309,10312,10315,10317,10320,10322,10325,10327,10329,10331,10333],{"class":230,"line":1767},[228,10310,10311],{"class":234},"         if",[228,10313,10314],{"class":238}," ((s",[228,10316,719],{"class":234},[228,10318,10319],{"class":238},"j)->age ",[228,10321,1198],{"class":234},[228,10323,10324],{"class":238}," (s",[228,10326,719],{"class":234},[228,10328,705],{"class":238},[228,10330,719],{"class":234},[228,10332,456],{"class":287},[228,10334,10335],{"class":238},")->age)\n",[228,10337,10338],{"class":230,"line":1788},[228,10339,10340],{"class":238},"         {\n",[228,10342,10343,10346,10348,10351,10353],{"class":230,"line":1793},[228,10344,10345],{"class":238},"             Sanguo temp",[228,10347,7268],{"class":234},[228,10349,10350],{"class":238},"(s",[228,10352,719],{"class":234},[228,10354,10355],{"class":238},"j);\n",[228,10357,10358,10361,10363,10365,10368,10370,10372,10374,10376,10378,10380],{"class":230,"line":1807},[228,10359,10360],{"class":234},"             *",[228,10362,10350],{"class":238},[228,10364,719],{"class":234},[228,10366,10367],{"class":238},"j)",[228,10369,7268],{"class":234},[228,10371,10350],{"class":238},[228,10373,719],{"class":234},[228,10375,705],{"class":238},[228,10377,719],{"class":234},[228,10379,456],{"class":287},[228,10381,2833],{"class":238},[228,10383,10384,10386,10388,10390,10392,10394,10396,10398,10400],{"class":230,"line":1812},[228,10385,10360],{"class":234},[228,10387,10350],{"class":238},[228,10389,719],{"class":234},[228,10391,705],{"class":238},[228,10393,719],{"class":234},[228,10395,456],{"class":287},[228,10397,667],{"class":238},[228,10399,284],{"class":234},[228,10401,4394],{"class":238},[228,10403,10404],{"class":230,"line":1841},[228,10405,10406],{"class":238},"         }\n",[228,10408,10409],{"class":230,"line":1846},[228,10410,10411],{"class":238},"     }\n",[228,10413,10414],{"class":230,"line":1863},[228,10415,2301],{"class":238},[228,10417,10418],{"class":230,"line":1868},[228,10419,1679],{"class":238},[228,10421,10422],{"class":230,"line":1873},[228,10423,10424],{"class":297},"\u002F\u002F定义打印函数\n",[228,10426,10427,10429,10431,10433,10435,10437,10439,10441,10443,10445],{"class":230,"line":1878},[228,10428,5479],{"class":234},[228,10430,9730],{"class":2077},[228,10432,239],{"class":238},[228,10434,10223],{"class":2077},[228,10436,6633],{"class":234},[228,10438,933],{"class":5331},[228,10440,616],{"class":238},[228,10442,242],{"class":234},[228,10444,7446],{"class":5331},[228,10446,245],{"class":238},[228,10448,10449],{"class":230,"line":1892},[228,10450,1660],{"class":238},[228,10452,10453,10455,10457,10459,10461,10463,10465,10467,10469,10471,10473],{"class":230,"line":1897},[228,10454,3315],{"class":234},[228,10456,1772],{"class":238},[228,10458,242],{"class":234},[228,10460,3146],{"class":238},[228,10462,284],{"class":234},[228,10464,430],{"class":287},[228,10466,3153],{"class":238},[228,10468,1148],{"class":234},[228,10470,10260],{"class":238},[228,10472,2406],{"class":234},[228,10474,245],{"class":238},[228,10476,10477],{"class":230,"line":2691},[228,10478,2144],{"class":238},[228,10480,10481,10483,10485,10487,10489,10492,10494,10496,10498,10501,10503,10505,10507,10510,10512,10514,10516,10519,10521,10523,10525,10528,10530,10532,10534,10537,10539],{"class":230,"line":2705},[228,10482,3565],{"class":238},[228,10484,1282],{"class":234},[228,10486,489],{"class":343},[228,10488,1344],{"class":287},[228,10490,10491],{"class":343},"姓名：\"",[228,10493,1282],{"class":234},[228,10495,10350],{"class":238},[228,10497,719],{"class":234},[228,10499,10500],{"class":238},"i)->name",[228,10502,1282],{"class":234},[228,10504,489],{"class":343},[228,10506,1344],{"class":287},[228,10508,10509],{"class":343},"年龄：\"",[228,10511,1282],{"class":234},[228,10513,10350],{"class":238},[228,10515,719],{"class":234},[228,10517,10518],{"class":238},"i)->age",[228,10520,1282],{"class":234},[228,10522,489],{"class":343},[228,10524,1344],{"class":287},[228,10526,10527],{"class":343},"性别：\"",[228,10529,1282],{"class":234},[228,10531,10350],{"class":238},[228,10533,719],{"class":234},[228,10535,10536],{"class":238},"i)->gender",[228,10538,1282],{"class":234},[228,10540,1305],{"class":238},[228,10542,10543],{"class":230,"line":2713},[228,10544,2301],{"class":238},[228,10546,10547],{"class":230,"line":2718},[228,10548,1679],{"class":238},[228,10550,10551,10553,10555],{"class":230,"line":2724},[228,10552,242],{"class":234},[228,10554,2087],{"class":2077},[228,10556,2090],{"class":238},[228,10558,10559],{"class":230,"line":2730},[228,10560,1660],{"class":238},[228,10562,10563],{"class":230,"line":2735},[228,10564,10565],{"class":297},"    \u002F\u002F定义结构体变量\n",[228,10567,10568,10571,10573,10575],{"class":230,"line":8063},[228,10569,10570],{"class":238},"    Sanguo s1[",[228,10572,557],{"class":287},[228,10574,1178],{"class":238},[228,10576,5022],{"class":234},[228,10578,10579],{"class":230,"line":8087},[228,10580,2144],{"class":238},[228,10582,10583,10585,10587,10589,10591,10593,10595],{"class":230,"line":8092},[228,10584,5031],{"class":238},[228,10586,10067],{"class":343},[228,10588,616],{"class":238},[228,10590,1013],{"class":287},[228,10592,616],{"class":238},[228,10594,10076],{"class":343},[228,10596,5044],{"class":238},[228,10598,10599,10601,10603,10605,10607,10609,10611],{"class":230,"line":8098},[228,10600,5031],{"class":238},[228,10602,10085],{"class":343},[228,10604,616],{"class":238},[228,10606,988],{"class":287},[228,10608,616],{"class":238},[228,10610,10076],{"class":343},[228,10612,5044],{"class":238},[228,10614,10615,10617,10619,10621,10623,10625,10627],{"class":230,"line":8125},[228,10616,5031],{"class":238},[228,10618,10102],{"class":343},[228,10620,616],{"class":238},[228,10622,938],{"class":287},[228,10624,616],{"class":238},[228,10626,10076],{"class":343},[228,10628,5044],{"class":238},[228,10630,10631,10633,10635,10637,10639,10641,10643],{"class":230,"line":8130},[228,10632,5031],{"class":238},[228,10634,10119],{"class":343},[228,10636,616],{"class":238},[228,10638,963],{"class":287},[228,10640,616],{"class":238},[228,10642,10076],{"class":343},[228,10644,5044],{"class":238},[228,10646,10647,10649,10651,10653,10655,10657,10659],{"class":230,"line":8136},[228,10648,5031],{"class":238},[228,10650,10136],{"class":343},[228,10652,616],{"class":238},[228,10654,913],{"class":287},[228,10656,616],{"class":238},[228,10658,10145],{"class":343},[228,10660,5044],{"class":238},[228,10662,10663],{"class":230,"line":8148},[228,10664,5065],{"class":238},[228,10666,10667,10669,10671,10673,10676,10678,10681,10683],{"class":230,"line":8160},[228,10668,2099],{"class":234},[228,10670,7446],{"class":238},[228,10672,4317],{"class":234},[228,10674,10675],{"class":238},"(s1)",[228,10677,4323],{"class":234},[228,10679,10680],{"class":238},"(s1[",[228,10682,430],{"class":287},[228,10684,3970],{"class":238},[228,10686,10687,10690,10692,10695,10697,10700,10703,10705],{"class":230,"line":8172},[228,10688,10689],{"class":238},"    Sanguo ",[228,10691,693],{"class":234},[228,10693,10694],{"class":238},"s ",[228,10696,284],{"class":234},[228,10698,10699],{"class":234}," &",[228,10701,10702],{"class":238},"s1[",[228,10704,430],{"class":287},[228,10706,4804],{"class":238},[228,10708,10709],{"class":230,"line":9831},[228,10710,10711],{"class":297},"    \u002F\u002F排序前：\n",[228,10713,10714,10716,10718,10721,10723],{"class":230,"line":9856},[228,10715,6644],{"class":238},[228,10717,1282],{"class":234},[228,10719,10720],{"class":343}," \"排序前：\"",[228,10722,1558],{"class":234},[228,10724,8955],{"class":238},[228,10726,10727,10729],{"class":230,"line":9879},[228,10728,10030],{"class":2077},[228,10730,10731],{"class":238},"(s,len);\n",[228,10733,10734],{"class":230,"line":9903},[228,10735,10736],{"class":297},"    \u002F\u002F调用排序函数\n",[228,10738,10739,10741],{"class":230,"line":9908},[228,10740,7713],{"class":2077},[228,10742,10731],{"class":238},[228,10744,10745],{"class":230,"line":9913},[228,10746,10747],{"class":297},"    \u002F\u002F排序后\n",[228,10749,10750,10752,10754,10757,10759],{"class":230,"line":9918},[228,10751,6644],{"class":238},[228,10753,1282],{"class":234},[228,10755,10756],{"class":343}," \"排序后：\"",[228,10758,1558],{"class":234},[228,10760,8955],{"class":238},[228,10762,10763,10765],{"class":230,"line":9927},[228,10764,10030],{"class":2077},[228,10766,10731],{"class":238},[228,10768,10769],{"class":230,"line":9932},[228,10770,1679],{"class":238},[19,10772,10773,10774,10776],{},"注意：使用指针时直接用传首地址**&s",[228,10775,430],{},"**",[5241,10778,10779],{},"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":141,"searchDepth":142,"depth":142,"links":10781},[10782,10783,10784,10785,10786,10787,10788],{"id":7818,"depth":142,"text":7819},{"id":8180,"depth":142,"text":8181},{"id":8449,"depth":142,"text":8450},{"id":8614,"depth":142,"text":8615},{"id":8830,"depth":142,"text":8831},{"id":9151,"depth":142,"text":9152},{"id":9379,"depth":142,"text":9380},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7807,"description":7815},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10795,"title":10796,"body":10797,"description":141,"extension":155,"meta":12140,"navigation":157,"path":12141,"seo":12142,"stem":12143,"__hash__":12144},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10798,"toc":12134},[10799,10802,10806,10812,10826,10831,10834,10838,10845,10851,10854,10861,10867,10872,10875,10878,10881,11445,11448,11462,11466,11471,11487,11627,11630,11636,11639,11644,11652,11760,11763,11768,11771,11776,11779,11785,11788,12131],[10,10800,10796],{"id":10801},"_5程序内存模型",[14,10803,10805],{"id":10804},"_51内存分区模型","5.1内存分区模型",[19,10807,10808,10809],{},"C++程序在执行时，将内存大方向划分为",[388,10810,10811],{},"4个区域",[1245,10813,10814,10817,10820,10823],{},[186,10815,10816],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[186,10818,10819],{},"全局区：存放全局变量和静态变量以及常量",[186,10821,10822],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[186,10824,10825],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,10827,10828],{},[388,10829,10830],{},"内存四区意义：",[19,10832,10833],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[200,10835,10837],{"id":10836},"_511程序运行前","5.1.1程序运行前",[19,10839,10840,10841,10844],{},"​\t在程序编译后，生成了exe可执行程序，",[388,10842,10843],{},"未执行该程序前","分为两个区域",[19,10846,10847,10848],{},"​\t",[388,10849,10850],{},"代码区：",[19,10852,10853],{},"​\t\t存放 CPU 执行的机器指令",[19,10855,10856,10857,10860],{},"​\t\t代码区是",[388,10858,10859],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,10862,10856,10863,10866],{},[388,10864,10865],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,10868,10847,10869],{},[388,10870,10871],{},"全局区：",[19,10873,10874],{},"​\t\t全局变量和静态变量存放在此.",[19,10876,10877],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,10879,10880],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[220,10882,10884],{"className":222,"code":10883,"language":224,"meta":141,"style":141},"\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",[30,10885,10886,10891,10904,10917,10921,10926,10941,10956,10960,10969,10973,10978,10991,11004,11008,11013,11039,11065,11069,11096,11122,11126,11131,11147,11162,11166,11192,11218,11222,11247,11272,11276,11302,11328,11332,11348,11363,11389,11415,11419,11429,11433,11441],{"__ignoreMap":141},[228,10887,10888],{"class":230,"line":231},[228,10889,10890],{"class":297},"\u002F\u002F全局变量\n",[228,10892,10893,10895,10898,10900,10902],{"class":230,"line":142},[228,10894,242],{"class":234},[228,10896,10897],{"class":238}," g_a ",[228,10899,284],{"class":234},[228,10901,2152],{"class":287},[228,10903,1404],{"class":238},[228,10905,10906,10908,10911,10913,10915],{"class":230,"line":1293},[228,10907,242],{"class":234},[228,10909,10910],{"class":238}," g_b ",[228,10912,284],{"class":234},[228,10914,2152],{"class":287},[228,10916,1404],{"class":238},[228,10918,10919],{"class":230,"line":1308},[228,10920,2514],{"emptyLinePlaceholder":157},[228,10922,10923],{"class":230,"line":1314},[228,10924,10925],{"class":297},"\u002F\u002F全局常量\n",[228,10927,10928,10930,10932,10935,10937,10939],{"class":230,"line":1328},[228,10929,6907],{"class":234},[228,10931,2496],{"class":234},[228,10933,10934],{"class":238}," c_g_a ",[228,10936,284],{"class":234},[228,10938,2152],{"class":287},[228,10940,1404],{"class":238},[228,10942,10943,10945,10947,10950,10952,10954],{"class":230,"line":1334},[228,10944,6907],{"class":234},[228,10946,2496],{"class":234},[228,10948,10949],{"class":238}," c_g_b ",[228,10951,284],{"class":234},[228,10953,2152],{"class":287},[228,10955,1404],{"class":238},[228,10957,10958],{"class":230,"line":1425},[228,10959,2514],{"emptyLinePlaceholder":157},[228,10961,10962,10964,10966],{"class":230,"line":1431},[228,10963,242],{"class":234},[228,10965,2087],{"class":2077},[228,10967,10968],{"class":238},"() {\n",[228,10970,10971],{"class":230,"line":1443},[228,10972,2514],{"emptyLinePlaceholder":157},[228,10974,10975],{"class":230,"line":1726},[228,10976,10977],{"class":297},"    \u002F\u002F局部变量\n",[228,10979,10980,10982,10985,10987,10989],{"class":230,"line":1731},[228,10981,2099],{"class":234},[228,10983,10984],{"class":238}," a ",[228,10986,284],{"class":234},[228,10988,2152],{"class":287},[228,10990,1404],{"class":238},[228,10992,10993,10995,10998,11000,11002],{"class":230,"line":1737},[228,10994,2099],{"class":234},[228,10996,10997],{"class":238}," b ",[228,10999,284],{"class":234},[228,11001,2152],{"class":287},[228,11003,1404],{"class":238},[228,11005,11006],{"class":230,"line":1742},[228,11007,2514],{"emptyLinePlaceholder":157},[228,11009,11010],{"class":230,"line":1756},[228,11011,11012],{"class":297},"    \u002F\u002F打印地址\n",[228,11014,11015,11017,11019,11022,11024,11026,11028,11030,11032,11035,11037],{"class":230,"line":1761},[228,11016,6644],{"class":238},[228,11018,1282],{"class":234},[228,11020,11021],{"class":343}," \"局部变量a地址为： \"",[228,11023,1558],{"class":234},[228,11025,1772],{"class":238},[228,11027,242],{"class":234},[228,11029,667],{"class":238},[228,11031,591],{"class":234},[228,11033,11034],{"class":238},"a ",[228,11036,1282],{"class":234},[228,11038,8955],{"class":238},[228,11040,11041,11043,11045,11048,11050,11052,11054,11056,11058,11061,11063],{"class":230,"line":1767},[228,11042,6644],{"class":238},[228,11044,1282],{"class":234},[228,11046,11047],{"class":343}," \"局部变量b地址为： \"",[228,11049,1558],{"class":234},[228,11051,1772],{"class":238},[228,11053,242],{"class":234},[228,11055,667],{"class":238},[228,11057,591],{"class":234},[228,11059,11060],{"class":238},"b ",[228,11062,1282],{"class":234},[228,11064,8955],{"class":238},[228,11066,11067],{"class":230,"line":1788},[228,11068,2514],{"emptyLinePlaceholder":157},[228,11070,11071,11073,11075,11078,11080,11083,11085,11087,11089,11092,11094],{"class":230,"line":1793},[228,11072,6644],{"class":238},[228,11074,1282],{"class":234},[228,11076,11077],{"class":343}," \"全局变量g_a地址为： \"",[228,11079,1558],{"class":234},[228,11081,11082],{"class":238},"  (",[228,11084,242],{"class":234},[228,11086,667],{"class":238},[228,11088,591],{"class":234},[228,11090,11091],{"class":238},"g_a ",[228,11093,1282],{"class":234},[228,11095,8955],{"class":238},[228,11097,11098,11100,11102,11105,11107,11109,11111,11113,11115,11118,11120],{"class":230,"line":1807},[228,11099,6644],{"class":238},[228,11101,1282],{"class":234},[228,11103,11104],{"class":343}," \"全局变量g_b地址为： \"",[228,11106,1558],{"class":234},[228,11108,11082],{"class":238},[228,11110,242],{"class":234},[228,11112,667],{"class":238},[228,11114,591],{"class":234},[228,11116,11117],{"class":238},"g_b ",[228,11119,1282],{"class":234},[228,11121,8955],{"class":238},[228,11123,11124],{"class":230,"line":1812},[228,11125,2514],{"emptyLinePlaceholder":157},[228,11127,11128],{"class":230,"line":1841},[228,11129,11130],{"class":297},"    \u002F\u002F静态变量\n",[228,11132,11133,11136,11138,11141,11143,11145],{"class":230,"line":1846},[228,11134,11135],{"class":234},"    static",[228,11137,2496],{"class":234},[228,11139,11140],{"class":238}," s_a ",[228,11142,284],{"class":234},[228,11144,2152],{"class":287},[228,11146,1404],{"class":238},[228,11148,11149,11151,11153,11156,11158,11160],{"class":230,"line":1863},[228,11150,11135],{"class":234},[228,11152,2496],{"class":234},[228,11154,11155],{"class":238}," s_b ",[228,11157,284],{"class":234},[228,11159,2152],{"class":287},[228,11161,1404],{"class":238},[228,11163,11164],{"class":230,"line":1868},[228,11165,2514],{"emptyLinePlaceholder":157},[228,11167,11168,11170,11172,11175,11177,11179,11181,11183,11185,11188,11190],{"class":230,"line":1873},[228,11169,6644],{"class":238},[228,11171,1282],{"class":234},[228,11173,11174],{"class":343}," \"静态变量s_a地址为： \"",[228,11176,1558],{"class":234},[228,11178,1772],{"class":238},[228,11180,242],{"class":234},[228,11182,667],{"class":238},[228,11184,591],{"class":234},[228,11186,11187],{"class":238},"s_a ",[228,11189,1282],{"class":234},[228,11191,8955],{"class":238},[228,11193,11194,11196,11198,11201,11203,11205,11207,11209,11211,11214,11216],{"class":230,"line":1878},[228,11195,6644],{"class":238},[228,11197,1282],{"class":234},[228,11199,11200],{"class":343}," \"静态变量s_b地址为： \"",[228,11202,1558],{"class":234},[228,11204,1772],{"class":238},[228,11206,242],{"class":234},[228,11208,667],{"class":238},[228,11210,591],{"class":234},[228,11212,11213],{"class":238},"s_b ",[228,11215,1282],{"class":234},[228,11217,8955],{"class":238},[228,11219,11220],{"class":230,"line":1892},[228,11221,2514],{"emptyLinePlaceholder":157},[228,11223,11224,11226,11228,11231,11233,11235,11237,11239,11241,11243,11245],{"class":230,"line":1897},[228,11225,6644],{"class":238},[228,11227,1282],{"class":234},[228,11229,11230],{"class":343}," \"字符串常量地址为： \"",[228,11232,1558],{"class":234},[228,11234,1772],{"class":238},[228,11236,242],{"class":234},[228,11238,667],{"class":238},[228,11240,591],{"class":234},[228,11242,1300],{"class":343},[228,11244,1558],{"class":234},[228,11246,8955],{"class":238},[228,11248,11249,11251,11253,11255,11257,11259,11261,11263,11265,11268,11270],{"class":230,"line":2691},[228,11250,6644],{"class":238},[228,11252,1282],{"class":234},[228,11254,11230],{"class":343},[228,11256,1558],{"class":234},[228,11258,1772],{"class":238},[228,11260,242],{"class":234},[228,11262,667],{"class":238},[228,11264,591],{"class":234},[228,11266,11267],{"class":343},"\"hello world1\"",[228,11269,1558],{"class":234},[228,11271,8955],{"class":238},[228,11273,11274],{"class":230,"line":2705},[228,11275,2514],{"emptyLinePlaceholder":157},[228,11277,11278,11280,11282,11285,11287,11289,11291,11293,11295,11298,11300],{"class":230,"line":2713},[228,11279,6644],{"class":238},[228,11281,1282],{"class":234},[228,11283,11284],{"class":343}," \"全局常量c_g_a地址为： \"",[228,11286,1558],{"class":234},[228,11288,1772],{"class":238},[228,11290,242],{"class":234},[228,11292,667],{"class":238},[228,11294,591],{"class":234},[228,11296,11297],{"class":238},"c_g_a ",[228,11299,1282],{"class":234},[228,11301,8955],{"class":238},[228,11303,11304,11306,11308,11311,11313,11315,11317,11319,11321,11324,11326],{"class":230,"line":2718},[228,11305,6644],{"class":238},[228,11307,1282],{"class":234},[228,11309,11310],{"class":343}," \"全局常量c_g_b地址为： \"",[228,11312,1558],{"class":234},[228,11314,1772],{"class":238},[228,11316,242],{"class":234},[228,11318,667],{"class":238},[228,11320,591],{"class":234},[228,11322,11323],{"class":238},"c_g_b ",[228,11325,1282],{"class":234},[228,11327,8955],{"class":238},[228,11329,11330],{"class":230,"line":2724},[228,11331,2514],{"emptyLinePlaceholder":157},[228,11333,11334,11337,11339,11342,11344,11346],{"class":230,"line":2730},[228,11335,11336],{"class":234},"    const",[228,11338,2496],{"class":234},[228,11340,11341],{"class":238}," c_l_a ",[228,11343,284],{"class":234},[228,11345,2152],{"class":287},[228,11347,1404],{"class":238},[228,11349,11350,11352,11354,11357,11359,11361],{"class":230,"line":2735},[228,11351,11336],{"class":234},[228,11353,2496],{"class":234},[228,11355,11356],{"class":238}," c_l_b ",[228,11358,284],{"class":234},[228,11360,2152],{"class":287},[228,11362,1404],{"class":238},[228,11364,11365,11367,11369,11372,11374,11376,11378,11380,11382,11385,11387],{"class":230,"line":8063},[228,11366,6644],{"class":238},[228,11368,1282],{"class":234},[228,11370,11371],{"class":343}," \"局部常量c_l_a地址为： \"",[228,11373,1558],{"class":234},[228,11375,1772],{"class":238},[228,11377,242],{"class":234},[228,11379,667],{"class":238},[228,11381,591],{"class":234},[228,11383,11384],{"class":238},"c_l_a ",[228,11386,1282],{"class":234},[228,11388,8955],{"class":238},[228,11390,11391,11393,11395,11398,11400,11402,11404,11406,11408,11411,11413],{"class":230,"line":8087},[228,11392,6644],{"class":238},[228,11394,1282],{"class":234},[228,11396,11397],{"class":343}," \"局部常量c_l_b地址为： \"",[228,11399,1558],{"class":234},[228,11401,1772],{"class":238},[228,11403,242],{"class":234},[228,11405,667],{"class":238},[228,11407,591],{"class":234},[228,11409,11410],{"class":238},"c_l_b ",[228,11412,1282],{"class":234},[228,11414,8955],{"class":238},[228,11416,11417],{"class":230,"line":8092},[228,11418,2514],{"emptyLinePlaceholder":157},[228,11420,11421,11423,11425,11427],{"class":230,"line":8098},[228,11422,2417],{"class":2077},[228,11424,239],{"class":238},[228,11426,2422],{"class":343},[228,11428,2833],{"class":238},[228,11430,11431],{"class":230,"line":8125},[228,11432,2514],{"emptyLinePlaceholder":157},[228,11434,11435,11437,11439],{"class":230,"line":8130},[228,11436,4204],{"class":234},[228,11438,4207],{"class":287},[228,11440,1404],{"class":238},[228,11442,11443],{"class":230,"line":8136},[228,11444,1679],{"class":238},[19,11446,11447],{},"总结：",[1245,11449,11450,11453,11456,11459],{},[186,11451,11452],{},"c++中程序运行前分为全局区和代码区",[186,11454,11455],{},"代码区特点是共享和只读",[186,11457,11458],{},"全局区中存放全局变量、静态变量、常量",[186,11460,11461],{},"常量区中存放const修饰的全局常量和字符串常量",[200,11463,11465],{"id":11464},"_512程序运行后","5.1.2程序运行后",[183,11467,11468],{},[186,11469,11470],{},"栈区：",[1245,11472,11473,11480],{},[186,11474,11475,11476,11479],{},"由编译器自动分配释放, 存放",[388,11477,11478],{},"函数的参数值,局部变量","等",[186,11481,11482,11483,11486],{},"注意事项：",[388,11484,11485],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[220,11488,11490],{"className":222,"code":11489,"language":224,"meta":141,"style":141},"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",[30,11491,11492,11503,11507,11522,11534,11538,11542,11550,11555,11570,11588,11605,11615,11623],{"__ignoreMap":141},[228,11493,11494,11496,11498,11501],{"class":230,"line":231},[228,11495,242],{"class":234},[228,11497,6633],{"class":234},[228,11499,11500],{"class":2077}," func",[228,11502,2090],{"class":238},[228,11504,11505],{"class":230,"line":142},[228,11506,1660],{"class":238},[228,11508,11509,11511,11513,11515,11517,11519],{"class":230,"line":1293},[228,11510,2099],{"class":234},[228,11512,10984],{"class":238},[228,11514,284],{"class":234},[228,11516,2152],{"class":287},[228,11518,294],{"class":238},[228,11520,11521],{"class":297}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[228,11523,11524,11526,11528,11531],{"class":230,"line":1308},[228,11525,4204],{"class":234},[228,11527,10699],{"class":234},[228,11529,11530],{"class":238},"a;",[228,11532,11533],{"class":297}," \u002F\u002F放回局部变量的地址\n",[228,11535,11536],{"class":230,"line":1314},[228,11537,1679],{"class":238},[228,11539,11540],{"class":230,"line":1328},[228,11541,2514],{"emptyLinePlaceholder":157},[228,11543,11544,11546,11548],{"class":230,"line":1334},[228,11545,242],{"class":234},[228,11547,2087],{"class":2077},[228,11549,10968],{"class":238},[228,11551,11552],{"class":230,"line":1425},[228,11553,11554],{"class":297},"    \u002F\u002F接受func的返回值\n",[228,11556,11557,11559,11561,11564,11566,11568],{"class":230,"line":1431},[228,11558,2099],{"class":234},[228,11560,6633],{"class":234},[228,11562,11563],{"class":238},"p ",[228,11565,284],{"class":234},[228,11567,11500],{"class":2077},[228,11569,5751],{"class":238},[228,11571,11572,11574,11576,11578,11580,11582,11585],{"class":230,"line":1443},[228,11573,6644],{"class":238},[228,11575,1282],{"class":234},[228,11577,6633],{"class":234},[228,11579,11563],{"class":238},[228,11581,1282],{"class":234},[228,11583,11584],{"class":238}," endl;",[228,11586,11587],{"class":297}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[228,11589,11590,11592,11594,11596,11598,11600,11602],{"class":230,"line":1726},[228,11591,6644],{"class":238},[228,11593,1282],{"class":234},[228,11595,6633],{"class":234},[228,11597,11563],{"class":238},[228,11599,1282],{"class":234},[228,11601,11584],{"class":238},[228,11603,11604],{"class":297}," \u002F\u002F第二次这个数据不再保留\n",[228,11606,11607,11609,11611,11613],{"class":230,"line":1731},[228,11608,2417],{"class":2077},[228,11610,239],{"class":238},[228,11612,2422],{"class":343},[228,11614,2833],{"class":238},[228,11616,11617,11619,11621],{"class":230,"line":1737},[228,11618,4204],{"class":234},[228,11620,4207],{"class":287},[228,11622,1404],{"class":238},[228,11624,11625],{"class":230,"line":1742},[228,11626,1679],{"class":238},[19,11628,11629],{},"输出结果：",[19,11631,11632],{},[1576,11633],{"alt":11634,"src":11635},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,11637,11638],{},"总结：不要返回局部变量的地址",[183,11640,11641],{"start":142},[186,11642,11643],{},"堆区",[1245,11645,11646,11649],{},[186,11647,11648],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[186,11650,11651],{},"在c++中主要利用new在堆区开辟内存",[220,11653,11655],{"className":222,"code":11654,"language":224,"meta":141,"style":141},"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",[30,11656,11657,11672,11676,11681,11702,11709,11713,11721,11725,11730,11744,11756],{"__ignoreMap":141},[228,11658,11659,11661,11664,11667,11669],{"class":230,"line":231},[228,11660,242],{"class":234},[228,11662,11663],{"class":234},"  *",[228,11665,11666],{"class":2077},"func",[228,11668,2541],{"class":238},[228,11670,11671],{"class":297},"  \u002F\u002F函数返回指针\n",[228,11673,11674],{"class":230,"line":142},[228,11675,1660],{"class":238},[228,11677,11678],{"class":230,"line":1293},[228,11679,11680],{"class":297},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[228,11682,11683,11685,11687,11689,11691,11694,11696,11698,11700],{"class":230,"line":1308},[228,11684,4261],{"class":234},[228,11686,6633],{"class":234},[228,11688,19],{"class":238},[228,11690,284],{"class":234},[228,11692,11693],{"class":234}," new",[228,11695,2496],{"class":234},[228,11697,239],{"class":238},[228,11699,684],{"class":287},[228,11701,2833],{"class":238},[228,11703,11704,11706],{"class":230,"line":1314},[228,11705,4495],{"class":234},[228,11707,11708],{"class":238}," p;\n",[228,11710,11711],{"class":230,"line":1328},[228,11712,1679],{"class":238},[228,11714,11715,11717,11719],{"class":230,"line":1334},[228,11716,242],{"class":234},[228,11718,2087],{"class":2077},[228,11720,2090],{"class":238},[228,11722,11723],{"class":230,"line":1425},[228,11724,1660],{"class":238},[228,11726,11727],{"class":230,"line":1431},[228,11728,11729],{"class":297},"    \u002F\u002F在堆区开辟数据\n",[228,11731,11732,11734,11736,11738,11740,11742],{"class":230,"line":1443},[228,11733,2099],{"class":234},[228,11735,6633],{"class":234},[228,11737,19],{"class":238},[228,11739,284],{"class":234},[228,11741,11666],{"class":2077},[228,11743,5751],{"class":238},[228,11745,11746,11748,11750,11752,11754],{"class":230,"line":1726},[228,11747,1665],{"class":238},[228,11749,6534],{"class":234},[228,11751,19],{"class":238},[228,11753,1282],{"class":234},[228,11755,1305],{"class":238},[228,11757,11758],{"class":230,"line":1731},[228,11759,1679],{"class":238},[19,11761,11762],{},"图片展示：",[19,11764,11765],{},[1576,11766],{"alt":11634,"src":11767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,11769,11770],{},"堆区内存由程序员管生死！！！",[183,11772,11773],{"start":1293},[186,11774,11775],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,11777,11778],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,11780,11781,11782],{},"​语法：",[30,11783,11784],{}," new 数据类型",[19,11786,11787],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[220,11789,11791],{"className":222,"code":11790,"language":224,"meta":141,"style":141},"\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",[30,11792,11793,11798,11808,11812,11817,11822,11844,11848,11856,11860,11874,11886,11898,11910,11915,11920,11931,11935,11940,11948,11952,11957,11979,12005,12009,12027,12031,12057,12061,12073,12077,12082,12087,12095,12099,12103,12111,12115,12121,12127],{"__ignoreMap":141},[228,11794,11795],{"class":230,"line":231},[228,11796,11797],{"class":297},"\u002F\u002F1.new的基本语法\n",[228,11799,11800,11802,11804,11806],{"class":230,"line":142},[228,11801,242],{"class":234},[228,11803,6633],{"class":234},[228,11805,11666],{"class":2077},[228,11807,2090],{"class":238},[228,11809,11810],{"class":230,"line":1293},[228,11811,1660],{"class":238},[228,11813,11814],{"class":230,"line":1308},[228,11815,11816],{"class":297},"    \u002F\u002F在堆区创建整型数据\n",[228,11818,11819],{"class":230,"line":1314},[228,11820,11821],{"class":297},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[228,11823,11824,11826,11828,11830,11833,11835,11837,11839,11841],{"class":230,"line":1328},[228,11825,2099],{"class":234},[228,11827,6633],{"class":234},[228,11829,19],{"class":238},[228,11831,11832],{"class":234},"=new",[228,11834,2496],{"class":234},[228,11836,239],{"class":238},[228,11838,684],{"class":287},[228,11840,6081],{"class":238},[228,11842,11843],{"class":297},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[228,11845,11846],{"class":230,"line":1334},[228,11847,1679],{"class":238},[228,11849,11850,11852,11854],{"class":230,"line":1425},[228,11851,5479],{"class":234},[228,11853,5703],{"class":2077},[228,11855,2090],{"class":238},[228,11857,11858],{"class":230,"line":1431},[228,11859,1660],{"class":238},[228,11861,11862,11864,11866,11868,11870,11872],{"class":230,"line":1443},[228,11863,2099],{"class":234},[228,11865,6633],{"class":234},[228,11867,19],{"class":238},[228,11869,284],{"class":234},[228,11871,11666],{"class":2077},[228,11873,5751],{"class":238},[228,11875,11876,11878,11880,11882,11884],{"class":230,"line":1726},[228,11877,1665],{"class":238},[228,11879,6534],{"class":234},[228,11881,19],{"class":238},[228,11883,1282],{"class":234},[228,11885,1305],{"class":238},[228,11887,11888,11890,11892,11894,11896],{"class":230,"line":1731},[228,11889,1665],{"class":238},[228,11891,6534],{"class":234},[228,11893,19],{"class":238},[228,11895,1282],{"class":234},[228,11897,1305],{"class":238},[228,11899,11900,11902,11904,11906,11908],{"class":230,"line":1737},[228,11901,1665],{"class":238},[228,11903,6534],{"class":234},[228,11905,19],{"class":238},[228,11907,1282],{"class":234},[228,11909,1305],{"class":238},[228,11911,11912],{"class":230,"line":1742},[228,11913,11914],{"class":297},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[228,11916,11917],{"class":230,"line":1756},[228,11918,11919],{"class":297},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[228,11921,11922,11925,11928],{"class":230,"line":1761},[228,11923,11924],{"class":234},"    delete",[228,11926,11927],{"class":238}," p;",[228,11929,11930],{"class":297},"\u002F\u002F删除这块地址\n",[228,11932,11933],{"class":230,"line":1767},[228,11934,1679],{"class":238},[228,11936,11937],{"class":230,"line":1788},[228,11938,11939],{"class":297},"\u002F\u002F2.在堆区利用new开辟数组\n",[228,11941,11942,11944,11946],{"class":230,"line":1793},[228,11943,5479],{"class":234},[228,11945,5772],{"class":2077},[228,11947,2090],{"class":238},[228,11949,11950],{"class":230,"line":1807},[228,11951,1660],{"class":238},[228,11953,11954],{"class":230,"line":1812},[228,11955,11956],{"class":297},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[228,11958,11959,11961,11963,11965,11967,11969,11971,11973,11976],{"class":230,"line":1841},[228,11960,2099],{"class":234},[228,11962,6633],{"class":234},[228,11964,3994],{"class":238},[228,11966,11832],{"class":234},[228,11968,2496],{"class":234},[228,11970,1128],{"class":238},[228,11972,684],{"class":287},[228,11974,11975],{"class":238},"];",[228,11977,11978],{"class":297},"\u002F\u002F10代表数组有10个元素\n",[228,11980,11981,11983,11985,11987,11989,11991,11993,11995,11997,11999,12001,12003],{"class":230,"line":1846},[228,11982,3315],{"class":234},[228,11984,1772],{"class":238},[228,11986,242],{"class":234},[228,11988,3146],{"class":238},[228,11990,284],{"class":234},[228,11992,430],{"class":287},[228,11994,3153],{"class":238},[228,11996,1148],{"class":234},[228,11998,684],{"class":287},[228,12000,3153],{"class":238},[228,12002,2406],{"class":234},[228,12004,245],{"class":238},[228,12006,12007],{"class":230,"line":1863},[228,12008,2144],{"class":238},[228,12010,12011,12014,12016,12018,12020,12022,12024],{"class":230,"line":1868},[228,12012,12013],{"class":238},"        arr[i]",[228,12015,284],{"class":234},[228,12017,679],{"class":238},[228,12019,719],{"class":234},[228,12021,549],{"class":287},[228,12023,294],{"class":238},[228,12025,12026],{"class":297},"\u002F\u002F给10个元素赋值100～109\n",[228,12028,12029],{"class":230,"line":1873},[228,12030,2301],{"class":238},[228,12032,12033,12035,12037,12039,12041,12043,12045,12047,12049,12051,12053,12055],{"class":230,"line":1878},[228,12034,3315],{"class":234},[228,12036,1772],{"class":238},[228,12038,242],{"class":234},[228,12040,3146],{"class":238},[228,12042,284],{"class":234},[228,12044,430],{"class":287},[228,12046,3153],{"class":238},[228,12048,1148],{"class":234},[228,12050,684],{"class":287},[228,12052,3153],{"class":238},[228,12054,2406],{"class":234},[228,12056,245],{"class":238},[228,12058,12059],{"class":230,"line":1892},[228,12060,2144],{"class":238},[228,12062,12063,12065,12067,12069,12071],{"class":230,"line":1897},[228,12064,3565],{"class":238},[228,12066,1282],{"class":234},[228,12068,4468],{"class":238},[228,12070,1282],{"class":234},[228,12072,1305],{"class":238},[228,12074,12075],{"class":230,"line":2691},[228,12076,2301],{"class":238},[228,12078,12079],{"class":230,"line":2705},[228,12080,12081],{"class":297},"    \u002F\u002F释放堆区数组\n",[228,12083,12084],{"class":230,"line":2713},[228,12085,12086],{"class":297},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[228,12088,12089,12092],{"class":230,"line":2718},[228,12090,12091],{"class":234},"    delete[]",[228,12093,12094],{"class":238}," arr;\n",[228,12096,12097],{"class":230,"line":2724},[228,12098,1679],{"class":238},[228,12100,12101],{"class":230,"line":2730},[228,12102,2514],{"emptyLinePlaceholder":157},[228,12104,12105,12107,12109],{"class":230,"line":2735},[228,12106,242],{"class":234},[228,12108,2087],{"class":2077},[228,12110,2090],{"class":238},[228,12112,12113],{"class":230,"line":8063},[228,12114,1660],{"class":238},[228,12116,12117,12119],{"class":230,"line":8087},[228,12118,5748],{"class":2077},[228,12120,5751],{"class":238},[228,12122,12123,12125],{"class":230,"line":8092},[228,12124,5817],{"class":2077},[228,12126,5751],{"class":238},[228,12128,12129],{"class":230,"line":8098},[228,12130,1679],{"class":238},[5241,12132,12133],{},"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":141,"searchDepth":142,"depth":142,"links":12135},[12136],{"id":10804,"depth":142,"text":10805,"children":12137},[12138,12139],{"id":10836,"depth":1293,"text":10837},{"id":11464,"depth":1293,"text":11465},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10796,"description":141},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12146,"title":12147,"body":12148,"description":141,"extension":155,"meta":13629,"navigation":157,"path":13630,"seo":13631,"stem":13632,"__hash__":13633},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12149,"toc":13621},[12150,12153,12157,12160,12163,12332,12336,12341,12358,12363,12515,12519,12522,12525,12919,12923,12926,12931,12934,13246,13250,13256,13416,13418,13426,13430,13433,13440,13618],[10,12151,12147],{"id":12152},"_6引用",[14,12154,12156],{"id":12155},"_61引用基本用法","6.1引用基本用法",[19,12158,12159],{},"引用的本质：给变量起别名",[19,12161,12162],{},"语法：数据类型 &别名=原名",[220,12164,12166],{"className":222,"code":12165,"language":224,"meta":141,"style":141},"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",[30,12167,12168,12176,12180,12192,12204,12208,12227,12246,12250,12261,12265,12284,12302,12306,12316,12320,12328],{"__ignoreMap":141},[228,12169,12170,12172,12174],{"class":230,"line":231},[228,12171,242],{"class":234},[228,12173,2087],{"class":2077},[228,12175,10968],{"class":238},[228,12177,12178],{"class":230,"line":142},[228,12179,2514],{"emptyLinePlaceholder":157},[228,12181,12182,12184,12186,12188,12190],{"class":230,"line":1293},[228,12183,2099],{"class":234},[228,12185,10984],{"class":238},[228,12187,284],{"class":234},[228,12189,2152],{"class":287},[228,12191,1404],{"class":238},[228,12193,12194,12196,12198,12200,12202],{"class":230,"line":1308},[228,12195,2099],{"class":234},[228,12197,10699],{"class":234},[228,12199,11060],{"class":238},[228,12201,284],{"class":234},[228,12203,1546],{"class":238},[228,12205,12206],{"class":230,"line":1314},[228,12207,2514],{"emptyLinePlaceholder":157},[228,12209,12210,12212,12214,12217,12219,12221,12223,12225],{"class":230,"line":1328},[228,12211,6644],{"class":238},[228,12213,1282],{"class":234},[228,12215,12216],{"class":343}," \"a = \"",[228,12218,1558],{"class":234},[228,12220,10984],{"class":238},[228,12222,1282],{"class":234},[228,12224,11584],{"class":238},[228,12226,7383],{"class":297},[228,12228,12229,12231,12233,12236,12238,12240,12242,12244],{"class":230,"line":1334},[228,12230,6644],{"class":238},[228,12232,1282],{"class":234},[228,12234,12235],{"class":343}," \"b = \"",[228,12237,1558],{"class":234},[228,12239,10997],{"class":238},[228,12241,1282],{"class":234},[228,12243,11584],{"class":238},[228,12245,7383],{"class":297},[228,12247,12248],{"class":230,"line":1425},[228,12249,2514],{"emptyLinePlaceholder":157},[228,12251,12252,12255,12257,12259],{"class":230,"line":1431},[228,12253,12254],{"class":238},"    b ",[228,12256,284],{"class":234},[228,12258,5869],{"class":287},[228,12260,1404],{"class":238},[228,12262,12263],{"class":230,"line":1443},[228,12264,2514],{"emptyLinePlaceholder":157},[228,12266,12267,12269,12271,12273,12275,12277,12279,12281],{"class":230,"line":1726},[228,12268,6644],{"class":238},[228,12270,1282],{"class":234},[228,12272,12216],{"class":343},[228,12274,1558],{"class":234},[228,12276,10984],{"class":238},[228,12278,1282],{"class":234},[228,12280,11584],{"class":238},[228,12282,12283],{"class":297},"\u002F\u002F100\n",[228,12285,12286,12288,12290,12292,12294,12296,12298,12300],{"class":230,"line":1731},[228,12287,6644],{"class":238},[228,12289,1282],{"class":234},[228,12291,12235],{"class":343},[228,12293,1558],{"class":234},[228,12295,10997],{"class":238},[228,12297,1282],{"class":234},[228,12299,11584],{"class":238},[228,12301,12283],{"class":297},[228,12303,12304],{"class":230,"line":1737},[228,12305,2514],{"emptyLinePlaceholder":157},[228,12307,12308,12310,12312,12314],{"class":230,"line":1742},[228,12309,2417],{"class":2077},[228,12311,239],{"class":238},[228,12313,2422],{"class":343},[228,12315,2833],{"class":238},[228,12317,12318],{"class":230,"line":1756},[228,12319,2514],{"emptyLinePlaceholder":157},[228,12321,12322,12324,12326],{"class":230,"line":1761},[228,12323,4204],{"class":234},[228,12325,4207],{"class":287},[228,12327,1404],{"class":238},[228,12329,12330],{"class":230,"line":1767},[228,12331,1679],{"class":238},[14,12333,12335],{"id":12334},"_62引用的注意事项","6.2引用的注意事项",[183,12337,12338],{},[186,12339,12340],{},"引用必须要初始化",[220,12342,12344],{"className":222,"code":12343,"language":224,"meta":141,"style":141},"int &b;\u002F\u002F非常错误！\n",[30,12345,12346],{"__ignoreMap":141},[228,12347,12348,12350,12352,12355],{"class":230,"line":231},[228,12349,242],{"class":234},[228,12351,10699],{"class":234},[228,12353,12354],{"class":238},"b;",[228,12356,12357],{"class":297},"\u002F\u002F非常错误！\n",[183,12359,12360],{"start":142},[186,12361,12362],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[220,12364,12366],{"className":222,"code":12365,"language":224,"meta":141,"style":141},"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",[30,12367,12368,12376,12388,12400,12408,12424,12437,12455,12473,12493,12503,12511],{"__ignoreMap":141},[228,12369,12370,12372,12374],{"class":230,"line":231},[228,12371,242],{"class":234},[228,12373,2087],{"class":2077},[228,12375,10968],{"class":238},[228,12377,12378,12380,12382,12384,12386],{"class":230,"line":142},[228,12379,2099],{"class":234},[228,12381,10984],{"class":238},[228,12383,284],{"class":234},[228,12385,2152],{"class":287},[228,12387,1404],{"class":238},[228,12389,12390,12392,12394,12396,12398],{"class":230,"line":1293},[228,12391,2099],{"class":234},[228,12393,10997],{"class":238},[228,12395,284],{"class":234},[228,12397,9065],{"class":287},[228,12399,1404],{"class":238},[228,12401,12402,12405],{"class":230,"line":1308},[228,12403,12404],{"class":297},"    \u002F\u002Fint &c;",[228,12406,12407],{"class":297}," \u002F\u002F错误，引用必须初始化\n",[228,12409,12410,12412,12414,12416,12418,12421],{"class":230,"line":1314},[228,12411,2099],{"class":234},[228,12413,10699],{"class":234},[228,12415,3060],{"class":238},[228,12417,284],{"class":234},[228,12419,12420],{"class":238}," a;",[228,12422,12423],{"class":297}," \u002F\u002F一旦初始化后，就不可以更改\n",[228,12425,12426,12429,12431,12434],{"class":230,"line":1328},[228,12427,12428],{"class":238},"    c ",[228,12430,284],{"class":234},[228,12432,12433],{"class":238}," b;",[228,12435,12436],{"class":297}," \u002F\u002F这是赋值操作，不是更改引用\n",[228,12438,12439,12441,12443,12445,12447,12449,12451,12453],{"class":230,"line":1334},[228,12440,6644],{"class":238},[228,12442,1282],{"class":234},[228,12444,12216],{"class":343},[228,12446,1558],{"class":234},[228,12448,10984],{"class":238},[228,12450,1282],{"class":234},[228,12452,11584],{"class":238},[228,12454,7368],{"class":297},[228,12456,12457,12459,12461,12463,12465,12467,12469,12471],{"class":230,"line":1425},[228,12458,6644],{"class":238},[228,12460,1282],{"class":234},[228,12462,12235],{"class":343},[228,12464,1558],{"class":234},[228,12466,10997],{"class":238},[228,12468,1282],{"class":234},[228,12470,11584],{"class":238},[228,12472,7368],{"class":297},[228,12474,12475,12477,12479,12482,12484,12487,12489,12491],{"class":230,"line":1431},[228,12476,6644],{"class":238},[228,12478,1282],{"class":234},[228,12480,12481],{"class":343}," \"c = \"",[228,12483,1558],{"class":234},[228,12485,12486],{"class":238}," c ",[228,12488,1282],{"class":234},[228,12490,11584],{"class":238},[228,12492,7368],{"class":297},[228,12494,12495,12497,12499,12501],{"class":230,"line":1443},[228,12496,2417],{"class":2077},[228,12498,239],{"class":238},[228,12500,2422],{"class":343},[228,12502,2833],{"class":238},[228,12504,12505,12507,12509],{"class":230,"line":1726},[228,12506,4204],{"class":234},[228,12508,4207],{"class":287},[228,12510,1404],{"class":238},[228,12512,12513],{"class":230,"line":1731},[228,12514,1679],{"class":238},[14,12516,12518],{"id":12517},"_63引用做函数参数","6.3引用做函数参数",[19,12520,12521],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,12523,12524],{},"优点：可以简化指针修改实参",[220,12526,12528],{"className":222,"code":12527,"language":224,"meta":141,"style":141},"\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",[30,12529,12530,12535,12558,12569,12579,12588,12592,12596,12601,12623,12635,12647,12657,12661,12665,12670,12692,12702,12710,12718,12722,12726,12734,12738,12750,12762,12766,12777,12803,12807,12827,12851,12855,12865,12889,12893,12903,12907,12915],{"__ignoreMap":141},[228,12531,12532],{"class":230,"line":231},[228,12533,12534],{"class":297},"\u002F\u002F1. 值传递\n",[228,12536,12537,12539,12542,12544,12546,12548,12551,12553,12555],{"class":230,"line":142},[228,12538,5479],{"class":234},[228,12540,12541],{"class":2077}," mySwap01",[228,12543,239],{"class":238},[228,12545,242],{"class":234},[228,12547,1512],{"class":5331},[228,12549,12550],{"class":238},", ",[228,12552,242],{"class":234},[228,12554,2947],{"class":5331},[228,12556,12557],{"class":238},") {\n",[228,12559,12560,12562,12565,12567],{"class":230,"line":1293},[228,12561,2099],{"class":234},[228,12563,12564],{"class":238}," temp ",[228,12566,284],{"class":234},[228,12568,1546],{"class":238},[228,12570,12571,12574,12576],{"class":230,"line":1308},[228,12572,12573],{"class":238},"    a ",[228,12575,284],{"class":234},[228,12577,12578],{"class":238}," b;\n",[228,12580,12581,12583,12585],{"class":230,"line":1314},[228,12582,12254],{"class":238},[228,12584,284],{"class":234},[228,12586,12587],{"class":238}," temp;\n",[228,12589,12590],{"class":230,"line":1328},[228,12591,1679],{"class":238},[228,12593,12594],{"class":230,"line":1334},[228,12595,2514],{"emptyLinePlaceholder":157},[228,12597,12598],{"class":230,"line":1425},[228,12599,12600],{"class":297},"\u002F\u002F2. 地址传递\n",[228,12602,12603,12605,12608,12610,12613,12615,12617,12619,12621],{"class":230,"line":1431},[228,12604,5479],{"class":234},[228,12606,12607],{"class":2077}," mySwap02",[228,12609,239],{"class":238},[228,12611,12612],{"class":234},"int*",[228,12614,1512],{"class":5331},[228,12616,12550],{"class":238},[228,12618,12612],{"class":234},[228,12620,2947],{"class":5331},[228,12622,12557],{"class":238},[228,12624,12625,12627,12629,12631,12633],{"class":230,"line":1443},[228,12626,2099],{"class":234},[228,12628,12564],{"class":238},[228,12630,284],{"class":234},[228,12632,6633],{"class":234},[228,12634,6312],{"class":238},[228,12636,12637,12639,12641,12643,12645],{"class":230,"line":1726},[228,12638,6518],{"class":234},[228,12640,11034],{"class":238},[228,12642,284],{"class":234},[228,12644,6633],{"class":234},[228,12646,6184],{"class":238},[228,12648,12649,12651,12653,12655],{"class":230,"line":1731},[228,12650,6518],{"class":234},[228,12652,11060],{"class":238},[228,12654,284],{"class":234},[228,12656,12587],{"class":238},[228,12658,12659],{"class":230,"line":1737},[228,12660,1679],{"class":238},[228,12662,12663],{"class":230,"line":1742},[228,12664,2514],{"emptyLinePlaceholder":157},[228,12666,12667],{"class":230,"line":1756},[228,12668,12669],{"class":297},"\u002F\u002F3. 引用传递\n",[228,12671,12672,12674,12677,12679,12682,12684,12686,12688,12690],{"class":230,"line":1761},[228,12673,5479],{"class":234},[228,12675,12676],{"class":2077}," mySwap03",[228,12678,239],{"class":238},[228,12680,12681],{"class":234},"int&",[228,12683,1512],{"class":5331},[228,12685,12550],{"class":238},[228,12687,12681],{"class":234},[228,12689,2947],{"class":5331},[228,12691,12557],{"class":238},[228,12693,12694,12696,12698,12700],{"class":230,"line":1767},[228,12695,2099],{"class":234},[228,12697,12564],{"class":238},[228,12699,284],{"class":234},[228,12701,1546],{"class":238},[228,12703,12704,12706,12708],{"class":230,"line":1788},[228,12705,12573],{"class":238},[228,12707,284],{"class":234},[228,12709,12578],{"class":238},[228,12711,12712,12714,12716],{"class":230,"line":1793},[228,12713,12254],{"class":238},[228,12715,284],{"class":234},[228,12717,12587],{"class":238},[228,12719,12720],{"class":230,"line":1807},[228,12721,1679],{"class":238},[228,12723,12724],{"class":230,"line":1812},[228,12725,2514],{"emptyLinePlaceholder":157},[228,12727,12728,12730,12732],{"class":230,"line":1841},[228,12729,242],{"class":234},[228,12731,2087],{"class":2077},[228,12733,10968],{"class":238},[228,12735,12736],{"class":230,"line":1846},[228,12737,2514],{"emptyLinePlaceholder":157},[228,12739,12740,12742,12744,12746,12748],{"class":230,"line":1863},[228,12741,2099],{"class":234},[228,12743,10984],{"class":238},[228,12745,284],{"class":234},[228,12747,2152],{"class":287},[228,12749,1404],{"class":238},[228,12751,12752,12754,12756,12758,12760],{"class":230,"line":1868},[228,12753,2099],{"class":234},[228,12755,10997],{"class":238},[228,12757,284],{"class":234},[228,12759,9065],{"class":287},[228,12761,1404],{"class":238},[228,12763,12764],{"class":230,"line":1873},[228,12765,2514],{"emptyLinePlaceholder":157},[228,12767,12768,12771,12774],{"class":230,"line":1878},[228,12769,12770],{"class":2077},"    mySwap01",[228,12772,12773],{"class":238},"(a, b);",[228,12775,12776],{"class":297},"\u002F\u002F值传递，形参不会修饰实参\n",[228,12778,12779,12781,12783,12786,12788,12790,12792,12795,12797,12799,12801],{"class":230,"line":1892},[228,12780,6644],{"class":238},[228,12782,1282],{"class":234},[228,12784,12785],{"class":343}," \"a:\"",[228,12787,1558],{"class":234},[228,12789,10984],{"class":238},[228,12791,1282],{"class":234},[228,12793,12794],{"class":343}," \" b:\"",[228,12796,1558],{"class":234},[228,12798,10997],{"class":238},[228,12800,1282],{"class":234},[228,12802,8955],{"class":238},[228,12804,12805],{"class":230,"line":1897},[228,12806,2514],{"emptyLinePlaceholder":157},[228,12808,12809,12812,12814,12816,12819,12821,12824],{"class":230,"line":2691},[228,12810,12811],{"class":2077},"    mySwap02",[228,12813,239],{"class":238},[228,12815,591],{"class":234},[228,12817,12818],{"class":238},"a, ",[228,12820,591],{"class":234},[228,12822,12823],{"class":238},"b);",[228,12825,12826],{"class":297},"\u002F\u002F地址传递，形参会修饰实参\n",[228,12828,12829,12831,12833,12835,12837,12839,12841,12843,12845,12847,12849],{"class":230,"line":2705},[228,12830,6644],{"class":238},[228,12832,1282],{"class":234},[228,12834,12785],{"class":343},[228,12836,1558],{"class":234},[228,12838,10984],{"class":238},[228,12840,1282],{"class":234},[228,12842,12794],{"class":343},[228,12844,1558],{"class":234},[228,12846,10997],{"class":238},[228,12848,1282],{"class":234},[228,12850,8955],{"class":238},[228,12852,12853],{"class":230,"line":2713},[228,12854,2514],{"emptyLinePlaceholder":157},[228,12856,12857,12860,12862],{"class":230,"line":2718},[228,12858,12859],{"class":2077},"    mySwap03",[228,12861,12773],{"class":238},[228,12863,12864],{"class":297},"\u002F\u002F引用传递，形参会修饰实参\n",[228,12866,12867,12869,12871,12873,12875,12877,12879,12881,12883,12885,12887],{"class":230,"line":2724},[228,12868,6644],{"class":238},[228,12870,1282],{"class":234},[228,12872,12785],{"class":343},[228,12874,1558],{"class":234},[228,12876,10984],{"class":238},[228,12878,1282],{"class":234},[228,12880,12794],{"class":343},[228,12882,1558],{"class":234},[228,12884,10997],{"class":238},[228,12886,1282],{"class":234},[228,12888,8955],{"class":238},[228,12890,12891],{"class":230,"line":2730},[228,12892,2514],{"emptyLinePlaceholder":157},[228,12894,12895,12897,12899,12901],{"class":230,"line":2735},[228,12896,2417],{"class":2077},[228,12898,239],{"class":238},[228,12900,2422],{"class":343},[228,12902,2833],{"class":238},[228,12904,12905],{"class":230,"line":8063},[228,12906,2514],{"emptyLinePlaceholder":157},[228,12908,12909,12911,12913],{"class":230,"line":8087},[228,12910,4204],{"class":234},[228,12912,4207],{"class":287},[228,12914,1404],{"class":238},[228,12916,12917],{"class":230,"line":8092},[228,12918,1679],{"class":238},[14,12920,12922],{"id":12921},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,12924,12925],{},"作用：引用是可以作为函数的返回值存在的",[19,12927,9140,12928],{},[388,12929,12930],{},"不要返回局部变量引用",[19,12932,12933],{},"用法：函数调用作为左值",[220,12935,12937],{"className":10056,"code":12936,"language":10058,"meta":141,"style":141},"\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",[30,12938,12939,12944,12952,12967,12973,12977,12981,12986,12994,13011,13017,13021,13025,13033,13037,13042,13056,13076,13095,13099,13104,13117,13137,13155,13159,13175,13179,13198,13216,13220,13230,13234,13242],{"__ignoreMap":141},[228,12940,12941],{"class":230,"line":231},[228,12942,12943],{"class":297},"\u002F\u002F返回局部变量引用\n",[228,12945,12946,12948,12950],{"class":230,"line":142},[228,12947,12681],{"class":234},[228,12949,5703],{"class":2077},[228,12951,10968],{"class":238},[228,12953,12954,12956,12958,12960,12962,12964],{"class":230,"line":1293},[228,12955,2099],{"class":234},[228,12957,10984],{"class":238},[228,12959,284],{"class":234},[228,12961,2152],{"class":287},[228,12963,294],{"class":238},[228,12965,12966],{"class":297}," \u002F\u002F局部变量\n",[228,12968,12969,12971],{"class":230,"line":1308},[228,12970,4204],{"class":234},[228,12972,1546],{"class":238},[228,12974,12975],{"class":230,"line":1314},[228,12976,1679],{"class":238},[228,12978,12979],{"class":230,"line":1328},[228,12980,2514],{"emptyLinePlaceholder":157},[228,12982,12983],{"class":230,"line":1334},[228,12984,12985],{"class":297},"\u002F\u002F返回静态变量引用\n",[228,12987,12988,12990,12992],{"class":230,"line":1425},[228,12989,12681],{"class":234},[228,12991,5772],{"class":2077},[228,12993,10968],{"class":238},[228,12995,12996,12998,13000,13002,13004,13006,13008],{"class":230,"line":1431},[228,12997,11135],{"class":234},[228,12999,2496],{"class":234},[228,13001,10984],{"class":238},[228,13003,284],{"class":234},[228,13005,9065],{"class":287},[228,13007,294],{"class":238},[228,13009,13010],{"class":297},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[228,13012,13013,13015],{"class":230,"line":1443},[228,13014,4204],{"class":234},[228,13016,1546],{"class":238},[228,13018,13019],{"class":230,"line":1726},[228,13020,1679],{"class":238},[228,13022,13023],{"class":230,"line":1731},[228,13024,2514],{"emptyLinePlaceholder":157},[228,13026,13027,13029,13031],{"class":230,"line":1737},[228,13028,242],{"class":234},[228,13030,2087],{"class":2077},[228,13032,10968],{"class":238},[228,13034,13035],{"class":230,"line":1742},[228,13036,2514],{"emptyLinePlaceholder":157},[228,13038,13039],{"class":230,"line":1756},[228,13040,13041],{"class":297},"    \u002F\u002F不能返回局部变量的引用\n",[228,13043,13044,13047,13050,13052,13054],{"class":230,"line":1761},[228,13045,13046],{"class":234},"    int&",[228,13048,13049],{"class":238}," ref ",[228,13051,284],{"class":234},[228,13053,5703],{"class":2077},[228,13055,5751],{"class":238},[228,13057,13058,13060,13062,13065,13067,13069,13071,13073],{"class":230,"line":1767},[228,13059,6644],{"class":238},[228,13061,1282],{"class":234},[228,13063,13064],{"class":343}," \"ref = \"",[228,13066,1558],{"class":234},[228,13068,13049],{"class":238},[228,13070,1282],{"class":234},[228,13072,11584],{"class":238},[228,13074,13075],{"class":297},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[228,13077,13078,13080,13082,13084,13086,13088,13090,13092],{"class":230,"line":1788},[228,13079,6644],{"class":238},[228,13081,1282],{"class":234},[228,13083,13064],{"class":343},[228,13085,1558],{"class":234},[228,13087,13049],{"class":238},[228,13089,1282],{"class":234},[228,13091,11584],{"class":238},[228,13093,13094],{"class":297},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[228,13096,13097],{"class":230,"line":1793},[228,13098,2514],{"emptyLinePlaceholder":157},[228,13100,13101],{"class":230,"line":1807},[228,13102,13103],{"class":297},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[228,13105,13106,13108,13111,13113,13115],{"class":230,"line":1812},[228,13107,13046],{"class":234},[228,13109,13110],{"class":238}," ref2 ",[228,13112,284],{"class":234},[228,13114,5772],{"class":2077},[228,13116,5751],{"class":238},[228,13118,13119,13121,13123,13126,13128,13130,13132,13134],{"class":230,"line":1841},[228,13120,6644],{"class":238},[228,13122,1282],{"class":234},[228,13124,13125],{"class":343}," \"ref2 = \"",[228,13127,1558],{"class":234},[228,13129,13110],{"class":238},[228,13131,1282],{"class":234},[228,13133,11584],{"class":238},[228,13135,13136],{"class":297}," \u002F\u002F20\n",[228,13138,13139,13141,13143,13145,13147,13149,13151,13153],{"class":230,"line":1846},[228,13140,6644],{"class":238},[228,13142,1282],{"class":234},[228,13144,13125],{"class":343},[228,13146,1558],{"class":234},[228,13148,13110],{"class":238},[228,13150,1282],{"class":234},[228,13152,11584],{"class":238},[228,13154,13136],{"class":297},[228,13156,13157],{"class":230,"line":1863},[228,13158,2514],{"emptyLinePlaceholder":157},[228,13160,13161,13163,13166,13168,13170,13172],{"class":230,"line":1868},[228,13162,5817],{"class":2077},[228,13164,13165],{"class":238},"() ",[228,13167,284],{"class":234},[228,13169,3113],{"class":287},[228,13171,294],{"class":238},[228,13173,13174],{"class":297},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[228,13176,13177],{"class":230,"line":1873},[228,13178,2514],{"emptyLinePlaceholder":157},[228,13180,13181,13183,13185,13187,13189,13191,13193,13195],{"class":230,"line":1878},[228,13182,6644],{"class":238},[228,13184,1282],{"class":234},[228,13186,13125],{"class":343},[228,13188,1558],{"class":234},[228,13190,13110],{"class":238},[228,13192,1282],{"class":234},[228,13194,11584],{"class":238},[228,13196,13197],{"class":297}," \u002F\u002F1000\n",[228,13199,13200,13202,13204,13206,13208,13210,13212,13214],{"class":230,"line":1892},[228,13201,6644],{"class":238},[228,13203,1282],{"class":234},[228,13205,13125],{"class":343},[228,13207,1558],{"class":234},[228,13209,13110],{"class":238},[228,13211,1282],{"class":234},[228,13213,11584],{"class":238},[228,13215,13197],{"class":297},[228,13217,13218],{"class":230,"line":1897},[228,13219,2514],{"emptyLinePlaceholder":157},[228,13221,13222,13224,13226,13228],{"class":230,"line":2691},[228,13223,2417],{"class":2077},[228,13225,239],{"class":238},[228,13227,2422],{"class":343},[228,13229,2833],{"class":238},[228,13231,13232],{"class":230,"line":2705},[228,13233,2514],{"emptyLinePlaceholder":157},[228,13235,13236,13238,13240],{"class":230,"line":2713},[228,13237,4204],{"class":234},[228,13239,4207],{"class":287},[228,13241,1404],{"class":238},[228,13243,13244],{"class":230,"line":2718},[228,13245,1679],{"class":238},[14,13247,13249],{"id":13248},"_65引用的本质","6.5引用的本质",[19,13251,13252,13253],{},"本质：",[388,13254,13255],{},"引用的本质在c++内部实现是一个指针常量.",[220,13257,13259],{"className":222,"code":13258,"language":224,"meta":141,"style":141},"\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",[30,13260,13261,13266,13282,13296,13300,13309,13321,13326,13331,13342,13355,13359,13375,13392,13396,13404,13412],{"__ignoreMap":141},[228,13262,13263],{"class":230,"line":231},[228,13264,13265],{"class":297},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[228,13267,13268,13270,13272,13274,13276,13279],{"class":230,"line":142},[228,13269,5479],{"class":234},[228,13271,11500],{"class":2077},[228,13273,239],{"class":238},[228,13275,12681],{"class":234},[228,13277,13278],{"class":5331}," ref",[228,13280,13281],{"class":238},"){\n",[228,13283,13284,13287,13289,13291,13293],{"class":230,"line":1293},[228,13285,13286],{"class":238},"    ref ",[228,13288,284],{"class":234},[228,13290,5869],{"class":287},[228,13292,294],{"class":238},[228,13294,13295],{"class":297}," \u002F\u002F ref是引用，转换为*ref = 100\n",[228,13297,13298],{"class":230,"line":1308},[228,13299,1679],{"class":238},[228,13301,13302,13304,13306],{"class":230,"line":1314},[228,13303,242],{"class":234},[228,13305,2087],{"class":2077},[228,13307,13308],{"class":238},"(){\n",[228,13310,13311,13313,13315,13317,13319],{"class":230,"line":1328},[228,13312,2099],{"class":234},[228,13314,10984],{"class":238},[228,13316,284],{"class":234},[228,13318,2152],{"class":287},[228,13320,1404],{"class":238},[228,13322,13323],{"class":230,"line":1334},[228,13324,13325],{"class":238},"    \n",[228,13327,13328],{"class":230,"line":1425},[228,13329,13330],{"class":297},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[228,13332,13333,13335,13337,13339],{"class":230,"line":1431},[228,13334,13046],{"class":234},[228,13336,13049],{"class":238},[228,13338,284],{"class":234},[228,13340,13341],{"class":238}," a; \n",[228,13343,13344,13346,13348,13350,13352],{"class":230,"line":1443},[228,13345,13286],{"class":238},[228,13347,284],{"class":234},[228,13349,9065],{"class":287},[228,13351,294],{"class":238},[228,13353,13354],{"class":297}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[228,13356,13357],{"class":230,"line":1726},[228,13358,13325],{"class":238},[228,13360,13361,13363,13365,13367,13369,13371,13373],{"class":230,"line":1731},[228,13362,6644],{"class":238},[228,13364,1282],{"class":234},[228,13366,12785],{"class":343},[228,13368,1558],{"class":234},[228,13370,10984],{"class":238},[228,13372,1282],{"class":234},[228,13374,8955],{"class":238},[228,13376,13377,13379,13381,13384,13386,13388,13390],{"class":230,"line":1737},[228,13378,6644],{"class":238},[228,13380,1282],{"class":234},[228,13382,13383],{"class":343}," \"ref:\"",[228,13385,1558],{"class":234},[228,13387,13049],{"class":238},[228,13389,1282],{"class":234},[228,13391,8955],{"class":238},[228,13393,13394],{"class":230,"line":1742},[228,13395,13325],{"class":238},[228,13397,13398,13401],{"class":230,"line":1756},[228,13399,13400],{"class":2077},"    func",[228,13402,13403],{"class":238},"(a);\n",[228,13405,13406,13408,13410],{"class":230,"line":1761},[228,13407,4204],{"class":234},[228,13409,4207],{"class":287},[228,13411,1404],{"class":238},[228,13413,13414],{"class":230,"line":1767},[228,13415,1679],{"class":238},[19,13417,11447],{},[183,13419,13420,13423],{},[186,13421,13422],{},"引用的本质，就是一个指针常量",[186,13424,13425],{},"引用一旦初始化，就不可以发生改变",[14,13427,13429],{"id":13428},"_66常量引用","6.6常量引用",[19,13431,13432],{},"作用：常量引用主要用来修饰形参",[19,13434,13435,13436,13439],{},"在函数形参列表中，可以加",[388,13437,13438],{},"const修饰形参","，防止形参改变实参",[220,13441,13443],{"className":222,"code":13442,"language":224,"meta":141,"style":141},"\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",[30,13444,13445,13450,13455,13474,13479,13492,13496,13500,13508,13512,13517,13522,13536,13540,13548,13560,13564,13569,13581,13588,13592,13602,13606,13614],{"__ignoreMap":141},[228,13446,13447],{"class":230,"line":231},[228,13448,13449],{"class":297},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[228,13451,13452],{"class":230,"line":142},[228,13453,13454],{"class":297},"\u002F\u002F加上const就不能修改实参的\n",[228,13456,13457,13459,13462,13464,13466,13469,13472],{"class":230,"line":1293},[228,13458,5479],{"class":234},[228,13460,13461],{"class":2077}," showValue",[228,13463,239],{"class":238},[228,13465,6907],{"class":234},[228,13467,13468],{"class":234}," int&",[228,13470,13471],{"class":5331}," v",[228,13473,12557],{"class":238},[228,13475,13476],{"class":230,"line":1308},[228,13477,13478],{"class":297},"    \u002F\u002Fv += 100;\n",[228,13480,13481,13483,13485,13488,13490],{"class":230,"line":1314},[228,13482,6644],{"class":238},[228,13484,1282],{"class":234},[228,13486,13487],{"class":238}," v ",[228,13489,1282],{"class":234},[228,13491,8955],{"class":238},[228,13493,13494],{"class":230,"line":1328},[228,13495,1679],{"class":238},[228,13497,13498],{"class":230,"line":1334},[228,13499,2514],{"emptyLinePlaceholder":157},[228,13501,13502,13504,13506],{"class":230,"line":1425},[228,13503,242],{"class":234},[228,13505,2087],{"class":2077},[228,13507,10968],{"class":238},[228,13509,13510],{"class":230,"line":1431},[228,13511,2514],{"emptyLinePlaceholder":157},[228,13513,13514],{"class":230,"line":1443},[228,13515,13516],{"class":297},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[228,13518,13519],{"class":230,"line":1726},[228,13520,13521],{"class":297},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[228,13523,13524,13526,13528,13530,13532,13534],{"class":230,"line":1731},[228,13525,11336],{"class":234},[228,13527,13468],{"class":234},[228,13529,13049],{"class":238},[228,13531,284],{"class":234},[228,13533,2152],{"class":287},[228,13535,1404],{"class":238},[228,13537,13538],{"class":230,"line":1737},[228,13539,2514],{"emptyLinePlaceholder":157},[228,13541,13542,13545],{"class":230,"line":1742},[228,13543,13544],{"class":297},"    \u002F\u002Fref = 100;",[228,13546,13547],{"class":297},"  \u002F\u002F加入const后不可以修改变量\n",[228,13549,13550,13552,13554,13556,13558],{"class":230,"line":1756},[228,13551,6644],{"class":238},[228,13553,1282],{"class":234},[228,13555,13049],{"class":238},[228,13557,1282],{"class":234},[228,13559,8955],{"class":238},[228,13561,13562],{"class":230,"line":1761},[228,13563,2514],{"emptyLinePlaceholder":157},[228,13565,13566],{"class":230,"line":1767},[228,13567,13568],{"class":297},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[228,13570,13571,13573,13575,13577,13579],{"class":230,"line":1788},[228,13572,2099],{"class":234},[228,13574,10984],{"class":238},[228,13576,284],{"class":234},[228,13578,2152],{"class":287},[228,13580,1404],{"class":238},[228,13582,13583,13586],{"class":230,"line":1793},[228,13584,13585],{"class":2077},"    showValue",[228,13587,13403],{"class":238},[228,13589,13590],{"class":230,"line":1807},[228,13591,2514],{"emptyLinePlaceholder":157},[228,13593,13594,13596,13598,13600],{"class":230,"line":1812},[228,13595,2417],{"class":2077},[228,13597,239],{"class":238},[228,13599,2422],{"class":343},[228,13601,2833],{"class":238},[228,13603,13604],{"class":230,"line":1841},[228,13605,2514],{"emptyLinePlaceholder":157},[228,13607,13608,13610,13612],{"class":230,"line":1846},[228,13609,4204],{"class":234},[228,13611,4207],{"class":287},[228,13613,1404],{"class":238},[228,13615,13616],{"class":230,"line":1863},[228,13617,1679],{"class":238},[5241,13619,13620],{},"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":141,"searchDepth":142,"depth":142,"links":13622},[13623,13624,13625,13626,13627,13628],{"id":12155,"depth":142,"text":12156},{"id":12334,"depth":142,"text":12335},{"id":12517,"depth":142,"text":12518},{"id":12921,"depth":142,"text":12922},{"id":13248,"depth":142,"text":13249},{"id":13428,"depth":142,"text":13429},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12147,"description":141},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13635,"title":13636,"body":13637,"description":141,"extension":155,"meta":14718,"navigation":157,"path":14719,"seo":14720,"stem":14721,"__hash__":14722},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13638,"toc":14710},[13639,13642,13646,13649,13654,13886,13888,13899,13903,13906,13914,14018,14021,14025,14028,14032,14035,14040,14062,14068,14395,14398,14402,14410,14707],[10,13640,13636],{"id":13641},"_7函数高级部分",[14,13643,13645],{"id":13644},"_71函数默认参数","7.1函数默认参数",[19,13647,13648],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,13650,5296,13651],{},[30,13652,13653],{}," 返回值类型  函数名 （参数= 默认值）{}",[220,13655,13657],{"className":222,"code":13656,"language":224,"meta":141,"style":141},"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",[30,13658,13659,13694,13709,13713,13717,13722,13727,13756,13776,13786,13790,13794,13802,13806,13834,13856,13860,13870,13874,13882],{"__ignoreMap":141},[228,13660,13661,13663,13665,13667,13669,13671,13673,13675,13677,13680,13682,13684,13686,13688,13690,13692],{"class":230,"line":231},[228,13662,242],{"class":234},[228,13664,11500],{"class":2077},[228,13666,239],{"class":238},[228,13668,242],{"class":234},[228,13670,1512],{"class":5331},[228,13672,12550],{"class":238},[228,13674,242],{"class":234},[228,13676,2947],{"class":5331},[228,13678,13679],{"class":234}," =",[228,13681,2152],{"class":287},[228,13683,12550],{"class":238},[228,13685,242],{"class":234},[228,13687,2963],{"class":5331},[228,13689,13679],{"class":234},[228,13691,2152],{"class":287},[228,13693,12557],{"class":238},[228,13695,13696,13698,13700,13702,13704,13706],{"class":230,"line":142},[228,13697,4204],{"class":234},[228,13699,10984],{"class":238},[228,13701,719],{"class":234},[228,13703,10997],{"class":238},[228,13705,719],{"class":234},[228,13707,13708],{"class":238}," c;\n",[228,13710,13711],{"class":230,"line":1293},[228,13712,1679],{"class":238},[228,13714,13715],{"class":230,"line":1308},[228,13716,2514],{"emptyLinePlaceholder":157},[228,13718,13719],{"class":230,"line":1314},[228,13720,13721],{"class":297},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[228,13723,13724],{"class":230,"line":1328},[228,13725,13726],{"class":297},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[228,13728,13729,13731,13734,13736,13738,13740,13742,13744,13746,13748,13750,13752,13754],{"class":230,"line":1334},[228,13730,242],{"class":234},[228,13732,13733],{"class":2077}," func2",[228,13735,239],{"class":238},[228,13737,242],{"class":234},[228,13739,1512],{"class":5331},[228,13741,13679],{"class":234},[228,13743,2152],{"class":287},[228,13745,12550],{"class":238},[228,13747,242],{"class":234},[228,13749,2947],{"class":5331},[228,13751,13679],{"class":234},[228,13753,2152],{"class":287},[228,13755,2833],{"class":238},[228,13757,13758,13760,13762,13764,13766,13768,13770,13772,13774],{"class":230,"line":1425},[228,13759,242],{"class":234},[228,13761,13733],{"class":2077},[228,13763,239],{"class":238},[228,13765,242],{"class":234},[228,13767,1512],{"class":5331},[228,13769,12550],{"class":238},[228,13771,242],{"class":234},[228,13773,2947],{"class":5331},[228,13775,12557],{"class":238},[228,13777,13778,13780,13782,13784],{"class":230,"line":1431},[228,13779,4204],{"class":234},[228,13781,10984],{"class":238},[228,13783,719],{"class":234},[228,13785,12578],{"class":238},[228,13787,13788],{"class":230,"line":1443},[228,13789,1679],{"class":238},[228,13791,13792],{"class":230,"line":1726},[228,13793,2514],{"emptyLinePlaceholder":157},[228,13795,13796,13798,13800],{"class":230,"line":1731},[228,13797,242],{"class":234},[228,13799,2087],{"class":2077},[228,13801,10968],{"class":238},[228,13803,13804],{"class":230,"line":1737},[228,13805,2514],{"emptyLinePlaceholder":157},[228,13807,13808,13810,13812,13815,13817,13819,13821,13823,13825,13827,13830,13832],{"class":230,"line":1742},[228,13809,6644],{"class":238},[228,13811,1282],{"class":234},[228,13813,13814],{"class":343}," \"ret = \"",[228,13816,1558],{"class":234},[228,13818,11500],{"class":2077},[228,13820,239],{"class":238},[228,13822,938],{"class":287},[228,13824,12550],{"class":238},[228,13826,938],{"class":287},[228,13828,13829],{"class":238},") ",[228,13831,1282],{"class":234},[228,13833,8955],{"class":238},[228,13835,13836,13838,13840,13842,13844,13846,13848,13850,13852,13854],{"class":230,"line":1756},[228,13837,6644],{"class":238},[228,13839,1282],{"class":234},[228,13841,13814],{"class":343},[228,13843,1558],{"class":234},[228,13845,11500],{"class":2077},[228,13847,239],{"class":238},[228,13849,549],{"class":287},[228,13851,13829],{"class":238},[228,13853,1282],{"class":234},[228,13855,8955],{"class":238},[228,13857,13858],{"class":230,"line":1761},[228,13859,2514],{"emptyLinePlaceholder":157},[228,13861,13862,13864,13866,13868],{"class":230,"line":1767},[228,13863,2417],{"class":2077},[228,13865,239],{"class":238},[228,13867,2422],{"class":343},[228,13869,2833],{"class":238},[228,13871,13872],{"class":230,"line":1788},[228,13873,2514],{"emptyLinePlaceholder":157},[228,13875,13876,13878,13880],{"class":230,"line":1793},[228,13877,4204],{"class":234},[228,13879,4207],{"class":287},[228,13881,1404],{"class":238},[228,13883,13884],{"class":230,"line":1807},[228,13885,1679],{"class":238},[19,13887,11447],{},[183,13889,13890,13893,13896],{},[186,13891,13892],{},"我传就用我；没传就用你",[186,13894,13895],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[186,13897,13898],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,13900,13902],{"id":13901},"_72函数的占位参数","7.2函数的占位参数",[19,13904,13905],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,13907,13908,13910,13911],{},[388,13909,5296],{}," ",[30,13912,13913],{},"返回值类型 函数名 (数据类型){}",[220,13915,13917],{"className":222,"code":13916,"language":224,"meta":141,"style":141},"\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",[30,13918,13919,13924,13942,13955,13959,13967,13971,13988,13992,14002,14006,14014],{"__ignoreMap":141},[228,13920,13921],{"class":230,"line":231},[228,13922,13923],{"class":297},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[228,13925,13926,13928,13930,13932,13934,13936,13938,13940],{"class":230,"line":142},[228,13927,5479],{"class":234},[228,13929,11500],{"class":2077},[228,13931,239],{"class":238},[228,13933,242],{"class":234},[228,13935,1512],{"class":5331},[228,13937,12550],{"class":238},[228,13939,242],{"class":234},[228,13941,12557],{"class":238},[228,13943,13944,13946,13948,13951,13953],{"class":230,"line":1293},[228,13945,6644],{"class":238},[228,13947,1282],{"class":234},[228,13949,13950],{"class":343}," \"this is func\"",[228,13952,1558],{"class":234},[228,13954,8955],{"class":238},[228,13956,13957],{"class":230,"line":1308},[228,13958,1679],{"class":238},[228,13960,13961,13963,13965],{"class":230,"line":1314},[228,13962,242],{"class":234},[228,13964,2087],{"class":2077},[228,13966,10968],{"class":238},[228,13968,13969],{"class":230,"line":1328},[228,13970,2514],{"emptyLinePlaceholder":157},[228,13972,13973,13975,13977,13979,13981,13983,13985],{"class":230,"line":1334},[228,13974,13400],{"class":2077},[228,13976,239],{"class":238},[228,13978,684],{"class":287},[228,13980,616],{"class":238},[228,13982,684],{"class":287},[228,13984,6081],{"class":238},[228,13986,13987],{"class":297}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[228,13989,13990],{"class":230,"line":1425},[228,13991,2514],{"emptyLinePlaceholder":157},[228,13993,13994,13996,13998,14000],{"class":230,"line":1431},[228,13995,2417],{"class":2077},[228,13997,239],{"class":238},[228,13999,2422],{"class":343},[228,14001,2833],{"class":238},[228,14003,14004],{"class":230,"line":1443},[228,14005,2514],{"emptyLinePlaceholder":157},[228,14007,14008,14010,14012],{"class":230,"line":1726},[228,14009,4204],{"class":234},[228,14011,4207],{"class":287},[228,14013,1404],{"class":238},[228,14015,14016],{"class":230,"line":1731},[228,14017,1679],{"class":238},[19,14019,14020],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,14022,14024],{"id":14023},"_73函数重载","7.3函数重载",[19,14026,14027],{},"意思是函数名是可以相同的",[200,14029,14031],{"id":14030},"_731基本语法","7.3.1基本语法",[19,14033,14034],{},"作用：函数名可以相同，提高复用性",[19,14036,14037],{},[388,14038,14039],{},"函数重载满足条件：",[1245,14041,14042,14045,14048],{},[186,14043,14044],{},"同一个作用域下",[186,14046,14047],{},"函数名称相同",[186,14049,14050,14051,14054,14055,14058,14059],{},"函数参数",[388,14052,14053],{},"类型不同","  或者 ",[388,14056,14057],{},"个数不同"," 或者 ",[388,14060,14061],{},"顺序不同",[19,14063,14064,14067],{},[388,14065,14066],{},"注意:","  函数的返回值不可以作为函数重载的条件",[220,14069,14071],{"className":10056,"code":14070,"language":10058,"meta":141,"style":141},"\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",[30,14072,14073,14078,14086,14090,14103,14107,14121,14125,14138,14142,14157,14161,14174,14178,14199,14203,14216,14220,14240,14244,14257,14261,14265,14270,14275,14280,14285,14290,14294,14298,14306,14310,14316,14326,14336,14350,14365,14369,14379,14383,14391],{"__ignoreMap":141},[228,14074,14075],{"class":230,"line":231},[228,14076,14077],{"class":297},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[228,14079,14080,14082,14084],{"class":230,"line":142},[228,14081,5479],{"class":234},[228,14083,11500],{"class":2077},[228,14085,2090],{"class":238},[228,14087,14088],{"class":230,"line":1293},[228,14089,1660],{"class":238},[228,14091,14092,14094,14096,14099,14101],{"class":230,"line":1308},[228,14093,6644],{"class":238},[228,14095,1282],{"class":234},[228,14097,14098],{"class":343}," \"func 的调用！\"",[228,14100,1558],{"class":234},[228,14102,8955],{"class":238},[228,14104,14105],{"class":230,"line":1314},[228,14106,1679],{"class":238},[228,14108,14109,14111,14113,14115,14117,14119],{"class":230,"line":1328},[228,14110,5479],{"class":234},[228,14112,11500],{"class":2077},[228,14114,239],{"class":238},[228,14116,242],{"class":234},[228,14118,1512],{"class":5331},[228,14120,245],{"class":238},[228,14122,14123],{"class":230,"line":1334},[228,14124,1660],{"class":238},[228,14126,14127,14129,14131,14134,14136],{"class":230,"line":1425},[228,14128,6644],{"class":238},[228,14130,1282],{"class":234},[228,14132,14133],{"class":343}," \"func (int a) 的调用！\"",[228,14135,1558],{"class":234},[228,14137,8955],{"class":238},[228,14139,14140],{"class":230,"line":1431},[228,14141,1679],{"class":238},[228,14143,14144,14146,14148,14150,14153,14155],{"class":230,"line":1443},[228,14145,5479],{"class":234},[228,14147,11500],{"class":2077},[228,14149,239],{"class":238},[228,14151,14152],{"class":234},"double",[228,14154,1512],{"class":5331},[228,14156,245],{"class":238},[228,14158,14159],{"class":230,"line":1726},[228,14160,1660],{"class":238},[228,14162,14163,14165,14167,14170,14172],{"class":230,"line":1731},[228,14164,6644],{"class":238},[228,14166,1282],{"class":234},[228,14168,14169],{"class":343}," \"func (double a)的调用！\"",[228,14171,1558],{"class":234},[228,14173,8955],{"class":238},[228,14175,14176],{"class":230,"line":1737},[228,14177,1679],{"class":238},[228,14179,14180,14182,14184,14186,14188,14190,14193,14195,14197],{"class":230,"line":1742},[228,14181,5479],{"class":234},[228,14183,11500],{"class":2077},[228,14185,239],{"class":238},[228,14187,242],{"class":234},[228,14189,1512],{"class":5331},[228,14191,14192],{"class":238}," ,",[228,14194,14152],{"class":234},[228,14196,2947],{"class":5331},[228,14198,245],{"class":238},[228,14200,14201],{"class":230,"line":1756},[228,14202,1660],{"class":238},[228,14204,14205,14207,14209,14212,14214],{"class":230,"line":1761},[228,14206,6644],{"class":238},[228,14208,1282],{"class":234},[228,14210,14211],{"class":343}," \"func (int a ,double b) 的调用！\"",[228,14213,1558],{"class":234},[228,14215,8955],{"class":238},[228,14217,14218],{"class":230,"line":1767},[228,14219,1679],{"class":238},[228,14221,14222,14224,14226,14228,14230,14232,14234,14236,14238],{"class":230,"line":1788},[228,14223,5479],{"class":234},[228,14225,11500],{"class":2077},[228,14227,239],{"class":238},[228,14229,14152],{"class":234},[228,14231,1512],{"class":5331},[228,14233,14192],{"class":238},[228,14235,242],{"class":234},[228,14237,2947],{"class":5331},[228,14239,245],{"class":238},[228,14241,14242],{"class":230,"line":1793},[228,14243,1660],{"class":238},[228,14245,14246,14248,14250,14253,14255],{"class":230,"line":1807},[228,14247,6644],{"class":238},[228,14249,1282],{"class":234},[228,14251,14252],{"class":343}," \"func (double a ,int b)的调用！\"",[228,14254,1558],{"class":234},[228,14256,8955],{"class":238},[228,14258,14259],{"class":230,"line":1812},[228,14260,1679],{"class":238},[228,14262,14263],{"class":230,"line":1841},[228,14264,2514],{"emptyLinePlaceholder":157},[228,14266,14267],{"class":230,"line":1846},[228,14268,14269],{"class":297},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[228,14271,14272],{"class":230,"line":1863},[228,14273,14274],{"class":297},"\u002F\u002Fint func(double a, int b)\n",[228,14276,14277],{"class":230,"line":1868},[228,14278,14279],{"class":297},"\u002F\u002F{\n",[228,14281,14282],{"class":230,"line":1873},[228,14283,14284],{"class":297},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[228,14286,14287],{"class":230,"line":1878},[228,14288,14289],{"class":297},"\u002F\u002F}\n",[228,14291,14292],{"class":230,"line":1892},[228,14293,2514],{"emptyLinePlaceholder":157},[228,14295,14296],{"class":230,"line":1897},[228,14297,2514],{"emptyLinePlaceholder":157},[228,14299,14300,14302,14304],{"class":230,"line":2691},[228,14301,242],{"class":234},[228,14303,2087],{"class":2077},[228,14305,10968],{"class":238},[228,14307,14308],{"class":230,"line":2705},[228,14309,2514],{"emptyLinePlaceholder":157},[228,14311,14312,14314],{"class":230,"line":2713},[228,14313,13400],{"class":2077},[228,14315,5751],{"class":238},[228,14317,14318,14320,14322,14324],{"class":230,"line":2718},[228,14319,13400],{"class":2077},[228,14321,239],{"class":238},[228,14323,684],{"class":287},[228,14325,2833],{"class":238},[228,14327,14328,14330,14332,14334],{"class":230,"line":2724},[228,14329,13400],{"class":2077},[228,14331,239],{"class":238},[228,14333,288],{"class":287},[228,14335,2833],{"class":238},[228,14337,14338,14340,14342,14344,14346,14348],{"class":230,"line":2730},[228,14339,13400],{"class":2077},[228,14341,239],{"class":238},[228,14343,684],{"class":287},[228,14345,616],{"class":238},[228,14347,288],{"class":287},[228,14349,2833],{"class":238},[228,14351,14352,14354,14356,14358,14361,14363],{"class":230,"line":2735},[228,14353,13400],{"class":2077},[228,14355,239],{"class":238},[228,14357,288],{"class":287},[228,14359,14360],{"class":238}," , ",[228,14362,684],{"class":287},[228,14364,2833],{"class":238},[228,14366,14367],{"class":230,"line":8063},[228,14368,13325],{"class":238},[228,14370,14371,14373,14375,14377],{"class":230,"line":8087},[228,14372,2417],{"class":2077},[228,14374,239],{"class":238},[228,14376,2422],{"class":343},[228,14378,2833],{"class":238},[228,14380,14381],{"class":230,"line":8092},[228,14382,2514],{"emptyLinePlaceholder":157},[228,14384,14385,14387,14389],{"class":230,"line":8098},[228,14386,4204],{"class":234},[228,14388,4207],{"class":287},[228,14390,1404],{"class":238},[228,14392,14393],{"class":230,"line":8125},[228,14394,1679],{"class":238},[19,14396,14397],{},"重点：函数返回值不可以作为函数重载条件！",[200,14399,14401],{"id":14400},"_732注意事项","7.3.2注意事项",[1245,14403,14404,14407],{},[186,14405,14406],{},"引用作为重载条件!!!",[186,14408,14409],{},"函数重载碰到函数默认参数",[220,14411,14413],{"className":222,"code":14412,"language":224,"meta":141,"style":141},"\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",[30,14414,14415,14420,14425,14429,14445,14449,14462,14466,14470,14488,14492,14505,14509,14513,14517,14522,14526,14550,14554,14567,14571,14575,14589,14593,14606,14610,14614,14622,14626,14638,14648,14661,14665,14669,14677,14681,14691,14695,14703],{"__ignoreMap":141},[228,14416,14417],{"class":230,"line":231},[228,14418,14419],{"class":297},"\u002F\u002F函数重载注意事项\n",[228,14421,14422],{"class":230,"line":142},[228,14423,14424],{"class":297},"\u002F\u002F1、引用作为重载条件\n",[228,14426,14427],{"class":230,"line":1293},[228,14428,2514],{"emptyLinePlaceholder":157},[228,14430,14431,14433,14435,14437,14439,14441,14443],{"class":230,"line":1308},[228,14432,5479],{"class":234},[228,14434,11500],{"class":2077},[228,14436,239],{"class":238},[228,14438,242],{"class":234},[228,14440,10699],{"class":234},[228,14442,476],{"class":5331},[228,14444,245],{"class":238},[228,14446,14447],{"class":230,"line":1314},[228,14448,1660],{"class":238},[228,14450,14451,14453,14455,14458,14460],{"class":230,"line":1328},[228,14452,6644],{"class":238},[228,14454,1282],{"class":234},[228,14456,14457],{"class":343}," \"func (int &a) 调用 \"",[228,14459,1558],{"class":234},[228,14461,8955],{"class":238},[228,14463,14464],{"class":230,"line":1334},[228,14465,1679],{"class":238},[228,14467,14468],{"class":230,"line":1425},[228,14469,2514],{"emptyLinePlaceholder":157},[228,14471,14472,14474,14476,14478,14480,14482,14484,14486],{"class":230,"line":1431},[228,14473,5479],{"class":234},[228,14475,11500],{"class":2077},[228,14477,239],{"class":238},[228,14479,6907],{"class":234},[228,14481,2496],{"class":234},[228,14483,10699],{"class":234},[228,14485,476],{"class":5331},[228,14487,245],{"class":238},[228,14489,14490],{"class":230,"line":1443},[228,14491,1660],{"class":238},[228,14493,14494,14496,14498,14501,14503],{"class":230,"line":1726},[228,14495,6644],{"class":238},[228,14497,1282],{"class":234},[228,14499,14500],{"class":343}," \"func (const int &a) 调用 \"",[228,14502,1558],{"class":234},[228,14504,8955],{"class":238},[228,14506,14507],{"class":230,"line":1731},[228,14508,1679],{"class":238},[228,14510,14511],{"class":230,"line":1737},[228,14512,2514],{"emptyLinePlaceholder":157},[228,14514,14515],{"class":230,"line":1742},[228,14516,2514],{"emptyLinePlaceholder":157},[228,14518,14519],{"class":230,"line":1756},[228,14520,14521],{"class":297},"\u002F\u002F2、函数重载碰到函数默认参数\n",[228,14523,14524],{"class":230,"line":1761},[228,14525,2514],{"emptyLinePlaceholder":157},[228,14527,14528,14530,14532,14534,14536,14538,14540,14542,14544,14546,14548],{"class":230,"line":1767},[228,14529,5479],{"class":234},[228,14531,13733],{"class":2077},[228,14533,239],{"class":238},[228,14535,242],{"class":234},[228,14537,1512],{"class":5331},[228,14539,12550],{"class":238},[228,14541,242],{"class":234},[228,14543,2947],{"class":5331},[228,14545,13679],{"class":234},[228,14547,2152],{"class":287},[228,14549,245],{"class":238},[228,14551,14552],{"class":230,"line":1788},[228,14553,1660],{"class":238},[228,14555,14556,14558,14560,14563,14565],{"class":230,"line":1793},[228,14557,6644],{"class":238},[228,14559,1282],{"class":234},[228,14561,14562],{"class":343}," \"func2(int a, int b = 10) 调用\"",[228,14564,1558],{"class":234},[228,14566,8955],{"class":238},[228,14568,14569],{"class":230,"line":1807},[228,14570,1679],{"class":238},[228,14572,14573],{"class":230,"line":1812},[228,14574,2514],{"emptyLinePlaceholder":157},[228,14576,14577,14579,14581,14583,14585,14587],{"class":230,"line":1841},[228,14578,5479],{"class":234},[228,14580,13733],{"class":2077},[228,14582,239],{"class":238},[228,14584,242],{"class":234},[228,14586,1512],{"class":5331},[228,14588,245],{"class":238},[228,14590,14591],{"class":230,"line":1846},[228,14592,1660],{"class":238},[228,14594,14595,14597,14599,14602,14604],{"class":230,"line":1863},[228,14596,6644],{"class":238},[228,14598,1282],{"class":234},[228,14600,14601],{"class":343}," \"func2(int a) 调用\"",[228,14603,1558],{"class":234},[228,14605,8955],{"class":238},[228,14607,14608],{"class":230,"line":1868},[228,14609,1679],{"class":238},[228,14611,14612],{"class":230,"line":1873},[228,14613,2514],{"emptyLinePlaceholder":157},[228,14615,14616,14618,14620],{"class":230,"line":1878},[228,14617,242],{"class":234},[228,14619,2087],{"class":2077},[228,14621,10968],{"class":238},[228,14623,14624],{"class":230,"line":1892},[228,14625,13325],{"class":238},[228,14627,14628,14630,14632,14634,14636],{"class":230,"line":1897},[228,14629,2099],{"class":234},[228,14631,10984],{"class":238},[228,14633,284],{"class":234},[228,14635,2152],{"class":287},[228,14637,1404],{"class":238},[228,14639,14640,14642,14645],{"class":230,"line":2691},[228,14641,13400],{"class":2077},[228,14643,14644],{"class":238},"(a);",[228,14646,14647],{"class":297}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[228,14649,14650,14652,14654,14656,14658],{"class":230,"line":2705},[228,14651,13400],{"class":2077},[228,14653,239],{"class":238},[228,14655,684],{"class":287},[228,14657,6081],{"class":238},[228,14659,14660],{"class":297},"\u002F\u002F调用有const   10是个常量\n",[228,14662,14663],{"class":230,"line":2713},[228,14664,2514],{"emptyLinePlaceholder":157},[228,14666,14667],{"class":230,"line":2718},[228,14668,2514],{"emptyLinePlaceholder":157},[228,14670,14671,14674],{"class":230,"line":2724},[228,14672,14673],{"class":297},"    \u002F\u002Ffunc2(10);",[228,14675,14676],{"class":297}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[228,14678,14679],{"class":230,"line":2730},[228,14680,2514],{"emptyLinePlaceholder":157},[228,14682,14683,14685,14687,14689],{"class":230,"line":2735},[228,14684,2417],{"class":2077},[228,14686,239],{"class":238},[228,14688,2422],{"class":343},[228,14690,2833],{"class":238},[228,14692,14693],{"class":230,"line":8063},[228,14694,2514],{"emptyLinePlaceholder":157},[228,14696,14697,14699,14701],{"class":230,"line":8087},[228,14698,4204],{"class":234},[228,14700,4207],{"class":287},[228,14702,1404],{"class":238},[228,14704,14705],{"class":230,"line":8092},[228,14706,1679],{"class":238},[5241,14708,14709],{},"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":141,"searchDepth":142,"depth":142,"links":14711},[14712,14713,14714],{"id":13644,"depth":142,"text":13645},{"id":13901,"depth":142,"text":13902},{"id":14023,"depth":142,"text":14024,"children":14715},[14716,14717],{"id":14030,"depth":1293,"text":14031},{"id":14400,"depth":1293,"text":14401},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13636,"description":141},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14724,"title":14725,"body":14726,"description":23480,"extension":155,"meta":23481,"navigation":157,"path":23482,"seo":23483,"stem":23484,"__hash__":23485},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14727,"toc":23461},[14728,14731,14737,14744,14749,14752,14755,14758,14762,14766,14769,14772,14780,14785,14788,14795,14800,14959,14962,15215,15218,15221,15224,15229,15232,15235,15246,15251,15487,15491,15501,15504,15512,15659,15663,15666,15669,15673,16118,16122,16130,16138,17050,17057,17062,17690,17693,17696,17699,17818,17821,17908,17911,18037,18040,18134,18137,18490,18494,18502,18506,18513,18516,18519,18530,18536,18541,18553,18561,18581,18589,18606,18792,18795,18799,18802,18805,18808,18811,18814,18817,18820,19280,19286,19290,19293,19304,19891,19894,20383,20387,20390,20393,20396,20399,20402,20410,20806,20810,20813,20816,21263,21266,21269,21274,21277,21282,21285,21289,21292,21294,21300,21303,21609,21619,21660,21664,21667,21669,21702,21705,22012,22014,22029,22032,22055,22064,22070,22073,22077,22080,22083,22088,22099,22104,22112,22117,22247,22250,22253,22428,22433,22645,22649,22652,22766,22771,23010,23014,23018,23021,23024,23029,23134,23137,23140,23143,23147,23258,23261,23264,23269,23321,23324,23327,23332,23378,23381,23386,23454,23456,23459],[10,14729,14725],{"id":14730},"_8类和对象",[19,14732,14733,14734],{},"C++面向对象的三大特性为",[388,14735,14736],{},"封装、继承、多态",[19,14738,14739,14740,14743],{},"C++认为",[388,14741,14742],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,14745,14746],{},[388,14747,14748],{},"例如：",[19,14750,14751],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,14753,14754],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,14756,14757],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,14759,14761],{"id":14760},"_81封装","8.1封装",[200,14763,14765],{"id":14764},"_811封装的意义","8.1.1封装的意义",[19,14767,14768],{},"封装是C++面向对象三大特性之一",[19,14770,14771],{},"封装的意义：",[1245,14773,14774,14777],{},[186,14775,14776],{},"将属性和行为作为一个整体，表现生活中的事物",[186,14778,14779],{},"将属性和行为加以权限控制",[19,14781,14782],{},[388,14783,14784],{},"封装意义一：",[19,14786,14787],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,14789,14790,13910,14792],{},[388,14791,5296],{},[30,14793,14794],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[183,14796,14797],{},[186,14798,14799],{},"**示例1：**设计一个圆类，求圆的周长",[220,14801,14803],{"className":222,"code":14802,"language":224,"meta":141,"style":141},"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",[30,14804,14805,14813,14817,14822,14827,14832,14837,14844,14849,14859,14863,14881,14885,14889,14897,14901,14906,14911,14916,14921,14932,14955],{"__ignoreMap":141},[228,14806,14807,14810],{"class":230,"line":231},[228,14808,14809],{"class":234},"class",[228,14811,14812],{"class":2077}," Circle\n",[228,14814,14815],{"class":230,"line":142},[228,14816,1660],{"class":238},[228,14818,14819],{"class":230,"line":1293},[228,14820,14821],{"class":297},"    \u002F\u002F访问权限\n",[228,14823,14824],{"class":230,"line":1308},[228,14825,14826],{"class":297},"    \u002F\u002F公共权限\n",[228,14828,14829],{"class":230,"line":1314},[228,14830,14831],{"class":234},"public:\n",[228,14833,14834],{"class":230,"line":1328},[228,14835,14836],{"class":297},"    \u002F\u002F属性\n",[228,14838,14839,14841],{"class":230,"line":1334},[228,14840,2099],{"class":234},[228,14842,14843],{"class":238}," m_r;\n",[228,14845,14846],{"class":230,"line":1425},[228,14847,14848],{"class":297},"    \u002F\u002F行为\n",[228,14850,14851,14854,14857],{"class":230,"line":1431},[228,14852,14853],{"class":234},"    double",[228,14855,14856],{"class":2077}," calculateZC",[228,14858,2090],{"class":238},[228,14860,14861],{"class":230,"line":1443},[228,14862,2144],{"class":238},[228,14864,14865,14868,14871,14873,14876,14878],{"class":230,"line":1726},[228,14866,14867],{"class":234},"        return",[228,14869,14870],{"class":287}," 2",[228,14872,693],{"class":234},[228,14874,14875],{"class":238},"PI",[228,14877,693],{"class":234},[228,14879,14880],{"class":238},"m_r;\n",[228,14882,14883],{"class":230,"line":1731},[228,14884,2301],{"class":238},[228,14886,14887],{"class":230,"line":1737},[228,14888,4109],{"class":238},[228,14890,14891,14893,14895],{"class":230,"line":1742},[228,14892,242],{"class":234},[228,14894,2087],{"class":2077},[228,14896,2090],{"class":238},[228,14898,14899],{"class":230,"line":1756},[228,14900,1660],{"class":238},[228,14902,14903],{"class":230,"line":1761},[228,14904,14905],{"class":297},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[228,14907,14908],{"class":230,"line":1767},[228,14909,14910],{"class":297},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[228,14912,14913],{"class":230,"line":1788},[228,14914,14915],{"class":238},"    Circle c1;\n",[228,14917,14918],{"class":230,"line":1793},[228,14919,14920],{"class":297},"    \u002F\u002F给圆对象 的属性进行赋值\n",[228,14922,14923,14926,14928,14930],{"class":230,"line":1807},[228,14924,14925],{"class":238},"    c1.m_r",[228,14927,284],{"class":234},[228,14929,684],{"class":287},[228,14931,1404],{"class":238},[228,14933,14934,14936,14938,14941,14943,14946,14949,14951,14953],{"class":230,"line":1812},[228,14935,1665],{"class":238},[228,14937,1282],{"class":234},[228,14939,14940],{"class":343},"\"圆的周长\"",[228,14942,1282],{"class":234},[228,14944,14945],{"class":238},"c1.",[228,14947,14948],{"class":2077},"calculateZC",[228,14950,2541],{"class":238},[228,14952,1282],{"class":234},[228,14954,1305],{"class":238},[228,14956,14957],{"class":230,"line":1841},[228,14958,1679],{"class":238},[19,14960,14961],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[220,14963,14965],{"className":222,"code":14964,"language":224,"meta":141,"style":141},"#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",[30,14966,14967,14973,14983,14989,14995,14999,15003,15008,15015,15020,15038,15042,15052,15056,15061,15077,15081,15091,15095,15100,15108,15112,15144,15148,15152,15160,15164,15169,15174,15188,15202,15211],{"__ignoreMap":141},[228,14968,14969,14971],{"class":230,"line":231},[228,14970,2063],{"class":234},[228,14972,2066],{"class":343},[228,14974,14975,14977,14979,14981],{"class":230,"line":142},[228,14976,2071],{"class":234},[228,14978,2074],{"class":234},[228,14980,2078],{"class":2077},[228,14982,1404],{"class":238},[228,14984,14985,14987],{"class":230,"line":1293},[228,14986,2063],{"class":234},[228,14988,7864],{"class":343},[228,14990,14991,14993],{"class":230,"line":1308},[228,14992,14809],{"class":234},[228,14994,7877],{"class":2077},[228,14996,14997],{"class":230,"line":1314},[228,14998,1660],{"class":238},[228,15000,15001],{"class":230,"line":1328},[228,15002,14831],{"class":234},[228,15004,15005],{"class":230,"line":1334},[228,15006,15007],{"class":238},"    string m_name;\n",[228,15009,15010,15012],{"class":230,"line":1425},[228,15011,2099],{"class":234},[228,15013,15014],{"class":238}," m_id;\n",[228,15016,15017],{"class":230,"line":1431},[228,15018,15019],{"class":297},"    \u002F\u002F赋值姓名\n",[228,15021,15022,15025,15028,15030,15033,15036],{"class":230,"line":1443},[228,15023,15024],{"class":234},"    void",[228,15026,15027],{"class":2077}," setName",[228,15029,239],{"class":238},[228,15031,15032],{"class":2077},"string",[228,15034,15035],{"class":5331}," name",[228,15037,245],{"class":238},[228,15039,15040],{"class":230,"line":1726},[228,15041,2144],{"class":238},[228,15043,15044,15047,15049],{"class":230,"line":1731},[228,15045,15046],{"class":238},"        m_name",[228,15048,284],{"class":234},[228,15050,15051],{"class":238},"name;\n",[228,15053,15054],{"class":230,"line":1737},[228,15055,2301],{"class":238},[228,15057,15058],{"class":230,"line":1742},[228,15059,15060],{"class":297},"    \u002F\u002F赋值学号\n",[228,15062,15063,15065,15068,15070,15072,15075],{"class":230,"line":1756},[228,15064,15024],{"class":234},[228,15066,15067],{"class":2077}," setId",[228,15069,239],{"class":238},[228,15071,242],{"class":234},[228,15073,15074],{"class":5331}," id",[228,15076,245],{"class":238},[228,15078,15079],{"class":230,"line":1761},[228,15080,2144],{"class":238},[228,15082,15083,15086,15088],{"class":230,"line":1767},[228,15084,15085],{"class":238},"        m_id",[228,15087,284],{"class":234},[228,15089,15090],{"class":238},"id;\n",[228,15092,15093],{"class":230,"line":1788},[228,15094,2301],{"class":238},[228,15096,15097],{"class":230,"line":1793},[228,15098,15099],{"class":297},"    \u002F\u002F打印学生信息\n",[228,15101,15102,15104,15106],{"class":230,"line":1807},[228,15103,15024],{"class":234},[228,15105,9730],{"class":2077},[228,15107,2090],{"class":238},[228,15109,15110],{"class":230,"line":1812},[228,15111,2144],{"class":238},[228,15113,15114,15116,15118,15121,15123,15126,15128,15130,15132,15135,15137,15140,15142],{"class":230,"line":1841},[228,15115,3565],{"class":238},[228,15117,1282],{"class":234},[228,15119,15120],{"class":343},"\"姓名：\"",[228,15122,1282],{"class":234},[228,15124,15125],{"class":238},"m_name",[228,15127,1282],{"class":234},[228,15129,4473],{"class":343},[228,15131,1282],{"class":234},[228,15133,15134],{"class":343},"\"学号：\"",[228,15136,1282],{"class":234},[228,15138,15139],{"class":238},"m_id",[228,15141,1282],{"class":234},[228,15143,1305],{"class":238},[228,15145,15146],{"class":230,"line":1846},[228,15147,2301],{"class":238},[228,15149,15150],{"class":230,"line":1863},[228,15151,4109],{"class":238},[228,15153,15154,15156,15158],{"class":230,"line":1868},[228,15155,242],{"class":234},[228,15157,2087],{"class":2077},[228,15159,2090],{"class":238},[228,15161,15162],{"class":230,"line":1873},[228,15163,1660],{"class":238},[228,15165,15166],{"class":230,"line":1878},[228,15167,15168],{"class":297},"    \u002F\u002F实例化\n",[228,15170,15171],{"class":230,"line":1892},[228,15172,15173],{"class":238},"    Student s1;\n",[228,15175,15176,15179,15182,15184,15186],{"class":230,"line":1897},[228,15177,15178],{"class":238},"    s1.",[228,15180,15181],{"class":2077},"setName",[228,15183,239],{"class":238},[228,15185,8031],{"class":343},[228,15187,2833],{"class":238},[228,15189,15190,15192,15195,15197,15200],{"class":230,"line":2691},[228,15191,15178],{"class":238},[228,15193,15194],{"class":2077},"setId",[228,15196,239],{"class":238},[228,15198,15199],{"class":287},"123456",[228,15201,2833],{"class":238},[228,15203,15204,15206,15209],{"class":230,"line":2705},[228,15205,15178],{"class":238},[228,15207,15208],{"class":2077},"printInfo",[228,15210,5751],{"class":238},[228,15212,15213],{"class":230,"line":2713},[228,15214,1679],{"class":238},[19,15216,15217],{},"类中的属性和行为统称为成员",[19,15219,15220],{},"属性：成员属性(成员变量)",[19,15222,15223],{},"方法：成员函数(成员方法)",[19,15225,15226],{},[388,15227,15228],{},"封装意义二：",[19,15230,15231],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,15233,15234],{},"访问权限有三种：",[183,15236,15237,15240,15243],{},[186,15238,15239],{},"public        公共权限",[186,15241,15242],{},"protected 保护权限",[186,15244,15245],{},"private      私有权限",[19,15247,15248],{},[388,15249,15250],{},"示例：",[220,15252,15254],{"className":10056,"code":15253,"language":10058,"meta":141,"style":141},"\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",[30,15255,15256,15261,15266,15271,15276,15280,15287,15291,15296,15300,15305,15309,15314,15319,15324,15328,15333,15338,15345,15349,15353,15361,15365,15376,15388,15400,15404,15408,15412,15420,15424,15429,15441,15449,15457,15461,15471,15475,15483],{"__ignoreMap":141},[228,15257,15258],{"class":230,"line":231},[228,15259,15260],{"class":297},"\u002F\u002F三种权限\n",[228,15262,15263],{"class":230,"line":142},[228,15264,15265],{"class":297},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[228,15267,15268],{"class":230,"line":1293},[228,15269,15270],{"class":297},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[228,15272,15273],{"class":230,"line":1308},[228,15274,15275],{"class":297},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[228,15277,15278],{"class":230,"line":1314},[228,15279,2514],{"emptyLinePlaceholder":157},[228,15281,15282,15284],{"class":230,"line":1328},[228,15283,14809],{"class":234},[228,15285,15286],{"class":2077}," Person\n",[228,15288,15289],{"class":230,"line":1334},[228,15290,1660],{"class":238},[228,15292,15293],{"class":230,"line":1425},[228,15294,15295],{"class":297},"    \u002F\u002F姓名  公共权限\n",[228,15297,15298],{"class":230,"line":1431},[228,15299,14831],{"class":234},[228,15301,15302],{"class":230,"line":1443},[228,15303,15304],{"class":238},"    string m_Name;\n",[228,15306,15307],{"class":230,"line":1726},[228,15308,2514],{"emptyLinePlaceholder":157},[228,15310,15311],{"class":230,"line":1731},[228,15312,15313],{"class":297},"    \u002F\u002F汽车  保护权限\n",[228,15315,15316],{"class":230,"line":1737},[228,15317,15318],{"class":234},"protected:\n",[228,15320,15321],{"class":230,"line":1742},[228,15322,15323],{"class":238},"    string m_Car;\n",[228,15325,15326],{"class":230,"line":1756},[228,15327,2514],{"emptyLinePlaceholder":157},[228,15329,15330],{"class":230,"line":1761},[228,15331,15332],{"class":297},"    \u002F\u002F银行卡密码  私有权限\n",[228,15334,15335],{"class":230,"line":1767},[228,15336,15337],{"class":234},"private:\n",[228,15339,15340,15342],{"class":230,"line":1788},[228,15341,2099],{"class":234},[228,15343,15344],{"class":238}," m_Password;\n",[228,15346,15347],{"class":230,"line":1793},[228,15348,2514],{"emptyLinePlaceholder":157},[228,15350,15351],{"class":230,"line":1807},[228,15352,14831],{"class":234},[228,15354,15355,15357,15359],{"class":230,"line":1812},[228,15356,15024],{"class":234},[228,15358,11500],{"class":2077},[228,15360,2090],{"class":238},[228,15362,15363],{"class":230,"line":1841},[228,15364,2144],{"class":238},[228,15366,15367,15370,15372,15374],{"class":230,"line":1846},[228,15368,15369],{"class":238},"        m_Name ",[228,15371,284],{"class":234},[228,15373,9053],{"class":343},[228,15375,1404],{"class":238},[228,15377,15378,15381,15383,15386],{"class":230,"line":1863},[228,15379,15380],{"class":238},"        m_Car ",[228,15382,284],{"class":234},[228,15384,15385],{"class":343}," \"拖拉机\"",[228,15387,1404],{"class":238},[228,15389,15390,15393,15395,15398],{"class":230,"line":1868},[228,15391,15392],{"class":238},"        m_Password ",[228,15394,284],{"class":234},[228,15396,15397],{"class":287}," 123456",[228,15399,1404],{"class":238},[228,15401,15402],{"class":230,"line":1873},[228,15403,2301],{"class":238},[228,15405,15406],{"class":230,"line":1878},[228,15407,4109],{"class":238},[228,15409,15410],{"class":230,"line":1892},[228,15411,2514],{"emptyLinePlaceholder":157},[228,15413,15414,15416,15418],{"class":230,"line":1897},[228,15415,242],{"class":234},[228,15417,2087],{"class":2077},[228,15419,10968],{"class":238},[228,15421,15422],{"class":230,"line":2691},[228,15423,2514],{"emptyLinePlaceholder":157},[228,15425,15426],{"class":230,"line":2705},[228,15427,15428],{"class":238},"    Person p;\n",[228,15430,15431,15434,15436,15439],{"class":230,"line":2713},[228,15432,15433],{"class":238},"    p.m_Name ",[228,15435,284],{"class":234},[228,15437,15438],{"class":343}," \"李四\"",[228,15440,1404],{"class":238},[228,15442,15443,15446],{"class":230,"line":2718},[228,15444,15445],{"class":297},"    \u002F\u002Fp.m_Car = \"奔驰\";",[228,15447,15448],{"class":297},"  \u002F\u002F保护权限类外访问不到\n",[228,15450,15451,15454],{"class":230,"line":2724},[228,15452,15453],{"class":297},"    \u002F\u002Fp.m_Password = 123;",[228,15455,15456],{"class":297}," \u002F\u002F私有权限类外访问不到\n",[228,15458,15459],{"class":230,"line":2730},[228,15460,2514],{"emptyLinePlaceholder":157},[228,15462,15463,15465,15467,15469],{"class":230,"line":2735},[228,15464,2417],{"class":2077},[228,15466,239],{"class":238},[228,15468,2422],{"class":343},[228,15470,2833],{"class":238},[228,15472,15473],{"class":230,"line":8063},[228,15474,2514],{"emptyLinePlaceholder":157},[228,15476,15477,15479,15481],{"class":230,"line":8087},[228,15478,4204],{"class":234},[228,15480,4207],{"class":287},[228,15482,1404],{"class":238},[228,15484,15485],{"class":230,"line":8092},[228,15486,1679],{"class":238},[200,15488,15490],{"id":15489},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,15492,15493,15494,15497,15498],{},"在C++中 struct和class唯一的",[388,15495,15496],{},"区别","就在于 ",[388,15499,15500],{},"默认的访问权限不同",[19,15502,15503],{},"区别：",[1245,15505,15506,15509],{},[186,15507,15508],{},"struct 默认权限为公共",[186,15510,15511],{},"class   默认权限为私有",[220,15513,15515],{"className":10056,"code":15514,"language":10058,"meta":141,"style":141},"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",[30,15516,15517,15524,15528,15538,15542,15546,15553,15557,15567,15571,15575,15583,15587,15592,15606,15610,15615,15629,15633,15643,15647,15655],{"__ignoreMap":141},[228,15518,15519,15521],{"class":230,"line":231},[228,15520,14809],{"class":234},[228,15522,15523],{"class":2077}," C1\n",[228,15525,15526],{"class":230,"line":142},[228,15527,1660],{"class":238},[228,15529,15530,15532,15535],{"class":230,"line":1293},[228,15531,2099],{"class":234},[228,15533,15534],{"class":238},"  m_A;",[228,15536,15537],{"class":297}," \u002F\u002F默认是私有权限\n",[228,15539,15540],{"class":230,"line":1308},[228,15541,4109],{"class":238},[228,15543,15544],{"class":230,"line":1314},[228,15545,2514],{"emptyLinePlaceholder":157},[228,15547,15548,15550],{"class":230,"line":1328},[228,15549,7874],{"class":234},[228,15551,15552],{"class":2077}," C2\n",[228,15554,15555],{"class":230,"line":1334},[228,15556,1660],{"class":238},[228,15558,15559,15561,15564],{"class":230,"line":1425},[228,15560,2099],{"class":234},[228,15562,15563],{"class":238}," m_A;",[228,15565,15566],{"class":297},"  \u002F\u002F默认是公共权限\n",[228,15568,15569],{"class":230,"line":1431},[228,15570,4109],{"class":238},[228,15572,15573],{"class":230,"line":1443},[228,15574,2514],{"emptyLinePlaceholder":157},[228,15576,15577,15579,15581],{"class":230,"line":1726},[228,15578,242],{"class":234},[228,15580,2087],{"class":2077},[228,15582,10968],{"class":238},[228,15584,15585],{"class":230,"line":1731},[228,15586,2514],{"emptyLinePlaceholder":157},[228,15588,15589],{"class":230,"line":1737},[228,15590,15591],{"class":238},"    C1 c1;\n",[228,15593,15594,15597,15599,15601,15603],{"class":230,"line":1742},[228,15595,15596],{"class":238},"    c1.m_A ",[228,15598,284],{"class":234},[228,15600,2152],{"class":287},[228,15602,294],{"class":238},[228,15604,15605],{"class":297}," \u002F\u002F错误，访问权限是私有\n",[228,15607,15608],{"class":230,"line":1756},[228,15609,2514],{"emptyLinePlaceholder":157},[228,15611,15612],{"class":230,"line":1761},[228,15613,15614],{"class":238},"    C2 c2;\n",[228,15616,15617,15620,15622,15624,15626],{"class":230,"line":1767},[228,15618,15619],{"class":238},"    c2.m_A ",[228,15621,284],{"class":234},[228,15623,2152],{"class":287},[228,15625,294],{"class":238},[228,15627,15628],{"class":297}," \u002F\u002F正确，访问权限是公共\n",[228,15630,15631],{"class":230,"line":1788},[228,15632,2514],{"emptyLinePlaceholder":157},[228,15634,15635,15637,15639,15641],{"class":230,"line":1793},[228,15636,2417],{"class":2077},[228,15638,239],{"class":238},[228,15640,2422],{"class":343},[228,15642,2833],{"class":238},[228,15644,15645],{"class":230,"line":1807},[228,15646,2514],{"emptyLinePlaceholder":157},[228,15648,15649,15651,15653],{"class":230,"line":1812},[228,15650,4204],{"class":234},[228,15652,4207],{"class":287},[228,15654,1404],{"class":238},[228,15656,15657],{"class":230,"line":1841},[228,15658,1679],{"class":238},[200,15660,15662],{"id":15661},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,15664,15665],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,15667,15668],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,15670,15671],{},[388,15672,15250],{},[220,15674,15676],{"className":10056,"code":15675,"language":10058,"meta":141,"style":141},"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",[30,15677,15678,15688,15692,15696,15701,15715,15724,15728,15738,15742,15749,15753,15757,15761,15766,15775,15782,15786,15791,15807,15830,15843,15850,15854,15863,15867,15871,15876,15892,15902,15906,15910,15914,15922,15926,15936,15940,15948,15952,15956,15964,15968,15972,15977,15990,16013,16017,16022,16035,16057,16061,16066,16080,16088,16092,16102,16106,16114],{"__ignoreMap":141},[228,15679,15680,15682,15685],{"class":230,"line":231},[228,15681,14809],{"class":234},[228,15683,15684],{"class":2077}," Person",[228,15686,15687],{"class":238}," {\n",[228,15689,15690],{"class":230,"line":142},[228,15691,14831],{"class":234},[228,15693,15694],{"class":230,"line":1293},[228,15695,2514],{"emptyLinePlaceholder":157},[228,15697,15698],{"class":230,"line":1308},[228,15699,15700],{"class":297},"    \u002F\u002F姓名设置可读可写\n",[228,15702,15703,15705,15707,15709,15711,15713],{"class":230,"line":1314},[228,15704,15024],{"class":234},[228,15706,15027],{"class":2077},[228,15708,239],{"class":238},[228,15710,15032],{"class":2077},[228,15712,15035],{"class":5331},[228,15714,12557],{"class":238},[228,15716,15717,15719,15721],{"class":230,"line":1328},[228,15718,15369],{"class":238},[228,15720,284],{"class":234},[228,15722,15723],{"class":238}," name;\n",[228,15725,15726],{"class":230,"line":1334},[228,15727,2301],{"class":238},[228,15729,15730,15733,15736],{"class":230,"line":1425},[228,15731,15732],{"class":2077},"    string",[228,15734,15735],{"class":2077}," getName",[228,15737,2090],{"class":238},[228,15739,15740],{"class":230,"line":1431},[228,15741,2144],{"class":238},[228,15743,15744,15746],{"class":230,"line":1443},[228,15745,14867],{"class":234},[228,15747,15748],{"class":238}," m_Name;\n",[228,15750,15751],{"class":230,"line":1726},[228,15752,2301],{"class":238},[228,15754,15755],{"class":230,"line":1731},[228,15756,2514],{"emptyLinePlaceholder":157},[228,15758,15759],{"class":230,"line":1737},[228,15760,2514],{"emptyLinePlaceholder":157},[228,15762,15763],{"class":230,"line":1742},[228,15764,15765],{"class":297},"    \u002F\u002F获取年龄 \n",[228,15767,15768,15770,15773],{"class":230,"line":1756},[228,15769,2099],{"class":234},[228,15771,15772],{"class":2077}," getAge",[228,15774,10968],{"class":238},[228,15776,15777,15779],{"class":230,"line":1761},[228,15778,14867],{"class":234},[228,15780,15781],{"class":238}," m_Age;\n",[228,15783,15784],{"class":230,"line":1767},[228,15785,2301],{"class":238},[228,15787,15788],{"class":230,"line":1788},[228,15789,15790],{"class":297},"    \u002F\u002F设置年龄\n",[228,15792,15793,15795,15798,15800,15802,15805],{"class":230,"line":1793},[228,15794,15024],{"class":234},[228,15796,15797],{"class":2077}," setAge",[228,15799,239],{"class":238},[228,15801,242],{"class":234},[228,15803,15804],{"class":5331}," age",[228,15806,12557],{"class":238},[228,15808,15809,15811,15814,15816,15818,15820,15823,15825,15828],{"class":230,"line":1807},[228,15810,2611],{"class":234},[228,15812,15813],{"class":238}," (age ",[228,15815,1148],{"class":234},[228,15817,4207],{"class":287},[228,15819,3369],{"class":234},[228,15821,15822],{"class":238}," age ",[228,15824,1198],{"class":234},[228,15826,15827],{"class":287}," 150",[228,15829,12557],{"class":238},[228,15831,15832,15834,15836,15839,15841],{"class":230,"line":1812},[228,15833,9834],{"class":238},[228,15835,1282],{"class":234},[228,15837,15838],{"class":343}," \"你个老妖精!\"",[228,15840,1558],{"class":234},[228,15842,8955],{"class":238},[228,15844,15845,15848],{"class":230,"line":1841},[228,15846,15847],{"class":234},"            return",[228,15849,1404],{"class":238},[228,15851,15852],{"class":230,"line":1846},[228,15853,2643],{"class":238},[228,15855,15856,15859,15861],{"class":230,"line":1863},[228,15857,15858],{"class":238},"        m_Age ",[228,15860,284],{"class":234},[228,15862,7912],{"class":238},[228,15864,15865],{"class":230,"line":1868},[228,15866,2301],{"class":238},[228,15868,15869],{"class":230,"line":1873},[228,15870,2514],{"emptyLinePlaceholder":157},[228,15872,15873],{"class":230,"line":1878},[228,15874,15875],{"class":297},"    \u002F\u002F情人设置为只写\n",[228,15877,15878,15880,15883,15885,15887,15890],{"class":230,"line":1892},[228,15879,15024],{"class":234},[228,15881,15882],{"class":2077}," setLover",[228,15884,239],{"class":238},[228,15886,15032],{"class":2077},[228,15888,15889],{"class":5331}," lover",[228,15891,12557],{"class":238},[228,15893,15894,15897,15899],{"class":230,"line":1897},[228,15895,15896],{"class":238},"        m_Lover ",[228,15898,284],{"class":234},[228,15900,15901],{"class":238}," lover;\n",[228,15903,15904],{"class":230,"line":2691},[228,15905,2301],{"class":238},[228,15907,15908],{"class":230,"line":2705},[228,15909,2514],{"emptyLinePlaceholder":157},[228,15911,15912],{"class":230,"line":2713},[228,15913,15337],{"class":234},[228,15915,15916,15919],{"class":230,"line":2718},[228,15917,15918],{"class":238},"    string m_Name;",[228,15920,15921],{"class":297}," \u002F\u002F可读可写  姓名\n",[228,15923,15924],{"class":230,"line":2724},[228,15925,13325],{"class":238},[228,15927,15928,15930,15933],{"class":230,"line":2730},[228,15929,2099],{"class":234},[228,15931,15932],{"class":238}," m_Age;",[228,15934,15935],{"class":297}," \u002F\u002F只读  年龄\n",[228,15937,15938],{"class":230,"line":2735},[228,15939,2514],{"emptyLinePlaceholder":157},[228,15941,15942,15945],{"class":230,"line":8063},[228,15943,15944],{"class":238},"    string m_Lover;",[228,15946,15947],{"class":297}," \u002F\u002F只写  情人\n",[228,15949,15950],{"class":230,"line":8087},[228,15951,4109],{"class":238},[228,15953,15954],{"class":230,"line":8092},[228,15955,2514],{"emptyLinePlaceholder":157},[228,15957,15958,15960,15962],{"class":230,"line":8098},[228,15959,242],{"class":234},[228,15961,2087],{"class":2077},[228,15963,10968],{"class":238},[228,15965,15966],{"class":230,"line":8125},[228,15967,2514],{"emptyLinePlaceholder":157},[228,15969,15970],{"class":230,"line":8130},[228,15971,15428],{"class":238},[228,15973,15974],{"class":230,"line":8136},[228,15975,15976],{"class":297},"    \u002F\u002F姓名设置\n",[228,15978,15979,15982,15984,15986,15988],{"class":230,"line":8148},[228,15980,15981],{"class":238},"    p.",[228,15983,15181],{"class":2077},[228,15985,239],{"class":238},[228,15987,8031],{"class":343},[228,15989,2833],{"class":238},[228,15991,15992,15994,15996,15999,16001,16004,16007,16009,16011],{"class":230,"line":8160},[228,15993,6644],{"class":238},[228,15995,1282],{"class":234},[228,15997,15998],{"class":343}," \"姓名： \"",[228,16000,1558],{"class":234},[228,16002,16003],{"class":238}," p.",[228,16005,16006],{"class":2077},"getName",[228,16008,13165],{"class":238},[228,16010,1282],{"class":234},[228,16012,8955],{"class":238},[228,16014,16015],{"class":230,"line":8172},[228,16016,2514],{"emptyLinePlaceholder":157},[228,16018,16019],{"class":230,"line":9831},[228,16020,16021],{"class":297},"    \u002F\u002F年龄设置\n",[228,16023,16024,16026,16029,16031,16033],{"class":230,"line":9856},[228,16025,15981],{"class":238},[228,16027,16028],{"class":2077},"setAge",[228,16030,239],{"class":238},[228,16032,894],{"class":287},[228,16034,2833],{"class":238},[228,16036,16037,16039,16041,16044,16046,16048,16051,16053,16055],{"class":230,"line":9879},[228,16038,6644],{"class":238},[228,16040,1282],{"class":234},[228,16042,16043],{"class":343}," \"年龄： \"",[228,16045,1558],{"class":234},[228,16047,16003],{"class":238},[228,16049,16050],{"class":2077},"getAge",[228,16052,13165],{"class":238},[228,16054,1282],{"class":234},[228,16056,8955],{"class":238},[228,16058,16059],{"class":230,"line":9903},[228,16060,2514],{"emptyLinePlaceholder":157},[228,16062,16063],{"class":230,"line":9908},[228,16064,16065],{"class":297},"    \u002F\u002F情人设置\n",[228,16067,16068,16070,16073,16075,16078],{"class":230,"line":9913},[228,16069,15981],{"class":238},[228,16071,16072],{"class":2077},"setLover",[228,16074,239],{"class":238},[228,16076,16077],{"class":343},"\"苍井\"",[228,16079,2833],{"class":238},[228,16081,16082,16085],{"class":230,"line":9918},[228,16083,16084],{"class":297},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[228,16086,16087],{"class":297},"  \u002F\u002F只写属性，不可以读取\n",[228,16089,16090],{"class":230,"line":9927},[228,16091,2514],{"emptyLinePlaceholder":157},[228,16093,16094,16096,16098,16100],{"class":230,"line":9932},[228,16095,2417],{"class":2077},[228,16097,239],{"class":238},[228,16099,2422],{"class":343},[228,16101,2833],{"class":238},[228,16103,16104],{"class":230,"line":9938},[228,16105,2514],{"emptyLinePlaceholder":157},[228,16107,16108,16110,16112],{"class":230,"line":9959},[228,16109,4204],{"class":234},[228,16111,4207],{"class":287},[228,16113,1404],{"class":238},[228,16115,16116],{"class":230,"line":9965},[228,16117,1679],{"class":238},[200,16119,16121],{"id":16120},"_814封装案例","8.1.4封装案例",[183,16123,16124],{},[186,16125,16126,16129],{},[388,16127,16128],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1245,16131,16132,16135],{},[186,16133,16134],{},"求出立方体的面积和体积",[186,16136,16137],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[220,16139,16141],{"className":222,"code":16140,"language":224,"meta":141,"style":141},"#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",[30,16142,16143,16149,16159,16166,16170,16174,16179,16209,16213,16223,16233,16243,16247,16256,16260,16296,16300,16309,16313,16329,16333,16338,16347,16351,16358,16362,16371,16375,16382,16386,16395,16399,16406,16410,16415,16432,16436,16482,16486,16495,16499,16503,16507,16516,16520,16524,16529,16533,16539,16545,16551,16555,16559,16564,16586,16590,16644,16648,16656,16660,16665,16670,16683,16690,16706,16717,16723,16746,16752,16775,16789,16809,16815,16826,16849,16871,16876,16882,16896,16909,16914,16928,16933,16939,16944,16958,16963,16968,16982,16994,16999,17012,17017,17022,17027,17040,17045],{"__ignoreMap":141},[228,16144,16145,16147],{"class":230,"line":231},[228,16146,2063],{"class":234},[228,16148,2066],{"class":343},[228,16150,16151,16153,16155,16157],{"class":230,"line":142},[228,16152,2071],{"class":234},[228,16154,2074],{"class":234},[228,16156,2078],{"class":2077},[228,16158,1404],{"class":238},[228,16160,16161,16163],{"class":230,"line":1293},[228,16162,14809],{"class":234},[228,16164,16165],{"class":2077}," Cube\n",[228,16167,16168],{"class":230,"line":1308},[228,16169,1660],{"class":238},[228,16171,16172],{"class":230,"line":1314},[228,16173,14831],{"class":234},[228,16175,16176],{"class":230,"line":1328},[228,16177,16178],{"class":297},"    \u002F\u002F输入长宽高\n",[228,16180,16181,16183,16186,16188,16190,16193,16195,16197,16200,16202,16204,16207],{"class":230,"line":1334},[228,16182,15024],{"class":234},[228,16184,16185],{"class":2077}," setLwh",[228,16187,239],{"class":238},[228,16189,242],{"class":234},[228,16191,16192],{"class":5331}," l",[228,16194,616],{"class":238},[228,16196,242],{"class":234},[228,16198,16199],{"class":5331}," w",[228,16201,616],{"class":238},[228,16203,242],{"class":234},[228,16205,16206],{"class":5331}," h",[228,16208,245],{"class":238},[228,16210,16211],{"class":230,"line":1425},[228,16212,2144],{"class":238},[228,16214,16215,16218,16220],{"class":230,"line":1431},[228,16216,16217],{"class":238},"        m_L",[228,16219,284],{"class":234},[228,16221,16222],{"class":238},"l;\n",[228,16224,16225,16228,16230],{"class":230,"line":1443},[228,16226,16227],{"class":238},"        m_W",[228,16229,284],{"class":234},[228,16231,16232],{"class":238},"w;\n",[228,16234,16235,16238,16240],{"class":230,"line":1726},[228,16236,16237],{"class":238},"        m_H",[228,16239,284],{"class":234},[228,16241,16242],{"class":238},"h;\n",[228,16244,16245],{"class":230,"line":1731},[228,16246,2301],{"class":238},[228,16248,16249,16251,16254],{"class":230,"line":1737},[228,16250,2099],{"class":234},[228,16252,16253],{"class":2077}," mianji",[228,16255,2090],{"class":238},[228,16257,16258],{"class":230,"line":1742},[228,16259,2144],{"class":238},[228,16261,16262,16264,16266,16268,16271,16273,16276,16278,16281,16283,16286,16288,16291,16293],{"class":230,"line":1756},[228,16263,14867],{"class":234},[228,16265,14870],{"class":287},[228,16267,693],{"class":234},[228,16269,16270],{"class":238},"(m_L",[228,16272,693],{"class":234},[228,16274,16275],{"class":238},"m_W ",[228,16277,719],{"class":234},[228,16279,16280],{"class":238}," m_L",[228,16282,693],{"class":234},[228,16284,16285],{"class":238},"m_H ",[228,16287,719],{"class":234},[228,16289,16290],{"class":238}," m_W",[228,16292,693],{"class":234},[228,16294,16295],{"class":238},"m_H);\n",[228,16297,16298],{"class":230,"line":1761},[228,16299,2301],{"class":238},[228,16301,16302,16304,16307],{"class":230,"line":1767},[228,16303,2099],{"class":234},[228,16305,16306],{"class":2077}," tiji",[228,16308,2090],{"class":238},[228,16310,16311],{"class":230,"line":1788},[228,16312,2144],{"class":238},[228,16314,16315,16317,16319,16321,16324,16326],{"class":230,"line":1793},[228,16316,14867],{"class":234},[228,16318,16280],{"class":238},[228,16320,693],{"class":234},[228,16322,16323],{"class":238},"m_W",[228,16325,693],{"class":234},[228,16327,16328],{"class":238},"m_H;\n",[228,16330,16331],{"class":230,"line":1807},[228,16332,2301],{"class":238},[228,16334,16335],{"class":230,"line":1812},[228,16336,16337],{"class":297},"    \u002F\u002F获取长宽高\n",[228,16339,16340,16342,16345],{"class":230,"line":1841},[228,16341,2099],{"class":234},[228,16343,16344],{"class":2077}," getLength",[228,16346,2090],{"class":238},[228,16348,16349],{"class":230,"line":1846},[228,16350,2144],{"class":238},[228,16352,16353,16355],{"class":230,"line":1863},[228,16354,14867],{"class":234},[228,16356,16357],{"class":238}," m_L;\n",[228,16359,16360],{"class":230,"line":1868},[228,16361,2301],{"class":238},[228,16363,16364,16366,16369],{"class":230,"line":1873},[228,16365,2099],{"class":234},[228,16367,16368],{"class":2077}," getWidth",[228,16370,2090],{"class":238},[228,16372,16373],{"class":230,"line":1878},[228,16374,2144],{"class":238},[228,16376,16377,16379],{"class":230,"line":1892},[228,16378,14867],{"class":234},[228,16380,16381],{"class":238}," m_W;\n",[228,16383,16384],{"class":230,"line":1897},[228,16385,2301],{"class":238},[228,16387,16388,16390,16393],{"class":230,"line":2691},[228,16389,2099],{"class":234},[228,16391,16392],{"class":2077}," getHeight",[228,16394,2090],{"class":238},[228,16396,16397],{"class":230,"line":2705},[228,16398,2144],{"class":238},[228,16400,16401,16403],{"class":230,"line":2713},[228,16402,14867],{"class":234},[228,16404,16405],{"class":238}," m_H;\n",[228,16407,16408],{"class":230,"line":2718},[228,16409,2301],{"class":238},[228,16411,16412],{"class":230,"line":2724},[228,16413,16414],{"class":297},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[228,16416,16417,16420,16423,16425,16428,16430],{"class":230,"line":2730},[228,16418,16419],{"class":234},"    bool",[228,16421,16422],{"class":2077}," isEqual",[228,16424,239],{"class":238},[228,16426,16427],{"class":2077},"Cube",[228,16429,2963],{"class":5331},[228,16431,245],{"class":238},[228,16433,16434],{"class":230,"line":2735},[228,16435,2144],{"class":238},[228,16437,16438,16440,16443,16446,16448,16450,16453,16455,16458,16461,16463,16465,16468,16470,16472,16475,16477,16479],{"class":230,"line":8063},[228,16439,2611],{"class":234},[228,16441,16442],{"class":238}," (c.",[228,16444,16445],{"class":2077},"getLength",[228,16447,13165],{"class":238},[228,16449,3063],{"class":234},[228,16451,16452],{"class":238}," m_L ",[228,16454,1829],{"class":234},[228,16456,16457],{"class":238}," c.",[228,16459,16460],{"class":2077},"getWidth",[228,16462,13165],{"class":238},[228,16464,3063],{"class":234},[228,16466,16467],{"class":238}," m_W ",[228,16469,1829],{"class":234},[228,16471,16457],{"class":238},[228,16473,16474],{"class":2077},"getHeight",[228,16476,13165],{"class":238},[228,16478,3063],{"class":234},[228,16480,16481],{"class":238}," m_H)\n",[228,16483,16484],{"class":230,"line":8087},[228,16485,2624],{"class":238},[228,16487,16488,16490,16493],{"class":230,"line":8092},[228,16489,15847],{"class":234},[228,16491,16492],{"class":287}," true",[228,16494,1404],{"class":238},[228,16496,16497],{"class":230,"line":8098},[228,16498,2643],{"class":238},[228,16500,16501],{"class":230,"line":8125},[228,16502,2684],{"class":234},[228,16504,16505],{"class":230,"line":8130},[228,16506,2624],{"class":238},[228,16508,16509,16511,16514],{"class":230,"line":8136},[228,16510,15847],{"class":234},[228,16512,16513],{"class":287}," false",[228,16515,1404],{"class":238},[228,16517,16518],{"class":230,"line":8148},[228,16519,2643],{"class":238},[228,16521,16522],{"class":230,"line":8160},[228,16523,2301],{"class":238},[228,16525,16526],{"class":230,"line":8172},[228,16527,16528],{"class":297},"    \u002F\u002F私有属性\n",[228,16530,16531],{"class":230,"line":9831},[228,16532,15337],{"class":234},[228,16534,16535,16537],{"class":230,"line":9856},[228,16536,2099],{"class":234},[228,16538,16357],{"class":238},[228,16540,16541,16543],{"class":230,"line":9879},[228,16542,2099],{"class":234},[228,16544,16381],{"class":238},[228,16546,16547,16549],{"class":230,"line":9903},[228,16548,2099],{"class":234},[228,16550,16405],{"class":238},[228,16552,16553],{"class":230,"line":9908},[228,16554,2514],{"emptyLinePlaceholder":157},[228,16556,16557],{"class":230,"line":9913},[228,16558,4109],{"class":238},[228,16560,16561],{"class":230,"line":9918},[228,16562,16563],{"class":297},"\u002F\u002F全局函数判断两个立方体是否相等\n",[228,16565,16566,16568,16570,16572,16574,16577,16579,16581,16584],{"class":230,"line":9927},[228,16567,1468],{"class":234},[228,16569,16422],{"class":2077},[228,16571,239],{"class":238},[228,16573,16427],{"class":2077},[228,16575,16576],{"class":5331}," c1",[228,16578,616],{"class":238},[228,16580,16427],{"class":2077},[228,16582,16583],{"class":5331}," c2",[228,16585,245],{"class":238},[228,16587,16588],{"class":230,"line":9932},[228,16589,1660],{"class":238},[228,16591,16592,16594,16597,16599,16601,16603,16606,16608,16611,16613,16615,16617,16619,16621,16623,16625,16627,16629,16631,16633,16635,16637,16639,16641],{"class":230,"line":9938},[228,16593,4204],{"class":234},[228,16595,16596],{"class":238}," (c1.",[228,16598,16445],{"class":2077},[228,16600,13165],{"class":238},[228,16602,3063],{"class":234},[228,16604,16605],{"class":238}," c2.",[228,16607,16445],{"class":2077},[228,16609,16610],{"class":238},"()) ",[228,16612,1829],{"class":234},[228,16614,16596],{"class":238},[228,16616,16460],{"class":2077},[228,16618,13165],{"class":238},[228,16620,3063],{"class":234},[228,16622,16605],{"class":238},[228,16624,16460],{"class":2077},[228,16626,16610],{"class":238},[228,16628,1829],{"class":234},[228,16630,16596],{"class":238},[228,16632,16474],{"class":2077},[228,16634,13165],{"class":238},[228,16636,3063],{"class":234},[228,16638,16605],{"class":238},[228,16640,16474],{"class":2077},[228,16642,16643],{"class":238},"());\n",[228,16645,16646],{"class":230,"line":9959},[228,16647,1679],{"class":238},[228,16649,16650,16652,16654],{"class":230,"line":9965},[228,16651,242],{"class":234},[228,16653,2087],{"class":2077},[228,16655,2090],{"class":238},[228,16657,16658],{"class":230,"line":9979},[228,16659,1660],{"class":238},[228,16661,16662],{"class":230,"line":9985},[228,16663,16664],{"class":238},"    Cube c1;\n",[228,16666,16667],{"class":230,"line":10012},[228,16668,16669],{"class":297},"    \u002F\u002F输入立方体的长宽高\n",[228,16671,16672,16674,16676,16679,16681],{"class":230,"line":10021},[228,16673,1665],{"class":238},[228,16675,1282],{"class":234},[228,16677,16678],{"class":343},"\"请输入第一个立方体的长、宽、高：\"",[228,16680,1282],{"class":234},[228,16682,1305],{"class":238},[228,16684,16685,16687],{"class":230,"line":10027},[228,16686,2099],{"class":234},[228,16688,16689],{"class":238}," l,w,h,l1,w1,h1;\n",[228,16691,16692,16694,16696,16698,16700,16702,16704],{"class":230,"line":10035},[228,16693,2126],{"class":238},[228,16695,1543],{"class":234},[228,16697,756],{"class":238},[228,16699,1543],{"class":234},[228,16701,1033],{"class":238},[228,16703,1543],{"class":234},[228,16705,16242],{"class":238},[228,16707,16708,16711,16714],{"class":230,"line":10040},[228,16709,16710],{"class":238},"    c1.",[228,16712,16713],{"class":2077},"setLwh",[228,16715,16716],{"class":238},"(l,w,h);\n",[228,16718,16720],{"class":230,"line":16719},66,[228,16721,16722],{"class":297},"    \u002F\u002F面积\n",[228,16724,16726,16728,16730,16733,16735,16737,16740,16742,16744],{"class":230,"line":16725},67,[228,16727,1665],{"class":238},[228,16729,1282],{"class":234},[228,16731,16732],{"class":343},"\"立方体的表面积为：\"",[228,16734,1282],{"class":234},[228,16736,14945],{"class":238},[228,16738,16739],{"class":2077},"mianji",[228,16741,2541],{"class":238},[228,16743,1282],{"class":234},[228,16745,1305],{"class":238},[228,16747,16749],{"class":230,"line":16748},68,[228,16750,16751],{"class":297},"    \u002F\u002F体积\n",[228,16753,16755,16757,16759,16762,16764,16766,16769,16771,16773],{"class":230,"line":16754},69,[228,16756,1665],{"class":238},[228,16758,1282],{"class":234},[228,16760,16761],{"class":343},"\"立方体的体积为：\"",[228,16763,1282],{"class":234},[228,16765,14945],{"class":238},[228,16767,16768],{"class":2077},"tiji",[228,16770,2541],{"class":238},[228,16772,1282],{"class":234},[228,16774,1305],{"class":238},[228,16776,16778,16780,16782,16785,16787],{"class":230,"line":16777},70,[228,16779,1665],{"class":238},[228,16781,1282],{"class":234},[228,16783,16784],{"class":343},"\"请输入第二个立方体的长、宽、高：\"",[228,16786,1282],{"class":234},[228,16788,1305],{"class":238},[228,16790,16792,16794,16796,16799,16801,16804,16806],{"class":230,"line":16791},71,[228,16793,2126],{"class":238},[228,16795,1543],{"class":234},[228,16797,16798],{"class":238},"l1",[228,16800,1543],{"class":234},[228,16802,16803],{"class":238},"w1",[228,16805,1543],{"class":234},[228,16807,16808],{"class":238},"h1;\n",[228,16810,16812],{"class":230,"line":16811},72,[228,16813,16814],{"class":238},"    Cube c2;\n",[228,16816,16818,16821,16823],{"class":230,"line":16817},73,[228,16819,16820],{"class":238},"    c2.",[228,16822,16713],{"class":2077},[228,16824,16825],{"class":238},"(l1,w1,h1);\n",[228,16827,16829,16831,16833,16836,16838,16841,16843,16845,16847],{"class":230,"line":16828},74,[228,16830,1665],{"class":238},[228,16832,1282],{"class":234},[228,16834,16835],{"class":343},"\"第二个立方体的表面积为：\"",[228,16837,1282],{"class":234},[228,16839,16840],{"class":238},"c2.",[228,16842,16739],{"class":2077},[228,16844,2541],{"class":238},[228,16846,1282],{"class":234},[228,16848,1305],{"class":238},[228,16850,16852,16854,16856,16859,16861,16863,16865,16867,16869],{"class":230,"line":16851},75,[228,16853,1665],{"class":238},[228,16855,1282],{"class":234},[228,16857,16858],{"class":343},"\"第二个立方体的体积为：\"",[228,16860,1282],{"class":234},[228,16862,16840],{"class":238},[228,16864,16768],{"class":2077},[228,16866,2541],{"class":238},[228,16868,1282],{"class":234},[228,16870,1305],{"class":238},[228,16872,16874],{"class":230,"line":16873},76,[228,16875,2514],{"emptyLinePlaceholder":157},[228,16877,16879],{"class":230,"line":16878},77,[228,16880,16881],{"class":297},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[228,16883,16885,16887,16889,16892,16894],{"class":230,"line":16884},78,[228,16886,1665],{"class":238},[228,16888,1282],{"class":234},[228,16890,16891],{"class":343},"\"内部函数判断结果：\"",[228,16893,1282],{"class":234},[228,16895,1305],{"class":238},[228,16897,16899,16901,16903,16906],{"class":230,"line":16898},79,[228,16900,3215],{"class":234},[228,16902,16596],{"class":238},[228,16904,16905],{"class":2077},"isEqual",[228,16907,16908],{"class":238},"(c2))\n",[228,16910,16912],{"class":230,"line":16911},80,[228,16913,2144],{"class":238},[228,16915,16917,16919,16921,16924,16926],{"class":230,"line":16916},81,[228,16918,3565],{"class":238},[228,16920,1282],{"class":234},[228,16922,16923],{"class":343},"\"两个立方体相等\"",[228,16925,1282],{"class":234},[228,16927,1305],{"class":238},[228,16929,16931],{"class":230,"line":16930},82,[228,16932,2301],{"class":238},[228,16934,16936],{"class":230,"line":16935},83,[228,16937,16938],{"class":234},"    else\n",[228,16940,16942],{"class":230,"line":16941},84,[228,16943,2144],{"class":238},[228,16945,16947,16949,16951,16954,16956],{"class":230,"line":16946},85,[228,16948,3565],{"class":238},[228,16950,1282],{"class":234},[228,16952,16953],{"class":343},"\"两个立方体不相等\"",[228,16955,1282],{"class":234},[228,16957,1305],{"class":238},[228,16959,16961],{"class":230,"line":16960},86,[228,16962,2301],{"class":238},[228,16964,16966],{"class":230,"line":16965},87,[228,16967,2514],{"emptyLinePlaceholder":157},[228,16969,16971,16973,16975,16978,16980],{"class":230,"line":16970},88,[228,16972,1665],{"class":238},[228,16974,1282],{"class":234},[228,16976,16977],{"class":343},"\"全局函数判断结果：\"",[228,16979,1282],{"class":234},[228,16981,1305],{"class":238},[228,16983,16985,16987,16989,16991],{"class":230,"line":16984},89,[228,16986,3215],{"class":234},[228,16988,1772],{"class":238},[228,16990,16905],{"class":2077},[228,16992,16993],{"class":238},"(c1, c2))\n",[228,16995,16997],{"class":230,"line":16996},90,[228,16998,2144],{"class":238},[228,17000,17002,17004,17006,17008,17010],{"class":230,"line":17001},91,[228,17003,3565],{"class":238},[228,17005,1282],{"class":234},[228,17007,16923],{"class":343},[228,17009,1282],{"class":234},[228,17011,1305],{"class":238},[228,17013,17015],{"class":230,"line":17014},92,[228,17016,2301],{"class":238},[228,17018,17020],{"class":230,"line":17019},93,[228,17021,16938],{"class":234},[228,17023,17025],{"class":230,"line":17024},94,[228,17026,2144],{"class":238},[228,17028,17030,17032,17034,17036,17038],{"class":230,"line":17029},95,[228,17031,3565],{"class":238},[228,17033,1282],{"class":234},[228,17035,16953],{"class":343},[228,17037,1282],{"class":234},[228,17039,1305],{"class":238},[228,17041,17043],{"class":230,"line":17042},96,[228,17044,2301],{"class":238},[228,17046,17048],{"class":230,"line":17047},97,[228,17049,1679],{"class":238},[183,17051,17052],{"start":142},[186,17053,17054],{},[388,17055,17056],{},"练习案例2：点和圆的关系",[1245,17058,17059],{},[186,17060,17061],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[220,17063,17065],{"className":222,"code":17064,"language":224,"meta":141,"style":141},"#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",[30,17066,17067,17073,17083,17090,17097,17101,17105,17110,17144,17149,17165,17179,17183,17187,17194,17201,17205,17211,17215,17219,17223,17245,17268,17273,17287,17302,17306,17310,17316,17321,17326,17330,17356,17360,17390,17418,17446,17463,17467,17480,17484,17488,17492,17505,17509,17513,17521,17525,17529,17533,17538,17542,17553,17560,17569,17579,17590,17597,17610,17621,17631,17642,17649,17663,17668,17678,17686],{"__ignoreMap":141},[228,17068,17069,17071],{"class":230,"line":231},[228,17070,2063],{"class":234},[228,17072,2066],{"class":343},[228,17074,17075,17077,17079,17081],{"class":230,"line":142},[228,17076,2071],{"class":234},[228,17078,2074],{"class":234},[228,17080,2078],{"class":2077},[228,17082,1404],{"class":238},[228,17084,17085,17087],{"class":230,"line":1293},[228,17086,2063],{"class":234},[228,17088,17089],{"class":343},"\u003Ccmath>\n",[228,17091,17092,17094],{"class":230,"line":1308},[228,17093,14809],{"class":234},[228,17095,17096],{"class":2077}," Point\n",[228,17098,17099],{"class":230,"line":1314},[228,17100,1660],{"class":238},[228,17102,17103],{"class":230,"line":1328},[228,17104,14831],{"class":234},[228,17106,17107],{"class":230,"line":1334},[228,17108,17109],{"class":297},"    \u002F\u002F赋值\n",[228,17111,17112,17114,17117,17119,17121,17124,17126,17128,17131,17134,17136,17139,17141],{"class":230,"line":1425},[228,17113,15024],{"class":234},[228,17115,17116],{"class":2077}," setPoint",[228,17118,239],{"class":238},[228,17120,14152],{"class":234},[228,17122,17123],{"class":5331}," x",[228,17125,12550],{"class":238},[228,17127,14152],{"class":234},[228,17129,17130],{"class":5331}," y",[228,17132,17133],{"class":238},") { m_x ",[228,17135,284],{"class":234},[228,17137,17138],{"class":238}," x; m_y ",[228,17140,284],{"class":234},[228,17142,17143],{"class":238}," y; }\n",[228,17145,17146],{"class":230,"line":1431},[228,17147,17148],{"class":297},"    \u002F\u002F获取坐标\n",[228,17150,17151,17153,17156,17159,17162],{"class":230,"line":1443},[228,17152,14853],{"class":234},[228,17154,17155],{"class":2077}," getX",[228,17157,17158],{"class":238},"() { ",[228,17160,17161],{"class":234},"return",[228,17163,17164],{"class":238}," m_x; }\n",[228,17166,17167,17169,17172,17174,17176],{"class":230,"line":1726},[228,17168,14853],{"class":234},[228,17170,17171],{"class":2077}," getY",[228,17173,17158],{"class":238},[228,17175,17161],{"class":234},[228,17177,17178],{"class":238}," m_y; }\n",[228,17180,17181],{"class":230,"line":1731},[228,17182,2514],{"emptyLinePlaceholder":157},[228,17184,17185],{"class":230,"line":1737},[228,17186,15337],{"class":234},[228,17188,17189,17191],{"class":230,"line":1742},[228,17190,14853],{"class":234},[228,17192,17193],{"class":238}," m_x;\n",[228,17195,17196,17198],{"class":230,"line":1756},[228,17197,14853],{"class":234},[228,17199,17200],{"class":238}," m_y;\n",[228,17202,17203],{"class":230,"line":1761},[228,17204,4109],{"class":238},[228,17206,17207,17209],{"class":230,"line":1767},[228,17208,14809],{"class":234},[228,17210,14812],{"class":2077},[228,17212,17213],{"class":230,"line":1788},[228,17214,1660],{"class":238},[228,17216,17217],{"class":230,"line":1793},[228,17218,14831],{"class":234},[228,17220,17221],{"class":230,"line":1807},[228,17222,17109],{"class":297},[228,17224,17225,17227,17230,17232,17234,17237,17240,17242],{"class":230,"line":1812},[228,17226,15024],{"class":234},[228,17228,17229],{"class":2077}," setRadius",[228,17231,239],{"class":238},[228,17233,14152],{"class":234},[228,17235,17236],{"class":5331}," r",[228,17238,17239],{"class":238},") { m_r ",[228,17241,284],{"class":234},[228,17243,17244],{"class":238}," r; }\n",[228,17246,17247,17249,17252,17254,17257,17260,17263,17265],{"class":230,"line":1841},[228,17248,15024],{"class":234},[228,17250,17251],{"class":2077}," setCenter",[228,17253,239],{"class":238},[228,17255,17256],{"class":2077},"Point",[228,17258,17259],{"class":5331}," center",[228,17261,17262],{"class":238},") { m_center ",[228,17264,284],{"class":234},[228,17266,17267],{"class":238}," center; }\n",[228,17269,17270],{"class":230,"line":1846},[228,17271,17272],{"class":297},"    \u002F\u002F获取属性\n",[228,17274,17275,17277,17280,17282,17284],{"class":230,"line":1863},[228,17276,14853],{"class":234},[228,17278,17279],{"class":2077}," getRadius",[228,17281,17158],{"class":238},[228,17283,17161],{"class":234},[228,17285,17286],{"class":238}," m_r; }\n",[228,17288,17289,17292,17295,17297,17299],{"class":230,"line":1868},[228,17290,17291],{"class":2077},"    Point",[228,17293,17294],{"class":2077}," getCenter",[228,17296,17158],{"class":238},[228,17298,17161],{"class":234},[228,17300,17301],{"class":238}," m_center; }\n",[228,17303,17304],{"class":230,"line":1873},[228,17305,2514],{"emptyLinePlaceholder":157},[228,17307,17308],{"class":230,"line":1878},[228,17309,15337],{"class":234},[228,17311,17312,17314],{"class":230,"line":1892},[228,17313,14853],{"class":234},[228,17315,14843],{"class":238},[228,17317,17318],{"class":230,"line":1897},[228,17319,17320],{"class":297},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[228,17322,17323],{"class":230,"line":2691},[228,17324,17325],{"class":238},"    Point m_center;\n",[228,17327,17328],{"class":230,"line":2705},[228,17329,4109],{"class":238},[228,17331,17332,17334,17337,17339,17342,17344,17346,17348,17350,17352,17354],{"class":230,"line":2713},[228,17333,5479],{"class":234},[228,17335,17336],{"class":2077}," isInCircle",[228,17338,239],{"class":238},[228,17340,17341],{"class":2077},"Circle",[228,17343,10699],{"class":234},[228,17345,526],{"class":5331},[228,17347,616],{"class":238},[228,17349,17256],{"class":2077},[228,17351,10699],{"class":234},[228,17353,19],{"class":5331},[228,17355,245],{"class":238},[228,17357,17358],{"class":230,"line":2718},[228,17359,1660],{"class":238},[228,17361,17362,17364,17367,17369,17371,17374,17377,17380,17382,17384,17386,17388],{"class":230,"line":2724},[228,17363,14853],{"class":234},[228,17365,17366],{"class":238}," dx ",[228,17368,284],{"class":234},[228,17370,16457],{"class":238},[228,17372,17373],{"class":2077},"getCenter",[228,17375,17376],{"class":238},"().",[228,17378,17379],{"class":2077},"getX",[228,17381,13165],{"class":238},[228,17383,770],{"class":234},[228,17385,16003],{"class":238},[228,17387,17379],{"class":2077},[228,17389,5751],{"class":238},[228,17391,17392,17394,17397,17399,17401,17403,17405,17408,17410,17412,17414,17416],{"class":230,"line":2730},[228,17393,14853],{"class":234},[228,17395,17396],{"class":238}," dy ",[228,17398,284],{"class":234},[228,17400,16457],{"class":238},[228,17402,17373],{"class":2077},[228,17404,17376],{"class":238},[228,17406,17407],{"class":2077},"getY",[228,17409,13165],{"class":238},[228,17411,770],{"class":234},[228,17413,16003],{"class":238},[228,17415,17407],{"class":2077},[228,17417,5751],{"class":238},[228,17419,17420,17422,17425,17427,17430,17433,17435,17437,17439,17441,17443],{"class":230,"line":2735},[228,17421,14853],{"class":234},[228,17423,17424],{"class":238}," distance ",[228,17426,284],{"class":234},[228,17428,17429],{"class":2077}," sqrt",[228,17431,17432],{"class":238},"(dx ",[228,17434,693],{"class":234},[228,17436,17366],{"class":238},[228,17438,719],{"class":234},[228,17440,17396],{"class":238},[228,17442,693],{"class":234},[228,17444,17445],{"class":238}," dy);\n",[228,17447,17448,17450,17453,17455,17457,17460],{"class":230,"line":8063},[228,17449,3215],{"class":234},[228,17451,17452],{"class":238}," (distance ",[228,17454,1148],{"class":234},[228,17456,16457],{"class":238},[228,17458,17459],{"class":2077},"getRadius",[228,17461,17462],{"class":238},"())\n",[228,17464,17465],{"class":230,"line":8087},[228,17466,2144],{"class":238},[228,17468,17469,17471,17473,17476,17478],{"class":230,"line":8092},[228,17470,9784],{"class":238},[228,17472,1282],{"class":234},[228,17474,17475],{"class":343}," \"点在圆内\"",[228,17477,1558],{"class":234},[228,17479,8955],{"class":238},[228,17481,17482],{"class":230,"line":8098},[228,17483,2301],{"class":238},[228,17485,17486],{"class":230,"line":8125},[228,17487,16938],{"class":234},[228,17489,17490],{"class":230,"line":8130},[228,17491,2144],{"class":238},[228,17493,17494,17496,17498,17501,17503],{"class":230,"line":8136},[228,17495,9784],{"class":238},[228,17497,1282],{"class":234},[228,17499,17500],{"class":343}," \"点在圆外\"",[228,17502,1558],{"class":234},[228,17504,8955],{"class":238},[228,17506,17507],{"class":230,"line":8148},[228,17508,2301],{"class":238},[228,17510,17511],{"class":230,"line":8160},[228,17512,1679],{"class":238},[228,17514,17515,17517,17519],{"class":230,"line":8172},[228,17516,242],{"class":234},[228,17518,2087],{"class":2077},[228,17520,2090],{"class":238},[228,17522,17523],{"class":230,"line":9831},[228,17524,1660],{"class":238},[228,17526,17527],{"class":230,"line":9856},[228,17528,15168],{"class":297},[228,17530,17531],{"class":230,"line":9879},[228,17532,14915],{"class":238},[228,17534,17535],{"class":230,"line":9903},[228,17536,17537],{"class":238},"    Point p1;\n",[228,17539,17540],{"class":230,"line":9908},[228,17541,17109],{"class":297},[228,17543,17544,17546,17548,17551],{"class":230,"line":9913},[228,17545,1665],{"class":238},[228,17547,1282],{"class":234},[228,17549,17550],{"class":343},"\"请输入圆的半径：\"",[228,17552,1404],{"class":238},[228,17554,17555,17557],{"class":230,"line":9918},[228,17556,14853],{"class":234},[228,17558,17559],{"class":238}," r;\n",[228,17561,17562,17564,17566],{"class":230,"line":9927},[228,17563,2126],{"class":238},[228,17565,1543],{"class":234},[228,17567,17568],{"class":238},"r;\n",[228,17570,17571,17573,17576],{"class":230,"line":9932},[228,17572,16710],{"class":238},[228,17574,17575],{"class":2077},"setRadius",[228,17577,17578],{"class":238},"(r);\n",[228,17580,17581,17583,17585,17588],{"class":230,"line":9938},[228,17582,1665],{"class":238},[228,17584,1282],{"class":234},[228,17586,17587],{"class":343},"\"请输入圆心坐标：\"",[228,17589,1404],{"class":238},[228,17591,17592,17594],{"class":230,"line":9959},[228,17593,14853],{"class":234},[228,17595,17596],{"class":238}," x, y;\n",[228,17598,17599,17601,17603,17605,17607],{"class":230,"line":9965},[228,17600,2126],{"class":238},[228,17602,1543],{"class":234},[228,17604,1058],{"class":238},[228,17606,1543],{"class":234},[228,17608,17609],{"class":238},"y;\n",[228,17611,17612,17615,17618],{"class":230,"line":9979},[228,17613,17614],{"class":238},"    p1.",[228,17616,17617],{"class":2077},"setPoint",[228,17619,17620],{"class":238},"(x, y);\n",[228,17622,17623,17625,17628],{"class":230,"line":9985},[228,17624,16710],{"class":238},[228,17626,17627],{"class":2077},"setCenter",[228,17629,17630],{"class":238},"(p1);\n",[228,17632,17633,17635,17637,17640],{"class":230,"line":10012},[228,17634,1665],{"class":238},[228,17636,1282],{"class":234},[228,17638,17639],{"class":343},"\"请输入测试点坐标：\"",[228,17641,1404],{"class":238},[228,17643,17644,17646],{"class":230,"line":10021},[228,17645,14853],{"class":234},[228,17647,17648],{"class":238}," x1, y1;\n",[228,17650,17651,17653,17655,17658,17660],{"class":230,"line":10027},[228,17652,2126],{"class":238},[228,17654,1543],{"class":234},[228,17656,17657],{"class":238},"x1",[228,17659,1543],{"class":234},[228,17661,17662],{"class":238},"y1;\n",[228,17664,17665],{"class":230,"line":10035},[228,17666,17667],{"class":238},"    Point p2;\n",[228,17669,17670,17673,17675],{"class":230,"line":10040},[228,17671,17672],{"class":238},"    p2.",[228,17674,17617],{"class":2077},[228,17676,17677],{"class":238},"(x1, y1);\n",[228,17679,17680,17683],{"class":230,"line":16719},[228,17681,17682],{"class":2077},"    isInCircle",[228,17684,17685],{"class":238},"(c1, p2);\n",[228,17687,17688],{"class":230,"line":16725},[228,17689,1679],{"class":238},[19,17691,17692],{},"在类中可以让另一个类作为本来的成员",[19,17694,17695],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,17697,17698],{},"创建point.h",[220,17700,17702],{"className":222,"code":17701,"language":224,"meta":141,"style":141},"#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",[30,17703,17704,17715,17721,17731,17737,17741,17746,17750,17754,17774,17778,17786,17794,17798,17802,17808,17814],{"__ignoreMap":141},[228,17705,17706,17709,17712],{"class":230,"line":231},[228,17707,17708],{"class":234},"#pragma",[228,17710,17711],{"class":2077}," once",[228,17713,17714],{"class":297}," \u002F\u002F防止头文件重复包含\n",[228,17716,17717,17719],{"class":230,"line":142},[228,17718,2063],{"class":234},[228,17720,2066],{"class":343},[228,17722,17723,17725,17727,17729],{"class":230,"line":1293},[228,17724,2071],{"class":234},[228,17726,2074],{"class":234},[228,17728,2078],{"class":2077},[228,17730,1404],{"class":238},[228,17732,17733,17735],{"class":230,"line":1308},[228,17734,14809],{"class":234},[228,17736,17096],{"class":2077},[228,17738,17739],{"class":230,"line":1314},[228,17740,1660],{"class":238},[228,17742,17743],{"class":230,"line":1328},[228,17744,17745],{"class":297},"\u002F\u002F做好声明与变量定义就可以\n",[228,17747,17748],{"class":230,"line":1334},[228,17749,14831],{"class":234},[228,17751,17752],{"class":230,"line":1425},[228,17753,17109],{"class":297},[228,17755,17756,17758,17760,17762,17764,17766,17768,17770,17772],{"class":230,"line":1431},[228,17757,15024],{"class":234},[228,17759,17116],{"class":2077},[228,17761,239],{"class":238},[228,17763,14152],{"class":234},[228,17765,17123],{"class":5331},[228,17767,12550],{"class":238},[228,17769,14152],{"class":234},[228,17771,17130],{"class":5331},[228,17773,2833],{"class":238},[228,17775,17776],{"class":230,"line":1443},[228,17777,17148],{"class":297},[228,17779,17780,17782,17784],{"class":230,"line":1726},[228,17781,14853],{"class":234},[228,17783,17155],{"class":2077},[228,17785,5751],{"class":238},[228,17787,17788,17790,17792],{"class":230,"line":1731},[228,17789,14853],{"class":234},[228,17791,17171],{"class":2077},[228,17793,5751],{"class":238},[228,17795,17796],{"class":230,"line":1737},[228,17797,2514],{"emptyLinePlaceholder":157},[228,17799,17800],{"class":230,"line":1742},[228,17801,15337],{"class":234},[228,17803,17804,17806],{"class":230,"line":1756},[228,17805,14853],{"class":234},[228,17807,17193],{"class":238},[228,17809,17810,17812],{"class":230,"line":1761},[228,17811,14853],{"class":234},[228,17813,17200],{"class":238},[228,17815,17816],{"class":230,"line":1767},[228,17817,4109],{"class":238},[19,17819,17820],{},"创建point.cpp",[220,17822,17824],{"className":222,"code":17823,"language":224,"meta":141,"style":141},"#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",[30,17825,17826,17833,17838,17872,17876,17892],{"__ignoreMap":141},[228,17827,17828,17830],{"class":230,"line":231},[228,17829,2063],{"class":234},[228,17831,17832],{"class":343},"\u003Cpoint.h>\n",[228,17834,17835],{"class":230,"line":142},[228,17836,17837],{"class":297},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[228,17839,17840,17842,17845,17848,17850,17852,17854,17856,17858,17860,17862,17864,17866,17868,17870],{"class":230,"line":1293},[228,17841,15024],{"class":234},[228,17843,17844],{"class":2077}," Point",[228,17846,17847],{"class":238},"::",[228,17849,17617],{"class":2077},[228,17851,239],{"class":238},[228,17853,14152],{"class":234},[228,17855,17123],{"class":5331},[228,17857,12550],{"class":238},[228,17859,14152],{"class":234},[228,17861,17130],{"class":5331},[228,17863,17133],{"class":238},[228,17865,284],{"class":234},[228,17867,17138],{"class":238},[228,17869,284],{"class":234},[228,17871,17143],{"class":238},[228,17873,17874],{"class":230,"line":1308},[228,17875,17148],{"class":297},[228,17877,17878,17880,17882,17884,17886,17888,17890],{"class":230,"line":1314},[228,17879,14853],{"class":234},[228,17881,17844],{"class":2077},[228,17883,17847],{"class":238},[228,17885,17379],{"class":2077},[228,17887,17158],{"class":238},[228,17889,17161],{"class":234},[228,17891,17164],{"class":238},[228,17893,17894,17896,17898,17900,17902,17904,17906],{"class":230,"line":1328},[228,17895,14853],{"class":234},[228,17897,17844],{"class":2077},[228,17899,17847],{"class":238},[228,17901,17407],{"class":2077},[228,17903,17158],{"class":238},[228,17905,17161],{"class":234},[228,17907,17178],{"class":238},[19,17909,17910],{},"创建circle.h",[220,17912,17914],{"className":222,"code":17913,"language":224,"meta":141,"style":141},"#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",[30,17915,17916,17923,17929,17939,17945,17951,17955,17959,17963,17977,17991,17995,18003,18011,18015,18019,18025,18029,18033],{"__ignoreMap":141},[228,17917,17918,17920],{"class":230,"line":231},[228,17919,17708],{"class":234},[228,17921,17922],{"class":2077}," once\n",[228,17924,17925,17927],{"class":230,"line":142},[228,17926,2063],{"class":234},[228,17928,2066],{"class":343},[228,17930,17931,17933,17935,17937],{"class":230,"line":1293},[228,17932,2071],{"class":234},[228,17934,2074],{"class":234},[228,17936,2078],{"class":2077},[228,17938,1404],{"class":238},[228,17940,17941,17943],{"class":230,"line":1308},[228,17942,2063],{"class":234},[228,17944,17832],{"class":343},[228,17946,17947,17949],{"class":230,"line":1314},[228,17948,14809],{"class":234},[228,17950,14812],{"class":2077},[228,17952,17953],{"class":230,"line":1328},[228,17954,1660],{"class":238},[228,17956,17957],{"class":230,"line":1334},[228,17958,14831],{"class":234},[228,17960,17961],{"class":230,"line":1425},[228,17962,17109],{"class":297},[228,17964,17965,17967,17969,17971,17973,17975],{"class":230,"line":1431},[228,17966,15024],{"class":234},[228,17968,17229],{"class":2077},[228,17970,239],{"class":238},[228,17972,14152],{"class":234},[228,17974,17236],{"class":5331},[228,17976,2833],{"class":238},[228,17978,17979,17981,17983,17985,17987,17989],{"class":230,"line":1443},[228,17980,15024],{"class":234},[228,17982,17251],{"class":2077},[228,17984,239],{"class":238},[228,17986,17256],{"class":2077},[228,17988,17259],{"class":5331},[228,17990,2833],{"class":238},[228,17992,17993],{"class":230,"line":1726},[228,17994,17272],{"class":297},[228,17996,17997,17999,18001],{"class":230,"line":1731},[228,17998,14853],{"class":234},[228,18000,17279],{"class":2077},[228,18002,5751],{"class":238},[228,18004,18005,18007,18009],{"class":230,"line":1737},[228,18006,17291],{"class":2077},[228,18008,17294],{"class":2077},[228,18010,5751],{"class":238},[228,18012,18013],{"class":230,"line":1742},[228,18014,2514],{"emptyLinePlaceholder":157},[228,18016,18017],{"class":230,"line":1756},[228,18018,15337],{"class":234},[228,18020,18021,18023],{"class":230,"line":1761},[228,18022,14853],{"class":234},[228,18024,14843],{"class":238},[228,18026,18027],{"class":230,"line":1767},[228,18028,17320],{"class":297},[228,18030,18031],{"class":230,"line":1788},[228,18032,17325],{"class":238},[228,18034,18035],{"class":230,"line":1793},[228,18036,4109],{"class":238},[19,18038,18039],{},"创建circle.cpp",[220,18041,18043],{"className":222,"code":18042,"language":224,"meta":141,"style":141},"#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",[30,18044,18045,18052,18075,18097,18102,18118],{"__ignoreMap":141},[228,18046,18047,18049],{"class":230,"line":231},[228,18048,2063],{"class":234},[228,18050,18051],{"class":343},"\u003Ccircle.h>\n",[228,18053,18054,18056,18059,18061,18063,18065,18067,18069,18071,18073],{"class":230,"line":142},[228,18055,5479],{"class":234},[228,18057,18058],{"class":2077}," Circle",[228,18060,17847],{"class":238},[228,18062,17575],{"class":2077},[228,18064,239],{"class":238},[228,18066,14152],{"class":234},[228,18068,17236],{"class":5331},[228,18070,17239],{"class":238},[228,18072,284],{"class":234},[228,18074,17244],{"class":238},[228,18076,18077,18079,18081,18083,18085,18087,18089,18091,18093,18095],{"class":230,"line":1293},[228,18078,5479],{"class":234},[228,18080,18058],{"class":2077},[228,18082,17847],{"class":238},[228,18084,17627],{"class":2077},[228,18086,239],{"class":238},[228,18088,17256],{"class":2077},[228,18090,17259],{"class":5331},[228,18092,17262],{"class":238},[228,18094,284],{"class":234},[228,18096,17267],{"class":238},[228,18098,18099],{"class":230,"line":1308},[228,18100,18101],{"class":297},"\u002F\u002F获取属性\n",[228,18103,18104,18106,18108,18110,18112,18114,18116],{"class":230,"line":1314},[228,18105,14152],{"class":234},[228,18107,18058],{"class":2077},[228,18109,17847],{"class":238},[228,18111,17459],{"class":2077},[228,18113,17158],{"class":238},[228,18115,17161],{"class":234},[228,18117,17286],{"class":238},[228,18119,18120,18122,18124,18126,18128,18130,18132],{"class":230,"line":1328},[228,18121,17256],{"class":2077},[228,18123,18058],{"class":2077},[228,18125,17847],{"class":238},[228,18127,17373],{"class":2077},[228,18129,17158],{"class":238},[228,18131,17161],{"class":234},[228,18133,17301],{"class":238},[19,18135,18136],{},"使用封装的类",[220,18138,18140],{"className":222,"code":18139,"language":224,"meta":141,"style":141},"#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",[30,18141,18142,18148,18158,18164,18170,18194,18198,18224,18250,18274,18288,18292,18304,18308,18312,18316,18328,18332,18336,18344,18348,18352,18356,18360,18364,18374,18380,18388,18396,18406,18412,18424,18432,18440,18450,18456,18468,18472,18480,18486],{"__ignoreMap":141},[228,18143,18144,18146],{"class":230,"line":231},[228,18145,2063],{"class":234},[228,18147,2066],{"class":343},[228,18149,18150,18152,18154,18156],{"class":230,"line":142},[228,18151,2071],{"class":234},[228,18153,2074],{"class":234},[228,18155,2078],{"class":2077},[228,18157,1404],{"class":238},[228,18159,18160,18162],{"class":230,"line":1293},[228,18161,2063],{"class":234},[228,18163,18051],{"class":343},[228,18165,18166,18168],{"class":230,"line":1308},[228,18167,2063],{"class":234},[228,18169,17832],{"class":343},[228,18171,18172,18174,18176,18178,18180,18182,18184,18186,18188,18190,18192],{"class":230,"line":1314},[228,18173,5479],{"class":234},[228,18175,17336],{"class":2077},[228,18177,239],{"class":238},[228,18179,17341],{"class":2077},[228,18181,10699],{"class":234},[228,18183,526],{"class":5331},[228,18185,616],{"class":238},[228,18187,17256],{"class":2077},[228,18189,10699],{"class":234},[228,18191,19],{"class":5331},[228,18193,245],{"class":238},[228,18195,18196],{"class":230,"line":1328},[228,18197,1660],{"class":238},[228,18199,18200,18202,18204,18206,18208,18210,18212,18214,18216,18218,18220,18222],{"class":230,"line":1334},[228,18201,14853],{"class":234},[228,18203,17366],{"class":238},[228,18205,284],{"class":234},[228,18207,16457],{"class":238},[228,18209,17373],{"class":2077},[228,18211,17376],{"class":238},[228,18213,17379],{"class":2077},[228,18215,13165],{"class":238},[228,18217,770],{"class":234},[228,18219,16003],{"class":238},[228,18221,17379],{"class":2077},[228,18223,5751],{"class":238},[228,18225,18226,18228,18230,18232,18234,18236,18238,18240,18242,18244,18246,18248],{"class":230,"line":1425},[228,18227,14853],{"class":234},[228,18229,17396],{"class":238},[228,18231,284],{"class":234},[228,18233,16457],{"class":238},[228,18235,17373],{"class":2077},[228,18237,17376],{"class":238},[228,18239,17407],{"class":2077},[228,18241,13165],{"class":238},[228,18243,770],{"class":234},[228,18245,16003],{"class":238},[228,18247,17407],{"class":2077},[228,18249,5751],{"class":238},[228,18251,18252,18254,18256,18258,18260,18262,18264,18266,18268,18270,18272],{"class":230,"line":1431},[228,18253,14853],{"class":234},[228,18255,17424],{"class":238},[228,18257,284],{"class":234},[228,18259,17429],{"class":2077},[228,18261,17432],{"class":238},[228,18263,693],{"class":234},[228,18265,17366],{"class":238},[228,18267,719],{"class":234},[228,18269,17396],{"class":238},[228,18271,693],{"class":234},[228,18273,17445],{"class":238},[228,18275,18276,18278,18280,18282,18284,18286],{"class":230,"line":1443},[228,18277,3215],{"class":234},[228,18279,17452],{"class":238},[228,18281,1148],{"class":234},[228,18283,16457],{"class":238},[228,18285,17459],{"class":2077},[228,18287,17462],{"class":238},[228,18289,18290],{"class":230,"line":1726},[228,18291,2144],{"class":238},[228,18293,18294,18296,18298,18300,18302],{"class":230,"line":1731},[228,18295,9784],{"class":238},[228,18297,1282],{"class":234},[228,18299,17475],{"class":343},[228,18301,1558],{"class":234},[228,18303,8955],{"class":238},[228,18305,18306],{"class":230,"line":1737},[228,18307,2301],{"class":238},[228,18309,18310],{"class":230,"line":1742},[228,18311,16938],{"class":234},[228,18313,18314],{"class":230,"line":1756},[228,18315,2144],{"class":238},[228,18317,18318,18320,18322,18324,18326],{"class":230,"line":1761},[228,18319,9784],{"class":238},[228,18321,1282],{"class":234},[228,18323,17500],{"class":343},[228,18325,1558],{"class":234},[228,18327,8955],{"class":238},[228,18329,18330],{"class":230,"line":1767},[228,18331,2301],{"class":238},[228,18333,18334],{"class":230,"line":1788},[228,18335,1679],{"class":238},[228,18337,18338,18340,18342],{"class":230,"line":1793},[228,18339,242],{"class":234},[228,18341,2087],{"class":2077},[228,18343,2090],{"class":238},[228,18345,18346],{"class":230,"line":1807},[228,18347,1660],{"class":238},[228,18349,18350],{"class":230,"line":1812},[228,18351,15168],{"class":297},[228,18353,18354],{"class":230,"line":1841},[228,18355,14915],{"class":238},[228,18357,18358],{"class":230,"line":1846},[228,18359,17537],{"class":238},[228,18361,18362],{"class":230,"line":1863},[228,18363,17109],{"class":297},[228,18365,18366,18368,18370,18372],{"class":230,"line":1868},[228,18367,1665],{"class":238},[228,18369,1282],{"class":234},[228,18371,17550],{"class":343},[228,18373,1404],{"class":238},[228,18375,18376,18378],{"class":230,"line":1873},[228,18377,14853],{"class":234},[228,18379,17559],{"class":238},[228,18381,18382,18384,18386],{"class":230,"line":1878},[228,18383,2126],{"class":238},[228,18385,1543],{"class":234},[228,18387,17568],{"class":238},[228,18389,18390,18392,18394],{"class":230,"line":1892},[228,18391,16710],{"class":238},[228,18393,17575],{"class":2077},[228,18395,17578],{"class":238},[228,18397,18398,18400,18402,18404],{"class":230,"line":1897},[228,18399,1665],{"class":238},[228,18401,1282],{"class":234},[228,18403,17587],{"class":343},[228,18405,1404],{"class":238},[228,18407,18408,18410],{"class":230,"line":2691},[228,18409,14853],{"class":234},[228,18411,17596],{"class":238},[228,18413,18414,18416,18418,18420,18422],{"class":230,"line":2705},[228,18415,2126],{"class":238},[228,18417,1543],{"class":234},[228,18419,1058],{"class":238},[228,18421,1543],{"class":234},[228,18423,17609],{"class":238},[228,18425,18426,18428,18430],{"class":230,"line":2713},[228,18427,17614],{"class":238},[228,18429,17617],{"class":2077},[228,18431,17620],{"class":238},[228,18433,18434,18436,18438],{"class":230,"line":2718},[228,18435,16710],{"class":238},[228,18437,17627],{"class":2077},[228,18439,17630],{"class":238},[228,18441,18442,18444,18446,18448],{"class":230,"line":2724},[228,18443,1665],{"class":238},[228,18445,1282],{"class":234},[228,18447,17639],{"class":343},[228,18449,1404],{"class":238},[228,18451,18452,18454],{"class":230,"line":2730},[228,18453,14853],{"class":234},[228,18455,17648],{"class":238},[228,18457,18458,18460,18462,18464,18466],{"class":230,"line":2735},[228,18459,2126],{"class":238},[228,18461,1543],{"class":234},[228,18463,17657],{"class":238},[228,18465,1543],{"class":234},[228,18467,17662],{"class":238},[228,18469,18470],{"class":230,"line":8063},[228,18471,17667],{"class":238},[228,18473,18474,18476,18478],{"class":230,"line":8087},[228,18475,17672],{"class":238},[228,18477,17617],{"class":2077},[228,18479,17677],{"class":238},[228,18481,18482,18484],{"class":230,"line":8092},[228,18483,17682],{"class":2077},[228,18485,17685],{"class":238},[228,18487,18488],{"class":230,"line":8098},[228,18489,1679],{"class":238},[14,18491,18493],{"id":18492},"_82对象的初始化清理","8.2对象的初始化清理",[1245,18495,18496,18499],{},[186,18497,18498],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[186,18500,18501],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[200,18503,18505],{"id":18504},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,18507,18508,18509,18512],{},"对象的",[388,18510,18511],{},"初始化和清理","也是两个非常重要的安全问题",[19,18514,18515],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,18517,18518],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,18520,18521,18522,18525,18526,18529],{},"c++利用了",[388,18523,18524],{},"构造函数","和",[388,18527,18528],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,18531,18532,18533],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[388,18534,18535],{},"我们不提供构造和析构，编译器会提供",[19,18537,18538],{},[388,18539,18540],{},"编译器提供的构造函数和析构函数是空实现。",[1245,18542,18543,18546],{},[186,18544,18545],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[186,18547,18548,18549,18552],{},"析构函数：主要作用在于对象",[388,18550,18551],{},"销毁前","系统自动调用，执行一些清理工作。",[19,18554,18555,18558],{},[388,18556,18557],{},"构造函数语法：",[30,18559,18560],{},"类名(){}",[183,18562,18563,18566,18569,18572,18575],{},[186,18564,18565],{},"构造函数，没有返回值也不写void",[186,18567,18568],{},"函数名称与类名相同",[186,18570,18571],{},"构造函数可以有参数，因此可以发生重载",[186,18573,18574],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[186,18576,18577,18578,667],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[30,18579,18580],{},"Person(){}",[19,18582,18583,13910,18586],{},[388,18584,18585],{},"析构函数语法：",[30,18587,18588],{},"~类名(){}",[183,18590,18591,18594,18597,18603],{},[186,18592,18593],{},"析构函数，没有返回值也不写void",[186,18595,18596],{},"函数名称与类名相同,在名称前加上符号  ~",[186,18598,18599,18600],{},"析构函数不可以有参数，因此",[388,18601,18602],{},"不可以发生重载",[186,18604,18605],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[220,18607,18609],{"className":222,"code":18608,"language":224,"meta":141,"style":141},"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",[30,18610,18611,18617,18621,18625,18630,18637,18641,18654,18658,18663,18670,18674,18687,18691,18695,18699,18703,18711,18715,18723,18727,18731,18739,18743,18748,18752,18759,18763,18776,18780,18788],{"__ignoreMap":141},[228,18612,18613,18615],{"class":230,"line":231},[228,18614,14809],{"class":234},[228,18616,15286],{"class":2077},[228,18618,18619],{"class":230,"line":142},[228,18620,1660],{"class":238},[228,18622,18623],{"class":230,"line":1293},[228,18624,14831],{"class":234},[228,18626,18627],{"class":230,"line":1308},[228,18628,18629],{"class":297},"    \u002F\u002F构造函数\n",[228,18631,18632,18635],{"class":230,"line":1314},[228,18633,18634],{"class":2077},"    Person",[228,18636,2090],{"class":238},[228,18638,18639],{"class":230,"line":1328},[228,18640,2144],{"class":238},[228,18642,18643,18645,18647,18650,18652],{"class":230,"line":1334},[228,18644,9784],{"class":238},[228,18646,1282],{"class":234},[228,18648,18649],{"class":343}," \"Person的构造函数调用\"",[228,18651,1558],{"class":234},[228,18653,8955],{"class":238},[228,18655,18656],{"class":230,"line":1425},[228,18657,2301],{"class":238},[228,18659,18660],{"class":230,"line":1431},[228,18661,18662],{"class":297},"    \u002F\u002F析构函数\n",[228,18664,18665,18668],{"class":230,"line":1443},[228,18666,18667],{"class":2077},"    ~Person",[228,18669,2090],{"class":238},[228,18671,18672],{"class":230,"line":1726},[228,18673,2144],{"class":238},[228,18675,18676,18678,18680,18683,18685],{"class":230,"line":1731},[228,18677,9784],{"class":238},[228,18679,1282],{"class":234},[228,18681,18682],{"class":343}," \"Person的析构函数调用\"",[228,18684,1558],{"class":234},[228,18686,8955],{"class":238},[228,18688,18689],{"class":230,"line":1737},[228,18690,2301],{"class":238},[228,18692,18693],{"class":230,"line":1742},[228,18694,2514],{"emptyLinePlaceholder":157},[228,18696,18697],{"class":230,"line":1756},[228,18698,4109],{"class":238},[228,18700,18701],{"class":230,"line":1761},[228,18702,2514],{"emptyLinePlaceholder":157},[228,18704,18705,18707,18709],{"class":230,"line":1767},[228,18706,5479],{"class":234},[228,18708,5703],{"class":2077},[228,18710,2090],{"class":238},[228,18712,18713],{"class":230,"line":1788},[228,18714,1660],{"class":238},[228,18716,18717,18720],{"class":230,"line":1793},[228,18718,18719],{"class":238},"    Person p;",[228,18721,18722],{"class":297},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[228,18724,18725],{"class":230,"line":1807},[228,18726,1679],{"class":238},[228,18728,18729],{"class":230,"line":1812},[228,18730,2514],{"emptyLinePlaceholder":157},[228,18732,18733,18735,18737],{"class":230,"line":1841},[228,18734,242],{"class":234},[228,18736,2087],{"class":2077},[228,18738,10968],{"class":238},[228,18740,18741],{"class":230,"line":1846},[228,18742,13325],{"class":238},[228,18744,18745],{"class":230,"line":1863},[228,18746,18747],{"class":297},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[228,18749,18750],{"class":230,"line":1868},[228,18751,2514],{"emptyLinePlaceholder":157},[228,18753,18754,18756],{"class":230,"line":1873},[228,18755,18719],{"class":238},[228,18757,18758],{"class":297},"\u002F\u002F只有构造函数\n",[228,18760,18761],{"class":230,"line":1878},[228,18762,2514],{"emptyLinePlaceholder":157},[228,18764,18765,18767,18769,18771,18773],{"class":230,"line":1892},[228,18766,2417],{"class":2077},[228,18768,239],{"class":238},[228,18770,2422],{"class":343},[228,18772,6081],{"class":238},[228,18774,18775],{"class":297},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[228,18777,18778],{"class":230,"line":1897},[228,18779,2514],{"emptyLinePlaceholder":157},[228,18781,18782,18784,18786],{"class":230,"line":2691},[228,18783,4204],{"class":234},[228,18785,4207],{"class":287},[228,18787,1404],{"class":238},[228,18789,18790],{"class":230,"line":2705},[228,18791,1679],{"class":238},[19,18793,18794],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[200,18796,18798],{"id":18797},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,18800,18801],{},"两种分类方式：",[19,18803,18804],{},"​\t按参数分为： 有参构造和无参构造",[19,18806,18807],{},"​\t按类型分为： 普通构造和拷贝构造",[19,18809,18810],{},"三种调用方式：",[19,18812,18813],{},"​\t括号法",[19,18815,18816],{},"​\t显示法",[19,18818,18819],{},"​\t隐式转换法",[220,18821,18823],{"className":222,"code":18822,"language":224,"meta":141,"style":141},"#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",[30,18824,18825,18831,18841,18846,18851,18856,18861,18865,18873,18877,18881,18885,18891,18895,18908,18912,18924,18928,18937,18950,18954,18958,18964,18968,18981,18985,18990,19006,19010,19015,19024,19037,19041,19047,19051,19056,19064,19068,19073,19077,19085,19089,19094,19099,19104,19109,19114,19118,19123,19128,19133,19138,19142,19147,19152,19168,19180,19185,19189,19194,19199,19204,19208,19213,19227,19240,19244,19252,19256,19262,19268,19276],{"__ignoreMap":141},[228,18826,18827,18829],{"class":230,"line":231},[228,18828,2063],{"class":234},[228,18830,2066],{"class":343},[228,18832,18833,18835,18837,18839],{"class":230,"line":142},[228,18834,2071],{"class":234},[228,18836,2074],{"class":234},[228,18838,2078],{"class":2077},[228,18840,1404],{"class":238},[228,18842,18843],{"class":230,"line":1293},[228,18844,18845],{"class":297},"\u002F\u002F1.构造函数的分类及调用\n",[228,18847,18848],{"class":230,"line":1308},[228,18849,18850],{"class":297},"\u002F\u002F分类\n",[228,18852,18853],{"class":230,"line":1314},[228,18854,18855],{"class":297},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[228,18857,18858],{"class":230,"line":1328},[228,18859,18860],{"class":297},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[228,18862,18863],{"class":230,"line":1334},[228,18864,2514],{"emptyLinePlaceholder":157},[228,18866,18867,18869,18871],{"class":230,"line":1425},[228,18868,14809],{"class":234},[228,18870,15684],{"class":2077},[228,18872,2788],{"class":238},[228,18874,18875],{"class":230,"line":1431},[228,18876,1660],{"class":238},[228,18878,18879],{"class":230,"line":1443},[228,18880,14831],{"class":234},[228,18882,18883],{"class":230,"line":1726},[228,18884,18629],{"class":297},[228,18886,18887,18889],{"class":230,"line":1731},[228,18888,18634],{"class":2077},[228,18890,2090],{"class":238},[228,18892,18893],{"class":230,"line":1737},[228,18894,2144],{"class":238},[228,18896,18897,18899,18901,18904,18906],{"class":230,"line":1742},[228,18898,3565],{"class":238},[228,18900,1282],{"class":234},[228,18902,18903],{"class":343},"\"Person构造函数无参构造\"",[228,18905,1282],{"class":234},[228,18907,1305],{"class":238},[228,18909,18910],{"class":230,"line":1756},[228,18911,2301],{"class":238},[228,18913,18914,18916,18918,18920,18922],{"class":230,"line":1761},[228,18915,18634],{"class":2077},[228,18917,239],{"class":238},[228,18919,242],{"class":234},[228,18921,1512],{"class":5331},[228,18923,245],{"class":238},[228,18925,18926],{"class":230,"line":1767},[228,18927,2144],{"class":238},[228,18929,18930,18933,18935],{"class":230,"line":1788},[228,18931,18932],{"class":238},"        age",[228,18934,284],{"class":234},[228,18936,6312],{"class":238},[228,18938,18939,18941,18943,18946,18948],{"class":230,"line":1793},[228,18940,3565],{"class":238},[228,18942,1282],{"class":234},[228,18944,18945],{"class":343},"\"Person构造函数有参构造\"",[228,18947,1282],{"class":234},[228,18949,1305],{"class":238},[228,18951,18952],{"class":230,"line":1807},[228,18953,2301],{"class":238},[228,18955,18956],{"class":230,"line":1812},[228,18957,18662],{"class":297},[228,18959,18960,18962],{"class":230,"line":1841},[228,18961,18667],{"class":2077},[228,18963,2090],{"class":238},[228,18965,18966],{"class":230,"line":1846},[228,18967,2144],{"class":238},[228,18969,18970,18972,18974,18977,18979],{"class":230,"line":1863},[228,18971,3565],{"class":238},[228,18973,1282],{"class":234},[228,18975,18976],{"class":343},"\"Person析构函数被调用\"",[228,18978,1282],{"class":234},[228,18980,1305],{"class":238},[228,18982,18983],{"class":230,"line":1868},[228,18984,2301],{"class":238},[228,18986,18987],{"class":230,"line":1873},[228,18988,18989],{"class":297},"    \u002F\u002F拷贝构造函数\n",[228,18991,18992,18994,18996,18998,19000,19002,19004],{"class":230,"line":1878},[228,18993,18634],{"class":2077},[228,18995,239],{"class":238},[228,18997,6907],{"class":234},[228,18999,15684],{"class":2077},[228,19001,10699],{"class":234},[228,19003,19],{"class":5331},[228,19005,245],{"class":238},[228,19007,19008],{"class":230,"line":1892},[228,19009,2144],{"class":238},[228,19011,19012],{"class":230,"line":1897},[228,19013,19014],{"class":297},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[228,19016,19017,19019,19021],{"class":230,"line":2691},[228,19018,18932],{"class":238},[228,19020,284],{"class":234},[228,19022,19023],{"class":238},"p.age;\n",[228,19025,19026,19028,19030,19033,19035],{"class":230,"line":2705},[228,19027,3565],{"class":238},[228,19029,1282],{"class":234},[228,19031,19032],{"class":343},"\"Person拷贝构造函数被调用\"",[228,19034,1282],{"class":234},[228,19036,1305],{"class":238},[228,19038,19039],{"class":230,"line":2713},[228,19040,2301],{"class":238},[228,19042,19043,19045],{"class":230,"line":2718},[228,19044,2099],{"class":234},[228,19046,7912],{"class":238},[228,19048,19049],{"class":230,"line":2724},[228,19050,4109],{"class":238},[228,19052,19053],{"class":230,"line":2730},[228,19054,19055],{"class":297},"\u002F\u002F调用\n",[228,19057,19058,19060,19062],{"class":230,"line":2735},[228,19059,5479],{"class":234},[228,19061,5703],{"class":2077},[228,19063,2090],{"class":238},[228,19065,19066],{"class":230,"line":8063},[228,19067,1660],{"class":238},[228,19069,19070],{"class":230,"line":8087},[228,19071,19072],{"class":297},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[228,19074,19075],{"class":230,"line":8092},[228,19076,1679],{"class":238},[228,19078,19079,19081,19083],{"class":230,"line":8098},[228,19080,5479],{"class":234},[228,19082,5772],{"class":2077},[228,19084,2090],{"class":238},[228,19086,19087],{"class":230,"line":8125},[228,19088,1660],{"class":238},[228,19090,19091],{"class":230,"line":8130},[228,19092,19093],{"class":297},"    \u002F\u002F1.括号法\n",[228,19095,19096],{"class":230,"line":8136},[228,19097,19098],{"class":297},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[228,19100,19101],{"class":230,"line":8148},[228,19102,19103],{"class":297},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[228,19105,19106],{"class":230,"line":8160},[228,19107,19108],{"class":297},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[228,19110,19111],{"class":230,"line":8172},[228,19112,19113],{"class":297},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[228,19115,19116],{"class":230,"line":9831},[228,19117,2514],{"emptyLinePlaceholder":157},[228,19119,19120],{"class":230,"line":9856},[228,19121,19122],{"class":297},"    \u002F\u002F注意事项\n",[228,19124,19125],{"class":230,"line":9879},[228,19126,19127],{"class":297},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[228,19129,19130],{"class":230,"line":9903},[228,19131,19132],{"class":297},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[228,19134,19135],{"class":230,"line":9908},[228,19136,19137],{"class":297},"    \u002F\u002F Person p4();\n",[228,19139,19140],{"class":230,"line":9913},[228,19141,2514],{"emptyLinePlaceholder":157},[228,19143,19144],{"class":230,"line":9918},[228,19145,19146],{"class":297},"    \u002F\u002F2.显示法\n",[228,19148,19149],{"class":230,"line":9927},[228,19150,19151],{"class":238},"    Person p1;\n",[228,19153,19154,19157,19159,19162,19164,19166],{"class":230,"line":9932},[228,19155,19156],{"class":238},"    Person p2",[228,19158,284],{"class":234},[228,19160,19161],{"class":2077},"Person",[228,19163,239],{"class":238},[228,19165,684],{"class":287},[228,19167,2833],{"class":238},[228,19169,19170,19173,19175,19177],{"class":230,"line":9938},[228,19171,19172],{"class":238},"    Person p3",[228,19174,284],{"class":234},[228,19176,19161],{"class":2077},[228,19178,19179],{"class":238},"(p2);\n",[228,19181,19182],{"class":230,"line":9959},[228,19183,19184],{"class":297},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[228,19186,19187],{"class":230,"line":9965},[228,19188,2514],{"emptyLinePlaceholder":157},[228,19190,19191],{"class":230,"line":9979},[228,19192,19193],{"class":297},"    \u002F\u002F 注意事项2\n",[228,19195,19196],{"class":230,"line":9985},[228,19197,19198],{"class":297},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[228,19200,19201],{"class":230,"line":10012},[228,19202,19203],{"class":297},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[228,19205,19206],{"class":230,"line":10021},[228,19207,2514],{"emptyLinePlaceholder":157},[228,19209,19210],{"class":230,"line":10027},[228,19211,19212],{"class":297},"    \u002F\u002F3.隐士转换法\n",[228,19214,19215,19218,19220,19222,19224],{"class":230,"line":10035},[228,19216,19217],{"class":238},"    Person p4",[228,19219,284],{"class":234},[228,19221,684],{"class":287},[228,19223,294],{"class":238},[228,19225,19226],{"class":297},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[228,19228,19229,19232,19234,19237],{"class":230,"line":10040},[228,19230,19231],{"class":238},"    Person p5",[228,19233,284],{"class":234},[228,19235,19236],{"class":238},"p4;",[228,19238,19239],{"class":297}," \u002F\u002F 这里会调用拷贝构造函数\n",[228,19241,19242],{"class":230,"line":16719},[228,19243,1679],{"class":238},[228,19245,19246,19248,19250],{"class":230,"line":16725},[228,19247,242],{"class":234},[228,19249,2087],{"class":2077},[228,19251,2090],{"class":238},[228,19253,19254],{"class":230,"line":16748},[228,19255,1660],{"class":238},[228,19257,19258,19260],{"class":230,"line":16754},[228,19259,5748],{"class":2077},[228,19261,5751],{"class":238},[228,19263,19264,19266],{"class":230,"line":16777},[228,19265,5817],{"class":2077},[228,19267,5751],{"class":238},[228,19269,19270,19272,19274],{"class":230,"line":16791},[228,19271,4204],{"class":234},[228,19273,4207],{"class":287},[228,19275,1404],{"class":238},[228,19277,19278],{"class":230,"line":16811},[228,19279,1679],{"class":238},[19,19281,19282,19285],{},[388,19283,19284],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[200,19287,19289],{"id":19288},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,19291,19292],{},"C++中拷贝构造函数调用时机通常有三种情况",[1245,19294,19295,19298,19301],{},[186,19296,19297],{},"使用一个已经创建完毕的对象来初始化一个新对象",[186,19299,19300],{},"值传递的方式给函数参数传值",[186,19302,19303],{},"以值方式返回局部对象",[220,19305,19307],{"className":222,"code":19306,"language":224,"meta":141,"style":141},"#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",[30,19308,19309,19315,19325,19329,19334,19338,19343,19348,19353,19359,19363,19367,19373,19377,19390,19394,19399,19411,19415,19423,19436,19440,19444,19460,19464,19473,19486,19490,19496,19500,19512,19516,19522,19526,19530,19538,19542,19555,19563,19581,19585,19590,19595,19610,19614,19627,19631,19639,19643,19647,19655,19659,19664,19673,19677,19681,19706,19716,19720,19728,19732,19743,19768,19772,19776,19780,19788,19792,19797,19802,19809,19814,19819,19824,19829,19833,19838,19842,19847,19851,19856,19861,19865,19869,19874,19879,19887],{"__ignoreMap":141},[228,19310,19311,19313],{"class":230,"line":231},[228,19312,2063],{"class":234},[228,19314,2066],{"class":343},[228,19316,19317,19319,19321,19323],{"class":230,"line":142},[228,19318,2071],{"class":234},[228,19320,2074],{"class":234},[228,19322,2078],{"class":2077},[228,19324,1404],{"class":238},[228,19326,19327],{"class":230,"line":1293},[228,19328,2514],{"emptyLinePlaceholder":157},[228,19330,19331],{"class":230,"line":1308},[228,19332,19333],{"class":297},"\u002F\u002F拷贝构造函数调用时机\n",[228,19335,19336],{"class":230,"line":1314},[228,19337,2514],{"emptyLinePlaceholder":157},[228,19339,19340],{"class":230,"line":1328},[228,19341,19342],{"class":297},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[228,19344,19345],{"class":230,"line":1334},[228,19346,19347],{"class":297},"\u002F\u002F2.值传递的方式给函数参数传值\n",[228,19349,19350],{"class":230,"line":1425},[228,19351,19352],{"class":297},"\u002F\u002F3.以值方式返回局部对象\n",[228,19354,19355,19357],{"class":230,"line":1431},[228,19356,14809],{"class":234},[228,19358,15286],{"class":2077},[228,19360,19361],{"class":230,"line":1443},[228,19362,1660],{"class":238},[228,19364,19365],{"class":230,"line":1726},[228,19366,14831],{"class":234},[228,19368,19369,19371],{"class":230,"line":1731},[228,19370,18634],{"class":2077},[228,19372,2090],{"class":238},[228,19374,19375],{"class":230,"line":1737},[228,19376,2144],{"class":238},[228,19378,19379,19381,19383,19386,19388],{"class":230,"line":1742},[228,19380,9784],{"class":238},[228,19382,1282],{"class":234},[228,19384,19385],{"class":343}," \"Person的默认构造函数调用\"",[228,19387,1558],{"class":234},[228,19389,8955],{"class":238},[228,19391,19392],{"class":230,"line":1756},[228,19393,2301],{"class":238},[228,19395,19396],{"class":230,"line":1761},[228,19397,19398],{"class":297},"    \u002F\u002F有参构造\n",[228,19400,19401,19403,19405,19407,19409],{"class":230,"line":1767},[228,19402,18634],{"class":2077},[228,19404,239],{"class":238},[228,19406,242],{"class":234},[228,19408,15804],{"class":5331},[228,19410,245],{"class":238},[228,19412,19413],{"class":230,"line":1788},[228,19414,2144],{"class":238},[228,19416,19417,19419,19421],{"class":230,"line":1793},[228,19418,15858],{"class":238},[228,19420,284],{"class":234},[228,19422,7912],{"class":238},[228,19424,19425,19427,19429,19432,19434],{"class":230,"line":1807},[228,19426,9784],{"class":238},[228,19428,1282],{"class":234},[228,19430,19431],{"class":343}," \"Person的有参构造函数调用\"",[228,19433,1558],{"class":234},[228,19435,8955],{"class":238},[228,19437,19438],{"class":230,"line":1812},[228,19439,2301],{"class":238},[228,19441,19442],{"class":230,"line":1841},[228,19443,18989],{"class":297},[228,19445,19446,19448,19450,19452,19454,19456,19458],{"class":230,"line":1846},[228,19447,18634],{"class":2077},[228,19449,239],{"class":238},[228,19451,6907],{"class":234},[228,19453,15684],{"class":2077},[228,19455,10699],{"class":234},[228,19457,19],{"class":5331},[228,19459,245],{"class":238},[228,19461,19462],{"class":230,"line":1863},[228,19463,2144],{"class":238},[228,19465,19466,19468,19470],{"class":230,"line":1868},[228,19467,15858],{"class":238},[228,19469,284],{"class":234},[228,19471,19472],{"class":238}," p.m_Age;\n",[228,19474,19475,19477,19479,19482,19484],{"class":230,"line":1873},[228,19476,9784],{"class":238},[228,19478,1282],{"class":234},[228,19480,19481],{"class":343}," \"Person的拷贝构造函数调用\"",[228,19483,1558],{"class":234},[228,19485,8955],{"class":238},[228,19487,19488],{"class":230,"line":1878},[228,19489,2301],{"class":238},[228,19491,19492,19494],{"class":230,"line":1892},[228,19493,18667],{"class":2077},[228,19495,2090],{"class":238},[228,19497,19498],{"class":230,"line":1897},[228,19499,2144],{"class":238},[228,19501,19502,19504,19506,19508,19510],{"class":230,"line":2691},[228,19503,9784],{"class":238},[228,19505,1282],{"class":234},[228,19507,18682],{"class":343},[228,19509,1558],{"class":234},[228,19511,8955],{"class":238},[228,19513,19514],{"class":230,"line":2705},[228,19515,2301],{"class":238},[228,19517,19518,19520],{"class":230,"line":2713},[228,19519,2099],{"class":234},[228,19521,15781],{"class":238},[228,19523,19524],{"class":230,"line":2718},[228,19525,4109],{"class":238},[228,19527,19528],{"class":230,"line":2724},[228,19529,19342],{"class":297},[228,19531,19532,19534,19536],{"class":230,"line":2730},[228,19533,5479],{"class":234},[228,19535,5703],{"class":2077},[228,19537,2090],{"class":238},[228,19539,19540],{"class":230,"line":2735},[228,19541,1660],{"class":238},[228,19543,19544,19547,19549,19551,19553],{"class":230,"line":8063},[228,19545,19546],{"class":238},"    Person ",[228,19548,7245],{"class":2077},[228,19550,239],{"class":238},[228,19552,938],{"class":287},[228,19554,2833],{"class":238},[228,19556,19557,19559,19561],{"class":230,"line":8087},[228,19558,19546],{"class":238},[228,19560,7148],{"class":2077},[228,19562,17630],{"class":238},[228,19564,19565,19567,19569,19572,19574,19577,19579],{"class":230,"line":8092},[228,19566,1665],{"class":238},[228,19568,1282],{"class":234},[228,19570,19571],{"class":343},"\"P2的年龄为：\"",[228,19573,1282],{"class":234},[228,19575,19576],{"class":238},"p2.m_Age",[228,19578,1282],{"class":234},[228,19580,1305],{"class":238},[228,19582,19583],{"class":230,"line":8098},[228,19584,1679],{"class":238},[228,19586,19587],{"class":230,"line":8125},[228,19588,19589],{"class":297},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[228,19591,19592],{"class":230,"line":8130},[228,19593,19594],{"class":297},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[228,19596,19597,19599,19602,19604,19606,19608],{"class":230,"line":8136},[228,19598,5479],{"class":234},[228,19600,19601],{"class":2077}," doWork",[228,19603,239],{"class":238},[228,19605,19161],{"class":2077},[228,19607,6940],{"class":5331},[228,19609,245],{"class":238},[228,19611,19612],{"class":230,"line":8148},[228,19613,1660],{"class":238},[228,19615,19616,19618,19620,19623,19625],{"class":230,"line":8160},[228,19617,6644],{"class":238},[228,19619,1282],{"class":234},[228,19621,19622],{"class":343}," \"doWork函数调用\"",[228,19624,1558],{"class":234},[228,19626,8955],{"class":238},[228,19628,19629],{"class":230,"line":8172},[228,19630,1679],{"class":238},[228,19632,19633,19635,19637],{"class":230,"line":9831},[228,19634,5479],{"class":234},[228,19636,5772],{"class":2077},[228,19638,2090],{"class":238},[228,19640,19641],{"class":230,"line":9856},[228,19642,1660],{"class":238},[228,19644,19645],{"class":230,"line":9879},[228,19646,15428],{"class":238},[228,19648,19649,19652],{"class":230,"line":9903},[228,19650,19651],{"class":2077},"    doWork",[228,19653,19654],{"class":238},"(p);\n",[228,19656,19657],{"class":230,"line":9908},[228,19658,1679],{"class":238},[228,19660,19661],{"class":230,"line":9913},[228,19662,19663],{"class":297},"\u002F\u002F 3.以值方式返回局部对象\n",[228,19665,19666,19668,19671],{"class":230,"line":9918},[228,19667,19161],{"class":2077},[228,19669,19670],{"class":2077}," doWork2",[228,19672,2090],{"class":238},[228,19674,19675],{"class":230,"line":9927},[228,19676,1660],{"class":238},[228,19678,19679],{"class":230,"line":9932},[228,19680,19151],{"class":238},[228,19682,19683,19685,19687,19689,19691,19693,19695,19697,19699,19701,19703],{"class":230,"line":9938},[228,19684,1665],{"class":238},[228,19686,1282],{"class":234},[228,19688,239],{"class":238},[228,19690,242],{"class":234},[228,19692,6633],{"class":234},[228,19694,667],{"class":238},[228,19696,591],{"class":234},[228,19698,7245],{"class":238},[228,19700,1282],{"class":234},[228,19702,1352],{"class":238},[228,19704,19705],{"class":297},"\u002F\u002F打印p1的地址\n",[228,19707,19708,19710,19713],{"class":230,"line":9959},[228,19709,4204],{"class":234},[228,19711,19712],{"class":238}," p1;",[228,19714,19715],{"class":297},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[228,19717,19718],{"class":230,"line":9965},[228,19719,1679],{"class":238},[228,19721,19722,19724,19726],{"class":230,"line":9979},[228,19723,5479],{"class":234},[228,19725,5844],{"class":2077},[228,19727,2090],{"class":238},[228,19729,19730],{"class":230,"line":9985},[228,19731,1660],{"class":238},[228,19733,19734,19737,19739,19741],{"class":230,"line":10012},[228,19735,19736],{"class":238},"    Person p ",[228,19738,284],{"class":234},[228,19740,19670],{"class":2077},[228,19742,5751],{"class":238},[228,19744,19745,19747,19749,19751,19753,19755,19757,19759,19761,19763,19765],{"class":230,"line":10021},[228,19746,1665],{"class":238},[228,19748,1282],{"class":234},[228,19750,239],{"class":238},[228,19752,242],{"class":234},[228,19754,6633],{"class":234},[228,19756,667],{"class":238},[228,19758,591],{"class":234},[228,19760,19],{"class":238},[228,19762,1282],{"class":234},[228,19764,1352],{"class":238},[228,19766,19767],{"class":297},"\u002F\u002F打印p的地址\n",[228,19769,19770],{"class":230,"line":10027},[228,19771,1679],{"class":238},[228,19773,19774],{"class":230,"line":10035},[228,19775,2514],{"emptyLinePlaceholder":157},[228,19777,19778],{"class":230,"line":10040},[228,19779,2514],{"emptyLinePlaceholder":157},[228,19781,19782,19784,19786],{"class":230,"line":16719},[228,19783,242],{"class":234},[228,19785,2087],{"class":2077},[228,19787,2090],{"class":238},[228,19789,19790],{"class":230,"line":16725},[228,19791,1660],{"class":238},[228,19793,19794],{"class":230,"line":16748},[228,19795,19796],{"class":297},"    \u002F\u002F test01();\n",[228,19798,19799],{"class":230,"line":16754},[228,19800,19801],{"class":297},"    \u002F\u002F test02();\n",[228,19803,19804,19807],{"class":230,"line":16777},[228,19805,19806],{"class":2077},"    test03",[228,19808,5751],{"class":238},[228,19810,19811],{"class":230,"line":16791},[228,19812,19813],{"class":297},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[228,19815,19816],{"class":230,"line":16811},[228,19817,19818],{"class":297},"\u002F\u002F 输出结果如下：\n",[228,19820,19821],{"class":230,"line":16817},[228,19822,19823],{"class":297},"\u002F\u002F Person的默认构造函数调用\n",[228,19825,19826],{"class":230,"line":16828},[228,19827,19828],{"class":297},"\u002F\u002F 0x7fffffffceec\n",[228,19830,19831],{"class":230,"line":16851},[228,19832,19828],{"class":297},[228,19834,19835],{"class":230,"line":16873},[228,19836,19837],{"class":297},"\u002F\u002F Person的析构函数调用\n",[228,19839,19840],{"class":230,"line":16878},[228,19841,2514],{"emptyLinePlaceholder":157},[228,19843,19844],{"class":230,"line":16884},[228,19845,19846],{"class":297},"\u002F\u002F 之前的输出结果如下：\n",[228,19848,19849],{"class":230,"line":16898},[228,19850,19823],{"class":297},[228,19852,19853],{"class":230,"line":16911},[228,19854,19855],{"class":297},"\u002F\u002F 地址\n",[228,19857,19858],{"class":230,"line":16916},[228,19859,19860],{"class":297},"\u002F\u002F Person的拷贝构造函数调用\n",[228,19862,19863],{"class":230,"line":16930},[228,19864,19837],{"class":297},[228,19866,19867],{"class":230,"line":16935},[228,19868,19855],{"class":297},[228,19870,19871],{"class":230,"line":16941},[228,19872,19873],{"class":297},"\u002F\u002F (这两次输出的地址也是不同的) \n",[228,19875,19876],{"class":230,"line":16946},[228,19877,19878],{"class":297},"\u002F\u002F Person的析构函数调用     \n",[228,19880,19881,19883,19885],{"class":230,"line":16960},[228,19882,4204],{"class":234},[228,19884,4207],{"class":287},[228,19886,1404],{"class":238},[228,19888,19889],{"class":230,"line":16965},[228,19890,1679],{"class":238},[19,19892,19893],{},"简化版理解",[220,19895,19897],{"className":222,"code":19896,"language":224,"meta":141,"style":141},"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",[30,19898,19899,19907,19911,19917,19930,19941,19945,19957,19970,19978,19982,19998,20011,20020,20024,20029,20035,20048,20052,20056,20063,20067,20071,20076,20084,20088,20104,20117,20130,20134,20139,20147,20151,20155,20160,20165,20181,20189,20196,20202,20206,20210,20215,20223,20227,20231,20254,20261,20265,20269,20277,20281,20291,20313,20317,20321,20325,20333,20337,20342,20347,20353,20357,20367,20371,20379],{"__ignoreMap":141},[228,19900,19901,19903,19905],{"class":230,"line":231},[228,19902,14809],{"class":234},[228,19904,15684],{"class":2077},[228,19906,15687],{"class":238},[228,19908,19909],{"class":230,"line":142},[228,19910,14831],{"class":234},[228,19912,19913,19915],{"class":230,"line":1293},[228,19914,18634],{"class":2077},[228,19916,10968],{"class":238},[228,19918,19919,19921,19923,19926,19928],{"class":230,"line":1308},[228,19920,9784],{"class":238},[228,19922,1282],{"class":234},[228,19924,19925],{"class":343}," \"无参构造函数!\"",[228,19927,1558],{"class":234},[228,19929,8955],{"class":238},[228,19931,19932,19935,19937,19939],{"class":230,"line":1314},[228,19933,19934],{"class":238},"        mAge ",[228,19936,284],{"class":234},[228,19938,4207],{"class":287},[228,19940,1404],{"class":238},[228,19942,19943],{"class":230,"line":1328},[228,19944,2301],{"class":238},[228,19946,19947,19949,19951,19953,19955],{"class":230,"line":1334},[228,19948,18634],{"class":2077},[228,19950,239],{"class":238},[228,19952,242],{"class":234},[228,19954,15804],{"class":5331},[228,19956,12557],{"class":238},[228,19958,19959,19961,19963,19966,19968],{"class":230,"line":1425},[228,19960,9784],{"class":238},[228,19962,1282],{"class":234},[228,19964,19965],{"class":343}," \"有参构造函数!\"",[228,19967,1558],{"class":234},[228,19969,8955],{"class":238},[228,19971,19972,19974,19976],{"class":230,"line":1431},[228,19973,19934],{"class":238},[228,19975,284],{"class":234},[228,19977,7912],{"class":238},[228,19979,19980],{"class":230,"line":1443},[228,19981,2301],{"class":238},[228,19983,19984,19986,19988,19990,19992,19994,19996],{"class":230,"line":1726},[228,19985,18634],{"class":2077},[228,19987,239],{"class":238},[228,19989,6907],{"class":234},[228,19991,15684],{"class":2077},[228,19993,591],{"class":234},[228,19995,6940],{"class":5331},[228,19997,12557],{"class":238},[228,19999,20000,20002,20004,20007,20009],{"class":230,"line":1731},[228,20001,9784],{"class":238},[228,20003,1282],{"class":234},[228,20005,20006],{"class":343}," \"拷贝构造函数!\"",[228,20008,1558],{"class":234},[228,20010,8955],{"class":238},[228,20012,20013,20015,20017],{"class":230,"line":1737},[228,20014,19934],{"class":238},[228,20016,284],{"class":234},[228,20018,20019],{"class":238}," p.mAge;\n",[228,20021,20022],{"class":230,"line":1742},[228,20023,2301],{"class":238},[228,20025,20026],{"class":230,"line":1756},[228,20027,20028],{"class":297},"    \u002F\u002F析构函数在释放内存之前调用\n",[228,20030,20031,20033],{"class":230,"line":1761},[228,20032,18667],{"class":2077},[228,20034,10968],{"class":238},[228,20036,20037,20039,20041,20044,20046],{"class":230,"line":1767},[228,20038,9784],{"class":238},[228,20040,1282],{"class":234},[228,20042,20043],{"class":343}," \"析构函数!\"",[228,20045,1558],{"class":234},[228,20047,8955],{"class":238},[228,20049,20050],{"class":230,"line":1788},[228,20051,2301],{"class":238},[228,20053,20054],{"class":230,"line":1793},[228,20055,14831],{"class":234},[228,20057,20058,20060],{"class":230,"line":1807},[228,20059,2099],{"class":234},[228,20061,20062],{"class":238}," mAge;\n",[228,20064,20065],{"class":230,"line":1812},[228,20066,4109],{"class":238},[228,20068,20069],{"class":230,"line":1841},[228,20070,2514],{"emptyLinePlaceholder":157},[228,20072,20073],{"class":230,"line":1846},[228,20074,20075],{"class":297},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[228,20077,20078,20080,20082],{"class":230,"line":1863},[228,20079,5479],{"class":234},[228,20081,5703],{"class":2077},[228,20083,10968],{"class":238},[228,20085,20086],{"class":230,"line":1868},[228,20087,2514],{"emptyLinePlaceholder":157},[228,20089,20090,20092,20095,20097,20099,20101],{"class":230,"line":1873},[228,20091,19546],{"class":238},[228,20093,20094],{"class":2077},"man",[228,20096,239],{"class":238},[228,20098,549],{"class":287},[228,20100,6081],{"class":238},[228,20102,20103],{"class":297}," \u002F\u002Fp对象已经创建完毕\n",[228,20105,20106,20108,20111,20114],{"class":230,"line":1878},[228,20107,19546],{"class":238},[228,20109,20110],{"class":2077},"newman",[228,20112,20113],{"class":238},"(man);",[228,20115,20116],{"class":297}," \u002F\u002F调用拷贝构造函数\n",[228,20118,20119,20122,20124,20127],{"class":230,"line":1892},[228,20120,20121],{"class":238},"    Person newman2 ",[228,20123,284],{"class":234},[228,20125,20126],{"class":238}," man;",[228,20128,20129],{"class":297}," \u002F\u002F拷贝构造\n",[228,20131,20132],{"class":230,"line":1897},[228,20133,2514],{"emptyLinePlaceholder":157},[228,20135,20136],{"class":230,"line":2691},[228,20137,20138],{"class":297},"    \u002F\u002FPerson newman3;\n",[228,20140,20141,20144],{"class":230,"line":2705},[228,20142,20143],{"class":297},"    \u002F\u002Fnewman3 = man;",[228,20145,20146],{"class":297}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[228,20148,20149],{"class":230,"line":2713},[228,20150,1679],{"class":238},[228,20152,20153],{"class":230,"line":2718},[228,20154,2514],{"emptyLinePlaceholder":157},[228,20156,20157],{"class":230,"line":2724},[228,20158,20159],{"class":297},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[228,20161,20162],{"class":230,"line":2730},[228,20163,20164],{"class":297},"\u002F\u002F相当于Person p1 = p;\n",[228,20166,20167,20169,20171,20173,20175,20178],{"class":230,"line":2735},[228,20168,5479],{"class":234},[228,20170,19601],{"class":2077},[228,20172,239],{"class":238},[228,20174,19161],{"class":2077},[228,20176,20177],{"class":5331}," p1",[228,20179,20180],{"class":238},") {}\n",[228,20182,20183,20185,20187],{"class":230,"line":8063},[228,20184,5479],{"class":234},[228,20186,5772],{"class":2077},[228,20188,10968],{"class":238},[228,20190,20191,20193],{"class":230,"line":8087},[228,20192,18719],{"class":238},[228,20194,20195],{"class":297}," \u002F\u002F无参构造函数\n",[228,20197,20198,20200],{"class":230,"line":8092},[228,20199,19651],{"class":2077},[228,20201,19654],{"class":238},[228,20203,20204],{"class":230,"line":8098},[228,20205,1679],{"class":238},[228,20207,20208],{"class":230,"line":8125},[228,20209,2514],{"emptyLinePlaceholder":157},[228,20211,20212],{"class":230,"line":8130},[228,20213,20214],{"class":297},"\u002F\u002F3. 以值方式返回局部对象\n",[228,20216,20217,20219,20221],{"class":230,"line":8136},[228,20218,19161],{"class":2077},[228,20220,19670],{"class":2077},[228,20222,2090],{"class":238},[228,20224,20225],{"class":230,"line":8148},[228,20226,1660],{"class":238},[228,20228,20229],{"class":230,"line":8160},[228,20230,19151],{"class":238},[228,20232,20233,20235,20237,20239,20241,20243,20245,20247,20250,20252],{"class":230,"line":8172},[228,20234,6644],{"class":238},[228,20236,1282],{"class":234},[228,20238,1772],{"class":238},[228,20240,242],{"class":234},[228,20242,6633],{"class":234},[228,20244,667],{"class":238},[228,20246,591],{"class":234},[228,20248,20249],{"class":238},"p1 ",[228,20251,1282],{"class":234},[228,20253,8955],{"class":238},[228,20255,20256,20258],{"class":230,"line":9831},[228,20257,4204],{"class":234},[228,20259,20260],{"class":238}," p1;\n",[228,20262,20263],{"class":230,"line":9856},[228,20264,1679],{"class":238},[228,20266,20267],{"class":230,"line":9879},[228,20268,2514],{"emptyLinePlaceholder":157},[228,20270,20271,20273,20275],{"class":230,"line":9903},[228,20272,5479],{"class":234},[228,20274,5844],{"class":2077},[228,20276,2090],{"class":238},[228,20278,20279],{"class":230,"line":9908},[228,20280,1660],{"class":238},[228,20282,20283,20285,20287,20289],{"class":230,"line":9913},[228,20284,19736],{"class":238},[228,20286,284],{"class":234},[228,20288,19670],{"class":2077},[228,20290,5751],{"class":238},[228,20292,20293,20295,20297,20299,20301,20303,20305,20307,20309,20311],{"class":230,"line":9918},[228,20294,6644],{"class":238},[228,20296,1282],{"class":234},[228,20298,1772],{"class":238},[228,20300,242],{"class":234},[228,20302,6633],{"class":234},[228,20304,667],{"class":238},[228,20306,591],{"class":234},[228,20308,11563],{"class":238},[228,20310,1282],{"class":234},[228,20312,8955],{"class":238},[228,20314,20315],{"class":230,"line":9927},[228,20316,1679],{"class":238},[228,20318,20319],{"class":230,"line":9932},[228,20320,2514],{"emptyLinePlaceholder":157},[228,20322,20323],{"class":230,"line":9938},[228,20324,2514],{"emptyLinePlaceholder":157},[228,20326,20327,20329,20331],{"class":230,"line":9959},[228,20328,242],{"class":234},[228,20330,2087],{"class":2077},[228,20332,10968],{"class":238},[228,20334,20335],{"class":230,"line":9965},[228,20336,2514],{"emptyLinePlaceholder":157},[228,20338,20339],{"class":230,"line":9979},[228,20340,20341],{"class":297},"    \u002F\u002Ftest01();\n",[228,20343,20344],{"class":230,"line":9985},[228,20345,20346],{"class":297},"    \u002F\u002Ftest02();\n",[228,20348,20349,20351],{"class":230,"line":10012},[228,20350,19806],{"class":2077},[228,20352,5751],{"class":238},[228,20354,20355],{"class":230,"line":10021},[228,20356,2514],{"emptyLinePlaceholder":157},[228,20358,20359,20361,20363,20365],{"class":230,"line":10027},[228,20360,2417],{"class":2077},[228,20362,239],{"class":238},[228,20364,2422],{"class":343},[228,20366,2833],{"class":238},[228,20368,20369],{"class":230,"line":10035},[228,20370,2514],{"emptyLinePlaceholder":157},[228,20372,20373,20375,20377],{"class":230,"line":10040},[228,20374,4204],{"class":234},[228,20376,4207],{"class":287},[228,20378,1404],{"class":238},[228,20380,20381],{"class":230,"line":16719},[228,20382,1679],{"class":238},[200,20384,20386],{"id":20385},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,20388,20389],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,20391,20392],{},"1．默认构造函数(无参，函数体为空)",[19,20394,20395],{},"2．默认析构函数(无参，函数体为空)",[19,20397,20398],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,20400,20401],{},"构造函数调用规则如下：",[1245,20403,20404,20407],{},[186,20405,20406],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[186,20408,20409],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[220,20411,20413],{"className":222,"code":20412,"language":224,"meta":141,"style":141},"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",[30,20414,20415,20423,20427,20432,20438,20450,20454,20459,20471,20480,20492,20496,20500,20516,20525,20537,20541,20545,20551,20563,20567,20571,20577,20581,20585,20593,20597,20609,20614,20622,20626,20644,20648,20652,20660,20664,20669,20677,20692,20705,20709,20714,20721,20737,20750,20754,20758,20766,20770,20776,20780,20790,20794,20802],{"__ignoreMap":141},[228,20416,20417,20419,20421],{"class":230,"line":231},[228,20418,14809],{"class":234},[228,20420,15684],{"class":2077},[228,20422,15687],{"class":238},[228,20424,20425],{"class":230,"line":142},[228,20426,14831],{"class":234},[228,20428,20429],{"class":230,"line":1293},[228,20430,20431],{"class":297},"    \u002F\u002F无参（默认）构造函数\n",[228,20433,20434,20436],{"class":230,"line":1308},[228,20435,18634],{"class":2077},[228,20437,10968],{"class":238},[228,20439,20440,20442,20444,20446,20448],{"class":230,"line":1314},[228,20441,9784],{"class":238},[228,20443,1282],{"class":234},[228,20445,19925],{"class":343},[228,20447,1558],{"class":234},[228,20449,8955],{"class":238},[228,20451,20452],{"class":230,"line":1328},[228,20453,2301],{"class":238},[228,20455,20456],{"class":230,"line":1334},[228,20457,20458],{"class":297},"    \u002F\u002F有参构造函数\n",[228,20460,20461,20463,20465,20467,20469],{"class":230,"line":1425},[228,20462,18634],{"class":2077},[228,20464,239],{"class":238},[228,20466,242],{"class":234},[228,20468,1512],{"class":5331},[228,20470,12557],{"class":238},[228,20472,20473,20476,20478],{"class":230,"line":1431},[228,20474,20475],{"class":238},"        age ",[228,20477,284],{"class":234},[228,20479,1546],{"class":238},[228,20481,20482,20484,20486,20488,20490],{"class":230,"line":1443},[228,20483,9784],{"class":238},[228,20485,1282],{"class":234},[228,20487,19965],{"class":343},[228,20489,1558],{"class":234},[228,20491,8955],{"class":238},[228,20493,20494],{"class":230,"line":1726},[228,20495,2301],{"class":238},[228,20497,20498],{"class":230,"line":1731},[228,20499,18989],{"class":297},[228,20501,20502,20504,20506,20508,20510,20512,20514],{"class":230,"line":1737},[228,20503,18634],{"class":2077},[228,20505,239],{"class":238},[228,20507,6907],{"class":234},[228,20509,15684],{"class":2077},[228,20511,591],{"class":234},[228,20513,6940],{"class":5331},[228,20515,12557],{"class":238},[228,20517,20518,20520,20522],{"class":230,"line":1742},[228,20519,20475],{"class":238},[228,20521,284],{"class":234},[228,20523,20524],{"class":238}," p.age;\n",[228,20526,20527,20529,20531,20533,20535],{"class":230,"line":1756},[228,20528,9784],{"class":238},[228,20530,1282],{"class":234},[228,20532,20006],{"class":343},[228,20534,1558],{"class":234},[228,20536,8955],{"class":238},[228,20538,20539],{"class":230,"line":1761},[228,20540,2301],{"class":238},[228,20542,20543],{"class":230,"line":1767},[228,20544,18662],{"class":297},[228,20546,20547,20549],{"class":230,"line":1788},[228,20548,18667],{"class":2077},[228,20550,10968],{"class":238},[228,20552,20553,20555,20557,20559,20561],{"class":230,"line":1793},[228,20554,9784],{"class":238},[228,20556,1282],{"class":234},[228,20558,20043],{"class":343},[228,20560,1558],{"class":234},[228,20562,8955],{"class":238},[228,20564,20565],{"class":230,"line":1807},[228,20566,2301],{"class":238},[228,20568,20569],{"class":230,"line":1812},[228,20570,14831],{"class":234},[228,20572,20573,20575],{"class":230,"line":1841},[228,20574,2099],{"class":234},[228,20576,7912],{"class":238},[228,20578,20579],{"class":230,"line":1846},[228,20580,4109],{"class":238},[228,20582,20583],{"class":230,"line":1863},[228,20584,2514],{"emptyLinePlaceholder":157},[228,20586,20587,20589,20591],{"class":230,"line":1868},[228,20588,5479],{"class":234},[228,20590,5703],{"class":2077},[228,20592,2090],{"class":238},[228,20594,20595],{"class":230,"line":1873},[228,20596,1660],{"class":238},[228,20598,20599,20601,20603,20605,20607],{"class":230,"line":1878},[228,20600,19546],{"class":238},[228,20602,7245],{"class":2077},[228,20604,239],{"class":238},[228,20606,888],{"class":287},[228,20608,2833],{"class":238},[228,20610,20611],{"class":230,"line":1892},[228,20612,20613],{"class":297},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[228,20615,20616,20618,20620],{"class":230,"line":1897},[228,20617,19546],{"class":238},[228,20619,7148],{"class":2077},[228,20621,17630],{"class":238},[228,20623,20624],{"class":230,"line":2691},[228,20625,2514],{"emptyLinePlaceholder":157},[228,20627,20628,20630,20632,20635,20637,20640,20642],{"class":230,"line":2705},[228,20629,6644],{"class":238},[228,20631,1282],{"class":234},[228,20633,20634],{"class":343}," \"p2的年龄为： \"",[228,20636,1558],{"class":234},[228,20638,20639],{"class":238}," p2.age ",[228,20641,1282],{"class":234},[228,20643,8955],{"class":238},[228,20645,20646],{"class":230,"line":2713},[228,20647,1679],{"class":238},[228,20649,20650],{"class":230,"line":2718},[228,20651,2514],{"emptyLinePlaceholder":157},[228,20653,20654,20656,20658],{"class":230,"line":2724},[228,20655,5479],{"class":234},[228,20657,5772],{"class":2077},[228,20659,2090],{"class":238},[228,20661,20662],{"class":230,"line":2730},[228,20663,1660],{"class":238},[228,20665,20666],{"class":230,"line":2735},[228,20667,20668],{"class":297},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[228,20670,20671,20674],{"class":230,"line":8063},[228,20672,20673],{"class":238},"    Person p1;",[228,20675,20676],{"class":297}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[228,20678,20679,20681,20683,20685,20687,20689],{"class":230,"line":8087},[228,20680,19546],{"class":238},[228,20682,7148],{"class":2077},[228,20684,239],{"class":238},[228,20686,684],{"class":287},[228,20688,6081],{"class":238},[228,20690,20691],{"class":297}," \u002F\u002F用户提供的有参\n",[228,20693,20694,20696,20699,20702],{"class":230,"line":8092},[228,20695,19546],{"class":238},[228,20697,20698],{"class":2077},"p3",[228,20700,20701],{"class":238},"(p2);",[228,20703,20704],{"class":297}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[228,20706,20707],{"class":230,"line":8098},[228,20708,2514],{"emptyLinePlaceholder":157},[228,20710,20711],{"class":230,"line":8125},[228,20712,20713],{"class":297},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[228,20715,20716,20719],{"class":230,"line":8130},[228,20717,20718],{"class":238},"    Person p4;",[228,20720,20676],{"class":297},[228,20722,20723,20725,20728,20730,20732,20734],{"class":230,"line":8136},[228,20724,19546],{"class":238},[228,20726,20727],{"class":2077},"p5",[228,20729,239],{"class":238},[228,20731,684],{"class":287},[228,20733,6081],{"class":238},[228,20735,20736],{"class":297}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[228,20738,20739,20741,20744,20747],{"class":230,"line":8148},[228,20740,19546],{"class":238},[228,20742,20743],{"class":2077},"p6",[228,20745,20746],{"class":238},"(p5);",[228,20748,20749],{"class":297}," \u002F\u002F用户自己提供拷贝构造\n",[228,20751,20752],{"class":230,"line":8160},[228,20753,1679],{"class":238},[228,20755,20756],{"class":230,"line":8172},[228,20757,2514],{"emptyLinePlaceholder":157},[228,20759,20760,20762,20764],{"class":230,"line":9831},[228,20761,242],{"class":234},[228,20763,2087],{"class":2077},[228,20765,10968],{"class":238},[228,20767,20768],{"class":230,"line":9856},[228,20769,2514],{"emptyLinePlaceholder":157},[228,20771,20772,20774],{"class":230,"line":9879},[228,20773,5748],{"class":2077},[228,20775,5751],{"class":238},[228,20777,20778],{"class":230,"line":9903},[228,20779,2514],{"emptyLinePlaceholder":157},[228,20781,20782,20784,20786,20788],{"class":230,"line":9908},[228,20783,2417],{"class":2077},[228,20785,239],{"class":238},[228,20787,2422],{"class":343},[228,20789,2833],{"class":238},[228,20791,20792],{"class":230,"line":9913},[228,20793,2514],{"emptyLinePlaceholder":157},[228,20795,20796,20798,20800],{"class":230,"line":9918},[228,20797,4204],{"class":234},[228,20799,4207],{"class":287},[228,20801,1404],{"class":238},[228,20803,20804],{"class":230,"line":9927},[228,20805,1679],{"class":238},[200,20807,20809],{"id":20808},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,20811,20812],{},"浅拷贝：简单的赋值拷贝操作",[19,20814,20815],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[220,20817,20819],{"className":222,"code":20818,"language":224,"meta":141,"style":141},"#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",[30,20820,20821,20827,20837,20843,20847,20851,20856,20862,20866,20879,20883,20887,20894,20898,20908,20923,20936,20940,20945,20950,20966,20970,20983,20988,20993,20998,21007,21012,21027,21031,21035,21039,21045,21049,21054,21069,21073,21084,21098,21102,21111,21115,21121,21133,21137,21145,21149,21166,21197,21205,21233,21237,21241,21249,21253,21259],{"__ignoreMap":141},[228,20822,20823,20825],{"class":230,"line":231},[228,20824,2063],{"class":234},[228,20826,2066],{"class":343},[228,20828,20829,20831,20833,20835],{"class":230,"line":142},[228,20830,2071],{"class":234},[228,20832,2074],{"class":234},[228,20834,2078],{"class":2077},[228,20836,1404],{"class":238},[228,20838,20839,20841],{"class":230,"line":1293},[228,20840,14809],{"class":234},[228,20842,15286],{"class":2077},[228,20844,20845],{"class":230,"line":1308},[228,20846,1660],{"class":238},[228,20848,20849],{"class":230,"line":1314},[228,20850,14831],{"class":234},[228,20852,20853],{"class":230,"line":1328},[228,20854,20855],{"class":297},"    \u002F\u002F默认构造函数\n",[228,20857,20858,20860],{"class":230,"line":1334},[228,20859,18634],{"class":2077},[228,20861,2090],{"class":238},[228,20863,20864],{"class":230,"line":1425},[228,20865,2144],{"class":238},[228,20867,20868,20870,20872,20875,20877],{"class":230,"line":1431},[228,20869,3565],{"class":238},[228,20871,1282],{"class":234},[228,20873,20874],{"class":343},"\"默认构造函数\"",[228,20876,1282],{"class":234},[228,20878,1305],{"class":238},[228,20880,20881],{"class":230,"line":1443},[228,20882,2301],{"class":238},[228,20884,20885],{"class":230,"line":1726},[228,20886,20458],{"class":297},[228,20888,20889,20891],{"class":230,"line":1731},[228,20890,18667],{"class":2077},[228,20892,20893],{"class":238},"(int age,int height)\n",[228,20895,20896],{"class":230,"line":1737},[228,20897,2144],{"class":238},[228,20899,20900,20903,20905],{"class":230,"line":1742},[228,20901,20902],{"class":238},"        m_Age",[228,20904,284],{"class":234},[228,20906,20907],{"class":238},"age;\n",[228,20909,20910,20913,20915,20917,20920],{"class":230,"line":1756},[228,20911,20912],{"class":238},"        m_Height",[228,20914,11832],{"class":234},[228,20916,2496],{"class":234},[228,20918,20919],{"class":238},"(height);",[228,20921,20922],{"class":297},"\u002F\u002F放到堆区\n",[228,20924,20925,20927,20929,20932,20934],{"class":230,"line":1761},[228,20926,3565],{"class":238},[228,20928,1282],{"class":234},[228,20930,20931],{"class":343},"\"有参构造函数\"",[228,20933,1282],{"class":234},[228,20935,1305],{"class":238},[228,20937,20938],{"class":230,"line":1767},[228,20939,2301],{"class":238},[228,20941,20942],{"class":230,"line":1788},[228,20943,20944],{"class":297},"    \u002F\u002F深拷贝解决上述问题\n",[228,20946,20947],{"class":230,"line":1793},[228,20948,20949],{"class":297},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[228,20951,20952,20954,20956,20958,20960,20962,20964],{"class":230,"line":1807},[228,20953,18634],{"class":2077},[228,20955,239],{"class":238},[228,20957,6907],{"class":234},[228,20959,15684],{"class":2077},[228,20961,10699],{"class":234},[228,20963,19],{"class":5331},[228,20965,245],{"class":238},[228,20967,20968],{"class":230,"line":1812},[228,20969,2144],{"class":238},[228,20971,20972,20974,20976,20979,20981],{"class":230,"line":1841},[228,20973,3565],{"class":238},[228,20975,1282],{"class":234},[228,20977,20978],{"class":343},"\"拷贝构造函数\"",[228,20980,1282],{"class":234},[228,20982,1305],{"class":238},[228,20984,20985],{"class":230,"line":1846},[228,20986,20987],{"class":297},"        \u002F\u002F编译器默认的写如下注释部分\n",[228,20989,20990],{"class":230,"line":1863},[228,20991,20992],{"class":297},"        \u002F\u002Fm_Age=p.m_Age;\n",[228,20994,20995],{"class":230,"line":1868},[228,20996,20997],{"class":297},"        \u002F\u002Fm_Height=p.m_Height;\n",[228,20999,21000,21002,21004],{"class":230,"line":1873},[228,21001,20902],{"class":238},[228,21003,284],{"class":234},[228,21005,21006],{"class":238},"p.m_Age;\n",[228,21008,21009],{"class":230,"line":1878},[228,21010,21011],{"class":297},"        \u002F\u002F深拷贝操作\n",[228,21013,21014,21016,21018,21020,21022,21024],{"class":230,"line":1892},[228,21015,20912],{"class":238},[228,21017,11832],{"class":234},[228,21019,2496],{"class":234},[228,21021,239],{"class":238},[228,21023,693],{"class":234},[228,21025,21026],{"class":238},"p.m_Height);\n",[228,21028,21029],{"class":230,"line":1897},[228,21030,2301],{"class":238},[228,21032,21033],{"class":230,"line":2691},[228,21034,2514],{"emptyLinePlaceholder":157},[228,21036,21037],{"class":230,"line":2705},[228,21038,18662],{"class":297},[228,21040,21041,21043],{"class":230,"line":2713},[228,21042,18667],{"class":2077},[228,21044,2090],{"class":238},[228,21046,21047],{"class":230,"line":2718},[228,21048,2144],{"class":238},[228,21050,21051],{"class":230,"line":2724},[228,21052,21053],{"class":297},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[228,21055,21056,21058,21061,21064,21067],{"class":230,"line":2730},[228,21057,2611],{"class":234},[228,21059,21060],{"class":238},"(m_Height ",[228,21062,21063],{"class":234},"!=",[228,21065,21066],{"class":287}," NULL",[228,21068,245],{"class":238},[228,21070,21071],{"class":230,"line":2735},[228,21072,2624],{"class":238},[228,21074,21075,21078,21081],{"class":230,"line":8063},[228,21076,21077],{"class":234},"            delete",[228,21079,21080],{"class":238}," m_Height;",[228,21082,21083],{"class":297}," \u002F\u002F释放堆区内存\n",[228,21085,21086,21089,21091,21093,21095],{"class":230,"line":8087},[228,21087,21088],{"class":238},"            m_Height",[228,21090,284],{"class":234},[228,21092,2506],{"class":287},[228,21094,294],{"class":238},[228,21096,21097],{"class":297}," \u002F\u002F防止野指针\n",[228,21099,21100],{"class":230,"line":8092},[228,21101,2643],{"class":238},[228,21103,21104,21106,21108],{"class":230,"line":8098},[228,21105,3565],{"class":238},[228,21107,1282],{"class":234},[228,21109,21110],{"class":343},"\"Person的析构函数调用\"\n",[228,21112,21113],{"class":230,"line":8125},[228,21114,2301],{"class":238},[228,21116,21117,21119],{"class":230,"line":8130},[228,21118,2099],{"class":234},[228,21120,15781],{"class":238},[228,21122,21123,21125,21127,21130],{"class":230,"line":8136},[228,21124,2099],{"class":234},[228,21126,6633],{"class":234},[228,21128,21129],{"class":238},"m_Height;",[228,21131,21132],{"class":297}," \u002F\u002F定义一个指针，指向身高\n",[228,21134,21135],{"class":230,"line":8148},[228,21136,4109],{"class":238},[228,21138,21139,21141,21143],{"class":230,"line":8160},[228,21140,5479],{"class":234},[228,21142,5703],{"class":2077},[228,21144,2090],{"class":238},[228,21146,21147],{"class":230,"line":8172},[228,21148,1660],{"class":238},[228,21150,21151,21153,21155,21157,21159,21161,21164],{"class":230,"line":9831},[228,21152,19546],{"class":238},[228,21154,7245],{"class":2077},[228,21156,239],{"class":238},[228,21158,888],{"class":287},[228,21160,616],{"class":238},[228,21162,21163],{"class":287},"160",[228,21165,2833],{"class":238},[228,21167,21168,21170,21172,21175,21177,21180,21182,21185,21187,21190,21192,21194],{"class":230,"line":9856},[228,21169,1665],{"class":238},[228,21171,1282],{"class":234},[228,21173,21174],{"class":343},"\"p1的年龄为:\"",[228,21176,1282],{"class":234},[228,21178,21179],{"class":238},"p1.m_Age",[228,21181,1282],{"class":234},[228,21183,21184],{"class":343},"\"身高为：\"",[228,21186,6534],{"class":234},[228,21188,21189],{"class":238},"p1.m_Height",[228,21191,1282],{"class":234},[228,21193,1352],{"class":238},[228,21195,21196],{"class":297},"  \u002F\u002F18\n",[228,21198,21199,21201,21203],{"class":230,"line":9879},[228,21200,19546],{"class":238},[228,21202,7148],{"class":2077},[228,21204,17630],{"class":238},[228,21206,21207,21209,21211,21214,21216,21218,21220,21222,21224,21227,21229,21231],{"class":230,"line":9903},[228,21208,1665],{"class":238},[228,21210,1282],{"class":234},[228,21212,21213],{"class":343},"\"p2的年龄为：\"",[228,21215,1282],{"class":234},[228,21217,19576],{"class":238},[228,21219,1282],{"class":234},[228,21221,21184],{"class":343},[228,21223,6534],{"class":234},[228,21225,21226],{"class":238},"p2.m_Height",[228,21228,1282],{"class":234},[228,21230,1352],{"class":238},[228,21232,21196],{"class":297},[228,21234,21235],{"class":230,"line":9908},[228,21236,13325],{"class":238},[228,21238,21239],{"class":230,"line":9913},[228,21240,1679],{"class":238},[228,21242,21243,21245,21247],{"class":230,"line":9918},[228,21244,242],{"class":234},[228,21246,2087],{"class":2077},[228,21248,2090],{"class":238},[228,21250,21251],{"class":230,"line":9927},[228,21252,1660],{"class":238},[228,21254,21255,21257],{"class":230,"line":9932},[228,21256,5748],{"class":2077},[228,21258,5751],{"class":238},[228,21260,21261],{"class":230,"line":9938},[228,21262,1679],{"class":238},[19,21264,21265],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,21267,21268],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,21270,21271],{},[1576,21272],{"alt":141,"src":21273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,21275,21276],{},"浅拷贝问题要使用深拷贝来解决",[19,21278,21279],{},[1576,21280],{"alt":141,"src":21281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,21283,21284],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[200,21286,21288],{"id":21287},"_826初始化列表","8.2.6初始化列表",[19,21290,21291],{},"作用：初始化属性",[19,21293,5296],{},[220,21295,21298],{"className":21296,"code":21297,"language":5302},[5300],"构造函数():属性1(值1),属性2(值2).....{}\n",[30,21299,21297],{"__ignoreMap":141},[19,21301,21302],{},"例子",[220,21304,21306],{"className":222,"code":21305,"language":224,"meta":141,"style":141},"#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",[30,21307,21308,21314,21324,21330,21334,21339,21343,21348,21353,21358,21363,21368,21373,21377,21382,21387,21430,21439,21457,21475,21493,21497,21501,21508,21515,21522,21526,21530,21538,21542,21546,21566,21575,21579,21583,21593,21597,21605],{"__ignoreMap":141},[228,21309,21310,21312],{"class":230,"line":231},[228,21311,2063],{"class":234},[228,21313,2066],{"class":343},[228,21315,21316,21318,21320,21322],{"class":230,"line":142},[228,21317,2071],{"class":234},[228,21319,2074],{"class":234},[228,21321,2078],{"class":2077},[228,21323,1404],{"class":238},[228,21325,21326,21328],{"class":230,"line":1293},[228,21327,14809],{"class":234},[228,21329,15286],{"class":2077},[228,21331,21332],{"class":230,"line":1308},[228,21333,1660],{"class":238},[228,21335,21336],{"class":230,"line":1314},[228,21337,21338],{"class":234},"    public:\n",[228,21340,21341],{"class":230,"line":1328},[228,21342,2514],{"emptyLinePlaceholder":157},[228,21344,21345],{"class":230,"line":1334},[228,21346,21347],{"class":297},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[228,21349,21350],{"class":230,"line":1425},[228,21351,21352],{"class":297},"    \u002F\u002FPerson(int a, int b, int c) {\n",[228,21354,21355],{"class":230,"line":1431},[228,21356,21357],{"class":297},"    \u002F\u002F  m_A = a;\n",[228,21359,21360],{"class":230,"line":1443},[228,21361,21362],{"class":297},"    \u002F\u002F  m_B = b;\n",[228,21364,21365],{"class":230,"line":1726},[228,21366,21367],{"class":297},"    \u002F\u002F  m_C = c;\n",[228,21369,21370],{"class":230,"line":1731},[228,21371,21372],{"class":297},"    \u002F\u002F}\n",[228,21374,21375],{"class":230,"line":1737},[228,21376,2514],{"emptyLinePlaceholder":157},[228,21378,21379],{"class":230,"line":1742},[228,21380,21381],{"class":297},"    \u002F\u002F初始化列表方式初始化\n",[228,21383,21384],{"class":230,"line":1756},[228,21385,21386],{"class":297},"    \u002F\u002F使用有参构造函数\n",[228,21388,21389,21391,21393,21395,21397,21399,21401,21403,21405,21407,21409,21412,21415,21418,21421,21424,21427],{"class":230,"line":1761},[228,21390,18634],{"class":2077},[228,21392,239],{"class":238},[228,21394,242],{"class":234},[228,21396,1512],{"class":5331},[228,21398,12550],{"class":238},[228,21400,242],{"class":234},[228,21402,2947],{"class":5331},[228,21404,12550],{"class":238},[228,21406,242],{"class":234},[228,21408,2963],{"class":5331},[228,21410,21411],{"class":238},") :",[228,21413,21414],{"class":2077},"m_A",[228,21416,21417],{"class":238},"(a), ",[228,21419,21420],{"class":2077},"m_B",[228,21422,21423],{"class":238},"(b), ",[228,21425,21426],{"class":2077},"m_C",[228,21428,21429],{"class":238},"(c) {}\n",[228,21431,21432,21434,21437],{"class":230,"line":1767},[228,21433,15024],{"class":234},[228,21435,21436],{"class":2077}," PrintPerson",[228,21438,10968],{"class":238},[228,21440,21441,21443,21445,21448,21450,21453,21455],{"class":230,"line":1788},[228,21442,9784],{"class":238},[228,21444,1282],{"class":234},[228,21446,21447],{"class":343}," \"mA:\"",[228,21449,1558],{"class":234},[228,21451,21452],{"class":238}," m_A ",[228,21454,1282],{"class":234},[228,21456,8955],{"class":238},[228,21458,21459,21461,21463,21466,21468,21471,21473],{"class":230,"line":1793},[228,21460,9784],{"class":238},[228,21462,1282],{"class":234},[228,21464,21465],{"class":343}," \"mB:\"",[228,21467,1558],{"class":234},[228,21469,21470],{"class":238}," m_B ",[228,21472,1282],{"class":234},[228,21474,8955],{"class":238},[228,21476,21477,21479,21481,21484,21486,21489,21491],{"class":230,"line":1807},[228,21478,9784],{"class":238},[228,21480,1282],{"class":234},[228,21482,21483],{"class":343}," \"mC:\"",[228,21485,1558],{"class":234},[228,21487,21488],{"class":238}," m_C ",[228,21490,1282],{"class":234},[228,21492,8955],{"class":238},[228,21494,21495],{"class":230,"line":1812},[228,21496,2301],{"class":238},[228,21498,21499],{"class":230,"line":1841},[228,21500,15337],{"class":234},[228,21502,21503,21505],{"class":230,"line":1846},[228,21504,2099],{"class":234},[228,21506,21507],{"class":238}," m_A;\n",[228,21509,21510,21512],{"class":230,"line":1863},[228,21511,2099],{"class":234},[228,21513,21514],{"class":238}," m_B;\n",[228,21516,21517,21519],{"class":230,"line":1868},[228,21518,2099],{"class":234},[228,21520,21521],{"class":238}," m_C;\n",[228,21523,21524],{"class":230,"line":1873},[228,21525,4109],{"class":238},[228,21527,21528],{"class":230,"line":1878},[228,21529,2514],{"emptyLinePlaceholder":157},[228,21531,21532,21534,21536],{"class":230,"line":1892},[228,21533,242],{"class":234},[228,21535,2087],{"class":2077},[228,21537,6093],{"class":238},[228,21539,21540],{"class":230,"line":1897},[228,21541,1660],{"class":238},[228,21543,21544],{"class":230,"line":2691},[228,21545,2514],{"emptyLinePlaceholder":157},[228,21547,21548,21550,21552,21554,21556,21558,21560,21562,21564],{"class":230,"line":2705},[228,21549,19546],{"class":238},[228,21551,19],{"class":2077},[228,21553,239],{"class":238},[228,21555,456],{"class":287},[228,21557,12550],{"class":238},[228,21559,316],{"class":287},[228,21561,12550],{"class":238},[228,21563,310],{"class":287},[228,21565,2833],{"class":238},[228,21567,21568,21570,21573],{"class":230,"line":2713},[228,21569,15981],{"class":238},[228,21571,21572],{"class":2077},"PrintPerson",[228,21574,5751],{"class":238},[228,21576,21577],{"class":230,"line":2718},[228,21578,2514],{"emptyLinePlaceholder":157},[228,21580,21581],{"class":230,"line":2724},[228,21582,2514],{"emptyLinePlaceholder":157},[228,21584,21585,21587,21589,21591],{"class":230,"line":2730},[228,21586,2417],{"class":2077},[228,21588,239],{"class":238},[228,21590,2422],{"class":343},[228,21592,2833],{"class":238},[228,21594,21595],{"class":230,"line":2735},[228,21596,2514],{"emptyLinePlaceholder":157},[228,21598,21599,21601,21603],{"class":230,"line":8063},[228,21600,4204],{"class":234},[228,21602,4207],{"class":287},[228,21604,1404],{"class":238},[228,21606,21607],{"class":230,"line":8087},[228,21608,1679],{"class":238},[19,21610,21611,21612,21615,21616],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[388,21613,21614],{},"参数名就是定义的对象属性","，",[388,21617,21618],{},"属性后面的值为有参构造函数的形参",[220,21620,21622],{"className":222,"code":21621,"language":224,"meta":141,"style":141},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[30,21623,21624],{"__ignoreMap":141},[228,21625,21626,21628,21630,21632,21635,21637,21640,21642,21645,21647,21650,21652,21655,21657],{"class":230,"line":231},[228,21627,19161],{"class":2077},[228,21629,239],{"class":238},[228,21631,242],{"class":234},[228,21633,21634],{"class":238}," a.",[228,21636,242],{"class":234},[228,21638,21639],{"class":238}," b,",[228,21641,242],{"class":234},[228,21643,21644],{"class":238}," b):",[228,21646,21414],{"class":2077},[228,21648,21649],{"class":238},"(a),",[228,21651,21420],{"class":2077},[228,21653,21654],{"class":238},"(c),",[228,21656,21426],{"class":2077},[228,21658,21659],{"class":238},"(b) {}\n",[200,21661,21663],{"id":21662},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,21665,21666],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,21668,14748],{},[220,21670,21672],{"className":222,"code":21671,"language":224,"meta":141,"style":141},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[30,21673,21674,21679,21684,21688,21693,21697],{"__ignoreMap":141},[228,21675,21676],{"class":230,"line":231},[228,21677,21678],{"class":238},"A{};\n",[228,21680,21681],{"class":230,"line":142},[228,21682,21683],{"class":238},"B\n",[228,21685,21686],{"class":230,"line":1293},[228,21687,1660],{"class":238},[228,21689,21690],{"class":230,"line":1308},[228,21691,21692],{"class":238},"    A a;\n",[228,21694,21695],{"class":230,"line":1314},[228,21696,1679],{"class":238},[228,21698,21699],{"class":230,"line":1328},[228,21700,21701],{"class":297},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,21703,21704],{},"案例",[220,21706,21708],{"className":222,"code":21707,"language":224,"meta":141,"style":141},"\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",[30,21709,21710,21715,21722,21726,21731,21736,21750,21754,21764,21775,21779,21786,21790,21803,21807,21812,21817,21821,21827,21831,21835,21839,21870,21874,21885,21889,21895,21899,21912,21916,21920,21924,21929,21934,21938,21946,21950,21967,21986,21990,21998,22002,22008],{"__ignoreMap":141},[228,21711,21712],{"class":230,"line":231},[228,21713,21714],{"class":297},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[228,21716,21717,21719],{"class":230,"line":142},[228,21718,14809],{"class":234},[228,21720,21721],{"class":2077}," Phone\n",[228,21723,21724],{"class":230,"line":1293},[228,21725,1660],{"class":238},[228,21727,21728],{"class":230,"line":1308},[228,21729,21730],{"class":238},"public：\n",[228,21732,21733],{"class":230,"line":1314},[228,21734,21735],{"class":297},"    \u002F\u002F 赋值(构造函数)\n",[228,21737,21738,21741,21743,21745,21748],{"class":230,"line":1328},[228,21739,21740],{"class":2077},"    Phone",[228,21742,239],{"class":238},[228,21744,15032],{"class":2077},[228,21746,21747],{"class":5331}," pName",[228,21749,245],{"class":238},[228,21751,21752],{"class":230,"line":1334},[228,21753,2144],{"class":238},[228,21755,21756,21759,21761],{"class":230,"line":1425},[228,21757,21758],{"class":238},"        m_pName",[228,21760,284],{"class":234},[228,21762,21763],{"class":238},"pName;\n",[228,21765,21766,21768,21770,21773],{"class":230,"line":1431},[228,21767,3565],{"class":238},[228,21769,1282],{"class":234},[228,21771,21772],{"class":343},"\"Phone的构造函数调用\"",[228,21774,1404],{"class":238},[228,21776,21777],{"class":230,"line":1443},[228,21778,2301],{"class":238},[228,21780,21781,21784],{"class":230,"line":1726},[228,21782,21783],{"class":2077},"    ~Phone",[228,21785,2090],{"class":238},[228,21787,21788],{"class":230,"line":1731},[228,21789,2144],{"class":238},[228,21791,21792,21794,21796,21799,21801],{"class":230,"line":1737},[228,21793,3565],{"class":238},[228,21795,1282],{"class":234},[228,21797,21798],{"class":343},"\"Phone析构函数调用\"",[228,21800,1282],{"class":234},[228,21802,1305],{"class":238},[228,21804,21805],{"class":230,"line":1742},[228,21806,2301],{"class":238},[228,21808,21809],{"class":230,"line":1756},[228,21810,21811],{"class":297},"    \u002F\u002F\n",[228,21813,21814],{"class":230,"line":1761},[228,21815,21816],{"class":238},"    string m_PName;\n",[228,21818,21819],{"class":230,"line":1767},[228,21820,4109],{"class":238},[228,21822,21823,21825],{"class":230,"line":1788},[228,21824,14809],{"class":234},[228,21826,15286],{"class":2077},[228,21828,21829],{"class":230,"line":1793},[228,21830,1660],{"class":238},[228,21832,21833],{"class":230,"line":1807},[228,21834,14831],{"class":234},[228,21836,21837],{"class":230,"line":1812},[228,21838,17109],{"class":297},[228,21840,21841,21843,21845,21847,21849,21851,21853,21856,21859,21861,21864,21867],{"class":230,"line":1841},[228,21842,18634],{"class":2077},[228,21844,239],{"class":238},[228,21846,15032],{"class":2077},[228,21848,15035],{"class":5331},[228,21850,616],{"class":238},[228,21852,15032],{"class":2077},[228,21854,21855],{"class":5331}," pname",[228,21857,21858],{"class":238},"):",[228,21860,15125],{"class":2077},[228,21862,21863],{"class":238},"(name),m_phone.",[228,21865,21866],{"class":2077},"m_PName",[228,21868,21869],{"class":238},"(pname) \n",[228,21871,21872],{"class":230,"line":1846},[228,21873,2144],{"class":238},[228,21875,21876,21878,21880,21883],{"class":230,"line":1863},[228,21877,3565],{"class":238},[228,21879,1282],{"class":234},[228,21881,21882],{"class":343},"\"Person的构造函数调用\"",[228,21884,1404],{"class":238},[228,21886,21887],{"class":230,"line":1868},[228,21888,2301],{"class":238},[228,21890,21891,21893],{"class":230,"line":1873},[228,21892,18667],{"class":2077},[228,21894,2090],{"class":238},[228,21896,21897],{"class":230,"line":1878},[228,21898,2144],{"class":238},[228,21900,21901,21903,21905,21908,21910],{"class":230,"line":1892},[228,21902,3565],{"class":238},[228,21904,1282],{"class":234},[228,21906,21907],{"class":343},"\"Person析构函数调用\"",[228,21909,1282],{"class":234},[228,21911,1305],{"class":238},[228,21913,21914],{"class":230,"line":1897},[228,21915,2301],{"class":238},[228,21917,21918],{"class":230,"line":2691},[228,21919,7895],{"class":297},[228,21921,21922],{"class":230,"line":2705},[228,21923,15007],{"class":238},[228,21925,21926],{"class":230,"line":2713},[228,21927,21928],{"class":297},"    \u002F\u002F手机\n",[228,21930,21931],{"class":230,"line":2718},[228,21932,21933],{"class":238},"    Phone m_Phone;\n",[228,21935,21936],{"class":230,"line":2724},[228,21937,4109],{"class":238},[228,21939,21940,21942,21944],{"class":230,"line":2730},[228,21941,5479],{"class":234},[228,21943,5703],{"class":2077},[228,21945,2090],{"class":238},[228,21947,21948],{"class":230,"line":2735},[228,21949,1660],{"class":238},[228,21951,21952,21954,21956,21958,21960,21962,21965],{"class":230,"line":8063},[228,21953,19546],{"class":238},[228,21955,19],{"class":2077},[228,21957,239],{"class":238},[228,21959,8031],{"class":343},[228,21961,616],{"class":238},[228,21963,21964],{"class":343},"\"安卓\"",[228,21966,2833],{"class":238},[228,21968,21969,21971,21973,21976,21978,21981,21983],{"class":230,"line":8087},[228,21970,1665],{"class":238},[228,21972,1282],{"class":234},[228,21974,21975],{"class":238},"p.Name",[228,21977,1282],{"class":234},[228,21979,21980],{"class":343},"\"拿着：\"",[228,21982,1282],{"class":234},[228,21984,21985],{"class":238},"p.m_phone.m_PName;\n",[228,21987,21988],{"class":230,"line":8092},[228,21989,1679],{"class":238},[228,21991,21992,21994,21996],{"class":230,"line":8098},[228,21993,242],{"class":234},[228,21995,2087],{"class":2077},[228,21997,2090],{"class":238},[228,21999,22000],{"class":230,"line":8125},[228,22001,1660],{"class":238},[228,22003,22004,22006],{"class":230,"line":8130},[228,22005,5748],{"class":2077},[228,22007,5751],{"class":238},[228,22009,22010],{"class":230,"line":8136},[228,22011,1679],{"class":238},[19,22013,9140],{},[220,22015,22017],{"className":222,"code":22016,"language":224,"meta":141,"style":141},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[30,22018,22019,22024],{"__ignoreMap":141},[228,22020,22021],{"class":230,"line":231},[228,22022,22023],{"class":297},"    \u002F\u002F不需要写这个：\n",[228,22025,22026],{"class":230,"line":142},[228,22027,22028],{"class":297},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,22030,22031],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[220,22033,22035],{"className":222,"code":22034,"language":224,"meta":141,"style":141},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[30,22036,22037],{"__ignoreMap":141},[228,22038,22039,22041,22044,22046,22049,22052],{"class":230,"line":231},[228,22040,19161],{"class":2077},[228,22042,22043],{"class":238},"(string name.string pname):",[228,22045,15125],{"class":2077},[228,22047,22048],{"class":238},"(name),",[228,22050,22051],{"class":2077},"m_phone",[228,22053,22054],{"class":238},"(pname) {}\n",[19,22056,22057,22058,284,22061],{},"采用的是隐式转换法，实际为如下：\n",[30,22059,22060],{},"m_phone(pname)",[30,22062,22063],{},"Phone m_phone=pname",[19,22065,22066,22069],{},[388,22067,22068],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,22071,22072],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[200,22074,22076],{"id":22075},"_828静态对象","8.2.8静态对象",[19,22078,22079],{},"静态对象在成员对象前static，称为静态对象",[19,22081,22082],{},"静态对象分为两类：",[183,22084,22085],{},[186,22086,22087],{},"静态成员变量",[1245,22089,22090,22093,22096],{},[186,22091,22092],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[186,22094,22095],{},"②在编译阶段分配内存",[186,22097,22098],{},"③类内声明，类外初始化",[183,22100,22101],{"start":142},[186,22102,22103],{},"静态成员函数",[1245,22105,22106,22109],{},[186,22107,22108],{},"①所有对象共享同一个函数",[186,22110,22111],{},"②静态成员函数只能访问静态成员变量",[22113,22114,22116],"h4",{"id":22115},"_8281静态成员变量","8.2.8.1静态成员变量",[220,22118,22120],{"className":222,"code":22119,"language":224,"meta":141,"style":141},"#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",[30,22121,22122,22128,22138,22144,22148,22152,22157,22162,22167,22175,22179,22183,22187,22195,22199,22203,22208,22221,22225,22233,22237,22243],{"__ignoreMap":141},[228,22123,22124,22126],{"class":230,"line":231},[228,22125,2063],{"class":234},[228,22127,2066],{"class":343},[228,22129,22130,22132,22134,22136],{"class":230,"line":142},[228,22131,2071],{"class":234},[228,22133,2074],{"class":234},[228,22135,2078],{"class":2077},[228,22137,1404],{"class":238},[228,22139,22140,22142],{"class":230,"line":1293},[228,22141,14809],{"class":234},[228,22143,15286],{"class":2077},[228,22145,22146],{"class":230,"line":1308},[228,22147,1660],{"class":238},[228,22149,22150],{"class":230,"line":1314},[228,22151,14831],{"class":234},[228,22153,22154],{"class":230,"line":1328},[228,22155,22156],{"class":297},"    \u002F\u002F非静态成员变量\n",[228,22158,22159],{"class":230,"line":1334},[228,22160,22161],{"class":297},"    \u002F\u002F int m_A;\n",[228,22163,22164],{"class":230,"line":1425},[228,22165,22166],{"class":297},"    \u002F\u002F定义静态成员变量\n",[228,22168,22169,22171,22173],{"class":230,"line":1431},[228,22170,11135],{"class":234},[228,22172,2496],{"class":234},[228,22174,21507],{"class":238},[228,22176,22177],{"class":230,"line":1443},[228,22178,2514],{"emptyLinePlaceholder":157},[228,22180,22181],{"class":230,"line":1726},[228,22182,2514],{"emptyLinePlaceholder":157},[228,22184,22185],{"class":230,"line":1731},[228,22186,4109],{"class":238},[228,22188,22189,22191,22193],{"class":230,"line":1737},[228,22190,5479],{"class":234},[228,22192,5703],{"class":2077},[228,22194,2090],{"class":238},[228,22196,22197],{"class":230,"line":1742},[228,22198,1660],{"class":238},[228,22200,22201],{"class":230,"line":1756},[228,22202,15428],{"class":238},[228,22204,22205],{"class":230,"line":1761},[228,22206,22207],{"class":297},"    \u002F\u002F输出类成员变量这块内存\n",[228,22209,22210,22212,22214,22217,22219],{"class":230,"line":1767},[228,22211,1665],{"class":238},[228,22213,1282],{"class":234},[228,22215,22216],{"class":238},"p.m_A",[228,22218,1282],{"class":234},[228,22220,1305],{"class":238},[228,22222,22223],{"class":230,"line":1788},[228,22224,1679],{"class":238},[228,22226,22227,22229,22231],{"class":230,"line":1793},[228,22228,242],{"class":234},[228,22230,2087],{"class":2077},[228,22232,2090],{"class":238},[228,22234,22235],{"class":230,"line":1807},[228,22236,1660],{"class":238},[228,22238,22239,22241],{"class":230,"line":1812},[228,22240,5748],{"class":2077},[228,22242,2090],{"class":238},[228,22244,22245],{"class":230,"line":1841},[228,22246,1679],{"class":238},[19,22248,22249],{},"此时输出是报错的：无法解析外部命令",[19,22251,22252],{},"解决这一问题：必须用到类内声明，类外初始化操作",[220,22254,22256],{"className":222,"code":22255,"language":224,"meta":141,"style":141},"#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",[30,22257,22258,22264,22274,22280,22284,22288,22293,22301,22305,22310,22325,22333,22337,22341,22346,22351,22363,22368,22379,22384,22389,22402,22406,22414,22418,22424],{"__ignoreMap":141},[228,22259,22260,22262],{"class":230,"line":231},[228,22261,2063],{"class":234},[228,22263,2066],{"class":343},[228,22265,22266,22268,22270,22272],{"class":230,"line":142},[228,22267,2071],{"class":234},[228,22269,2074],{"class":234},[228,22271,2078],{"class":2077},[228,22273,1404],{"class":238},[228,22275,22276,22278],{"class":230,"line":1293},[228,22277,14809],{"class":234},[228,22279,15286],{"class":2077},[228,22281,22282],{"class":230,"line":1308},[228,22283,1660],{"class":238},[228,22285,22286],{"class":230,"line":1314},[228,22287,14831],{"class":234},[228,22289,22290],{"class":230,"line":1328},[228,22291,22292],{"class":297},"    \u002F\u002F类内声明\n",[228,22294,22295,22297,22299],{"class":230,"line":1334},[228,22296,11135],{"class":234},[228,22298,2496],{"class":234},[228,22300,21507],{"class":238},[228,22302,22303],{"class":230,"line":1425},[228,22304,4109],{"class":238},[228,22306,22307],{"class":230,"line":1431},[228,22308,22309],{"class":297},"\u002F\u002F类外初始化\n",[228,22311,22312,22314,22316,22319,22321,22323],{"class":230,"line":1443},[228,22313,242],{"class":234},[228,22315,15684],{"class":2077},[228,22317,22318],{"class":238},"::m_A",[228,22320,284],{"class":234},[228,22322,684],{"class":287},[228,22324,1404],{"class":238},[228,22326,22327,22329,22331],{"class":230,"line":1726},[228,22328,5479],{"class":234},[228,22330,5703],{"class":2077},[228,22332,2090],{"class":238},[228,22334,22335],{"class":230,"line":1731},[228,22336,1660],{"class":238},[228,22338,22339],{"class":230,"line":1737},[228,22340,15428],{"class":238},[228,22342,22343],{"class":230,"line":1742},[228,22344,22345],{"class":297},"    \u002F\u002F访问变量的原内存空间\n",[228,22347,22348],{"class":230,"line":1756},[228,22349,22350],{"class":297},"    \u002F\u002F100\n",[228,22352,22353,22355,22357,22359,22361],{"class":230,"line":1761},[228,22354,1665],{"class":238},[228,22356,1282],{"class":234},[228,22358,22216],{"class":238},[228,22360,1282],{"class":234},[228,22362,1305],{"class":238},[228,22364,22365],{"class":230,"line":1767},[228,22366,22367],{"class":238},"    Person p2;\n",[228,22369,22370,22373,22375,22377],{"class":230,"line":1788},[228,22371,22372],{"class":238},"    p2.m_A",[228,22374,284],{"class":234},[228,22376,1836],{"class":287},[228,22378,1404],{"class":238},[228,22380,22381],{"class":230,"line":1793},[228,22382,22383],{"class":297},"    \u002F\u002F继续访问这片空间\n",[228,22385,22386],{"class":230,"line":1807},[228,22387,22388],{"class":297},"    \u002F\u002F200\n",[228,22390,22391,22393,22395,22398,22400],{"class":230,"line":1812},[228,22392,1665],{"class":238},[228,22394,1282],{"class":234},[228,22396,22397],{"class":238},"p2.m_A",[228,22399,1282],{"class":234},[228,22401,1305],{"class":238},[228,22403,22404],{"class":230,"line":1841},[228,22405,1679],{"class":238},[228,22407,22408,22410,22412],{"class":230,"line":1846},[228,22409,242],{"class":234},[228,22411,2087],{"class":2077},[228,22413,2090],{"class":238},[228,22415,22416],{"class":230,"line":1863},[228,22417,1660],{"class":238},[228,22419,22420,22422],{"class":230,"line":1868},[228,22421,5748],{"class":2077},[228,22423,5751],{"class":238},[228,22425,22426],{"class":230,"line":1873},[228,22427,1679],{"class":238},[19,22429,22430],{},[388,22431,22432],{},"静态变量的访问",[220,22434,22436],{"className":222,"code":22435,"language":224,"meta":141,"style":141},"#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",[30,22437,22438,22444,22454,22460,22464,22468,22472,22480,22484,22489,22497,22501,22505,22519,22534,22542,22546,22551,22556,22561,22566,22578,22583,22588,22602,22619,22623,22631,22635,22641],{"__ignoreMap":141},[228,22439,22440,22442],{"class":230,"line":231},[228,22441,2063],{"class":234},[228,22443,2066],{"class":343},[228,22445,22446,22448,22450,22452],{"class":230,"line":142},[228,22447,2071],{"class":234},[228,22449,2074],{"class":234},[228,22451,2078],{"class":2077},[228,22453,1404],{"class":238},[228,22455,22456,22458],{"class":230,"line":1293},[228,22457,14809],{"class":234},[228,22459,15286],{"class":2077},[228,22461,22462],{"class":230,"line":1308},[228,22463,1660],{"class":238},[228,22465,22466],{"class":230,"line":1314},[228,22467,14831],{"class":234},[228,22469,22470],{"class":230,"line":1328},[228,22471,22292],{"class":297},[228,22473,22474,22476,22478],{"class":230,"line":1334},[228,22475,11135],{"class":234},[228,22477,2496],{"class":234},[228,22479,21507],{"class":238},[228,22481,22482],{"class":230,"line":1425},[228,22483,15337],{"class":234},[228,22485,22486],{"class":230,"line":1431},[228,22487,22488],{"class":297},"    \u002F\u002F静态成员变量也是有访问权限的\n",[228,22490,22491,22493,22495],{"class":230,"line":1443},[228,22492,11135],{"class":234},[228,22494,2496],{"class":234},[228,22496,21514],{"class":238},[228,22498,22499],{"class":230,"line":1726},[228,22500,4109],{"class":238},[228,22502,22503],{"class":230,"line":1731},[228,22504,22309],{"class":297},[228,22506,22507,22509,22511,22513,22515,22517],{"class":230,"line":1737},[228,22508,242],{"class":234},[228,22510,15684],{"class":2077},[228,22512,22318],{"class":238},[228,22514,284],{"class":234},[228,22516,684],{"class":287},[228,22518,1404],{"class":238},[228,22520,22521,22523,22525,22528,22530,22532],{"class":230,"line":1742},[228,22522,242],{"class":234},[228,22524,15684],{"class":2077},[228,22526,22527],{"class":238},"::m_B",[228,22529,284],{"class":234},[228,22531,938],{"class":287},[228,22533,1404],{"class":238},[228,22535,22536,22538,22540],{"class":230,"line":1756},[228,22537,5479],{"class":234},[228,22539,5772],{"class":2077},[228,22541,2090],{"class":238},[228,22543,22544],{"class":230,"line":1761},[228,22545,1660],{"class":238},[228,22547,22548],{"class":230,"line":1767},[228,22549,22550],{"class":297},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[228,22552,22553],{"class":230,"line":1788},[228,22554,22555],{"class":297},"    \u002F\u002F静态成员变量有两种访问方式：\n",[228,22557,22558],{"class":230,"line":1793},[228,22559,22560],{"class":297},"    \u002F\u002F1.通过对象进行访问\n",[228,22562,22563],{"class":230,"line":1807},[228,22564,22565],{"class":238},"    Person p;  \n",[228,22567,22568,22570,22572,22574,22576],{"class":230,"line":1812},[228,22569,1665],{"class":238},[228,22571,1282],{"class":234},[228,22573,22216],{"class":238},[228,22575,1282],{"class":234},[228,22577,1305],{"class":238},[228,22579,22580],{"class":230,"line":1841},[228,22581,22582],{"class":297},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[228,22584,22585],{"class":230,"line":1846},[228,22586,22587],{"class":297},"    \u002F\u002F2.通过类名进行访问\n",[228,22589,22590,22592,22594,22596,22598,22600],{"class":230,"line":1863},[228,22591,1665],{"class":238},[228,22593,1282],{"class":234},[228,22595,19161],{"class":2077},[228,22597,22318],{"class":238},[228,22599,1282],{"class":234},[228,22601,1305],{"class":238},[228,22603,22604,22606,22608,22610,22612,22614,22616],{"class":230,"line":1868},[228,22605,1665],{"class":238},[228,22607,1282],{"class":234},[228,22609,19161],{"class":2077},[228,22611,22527],{"class":238},[228,22613,1282],{"class":234},[228,22615,1352],{"class":238},[228,22617,22618],{"class":297}," \u002F\u002F没有访问权限，报错\n",[228,22620,22621],{"class":230,"line":1873},[228,22622,1679],{"class":238},[228,22624,22625,22627,22629],{"class":230,"line":1878},[228,22626,242],{"class":234},[228,22628,2087],{"class":2077},[228,22630,2090],{"class":238},[228,22632,22633],{"class":230,"line":1892},[228,22634,1660],{"class":238},[228,22636,22637,22639],{"class":230,"line":1897},[228,22638,5817],{"class":2077},[228,22640,5751],{"class":238},[228,22642,22643],{"class":230,"line":2691},[228,22644,1679],{"class":238},[22113,22646,22648],{"id":22647},"_8282静态成员函数","8.2.8.2静态成员函数",[19,22650,22651],{},"1.静态成员函数定义与访问",[220,22653,22655],{"className":222,"code":22654,"language":224,"meta":141,"style":141},"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",[30,22656,22657,22663,22667,22671,22676,22687,22691,22705,22709,22713,22721,22725,22730,22735,22739,22747,22752,22762],{"__ignoreMap":141},[228,22658,22659,22661],{"class":230,"line":231},[228,22660,14809],{"class":234},[228,22662,15286],{"class":2077},[228,22664,22665],{"class":230,"line":142},[228,22666,1660],{"class":238},[228,22668,22669],{"class":230,"line":1293},[228,22670,14831],{"class":234},[228,22672,22673],{"class":230,"line":1308},[228,22674,22675],{"class":297},"    \u002F\u002F在公共权限下定义静态成员函数\n",[228,22677,22678,22680,22683,22685],{"class":230,"line":1314},[228,22679,11135],{"class":234},[228,22681,22682],{"class":234}," void",[228,22684,11500],{"class":2077},[228,22686,2090],{"class":238},[228,22688,22689],{"class":230,"line":1328},[228,22690,2144],{"class":238},[228,22692,22693,22696,22698,22701,22703],{"class":230,"line":1334},[228,22694,22695],{"class":238},"        coout",[228,22697,1282],{"class":234},[228,22699,22700],{"class":343},"\"静态成员函数的调用\"",[228,22702,1282],{"class":234},[228,22704,1305],{"class":238},[228,22706,22707],{"class":230,"line":1425},[228,22708,2301],{"class":238},[228,22710,22711],{"class":230,"line":1431},[228,22712,4109],{"class":238},[228,22714,22715,22717,22719],{"class":230,"line":1443},[228,22716,5479],{"class":234},[228,22718,5703],{"class":2077},[228,22720,2090],{"class":238},[228,22722,22723],{"class":230,"line":1726},[228,22724,1660],{"class":238},[228,22726,22727],{"class":230,"line":1731},[228,22728,22729],{"class":297},"    \u002F\u002F静态成员函数的调用方式:\n",[228,22731,22732],{"class":230,"line":1737},[228,22733,22734],{"class":297},"    \u002F\u002F1.通过对象访问\n",[228,22736,22737],{"class":230,"line":1742},[228,22738,15428],{"class":238},[228,22740,22741,22743,22745],{"class":230,"line":1756},[228,22742,15981],{"class":238},[228,22744,11666],{"class":2077},[228,22746,5751],{"class":238},[228,22748,22749],{"class":230,"line":1761},[228,22750,22751],{"class":297},"    \u002F\u002F2.通过类名访问\n",[228,22753,22754,22756,22758,22760],{"class":230,"line":1767},[228,22755,18634],{"class":2077},[228,22757,17847],{"class":238},[228,22759,11666],{"class":2077},[228,22761,5751],{"class":238},[228,22763,22764],{"class":230,"line":1788},[228,22765,1679],{"class":238},[183,22767,22768],{"start":142},[186,22769,22770],{},"静态成员函数只能访问静态成员变量",[220,22772,22774],{"className":222,"code":22773,"language":224,"meta":141,"style":141},"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",[30,22775,22776,22782,22786,22790,22794,22804,22808,22822,22827,22839,22843,22854,22864,22868,22872,22876,22886,22890,22903,22907,22911,22915,22919,22933,22941,22945,22949,22953,22957,22965,22969,22979,22984,22988,22996,23000,23006],{"__ignoreMap":141},[228,22777,22778,22780],{"class":230,"line":231},[228,22779,14809],{"class":234},[228,22781,15286],{"class":2077},[228,22783,22784],{"class":230,"line":142},[228,22785,1660],{"class":238},[228,22787,22788],{"class":230,"line":1293},[228,22789,14831],{"class":234},[228,22791,22792],{"class":230,"line":1308},[228,22793,22675],{"class":297},[228,22795,22796,22798,22800,22802],{"class":230,"line":1314},[228,22797,11135],{"class":234},[228,22799,22682],{"class":234},[228,22801,11500],{"class":2077},[228,22803,2090],{"class":238},[228,22805,22806],{"class":230,"line":1328},[228,22807,2144],{"class":238},[228,22809,22810,22813,22815,22817,22819],{"class":230,"line":1334},[228,22811,22812],{"class":238},"        m_A",[228,22814,284],{"class":234},[228,22816,549],{"class":287},[228,22818,294],{"class":238},[228,22820,22821],{"class":297}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[228,22823,22824],{"class":230,"line":1425},[228,22825,22826],{"class":297},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[228,22828,22829,22831,22833,22835,22837],{"class":230,"line":1431},[228,22830,22695],{"class":238},[228,22832,1282],{"class":234},[228,22834,22700],{"class":343},[228,22836,1282],{"class":234},[228,22838,1305],{"class":238},[228,22840,22841],{"class":230,"line":1443},[228,22842,2301],{"class":238},[228,22844,22845,22847,22849,22851],{"class":230,"line":1726},[228,22846,11135],{"class":234},[228,22848,2496],{"class":234},[228,22850,15563],{"class":238},[228,22852,22853],{"class":297}," \u002F\u002F静态成员变量\n",[228,22855,22856,22858,22861],{"class":230,"line":1731},[228,22857,2099],{"class":234},[228,22859,22860],{"class":238}," m_B;",[228,22862,22863],{"class":297}," \u002F\u002F非静态成员变量\n",[228,22865,22866],{"class":230,"line":1737},[228,22867,2514],{"emptyLinePlaceholder":157},[228,22869,22870],{"class":230,"line":1742},[228,22871,15337],{"class":234},[228,22873,22874],{"class":230,"line":1756},[228,22875,22488],{"class":297},[228,22877,22878,22880,22882,22884],{"class":230,"line":1761},[228,22879,11135],{"class":234},[228,22881,22682],{"class":234},[228,22883,13733],{"class":2077},[228,22885,2090],{"class":238},[228,22887,22888],{"class":230,"line":1767},[228,22889,2144],{"class":238},[228,22891,22892,22894,22896,22899,22901],{"class":230,"line":1788},[228,22893,3565],{"class":238},[228,22895,1282],{"class":234},[228,22897,22898],{"class":343},"\"这是私有权限下的静态函数调用\"",[228,22900,1282],{"class":234},[228,22902,1305],{"class":238},[228,22904,22905],{"class":230,"line":1793},[228,22906,2301],{"class":238},[228,22908,22909],{"class":230,"line":1807},[228,22910,2514],{"emptyLinePlaceholder":157},[228,22912,22913],{"class":230,"line":1812},[228,22914,2514],{"emptyLinePlaceholder":157},[228,22916,22917],{"class":230,"line":1841},[228,22918,4109],{"class":238},[228,22920,22921,22923,22925,22927,22929,22931],{"class":230,"line":1846},[228,22922,242],{"class":234},[228,22924,15684],{"class":2077},[228,22926,22318],{"class":238},[228,22928,284],{"class":234},[228,22930,430],{"class":287},[228,22932,1404],{"class":238},[228,22934,22935,22937,22939],{"class":230,"line":1863},[228,22936,5479],{"class":234},[228,22938,5703],{"class":2077},[228,22940,2090],{"class":238},[228,22942,22943],{"class":230,"line":1868},[228,22944,1660],{"class":238},[228,22946,22947],{"class":230,"line":1873},[228,22948,22729],{"class":297},[228,22950,22951],{"class":230,"line":1878},[228,22952,22734],{"class":297},[228,22954,22955],{"class":230,"line":1892},[228,22956,15428],{"class":238},[228,22958,22959,22961,22963],{"class":230,"line":1897},[228,22960,15981],{"class":238},[228,22962,11666],{"class":2077},[228,22964,5751],{"class":238},[228,22966,22967],{"class":230,"line":2691},[228,22968,22751],{"class":297},[228,22970,22971,22973,22975,22977],{"class":230,"line":2705},[228,22972,18634],{"class":2077},[228,22974,17847],{"class":238},[228,22976,11666],{"class":2077},[228,22978,5751],{"class":238},[228,22980,22981],{"class":230,"line":2713},[228,22982,22983],{"class":297},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[228,22985,22986],{"class":230,"line":2718},[228,22987,1679],{"class":238},[228,22989,22990,22992,22994],{"class":230,"line":2724},[228,22991,242],{"class":234},[228,22993,2087],{"class":2077},[228,22995,2090],{"class":238},[228,22997,22998],{"class":230,"line":2730},[228,22999,1660],{"class":238},[228,23001,23002,23004],{"class":230,"line":2735},[228,23003,5748],{"class":2077},[228,23005,5751],{"class":238},[228,23007,23008],{"class":230,"line":8063},[228,23009,1679],{"class":238},[200,23011,23013],{"id":23012},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22113,23015,23017],{"id":23016},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,23019,23020],{},"在c++中，类内的成员变量和成员函数分开存储",[19,23022,23023],{},"只有非静态成员变量才属于类的对象上",[23025,23026,23028],"h5",{"id":23027},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[220,23030,23032],{"className":222,"code":23031,"language":224,"meta":141,"style":141},"#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",[30,23033,23034,23041,23051,23057,23061,23065,23069,23077,23081,23085,23108,23112,23120,23124,23130],{"__ignoreMap":141},[228,23035,23036,23038],{"class":230,"line":231},[228,23037,2063],{"class":234},[228,23039,23040],{"class":343},"\u003Ciostraem>\n",[228,23042,23043,23045,23047,23049],{"class":230,"line":142},[228,23044,2071],{"class":234},[228,23046,2074],{"class":234},[228,23048,2078],{"class":2077},[228,23050,1404],{"class":238},[228,23052,23053,23055],{"class":230,"line":1293},[228,23054,14809],{"class":234},[228,23056,15286],{"class":2077},[228,23058,23059],{"class":230,"line":1308},[228,23060,1660],{"class":238},[228,23062,23063],{"class":230,"line":1314},[228,23064,2514],{"emptyLinePlaceholder":157},[228,23066,23067],{"class":230,"line":1328},[228,23068,4109],{"class":238},[228,23070,23071,23073,23075],{"class":230,"line":1334},[228,23072,5479],{"class":234},[228,23074,5703],{"class":2077},[228,23076,2090],{"class":238},[228,23078,23079],{"class":230,"line":1425},[228,23080,1660],{"class":238},[228,23082,23083],{"class":230,"line":1431},[228,23084,15428],{"class":238},[228,23086,23087,23089,23091,23094,23096,23099,23101,23103,23105],{"class":230,"line":1443},[228,23088,1665],{"class":238},[228,23090,1282],{"class":234},[228,23092,23093],{"class":343},"\"size of p=\"",[228,23095,1282],{"class":234},[228,23097,23098],{"class":2077},"sizeoif",[228,23100,6654],{"class":238},[228,23102,1282],{"class":234},[228,23104,1352],{"class":238},[228,23106,23107],{"class":297}," \u002F\u002F查看这个空类的占用的内存空间\n",[228,23109,23110],{"class":230,"line":1726},[228,23111,1679],{"class":238},[228,23113,23114,23116,23118],{"class":230,"line":1731},[228,23115,242],{"class":234},[228,23117,2087],{"class":2077},[228,23119,2090],{"class":238},[228,23121,23122],{"class":230,"line":1737},[228,23123,1660],{"class":238},[228,23125,23126,23128],{"class":230,"line":1742},[228,23127,5748],{"class":2077},[228,23129,5751],{"class":238},[228,23131,23132],{"class":230,"line":1756},[228,23133,1679],{"class":238},[19,23135,23136],{},"输出结果为：size of p=1",[19,23138,23139],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,23141,23142],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23025,23144,23146],{"id":23145},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[220,23148,23150],{"className":222,"code":23149,"language":224,"meta":141,"style":141},"#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",[30,23151,23152,23158,23168,23176,23180,23189,23193,23201,23205,23209,23228,23232,23236,23244,23248,23254],{"__ignoreMap":141},[228,23153,23154,23156],{"class":230,"line":231},[228,23155,2063],{"class":234},[228,23157,2066],{"class":343},[228,23159,23160,23162,23164,23166],{"class":230,"line":142},[228,23161,2071],{"class":234},[228,23163,2074],{"class":234},[228,23165,2078],{"class":2077},[228,23167,1404],{"class":238},[228,23169,23170,23172,23174],{"class":230,"line":1293},[228,23171,14809],{"class":234},[228,23173,15684],{"class":2077},[228,23175,2788],{"class":238},[228,23177,23178],{"class":230,"line":1308},[228,23179,1660],{"class":238},[228,23181,23182,23184,23186],{"class":230,"line":1314},[228,23183,2099],{"class":234},[228,23185,15563],{"class":238},[228,23187,23188],{"class":297},"\u002F\u002F非静态成员变量\n",[228,23190,23191],{"class":230,"line":1328},[228,23192,4109],{"class":238},[228,23194,23195,23197,23199],{"class":230,"line":1334},[228,23196,5479],{"class":234},[228,23198,5703],{"class":2077},[228,23200,2090],{"class":238},[228,23202,23203],{"class":230,"line":1425},[228,23204,1660],{"class":238},[228,23206,23207],{"class":230,"line":1431},[228,23208,15428],{"class":238},[228,23210,23211,23213,23215,23217,23219,23221,23223,23225],{"class":230,"line":1443},[228,23212,1665],{"class":238},[228,23214,1282],{"class":234},[228,23216,23093],{"class":343},[228,23218,1486],{"class":234},[228,23220,6654],{"class":238},[228,23222,1282],{"class":234},[228,23224,1352],{"class":238},[228,23226,23227],{"class":297}," \u002F\u002F查看不是空对象时占用多少内存\n",[228,23229,23230],{"class":230,"line":1726},[228,23231,2514],{"emptyLinePlaceholder":157},[228,23233,23234],{"class":230,"line":1731},[228,23235,1679],{"class":238},[228,23237,23238,23240,23242],{"class":230,"line":1737},[228,23239,242],{"class":234},[228,23241,2087],{"class":2077},[228,23243,2090],{"class":238},[228,23245,23246],{"class":230,"line":1742},[228,23247,1660],{"class":238},[228,23249,23250,23252],{"class":230,"line":1756},[228,23251,5748],{"class":2077},[228,23253,5751],{"class":238},[228,23255,23256],{"class":230,"line":1761},[228,23257,1679],{"class":238},[19,23259,23260],{},"输出结果：size of p=4",[19,23262,23263],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[183,23265,23266],{},[186,23267,23268],{},"如果加上非静态成员变量，Person类修改如下",[220,23270,23272],{"className":222,"code":23271,"language":224,"meta":141,"style":141},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[30,23273,23274,23280,23284,23290,23298,23302,23307],{"__ignoreMap":141},[228,23275,23276,23278],{"class":230,"line":231},[228,23277,14809],{"class":234},[228,23279,15286],{"class":2077},[228,23281,23282],{"class":230,"line":142},[228,23283,1660],{"class":238},[228,23285,23286,23288],{"class":230,"line":1293},[228,23287,2099],{"class":234},[228,23289,21507],{"class":238},[228,23291,23292,23294,23296],{"class":230,"line":1308},[228,23293,11135],{"class":234},[228,23295,2496],{"class":234},[228,23297,21514],{"class":238},[228,23299,23300],{"class":230,"line":1314},[228,23301,4109],{"class":238},[228,23303,23304],{"class":230,"line":1328},[228,23305,23306],{"class":297},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[228,23308,23309,23311,23313,23315,23317,23319],{"class":230,"line":1334},[228,23310,242],{"class":234},[228,23312,15684],{"class":2077},[228,23314,22527],{"class":238},[228,23316,284],{"class":234},[228,23318,430],{"class":287},[228,23320,1404],{"class":238},[19,23322,23323],{},"输出结果：4",[19,23325,23326],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[183,23328,23329],{"start":142},[186,23330,23331],{},"加上非静态成员函数",[220,23333,23335],{"className":222,"code":23334,"language":224,"meta":141,"style":141},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[30,23336,23337,23344,23348,23354,23362,23366,23370,23374],{"__ignoreMap":141},[228,23338,23339,23341],{"class":230,"line":231},[228,23340,14809],{"class":234},[228,23342,23343],{"class":2077},"  Person\n",[228,23345,23346],{"class":230,"line":142},[228,23347,1660],{"class":238},[228,23349,23350,23352],{"class":230,"line":1293},[228,23351,2099],{"class":234},[228,23353,21507],{"class":238},[228,23355,23356,23358,23360],{"class":230,"line":1308},[228,23357,15024],{"class":234},[228,23359,11500],{"class":2077},[228,23361,2090],{"class":238},[228,23363,23364],{"class":230,"line":1314},[228,23365,2144],{"class":238},[228,23367,23368],{"class":230,"line":1328},[228,23369,2514],{"emptyLinePlaceholder":157},[228,23371,23372],{"class":230,"line":1334},[228,23373,2301],{"class":238},[228,23375,23376],{"class":230,"line":1425},[228,23377,4109],{"class":238},[19,23379,23380],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[183,23382,23383],{"start":1293},[186,23384,23385],{},"加上静态成员函数",[220,23387,23389],{"className":222,"code":23388,"language":224,"meta":141,"style":141},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[30,23390,23391,23397,23401,23407,23415,23419,23423,23427,23438,23442,23446,23450],{"__ignoreMap":141},[228,23392,23393,23395],{"class":230,"line":231},[228,23394,14809],{"class":234},[228,23396,23343],{"class":2077},[228,23398,23399],{"class":230,"line":142},[228,23400,1660],{"class":238},[228,23402,23403,23405],{"class":230,"line":1293},[228,23404,2099],{"class":234},[228,23406,21507],{"class":238},[228,23408,23409,23411,23413],{"class":230,"line":1308},[228,23410,15024],{"class":234},[228,23412,11500],{"class":2077},[228,23414,2090],{"class":238},[228,23416,23417],{"class":230,"line":1314},[228,23418,2144],{"class":238},[228,23420,23421],{"class":230,"line":1328},[228,23422,2514],{"emptyLinePlaceholder":157},[228,23424,23425],{"class":230,"line":1334},[228,23426,2301],{"class":238},[228,23428,23429,23431,23433,23436],{"class":230,"line":1425},[228,23430,11135],{"class":234},[228,23432,22682],{"class":234},[228,23434,23435],{"class":2077}," func1",[228,23437,2090],{"class":238},[228,23439,23440],{"class":230,"line":1431},[228,23441,2144],{"class":238},[228,23443,23444],{"class":230,"line":1443},[228,23445,2514],{"emptyLinePlaceholder":157},[228,23447,23448],{"class":230,"line":1726},[228,23449,2301],{"class":238},[228,23451,23452],{"class":230,"line":1731},[228,23453,4109],{"class":238},[19,23455,23323],{},[19,23457,23458],{},"解释：静态成员函数也不属于类上",[5241,23460,7789],{},{"title":141,"searchDepth":142,"depth":142,"links":23462},[23463,23469],{"id":14760,"depth":142,"text":14761,"children":23464},[23465,23466,23467,23468],{"id":14764,"depth":1293,"text":14765},{"id":15489,"depth":1293,"text":15490},{"id":15661,"depth":1293,"text":15662},{"id":16120,"depth":1293,"text":16121},{"id":18492,"depth":142,"text":18493,"children":23470},[23471,23472,23473,23474,23475,23476,23477,23478,23479],{"id":18504,"depth":1293,"text":18505},{"id":18797,"depth":1293,"text":18798},{"id":19288,"depth":1293,"text":19289},{"id":20385,"depth":1293,"text":20386},{"id":20808,"depth":1293,"text":20809},{"id":21287,"depth":1293,"text":21288},{"id":21662,"depth":1293,"text":21663},{"id":22075,"depth":1293,"text":22076},{"id":23012,"depth":1293,"text":23013},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14725,"description":23480},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23487,"title":224,"body":23488,"description":154,"extension":155,"meta":23492,"navigation":157,"path":23494,"seo":23495,"stem":23496,"__hash__":23497},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23489,"toc":23490},[],{"title":141,"searchDepth":142,"depth":142,"links":23491},[],{"category":23493},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":224,"description":154},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23499,"title":23500,"body":23501,"description":141,"extension":155,"meta":24092,"navigation":157,"path":24093,"seo":24094,"stem":24095,"__hash__":24096},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23502,"toc":24074},[23503,23506,23510,23513,23516,23519,23537,23542,23545,23548,23551,23554,23559,23562,23567,23570,23573,23577,23580,23583,23589,23592,23610,23614,23618,23621,23626,23629,23633,23636,23649,23652,23656,23659,23662,23665,23690,23693,23702,23713,23728,23760,23764,23771,23779,23783,23786,23789,23794,23798,23801,23804,23809,23812,23816,23819,23822,23827,23830,23834,23839,23843,23910,23914,23917,23920,23923,23926,23929,23935,23956,23959,23973,23982,23986,23989,23992,23997,24000,24005,24010,24013,24016,24021,24026,24029,24034,24039,24042,24047,24052,24055,24058,24063,24066,24071],[10,23504,23500],{"id":23505},"_1强化学习基本认识",[14,23507,23509],{"id":23508},"_11什么是强化学习","1.1.什么是强化学习",[19,23511,23512],{},"强化学习有两部分组成：智能体和环境；",[19,23514,23515],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,23517,23518],{},"强化学习与监督学习的区别:",[183,23520,23521,23524,23527,23530],{},[186,23522,23523],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[186,23525,23526],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[186,23528,23529],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[186,23531,23532,23533,23536],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[388,23534,23535],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,23538,23539],{},[1576,23540],{"alt":141,"src":23541},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,23543,23544],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,23546,23547],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,23549,23550],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,23552,23553],{},"获取奖励",[19,23555,23556],{},[1576,23557],{"alt":141,"src":23558},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,23560,23561],{},"强化学习可以分成标准强化学习和深度强化学习",[19,23563,23564],{},[1576,23565],{"alt":141,"src":23566},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,23568,23569],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,23571,23572],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,23574,23576],{"id":23575},"_12强化学习应用场景","1.2.强化学习应用场景",[19,23578,23579],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,23581,23582],{},"具身智能中的应用",[19,23584,23585,23588],{},[388,23586,23587],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,23590,23591],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,23593,23594,23595,23598,23599,23602,23603,23606,23607],{},"机器人是",[388,23596,23597],{},"躯体","，深度学习是",[388,23600,23601],{},"神经元****网络","，VLA是",[388,23604,23605],{},"通用的行为逻辑","，而强化学习是",[388,23608,23609],{},"教练",[14,23611,23613],{"id":23612},"_13序列决策","1.3.序列决策",[200,23615,23617],{"id":23616},"_131智能体与环境","1.3.1.智能体与环境",[19,23619,23620],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,23622,23623],{},[1576,23624],{"alt":141,"src":23625},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,23627,23628],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[200,23630,23632],{"id":23631},"_132奖励","1.3.2.奖励",[19,23634,23635],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,23637,23638,23639,23648],{},"取某个策略的表现如何。强化学习的目的就是",[388,23640,23641,23642,23647],{},"最大化",[388,23643,23644],{},[388,23645,23646],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,23650,23651],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[200,23653,23655],{"id":23654},"_133序列决策","1.3.3.序列决策",[19,23657,23658],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,23660,23661],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,23663,23664],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,23666,23667,23671,23672,23674,23675,23677,23678,23680,23681,13910,23684,13910,23687],{},[23668,23669,23670],"em",{},"Ht"," = ",[23668,23673,834],{},"1*, a",[23668,23676,456],{},", r",[23668,23679,456],{},", . . . ,* ",[23668,23682,23683],{},"ot",[23668,23685,23686],{},", at ,",[23668,23688,23689],{},"rt",[19,23691,23692],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,23694,23695,23671,23698,1772,23700,667],{},[23668,23696,23697],{},"st",[23668,23699,291],{},[23668,23701,23670],{},[19,23703,23704,23705,23708,23709,23712],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[388,23706,23707],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[388,23710,23711],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,23714,23715,23716,23719,23720,23723,23724,23727],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[388,23717,23718],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[388,23721,23722],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23668,23725,23726],{},"S, A, T, R, Ω, O, γ",")。",[19,23729,23730,23731,23733,23734,23736,23737,239,23739,23742,23743,23745,23746,239,23749,23752,23753,23755,23756,23759],{},"其中 ",[23668,23732,927],{}," 表示状态空间，为隐变量，",[23668,23735,470],{}," 为动作空间，",[23668,23738,952],{},[23668,23740,23741],{},"s ′ |s, a",") 为状态转移概率，",[23668,23744,902],{}," 为奖励函数，",[23668,23747,23748],{},"Ω",[23668,23750,23751],{},"o|s, a",") 为观测概率，",[23668,23754,828],{}," 为观测空间，",[23668,23757,23758],{},"γ"," 为折扣因子。",[14,23761,23763],{"id":23762},"_14动作空间","1.4.动作空间",[19,23765,23766,23767,23770],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[388,23768,23769],{},"动作空间"," ，动作空间分为:",[183,23772,23773,23776],{},[186,23774,23775],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[186,23777,23778],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,23780,23782],{"id":23781},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,23784,23785],{},"由策略、价值函数、模型三部分组成",[19,23787,23788],{},"这三者组成马尔可夫决策过程",[19,23790,23791],{},[1576,23792],{"alt":141,"src":23793},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[200,23795,23797],{"id":23796},"_151策略","1.5.1.策略",[19,23799,23800],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,23802,23803],{},"策略可分为两种：",[19,23805,23806],{},[1576,23807],{"alt":141,"src":23808},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,23810,23811],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[200,23813,23815],{"id":23814},"_152价值函数","1.5.2.价值函数",[19,23817,23818],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,23820,23821],{},"价值函数中有一个折扣因子，类似于存款利息",[19,23823,23824],{},[1576,23825],{"alt":141,"src":23826},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,23828,23829],{},"进入某个状态采取的最优动作可以通过Q函数得到",[200,23831,23833],{"id":23832},"_153模型","1.5.3.模型",[19,23835,23836],{},[1576,23837],{"alt":141,"src":23838},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,23840,23842],{"id":23841},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[376,23844,23845,23856],{},[379,23846,23847],{},[382,23848,23849,23853],{},[385,23850,23852],{"align":23851},"left","类型",[385,23854,23855],{"align":23851},"特点",[423,23857,23858,23868,23878,23888,23900],{},[382,23859,23860,23865],{},[428,23861,23862],{"align":23851},[388,23863,23864],{},"基于价值的智能体",[428,23866,23867],{"align":23851},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[382,23869,23870,23875],{},[428,23871,23872],{"align":23851},[388,23873,23874],{},"基于策略的智能体",[428,23876,23877],{"align":23851},"直接学习策略，没有学习价值函数",[382,23879,23880,23885],{},[428,23881,23882],{"align":23851},[388,23883,23884],{},"演员-评论员智能体",[428,23886,23887],{"align":23851},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[382,23889,23890,23895],{},[428,23891,23892],{"align":23851},[388,23893,23894],{},"有模型强化学习智能体",[428,23896,23897],{"align":23851},[1576,23898],{"alt":141,"src":23899},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[382,23901,23902,23907],{},[428,23903,23904],{"align":23851},[388,23905,23906],{},"免模型强化学习智能体",[428,23908,23909],{"align":23851},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,23911,23913],{"id":23912},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,23915,23916],{},"学习和规划是序列决策的两个基本问题",[19,23918,23919],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,23921,23922],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,23924,23925],{},"强化学习用到的库：Gym",[19,23927,23928],{},"Gym可以检验强化学习算法的优劣",[19,23930,23931,23934],{},[388,23932,23933],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[220,23936,23940],{"className":23937,"code":23938,"language":23939,"meta":141,"style":141},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[30,23941,23942],{"__ignoreMap":141},[228,23943,23944,23947,23950,23953],{"class":230,"line":231},[228,23945,23946],{"class":2077},"pip",[228,23948,23949],{"class":343}," install",[228,23951,23952],{"class":343}," gym==",[228,23954,23955],{"class":287},"0.25.2\n",[19,23957,23958],{},"显示图形界面需要",[220,23960,23962],{"className":23937,"code":23961,"language":23939,"meta":141,"style":141},"pip install pygame\n",[30,23963,23964],{"__ignoreMap":141},[228,23965,23966,23968,23970],{"class":230,"line":231},[228,23967,23946],{"class":2077},[228,23969,23949],{"class":343},[228,23971,23972],{"class":343}," pygame\n",[19,23974,23975,23976],{},"有关Gym库的相关文档介绍：",[476,23977,23981],{"href":23978,"rel":23979},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[23980],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,23983,23985],{"id":23984},"_18一些补充基础概念","1.8.一些补充基础概念",[19,23987,23988],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,23990,23991],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,23993,23994],{},[1576,23995],{"alt":141,"src":23996},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,23998,23999],{},"折扣率需要自己来设定",[19,24001,24002],{},[1576,24003],{"alt":141,"src":24004},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[183,24006,24007],{},[186,24008,24009],{},"状态转移函数：",[19,24011,24012],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,24014,24015],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,24017,24018],{},[1576,24019],{"alt":141,"src":24020},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[183,24022,24023],{"start":142},[186,24024,24025],{},"动作价值函数：",[19,24027,24028],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,24030,24031],{},[1576,24032],{"alt":141,"src":24033},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[183,24035,24036],{"start":1293},[186,24037,24038],{},"最优动作价值函数：",[19,24040,24041],{},"这个函数是对QΠ关于策略Π求最大化，表示不管用什么样的策略函数Π，要使agent在当前状态St下做动作at，回报Ut的期望顶多为Q*，而且Q*函数跟策略函数中的Π是无关的，只要agent现在做了动作a，那么Q*(St,at)就是最好的结果，即使现在你将策略函数Π改进的再好，获得的期望汇报Ut也不可能比Q*(St,at)更好；Q*反映了基于当前状态St做出at的好坏程度，也就是说Q*函数可以指导agent做决策：agent观测当前的状态st，Q*函数会给所有的动作打分，agent会基于这个分数来做决策，这样期望回报会最大化",[19,24043,24044],{},[1576,24045],{"alt":141,"src":24046},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[183,24048,24049],{"start":1308},[186,24050,24051],{},"状态价值函数:",[19,24053,24054],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,24056,24057],{},"它衡量的是“一个具体动作”的长期价值",[19,24059,24060],{},[1576,24061],{"alt":141,"src":24062},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,24064,24065],{},"几个价值函数之间的比较：",[19,24067,24068],{},[1576,24069],{"alt":141,"src":24070},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[5241,24072,24073],{},"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":141,"searchDepth":142,"depth":142,"links":24075},[24076,24077,24078,24083,24084,24089,24090,24091],{"id":23508,"depth":142,"text":23509},{"id":23575,"depth":142,"text":23576},{"id":23612,"depth":142,"text":23613,"children":24079},[24080,24081,24082],{"id":23616,"depth":1293,"text":23617},{"id":23631,"depth":1293,"text":23632},{"id":23654,"depth":1293,"text":23655},{"id":23762,"depth":142,"text":23763},{"id":23781,"depth":142,"text":23782,"children":24085},[24086,24087,24088],{"id":23796,"depth":1293,"text":23797},{"id":23814,"depth":1293,"text":23815},{"id":23832,"depth":1293,"text":23833},{"id":23841,"depth":142,"text":23842},{"id":23912,"depth":142,"text":23913},{"id":23984,"depth":142,"text":23985},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23500,"description":141},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24098,"title":24099,"body":24100,"description":24107,"extension":155,"meta":24118,"navigation":157,"path":24119,"seo":24120,"stem":24121,"__hash__":24122},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24101,"toc":24116},[24102,24105,24108,24113],[10,24103,24099],{"id":24104},"_2马尔可夫决策过程",[19,24106,24107],{},"这是强化学习的基本框架",[19,24109,24110],{},[1576,24111],{"alt":141,"src":24112},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,24114,24115],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":141,"searchDepth":142,"depth":142,"links":24117},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24099,"description":24107},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24124,"title":24125,"body":24126,"description":141,"extension":155,"meta":24242,"navigation":157,"path":24243,"seo":24244,"stem":24245,"__hash__":24246},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24127,"toc":24237},[24128,24131,24135,24138,24143,24148,24151,24156,24159,24164,24167,24171,24176,24179,24184,24189,24194,24197,24201,24206,24209,24214,24219,24224,24229,24232],[10,24129,24125],{"id":24130},"_3动作价值函数",[14,24132,24134],{"id":24133},"_31dqn","3.1.DQN",[19,24136,24137],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,24139,24140],{},[1576,24141],{"alt":141,"src":24142},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,24144,24145],{},[1576,24146],{"alt":141,"src":24147},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,24149,24150],{},"DQN算法的描述：",[19,24152,24153],{},[1576,24154],{"alt":141,"src":24155},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,24157,24158],{},"这里的Dense指的是全连接层",[19,24160,24161],{},[1576,24162],{"alt":141,"src":24163},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,24165,24166],{},"当前观测的状态为St，用DQN把St作为输入，给所有的动作打分，选出动作最高的动作作为at，agent做出at动作后，环境会改变状态，用状态转移函数p来随机抽一个新的状态st+1，环境还会告诉我们这一步的奖励Rt，这个奖励可以+-0，奖励是强化学习中的监督信号，DQN要靠这些奖励来训练，有了新的状态St+1，DQN会再对所有的动作打分，agent选择分数最高的动作作为at+1，agent执行at+1后，环境会再更新状态s和再给一个奖励R，然后会继续重复之前的动作 训练DQN的最常用方法是TD算法",[14,24168,24170],{"id":24169},"_32dqn的举例","3.2.DQN的举例",[19,24172,24173],{},[1576,24174],{"alt":141,"src":24175},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,24177,24178],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,24180,24181],{},[1576,24182],{"alt":141,"src":24183},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,24185,24186],{},[1576,24187],{"alt":141,"src":24188},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,24190,24191],{},[1576,24192],{"alt":141,"src":24193},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,24195,24196],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,24198,24200],{"id":24199},"_33td算法","3.3.TD算法",[19,24202,24203],{},[1576,24204],{"alt":141,"src":24205},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,24207,24208],{},"强化学习TD算法公式的粗略解释：",[19,24210,24211],{},[1576,24212],{"alt":141,"src":24213},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,24215,24216],{},[1576,24217],{"alt":141,"src":24218},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,24220,24221],{},[1576,24222],{"alt":141,"src":24223},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,24225,24226],{},[1576,24227],{"alt":141,"src":24228},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,24230,24231],{},"TD算法总结：",[19,24233,24234],{},[1576,24235],{"alt":141,"src":24236},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":141,"searchDepth":142,"depth":142,"links":24238},[24239,24240,24241],{"id":24133,"depth":142,"text":24134},{"id":24169,"depth":142,"text":24170},{"id":24199,"depth":142,"text":24200},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24125,"description":141},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24248,"title":24249,"body":24250,"description":141,"extension":155,"meta":24483,"navigation":157,"path":24484,"seo":24485,"stem":24486,"__hash__":24487},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24251,"toc":24479},[24252,24255,24259,24262,24265,24270,24275,24278,24283,24288,24291,24296,24299,24304,24307,24312,24315,24320,24323,24328,24333,24336,24341,24344,24347,24352,24355,24360,24365,24369,24372,24375,24380,24385,24388,24393,24398,24401,24406,24409,24412,24417,24420,24425,24428,24433,24438,24441,24446,24451,24454,24459,24462,24467,24470],[10,24253,24249],{"id":24254},"_4策略学习",[14,24256,24258],{"id":24257},"_41概念描述","4.1.概念描述",[19,24260,24261],{},"用神经网络（策略网络）近似策略函数",[19,24263,24264],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,24266,24267],{},[1576,24268],{"alt":141,"src":24269},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,24271,24272],{},[1576,24273],{"alt":141,"src":24274},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,24276,24277],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,24279,24280],{},[1576,24281],{"alt":141,"src":24282},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,24284,24285],{},[1576,24286],{"alt":141,"src":24287},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,24289,24290],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,24292,24293],{},[1576,24294],{"alt":141,"src":24295},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,24297,24298],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,24300,24301],{},[1576,24302],{"alt":141,"src":24303},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,24305,24306],{},"改进theta要用到策略梯度算法",[19,24308,24309],{},[1576,24310],{"alt":141,"src":24311},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,24313,24314],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,24316,24317],{},[1576,24318],{"alt":141,"src":24319},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,24321,24322],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,24324,24325],{},[1576,24326],{"alt":141,"src":24327},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,24329,24330],{},[1576,24331],{"alt":141,"src":24332},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,24334,24335],{},"梯度公式总结：",[19,24337,24338],{},[1576,24339],{"alt":141,"src":24340},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,24342,24343],{},"两个公式的分别应用场景：",[19,24345,24346],{},"对于离散的动作：",[19,24348,24349],{},[1576,24350],{"alt":141,"src":24351},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,24353,24354],{},"对于连续的动作：",[19,24356,24357],{},[1576,24358],{"alt":141,"src":24359},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,24361,24362],{},[1576,24363],{"alt":141,"src":24364},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,24366,24368],{"id":24367},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,24370,24371],{},"使用蒙特卡洛来近似计算策略梯度",[19,24373,24374],{},"蒙特卡洛法的解释如下：",[19,24376,24377],{},[1576,24378],{"alt":141,"src":24379},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,24381,24382],{},[1576,24383],{"alt":141,"src":24384},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,24386,24387],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[183,24389,24390],{},[186,24391,24392],{},"方法一：reinforce算法",[19,24394,24395],{},[1576,24396],{"alt":141,"src":24397},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,24399,24400],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[183,24402,24403],{"start":142},[186,24404,24405],{},"方法二：actor-critic算法",[19,24407,24408],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,24410,24411],{},"两个网络的构建：",[19,24413,24414],{},[1576,24415],{"alt":141,"src":24416},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,24418,24419],{},"actor网路：",[19,24421,24422],{},[1576,24423],{"alt":141,"src":24424},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,24426,24427],{},"critic网络",[19,24429,24430],{},[1576,24431],{"alt":141,"src":24432},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[183,24434,24435],{"start":1293},[186,24436,24437],{},"网络的训练",[19,24439,24440],{},"网络描述",[19,24442,24443],{},[1576,24444],{"alt":141,"src":24445},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,24447,24448],{},[1576,24449],{"alt":141,"src":24450},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,24452,24453],{},"TD算法更新梯度：",[19,24455,24456],{},[1576,24457],{"alt":141,"src":24458},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,24460,24461],{},"策略网络更新梯度：",[19,24463,24464],{},[1576,24465],{"alt":141,"src":24466},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,24468,24469],{},"训练整个流程的具体描述：",[19,24471,24472,24475,24476],{},[1576,24473],{"alt":141,"src":24474},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[1576,24477],{"alt":141,"src":24478},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":141,"searchDepth":142,"depth":142,"links":24480},[24481,24482],{"id":24257,"depth":142,"text":24258},{"id":24367,"depth":142,"text":24368},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24249,"description":141},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24489,"title":24490,"body":24491,"description":24498,"extension":155,"meta":24548,"navigation":157,"path":24549,"seo":24550,"stem":24551,"__hash__":24552},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24492,"toc":24544},[24493,24496,24499,24503,24506,24511,24515,24518,24523,24526,24531,24536,24539],[10,24494,24490],{"id":24495},"_5alphago算法",[19,24497,24498],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,24500,24502],{"id":24501},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,24504,24505],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,24507,24508],{},[1576,24509],{"alt":141,"src":24510},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,24512,24514],{"id":24513},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,24516,24517],{},"采用强化学习的方式训练策略网络",[19,24519,24520],{},[1576,24521],{"alt":141,"src":24522},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,24524,24525],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,24527,24528],{},[1576,24529],{"alt":141,"src":24530},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,24532,24533],{},[1576,24534],{"alt":141,"src":24535},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,24537,24538],{},"强化学习训练策略网络的总结：",[19,24540,24541],{},[1576,24542],{"alt":141,"src":24543},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":141,"searchDepth":142,"depth":142,"links":24545},[24546,24547],{"id":24501,"depth":142,"text":24502},{"id":24513,"depth":142,"text":24514},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24490,"description":24498},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24554,"title":24555,"body":24556,"description":24563,"extension":155,"meta":24566,"navigation":157,"path":24567,"seo":24568,"stem":24569,"__hash__":24570},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24557,"toc":24564},[24558,24561],[10,24559,24555],{"id":24560},"_6价值网络",[19,24562,24563],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":141,"searchDepth":142,"depth":142,"links":24565},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24555,"description":24563},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24572,"title":24573,"body":24574,"description":24578,"extension":155,"meta":24579,"navigation":157,"path":24580,"seo":24581,"stem":24582,"__hash__":24583},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24575,"toc":24576},[],{"title":141,"searchDepth":142,"depth":142,"links":24577},[],"记录自己的强化学习笔记。",{"category":23493},"\u002Fwiki\u002F2025-12-04",{"title":24573,"description":24578},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24585,"title":24586,"body":24587,"description":154,"extension":155,"meta":24626,"navigation":157,"path":24627,"seo":24628,"stem":24629,"__hash__":24630},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24588,"toc":24624},[24589,24592,24595,24601,24604,24610,24613,24618,24621],[10,24590,24586],{"id":24591},"_1-项目概览与官方资源",[19,24593,24594],{},"官方文档：",[19,24596,24597],{},[476,24598,24599],{"href":24599,"rel":24600},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[23980],[19,24602,24603],{},"官方代码仓库：",[19,24605,24606],{},[476,24607,24608],{"href":24608,"rel":24609},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[23980],[19,24611,24612],{},"复现大体流程：",[19,24614,24615],{},[1576,24616],{"alt":141,"src":24617},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,24619,24620],{},"本教程的目标是打通这条链路：",[19,24622,24623],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":141,"searchDepth":142,"depth":142,"links":24625},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24586,"description":154},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24632,"title":24633,"body":24634,"description":154,"extension":155,"meta":24750,"navigation":157,"path":24751,"seo":24752,"stem":24753,"__hash__":24754},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24635,"toc":24745},[24636,24639,24643,24646,24653,24657,24660,24669,24679,24683,24713,24716,24742],[10,24637,24633],{"id":24638},"_2-环境准备与设备连接",[14,24640,24642],{"id":24641},"_21-系统与环境","2.1 系统与环境",[19,24644,24645],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,24647,24648,24649,24652],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[30,24650,24651],{},"lerobot"," 依赖。",[14,24654,24656],{"id":24655},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,24658,24659],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[220,24661,24663],{"className":23937,"code":24662,"language":23939,"meta":141,"style":141},"lerobot-find-out\n",[30,24664,24665],{"__ignoreMap":141},[228,24666,24667],{"class":230,"line":231},[228,24668,24662],{"class":2077},[19,24670,24671,24672,451,24675,24678],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[30,24673,24674],{},"\u002Fdev\u002FttyACM0",[30,24676,24677],{},"\u002Fdev\u002FttyACM1","）。",[14,24680,24682],{"id":24681},"_23-串口授权","2.3 串口授权",[220,24684,24686],{"className":23937,"code":24685,"language":23939,"meta":141,"style":141},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[30,24687,24688,24702],{"__ignoreMap":141},[228,24689,24690,24693,24696,24699],{"class":230,"line":231},[228,24691,24692],{"class":2077},"sudo",[228,24694,24695],{"class":343}," chmod",[228,24697,24698],{"class":287}," 666",[228,24700,24701],{"class":343}," \u002Fdev\u002FttyACM0\n",[228,24703,24704,24706,24708,24710],{"class":230,"line":142},[228,24705,24692],{"class":2077},[228,24707,24695],{"class":343},[228,24709,24698],{"class":287},[228,24711,24712],{"class":343}," \u002Fdev\u002FttyACM1\n",[19,24714,24715],{},"说明：",[1245,24717,24718,24723,24729,24739],{},[186,24719,24720,24722],{},[30,24721,24692],{},"：以 root 权限执行命令。",[186,24724,24725,24728],{},[30,24726,24727],{},"chmod","：修改设备节点权限。",[186,24730,24731,24734,24735,24738],{},[30,24732,24733],{},"666","：",[30,24736,24737],{},"rw-rw-rw-","，所有用户可读写。",[186,24740,24741],{},"串口号必须替换为你机器上的真实端口。",[5241,24743,24744],{},"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":141,"searchDepth":142,"depth":142,"links":24746},[24747,24748,24749],{"id":24641,"depth":142,"text":24642},{"id":24655,"depth":142,"text":24656},{"id":24681,"depth":142,"text":24682},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24633,"description":154},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24756,"title":24757,"body":24758,"description":154,"extension":155,"meta":24919,"navigation":157,"path":24920,"seo":24921,"stem":24922,"__hash__":24923},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24759,"toc":24915},[24760,24764,24768,24774,24777,24834,24837,24841,24844,24912],[10,24761,24763],{"id":24762},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,24765,24767],{"id":24766},"_31-配置电机-id","3.1 配置电机 ID",[19,24769,24770,24771,24773],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[30,24772,456],{},"，需要改成机械臂链路里不冲突的编号。",[19,24775,24776],{},"方式一：用 LeRobot 命令逐步写入。",[220,24778,24780],{"className":23937,"code":24779,"language":23939,"meta":141,"style":141},"# 主臂舵机配置 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",[30,24781,24782,24787,24795,24802,24807,24811,24816,24822,24829],{"__ignoreMap":141},[228,24783,24784],{"class":230,"line":231},[228,24785,24786],{"class":297},"# 主臂舵机配置 ID\n",[228,24788,24789,24792],{"class":230,"line":142},[228,24790,24791],{"class":2077},"lerobot-setup-motors",[228,24793,24794],{"class":287}," \\\n",[228,24796,24797,24800],{"class":230,"line":1293},[228,24798,24799],{"class":287},"  --teleop.type=so101_leader",[228,24801,24794],{"class":287},[228,24803,24804],{"class":230,"line":1308},[228,24805,24806],{"class":287},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[228,24808,24809],{"class":230,"line":1314},[228,24810,2514],{"emptyLinePlaceholder":157},[228,24812,24813],{"class":230,"line":1328},[228,24814,24815],{"class":297},"# 从臂舵机配置 ID\n",[228,24817,24818,24820],{"class":230,"line":1334},[228,24819,24791],{"class":2077},[228,24821,24794],{"class":287},[228,24823,24824,24827],{"class":230,"line":1425},[228,24825,24826],{"class":287},"  --robot.type=so101_follower",[228,24828,24794],{"class":287},[228,24830,24831],{"class":230,"line":1431},[228,24832,24833],{"class":287},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,24835,24836],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,24838,24840],{"id":24839},"_32-机械臂校准","3.2 机械臂校准",[19,24842,24843],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[220,24845,24847],{"className":23937,"code":24846,"language":23939,"meta":141,"style":141},"# 主臂校准\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",[30,24848,24849,24854,24861,24867,24874,24879,24883,24888,24894,24900,24907],{"__ignoreMap":141},[228,24850,24851],{"class":230,"line":231},[228,24852,24853],{"class":297},"# 主臂校准\n",[228,24855,24856,24859],{"class":230,"line":142},[228,24857,24858],{"class":2077},"lerobot-calibrate",[228,24860,24794],{"class":287},[228,24862,24863,24865],{"class":230,"line":1293},[228,24864,24799],{"class":287},[228,24866,24794],{"class":287},[228,24868,24869,24872],{"class":230,"line":1308},[228,24870,24871],{"class":287},"  --teleop.port=\u002Fdev\u002FttyACM0",[228,24873,24794],{"class":287},[228,24875,24876],{"class":230,"line":1314},[228,24877,24878],{"class":287},"  --teleop.id=my_awesome_leader_arm\n",[228,24880,24881],{"class":230,"line":1328},[228,24882,2514],{"emptyLinePlaceholder":157},[228,24884,24885],{"class":230,"line":1334},[228,24886,24887],{"class":297},"# 从臂校准\n",[228,24889,24890,24892],{"class":230,"line":1425},[228,24891,24858],{"class":2077},[228,24893,24794],{"class":287},[228,24895,24896,24898],{"class":230,"line":1431},[228,24897,24826],{"class":287},[228,24899,24794],{"class":287},[228,24901,24902,24905],{"class":230,"line":1443},[228,24903,24904],{"class":287},"  --robot.port=\u002Fdev\u002FttyACM1",[228,24906,24794],{"class":287},[228,24908,24909],{"class":230,"line":1726},[228,24910,24911],{"class":287},"  --robot.id=my_awesome_follower_arm\n",[5241,24913,24914],{},"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":141,"searchDepth":142,"depth":142,"links":24916},[24917,24918],{"id":24766,"depth":142,"text":24767},{"id":24839,"depth":142,"text":24840},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24757,"description":154},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":24925,"title":24926,"body":24927,"description":154,"extension":155,"meta":25118,"navigation":157,"path":25119,"seo":25120,"stem":25121,"__hash__":25122},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":24928,"toc":25114},[24929,24932,24936,24983,24987,25000,25063,25066,25111],[10,24930,24926],{"id":24931},"_4-遥操与相机接入",[14,24933,24935],{"id":24934},"_41-不带相机遥操","4.1 不带相机遥操",[220,24937,24939],{"className":23937,"code":24938,"language":23939,"meta":141,"style":141},"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",[30,24940,24941,24948,24954,24960,24967,24973,24979],{"__ignoreMap":141},[228,24942,24943,24946],{"class":230,"line":231},[228,24944,24945],{"class":2077},"lerobot-teleoperate",[228,24947,24794],{"class":287},[228,24949,24950,24952],{"class":230,"line":142},[228,24951,24826],{"class":287},[228,24953,24794],{"class":287},[228,24955,24956,24958],{"class":230,"line":1293},[228,24957,24904],{"class":287},[228,24959,24794],{"class":287},[228,24961,24962,24965],{"class":230,"line":1308},[228,24963,24964],{"class":287},"  --robot.id=my_awesome_follower_arm",[228,24966,24794],{"class":287},[228,24968,24969,24971],{"class":230,"line":1314},[228,24970,24799],{"class":287},[228,24972,24794],{"class":287},[228,24974,24975,24977],{"class":230,"line":1328},[228,24976,24871],{"class":287},[228,24978,24794],{"class":287},[228,24980,24981],{"class":230,"line":1334},[228,24982,24878],{"class":287},[14,24984,24986],{"id":24985},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[220,24988,24990],{"className":23937,"code":24989,"language":23939,"meta":141,"style":141},"lerobot-find-cameras opencv\n",[30,24991,24992],{"__ignoreMap":141},[228,24993,24994,24997],{"class":230,"line":231},[228,24995,24996],{"class":2077},"lerobot-find-cameras",[228,24998,24999],{"class":343}," opencv\n",[220,25001,25003],{"className":23937,"code":25002,"language":23939,"meta":141,"style":141},"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",[30,25004,25005,25011,25017,25023,25029,25039,25045,25051,25058],{"__ignoreMap":141},[228,25006,25007,25009],{"class":230,"line":231},[228,25008,24945],{"class":2077},[228,25010,24794],{"class":287},[228,25012,25013,25015],{"class":230,"line":142},[228,25014,24826],{"class":287},[228,25016,24794],{"class":287},[228,25018,25019,25021],{"class":230,"line":1293},[228,25020,24904],{"class":287},[228,25022,24794],{"class":287},[228,25024,25025,25027],{"class":230,"line":1308},[228,25026,24964],{"class":287},[228,25028,24794],{"class":287},[228,25030,25031,25034,25037],{"class":230,"line":1314},[228,25032,25033],{"class":287},"  --robot.cameras=",[228,25035,25036],{"class":343},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[228,25038,24794],{"class":287},[228,25040,25041,25043],{"class":230,"line":1328},[228,25042,24799],{"class":287},[228,25044,24794],{"class":287},[228,25046,25047,25049],{"class":230,"line":1334},[228,25048,24871],{"class":287},[228,25050,24794],{"class":287},[228,25052,25053,25056],{"class":230,"line":1425},[228,25054,25055],{"class":287},"  --teleop.id=my_awesome_leader_arm",[228,25057,24794],{"class":287},[228,25059,25060],{"class":230,"line":1431},[228,25061,25062],{"class":287},"  --display_data=true\n",[19,25064,25065],{},"相机参数说明：",[1245,25067,25068,25074,25080,25089,25099,25105],{},[186,25069,25070,25073],{},[30,25071,25072],{},"front","：相机名称。",[186,25075,25076,25079],{},[30,25077,25078],{},"type: opencv","：相机驱动类型。",[186,25081,25082,25085,25086,24678],{},[30,25083,25084],{},"index_or_path","：设备编号或设备路径（如 ",[30,25087,25088],{},"\u002Fdev\u002Fvideo4",[186,25090,25091,25094,25095,25098],{},[30,25092,25093],{},"width"," \u002F ",[30,25096,25097],{},"height","：图像分辨率。",[186,25100,25101,25104],{},[30,25102,25103],{},"fps","：采样帧率。",[186,25106,25107,25110],{},[30,25108,25109],{},"--display_data=true","：启用实时可视化。",[5241,25112,25113],{},"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":141,"searchDepth":142,"depth":142,"links":25115},[25116,25117],{"id":24934,"depth":142,"text":24935},{"id":24985,"depth":142,"text":24986},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":24926,"description":154},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25124,"title":25125,"body":25126,"description":154,"extension":155,"meta":25298,"navigation":157,"path":25299,"seo":25300,"stem":25301,"__hash__":25302},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25127,"toc":25293},[25128,25132,25136,25141,25146,25149,25191,25197,25201,25250,25255,25259,25262,25270,25275,25280,25285,25290],[10,25129,25131],{"id":25130},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,25133,25135],{"id":25134},"_51-生成访问令牌","5.1 生成访问令牌",[19,25137,25138],{},[1576,25139],{"alt":141,"src":25140},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,25142,25143],{},[1576,25144],{"alt":141,"src":25145},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,25147,25148],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[220,25150,25152],{"className":23937,"code":25151,"language":23939,"meta":141,"style":141},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[30,25153,25154,25167],{"__ignoreMap":141},[228,25155,25156,25159,25162,25164],{"class":230,"line":231},[228,25157,25158],{"class":234},"export",[228,25160,25161],{"class":238}," HF_TOKEN",[228,25163,284],{"class":234},[228,25165,25166],{"class":343},"\"your_huggingface_token\"\n",[228,25168,25169,25172,25175,25178,25181,25183,25186,25188],{"class":230,"line":142},[228,25170,25171],{"class":2077},"hf",[228,25173,25174],{"class":343}," auth",[228,25176,25177],{"class":343}," login",[228,25179,25180],{"class":287}," --token",[228,25182,9839],{"class":343},[228,25184,25185],{"class":238},"$HF_TOKEN",[228,25187,489],{"class":343},[228,25189,25190],{"class":287}," --add-to-git-credential\n",[19,25192,25193,25196],{},[30,25194,25195],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,25198,25200],{"id":25199},"_52-验证登录","5.2 验证登录",[220,25202,25204],{"className":23937,"code":25203,"language":23939,"meta":141,"style":141},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[30,25205,25206,25237],{"__ignoreMap":141},[228,25207,25208,25211,25213,25216,25218,25220,25223,25226,25229,25232,25235],{"class":230,"line":231},[228,25209,25210],{"class":238},"HF_USER",[228,25212,284],{"class":234},[228,25214,25215],{"class":238},"$(",[228,25217,25171],{"class":2077},[228,25219,25174],{"class":343},[228,25221,25222],{"class":343}," whoami",[228,25224,25225],{"class":234}," |",[228,25227,25228],{"class":2077}," head",[228,25230,25231],{"class":287}," -n",[228,25233,25234],{"class":287}," 1",[228,25236,245],{"class":238},[228,25238,25239,25242,25244,25247],{"class":230,"line":142},[228,25240,25241],{"class":287},"echo",[228,25243,9839],{"class":343},[228,25245,25246],{"class":238},"$HF_USER",[228,25248,25249],{"class":343},"\"\n",[19,25251,25252],{},[1576,25253],{"alt":141,"src":25254},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,25256,25258],{"id":25257},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,25260,25261],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1245,25263,25264,25267],{},[186,25265,25266],{},"Dataset Repo（用于上传演示数据）",[186,25268,25269],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,25271,25272],{},[1576,25273],{"alt":141,"src":25274},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,25276,25277],{},[1576,25278],{"alt":141,"src":25279},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,25281,25282],{},[1576,25283],{"alt":141,"src":25284},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,25286,25287],{},[1576,25288],{"alt":141,"src":25289},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[5241,25291,25292],{},"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":141,"searchDepth":142,"depth":142,"links":25294},[25295,25296,25297],{"id":25134,"depth":142,"text":25135},{"id":25199,"depth":142,"text":25200},{"id":25257,"depth":142,"text":25258},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25125,"description":154},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25304,"title":25305,"body":25306,"description":154,"extension":155,"meta":25503,"navigation":157,"path":25504,"seo":25505,"stem":25506,"__hash__":25507},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25307,"toc":25498},[25308,25312,25316,25412,25420,25425,25429,25445,25448,25452,25495],[10,25309,25311],{"id":25310},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,25313,25315],{"id":25314},"_61-录制示教数据","6.1 录制示教数据",[220,25317,25319],{"className":23937,"code":25318,"language":23939,"meta":141,"style":141},"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",[30,25320,25321,25328,25334,25340,25346,25355,25361,25367,25373,25380,25390,25397,25407],{"__ignoreMap":141},[228,25322,25323,25326],{"class":230,"line":231},[228,25324,25325],{"class":2077},"lerobot-record",[228,25327,24794],{"class":287},[228,25329,25330,25332],{"class":230,"line":142},[228,25331,24826],{"class":287},[228,25333,24794],{"class":287},[228,25335,25336,25338],{"class":230,"line":1293},[228,25337,24904],{"class":287},[228,25339,24794],{"class":287},[228,25341,25342,25344],{"class":230,"line":1308},[228,25343,24964],{"class":287},[228,25345,24794],{"class":287},[228,25347,25348,25350,25353],{"class":230,"line":1314},[228,25349,25033],{"class":287},[228,25351,25352],{"class":343},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[228,25354,24794],{"class":287},[228,25356,25357,25359],{"class":230,"line":1328},[228,25358,24799],{"class":287},[228,25360,24794],{"class":287},[228,25362,25363,25365],{"class":230,"line":1334},[228,25364,24871],{"class":287},[228,25366,24794],{"class":287},[228,25368,25369,25371],{"class":230,"line":1425},[228,25370,25055],{"class":287},[228,25372,24794],{"class":287},[228,25374,25375,25378],{"class":230,"line":1431},[228,25376,25377],{"class":287},"  --display_data=true",[228,25379,24794],{"class":287},[228,25381,25382,25385,25388],{"class":230,"line":1443},[228,25383,25384],{"class":287},"  --dataset.repo_id=",[228,25386,25387],{"class":343},"\"Embodied-AI-6\u002Fso101_test\"",[228,25389,24794],{"class":287},[228,25391,25392,25395],{"class":230,"line":1726},[228,25393,25394],{"class":287},"  --dataset.num_episodes=10",[228,25396,24794],{"class":287},[228,25398,25399,25402,25405],{"class":230,"line":1731},[228,25400,25401],{"class":287},"  --dataset.single_task=",[228,25403,25404],{"class":343},"\"Grab the green cube\"",[228,25406,24794],{"class":287},[228,25408,25409],{"class":230,"line":1737},[228,25410,25411],{"class":287},"  --resume=true\n",[1245,25413,25414],{},[186,25415,25416,25419],{},[30,25417,25418],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,25421,25422],{},[1576,25423],{"alt":141,"src":25424},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,25426,25428],{"id":25427},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[220,25430,25432],{"className":23937,"code":25431,"language":23939,"meta":141,"style":141},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[30,25433,25434],{"__ignoreMap":141},[228,25435,25436,25439,25442],{"class":230,"line":231},[228,25437,25438],{"class":2077},"rm",[228,25440,25441],{"class":287}," -rf",[228,25443,25444],{"class":343}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,25446,25447],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,25449,25451],{"id":25450},"_63-回放指定-episode","6.3 回放指定 episode",[220,25453,25455],{"className":23937,"code":25454,"language":23939,"meta":141,"style":141},"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",[30,25456,25457,25464,25470,25476,25482,25490],{"__ignoreMap":141},[228,25458,25459,25462],{"class":230,"line":231},[228,25460,25461],{"class":2077},"lerobot-replay",[228,25463,24794],{"class":287},[228,25465,25466,25468],{"class":230,"line":142},[228,25467,24826],{"class":287},[228,25469,24794],{"class":287},[228,25471,25472,25474],{"class":230,"line":1293},[228,25473,24904],{"class":287},[228,25475,24794],{"class":287},[228,25477,25478,25480],{"class":230,"line":1308},[228,25479,24964],{"class":287},[228,25481,24794],{"class":287},[228,25483,25484,25486,25488],{"class":230,"line":1314},[228,25485,25384],{"class":287},[228,25487,25387],{"class":343},[228,25489,24794],{"class":287},[228,25491,25492],{"class":230,"line":1328},[228,25493,25494],{"class":287},"  --dataset.episode=0\n",[5241,25496,25497],{},"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":141,"searchDepth":142,"depth":142,"links":25499},[25500,25501,25502],{"id":25314,"depth":142,"text":25315},{"id":25427,"depth":142,"text":25428},{"id":25450,"depth":142,"text":25451},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25305,"description":154},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25509,"title":25510,"body":25511,"description":154,"extension":155,"meta":25639,"navigation":157,"path":25640,"seo":25641,"stem":25642,"__hash__":25643},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25512,"toc":25637},[25513,25517,25580,25583,25630,25635],[10,25514,25516],{"id":25515},"_7-act-模型训练","7. ACT 模型训练",[220,25518,25520],{"className":23937,"code":25519,"language":23939,"meta":141,"style":141},"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",[30,25521,25522,25529,25537,25544,25551,25558,25565,25572],{"__ignoreMap":141},[228,25523,25524,25527],{"class":230,"line":231},[228,25525,25526],{"class":2077},"lerobot-train",[228,25528,24794],{"class":287},[228,25530,25531,25533,25535],{"class":230,"line":142},[228,25532,25384],{"class":287},[228,25534,25387],{"class":343},[228,25536,24794],{"class":287},[228,25538,25539,25542],{"class":230,"line":1293},[228,25540,25541],{"class":287},"  --policy.type=act",[228,25543,24794],{"class":287},[228,25545,25546,25549],{"class":230,"line":1308},[228,25547,25548],{"class":287},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[228,25550,24794],{"class":287},[228,25552,25553,25556],{"class":230,"line":1314},[228,25554,25555],{"class":287},"  --job_name=act_so101_test",[228,25557,24794],{"class":287},[228,25559,25560,25563],{"class":230,"line":1328},[228,25561,25562],{"class":287},"  --policy.device=cuda",[228,25564,24794],{"class":287},[228,25566,25567,25570],{"class":230,"line":1334},[228,25568,25569],{"class":287},"  --wandb.enable=false",[228,25571,24794],{"class":287},[228,25573,25574,25577],{"class":230,"line":1425},[228,25575,25576],{"class":287},"  --policy.repo_id=",[228,25578,25579],{"class":343},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,25581,25582],{},"参数说明：",[1245,25584,25585,25591,25597,25603,25609,25618,25624],{},[186,25586,25587,25590],{},[30,25588,25589],{},"--dataset.repo_id","：训练数据集仓库。",[186,25592,25593,25596],{},[30,25594,25595],{},"--policy.type=act","：策略模型类型为 ACT。",[186,25598,25599,25602],{},[30,25600,25601],{},"--output_dir","：本地训练输出目录。",[186,25604,25605,25608],{},[30,25606,25607],{},"--job_name","：训练任务名称。",[186,25610,25611,25614,25615,24678],{},[30,25612,25613],{},"--policy.device","：训练设备（如 ",[30,25616,25617],{},"cuda",[186,25619,25620,25623],{},[30,25621,25622],{},"--wandb.enable","：是否启用 WandB 可视化。",[186,25625,25626,25629],{},[30,25627,25628],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,25631,25632],{},[1576,25633],{"alt":141,"src":25634},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[5241,25636,25497],{},{"title":141,"searchDepth":142,"depth":142,"links":25638},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25510,"description":154},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25645,"title":25646,"body":25647,"description":154,"extension":155,"meta":25734,"navigation":157,"path":25735,"seo":25736,"stem":25737,"__hash__":25738},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25648,"toc":25732},[25649,25652,25655,25722,25730],[10,25650,25646],{"id":25651},"_8-策略部署与自动采集",[19,25653,25654],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[220,25656,25658],{"className":23937,"code":25657,"language":23939,"meta":141,"style":141},"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",[30,25659,25660,25666,25672,25678,25686,25692,25699,25707,25715],{"__ignoreMap":141},[228,25661,25662,25664],{"class":230,"line":231},[228,25663,25325],{"class":2077},[228,25665,24794],{"class":287},[228,25667,25668,25670],{"class":230,"line":142},[228,25669,24826],{"class":287},[228,25671,24794],{"class":287},[228,25673,25674,25676],{"class":230,"line":1293},[228,25675,24904],{"class":287},[228,25677,24794],{"class":287},[228,25679,25680,25682,25684],{"class":230,"line":1308},[228,25681,25033],{"class":287},[228,25683,25352],{"class":343},[228,25685,24794],{"class":287},[228,25687,25688,25690],{"class":230,"line":1314},[228,25689,24964],{"class":287},[228,25691,24794],{"class":287},[228,25693,25694,25697],{"class":230,"line":1328},[228,25695,25696],{"class":287},"  --display_data=false",[228,25698,24794],{"class":287},[228,25700,25701,25703,25705],{"class":230,"line":1334},[228,25702,25384],{"class":287},[228,25704,25387],{"class":343},[228,25706,24794],{"class":287},[228,25708,25709,25711,25713],{"class":230,"line":1425},[228,25710,25401],{"class":287},[228,25712,25404],{"class":343},[228,25714,24794],{"class":287},[228,25716,25717,25720],{"class":230,"line":1431},[228,25718,25719],{"class":287},"  --policy.path=",[228,25721,25579],{"class":343},[1245,25723,25724],{},[186,25725,25726,25729],{},[30,25727,25728],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[5241,25731,25497],{},{"title":141,"searchDepth":142,"depth":142,"links":25733},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25646,"description":154},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25740,"title":25741,"body":25742,"description":154,"extension":155,"meta":25771,"navigation":157,"path":25772,"seo":25773,"stem":25774,"__hash__":25775},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25743,"toc":25769},[25744,25748,25751,25757,25760,25766],[10,25745,25747],{"id":25746},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,25749,25750],{},"项目地址：",[19,25752,25753],{},[476,25754,25755],{"href":25755,"rel":25756},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[23980],[19,25758,25759],{},"参考教程：",[19,25761,25762],{},[476,25763,25764],{"href":25764,"rel":25765},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[23980],[19,25767,25768],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":141,"searchDepth":142,"depth":142,"links":25770},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25741,"description":154},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25777,"title":25778,"body":25779,"description":25783,"extension":155,"meta":25784,"navigation":157,"path":25785,"seo":25786,"stem":25787,"__hash__":25788},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25780,"toc":25781},[],{"title":141,"searchDepth":142,"depth":142,"links":25782},[],"act复现",{"category":23493},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25778,"description":25783},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25790,"title":25791,"body":25792,"description":141,"extension":155,"meta":26094,"navigation":157,"path":26095,"seo":26096,"stem":26097,"__hash__":26098},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25793,"toc":26086},[25794,25797,25801,25811,25818,25825,25828,25835,25838,25841,25845,25857,25861,25907,25910,25913,25916,25919,25922,25926,25964,25970,25974,26028,26033,26036,26039,26044,26047,26052,26055,26058,26062,26065,26068,26072],[10,25795,25791],{"id":25796},"_1简介",[200,25798,25800],{"id":25799},"_11什么是-docker","1.1什么是 Docker？",[19,25802,25803,25804,25807,25808],{},"Docker 是一个开源的 ",[388,25805,25806],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[388,25809,25810],{},"一次构建，到处运行。",[19,25812,25813,25814,25817],{},"“ ",[388,25815,25816],{},"一次构建，到处运行"," ”也就是说：",[183,25819,25820],{},[186,25821,25822],{},[388,25823,25824],{},"之前：",[19,25826,25827],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[183,25829,25830],{},[186,25831,25832],{},[388,25833,25834],{},"使用docker后：",[19,25836,25837],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,25839,25840],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[200,25842,25844],{"id":25843},"_12它是怎么工作的","1.2.它是怎么工作的？",[1245,25846,25847,25850],{},[186,25848,25849],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[186,25851,25852,25853,25856],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[388,25854,25855],{},"无论在哪运行都一样稳定"," 。",[200,25858,25860],{"id":25859},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[376,25862,25863,25873],{},[379,25864,25865],{},[382,25866,25867,25870],{},[385,25868,25869],{"align":23851},"概念",[385,25871,25872],{"align":23851},"解释",[423,25874,25875,25883,25891,25899],{},[382,25876,25877,25880],{},[428,25878,25879],{"align":23851},"镜像",[428,25881,25882],{"align":23851},"Image，运行容器的模板，像是一个应用快照",[382,25884,25885,25888],{},[428,25886,25887],{"align":23851},"容器",[428,25889,25890],{"align":23851},"Container，运行中的镜像实例，有自己的文件系统、网络等",[382,25892,25893,25896],{},[428,25894,25895],{"align":23851},"Dockerfile",[428,25897,25898],{"align":23851},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[382,25900,25901,25904],{},[428,25902,25903],{"align":23851},"仓库",[428,25905,25906],{"align":23851},"Registry，存放镜像的地方，比如 Docker Hub",[19,25908,25909],{},"抽象化理解:",[19,25911,25912],{},"Docker镜像≈C++类",[19,25914,25915],{},"Docker容器≈C++类实例(即对象)",[19,25917,25918],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,25920,25921],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[200,25923,25925],{"id":25924},"_14类比理解","1.4.类比理解",[376,25927,25928,25938],{},[379,25929,25930],{},[382,25931,25932,25935],{},[385,25933,25934],{"align":23851},"传统部署",[385,25936,25937],{"align":23851},"Docker部署",[423,25939,25940,25948,25956],{},[382,25941,25942,25945],{},[428,25943,25944],{"align":23851},"手动安装依赖、调试版本不一致问题",[428,25946,25947],{"align":23851},"一次打包环境和代码",[382,25949,25950,25953],{},[428,25951,25952],{"align":23851},"程序“裸奔”跑在系统上",[428,25954,25955],{"align":23851},"程序“穿着容器”隔离运行",[382,25957,25958,25961],{},[428,25959,25960],{"align":23851},"容易“在我电脑上能跑”",[428,25962,25963],{"align":23851},"保证“无论在哪都能跑”",[19,25965,25966,25967],{},"就像快递包裹： ",[388,25968,25969],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[200,25971,25973],{"id":25972},"_15docker-的核心优势","1.5.Docker 的核心优势",[376,25975,25976,25986],{},[379,25977,25978],{},[382,25979,25980,25983],{},[385,25981,25982],{"align":23851},"优势",[385,25984,25985],{"align":23851},"说明",[423,25987,25988,25996,26004,26012,26020],{},[382,25989,25990,25993],{},[428,25991,25992],{"align":23851},"轻量级",[428,25994,25995],{"align":23851},"基于系统内核共享，启动速度快，占资源少",[382,25997,25998,26001],{},[428,25999,26000],{"align":23851},"跨平台",[428,26002,26003],{"align":23851},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[382,26005,26006,26009],{},[428,26007,26008],{"align":23851},"易于迁移部署",[428,26010,26011],{"align":23851},"应用和环境一起封装，不怕依赖不一致",[382,26013,26014,26017],{},[428,26015,26016],{"align":23851},"易于版本控制",[428,26018,26019],{"align":23851},"镜像版本可控，支持回滚",[382,26021,26022,26025],{},[428,26023,26024],{"align":23851},"生态丰富",[428,26026,26027],{"align":23851},"Docker Hub 上有成千上万的现成镜像可用",[183,26029,26030],{},[186,26031,26032],{},"在Linux上可以几乎实现无性能损失。",[19,26034,26035],{},"docker里的发行版和本机共用Linux内核。",[19,26037,26038],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[183,26040,26041],{},[186,26042,26043],{},"可以快速部署在绝大多数Linux发行版",[19,26045,26046],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[183,26048,26049],{},[186,26050,26051],{},"配置环境简单",[19,26053,26054],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,26056,26057],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[183,26059,26060],{},[186,26061,26024],{},[19,26063,26064],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,26066,26067],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[200,26069,26071],{"id":26070},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1245,26073,26074,26077,26080,26083],{},[186,26075,26076],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[186,26078,26079],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[186,26081,26082],{},"微服务架构：每个服务一个容器，灵活组合",[186,26084,26085],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":141,"searchDepth":142,"depth":142,"links":26087},[26088,26089,26090,26091,26092,26093],{"id":25799,"depth":1293,"text":25800},{"id":25843,"depth":1293,"text":25844},{"id":25859,"depth":1293,"text":25860},{"id":25924,"depth":1293,"text":25925},{"id":25972,"depth":1293,"text":25973},{"id":26070,"depth":1293,"text":26071},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25791,"description":141},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26100,"title":26101,"body":26102,"description":141,"extension":155,"meta":26835,"navigation":157,"path":26836,"seo":26837,"stem":26838,"__hash__":26839},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26103,"toc":26830},[26104,26107,26111,26114,26117,26123,26129,26133,26142,26145,26202,26205,26256,26259,26342,26345,26382,26386,26397,26410,26417,26420,26500,26503,26553,26556,26579,26583,26590,26593,26609,26615,26618,26634,26640,26643,26659,26673,26679,26699,26705,26708,26720,26726,26729,26743,26749,26752,26772,26777,26780,26783,26787,26790,26793,26796,26803,26806,26809,26812,26817,26822,26827],[10,26105,26101],{"id":26106},"_2安装docker",[200,26108,26110],{"id":26109},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,26112,26113],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,26115,26116],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,26118,26119],{},[476,26120,26121],{"href":26121,"rel":26122},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[23980],[19,26124,26125],{},[476,26126,26127],{"href":26127,"rel":26128},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[23980],[22113,26130,26132],{"id":26131},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,26134,26135,26136,26141],{},"以下内容根据 ",[476,26137,26140],{"href":26138,"rel":26139},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[23980],"官方文档"," 修改而来。",[19,26143,26144],{},"如果你过去安装过 docker，先删掉：",[220,26146,26148],{"className":23937,"code":26147,"language":23939,"meta":141,"style":141},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[30,26149,26150],{"__ignoreMap":141},[228,26151,26152,26154,26157,26160,26163,26166,26169,26172,26175,26178,26181,26184,26187,26190,26193,26196,26199],{"class":230,"line":231},[228,26153,3139],{"class":234},[228,26155,26156],{"class":238}," pkg ",[228,26158,26159],{"class":234},"in",[228,26161,26162],{"class":343}," docker.io",[228,26164,26165],{"class":343}," docker-doc",[228,26167,26168],{"class":343}," docker-compose",[228,26170,26171],{"class":343}," docker-compose-v2",[228,26173,26174],{"class":343}," podman-docker",[228,26176,26177],{"class":343}," containerd",[228,26179,26180],{"class":343}," runc",[228,26182,26183],{"class":238},"; ",[228,26185,26186],{"class":234},"do",[228,26188,26189],{"class":2077}," sudo",[228,26191,26192],{"class":343}," apt-get",[228,26194,26195],{"class":343}," remove",[228,26197,26198],{"class":238}," $pkg; ",[228,26200,26201],{"class":234},"done\n",[19,26203,26204],{},"首先安装依赖和GPG：",[220,26206,26210],{"className":26207,"code":26208,"language":26209,"meta":141,"style":141},"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",[30,26211,26212,26217,26222,26227,26232,26237,26242,26246,26251],{"__ignoreMap":141},[228,26213,26214],{"class":230,"line":231},[228,26215,26216],{},"# Add Docker's official GPG key:\n",[228,26218,26219],{"class":230,"line":142},[228,26220,26221],{},"sudo apt-get update\n",[228,26223,26224],{"class":230,"line":1293},[228,26225,26226],{},"sudo apt-get install ca-certificates curl\n",[228,26228,26229],{"class":230,"line":1308},[228,26230,26231],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[228,26233,26234],{"class":230,"line":1314},[228,26235,26236],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[228,26238,26239],{"class":230,"line":1328},[228,26240,26241],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[228,26243,26244],{"class":230,"line":1334},[228,26245,2514],{"emptyLinePlaceholder":157},[228,26247,26248],{"class":230,"line":1425},[228,26249,26250],{},"# 如果上面这行报错就弄下面这行\n",[228,26252,26253],{"class":230,"line":1431},[228,26254,26255],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,26257,26258],{},"信任 Docker 的 GPG 公钥并添加仓库：",[220,26260,26262],{"className":23937,"code":26261,"language":23939,"meta":141,"style":141},"# 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",[30,26263,26264,26269,26275,26292,26325],{"__ignoreMap":141},[228,26265,26266],{"class":230,"line":231},[228,26267,26268],{"class":297},"# Add the repository to Apt sources:\n",[228,26270,26271,26273],{"class":230,"line":142},[228,26272,25241],{"class":287},[228,26274,24794],{"class":287},[228,26276,26277,26280,26283,26286,26289],{"class":230,"line":1293},[228,26278,26279],{"class":343},"  \"deb [arch=$(",[228,26281,26282],{"class":2077},"dpkg",[228,26284,26285],{"class":287}," --print-architecture",[228,26287,26288],{"class":343},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[228,26290,26291],{"class":287},"\\\n",[228,26293,26294,26297,26299,26301,26304,26307,26309,26311,26314,26316,26318,26321,26323],{"class":230,"line":1308},[228,26295,26296],{"class":343},"  \"",[228,26298,25215],{"class":238},[228,26300,796],{"class":287},[228,26302,26303],{"class":343}," \u002Fetc\u002Fos-release",[228,26305,26306],{"class":238}," && ",[228,26308,25241],{"class":287},[228,26310,9839],{"class":343},[228,26312,26313],{"class":238},"$VERSION_CODENAME",[228,26315,489],{"class":343},[228,26317,667],{"class":238},[228,26319,26320],{"class":343},"\" stable\"",[228,26322,25225],{"class":234},[228,26324,24794],{"class":287},[228,26326,26327,26330,26333,26336,26339],{"class":230,"line":1314},[228,26328,26329],{"class":2077},"  sudo",[228,26331,26332],{"class":343}," tee",[228,26334,26335],{"class":343}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[228,26337,26338],{"class":234}," >",[228,26340,26341],{"class":343}," \u002Fdev\u002Fnull\n",[19,26343,26344],{},"最后安装",[220,26346,26348],{"className":23937,"code":26347,"language":23939,"meta":141,"style":141},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[30,26349,26350,26359],{"__ignoreMap":141},[228,26351,26352,26354,26356],{"class":230,"line":231},[228,26353,24692],{"class":2077},[228,26355,26192],{"class":343},[228,26357,26358],{"class":343}," update\n",[228,26360,26361,26363,26365,26367,26370,26373,26376,26379],{"class":230,"line":142},[228,26362,24692],{"class":2077},[228,26364,26192],{"class":343},[228,26366,23949],{"class":343},[228,26368,26369],{"class":343}," docker-ce",[228,26371,26372],{"class":343}," docker-ce-cli",[228,26374,26375],{"class":343}," containerd.io",[228,26377,26378],{"class":343}," docker-buildx-plugin",[228,26380,26381],{"class":343}," docker-compose-plugin\n",[22113,26383,26385],{"id":26384},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,26387,26388,26389,26392,26393,26396],{},"查看自己自己包管理工具版本（dnf是 ",[388,26390,26391],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[388,26394,26395],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[220,26398,26400],{"className":23937,"code":26399,"language":23939,"meta":141,"style":141},"dnf --version\n",[30,26401,26402],{"__ignoreMap":141},[228,26403,26404,26407],{"class":230,"line":231},[228,26405,26406],{"class":2077},"dnf",[228,26408,26409],{"class":287}," --version\n",[19,26411,26135,26412,26416],{},[476,26413,26140],{"href":26414,"rel":26415},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[23980]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,26418,26419],{},"如果你之前安装过 docker，请先删掉",[220,26421,26423],{"className":23937,"code":26422,"language":23939,"meta":141,"style":141},"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",[30,26424,26425,26439,26446,26453,26460,26467,26474,26481,26488,26495],{"__ignoreMap":141},[228,26426,26427,26429,26432,26434,26437],{"class":230,"line":231},[228,26428,24692],{"class":2077},[228,26430,26431],{"class":343}," dnf",[228,26433,26195],{"class":343},[228,26435,26436],{"class":343}," docker",[228,26438,24794],{"class":287},[228,26440,26441,26444],{"class":230,"line":142},[228,26442,26443],{"class":343},"                  docker-client",[228,26445,24794],{"class":287},[228,26447,26448,26451],{"class":230,"line":1293},[228,26449,26450],{"class":343},"                  docker-client-latest",[228,26452,24794],{"class":287},[228,26454,26455,26458],{"class":230,"line":1308},[228,26456,26457],{"class":343},"                  docker-common",[228,26459,24794],{"class":287},[228,26461,26462,26465],{"class":230,"line":1314},[228,26463,26464],{"class":343},"                  docker-latest",[228,26466,24794],{"class":287},[228,26468,26469,26472],{"class":230,"line":1328},[228,26470,26471],{"class":343},"                  docker-latest-logrotate",[228,26473,24794],{"class":287},[228,26475,26476,26479],{"class":230,"line":1334},[228,26477,26478],{"class":343},"                  docker-logrotate",[228,26480,24794],{"class":287},[228,26482,26483,26486],{"class":230,"line":1425},[228,26484,26485],{"class":343},"                  docker-selinux",[228,26487,24794],{"class":287},[228,26489,26490,26493],{"class":230,"line":1431},[228,26491,26492],{"class":343},"                  docker-engine-selinux",[228,26494,24794],{"class":287},[228,26496,26497],{"class":230,"line":1443},[228,26498,26499],{"class":343},"                  docker-engine\n",[19,26501,26502],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[220,26504,26506],{"className":23937,"code":26505,"language":23939,"meta":141,"style":141},"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",[30,26507,26508,26522,26537],{"__ignoreMap":141},[228,26509,26510,26512,26514,26517,26519],{"class":230,"line":231},[228,26511,24692],{"class":2077},[228,26513,26431],{"class":343},[228,26515,26516],{"class":287}," -y",[228,26518,23949],{"class":343},[228,26520,26521],{"class":343}," dnf-plugins-core\n",[228,26523,26524,26526,26528,26531,26534],{"class":230,"line":142},[228,26525,24692],{"class":2077},[228,26527,26431],{"class":343},[228,26529,26530],{"class":343}," config-manager",[228,26532,26533],{"class":343}," addrepo",[228,26535,26536],{"class":287}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[228,26538,26539,26541,26544,26547,26550],{"class":230,"line":1293},[228,26540,24692],{"class":2077},[228,26542,26543],{"class":343}," sed",[228,26545,26546],{"class":287}," -i",[228,26548,26549],{"class":343}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[228,26551,26552],{"class":343}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,26554,26555],{},"最后安装：",[220,26557,26559],{"className":23937,"code":26558,"language":23939,"meta":141,"style":141},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[30,26560,26561],{"__ignoreMap":141},[228,26562,26563,26565,26567,26569,26571,26573,26575,26577],{"class":230,"line":231},[228,26564,24692],{"class":2077},[228,26566,26431],{"class":343},[228,26568,23949],{"class":343},[228,26570,26369],{"class":343},[228,26572,26372],{"class":343},[228,26574,26375],{"class":343},[228,26576,26378],{"class":343},[228,26578,26381],{"class":343},[200,26580,26582],{"id":26581},"_22配置环境","2.2.配置环境",[22113,26584,26586,26589],{"id":26585},"_221检查-docker-服务状态",[388,26587,26588],{},"2.2.1.检查 Docker 服务状态"," ：",[19,26591,26592],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[220,26594,26596],{"className":23937,"code":26595,"language":23939,"meta":141,"style":141},"systemctl status docker\n",[30,26597,26598],{"__ignoreMap":141},[228,26599,26600,26603,26606],{"class":230,"line":231},[228,26601,26602],{"class":2077},"systemctl",[228,26604,26605],{"class":343}," status",[228,26607,26608],{"class":343}," docker\n",[22113,26610,26612,26589],{"id":26611},"_222启动-docker-服务",[388,26613,26614],{},"2.2.2.启动 Docker 服务",[19,26616,26617],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[220,26619,26621],{"className":23937,"code":26620,"language":23939,"meta":141,"style":141},"sudo systemctl start docker\n",[30,26622,26623],{"__ignoreMap":141},[228,26624,26625,26627,26630,26632],{"class":230,"line":231},[228,26626,24692],{"class":2077},[228,26628,26629],{"class":343}," systemctl",[228,26631,4298],{"class":343},[228,26633,26608],{"class":343},[22113,26635,26637,26589],{"id":26636},"_223设置-docker-开机自启",[388,26638,26639],{},"2.2.3.设置 Docker 开机自启",[19,26641,26642],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[220,26644,26646],{"className":23937,"code":26645,"language":23939,"meta":141,"style":141},"sudo systemctl enable docker\n",[30,26647,26648],{"__ignoreMap":141},[228,26649,26650,26652,26654,26657],{"class":230,"line":231},[228,26651,24692],{"class":2077},[228,26653,26629],{"class":343},[228,26655,26656],{"class":343}," enable",[228,26658,26608],{"class":343},[22113,26660,26662,13910,26665,13910,26670,26589],{"id":26661},"_224将用户添加到-docker-组",[388,26663,26664],{},"2.2.4.将用户添加到",[388,26666,26667],{},[30,26668,26669],{},"docker",[388,26671,26672],{},"组",[19,26674,26675,26676,26678],{},"使用以下命令将当前用户添加到 ",[30,26677,26669],{}," 组：",[220,26680,26682],{"className":23937,"code":26681,"language":23939,"meta":141,"style":141},"sudo usermod -aG docker $USER\n",[30,26683,26684],{"__ignoreMap":141},[228,26685,26686,26688,26691,26694,26696],{"class":230,"line":231},[228,26687,24692],{"class":2077},[228,26689,26690],{"class":343}," usermod",[228,26692,26693],{"class":287}," -aG",[228,26695,26436],{"class":343},[228,26697,26698],{"class":238}," $USER\n",[22113,26700,26702,26589],{"id":26701},"_225退出并重新登录",[388,26703,26704],{},"2.2.5.退出并重新登录",[19,26706,26707],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[220,26709,26711],{"className":23937,"code":26710,"language":23939,"meta":141,"style":141},"newgrp docker\n",[30,26712,26713],{"__ignoreMap":141},[228,26714,26715,26718],{"class":230,"line":231},[228,26716,26717],{"class":2077},"newgrp",[228,26719,26608],{"class":343},[22113,26721,26723,26589],{"id":26722},"_226重新启动-docker-服务如果需要",[388,26724,26725],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,26727,26728],{},"确保 Docker 服务正在运行，可以使用以下命令：",[220,26730,26731],{"className":23937,"code":26620,"language":23939,"meta":141,"style":141},[30,26732,26733],{"__ignoreMap":141},[228,26734,26735,26737,26739,26741],{"class":230,"line":231},[228,26736,24692],{"class":2077},[228,26738,26629],{"class":343},[228,26740,4298],{"class":343},[228,26742,26608],{"class":343},[22113,26744,26746,26589],{"id":26745},"_227重启电脑后检查-docker-服务状态",[388,26747,26748],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,26750,26751],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[220,26753,26755],{"className":23937,"code":26754,"language":23939,"meta":141,"style":141},"sudo reboot\nsystemctl status docker\n",[30,26756,26757,26764],{"__ignoreMap":141},[228,26758,26759,26761],{"class":230,"line":231},[228,26760,24692],{"class":2077},[228,26762,26763],{"class":343}," reboot\n",[228,26765,26766,26768,26770],{"class":230,"line":142},[228,26767,26602],{"class":2077},[228,26769,26605],{"class":343},[228,26771,26608],{"class":343},[19,26773,26774],{},[1576,26775],{"alt":141,"src":26776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,26778,26779],{},"第三行显示enabled说明开机自启动成功",[19,26781,26782],{},"按q退出",[200,26784,26786],{"id":26785},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,26788,26789],{},"优先使用linux来使用docker是比较好的",[19,26791,26792],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,26794,26795],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,26797,26798,26799],{},"官方下载安装:",[476,26800,26801],{"href":26801,"rel":26802},"https:\u002F\u002Fwww.docker.com\u002F",[23980],[19,26804,26805],{},"Windows的Docker显卡直通与USB直通:",[19,26807,26808],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,26810,26811],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,26813,26814],{},[1576,26815],{"alt":141,"src":26816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,26818,26819],{},[1576,26820],{"alt":141,"src":26821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,26823,26824],{},[1576,26825],{"alt":141,"src":26826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[5241,26828,26829],{},"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":141,"searchDepth":142,"depth":142,"links":26831},[26832,26833,26834],{"id":26109,"depth":1293,"text":26110},{"id":26581,"depth":1293,"text":26582},{"id":26785,"depth":1293,"text":26786},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26101,"description":141},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26841,"title":26842,"body":26843,"description":26850,"extension":155,"meta":27543,"navigation":157,"path":27544,"seo":27545,"stem":27546,"__hash__":27547},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26844,"toc":27537},[26845,26848,26851,26855,26860,26865,26868,26896,26901,26910,26913,26918,26922,26929,26934,26940,26944,26947,26951,26956,27048,27053,27071,27076,27097,27102,27118,27122,27127,27156,27161,27207,27212,27256,27264,27281,27286,27302,27307,27321,27324,27327,27330,27333,27362,27365,27370,27374,27377,27380,27386,27389,27392,27395,27457,27464,27469,27472,27490,27494,27497,27514,27517,27520,27534],[10,26846,26842],{"id":26847},"_3docker直通",[19,26849,26850],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[200,26852,26854],{"id":26853},"_31usb直通","3.1.USB直通",[19,26856,26857],{},[1576,26858],{"alt":141,"src":26859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[183,26861,26862],{},[186,26863,26864],{},"方法一(不是很推荐新手)：",[19,26866,26867],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[220,26869,26871],{"className":23937,"code":26870,"language":23939,"meta":141,"style":141},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[30,26872,26873,26881,26886],{"__ignoreMap":141},[228,26874,26875,26878],{"class":230,"line":231},[228,26876,26877],{"class":2077},"ls",[228,26879,26880],{"class":343}," \u002Fdev\n",[228,26882,26883],{"class":230,"line":142},[228,26884,26885],{"class":297},"#例如\n",[228,26887,26888,26891,26893],{"class":230,"line":1293},[228,26889,26890],{"class":238},"--device",[228,26892,284],{"class":234},[228,26894,26895],{"class":343},"\u002Fdev\u002Ftty_USB0\n",[183,26897,26898],{"start":142},[186,26899,26900],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[220,26902,26904],{"className":23937,"code":26903,"language":23939,"meta":141,"style":141},"--privileged\n",[30,26905,26906],{"__ignoreMap":141},[228,26907,26908],{"class":230,"line":231},[228,26909,26903],{"class":2077},[19,26911,26912],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,26914,26915],{},[1576,26916],{"alt":141,"src":26917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[200,26919,26921],{"id":26920},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,26923,26924,26925,26928],{},"NVIDIA Container Toolkit使用户 ",[388,26926,26927],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,26930,26931],{},[1576,26932],{"alt":141,"src":26933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,26935,26936],{},[476,26937,26938],{"href":26938,"rel":26939},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[23980],[22113,26941,26943],{"id":26942},"_321安装","3.2.1.安装",[19,26945,26946],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23025,26948,26950],{"id":26949},"_3211ubuntu","3.2.1.1.Ubuntu",[183,26952,26953],{},[186,26954,26955],{},"配置存储库 并更新",[220,26957,26959],{"className":23937,"code":26958,"language":23939,"meta":141,"style":141},"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",[30,26960,26961,26990,27010,27022,27034,27040],{"__ignoreMap":141},[228,26962,26963,26966,26969,26972,26974,26976,26979,26982,26985,26988],{"class":230,"line":231},[228,26964,26965],{"class":2077},"curl",[228,26967,26968],{"class":287}," -fsSL",[228,26970,26971],{"class":343}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[228,26973,25225],{"class":234},[228,26975,26189],{"class":2077},[228,26977,26978],{"class":343}," gpg",[228,26980,26981],{"class":287}," --dearmor",[228,26983,26984],{"class":287}," -o",[228,26986,26987],{"class":343}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[228,26989,24794],{"class":287},[228,26991,26992,26995,26997,27000,27003,27006,27008],{"class":230,"line":142},[228,26993,26994],{"class":238},"  && ",[228,26996,26965],{"class":2077},[228,26998,26999],{"class":287}," -s",[228,27001,27002],{"class":287}," -L",[228,27004,27005],{"class":343}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[228,27007,25225],{"class":234},[228,27009,24794],{"class":287},[228,27011,27012,27015,27018,27020],{"class":230,"line":1293},[228,27013,27014],{"class":2077},"    sed",[228,27016,27017],{"class":343}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[228,27019,25225],{"class":234},[228,27021,24794],{"class":287},[228,27023,27024,27027,27029,27032],{"class":230,"line":1308},[228,27025,27026],{"class":2077},"    sudo",[228,27028,26332],{"class":343},[228,27030,27031],{"class":343}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[228,27033,24794],{"class":287},[228,27035,27036,27038],{"class":230,"line":1314},[228,27037,26994],{"class":238},[228,27039,26291],{"class":287},[228,27041,27042,27044,27046],{"class":230,"line":1328},[228,27043,27026],{"class":2077},[228,27045,26192],{"class":343},[228,27047,26358],{"class":343},[183,27049,27050],{"start":142},[186,27051,27052],{},"安装nvidia-docker2",[220,27054,27056],{"className":23937,"code":27055,"language":23939,"meta":141,"style":141},"sudo apt-get install -y nvidia-docker2\n",[30,27057,27058],{"__ignoreMap":141},[228,27059,27060,27062,27064,27066,27068],{"class":230,"line":231},[228,27061,24692],{"class":2077},[228,27063,26192],{"class":343},[228,27065,23949],{"class":343},[228,27067,26516],{"class":287},[228,27069,27070],{"class":343}," nvidia-docker2\n",[183,27072,27073],{"start":1293},[186,27074,27075],{},"使用nvidia-ctk命令配置container runtime",[220,27077,27079],{"className":23937,"code":27078,"language":23939,"meta":141,"style":141},"sudo nvidia-ctk runtime configure --runtime=docker\n",[30,27080,27081],{"__ignoreMap":141},[228,27082,27083,27085,27088,27091,27094],{"class":230,"line":231},[228,27084,24692],{"class":2077},[228,27086,27087],{"class":343}," nvidia-ctk",[228,27089,27090],{"class":343}," runtime",[228,27092,27093],{"class":343}," configure",[228,27095,27096],{"class":287}," --runtime=docker\n",[183,27098,27099],{"start":1308},[186,27100,27101],{},"重启docker服务:",[220,27103,27105],{"className":23937,"code":27104,"language":23939,"meta":141,"style":141},"sudo systemctl restart docker\n",[30,27106,27107],{"__ignoreMap":141},[228,27108,27109,27111,27113,27116],{"class":230,"line":231},[228,27110,24692],{"class":2077},[228,27112,26629],{"class":343},[228,27114,27115],{"class":343}," restart",[228,27117,26608],{"class":343},[23025,27119,27121],{"id":27120},"_3212fedora","3.2.1.2.Fedora",[183,27123,27124],{},[186,27125,27126],{},"配置存储库",[220,27128,27130],{"className":23937,"code":27129,"language":23939,"meta":141,"style":141},"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",[30,27131,27132,27147],{"__ignoreMap":141},[228,27133,27134,27136,27138,27140,27143,27145],{"class":230,"line":231},[228,27135,26965],{"class":2077},[228,27137,26999],{"class":287},[228,27139,27002],{"class":287},[228,27141,27142],{"class":343}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[228,27144,25225],{"class":234},[228,27146,24794],{"class":287},[228,27148,27149,27151,27153],{"class":230,"line":142},[228,27150,24692],{"class":2077},[228,27152,26332],{"class":343},[228,27154,27155],{"class":343}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[183,27157,27158],{"start":142},[186,27159,27160],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[220,27162,27164],{"className":23937,"code":27163,"language":23939,"meta":141,"style":141},"# 如果是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",[30,27165,27166,27171,27185,27189,27194],{"__ignoreMap":141},[228,27167,27168],{"class":230,"line":231},[228,27169,27170],{"class":297},"# 如果是RHEL或者Rocky（DNF4）\n",[228,27172,27173,27175,27177,27179,27182],{"class":230,"line":142},[228,27174,24692],{"class":2077},[228,27176,26431],{"class":343},[228,27178,26530],{"class":343},[228,27180,27181],{"class":287}," --add-repo",[228,27183,27184],{"class":343}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[228,27186,27187],{"class":230,"line":1293},[228,27188,2514],{"emptyLinePlaceholder":157},[228,27190,27191],{"class":230,"line":1308},[228,27192,27193],{"class":297},"# 如果是Feodra41+（DNF5）\n",[228,27195,27196,27198,27200,27202,27204],{"class":230,"line":1314},[228,27197,24692],{"class":2077},[228,27199,26431],{"class":343},[228,27201,26530],{"class":343},[228,27203,26533],{"class":343},[228,27205,27206],{"class":287}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[183,27208,27209],{"start":1293},[186,27210,27211],{},"安装NVIDIA Container Toolki包",[220,27213,27215],{"className":23937,"code":27214,"language":23939,"meta":141,"style":141},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[30,27216,27217,27222,27235,27239,27244],{"__ignoreMap":141},[228,27218,27219],{"class":230,"line":231},[228,27220,27221],{"class":297},"# 如果是RHEL或者Rocky\n",[228,27223,27224,27226,27228,27230,27232],{"class":230,"line":142},[228,27225,24692],{"class":2077},[228,27227,26431],{"class":343},[228,27229,23949],{"class":343},[228,27231,26516],{"class":287},[228,27233,27234],{"class":343}," nvidia-container-toolkit\n",[228,27236,27237],{"class":230,"line":1293},[228,27238,2514],{"emptyLinePlaceholder":157},[228,27240,27241],{"class":230,"line":1308},[228,27242,27243],{"class":297},"# 如果是Fedora\n",[228,27245,27246,27248,27250,27252,27254],{"class":230,"line":1314},[228,27247,24692],{"class":2077},[228,27249,26431],{"class":343},[228,27251,23949],{"class":343},[228,27253,26516],{"class":287},[228,27255,27234],{"class":343},[183,27257,27258],{"start":1308},[186,27259,27260,27261,27263],{},"安装nvidia-docker2 ： 在Fedora上使用",[30,27262,26406],{},"进行安装",[220,27265,27267],{"className":23937,"code":27266,"language":23939,"meta":141,"style":141},"sudo dnf install -y nvidia-docker2\n",[30,27268,27269],{"__ignoreMap":141},[228,27270,27271,27273,27275,27277,27279],{"class":230,"line":231},[228,27272,24692],{"class":2077},[228,27274,26431],{"class":343},[228,27276,23949],{"class":343},[228,27278,26516],{"class":287},[228,27280,27070],{"class":343},[183,27282,27283],{"start":1314},[186,27284,27285],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[220,27287,27288],{"className":23937,"code":27078,"language":23939,"meta":141,"style":141},[30,27289,27290],{"__ignoreMap":141},[228,27291,27292,27294,27296,27298,27300],{"class":230,"line":231},[228,27293,24692],{"class":2077},[228,27295,27087],{"class":343},[228,27297,27090],{"class":343},[228,27299,27093],{"class":343},[228,27301,27096],{"class":287},[183,27303,27304],{"start":1328},[186,27305,27306],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[220,27308,27309],{"className":23937,"code":27104,"language":23939,"meta":141,"style":141},[30,27310,27311],{"__ignoreMap":141},[228,27312,27313,27315,27317,27319],{"class":230,"line":231},[228,27314,24692],{"class":2077},[228,27316,26629],{"class":343},[228,27318,27115],{"class":343},[228,27320,26608],{"class":343},[19,27322,27323],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,27325,27326],{},"方法：",[19,27328,27329],{},"1️⃣nvidia-smi",[19,27331,27332],{},"2️⃣运行nvidia cuda 容器进行测试",[220,27334,27336],{"className":23937,"code":27335,"language":23939,"meta":141,"style":141},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[30,27337,27338],{"__ignoreMap":141},[228,27339,27340,27342,27344,27347,27350,27353,27356,27359],{"class":230,"line":231},[228,27341,24692],{"class":2077},[228,27343,26436],{"class":343},[228,27345,27346],{"class":343}," run",[228,27348,27349],{"class":287}," --rm",[228,27351,27352],{"class":287}," --gpus",[228,27354,27355],{"class":343}," all",[228,27357,27358],{"class":343}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[228,27360,27361],{"class":343}," nvidia-smi\n",[19,27363,27364],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,27366,27367],{},[1576,27368],{"alt":141,"src":27369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[200,27371,27373],{"id":27372},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,27375,27376],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,27378,27379],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,27381,27382],{},[476,27383,27384],{"href":27384,"rel":27385},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[23980],[19,27387,27388],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,27390,27391],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,27393,27394],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[376,27396,27397,27413],{},[379,27398,27399],{},[382,27400,27401,27404,27407,27410],{},[385,27402,27403],{"align":23851},"镜像类型",[385,27405,27406],{"align":23851},"适用场景",[385,27408,27409],{"align":23851},"示例标签",[385,27411,27412],{"align":23851},"大小",[423,27414,27415,27429,27443],{},[382,27416,27417,27420,27423,27426],{},[428,27418,27419],{"align":23851},"base",[428,27421,27422],{"align":23851},"仅需 CUDA 运行时库",[428,27424,27425],{"align":23851},"12.4.0-base-ubuntu22.04",[428,27427,27428],{"align":23851},"~240MB",[382,27430,27431,27434,27437,27440],{},[428,27432,27433],{"align":23851},"runtime",[428,27435,27436],{"align":23851},"部署编译后的应用（含数学库）",[428,27438,27439],{"align":23851},"12.4.0-runtime-ubuntu22.04",[428,27441,27442],{"align":23851},"~2GB",[382,27444,27445,27448,27451,27454],{},[428,27446,27447],{"align":23851},"devel",[428,27449,27450],{"align":23851},"开发环境（含编译工具）",[428,27452,27453],{"align":23851},"12.4.0-devel-ubuntu22.04",[428,27455,27456],{"align":23851},"~3GB",[19,27458,27459,27460,27463],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[30,27461,27462],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,27465,27466],{},[1576,27467],{"alt":141,"src":27468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,27470,27471],{},"在dockerfile里就可以开头这么写：",[220,27473,27475],{"className":23937,"code":27474,"language":23939,"meta":141,"style":141},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[30,27476,27477,27482],{"__ignoreMap":141},[228,27478,27479],{"class":230,"line":231},[228,27480,27481],{"class":297},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[228,27483,27484,27487],{"class":230,"line":142},[228,27485,27486],{"class":2077},"FROM",[228,27488,27489],{"class":343}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[200,27491,27493],{"id":27492},"_34配置以太网","3.4.配置以太网",[19,27495,27496],{},"指定网络模式",[220,27498,27500],{"className":23937,"code":27499,"language":23939,"meta":141,"style":141},"--net=host \\\n",[30,27501,27502],{"__ignoreMap":141},[228,27503,27504,27507,27509,27512],{"class":230,"line":231},[228,27505,27506],{"class":238},"--net",[228,27508,284],{"class":234},[228,27510,27511],{"class":343},"host",[228,27513,24794],{"class":2077},[19,27515,27516],{},"启动参数里加上这行即可。具体在下方",[19,27518,27519],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1245,27521,27522,27525,27528,27531],{},[186,27523,27524],{},"--net=bridge:默认选项，表示连接到默认的网桥",[186,27526,27527],{},"--net=host:容器使用宿主机的网络",[186,27529,27530],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[186,27532,27533],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[5241,27535,27536],{},"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":141,"searchDepth":142,"depth":142,"links":27538},[27539,27540,27541,27542],{"id":26853,"depth":1293,"text":26854},{"id":26920,"depth":1293,"text":26921},{"id":27372,"depth":1293,"text":27373},{"id":27492,"depth":1293,"text":27493},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26842,"description":26850},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27549,"title":27550,"body":27551,"description":27558,"extension":155,"meta":27564,"navigation":157,"path":27565,"seo":27566,"stem":27567,"__hash__":27568},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27552,"toc":27562},[27553,27556,27559],[10,27554,27550],{"id":27555},"_4dockerhub换源",[19,27557,27558],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,27560,27561],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":141,"searchDepth":142,"depth":142,"links":27563},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27550,"description":27558},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27570,"title":27571,"body":27572,"description":141,"extension":155,"meta":28583,"navigation":157,"path":28584,"seo":28585,"stem":28586,"__hash__":28587},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27573,"toc":28578},[27574,27577,27581,27587,27591,27594,27934,27937,27940,27943,27948,27953,27956,27959,27962,27965,27984,27987,27998,28004,28186,28196,28212,28475,28477,28501,28516,28525,28575],[10,27575,27571],{"id":27576},"_5docker命令学习",[200,27578,27580],{"id":27579},"_51参考文档","5.1.参考文档",[19,27582,27583],{},[476,27584,27585],{"href":27585,"rel":27586},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[23980],[200,27588,27590],{"id":27589},"_52常用命令","5.2.常用命令",[19,27592,27593],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[376,27595,27596,27609],{},[379,27597,27598],{},[382,27599,27600,27603,27606],{},[385,27601,27602],{"align":23851},"命令",[385,27604,27605],{"align":23851},"描述",[385,27607,27608],{"align":23851},"示例",[423,27610,27611,27622,27633,27644,27655,27666,27677,27688,27698,27709,27720,27731,27741,27752,27763,27774,27784,27794,27804,27814,27825,27836,27847,27858,27869,27880,27890,27901,27912,27923],{},[382,27612,27613,27616,27619],{},[428,27614,27615],{"align":23851},"docker run",[428,27617,27618],{"align":23851},"创建并启动一个新的容器。",[428,27620,27621],{"align":23851},"docker run -it ubuntu bash",[382,27623,27624,27627,27630],{},[428,27625,27626],{"align":23851},"docker build",[428,27628,27629],{"align":23851},"通过指定的 Dockerfile 创建一个新的镜像。",[428,27631,27632],{"align":23851},"docker build -t myimage .",[382,27634,27635,27638,27641],{},[428,27636,27637],{"align":23851},"docker pull",[428,27639,27640],{"align":23851},"从 Docker 仓库拉取镜像。",[428,27642,27643],{"align":23851},"docker pull ubuntu",[382,27645,27646,27649,27652],{},[428,27647,27648],{"align":23851},"docker push",[428,27650,27651],{"align":23851},"将本地镜像推送到 Docker 仓库。",[428,27653,27654],{"align":23851},"docker push myimage",[382,27656,27657,27660,27663],{},[428,27658,27659],{"align":23851},"docker stop",[428,27661,27662],{"align":23851},"停止一个正在运行的容器。",[428,27664,27665],{"align":23851},"docker stop container_id",[382,27667,27668,27671,27674],{},[428,27669,27670],{"align":23851},"docker start",[428,27672,27673],{"align":23851},"启动一个已经存在的容器。",[428,27675,27676],{"align":23851},"docker start container_id",[382,27678,27679,27682,27685],{},[428,27680,27681],{"align":23851},"docker restart",[428,27683,27684],{"align":23851},"重新启动容器。",[428,27686,27687],{"align":23851},"docker restart container_id",[382,27689,27690,27693,27696],{},[428,27691,27692],{"align":23851},"docker ps",[428,27694,27695],{"align":23851},"列出当前正在运行的容器。",[428,27697,27692],{"align":23851},[382,27699,27700,27703,27706],{},[428,27701,27702],{"align":23851},"docker rm",[428,27704,27705],{"align":23851},"删除一个或多个停止的容器。",[428,27707,27708],{"align":23851},"docker rm container_id",[382,27710,27711,27714,27717],{},[428,27712,27713],{"align":23851},"docker exec",[428,27715,27716],{"align":23851},"在一个正在运行的容器中执行命令。",[428,27718,27719],{"align":23851},"docker exec -it container_id bash",[382,27721,27722,27725,27728],{},[428,27723,27724],{"align":23851},"docker logs",[428,27726,27727],{"align":23851},"查看容器的日志输出。",[428,27729,27730],{"align":23851},"docker logs container_id",[382,27732,27733,27736,27739],{},[428,27734,27735],{"align":23851},"docker images",[428,27737,27738],{"align":23851},"列出本地所有镜像。",[428,27740,27735],{"align":23851},[382,27742,27743,27746,27749],{},[428,27744,27745],{"align":23851},"docker rmi",[428,27747,27748],{"align":23851},"删除一个或多个镜像。",[428,27750,27751],{"align":23851},"docker rmi myimage",[382,27753,27754,27757,27760],{},[428,27755,27756],{"align":23851},"docker network",[428,27758,27759],{"align":23851},"管理 Docker 网络。",[428,27761,27762],{"align":23851},"docker network ls",[382,27764,27765,27768,27771],{},[428,27766,27767],{"align":23851},"docker volume",[428,27769,27770],{"align":23851},"管理 Docker 数据卷。",[428,27772,27773],{"align":23851},"docker volume ls",[382,27775,27776,27779,27782],{},[428,27777,27778],{"align":23851},"docker-compose up",[428,27780,27781],{"align":23851},"启动 docker-compose.yml 中定义的所有服务。",[428,27783,27778],{"align":23851},[382,27785,27786,27789,27792],{},[428,27787,27788],{"align":23851},"docker-compose down",[428,27790,27791],{"align":23851},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[428,27793,27788],{"align":23851},[382,27795,27796,27799,27802],{},[428,27797,27798],{"align":23851},"docker info",[428,27800,27801],{"align":23851},"显示 Docker 系统的详细信息。",[428,27803,27798],{"align":23851},[382,27805,27806,27809,27812],{},[428,27807,27808],{"align":23851},"docker stats",[428,27810,27811],{"align":23851},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[428,27813,27808],{"align":23851},[382,27815,27816,27819,27822],{},[428,27817,27818],{"align":23851},"docker inspect",[428,27820,27821],{"align":23851},"查看容器或镜像的详细信息（JSON 格式）。",[428,27823,27824],{"align":23851},"docker inspect container_id",[382,27826,27827,27830,27833],{},[428,27828,27829],{"align":23851},"docker save",[428,27831,27832],{"align":23851},"将一个镜像保存为 tar 文件。",[428,27834,27835],{"align":23851},"docker save -o myimage.tar myimage",[382,27837,27838,27841,27844],{},[428,27839,27840],{"align":23851},"docker load",[428,27842,27843],{"align":23851},"从 tar 文件中加载镜像。",[428,27845,27846],{"align":23851},"docker load -i myimage.tar",[382,27848,27849,27852,27855],{},[428,27850,27851],{"align":23851},"docker tag",[428,27853,27854],{"align":23851},"为镜像添加标签（tag）。",[428,27856,27857],{"align":23851},"docker tag myimage myimage:v1",[382,27859,27860,27863,27866],{},[428,27861,27862],{"align":23851},"docker buildx build",[428,27864,27865],{"align":23851},"使用 Buildx 构建多架构镜像。",[428,27867,27868],{"align":23851},"docker buildx build -t myimage .",[382,27870,27871,27874,27877],{},[428,27872,27873],{"align":23851},"docker buildx create",[428,27875,27876],{"align":23851},"创建一个新的 Buildx 构建实例。",[428,27878,27879],{"align":23851},"docker buildx create –use",[382,27881,27882,27885,27888],{},[428,27883,27884],{"align":23851},"docker buildx ls",[428,27886,27887],{"align":23851},"列出所有可用的 Buildx 构建实例。",[428,27889,27884],{"align":23851},[382,27891,27892,27895,27898],{},[428,27893,27894],{"align":23851},"docker buildx use",[428,27896,27897],{"align":23851},"设置当前的 Buildx 构建实例。",[428,27899,27900],{"align":23851},"docker buildx use mybuilder",[382,27902,27903,27906,27909],{},[428,27904,27905],{"align":23851},"docker buildx bake",[428,27907,27908],{"align":23851},"使用 Bake 文件批量构建镜像。",[428,27910,27911],{"align":23851},"docker buildx bake -f bake.hcl",[382,27913,27914,27917,27920],{},[428,27915,27916],{"align":23851},"docker buildx build –push",[428,27918,27919],{"align":23851},"构建镜像并推送到镜像仓库。",[428,27921,27922],{"align":23851},"docker buildx build –push -t myimage .",[382,27924,27925,27928,27931],{},[428,27926,27927],{"align":23851},"docker buildx build –platform",[428,27929,27930],{"align":23851},"构建镜像并为多个平台生成支持。",[428,27932,27933],{"align":23851},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,27935,27936],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,27938,27939],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,27941,27942],{},"docker images 可以查看已经下载的镜像",[19,27944,27945],{},[1576,27946],{"alt":141,"src":27947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,27949,27950],{},[388,27951,27952],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,27954,27955],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,27957,27958],{},"docker container logs 查看容器日志",[19,27960,27961],{},"docker top 查看容器里的进程",[19,27963,27964],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[220,27966,27968],{"className":23937,"code":27967,"language":23939,"meta":141,"style":141},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[30,27969,27970],{"__ignoreMap":141},[228,27971,27972,27975,27978,27981],{"class":230,"line":231},[228,27973,27974],{"class":2077},"如：docker",[228,27976,27977],{"class":343}," cp",[228,27979,27980],{"class":343}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[228,27982,27983],{"class":343}," \u002Fmydata\u002Fnginx\n",[19,27985,27986],{},"docker run时在启动容器的时候会有几个常用的选项：",[1245,27988,27989,27992,27995],{},[186,27990,27991],{},"-d选项：表示后台运行",[186,27993,27994],{},"-P选项：随机端口映射",[186,27996,27997],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[200,27999,28001],{"id":28000},"_53run命令的参数非常重要",[388,28002,28003],{},"5.3.run命令的参数（非常重要）",[376,28005,28006,28019],{},[379,28007,28008],{},[382,28009,28010,28013,28016],{},[385,28011,28012],{"align":23851},"参数\u002F配置",[385,28014,28015],{"align":23851},"功能说明",[385,28017,28018],{"align":23851},"重要性与参考依据",[423,28020,28021,28032,28043,28054,28065,28076,28087,28098,28109,28120,28131,28142,28153,28164,28175],{},[382,28022,28023,28026,28029],{},[428,28024,28025],{"align":23851},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[428,28027,28028],{"align":23851},"指定容器名称，便于后续管理",[428,28030,28031],{"align":23851},"替代随机生成的容器名。",[382,28033,28034,28037,28040],{},[428,28035,28036],{"align":23851},"–gpus all",[428,28038,28039],{"align":23851},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[428,28041,28042],{"align":23851},"用于CUDA加速等GPU依赖任务。",[382,28044,28045,28048,28051],{},[428,28046,28047],{"align":23851},"-e NVIDIA_DRIVER_CAPABILITIES=all",[428,28049,28050],{"align":23851},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[428,28052,28053],{"align":23851},"确保容器内GPU功能完整67。",[382,28055,28056,28059,28062],{},[428,28057,28058],{"align":23851},"-dit",[428,28060,28061],{"align":23851},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[428,28063,28064],{"align":23851},"允许容器在后台运行并支持交互操作。",[382,28066,28067,28070,28073],{},[428,28068,28069],{"align":23851},"–privileged",[428,28071,28072],{"align":23851},"赋予容器完全主机权限（可访问设备、内核模块等）",[428,28074,28075],{"align":23851},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[382,28077,28078,28081,28084],{},[428,28079,28080],{"align":23851},"–net=host",[428,28082,28083],{"align":23851},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[428,28085,28086],{"align":23851},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[382,28088,28089,28092,28095],{},[428,28090,28091],{"align":23851},"–group-add audio–group-add video–group-add dialout",[428,28093,28094],{"align":23851},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[428,28096,28097],{"align":23851},"避免权限问题（如避免无法调用摄像头、麦克风）。",[382,28099,28100,28103,28106],{},[428,28101,28102],{"align":23851},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[428,28104,28105],{"align":23851},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[428,28107,28108],{"align":23851},"支持容器内运行图形界面应用（如OpenCV可视化）。",[382,28110,28111,28114,28117],{},[428,28112,28113],{"align":23851},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[428,28115,28116],{"align":23851},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[428,28118,28119],{"align":23851},"实现容器内图形显示。",[382,28121,28122,28125,28128],{},[428,28123,28124],{"align":23851},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[428,28126,28127],{"align":23851},"挂载X11认证文件（只读）",[428,28129,28130],{"align":23851},"确保容器有权连接宿主机显示服务。",[382,28132,28133,28136,28139],{},[428,28134,28135],{"align":23851},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[428,28137,28138],{"align":23851},"挂载Wayland显示协议相关目录",[428,28140,28141],{"align":23851},"支持Wayland协议的图形显示。",[382,28143,28144,28147,28150],{},[428,28145,28146],{"align":23851},"–ulimit nofile=1024:524288",[428,28148,28149],{"align":23851},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[428,28151,28152],{"align":23851},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[382,28154,28155,28158,28161],{},[428,28156,28157],{"align":23851},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[428,28159,28160],{"align":23851},"挂载宿主机用户目录到容器内同名路径",[428,28162,28163],{"align":23851},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[382,28165,28166,28169,28172],{},[428,28167,28168],{"align":23851},"-w \u002Fhome\u002Ftungchiahui",[428,28170,28171],{"align":23851},"设置容器启动后的默认工作目录",[428,28173,28174],{"align":23851},"直接进入项目路径，方便执行命令2324。",[382,28176,28177,28180,28183],{},[428,28178,28179],{"align":23851},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[428,28181,28182],{"align":23851},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[428,28184,28185],{"align":23851},"提供预配置的深度学习与机器人开发环境。",[19,28187,28188,28189,28191,28192,28195],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[30,28190,24692],{},"加不加",[30,28193,28194],{},"sudo -E","都无所谓。",[19,28197,28198,28199,28201,28202,28204,28205,28208,28209,28211],{},"用户已经被加到docker组了，不用",[30,28200,24692],{},"也行跑，其次，",[30,28203,24692],{},"运行的话，你的",[30,28206,28207],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[30,28210,28207],{},"更不可能变了。",[220,28213,28215],{"className":23937,"code":28214,"language":23939,"meta":141,"style":141},"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",[30,28216,28217,28230,28240,28250,28262,28269,28276,28283,28293,28302,28311,28325,28337,28349,28358,28368,28377,28392,28425,28452,28463,28470],{"__ignoreMap":141},[228,28218,28219,28221,28223,28225,28228],{"class":230,"line":231},[228,28220,24692],{"class":2077},[228,28222,26436],{"class":343},[228,28224,27346],{"class":343},[228,28226,28227],{"class":287}," --name=ros_opencv_cuda",[228,28229,24794],{"class":287},[228,28231,28232,28235,28238],{"class":230,"line":142},[228,28233,28234],{"class":238},"--gpus ",[228,28236,28237],{"class":343},"all",[228,28239,24794],{"class":287},[228,28241,28242,28245,28248],{"class":230,"line":1293},[228,28243,28244],{"class":238},"-e ",[228,28246,28247],{"class":343},"NVIDIA_DRIVER_CAPABILITIES=all",[228,28249,24794],{"class":287},[228,28251,28252,28254,28257,28260],{"class":230,"line":1308},[228,28253,28244],{"class":238},[228,28255,28256],{"class":343},"DISPLAY=",[228,28258,28259],{"class":238},"$DISPLAY ",[228,28261,26291],{"class":287},[228,28263,28264,28267],{"class":230,"line":1314},[228,28265,28266],{"class":238},"-dit ",[228,28268,26291],{"class":287},[228,28270,28271,28274],{"class":230,"line":1328},[228,28272,28273],{"class":238},"--privileged ",[228,28275,26291],{"class":287},[228,28277,28278,28281],{"class":230,"line":1334},[228,28279,28280],{"class":238},"--net=host ",[228,28282,26291],{"class":287},[228,28284,28285,28288,28291],{"class":230,"line":1425},[228,28286,28287],{"class":238},"--group-add ",[228,28289,28290],{"class":343},"audio",[228,28292,24794],{"class":287},[228,28294,28295,28297,28300],{"class":230,"line":1431},[228,28296,28287],{"class":238},[228,28298,28299],{"class":343},"video",[228,28301,24794],{"class":287},[228,28303,28304,28306,28309],{"class":230,"line":1443},[228,28305,28287],{"class":238},[228,28307,28308],{"class":343},"dialout",[228,28310,24794],{"class":287},[228,28312,28313,28315,28318,28320,28323],{"class":230,"line":1726},[228,28314,28244],{"class":238},[228,28316,28317],{"class":343},"XAUTHORITY=",[228,28319,28207],{"class":238},[228,28321,28322],{"class":343},"\u002F.Xauthority",[228,28324,24794],{"class":287},[228,28326,28327,28329,28332,28335],{"class":230,"line":1731},[228,28328,28244],{"class":238},[228,28330,28331],{"class":343},"WAYLAND_DISPLAY=",[228,28333,28334],{"class":238},"$WAYLAND_DISPLAY ",[228,28336,26291],{"class":287},[228,28338,28339,28341,28344,28347],{"class":230,"line":1737},[228,28340,28244],{"class":238},[228,28342,28343],{"class":343},"XDG_RUNTIME_DIR=",[228,28345,28346],{"class":238},"$XDG_RUNTIME_DIR ",[228,28348,26291],{"class":287},[228,28350,28351,28353,28356],{"class":230,"line":1742},[228,28352,28244],{"class":238},[228,28354,28355],{"class":343},"QT_QPA_PLATFORM=xcb",[228,28357,24794],{"class":287},[228,28359,28360,28363,28366],{"class":230,"line":1756},[228,28361,28362],{"class":238},"-v ",[228,28364,28365],{"class":343},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[228,28367,24794],{"class":287},[228,28369,28370,28372,28375],{"class":230,"line":1761},[228,28371,28362],{"class":238},[228,28373,28374],{"class":343},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[228,28376,24794],{"class":287},[228,28378,28379,28382,28385,28387,28390],{"class":230,"line":1767},[228,28380,28381],{"class":238},"-v $HOME",[228,28383,28384],{"class":343},"\u002F.Xauthority:",[228,28386,28207],{"class":238},[228,28388,28389],{"class":343},"\u002F.Xauthority:ro",[228,28391,24794],{"class":287},[228,28393,28394,28396,28399,28401,28404,28407,28409,28412,28414,28416,28418,28420,28423],{"class":230,"line":1788},[228,28395,28362],{"class":238},[228,28397,28398],{"class":343},"\u002Frun\u002Fuser\u002F",[228,28400,25215],{"class":238},[228,28402,28403],{"class":2077},"id",[228,28405,28406],{"class":287}," -u",[228,28408,667],{"class":238},[228,28410,28411],{"class":343},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[228,28413,25215],{"class":238},[228,28415,28403],{"class":2077},[228,28417,28406],{"class":287},[228,28419,667],{"class":238},[228,28421,28422],{"class":343},"\u002Fwayland-0",[228,28424,24794],{"class":287},[228,28426,28427,28429,28431,28433,28435,28437,28439,28442,28444,28446,28448,28450],{"class":230,"line":1793},[228,28428,28362],{"class":238},[228,28430,28398],{"class":343},[228,28432,25215],{"class":238},[228,28434,28403],{"class":2077},[228,28436,28406],{"class":287},[228,28438,667],{"class":238},[228,28440,28441],{"class":343},":\u002Frun\u002Fuser\u002F",[228,28443,25215],{"class":238},[228,28445,28403],{"class":2077},[228,28447,28406],{"class":287},[228,28449,13829],{"class":238},[228,28451,26291],{"class":287},[228,28453,28454,28456,28458,28461],{"class":230,"line":1807},[228,28455,28381],{"class":238},[228,28457,1097],{"class":343},[228,28459,28460],{"class":238},"$HOME ",[228,28462,26291],{"class":287},[228,28464,28465,28468],{"class":230,"line":1812},[228,28466,28467],{"class":238},"-w $HOME ",[228,28469,26291],{"class":287},[228,28471,28472],{"class":230,"line":1841},[228,28473,28474],{"class":238},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,28476,9140],{},[183,28478,28479,28487,28490,28493],{},[186,28480,28481,13910,28483,28486],{},[30,28482,28247],{},[30,28484,28485],{},"--gpus all","没有英伟达显卡请注释。",[186,28488,28489],{},"--name后面请自己为容器起名。",[186,28491,28492],{},"最后一行仓库名称请你自己找对应的镜像填上。",[186,28494,28495,28496,78],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23668,28497,28498],{},[388,28499,28500],{},"请不要加",[220,28502,28504],{"className":23937,"code":28503,"language":23939,"meta":141,"style":141},"--ulimit nofile=1024:524288 \\\n",[30,28505,28506],{"__ignoreMap":141},[228,28507,28508,28511,28514],{"class":230,"line":231},[228,28509,28510],{"class":2077},"--ulimit",[228,28512,28513],{"class":343}," nofile=1024:524288",[228,28515,24794],{"class":287},[19,28517,28518,28519,28524],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23668,28520,28521],{},[388,28522,28523],{},"不建议","**.**",[220,28526,28528],{"className":23937,"code":28527,"language":23939,"meta":141,"style":141},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[30,28529,28530,28557,28566],{"__ignoreMap":141},[228,28531,28532,28535,28538,28540,28542,28544,28546,28548,28550,28553,28555],{"class":230,"line":231},[228,28533,28534],{"class":2077},"--user",[228,28536,28537],{"class":238}," $(",[228,28539,28403],{"class":2077},[228,28541,28406],{"class":287},[228,28543,667],{"class":238},[228,28545,1097],{"class":343},[228,28547,25215],{"class":238},[228,28549,28403],{"class":2077},[228,28551,28552],{"class":287}," -g",[228,28554,13829],{"class":238},[228,28556,26291],{"class":287},[228,28558,28559,28561,28564],{"class":230,"line":142},[228,28560,28362],{"class":238},[228,28562,28563],{"class":343},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[228,28565,24794],{"class":287},[228,28567,28568,28570,28573],{"class":230,"line":1293},[228,28569,28362],{"class":238},[228,28571,28572],{"class":343},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[228,28574,24794],{"class":287},[5241,28576,28577],{},"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":141,"searchDepth":142,"depth":142,"links":28579},[28580,28581,28582],{"id":27579,"depth":1293,"text":27580},{"id":27589,"depth":1293,"text":27590},{"id":28000,"depth":1293,"text":28003},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27571,"description":141},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28589,"title":28590,"body":28591,"description":141,"extension":155,"meta":30214,"navigation":157,"path":30215,"seo":30216,"stem":30217,"__hash__":30218},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28592,"toc":30209},[28593,28596,28600,28603,28825,28829,28833,28836,28942,28947,28950,28955,28958,28963,28966,28971,28974,28986,28989,28994,29001,29029,29036,29112,29117,29120,29143,29145,29220,29225,29228,29232,29240,29245,29250,29254,29265,29271,29274,29277,29301,29304,29307,29335,29338,29341,29806,29809,29814,29819,29823,29846,29851,29855,29859,29862,29865,29868,29895,29898,29901,29919,29922,29925,29947,29955,29960,29965,29969,29972,29975,29978,29981,30026,30029,30047,30050,30055,30058,30079,30082,30138,30141,30146,30150,30153,30160,30163,30166,30171,30174,30190,30193,30206],[10,28594,28590],{"id":28595},"_6手动创建docker镜像",[200,28597,28599],{"id":28598},"_61dockerfile","6.1.DockerFile",[19,28601,28602],{},"常用命令：",[376,28604,28605,28616],{},[379,28606,28607],{},[382,28608,28609,28612,28614],{},[385,28610,28611],{"align":23851},"指令",[385,28613,25985],{"align":23851},[385,28615,27608],{"align":23851},[423,28617,28618,28628,28644,28655,28666,28677,28688,28699,28710,28724,28738,28749,28763,28774,28785,28799,28814],{},[382,28619,28620,28622,28625],{},[428,28621,27486],{"align":23851},[428,28623,28624],{"align":23851},"指定基础镜像，是 Dockerfile 的起点",[428,28626,28627],{"align":23851},"FROM ubuntu:22.04",[382,28629,28630,28633,28636],{},[428,28631,28632],{"align":23851},"LABEL",[428,28634,28635],{"align":23851},"添加元数据（如作者、版本等）",[428,28637,28638,28639,28643],{"align":23851},"LABEL maintainer=”",[476,28640,28642],{"href":28641},"mailto:you@example.com","you@example.com","”",[382,28645,28646,28649,28652],{},[428,28647,28648],{"align":23851},"ENV",[428,28650,28651],{"align":23851},"设置环境变量",[428,28653,28654],{"align":23851},"ENV PORT=8080",[382,28656,28657,28660,28663],{},[428,28658,28659],{"align":23851},"ARG",[428,28661,28662],{"align":23851},"构建参数，只在构建期间可用",[428,28664,28665],{"align":23851},"ARG VERSION=1.0",[382,28667,28668,28671,28674],{},[428,28669,28670],{"align":23851},"RUN",[428,28672,28673],{"align":23851},"构建镜像时运行命令",[428,28675,28676],{"align":23851},"RUN apt-get update && apt-get install -y curl",[382,28678,28679,28682,28685],{},[428,28680,28681],{"align":23851},"COPY",[428,28683,28684],{"align":23851},"复制文件到镜像中",[428,28686,28687],{"align":23851},"COPY . \u002Fapp",[382,28689,28690,28693,28696],{},[428,28691,28692],{"align":23851},"ADD",[428,28694,28695],{"align":23851},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[428,28697,28698],{"align":23851},"ADD archive.tar.gz \u002Fdata\u002F",[382,28700,28701,28704,28707],{},[428,28702,28703],{"align":23851},"WORKDIR",[428,28705,28706],{"align":23851},"设置工作目录",[428,28708,28709],{"align":23851},"WORKDIR \u002Fopt",[382,28711,28712,28715,28718],{},[428,28713,28714],{"align":23851},"CMD",[428,28716,28717],{"align":23851},"设置容器启动时默认命令（可被 docker run 覆盖）",[428,28719,28720,28721],{"align":23851},"CMD ",[228,28722,28723],{},"“node”, “index.js”",[382,28725,28726,28729,28732],{},[428,28727,28728],{"align":23851},"ENTRYPOINT",[428,28730,28731],{"align":23851},"设置容器启动时固定命令（通常用于 CLI 工具等）",[428,28733,28734,28735],{"align":23851},"ENTRYPOINT ",[228,28736,28737],{},"“python3”",[382,28739,28740,28743,28746],{},[428,28741,28742],{"align":23851},"EXPOSE",[428,28744,28745],{"align":23851},"声明镜像内服务监听的端口（不会自动映射）",[428,28747,28748],{"align":23851},"EXPOSE 80",[382,28750,28751,28754,28757],{},[428,28752,28753],{"align":23851},"VOLUME",[428,28755,28756],{"align":23851},"声明数据卷挂载点",[428,28758,28759,28760],{"align":23851},"VOLUME ",[228,28761,28762],{},"“\u002Fdata”",[382,28764,28765,28768,28771],{},[428,28766,28767],{"align":23851},"USER",[428,28769,28770],{"align":23851},"设置后续命令执行的用户",[428,28772,28773],{"align":23851},"USER appuser",[382,28775,28776,28779,28782],{},[428,28777,28778],{"align":23851},"ONBUILD",[428,28780,28781],{"align":23851},"当镜像作为其他镜像基础镜像时触发的构建指令",[428,28783,28784],{"align":23851},"ONBUILD COPY . \u002Fsrc",[382,28786,28787,28790,28793],{},[428,28788,28789],{"align":23851},"SHELL",[428,28791,28792],{"align":23851},"更改默认 shell，比如将 sh -c 改为 bash -c",[428,28794,28795,28796],{"align":23851},"SHELL ",[228,28797,28798],{},"“\u002Fbin\u002Fbash”, “-c”",[382,28800,28801,28804,28807],{},[428,28802,28803],{"align":23851},"HEALTHCHECK",[428,28805,28806],{"align":23851},"定义容器运行时的健康检查命令",[428,28808,28809,28810],{"align":23851},"`HEALTHCHECK CMD curl –fail ",[476,28811,28812],{"href":28812,"rel":28813},"http:\u002F\u002Flocalhost:8080",[23980],[382,28815,28816,28819,28822],{},[428,28817,28818],{"align":23851},"STOPSIGNAL",[428,28820,28821],{"align":23851},"容器停止时发送的信号",[428,28823,28824],{"align":23851},"STOPSIGNAL SIGKILL",[200,28826,28828],{"id":28827},"_62自己创建容器","6.2.自己创建容器",[22113,28830,28832],{"id":28831},"_621手动创建","6.2.1.手动创建",[19,28834,28835],{},"在x86电脑上编译x86的：",[220,28837,28839],{"className":23937,"code":28838,"language":23939,"meta":141,"style":141},"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",[30,28840,28841,28857,28861,28874,28878,28891,28895,28908,28912,28925,28929],{"__ignoreMap":141},[228,28842,28843,28845,28848,28851,28854],{"class":230,"line":231},[228,28844,26669],{"class":2077},[228,28846,28847],{"class":343}," build",[228,28849,28850],{"class":287}," -t",[228,28852,28853],{"class":343}," ros-melodic-cuda118-cudnn8-bionic:latest",[228,28855,28856],{"class":343}," .\n",[228,28858,28859],{"class":230,"line":142},[228,28860,2514],{"emptyLinePlaceholder":157},[228,28862,28863,28865,28867,28869,28872],{"class":230,"line":1293},[228,28864,26669],{"class":2077},[228,28866,28847],{"class":343},[228,28868,28850],{"class":287},[228,28870,28871],{"class":343}," ros-noetic-focal:latest",[228,28873,28856],{"class":343},[228,28875,28876],{"class":230,"line":1308},[228,28877,2514],{"emptyLinePlaceholder":157},[228,28879,28880,28882,28884,28886,28889],{"class":230,"line":1314},[228,28881,26669],{"class":2077},[228,28883,28847],{"class":343},[228,28885,28850],{"class":287},[228,28887,28888],{"class":343}," ros-humble-jammy:latest",[228,28890,28856],{"class":343},[228,28892,28893],{"class":230,"line":1328},[228,28894,2514],{"emptyLinePlaceholder":157},[228,28896,28897,28899,28901,28903,28906],{"class":230,"line":1334},[228,28898,26669],{"class":2077},[228,28900,28847],{"class":343},[228,28902,28850],{"class":287},[228,28904,28905],{"class":343}," ros-jazzy-noble:latest",[228,28907,28856],{"class":343},[228,28909,28910],{"class":230,"line":1425},[228,28911,2514],{"emptyLinePlaceholder":157},[228,28913,28914,28916,28918,28920,28923],{"class":230,"line":1431},[228,28915,26669],{"class":2077},[228,28917,28847],{"class":343},[228,28919,28850],{"class":287},[228,28921,28922],{"class":343}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[228,28924,28856],{"class":343},[228,28926,28927],{"class":230,"line":1443},[228,28928,2514],{"emptyLinePlaceholder":157},[228,28930,28931,28933,28935,28937,28940],{"class":230,"line":1726},[228,28932,26669],{"class":2077},[228,28934,28847],{"class":343},[228,28936,28850],{"class":287},[228,28938,28939],{"class":343}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[228,28941,28856],{"class":343},[19,28943,28944],{},[1576,28945],{"alt":141,"src":28946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,28948,28949],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,28951,28952],{},[1576,28953],{"alt":141,"src":28954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,28956,28957],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[183,28959,28960],{},[186,28961,28962],{},"创建 Docker Hub 账户",[19,28964,28965],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[183,28967,28968],{"start":142},[186,28969,28970],{},"登录 Docker Hub",[19,28972,28973],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[220,28975,28977],{"className":23937,"code":28976,"language":23939,"meta":141,"style":141},"docker login\n",[30,28978,28979],{"__ignoreMap":141},[228,28980,28981,28983],{"class":230,"line":231},[228,28982,26669],{"class":2077},[228,28984,28985],{"class":343}," login\n",[19,28987,28988],{},"输入你的 Docker Hub 用户名和密码进行验证。",[183,28990,28991],{},[186,28992,28993],{},"为你的镜像打标签",[19,28995,28996,28997,29000],{},"Docker Hub 使用 ",[30,28998,28999],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[220,29002,29004],{"className":23937,"code":29003,"language":23939,"meta":141,"style":141},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[30,29005,29006],{"__ignoreMap":141},[228,29007,29008,29010,29013,29015,29018,29021,29024,29026],{"class":230,"line":231},[228,29009,26669],{"class":2077},[228,29011,29012],{"class":343}," tag",[228,29014,28905],{"class":343},[228,29016,29017],{"class":234}," \u003C",[228,29019,29020],{"class":343},"你的用户",[228,29022,29023],{"class":238},"名",[228,29025,1198],{"class":234},[228,29027,29028],{"class":343},"\u002Fros-jazzy-noble:latest\n",[19,29030,29031,29032,29035],{},"例如，如果你的 Docker Hub 用户名是 ",[30,29033,29034],{},"tungchiahui","，你应该执行：",[220,29037,29039],{"className":23937,"code":29038,"language":23939,"meta":141,"style":141},"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",[30,29040,29041,29052,29056,29067,29071,29082,29086,29097,29101],{"__ignoreMap":141},[228,29042,29043,29045,29047,29049],{"class":230,"line":231},[228,29044,26669],{"class":2077},[228,29046,29012],{"class":343},[228,29048,28871],{"class":343},[228,29050,29051],{"class":343}," tungchiahui\u002Fros-noetic-focal:latest\n",[228,29053,29054],{"class":230,"line":142},[228,29055,2514],{"emptyLinePlaceholder":157},[228,29057,29058,29060,29062,29064],{"class":230,"line":1293},[228,29059,26669],{"class":2077},[228,29061,29012],{"class":343},[228,29063,28888],{"class":343},[228,29065,29066],{"class":343}," tungchiahui\u002Fros-humble-jammy:latest\n",[228,29068,29069],{"class":230,"line":1308},[228,29070,2514],{"emptyLinePlaceholder":157},[228,29072,29073,29075,29077,29079],{"class":230,"line":1314},[228,29074,26669],{"class":2077},[228,29076,29012],{"class":343},[228,29078,28905],{"class":343},[228,29080,29081],{"class":343}," tungchiahui\u002Fros-jazzy-noble:latest\n",[228,29083,29084],{"class":230,"line":1328},[228,29085,2514],{"emptyLinePlaceholder":157},[228,29087,29088,29090,29092,29094],{"class":230,"line":1334},[228,29089,26669],{"class":2077},[228,29091,29012],{"class":343},[228,29093,28922],{"class":343},[228,29095,29096],{"class":343}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[228,29098,29099],{"class":230,"line":1425},[228,29100,2514],{"emptyLinePlaceholder":157},[228,29102,29103,29105,29107,29109],{"class":230,"line":1431},[228,29104,26669],{"class":2077},[228,29106,29012],{"class":343},[228,29108,28939],{"class":343},[228,29110,29111],{"class":343}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[183,29113,29114],{"start":142},[186,29115,29116],{},"推送镜像到 Docker Hub",[19,29118,29119],{},"使用以下命令将镜像推送到 Docker Hub：",[220,29121,29123],{"className":23937,"code":29122,"language":23939,"meta":141,"style":141},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[30,29124,29125],{"__ignoreMap":141},[228,29126,29127,29129,29132,29134,29136,29138,29140],{"class":230,"line":231},[228,29128,26669],{"class":2077},[228,29130,29131],{"class":343}," push",[228,29133,29017],{"class":234},[228,29135,29020],{"class":343},[228,29137,29023],{"class":238},[228,29139,1198],{"class":234},[228,29141,29142],{"class":343},"\u002Fros-noetic-jazzy-noble:latest\n",[19,29144,14748],{},[220,29146,29148],{"className":23937,"code":29147,"language":23939,"meta":141,"style":141},"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",[30,29149,29150,29158,29162,29170,29174,29182,29186,29195,29199,29207,29211],{"__ignoreMap":141},[228,29151,29152,29154,29156],{"class":230,"line":231},[228,29153,26669],{"class":2077},[228,29155,29131],{"class":343},[228,29157,29051],{"class":343},[228,29159,29160],{"class":230,"line":142},[228,29161,2514],{"emptyLinePlaceholder":157},[228,29163,29164,29166,29168],{"class":230,"line":1293},[228,29165,26669],{"class":2077},[228,29167,29131],{"class":343},[228,29169,29066],{"class":343},[228,29171,29172],{"class":230,"line":1308},[228,29173,2514],{"emptyLinePlaceholder":157},[228,29175,29176,29178,29180],{"class":230,"line":1314},[228,29177,26669],{"class":2077},[228,29179,29131],{"class":343},[228,29181,29081],{"class":343},[228,29183,29184],{"class":230,"line":1328},[228,29185,2514],{"emptyLinePlaceholder":157},[228,29187,29188,29190,29192],{"class":230,"line":1334},[228,29189,26669],{"class":2077},[228,29191,29131],{"class":343},[228,29193,29194],{"class":343}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[228,29196,29197],{"class":230,"line":1425},[228,29198,2514],{"emptyLinePlaceholder":157},[228,29200,29201,29203,29205],{"class":230,"line":1431},[228,29202,26669],{"class":2077},[228,29204,29131],{"class":343},[228,29206,29111],{"class":343},[228,29208,29209],{"class":230,"line":1443},[228,29210,2514],{"emptyLinePlaceholder":157},[228,29212,29213,29215,29217],{"class":230,"line":1726},[228,29214,26669],{"class":2077},[228,29216,29131],{"class":343},[228,29218,29219],{"class":343}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[183,29221,29222],{"start":1293},[186,29223,29224],{},"验证推送成功",[19,29226,29227],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,29229,29230],{},[388,29231,3898],{},[1245,29233,29234,29237],{},[186,29235,29236],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[186,29238,29239],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,29241,29242],{},[1576,29243],{"alt":141,"src":29244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,29246,29247],{},[1576,29248],{"alt":141,"src":29249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22113,29251,29253],{"id":29252},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,29255,29256,29257,29260,29261,29264],{},"如果您想在 ",[388,29258,29259],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[388,29262,29263],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,29266,29267,29268],{},"1. ",[388,29269,29270],{},"启用 Docker 跨平台构建",[19,29272,29273],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,29275,29276],{},"第一步：启用 buildx（只需执行一次）",[220,29278,29280],{"className":23937,"code":29279,"language":23939,"meta":141,"style":141},"docker buildx create --name multiarch_builder --use\n",[30,29281,29282],{"__ignoreMap":141},[228,29283,29284,29286,29289,29292,29295,29298],{"class":230,"line":231},[228,29285,26669],{"class":2077},[228,29287,29288],{"class":343}," buildx",[228,29290,29291],{"class":343}," create",[228,29293,29294],{"class":287}," --name",[228,29296,29297],{"class":343}," multiarch_builder",[228,29299,29300],{"class":287}," --use\n",[19,29302,29303],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,29305,29306],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[220,29308,29310],{"className":23937,"code":29309,"language":23939,"meta":141,"style":141},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[30,29311,29312],{"__ignoreMap":141},[228,29313,29314,29316,29318,29320,29323,29326,29329,29332],{"class":230,"line":231},[228,29315,26669],{"class":2077},[228,29317,27346],{"class":343},[228,29319,27349],{"class":287},[228,29321,29322],{"class":287}," --privileged",[228,29324,29325],{"class":343}," multiarch\u002Fqemu-user-static",[228,29327,29328],{"class":287}," --reset",[228,29330,29331],{"class":287}," -p",[228,29333,29334],{"class":343}," yes\n",[19,29336,29337],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,29339,29340],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[220,29342,29344],{"className":23937,"code":29343,"language":23939,"meta":141,"style":141},"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",[30,29345,29346,29388,29392,29397,29407,29417,29426,29432,29436,29440,29450,29458,29467,29473,29477,29481,29491,29499,29508,29514,29518,29522,29532,29540,29549,29555,29559,29563,29573,29581,29590,29596,29600,29604,29614,29622,29631,29637,29641,29645,29655,29663,29672,29678,29682,29686,29696,29704,29713,29719,29723,29727,29737,29745,29754,29760,29764,29768,29779,29787,29796,29802],{"__ignoreMap":141},[228,29347,29348,29350,29352,29354,29357,29360,29362,29364,29367,29369,29371,29373,29375,29378,29381,29383,29386],{"class":230,"line":231},[228,29349,26669],{"class":2077},[228,29351,29288],{"class":343},[228,29353,28847],{"class":343},[228,29355,29356],{"class":287}," --platform",[228,29358,29359],{"class":343}," linux\u002Famd64,linux\u002Farm64",[228,29361,28850],{"class":287},[228,29363,29017],{"class":234},[228,29365,29366],{"class":343},"你的镜像",[228,29368,29023],{"class":238},[228,29370,1198],{"class":234},[228,29372,1097],{"class":343},[228,29374,1148],{"class":234},[228,29376,29377],{"class":343},"标",[228,29379,29380],{"class":238},"签",[228,29382,1198],{"class":234},[228,29384,29385],{"class":287}," --push",[228,29387,28856],{"class":343},[228,29389,29390],{"class":230,"line":142},[228,29391,2514],{"emptyLinePlaceholder":157},[228,29393,29394],{"class":230,"line":1293},[228,29395,29396],{"class":297},"# 例子：\n",[228,29398,29399,29401,29403,29405],{"class":230,"line":1308},[228,29400,26669],{"class":2077},[228,29402,29288],{"class":343},[228,29404,28847],{"class":343},[228,29406,24794],{"class":287},[228,29408,29409,29412,29415],{"class":230,"line":1314},[228,29410,29411],{"class":238},"--platform ",[228,29413,29414],{"class":343},"linux\u002Famd64,linux\u002Farm64",[228,29416,24794],{"class":287},[228,29418,29419,29421,29424],{"class":230,"line":1328},[228,29420,28850],{"class":287},[228,29422,29423],{"class":343}," tungchiahui\u002Fros:noetic-focal",[228,29425,24794],{"class":287},[228,29427,29428,29430],{"class":230,"line":1334},[228,29429,29385],{"class":287},[228,29431,24794],{"class":287},[228,29433,29434],{"class":230,"line":1425},[228,29435,28856],{"class":343},[228,29437,29438],{"class":230,"line":1431},[228,29439,2514],{"emptyLinePlaceholder":157},[228,29441,29442,29444,29446,29448],{"class":230,"line":1443},[228,29443,26669],{"class":2077},[228,29445,29288],{"class":343},[228,29447,28847],{"class":343},[228,29449,24794],{"class":287},[228,29451,29452,29454,29456],{"class":230,"line":1726},[228,29453,29411],{"class":238},[228,29455,29414],{"class":343},[228,29457,24794],{"class":287},[228,29459,29460,29462,29465],{"class":230,"line":1731},[228,29461,28850],{"class":287},[228,29463,29464],{"class":343}," tungchiahui\u002Fros:humble-jammy",[228,29466,24794],{"class":287},[228,29468,29469,29471],{"class":230,"line":1737},[228,29470,29385],{"class":287},[228,29472,24794],{"class":287},[228,29474,29475],{"class":230,"line":1742},[228,29476,28856],{"class":343},[228,29478,29479],{"class":230,"line":1756},[228,29480,2514],{"emptyLinePlaceholder":157},[228,29482,29483,29485,29487,29489],{"class":230,"line":1761},[228,29484,26669],{"class":2077},[228,29486,29288],{"class":343},[228,29488,28847],{"class":343},[228,29490,24794],{"class":287},[228,29492,29493,29495,29497],{"class":230,"line":1767},[228,29494,29411],{"class":238},[228,29496,29414],{"class":343},[228,29498,24794],{"class":287},[228,29500,29501,29503,29506],{"class":230,"line":1788},[228,29502,28850],{"class":287},[228,29504,29505],{"class":343}," tungchiahui\u002Fros:jazzy-noble",[228,29507,24794],{"class":287},[228,29509,29510,29512],{"class":230,"line":1793},[228,29511,29385],{"class":287},[228,29513,24794],{"class":287},[228,29515,29516],{"class":230,"line":1807},[228,29517,28856],{"class":343},[228,29519,29520],{"class":230,"line":1812},[228,29521,2514],{"emptyLinePlaceholder":157},[228,29523,29524,29526,29528,29530],{"class":230,"line":1841},[228,29525,26436],{"class":2077},[228,29527,29288],{"class":343},[228,29529,28847],{"class":343},[228,29531,24794],{"class":287},[228,29533,29534,29536,29538],{"class":230,"line":1846},[228,29535,29411],{"class":238},[228,29537,29414],{"class":343},[228,29539,24794],{"class":287},[228,29541,29542,29544,29547],{"class":230,"line":1863},[228,29543,28850],{"class":287},[228,29545,29546],{"class":343}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[228,29548,24794],{"class":287},[228,29550,29551,29553],{"class":230,"line":1868},[228,29552,29385],{"class":287},[228,29554,24794],{"class":287},[228,29556,29557],{"class":230,"line":1873},[228,29558,28856],{"class":343},[228,29560,29561],{"class":230,"line":1878},[228,29562,2514],{"emptyLinePlaceholder":157},[228,29564,29565,29567,29569,29571],{"class":230,"line":1892},[228,29566,26669],{"class":2077},[228,29568,29288],{"class":343},[228,29570,28847],{"class":343},[228,29572,24794],{"class":287},[228,29574,29575,29577,29579],{"class":230,"line":1897},[228,29576,29411],{"class":238},[228,29578,29414],{"class":343},[228,29580,24794],{"class":287},[228,29582,29583,29585,29588],{"class":230,"line":2691},[228,29584,28850],{"class":287},[228,29586,29587],{"class":343}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[228,29589,24794],{"class":287},[228,29591,29592,29594],{"class":230,"line":2705},[228,29593,29385],{"class":287},[228,29595,24794],{"class":287},[228,29597,29598],{"class":230,"line":2713},[228,29599,28856],{"class":343},[228,29601,29602],{"class":230,"line":2718},[228,29603,2514],{"emptyLinePlaceholder":157},[228,29605,29606,29608,29610,29612],{"class":230,"line":2724},[228,29607,26436],{"class":2077},[228,29609,29288],{"class":343},[228,29611,28847],{"class":343},[228,29613,24794],{"class":287},[228,29615,29616,29618,29620],{"class":230,"line":2730},[228,29617,29411],{"class":238},[228,29619,29414],{"class":343},[228,29621,24794],{"class":287},[228,29623,29624,29626,29629],{"class":230,"line":2735},[228,29625,28850],{"class":287},[228,29627,29628],{"class":343}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[228,29630,24794],{"class":287},[228,29632,29633,29635],{"class":230,"line":8063},[228,29634,29385],{"class":287},[228,29636,24794],{"class":287},[228,29638,29639],{"class":230,"line":8087},[228,29640,28856],{"class":343},[228,29642,29643],{"class":230,"line":8092},[228,29644,2514],{"emptyLinePlaceholder":157},[228,29646,29647,29649,29651,29653],{"class":230,"line":8098},[228,29648,26669],{"class":2077},[228,29650,29288],{"class":343},[228,29652,28847],{"class":343},[228,29654,24794],{"class":287},[228,29656,29657,29659,29661],{"class":230,"line":8125},[228,29658,29411],{"class":238},[228,29660,29414],{"class":343},[228,29662,24794],{"class":287},[228,29664,29665,29667,29670],{"class":230,"line":8130},[228,29666,28850],{"class":287},[228,29668,29669],{"class":343}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[228,29671,24794],{"class":287},[228,29673,29674,29676],{"class":230,"line":8136},[228,29675,29385],{"class":287},[228,29677,24794],{"class":287},[228,29679,29680],{"class":230,"line":8148},[228,29681,28856],{"class":343},[228,29683,29684],{"class":230,"line":8160},[228,29685,2514],{"emptyLinePlaceholder":157},[228,29687,29688,29690,29692,29694],{"class":230,"line":8172},[228,29689,26669],{"class":2077},[228,29691,29288],{"class":343},[228,29693,28847],{"class":343},[228,29695,24794],{"class":287},[228,29697,29698,29700,29702],{"class":230,"line":9831},[228,29699,29411],{"class":238},[228,29701,29414],{"class":343},[228,29703,24794],{"class":287},[228,29705,29706,29708,29711],{"class":230,"line":9856},[228,29707,28850],{"class":287},[228,29709,29710],{"class":343}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[228,29712,24794],{"class":287},[228,29714,29715,29717],{"class":230,"line":9879},[228,29716,29385],{"class":287},[228,29718,24794],{"class":287},[228,29720,29721],{"class":230,"line":9903},[228,29722,28856],{"class":343},[228,29724,29725],{"class":230,"line":9908},[228,29726,2514],{"emptyLinePlaceholder":157},[228,29728,29729,29731,29733,29735],{"class":230,"line":9913},[228,29730,26436],{"class":2077},[228,29732,29288],{"class":343},[228,29734,28847],{"class":343},[228,29736,24794],{"class":287},[228,29738,29739,29741,29743],{"class":230,"line":9918},[228,29740,29411],{"class":238},[228,29742,29414],{"class":343},[228,29744,24794],{"class":287},[228,29746,29747,29749,29752],{"class":230,"line":9927},[228,29748,28850],{"class":287},[228,29750,29751],{"class":343}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[228,29753,24794],{"class":287},[228,29755,29756,29758],{"class":230,"line":9932},[228,29757,29385],{"class":287},[228,29759,24794],{"class":287},[228,29761,29762],{"class":230,"line":9938},[228,29763,28856],{"class":343},[228,29765,29766],{"class":230,"line":9959},[228,29767,2514],{"emptyLinePlaceholder":157},[228,29769,29770,29773,29775,29777],{"class":230,"line":9965},[228,29771,29772],{"class":2077},"  docker",[228,29774,29288],{"class":343},[228,29776,28847],{"class":343},[228,29778,24794],{"class":287},[228,29780,29781,29783,29785],{"class":230,"line":9979},[228,29782,29411],{"class":238},[228,29784,29414],{"class":343},[228,29786,24794],{"class":287},[228,29788,29789,29791,29794],{"class":230,"line":9985},[228,29790,28850],{"class":287},[228,29792,29793],{"class":343}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[228,29795,24794],{"class":287},[228,29797,29798,29800],{"class":230,"line":10012},[228,29799,29385],{"class":287},[228,29801,24794],{"class":287},[228,29803,29804],{"class":230,"line":10021},[228,29805,28856],{"class":343},[19,29807,29808],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,29810,29811],{},[1576,29812],{"alt":141,"src":29813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,29815,29816],{},[1576,29817],{"alt":141,"src":29818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22113,29820,29822],{"id":29821},"_623清除构建缓存","6.2.3.清除构建缓存",[220,29824,29826],{"className":23937,"code":29825,"language":23939,"meta":141,"style":141},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[30,29827,29828,29833],{"__ignoreMap":141},[228,29829,29830],{"class":230,"line":231},[228,29831,29832],{"class":297},"# 清理BuildKit构建缓存\n",[228,29834,29835,29837,29840,29843],{"class":230,"line":142},[228,29836,26669],{"class":2077},[228,29838,29839],{"class":343}," builder",[228,29841,29842],{"class":343}," prune",[228,29844,29845],{"class":287}," -f\n",[19,29847,29848],{},[1576,29849],{"alt":141,"src":29850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[200,29852,29854],{"id":29853},"_63补充","6.3.补充",[22113,29856,29858],{"id":29857},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,29860,29861],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,29863,29864],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,29866,29867],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[220,29869,29871],{"className":23937,"code":29870,"language":23939,"meta":141,"style":141},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[30,29872,29873,29880],{"__ignoreMap":141},[228,29874,29875,29877],{"class":230,"line":231},[228,29876,27486],{"class":2077},[228,29878,29879],{"class":343}," nginx\n",[228,29881,29882,29884,29887,29890,29892],{"class":230,"line":142},[228,29883,28670],{"class":2077},[228,29885,29886],{"class":343}," echo",[228,29888,29889],{"class":343}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[228,29891,26338],{"class":234},[228,29893,29894],{"class":343}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,29896,29897],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,29899,29900],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[220,29902,29904],{"className":23937,"code":29903,"language":23939,"meta":141,"style":141},"docker build -t nginx:tuling .\n",[30,29905,29906],{"__ignoreMap":141},[228,29907,29908,29910,29912,29914,29917],{"class":230,"line":231},[228,29909,26669],{"class":2077},[228,29911,28847],{"class":343},[228,29913,28850],{"class":287},[228,29915,29916],{"class":343}," nginx:tuling",[228,29918,28856],{"class":343},[19,29920,29921],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,29923,29924],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[220,29926,29928],{"className":23937,"code":29927,"language":23939,"meta":141,"style":141},"docker run -d -p 92:80 nginx:tuling\n",[30,29929,29930],{"__ignoreMap":141},[228,29931,29932,29934,29936,29939,29941,29944],{"class":230,"line":231},[228,29933,26669],{"class":2077},[228,29935,27346],{"class":343},[228,29937,29938],{"class":287}," -d",[228,29940,29331],{"class":287},[228,29942,29943],{"class":343}," 92:80",[228,29945,29946],{"class":343}," nginx:tuling\n",[19,29948,29949,29950],{},"4、访问 ",[476,29951,29954],{"href":29952,"rel":29953},"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",[23980],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,29956,29957],{},[1576,29958],{"alt":141,"src":29959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,29961,29962],{},[1576,29963],{"alt":141,"src":29964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22113,29966,29968],{"id":29967},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,29970,29971],{},"只需要知道大体流程即可",[19,29973,29974],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,29976,29977],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,29979,29980],{},"2、在Dockerfile中添加以下内容",[220,29982,29984],{"className":26207,"code":29983,"language":26209,"meta":141,"style":141},"# 基于哪个镜像\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",[30,29985,29986,29991,29996,30001,30006,30011,30016,30021],{"__ignoreMap":141},[228,29987,29988],{"class":230,"line":231},[228,29989,29990],{},"# 基于哪个镜像\n",[228,29992,29993],{"class":230,"line":142},[228,29994,29995],{},"From java:8\n",[228,29997,29998],{"class":230,"line":1293},[228,29999,30000],{},"# 复制文件到容器\n",[228,30002,30003],{"class":230,"line":1308},[228,30004,30005],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[228,30007,30008],{"class":230,"line":1314},[228,30009,30010],{},"# 声明需要暴露的端口\n",[228,30012,30013],{"class":230,"line":1328},[228,30014,30015],{},"EXPOSE 8877\n",[228,30017,30018],{"class":230,"line":1334},[228,30019,30020],{},"# 配置容器启动后执行的命令\n",[228,30022,30023],{"class":230,"line":1425},[228,30024,30025],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,30027,30028],{},"3、使用docker build命令构建镜像",[220,30030,30032],{"className":23937,"code":30031,"language":23939,"meta":141,"style":141},"docker build -t tulingmall-member:0.0.5 .\n",[30,30033,30034],{"__ignoreMap":141},[228,30035,30036,30038,30040,30042,30045],{"class":230,"line":231},[228,30037,26669],{"class":2077},[228,30039,28847],{"class":343},[228,30041,28850],{"class":287},[228,30043,30044],{"class":343}," tulingmall-member:0.0.5",[228,30046,28856],{"class":343},[19,30048,30049],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,30051,30052],{},[1576,30053],{"alt":141,"src":30054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,30056,30057],{},"4、启动镜像，加-d可在后台启动",[220,30059,30061],{"className":23937,"code":30060,"language":23939,"meta":141,"style":141},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[30,30062,30063],{"__ignoreMap":141},[228,30064,30065,30067,30069,30071,30073,30076],{"class":230,"line":231},[228,30066,26669],{"class":2077},[228,30068,27346],{"class":343},[228,30070,29938],{"class":287},[228,30072,29331],{"class":287},[228,30074,30075],{"class":343}," 8877:8877",[228,30077,30078],{"class":343}," tulingmall-member:0.0.5\n",[19,30080,30081],{},"加上JVM参数：",[220,30083,30085],{"className":23937,"code":30084,"language":23939,"meta":141,"style":141},"# --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",[30,30086,30087,30092,30107,30117,30126,30133],{"__ignoreMap":141},[228,30088,30089],{"class":230,"line":231},[228,30090,30091],{"class":297},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[228,30093,30094,30096,30098,30101,30103,30105],{"class":230,"line":142},[228,30095,26669],{"class":2077},[228,30097,27346],{"class":343},[228,30099,30100],{"class":287},"  -d",[228,30102,29331],{"class":287},[228,30104,30075],{"class":343},[228,30106,24794],{"class":287},[228,30108,30109,30111,30114],{"class":230,"line":1293},[228,30110,28244],{"class":238},[228,30112,30113],{"class":343},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[228,30115,30116],{"class":287},"  \\\n",[228,30118,30119,30121,30124],{"class":230,"line":1308},[228,30120,28244],{"class":238},[228,30122,30123],{"class":343},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[228,30125,30116],{"class":287},[228,30127,30128,30131],{"class":230,"line":1314},[228,30129,30130],{"class":238},"--cap-add=SYS_PTRACE  ",[228,30132,26291],{"class":287},[228,30134,30135],{"class":230,"line":1328},[228,30136,30137],{"class":238},"tulingmall-member:0.0.5\n",[19,30139,30140],{},"5、访问会员服务接口",[19,30142,30143],{},[1576,30144],{"alt":141,"src":30145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22113,30147,30149],{"id":30148},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,30151,30152],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,30154,30155,30156],{},"阿里云docker镜像仓库：",[476,30157,30158],{"href":30158,"rel":30159},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[23980],[19,30161,30162],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,30164,30165],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,30167,30168],{},[1576,30169],{"alt":141,"src":30170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,30172,30173],{},"要把镜像推送到镜像仓库",[220,30175,30177],{"className":23937,"code":30176,"language":23939,"meta":141,"style":141},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[30,30178,30179],{"__ignoreMap":141},[228,30180,30181,30183,30185,30187],{"class":230,"line":231},[228,30182,26669],{"class":2077},[228,30184,29012],{"class":343},[228,30186,30044],{"class":343},[228,30188,30189],{"class":343}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,30191,30192],{},"最后将镜像推送到远程仓库",[220,30194,30196],{"className":23937,"code":30195,"language":23939,"meta":141,"style":141},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[30,30197,30198],{"__ignoreMap":141},[228,30199,30200,30202,30204],{"class":230,"line":231},[228,30201,26669],{"class":2077},[228,30203,29131],{"class":343},[228,30205,30189],{"class":343},[5241,30207,30208],{},"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":141,"searchDepth":142,"depth":142,"links":30210},[30211,30212,30213],{"id":28598,"depth":1293,"text":28599},{"id":28827,"depth":1293,"text":28828},{"id":29853,"depth":1293,"text":29854},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28590,"description":141},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30220,"title":30221,"body":30222,"description":141,"extension":155,"meta":30365,"navigation":157,"path":30366,"seo":30367,"stem":30368,"__hash__":30369},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30223,"toc":30363},[30224,30227,30232,30237,30240,30245,30250,30253,30258,30263,30266,30271,30274,30277,30280,30283,30286,30289,30309,30331,30334,30337,30357,30360],[10,30225,30221],{"id":30226},"_7vscode远程开发",[183,30228,30229],{},[186,30230,30231],{},"插件1：微软Docker工具",[19,30233,30234],{},[1576,30235],{"alt":141,"src":30236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,30238,30239],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,30241,30242],{},[1576,30243],{"alt":141,"src":30244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[183,30246,30247],{"start":142},[186,30248,30249],{},"插件2：微软Docker远程开发工具",[19,30251,30252],{},"下面这是远程开发的插件。",[19,30254,30255],{},[1576,30256],{"alt":141,"src":30257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,30259,30260],{},[1576,30261],{"alt":141,"src":30262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,30264,30265],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,30267,30268],{},[1576,30269],{"alt":141,"src":30270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,30272,30273],{},"安装完拓展之后，vscode进行链接：",[19,30275,30276],{},"1.按ctrl+shift+p",[19,30278,30279],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,30281,30282],{},"3.选择目前运行的容器",[19,30284,30285],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,30287,30288],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[220,30290,30292],{"className":23937,"code":30291,"language":23939,"meta":141,"style":141},"docker run -v 主机目录:容器目录 image-name\n",[30,30293,30294],{"__ignoreMap":141},[228,30295,30296,30298,30300,30303,30306],{"class":230,"line":231},[228,30297,26669],{"class":2077},[228,30299,27346],{"class":343},[228,30301,30302],{"class":287}," -v",[228,30304,30305],{"class":343}," 主机目录:容器目录",[228,30307,30308],{"class":343}," image-name\n",[220,30310,30312],{"className":23937,"code":30311,"language":23939,"meta":141,"style":141},"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",[30,30313,30314],{"__ignoreMap":141},[228,30315,30316,30318,30320,30323,30325,30328],{"class":230,"line":231},[228,30317,26669],{"class":2077},[228,30319,27346],{"class":343},[228,30321,30322],{"class":287}," -it",[228,30324,30302],{"class":287},[228,30326,30327],{"class":343}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[228,30329,30330],{"class":343}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,30332,30333],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,30335,30336],{},"查看挂载情况：",[220,30338,30340],{"className":23937,"code":30339,"language":23939,"meta":141,"style":141},"mount | grep -i project\n",[30,30341,30342],{"__ignoreMap":141},[228,30343,30344,30347,30349,30352,30354],{"class":230,"line":231},[228,30345,30346],{"class":2077},"mount",[228,30348,25225],{"class":234},[228,30350,30351],{"class":2077}," grep",[228,30353,26546],{"class":287},[228,30355,30356],{"class":343}," project\n",[19,30358,30359],{},"也可以通过ls来进行查看",[5241,30361,30362],{},"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":141,"searchDepth":142,"depth":142,"links":30364},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30221,"description":141},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30371,"title":30372,"body":30373,"description":154,"extension":155,"meta":30377,"navigation":157,"path":30379,"seo":30380,"stem":30381,"__hash__":30382},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30374,"toc":30375},[],{"title":141,"searchDepth":142,"depth":142,"links":30376},[],{"category":30378},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30372,"description":154},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30384,"title":30385,"body":30386,"description":154,"extension":155,"meta":30390,"navigation":157,"path":30391,"seo":30392,"stem":30393,"__hash__":30394},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30387,"toc":30388},[],{"title":141,"searchDepth":142,"depth":142,"links":30389},[],{"category":30378},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30385,"description":154},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30396,"title":30397,"body":30398,"description":154,"extension":155,"meta":30691,"navigation":157,"path":30692,"seo":30693,"stem":30694,"__hash__":30695},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30399,"toc":30689},[30400,30403,30411,30426,30431,30482,30485,30491,30678,30683,30686],[10,30401,30397],{"id":30402},"_1验证深度学习环境",[19,30404,30405,30406],{},"关于环境的安装，看",[476,30407,30410],{"href":30408,"rel":30409},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[23980],"Pytorch-->深度学习",[19,30412,30413,30414,30417,30418,30421,30422,30425],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[30,30415,30416],{},"pytorch-cuda=12.4"," 是一个“ ",[388,30419,30420],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[388,30423,30424],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,30427,30428],{},[1576,30429],{"alt":141,"src":30430},"\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",[220,30432,30434],{"className":23937,"code":30433,"language":23939,"meta":141,"style":141},"# 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",[30,30435,30436,30441],{"__ignoreMap":141},[228,30437,30438],{"class":230,"line":231},[228,30439,30440],{"class":297},"# CUDA 12.4\n",[228,30442,30443,30446,30448,30451,30454,30457,30460,30463,30465,30468,30471,30474,30477,30479],{"class":230,"line":142},[228,30444,30445],{"class":2077},"conda",[228,30447,23949],{"class":343},[228,30449,30450],{"class":343}," pytorch==",[228,30452,30453],{"class":287},"2.5.1",[228,30455,30456],{"class":343}," torchvision==",[228,30458,30459],{"class":287},"0.20.1",[228,30461,30462],{"class":343}," torchaudio==",[228,30464,30453],{"class":287},[228,30466,30467],{"class":343}," pytorch-cuda=",[228,30469,30470],{"class":287},"12.4",[228,30472,30473],{"class":287}," -c",[228,30475,30476],{"class":343}," pytorch",[228,30478,30473],{"class":287},[228,30480,30481],{"class":343}," nvidia\n",[19,30483,30484],{},"）：",[19,30486,30487],{},[476,30488,30489],{"href":30489,"rel":30490},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[23980],[220,30492,30496],{"className":30493,"code":30494,"language":30495,"meta":141,"style":141},"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",[30,30497,30498,30503,30511,30516,30526,30542,30547,30557,30594,30601,30613,30629,30634,30644,30656,30666],{"__ignoreMap":141},[228,30499,30500],{"class":230,"line":231},[228,30501,30502],{"class":297},"# 对深度学习环境进行测试\n",[228,30504,30505,30508],{"class":230,"line":142},[228,30506,30507],{"class":234},"import",[228,30509,30510],{"class":238}," torch\n",[228,30512,30513],{"class":230,"line":1293},[228,30514,30515],{"class":297},"# 查看cuda是否被激活\n",[228,30517,30518,30521,30523],{"class":230,"line":1308},[228,30519,30520],{"class":238},"flag",[228,30522,284],{"class":234},[228,30524,30525],{"class":238},"torch.cuda.is_available()\n",[228,30527,30528,30531,30533,30536,30539],{"class":230,"line":1314},[228,30529,30530],{"class":287},"print",[228,30532,239],{"class":238},[228,30534,30535],{"class":343},"\"cuda:\"",[228,30537,30538],{"class":238},", flag)   ",[228,30540,30541],{"class":297},"#返回true的话说明被激活\n",[228,30543,30544],{"class":230,"line":1328},[228,30545,30546],{"class":297},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[228,30548,30549,30552,30554],{"class":230,"line":1334},[228,30550,30551],{"class":238},"ngpu",[228,30553,284],{"class":234},[228,30555,30556],{"class":287},"1\n",[228,30558,30559,30562,30564,30567,30570,30572,30575,30578,30581,30583,30585,30587,30589,30592],{"class":230,"line":1425},[228,30560,30561],{"class":238},"device",[228,30563,284],{"class":234},[228,30565,30566],{"class":238},"torch.device(",[228,30568,30569],{"class":343},"\"cuda:0\"",[228,30571,1818],{"class":234},[228,30573,30574],{"class":238},"(torch.cuda.is_available() ",[228,30576,30577],{"class":234},"and",[228,30579,30580],{"class":238}," ngpu",[228,30582,1198],{"class":234},[228,30584,430],{"class":287},[228,30586,13829],{"class":238},[228,30588,1815],{"class":234},[228,30590,30591],{"class":343}," \"cpu\"",[228,30593,245],{"class":238},[228,30595,30596,30598],{"class":230,"line":1431},[228,30597,30530],{"class":287},[228,30599,30600],{"class":238},"(device)\n",[228,30602,30603,30605,30608,30610],{"class":230,"line":1443},[228,30604,30530],{"class":287},[228,30606,30607],{"class":238},"(torch.cuda.get_device_name(",[228,30609,430],{"class":287},[228,30611,30612],{"class":238},"))\n",[228,30614,30615,30617,30620,30622,30624,30626],{"class":230,"line":1726},[228,30616,30530],{"class":287},[228,30618,30619],{"class":238},"(torch.rand(",[228,30621,310],{"class":287},[228,30623,616],{"class":238},[228,30625,310],{"class":287},[228,30627,30628],{"class":238},").cuda())\n",[228,30630,30631],{"class":230,"line":1731},[228,30632,30633],{"class":297},"# 查看cuda和cudnn的版本\n",[228,30635,30636,30639,30641],{"class":230,"line":1737},[228,30637,30638],{"class":238},"cuda_version",[228,30640,284],{"class":234},[228,30642,30643],{"class":238},"torch.version.cuda\n",[228,30645,30646,30648,30650,30653],{"class":230,"line":1742},[228,30647,30530],{"class":287},[228,30649,239],{"class":238},[228,30651,30652],{"class":343},"\"cuda version\"",[228,30654,30655],{"class":238},",cuda_version)\n",[228,30657,30658,30661,30663],{"class":230,"line":1756},[228,30659,30660],{"class":238},"cudnn_version",[228,30662,284],{"class":234},[228,30664,30665],{"class":238},"torch.backends.cudnn.version()\n",[228,30667,30668,30670,30672,30675],{"class":230,"line":1761},[228,30669,30530],{"class":287},[228,30671,239],{"class":238},[228,30673,30674],{"class":343},"\"cudnn version\"",[228,30676,30677],{"class":238},",cudnn_version)\n",[19,30679,30680],{},[1576,30681],{"alt":141,"src":30682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-002.png",[19,30684,30685],{},"cuda:0 指的是一块显卡",[5241,30687,30688],{},"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":141,"searchDepth":142,"depth":142,"links":30690},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30397,"description":154},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30697,"title":30698,"body":30699,"description":154,"extension":155,"meta":50503,"navigation":157,"path":50504,"seo":50505,"stem":50506,"__hash__":50507},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30700,"toc":50497},[30701,30704,30708,30712,30715,30720,30725,30728,30733,30738,30743,30746,30750,30755,30759,30764,30767,30772,30775,30778,30781,30784,30789,30792,30797,30802,30807,30812,30815,30819,30822,30827,31431,31436,31439,31444,31447,31450,31914,31917,31920,31923,31926,33977,33980,33985,33990,34785,34788,34793,35571,35575,37234,37238,37952,37956,37960,37965,37970,37975,37978,37983,37988,37993,37998,38003,38007,38012,39294,39299,39302,39305,39308,39463,39466,39469,40685,40690,41385,41389,41393,41398,41403,41406,41411,41416,41421,41426,41431,41436,41441,41446,41451,41456,41461,41466,41471,41476,41481,41486,41491,41496,41501,41506,41511,41516,41521,41526,41531,41536,41541,41546,41551,41556,41560,41564,41567,43045,43049,44696,44700,45394,45398,45401,45404,45948,45951,45955,45958,47355,47359,47362,47940,49727,49731,49734,50494],[10,30702,30698],{"id":30703},"_2经典神经网络",[200,30705,30707],{"id":30706},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22113,30709,30711],{"id":30710},"_211原理介绍","2.1.1.原理介绍",[19,30713,30714],{},"LeNet-5",[183,30716,30717],{},[186,30718,30719],{},"原理",[19,30721,30722],{},[1576,30723],{"alt":141,"src":30724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-003.png",[19,30726,30727],{},"B是batch批次；C是channel通道",[183,30729,30730],{"start":142},[186,30731,30732],{},"网络参数详细",[19,30734,30735],{},[1576,30736],{"alt":141,"src":30737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-004.png",[19,30739,30740],{},[1576,30741],{"alt":141,"src":30742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-005.png",[19,30744,30745],{},"AlexNet",[183,30747,30748],{},[186,30749,30719],{},[19,30751,30752],{},[1576,30753],{"alt":141,"src":30754},"\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",[183,30756,30757],{"start":142},[186,30758,30732],{},[19,30760,30761],{},[1576,30762],{"alt":141,"src":30763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-007.png",[19,30765,30766],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,30768,30769],{},[1576,30770],{"alt":141,"src":30771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-008.png",[19,30773,30774],{},"数据处理中的图像增强操作:",[19,30776,30777],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,30779,30780],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,30782,30783],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,30785,30786],{},[1576,30787],{"alt":141,"src":30788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-009.png",[19,30790,30791],{},"提升网络精确度的方法：LRN正则化",[19,30793,30794],{},[1576,30795],{"alt":141,"src":30796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-010.png",[19,30798,30799],{},[1576,30800],{"alt":141,"src":30801},"\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",[183,30803,30804],{"start":1293},[186,30805,30806],{},"AlexNet的总结",[19,30808,30809],{},[1576,30810],{"alt":141,"src":30811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-012.png",[19,30813,30814],{},"比LeNet模型要深一丢丢",[22113,30816,30818],{"id":30817},"_212代码实现","2.1.2.代码实现",[19,30820,30821],{},"（1）LeNet",[183,30823,30824],{},[186,30825,30826],{},"模型搭建",[220,30828,30830],{"className":30493,"code":30829,"language":30495,"meta":141,"style":141},"# 导入库\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",[30,30831,30832,30837,30843,30848,30861,30866,30878,30882,30902,30907,30912,30923,30928,30947,30951,30956,31005,31017,31022,31051,31086,31113,31118,31130,31135,31155,31174,31193,31197,31202,31212,31229,31240,31255,31266,31277,31292,31307,31318,31325,31329,31343,31348,31371,31376,31381,31386,31390,31395,31400,31410],{"__ignoreMap":141},[228,30833,30834],{"class":230,"line":231},[228,30835,30836],{"class":297},"# 导入库\n",[228,30838,30839,30841],{"class":230,"line":142},[228,30840,30507],{"class":234},[228,30842,30510],{"class":238},[228,30844,30845],{"class":230,"line":1293},[228,30846,30847],{"class":297},"# 导入神经网络层\n",[228,30849,30850,30853,30856,30858],{"class":230,"line":1308},[228,30851,30852],{"class":234},"from",[228,30854,30855],{"class":238}," torch ",[228,30857,30507],{"class":234},[228,30859,30860],{"class":238}," nn\n",[228,30862,30863],{"class":230,"line":1314},[228,30864,30865],{"class":297},"# 导入展示神经网络参数的包\n",[228,30867,30868,30870,30873,30875],{"class":230,"line":1328},[228,30869,30852],{"class":234},[228,30871,30872],{"class":238}," torchsummary ",[228,30874,30507],{"class":234},[228,30876,30877],{"class":238}," summary\n",[228,30879,30880],{"class":230,"line":1334},[228,30881,2514],{"emptyLinePlaceholder":157},[228,30883,30884,30886,30889,30891,30894,30896,30899],{"class":230,"line":1425},[228,30885,14809],{"class":234},[228,30887,30888],{"class":2077}," LeNet",[228,30890,239],{"class":238},[228,30892,30893],{"class":2077},"nn",[228,30895,796],{"class":238},[228,30897,30898],{"class":2077},"Module",[228,30900,30901],{"class":238},"):\n",[228,30903,30904],{"class":230,"line":1431},[228,30905,30906],{"class":297},"    # 模型初始化:\n",[228,30908,30909],{"class":230,"line":1443},[228,30910,30911],{"class":297},"    # 定义一些网络层和激活函数\n",[228,30913,30914,30917,30920],{"class":230,"line":1726},[228,30915,30916],{"class":234},"    def",[228,30918,30919],{"class":287}," __init__",[228,30921,30922],{"class":238},"(self):\n",[228,30924,30925],{"class":230,"line":1731},[228,30926,30927],{"class":297},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[228,30929,30930,30933,30936,30939,30942,30945],{"class":230,"line":1737},[228,30931,30932],{"class":287},"        super",[228,30934,30935],{"class":238},"(LeNet,",[228,30937,30938],{"class":287},"self",[228,30940,30941],{"class":238},").",[228,30943,30944],{"class":287},"__init__",[228,30946,2090],{"class":238},[228,30948,30949],{"class":230,"line":1742},[228,30950,2514],{"emptyLinePlaceholder":157},[228,30952,30953],{"class":230,"line":1756},[228,30954,30955],{"class":297},"        # 定义网络层\n",[228,30957,30958,30961,30964,30966,30969,30972,30974,30976,30978,30981,30983,30985,30987,30990,30992,30994,30996,30999,31001,31003],{"class":230,"line":1761},[228,30959,30960],{"class":287},"        self",[228,30962,30963],{"class":238},".c1",[228,30965,284],{"class":234},[228,30967,30968],{"class":238},"nn.Conv2d(",[228,30970,30971],{"class":5331},"in_channels",[228,30973,284],{"class":234},[228,30975,456],{"class":287},[228,30977,616],{"class":238},[228,30979,30980],{"class":5331},"out_channels",[228,30982,284],{"class":234},[228,30984,582],{"class":287},[228,30986,616],{"class":238},[228,30988,30989],{"class":5331},"kernel_size",[228,30991,284],{"class":234},[228,30993,557],{"class":287},[228,30995,616],{"class":238},[228,30997,30998],{"class":5331},"padding",[228,31000,284],{"class":234},[228,31002,316],{"class":287},[228,31004,245],{"class":238},[228,31006,31007,31009,31012,31014],{"class":230,"line":1767},[228,31008,30960],{"class":287},[228,31010,31011],{"class":238},".sig",[228,31013,284],{"class":234},[228,31015,31016],{"class":238},"nn.Sigmoid()\n",[228,31018,31019],{"class":230,"line":1788},[228,31020,31021],{"class":297},"        # 定义池化\n",[228,31023,31024,31026,31029,31031,31034,31036,31038,31040,31042,31045,31047,31049],{"class":230,"line":1793},[228,31025,30960],{"class":287},[228,31027,31028],{"class":238},".s2",[228,31030,284],{"class":234},[228,31032,31033],{"class":238},"nn.AvgPool2d(",[228,31035,30989],{"class":5331},[228,31037,284],{"class":234},[228,31039,316],{"class":287},[228,31041,616],{"class":238},[228,31043,31044],{"class":5331},"stride",[228,31046,284],{"class":234},[228,31048,316],{"class":287},[228,31050,245],{"class":238},[228,31052,31053,31055,31058,31060,31062,31064,31066,31068,31070,31072,31074,31076,31078,31080,31082,31084],{"class":230,"line":1807},[228,31054,30960],{"class":287},[228,31056,31057],{"class":238},".c3",[228,31059,284],{"class":234},[228,31061,30968],{"class":238},[228,31063,30971],{"class":5331},[228,31065,284],{"class":234},[228,31067,582],{"class":287},[228,31069,616],{"class":238},[228,31071,30980],{"class":5331},[228,31073,284],{"class":234},[228,31075,839],{"class":287},[228,31077,616],{"class":238},[228,31079,30989],{"class":5331},[228,31081,284],{"class":234},[228,31083,557],{"class":287},[228,31085,245],{"class":238},[228,31087,31088,31090,31093,31095,31097,31099,31101,31103,31105,31107,31109,31111],{"class":230,"line":1812},[228,31089,30960],{"class":287},[228,31091,31092],{"class":238},".s4",[228,31094,284],{"class":234},[228,31096,31033],{"class":238},[228,31098,30989],{"class":5331},[228,31100,284],{"class":234},[228,31102,316],{"class":287},[228,31104,616],{"class":238},[228,31106,31044],{"class":5331},[228,31108,284],{"class":234},[228,31110,316],{"class":287},[228,31112,245],{"class":238},[228,31114,31115],{"class":230,"line":1841},[228,31116,31117],{"class":297},"        # 定义平展层\n",[228,31119,31120,31122,31125,31127],{"class":230,"line":1846},[228,31121,30960],{"class":287},[228,31123,31124],{"class":238},".flatten",[228,31126,284],{"class":234},[228,31128,31129],{"class":238},"nn.Flatten()\n",[228,31131,31132],{"class":230,"line":1863},[228,31133,31134],{"class":297},"        # 定义全连接层\n",[228,31136,31137,31139,31142,31144,31147,31149,31151,31153],{"class":230,"line":1868},[228,31138,30960],{"class":287},[228,31140,31141],{"class":238},".f5",[228,31143,284],{"class":234},[228,31145,31146],{"class":238},"nn.Linear(",[228,31148,4101],{"class":287},[228,31150,616],{"class":238},[228,31152,1055],{"class":287},[228,31154,245],{"class":238},[228,31156,31157,31159,31162,31164,31166,31168,31170,31172],{"class":230,"line":1873},[228,31158,30960],{"class":287},[228,31160,31161],{"class":238},".f6",[228,31163,284],{"class":234},[228,31165,31146],{"class":238},[228,31167,1055],{"class":287},[228,31169,616],{"class":238},[228,31171,949],{"class":287},[228,31173,245],{"class":238},[228,31175,31176,31178,31181,31183,31185,31187,31189,31191],{"class":230,"line":1878},[228,31177,30960],{"class":287},[228,31179,31180],{"class":238},".f7",[228,31182,284],{"class":234},[228,31184,31146],{"class":238},[228,31186,949],{"class":287},[228,31188,616],{"class":238},[228,31190,684],{"class":287},[228,31192,245],{"class":238},[228,31194,31195],{"class":230,"line":1892},[228,31196,2514],{"emptyLinePlaceholder":157},[228,31198,31199],{"class":230,"line":1897},[228,31200,31201],{"class":297},"    # 写工具->写前向传播\n",[228,31203,31204,31206,31209],{"class":230,"line":2691},[228,31205,30916],{"class":234},[228,31207,31208],{"class":2077}," forward",[228,31210,31211],{"class":238},"(self,x):\n",[228,31213,31214,31217,31219,31221,31224,31226],{"class":230,"line":2705},[228,31215,31216],{"class":238},"        x",[228,31218,284],{"class":234},[228,31220,30938],{"class":287},[228,31222,31223],{"class":238},".sig(",[228,31225,30938],{"class":287},[228,31227,31228],{"class":238},".c1(x))\n",[228,31230,31231,31233,31235,31237],{"class":230,"line":2713},[228,31232,31216],{"class":238},[228,31234,284],{"class":234},[228,31236,30938],{"class":287},[228,31238,31239],{"class":238},".s2(x)\n",[228,31241,31242,31244,31246,31248,31250,31252],{"class":230,"line":2718},[228,31243,31216],{"class":238},[228,31245,284],{"class":234},[228,31247,30938],{"class":287},[228,31249,31223],{"class":238},[228,31251,30938],{"class":287},[228,31253,31254],{"class":238},".c3(x))\n",[228,31256,31257,31259,31261,31263],{"class":230,"line":2724},[228,31258,31216],{"class":238},[228,31260,284],{"class":234},[228,31262,30938],{"class":287},[228,31264,31265],{"class":238},".s4(x)\n",[228,31267,31268,31270,31272,31274],{"class":230,"line":2730},[228,31269,31216],{"class":238},[228,31271,284],{"class":234},[228,31273,30938],{"class":287},[228,31275,31276],{"class":238},".flatten(x)\n",[228,31278,31279,31281,31283,31285,31287,31289],{"class":230,"line":2735},[228,31280,31216],{"class":238},[228,31282,284],{"class":234},[228,31284,30938],{"class":287},[228,31286,31223],{"class":238},[228,31288,30938],{"class":287},[228,31290,31291],{"class":238},".f5(x))\n",[228,31293,31294,31296,31298,31300,31302,31304],{"class":230,"line":8063},[228,31295,31216],{"class":238},[228,31297,284],{"class":234},[228,31299,30938],{"class":287},[228,31301,31223],{"class":238},[228,31303,30938],{"class":287},[228,31305,31306],{"class":238},".f6(x))\n",[228,31308,31309,31311,31313,31315],{"class":230,"line":8087},[228,31310,31216],{"class":238},[228,31312,284],{"class":234},[228,31314,30938],{"class":287},[228,31316,31317],{"class":238},".f7(x)\n",[228,31319,31320,31322],{"class":230,"line":8092},[228,31321,14867],{"class":234},[228,31323,31324],{"class":238}," x\n",[228,31326,31327],{"class":230,"line":8098},[228,31328,2514],{"emptyLinePlaceholder":157},[228,31330,31331,31333,31336,31338,31341],{"class":230,"line":8125},[228,31332,1645],{"class":234},[228,31334,31335],{"class":287}," __name__",[228,31337,3063],{"class":234},[228,31339,31340],{"class":343},"\"__main__\"",[228,31342,3853],{"class":238},[228,31344,31345],{"class":230,"line":8130},[228,31346,31347],{"class":297},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[228,31349,31350,31353,31355,31357,31360,31362,31365,31367,31369],{"class":230,"line":8136},[228,31351,31352],{"class":238},"    device",[228,31354,284],{"class":234},[228,31356,30566],{"class":238},[228,31358,31359],{"class":343},"\"cuda\"",[228,31361,1818],{"class":234},[228,31363,31364],{"class":238}," torch.cuda.is_available() ",[228,31366,1815],{"class":234},[228,31368,30591],{"class":343},[228,31370,245],{"class":238},[228,31372,31373],{"class":230,"line":8148},[228,31374,31375],{"class":297},"    # 如果就是想指定用cpu用下方代码:\n",[228,31377,31378],{"class":230,"line":8160},[228,31379,31380],{"class":297},"    # device=\"cpu\"\n",[228,31382,31383],{"class":230,"line":8172},[228,31384,31385],{"class":297},"    # print(device)\n",[228,31387,31388],{"class":230,"line":9831},[228,31389,2514],{"emptyLinePlaceholder":157},[228,31391,31392],{"class":230,"line":9856},[228,31393,31394],{"class":297},"    # 实例化模型\n",[228,31396,31397],{"class":230,"line":9879},[228,31398,31399],{"class":297},"    # 将模型放到设备中去运行\n",[228,31401,31402,31405,31407],{"class":230,"line":9903},[228,31403,31404],{"class":238},"    model",[228,31406,284],{"class":234},[228,31408,31409],{"class":238},"LeNet().to(device)\n",[228,31411,31412,31415,31418,31420,31422,31424,31426,31428],{"class":230,"line":9908},[228,31413,31414],{"class":287},"    print",[228,31416,31417],{"class":238},"(summary(model,(",[228,31419,456],{"class":287},[228,31421,616],{"class":238},[228,31423,1139],{"class":287},[228,31425,616],{"class":238},[228,31427,1139],{"class":287},[228,31429,31430],{"class":238},")))\n",[19,31432,31433],{},[1576,31434],{"alt":141,"src":31435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-013.png",[19,31437,31438],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[183,31440,31441],{"start":142},[186,31442,31443],{},"训练",[19,31445,31446],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,31448,31449],{},"在训练之前可以将数据展示看一下",[220,31451,31453],{"className":30493,"code":31452,"language":30495,"meta":141,"style":141},"# 建立画图的函数，用于展示数据\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",[30,31454,31455,31460,31465,31477,31489,31502,31507,31519,31524,31536,31541,31553,31557,31561,31582,31594,31599,31620,31631,31635,31640,31658,31669,31674,31685,31690,31701,31705,31710,31725,31738,31743,31748,31761,31774,31787,31792,31796,31801,31821,31838,31858,31871,31884,31894,31909],{"__ignoreMap":141},[228,31456,31457],{"class":230,"line":231},[228,31458,31459],{"class":297},"# 建立画图的函数，用于展示数据\n",[228,31461,31462],{"class":230,"line":142},[228,31463,31464],{"class":297},"# torchvision中包含很多内置的数据集\n",[228,31466,31467,31469,31472,31474],{"class":230,"line":1293},[228,31468,30852],{"class":234},[228,31470,31471],{"class":238}," sklearn.externals.array_api_compat.torch ",[228,31473,30507],{"class":234},[228,31475,31476],{"class":238}," squeeze\n",[228,31478,31479,31481,31484,31486],{"class":230,"line":1308},[228,31480,30852],{"class":234},[228,31482,31483],{"class":238}," torchvision.datasets ",[228,31485,30507],{"class":234},[228,31487,31488],{"class":238}," FashionMNIST\n",[228,31490,31491,31493,31496,31499],{"class":230,"line":1314},[228,31492,30507],{"class":234},[228,31494,31495],{"class":238}," numpy ",[228,31497,31498],{"class":234},"as",[228,31500,31501],{"class":238}," np\n",[228,31503,31504],{"class":230,"line":1328},[228,31505,31506],{"class":297},"# 引入处理数据集的包\n",[228,31508,31509,31511,31514,31516],{"class":230,"line":1334},[228,31510,30852],{"class":234},[228,31512,31513],{"class":238}," torchvision ",[228,31515,30507],{"class":234},[228,31517,31518],{"class":238}," transforms\n",[228,31520,31521],{"class":230,"line":1425},[228,31522,31523],{"class":297},"# 从torch库中引入数据处理的包\n",[228,31525,31526,31528,31531,31533],{"class":230,"line":1431},[228,31527,30507],{"class":234},[228,31529,31530],{"class":238}," torch.utils.data ",[228,31532,31498],{"class":234},[228,31534,31535],{"class":238}," Data\n",[228,31537,31538],{"class":230,"line":1443},[228,31539,31540],{"class":297},"# 导入画图的库\n",[228,31542,31543,31545,31548,31550],{"class":230,"line":1726},[228,31544,30507],{"class":234},[228,31546,31547],{"class":238}," matplotlib.pyplot ",[228,31549,31498],{"class":234},[228,31551,31552],{"class":238}," plt\n",[228,31554,31555],{"class":230,"line":1731},[228,31556,2514],{"emptyLinePlaceholder":157},[228,31558,31559],{"class":230,"line":1737},[228,31560,2514],{"emptyLinePlaceholder":157},[228,31562,31563,31566,31568,31571,31574,31576,31579],{"class":230,"line":1742},[228,31564,31565],{"class":238},"train_data",[228,31567,284],{"class":234},[228,31569,31570],{"class":238},"FashionMNIST(",[228,31572,31573],{"class":5331},"root",[228,31575,284],{"class":234},[228,31577,31578],{"class":343},"'.\u002Fdata'",[228,31580,31581],{"class":238},",\n",[228,31583,31584,31587,31589,31592],{"class":230,"line":1756},[228,31585,31586],{"class":5331},"                        train",[228,31588,284],{"class":234},[228,31590,31591],{"class":287},"True",[228,31593,31581],{"class":238},[228,31595,31596],{"class":230,"line":1761},[228,31597,31598],{"class":297},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[228,31600,31601,31604,31606,31609,31612,31614,31617],{"class":230,"line":1767},[228,31602,31603],{"class":5331},"                        transform",[228,31605,284],{"class":234},[228,31607,31608],{"class":238},"transforms.Compose([transforms.Resize(",[228,31610,31611],{"class":5331},"size",[228,31613,284],{"class":234},[228,31615,31616],{"class":287},"224",[228,31618,31619],{"class":238},"),transforms.ToTensor()]),\n",[228,31621,31622,31625,31627,31629],{"class":230,"line":1788},[228,31623,31624],{"class":5331},"                        download",[228,31626,284],{"class":234},[228,31628,31591],{"class":287},[228,31630,245],{"class":238},[228,31632,31633],{"class":230,"line":1793},[228,31634,2514],{"emptyLinePlaceholder":157},[228,31636,31637],{"class":230,"line":1807},[228,31638,31639],{"class":297},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[228,31641,31642,31645,31647,31650,31653,31655],{"class":230,"line":1812},[228,31643,31644],{"class":238},"train_loader",[228,31646,284],{"class":234},[228,31648,31649],{"class":238},"Data.DataLoader(",[228,31651,31652],{"class":5331},"dataset",[228,31654,284],{"class":234},[228,31656,31657],{"class":238},"train_data,\n",[228,31659,31660,31663,31665,31667],{"class":230,"line":1841},[228,31661,31662],{"class":5331},"                             batch_size",[228,31664,284],{"class":234},[228,31666,442],{"class":287},[228,31668,31581],{"class":238},[228,31670,31671],{"class":230,"line":1846},[228,31672,31673],{"class":297},"                             # 数据是否打乱\n",[228,31675,31676,31679,31681,31683],{"class":230,"line":1863},[228,31677,31678],{"class":5331},"                             shuffle",[228,31680,284],{"class":234},[228,31682,31591],{"class":287},[228,31684,31581],{"class":238},[228,31686,31687],{"class":230,"line":1868},[228,31688,31689],{"class":297},"                             # 规定加载数据的进程\n",[228,31691,31692,31695,31697,31699],{"class":230,"line":1873},[228,31693,31694],{"class":5331},"                             num_workers",[228,31696,284],{"class":234},[228,31698,430],{"class":287},[228,31700,245],{"class":238},[228,31702,31703],{"class":230,"line":1878},[228,31704,2514],{"emptyLinePlaceholder":157},[228,31706,31707],{"class":230,"line":1892},[228,31708,31709],{"class":297},"# 获得一个batch的数据\n",[228,31711,31712,31714,31717,31719,31722],{"class":230,"line":1897},[228,31713,3139],{"class":234},[228,31715,31716],{"class":238}," step,(b_x,b_y) ",[228,31718,26159],{"class":234},[228,31720,31721],{"class":287}," enumerate",[228,31723,31724],{"class":238},"(train_loader):\n",[228,31726,31727,31729,31732,31734,31736],{"class":230,"line":2691},[228,31728,3215],{"class":234},[228,31730,31731],{"class":238}," step ",[228,31733,1198],{"class":234},[228,31735,4207],{"class":287},[228,31737,3853],{"class":238},[228,31739,31740],{"class":230,"line":2705},[228,31741,31742],{"class":234},"        break\n",[228,31744,31745],{"class":230,"line":2713},[228,31746,31747],{"class":297},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[228,31749,31750,31753,31755,31758],{"class":230,"line":2718},[228,31751,31752],{"class":238},"batch_x",[228,31754,284],{"class":234},[228,31756,31757],{"class":238},"b_x.squeeze().numpy()  ",[228,31759,31760],{"class":297},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[228,31762,31763,31766,31768,31771],{"class":230,"line":2724},[228,31764,31765],{"class":238},"batch_y",[228,31767,284],{"class":234},[228,31769,31770],{"class":238},"b_y.numpy()   ",[228,31772,31773],{"class":297},"#将张量转换成功numpy数组\n",[228,31775,31776,31779,31781,31784],{"class":230,"line":2730},[228,31777,31778],{"class":238},"class_label",[228,31780,284],{"class":234},[228,31782,31783],{"class":238},"train_data.classes  ",[228,31785,31786],{"class":297},"#训练集标签\n",[228,31788,31789],{"class":230,"line":2735},[228,31790,31791],{"class":297},"# print(class_label)\n",[228,31793,31794],{"class":230,"line":8063},[228,31795,2514],{"emptyLinePlaceholder":157},[228,31797,31798],{"class":230,"line":8087},[228,31799,31800],{"class":297},"# 可视化一个batch的图像\n",[228,31802,31803,31806,31809,31811,31813,31815,31817,31819],{"class":230,"line":8092},[228,31804,31805],{"class":238},"plt.figure(",[228,31807,31808],{"class":5331},"figsize",[228,31810,284],{"class":234},[228,31812,239],{"class":238},[228,31814,736],{"class":287},[228,31816,616],{"class":238},[228,31818,557],{"class":287},[228,31820,30612],{"class":238},[228,31822,31823,31825,31828,31830,31833,31835],{"class":230,"line":8098},[228,31824,3139],{"class":234},[228,31826,31827],{"class":238}," ii ",[228,31829,26159],{"class":234},[228,31831,31832],{"class":238}," np.arange(",[228,31834,7473],{"class":287},[228,31836,31837],{"class":238},"(batch_y)):\n",[228,31839,31840,31843,31845,31847,31849,31852,31854,31856],{"class":230,"line":8125},[228,31841,31842],{"class":238},"    plt.subplot(",[228,31844,531],{"class":287},[228,31846,616],{"class":238},[228,31848,839],{"class":287},[228,31850,31851],{"class":238},",ii ",[228,31853,719],{"class":234},[228,31855,25234],{"class":287},[228,31857,245],{"class":238},[228,31859,31860,31863,31866,31868],{"class":230,"line":8130},[228,31861,31862],{"class":238},"    plt.imshow(batch_x[ii,:,:],",[228,31864,31865],{"class":5331},"cmap",[228,31867,284],{"class":234},[228,31869,31870],{"class":238},"plt.cm.gray)\n",[228,31872,31873,31876,31878,31880,31882],{"class":230,"line":8136},[228,31874,31875],{"class":238},"    plt.title(class_label[batch_y[ii]],",[228,31877,31611],{"class":5331},[228,31879,284],{"class":234},[228,31881,684],{"class":287},[228,31883,245],{"class":238},[228,31885,31886,31889,31892],{"class":230,"line":8148},[228,31887,31888],{"class":238},"    plt.axis(",[228,31890,31891],{"class":343},"\"off\"",[228,31893,245],{"class":238},[228,31895,31896,31899,31902,31904,31907],{"class":230,"line":8160},[228,31897,31898],{"class":238},"    plt.subplots_adjust(",[228,31900,31901],{"class":5331},"wspace",[228,31903,284],{"class":234},[228,31905,31906],{"class":287},"0.05",[228,31908,245],{"class":238},[228,31910,31911],{"class":230,"line":8172},[228,31912,31913],{"class":238},"plt.show()\n",[19,31915,31916],{},"用matplotlib进行展示的过程可以后续再补",[19,31918,31919],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,31921,31922],{},"训练次数就是按照批次过整个训练集数据的次数",[19,31924,31925],{},"模型训练：",[220,31927,31929],{"className":30493,"code":31928,"language":30495,"meta":141,"style":141},"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",[30,31930,31931,31938,31945,31949,31961,31967,31978,31988,31998,32008,32018,32023,32035,32045,32049,32053,32058,32069,32082,32093,32110,32121,32160,32176,32188,32199,32204,32215,32231,32242,32253,32264,32271,32275,32280,32285,32289,32294,32304,32325,32329,32333,32338,32343,32348,32368,32372,32377,32387,32391,32396,32405,32410,32415,32420,32430,32434,32438,32443,32448,32458,32463,32473,32478,32487,32492,32501,32506,32515,32519,32524,32534,32538,32542,32547,32562,32590,32605,32609,32614,32619,32628,32633,32642,32647,32656,32661,32670,32675,32684,32689,32698,32703,32716,32721,32731,32736,32746,32752,32758,32764,32770,32781,32787,32807,32813,32824,32830,32836,32842,32848,32854,32860,32866,32886,32892,32908,32914,32928,32934,32949,32955,32964,32970,32979,32985,32991,33000,33006,33017,33023,33042,33048,33059,33065,33085,33101,33107,33121,33127,33133,33144,33150,33156,33166,33172,33183,33189,33199,33204,33210,33259,33306,33311,33317,33336,33342,33362,33368,33374,33384,33389,33395,33411,33456,33462,33468,33474,33485,33491,33497,33503,33521,33535,33544,33553,33562,33571,33577,33583,33591,33596,33602,33613,33619,33639,33645,33651,33657,33674,33680,33686,33692,33698,33704,33731,33755,33761,33767,33773,33784,33795,33801,33818,33841,33864,33870,33875,33884,33894,33900,33905,33911,33924,33930,33941,33952,33971],{"__ignoreMap":141},[228,31932,31933,31935],{"class":230,"line":231},[228,31934,30507],{"class":234},[228,31936,31937],{"class":238}," copy\n",[228,31939,31940,31942],{"class":230,"line":142},[228,31941,30507],{"class":234},[228,31943,31944],{"class":238}," time\n",[228,31946,31947],{"class":230,"line":1293},[228,31948,2514],{"emptyLinePlaceholder":157},[228,31950,31951,31953,31956,31958],{"class":230,"line":1308},[228,31952,30507],{"class":234},[228,31954,31955],{"class":238}," pandas ",[228,31957,31498],{"class":234},[228,31959,31960],{"class":238}," pd\n",[228,31962,31963,31965],{"class":230,"line":1314},[228,31964,30507],{"class":234},[228,31966,30510],{"class":238},[228,31968,31969,31971,31973,31975],{"class":230,"line":1328},[228,31970,30852],{"class":234},[228,31972,31530],{"class":238},[228,31974,30507],{"class":234},[228,31976,31977],{"class":238}," Dataset\n",[228,31979,31980,31982,31984,31986],{"class":230,"line":1334},[228,31981,30852],{"class":234},[228,31983,31483],{"class":238},[228,31985,30507],{"class":234},[228,31987,31488],{"class":238},[228,31989,31990,31992,31994,31996],{"class":230,"line":1425},[228,31991,30852],{"class":234},[228,31993,31513],{"class":238},[228,31995,30507],{"class":234},[228,31997,31518],{"class":238},[228,31999,32000,32002,32004,32006],{"class":230,"line":1431},[228,32001,30507],{"class":234},[228,32003,31530],{"class":238},[228,32005,31498],{"class":234},[228,32007,31535],{"class":238},[228,32009,32010,32012,32014,32016],{"class":230,"line":1443},[228,32011,30507],{"class":234},[228,32013,31547],{"class":238},[228,32015,31498],{"class":234},[228,32017,31552],{"class":238},[228,32019,32020],{"class":230,"line":1726},[228,32021,32022],{"class":297},"# 导入模型\n",[228,32024,32025,32027,32030,32032],{"class":230,"line":1731},[228,32026,30852],{"class":234},[228,32028,32029],{"class":238}," model ",[228,32031,30507],{"class":234},[228,32033,32034],{"class":238}," LeNet\n",[228,32036,32037,32039,32041,32043],{"class":230,"line":1737},[228,32038,30852],{"class":234},[228,32040,30855],{"class":238},[228,32042,30507],{"class":234},[228,32044,30860],{"class":238},[228,32046,32047],{"class":230,"line":1742},[228,32048,2514],{"emptyLinePlaceholder":157},[228,32050,32051],{"class":230,"line":1756},[228,32052,2514],{"emptyLinePlaceholder":157},[228,32054,32055],{"class":230,"line":1761},[228,32056,32057],{"class":297},"# 处理训练集与验证集函数--->划分数据集\n",[228,32059,32060,32063,32066],{"class":230,"line":1767},[228,32061,32062],{"class":234},"def",[228,32064,32065],{"class":2077}," train_val_data_process",[228,32067,32068],{"class":238},"():\n",[228,32070,32071,32074,32076,32078,32080],{"class":230,"line":1788},[228,32072,32073],{"class":238},"    train_data",[228,32075,284],{"class":234},[228,32077,31570],{"class":238},[228,32079,31578],{"class":343},[228,32081,31581],{"class":238},[228,32083,32084,32087,32089,32091],{"class":230,"line":1793},[228,32085,32086],{"class":5331},"                            train",[228,32088,284],{"class":234},[228,32090,31591],{"class":287},[228,32092,31581],{"class":238},[228,32094,32095,32098,32100,32102,32104,32106,32108],{"class":230,"line":1807},[228,32096,32097],{"class":5331},"                            transform",[228,32099,284],{"class":234},[228,32101,31608],{"class":238},[228,32103,31611],{"class":5331},[228,32105,284],{"class":234},[228,32107,1139],{"class":287},[228,32109,31619],{"class":238},[228,32111,32112,32115,32117,32119],{"class":230,"line":1812},[228,32113,32114],{"class":5331},"                            download",[228,32116,284],{"class":234},[228,32118,31591],{"class":287},[228,32120,245],{"class":238},[228,32122,32123,32126,32128,32131,32134,32136,32139,32141,32143,32146,32148,32150,32153,32155,32157],{"class":230,"line":1841},[228,32124,32125],{"class":238},"    train_data,val_data",[228,32127,284],{"class":234},[228,32129,32130],{"class":238},"Data.random_split(train_data,[",[228,32132,32133],{"class":287},"round",[228,32135,239],{"class":238},[228,32137,32138],{"class":287},"0.8",[228,32140,693],{"class":234},[228,32142,7473],{"class":287},[228,32144,32145],{"class":238},"(train_data)),",[228,32147,32133],{"class":287},[228,32149,239],{"class":238},[228,32151,32152],{"class":287},"0.2",[228,32154,693],{"class":234},[228,32156,7473],{"class":287},[228,32158,32159],{"class":238},"(train_data))])\n",[228,32161,32162,32165,32167,32170,32172,32174],{"class":230,"line":1846},[228,32163,32164],{"class":238},"    train_dataloader ",[228,32166,284],{"class":234},[228,32168,32169],{"class":238}," Data.DataLoader(",[228,32171,31652],{"class":5331},[228,32173,284],{"class":234},[228,32175,31657],{"class":238},[228,32177,32178,32181,32183,32186],{"class":230,"line":1863},[228,32179,32180],{"class":5331},"                                       batch_size",[228,32182,284],{"class":234},[228,32184,32185],{"class":287},"128",[228,32187,31581],{"class":238},[228,32189,32190,32193,32195,32197],{"class":230,"line":1868},[228,32191,32192],{"class":5331},"                                       shuffle",[228,32194,284],{"class":234},[228,32196,31591],{"class":287},[228,32198,31581],{"class":238},[228,32200,32201],{"class":230,"line":1873},[228,32202,32203],{"class":297},"                                       # 规定8个进程\n",[228,32205,32206,32209,32211,32213],{"class":230,"line":1878},[228,32207,32208],{"class":5331},"                                       num_workers",[228,32210,284],{"class":234},[228,32212,633],{"class":287},[228,32214,245],{"class":238},[228,32216,32217,32220,32222,32224,32226,32228],{"class":230,"line":1892},[228,32218,32219],{"class":238},"    val_dataloader",[228,32221,284],{"class":234},[228,32223,31649],{"class":238},[228,32225,31652],{"class":5331},[228,32227,284],{"class":234},[228,32229,32230],{"class":238},"val_data,\n",[228,32232,32233,32236,32238,32240],{"class":230,"line":1897},[228,32234,32235],{"class":5331},"                                   batch_size",[228,32237,284],{"class":234},[228,32239,32185],{"class":287},[228,32241,31581],{"class":238},[228,32243,32244,32247,32249,32251],{"class":230,"line":2691},[228,32245,32246],{"class":5331},"                                   shuffle",[228,32248,284],{"class":234},[228,32250,31591],{"class":287},[228,32252,31581],{"class":238},[228,32254,32255,32258,32260,32262],{"class":230,"line":2705},[228,32256,32257],{"class":5331},"                                   num_workers",[228,32259,284],{"class":234},[228,32261,633],{"class":287},[228,32263,245],{"class":238},[228,32265,32266,32268],{"class":230,"line":2713},[228,32267,4204],{"class":234},[228,32269,32270],{"class":238}," train_dataloader,val_dataloader\n",[228,32272,32273],{"class":230,"line":2718},[228,32274,2514],{"emptyLinePlaceholder":157},[228,32276,32277],{"class":230,"line":2724},[228,32278,32279],{"class":297},"# 验证是否出错\n",[228,32281,32282],{"class":230,"line":2730},[228,32283,32284],{"class":297},"# train_val_data_process()\n",[228,32286,32287],{"class":230,"line":2735},[228,32288,2514],{"emptyLinePlaceholder":157},[228,32290,32291],{"class":230,"line":8063},[228,32292,32293],{"class":297},"# 定义模型训练函数\n",[228,32295,32296,32298,32301],{"class":230,"line":8087},[228,32297,32062],{"class":234},[228,32299,32300],{"class":2077}," train_model_process",[228,32302,32303],{"class":238},"(model,train_dataloader,val_dataloader,num_epochs):\n",[228,32305,32306,32308,32310,32312,32314,32316,32318,32320,32323],{"class":230,"line":8092},[228,32307,31352],{"class":238},[228,32309,284],{"class":234},[228,32311,30566],{"class":238},[228,32313,31359],{"class":343},[228,32315,1818],{"class":234},[228,32317,31364],{"class":238},[228,32319,1815],{"class":234},[228,32321,32322],{"class":343}," 'cpu'",[228,32324,245],{"class":238},[228,32326,32327],{"class":230,"line":8098},[228,32328,2514],{"emptyLinePlaceholder":157},[228,32330,32331],{"class":230,"line":8125},[228,32332,2514],{"emptyLinePlaceholder":157},[228,32334,32335],{"class":230,"line":8130},[228,32336,32337],{"class":297},"    # 定义优化器\n",[228,32339,32340],{"class":230,"line":8136},[228,32341,32342],{"class":297},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[228,32344,32345],{"class":230,"line":8148},[228,32346,32347],{"class":297},"    # lr为学习率\n",[228,32349,32350,32353,32355,32358,32361,32363,32366],{"class":230,"line":8160},[228,32351,32352],{"class":238},"    optimizer",[228,32354,284],{"class":234},[228,32356,32357],{"class":238},"torch.optim.Adam(model.parameters(),",[228,32359,32360],{"class":5331},"lr",[228,32362,284],{"class":234},[228,32364,32365],{"class":287},"0.001",[228,32367,245],{"class":238},[228,32369,32370],{"class":230,"line":8172},[228,32371,2514],{"emptyLinePlaceholder":157},[228,32373,32374],{"class":230,"line":9831},[228,32375,32376],{"class":297},"    # 定义损失函数使用交叉熵损失函数\n",[228,32378,32379,32382,32384],{"class":230,"line":9856},[228,32380,32381],{"class":238},"    criterion",[228,32383,284],{"class":234},[228,32385,32386],{"class":238},"nn.CrossEntropyLoss()\n",[228,32388,32389],{"class":230,"line":9879},[228,32390,2514],{"emptyLinePlaceholder":157},[228,32392,32393],{"class":230,"line":9903},[228,32394,32395],{"class":297},"    # 将模型放到GPU中进行训练\n",[228,32397,32398,32400,32402],{"class":230,"line":9908},[228,32399,31404],{"class":238},[228,32401,284],{"class":234},[228,32403,32404],{"class":238},"model.to(device)\n",[228,32406,32407],{"class":230,"line":9913},[228,32408,32409],{"class":297},"    # 复制当前模型的参数\n",[228,32411,32412],{"class":230,"line":9918},[228,32413,32414],{"class":297},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[228,32416,32417],{"class":230,"line":9927},[228,32418,32419],{"class":297},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[228,32421,32422,32425,32427],{"class":230,"line":9932},[228,32423,32424],{"class":238},"    best_model_wts",[228,32426,284],{"class":234},[228,32428,32429],{"class":238},"copy.deepcopy(model.state_dict())\n",[228,32431,32432],{"class":230,"line":9938},[228,32433,2514],{"emptyLinePlaceholder":157},[228,32435,32436],{"class":230,"line":9959},[228,32437,2514],{"emptyLinePlaceholder":157},[228,32439,32440],{"class":230,"line":9965},[228,32441,32442],{"class":297},"    # 初始化参数\n",[228,32444,32445],{"class":230,"line":9979},[228,32446,32447],{"class":297},"    # 最高准确度\n",[228,32449,32450,32453,32455],{"class":230,"line":9985},[228,32451,32452],{"class":238},"    best_acc",[228,32454,284],{"class":234},[228,32456,32457],{"class":287},"0.0\n",[228,32459,32460],{"class":230,"line":10012},[228,32461,32462],{"class":297},"    # 训练集损失列表\n",[228,32464,32465,32468,32470],{"class":230,"line":10021},[228,32466,32467],{"class":238},"    train_loss_all",[228,32469,284],{"class":234},[228,32471,32472],{"class":238},"[]\n",[228,32474,32475],{"class":230,"line":10027},[228,32476,32477],{"class":297},"    # 验证集函数列表\n",[228,32479,32480,32483,32485],{"class":230,"line":10035},[228,32481,32482],{"class":238},"    val_loss_all",[228,32484,284],{"class":234},[228,32486,32472],{"class":238},[228,32488,32489],{"class":230,"line":10040},[228,32490,32491],{"class":297},"    # 训练集准确度列表\n",[228,32493,32494,32497,32499],{"class":230,"line":16719},[228,32495,32496],{"class":238},"    train_acc_all",[228,32498,284],{"class":234},[228,32500,32472],{"class":238},[228,32502,32503],{"class":230,"line":16725},[228,32504,32505],{"class":297},"    # 验证集准确度列表\n",[228,32507,32508,32511,32513],{"class":230,"line":16748},[228,32509,32510],{"class":238},"    val_acc_all",[228,32512,284],{"class":234},[228,32514,32472],{"class":238},[228,32516,32517],{"class":230,"line":16754},[228,32518,2514],{"emptyLinePlaceholder":157},[228,32520,32521],{"class":230,"line":16777},[228,32522,32523],{"class":297},"    # 保存当前时间--->方便看每轮训练的时间\n",[228,32525,32526,32529,32531],{"class":230,"line":16791},[228,32527,32528],{"class":238},"    since",[228,32530,284],{"class":234},[228,32532,32533],{"class":238},"time.time()\n",[228,32535,32536],{"class":230,"line":16811},[228,32537,2514],{"emptyLinePlaceholder":157},[228,32539,32540],{"class":230,"line":16817},[228,32541,2514],{"emptyLinePlaceholder":157},[228,32543,32544],{"class":230,"line":16828},[228,32545,32546],{"class":297},"    # 准备工作完成--->开始训练模型\n",[228,32548,32549,32551,32554,32556,32559],{"class":230,"line":16851},[228,32550,3315],{"class":234},[228,32552,32553],{"class":238}," epoch ",[228,32555,26159],{"class":234},[228,32557,32558],{"class":287}," range",[228,32560,32561],{"class":238},"(num_epochs):\n",[228,32563,32564,32567,32569,32572,32575,32577,32579,32581,32584,32586,32588],{"class":230,"line":16873},[228,32565,32566],{"class":287},"        print",[228,32568,239],{"class":238},[228,32570,32571],{"class":343},"\"Epoch ",[228,32573,32574],{"class":287},"{}",[228,32576,822],{"class":343},[228,32578,32574],{"class":287},[228,32580,489],{"class":343},[228,32582,32583],{"class":238},".format(epoch,num_epochs",[228,32585,770],{"class":234},[228,32587,456],{"class":287},[228,32589,30612],{"class":238},[228,32591,32592,32594,32596,32599,32601,32603],{"class":230,"line":16878},[228,32593,32566],{"class":287},[228,32595,239],{"class":238},[228,32597,32598],{"class":343},"\"-\"",[228,32600,693],{"class":234},[228,32602,684],{"class":287},[228,32604,245],{"class":238},[228,32606,32607],{"class":230,"line":16884},[228,32608,2514],{"emptyLinePlaceholder":157},[228,32610,32611],{"class":230,"line":16898},[228,32612,32613],{"class":297},"        # 初始化参数\n",[228,32615,32616],{"class":230,"line":16911},[228,32617,32618],{"class":297},"        # 训练集损失函数\n",[228,32620,32621,32624,32626],{"class":230,"line":16916},[228,32622,32623],{"class":238},"        train_loss",[228,32625,284],{"class":234},[228,32627,32457],{"class":287},[228,32629,32630],{"class":230,"line":16930},[228,32631,32632],{"class":297},"        # 训练集准确度\n",[228,32634,32635,32638,32640],{"class":230,"line":16935},[228,32636,32637],{"class":238},"        train_corrects",[228,32639,284],{"class":234},[228,32641,3199],{"class":287},[228,32643,32644],{"class":230,"line":16941},[228,32645,32646],{"class":297},"        # 验证集损失函数\n",[228,32648,32649,32652,32654],{"class":230,"line":16946},[228,32650,32651],{"class":238},"        val_loss",[228,32653,284],{"class":234},[228,32655,32457],{"class":287},[228,32657,32658],{"class":230,"line":16960},[228,32659,32660],{"class":297},"        # 验证集准确度\n",[228,32662,32663,32666,32668],{"class":230,"line":16965},[228,32664,32665],{"class":238},"        val_corrects",[228,32667,284],{"class":234},[228,32669,3199],{"class":287},[228,32671,32672],{"class":230,"line":16970},[228,32673,32674],{"class":297},"        # 训练集样本数量\n",[228,32676,32677,32680,32682],{"class":230,"line":16984},[228,32678,32679],{"class":238},"        train_num",[228,32681,284],{"class":234},[228,32683,3199],{"class":287},[228,32685,32686],{"class":230,"line":16996},[228,32687,32688],{"class":297},"        # 验证集样本数量\n",[228,32690,32691,32694,32696],{"class":230,"line":17001},[228,32692,32693],{"class":238},"        val_num",[228,32695,284],{"class":234},[228,32697,3199],{"class":287},[228,32699,32700],{"class":230,"line":17014},[228,32701,32702],{"class":297},"        # 将数据放到设备,并开始训练\n",[228,32704,32705,32707,32709,32711,32713],{"class":230,"line":17019},[228,32706,3517],{"class":234},[228,32708,31716],{"class":238},[228,32710,26159],{"class":234},[228,32712,31721],{"class":287},[228,32714,32715],{"class":238},"(train_dataloader):\n",[228,32717,32718],{"class":230,"line":17024},[228,32719,32720],{"class":297},"            # 将特征放入到训练设备\n",[228,32722,32723,32726,32728],{"class":230,"line":17029},[228,32724,32725],{"class":238},"            b_x",[228,32727,284],{"class":234},[228,32729,32730],{"class":238},"b_x.to(device)\n",[228,32732,32733],{"class":230,"line":17042},[228,32734,32735],{"class":297},"            # 将标签放入到训练设备当中\n",[228,32737,32738,32741,32743],{"class":230,"line":17047},[228,32739,32740],{"class":238},"            b_y",[228,32742,284],{"class":234},[228,32744,32745],{"class":238},"b_y.to(device)\n",[228,32747,32749],{"class":230,"line":32748},98,[228,32750,32751],{"class":297},"            # 设置模型为训练模式\n",[228,32753,32755],{"class":230,"line":32754},99,[228,32756,32757],{"class":238},"            model.train()\n",[228,32759,32761],{"class":230,"line":32760},100,[228,32762,32763],{"class":297},"            # 将数据放到模型当中,开始前向传播\n",[228,32765,32767],{"class":230,"line":32766},101,[228,32768,32769],{"class":297},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[228,32771,32773,32776,32778],{"class":230,"line":32772},102,[228,32774,32775],{"class":238},"            output",[228,32777,284],{"class":234},[228,32779,32780],{"class":238},"model(b_x)\n",[228,32782,32784],{"class":230,"line":32783},103,[228,32785,32786],{"class":297},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[228,32788,32790,32793,32795,32798,32801,32803,32805],{"class":230,"line":32789},104,[228,32791,32792],{"class":238},"            pre_lab",[228,32794,284],{"class":234},[228,32796,32797],{"class":238},"torch.argmax(output,",[228,32799,32800],{"class":5331},"dim",[228,32802,284],{"class":234},[228,32804,456],{"class":287},[228,32806,245],{"class":238},[228,32808,32810],{"class":230,"line":32809},105,[228,32811,32812],{"class":297},"            # 计算每一个batch的损失函数\n",[228,32814,32816,32819,32821],{"class":230,"line":32815},106,[228,32817,32818],{"class":238},"            loss",[228,32820,284],{"class":234},[228,32822,32823],{"class":238},"criterion(output,b_y)\n",[228,32825,32827],{"class":230,"line":32826},107,[228,32828,32829],{"class":297},"            # 将梯度初始化为0\n",[228,32831,32833],{"class":230,"line":32832},108,[228,32834,32835],{"class":238},"            optimizer.zero_grad()\n",[228,32837,32839],{"class":230,"line":32838},109,[228,32840,32841],{"class":297},"            # 梯度置为0后再进行反向传播\n",[228,32843,32845],{"class":230,"line":32844},110,[228,32846,32847],{"class":238},"            loss.backward()\n",[228,32849,32851],{"class":230,"line":32850},111,[228,32852,32853],{"class":297},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[228,32855,32857],{"class":230,"line":32856},112,[228,32858,32859],{"class":238},"            optimizer.step()\n",[228,32861,32863],{"class":230,"line":32862},113,[228,32864,32865],{"class":297},"            # loss.item()指的是batch的平均损失\n",[228,32867,32869,32872,32874,32877,32879,32882,32884],{"class":230,"line":32868},114,[228,32870,32871],{"class":238},"            train_loss",[228,32873,9592],{"class":234},[228,32875,32876],{"class":238},"loss.item()",[228,32878,693],{"class":234},[228,32880,32881],{"class":238},"b_x.size(",[228,32883,430],{"class":287},[228,32885,245],{"class":238},[228,32887,32889],{"class":230,"line":32888},115,[228,32890,32891],{"class":297},"            # 计算每个批次中正确预测的数量\n",[228,32893,32895,32898,32900,32903,32905],{"class":230,"line":32894},116,[228,32896,32897],{"class":238},"            train_corrects",[228,32899,9592],{"class":234},[228,32901,32902],{"class":238},"torch.sum(pre_lab",[228,32904,3063],{"class":234},[228,32906,32907],{"class":238},"b_y.data)\n",[228,32909,32911],{"class":230,"line":32910},117,[228,32912,32913],{"class":297},"            # 计算目前为止一共处理了多少样本\n",[228,32915,32917,32920,32922,32924,32926],{"class":230,"line":32916},118,[228,32918,32919],{"class":238},"            train_num",[228,32921,9592],{"class":234},[228,32923,32881],{"class":238},[228,32925,430],{"class":287},[228,32927,245],{"class":238},[228,32929,32931],{"class":230,"line":32930},119,[228,32932,32933],{"class":297},"        # 验证数据\n",[228,32935,32937,32939,32942,32944,32946],{"class":230,"line":32936},120,[228,32938,3517],{"class":234},[228,32940,32941],{"class":238}," step ,(b_x,b_y) ",[228,32943,26159],{"class":234},[228,32945,31721],{"class":287},[228,32947,32948],{"class":238},"(val_dataloader):\n",[228,32950,32952],{"class":230,"line":32951},121,[228,32953,32954],{"class":297},"            # 将特征放到验证设备当中\n",[228,32956,32958,32960,32962],{"class":230,"line":32957},122,[228,32959,32725],{"class":238},[228,32961,284],{"class":234},[228,32963,32730],{"class":238},[228,32965,32967],{"class":230,"line":32966},123,[228,32968,32969],{"class":297},"            # 将标签放到放到训练设备当中\n",[228,32971,32973,32975,32977],{"class":230,"line":32972},124,[228,32974,32740],{"class":238},[228,32976,284],{"class":234},[228,32978,32745],{"class":238},[228,32980,32982],{"class":230,"line":32981},125,[228,32983,32984],{"class":297},"            # 开启验证模式，设置模型为评估模式\n",[228,32986,32988],{"class":230,"line":32987},126,[228,32989,32990],{"class":238},"            model.eval()\n",[228,32992,32994,32997],{"class":230,"line":32993},127,[228,32995,32996],{"class":234},"            with",[228,32998,32999],{"class":238}," torch.no_grad():\n",[228,33001,33003],{"class":230,"line":33002},128,[228,33004,33005],{"class":297},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[228,33007,33009,33012,33014],{"class":230,"line":33008},129,[228,33010,33011],{"class":238},"                output ",[228,33013,284],{"class":234},[228,33015,33016],{"class":238}," model(b_x)\n",[228,33018,33020],{"class":230,"line":33019},130,[228,33021,33022],{"class":297},"                # 查找每一行中最大值对应的下标\n",[228,33024,33026,33029,33031,33034,33036,33038,33040],{"class":230,"line":33025},131,[228,33027,33028],{"class":238},"                pre_lab ",[228,33030,284],{"class":234},[228,33032,33033],{"class":238}," torch.argmax(output, ",[228,33035,32800],{"class":5331},[228,33037,284],{"class":234},[228,33039,456],{"class":287},[228,33041,245],{"class":238},[228,33043,33045],{"class":230,"line":33044},132,[228,33046,33047],{"class":297},"                # 计算验证集上的当前 batch 损失\n",[228,33049,33051,33054,33056],{"class":230,"line":33050},133,[228,33052,33053],{"class":238},"                val_batch_loss ",[228,33055,284],{"class":234},[228,33057,33058],{"class":238}," criterion(output, b_y)\n",[228,33060,33062],{"class":230,"line":33061},134,[228,33063,33064],{"class":297},"                # 对损失函数进行累加（按样本数加权）\n",[228,33066,33068,33071,33073,33076,33078,33081,33083],{"class":230,"line":33067},135,[228,33069,33070],{"class":238},"                val_loss ",[228,33072,9592],{"class":234},[228,33074,33075],{"class":238}," val_batch_loss.item() ",[228,33077,693],{"class":234},[228,33079,33080],{"class":238}," b_x.size(",[228,33082,430],{"class":287},[228,33084,245],{"class":238},[228,33086,33088,33091,33093,33096,33098],{"class":230,"line":33087},136,[228,33089,33090],{"class":238},"                val_corrects ",[228,33092,9592],{"class":234},[228,33094,33095],{"class":238}," torch.sum(pre_lab ",[228,33097,3063],{"class":234},[228,33099,33100],{"class":238}," b_y.data)\n",[228,33102,33104],{"class":230,"line":33103},137,[228,33105,33106],{"class":297},"                # 当前用于验证的样本数量\n",[228,33108,33110,33113,33115,33117,33119],{"class":230,"line":33109},138,[228,33111,33112],{"class":238},"            val_num ",[228,33114,9592],{"class":234},[228,33116,33080],{"class":238},[228,33118,430],{"class":287},[228,33120,245],{"class":238},[228,33122,33124],{"class":230,"line":33123},139,[228,33125,33126],{"class":297},"        # 计算并保存每一次迭代的loss值和准确率\n",[228,33128,33130],{"class":230,"line":33129},140,[228,33131,33132],{"class":297},"        # 计算并保存训练集的loss值\n",[228,33134,33136,33139,33141],{"class":230,"line":33135},141,[228,33137,33138],{"class":238},"        train_loss_all.append(train_loss",[228,33140,822],{"class":234},[228,33142,33143],{"class":238},"train_num)\n",[228,33145,33147],{"class":230,"line":33146},142,[228,33148,33149],{"class":297},"        # 取双精度\n",[228,33151,33153],{"class":230,"line":33152},143,[228,33154,33155],{"class":297},"        # 计算并保存训练集的准确率\n",[228,33157,33159,33162,33164],{"class":230,"line":33158},144,[228,33160,33161],{"class":238},"        train_acc_all.append(train_corrects.double().item()",[228,33163,822],{"class":234},[228,33165,33143],{"class":238},[228,33167,33169],{"class":230,"line":33168},145,[228,33170,33171],{"class":297},"        # 计算并保存验证集的loss值\n",[228,33173,33175,33178,33180],{"class":230,"line":33174},146,[228,33176,33177],{"class":238},"        val_loss_all.append(val_loss",[228,33179,822],{"class":234},[228,33181,33182],{"class":238},"val_num)\n",[228,33184,33186],{"class":230,"line":33185},147,[228,33187,33188],{"class":297},"        # 计算并保存验证集的准确率\n",[228,33190,33192,33195,33197],{"class":230,"line":33191},148,[228,33193,33194],{"class":238},"        val_acc_all.append(val_corrects.double().item()",[228,33196,822],{"class":234},[228,33198,33182],{"class":238},[228,33200,33202],{"class":230,"line":33201},149,[228,33203,2514],{"emptyLinePlaceholder":157},[228,33205,33207],{"class":230,"line":33206},150,[228,33208,33209],{"class":297},"        # 打印训练一轮的loss值和准确率\n",[228,33211,33213,33215,33217,33219,33221,33224,33226,33229,33231,33234,33236,33238,33240,33242,33245,33247,33249,33252,33254,33256],{"class":230,"line":33212},151,[228,33214,32566],{"class":287},[228,33216,239],{"class":238},[228,33218,3706],{"class":343},[228,33220,32574],{"class":287},[228,33222,33223],{"class":343},"train loss:",[228,33225,1134],{"class":287},[228,33227,33228],{"class":234},":.4f",[228,33230,1184],{"class":287},[228,33232,33233],{"class":343}," train acc:",[228,33235,1134],{"class":287},[228,33237,33228],{"class":234},[228,33239,1184],{"class":287},[228,33241,3706],{"class":343},[228,33243,33244],{"class":238},".format(epoch,train_loss_all[",[228,33246,770],{"class":234},[228,33248,456],{"class":287},[228,33250,33251],{"class":238},"],train_acc_all[",[228,33253,770],{"class":234},[228,33255,456],{"class":287},[228,33257,33258],{"class":238},"]))\n",[228,33260,33262,33264,33266,33268,33270,33273,33275,33277,33279,33282,33284,33286,33288,33290,33293,33295,33297,33300,33302,33304],{"class":230,"line":33261},152,[228,33263,32566],{"class":287},[228,33265,239],{"class":238},[228,33267,3706],{"class":343},[228,33269,32574],{"class":287},[228,33271,33272],{"class":343},"val loss:",[228,33274,1134],{"class":287},[228,33276,33228],{"class":234},[228,33278,1184],{"class":287},[228,33280,33281],{"class":343}," val acc:",[228,33283,1134],{"class":287},[228,33285,33228],{"class":234},[228,33287,1184],{"class":287},[228,33289,3706],{"class":343},[228,33291,33292],{"class":238},".format(epoch,val_loss_all[",[228,33294,770],{"class":234},[228,33296,456],{"class":287},[228,33298,33299],{"class":238},"],val_acc_all[",[228,33301,770],{"class":234},[228,33303,456],{"class":287},[228,33305,33258],{"class":238},[228,33307,33309],{"class":230,"line":33308},153,[228,33310,2514],{"emptyLinePlaceholder":157},[228,33312,33314],{"class":230,"line":33313},154,[228,33315,33316],{"class":297},"        # 判断准确度--->保存最优模型\n",[228,33318,33320,33322,33325,33327,33329,33331,33333],{"class":230,"line":33319},155,[228,33321,2611],{"class":234},[228,33323,33324],{"class":238}," val_acc_all[",[228,33326,770],{"class":234},[228,33328,456],{"class":287},[228,33330,1178],{"class":238},[228,33332,1198],{"class":234},[228,33334,33335],{"class":238},"best_acc:\n",[228,33337,33339],{"class":230,"line":33338},156,[228,33340,33341],{"class":297},"            # 保存当前模型准确度\n",[228,33343,33345,33348,33350,33352,33355,33357,33359],{"class":230,"line":33344},157,[228,33346,33347],{"class":238},"            best_acc:",[228,33349,278],{"class":287},[228,33351,284],{"class":234},[228,33353,33354],{"class":238},"val_acc_all[",[228,33356,770],{"class":234},[228,33358,456],{"class":287},[228,33360,33361],{"class":238},"]\n",[228,33363,33365],{"class":230,"line":33364},158,[228,33366,33367],{"class":297},"            # 保存当前的准确度\n",[228,33369,33371],{"class":230,"line":33370},159,[228,33372,33373],{"class":297},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[228,33375,33377,33380,33382],{"class":230,"line":33376},160,[228,33378,33379],{"class":238},"            best_model_wts",[228,33381,284],{"class":234},[228,33383,32429],{"class":238},[228,33385,33387],{"class":230,"line":33386},161,[228,33388,2514],{"emptyLinePlaceholder":157},[228,33390,33392],{"class":230,"line":33391},162,[228,33393,33394],{"class":297},"        # 计算耗时\n",[228,33396,33398,33401,33403,33406,33408],{"class":230,"line":33397},163,[228,33399,33400],{"class":238},"        time_use",[228,33402,284],{"class":234},[228,33404,33405],{"class":238},"time.time()",[228,33407,770],{"class":234},[228,33409,33410],{"class":238},"since\n",[228,33412,33414,33416,33418,33421,33423,33426,33428,33430,33432,33434,33436,33439,33442,33445,33447,33450,33452,33454],{"class":230,"line":33413},164,[228,33415,32566],{"class":287},[228,33417,239],{"class":238},[228,33419,33420],{"class":343},"'训练和验证耗费的时间",[228,33422,1134],{"class":287},[228,33424,33425],{"class":234},":.0f",[228,33427,1184],{"class":287},[228,33429,782],{"class":343},[228,33431,1134],{"class":287},[228,33433,33425],{"class":234},[228,33435,1184],{"class":287},[228,33437,33438],{"class":343},"s'",[228,33440,33441],{"class":238},".format(time_use",[228,33443,33444],{"class":234},"\u002F\u002F",[228,33446,1145],{"class":287},[228,33448,33449],{"class":238},",time_use",[228,33451,566],{"class":234},[228,33453,1145],{"class":287},[228,33455,30612],{"class":238},[228,33457,33459],{"class":230,"line":33458},165,[228,33460,33461],{"class":297},"    # 选择最优参数\n",[228,33463,33465],{"class":230,"line":33464},166,[228,33466,33467],{"class":297},"    # 加载最高准确率下的模型参数\n",[228,33469,33471],{"class":230,"line":33470},167,[228,33472,33473],{"class":297},"    # model.load_state_dict(best_model_wts)\n",[228,33475,33477,33480,33483],{"class":230,"line":33476},168,[228,33478,33479],{"class":238},"    torch.save(model.state_dict(best_model_wts), ",[228,33481,33482],{"class":343},"'.\u002Fbest_model.pth'",[228,33484,245],{"class":238},[228,33486,33488],{"class":230,"line":33487},169,[228,33489,33490],{"class":297},"    # 或者写成\n",[228,33492,33494],{"class":230,"line":33493},170,[228,33495,33496],{"class":297},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[228,33498,33500],{"class":230,"line":33499},171,[228,33501,33502],{"class":297},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[228,33504,33506,33509,33511,33514,33517,33519],{"class":230,"line":33505},172,[228,33507,33508],{"class":238},"    train_process",[228,33510,284],{"class":234},[228,33512,33513],{"class":238},"pd.DataFrame(",[228,33515,33516],{"class":5331},"data",[228,33518,284],{"class":234},[228,33520,1660],{"class":238},[228,33522,33524,33527,33529,33532],{"class":230,"line":33523},173,[228,33525,33526],{"class":343},"        \"epoch\"",[228,33528,1097],{"class":238},[228,33530,33531],{"class":287},"range",[228,33533,33534],{"class":238},"(num_epochs),\n",[228,33536,33538,33541],{"class":230,"line":33537},174,[228,33539,33540],{"class":343},"        \"train_loss_all\"",[228,33542,33543],{"class":238},":train_loss_all,\n",[228,33545,33547,33550],{"class":230,"line":33546},175,[228,33548,33549],{"class":343},"        \"val_loss_all\"",[228,33551,33552],{"class":238},":val_loss_all,\n",[228,33554,33556,33559],{"class":230,"line":33555},176,[228,33557,33558],{"class":343},"        \"train_acc_all\"",[228,33560,33561],{"class":238},":train_acc_all,\n",[228,33563,33565,33568],{"class":230,"line":33564},177,[228,33566,33567],{"class":343},"        \"val_acc_all\"",[228,33569,33570],{"class":238},":val_acc_all\n",[228,33572,33574],{"class":230,"line":33573},178,[228,33575,33576],{"class":238},"    })\n",[228,33578,33580],{"class":230,"line":33579},179,[228,33581,33582],{"class":297},"    # 返回训练保存的过程\n",[228,33584,33586,33588],{"class":230,"line":33585},180,[228,33587,4204],{"class":234},[228,33589,33590],{"class":238}," train_process\n",[228,33592,33594],{"class":230,"line":33593},181,[228,33595,2514],{"emptyLinePlaceholder":157},[228,33597,33599],{"class":230,"line":33598},182,[228,33600,33601],{"class":297},"# 将loss值和精度按照图片的形式展示出来\n",[228,33603,33605,33607,33610],{"class":230,"line":33604},183,[228,33606,32062],{"class":234},[228,33608,33609],{"class":2077}," matplot_acc_loss",[228,33611,33612],{"class":238},"(train_process):\n",[228,33614,33616],{"class":230,"line":33615},184,[228,33617,33618],{"class":297},"    # 设置图的大小\n",[228,33620,33622,33625,33627,33629,33631,33633,33635,33637],{"class":230,"line":33621},185,[228,33623,33624],{"class":238},"    plt.figure(",[228,33626,31808],{"class":5331},[228,33628,284],{"class":234},[228,33630,239],{"class":238},[228,33632,736],{"class":287},[228,33634,616],{"class":238},[228,33636,531],{"class":287},[228,33638,30612],{"class":238},[228,33640,33642],{"class":230,"line":33641},186,[228,33643,33644],{"class":297},"    # 设置图中有几张图\n",[228,33646,33648],{"class":230,"line":33647},187,[228,33649,33650],{"class":297},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[228,33652,33654],{"class":230,"line":33653},188,[228,33655,33656],{"class":297},"    # ①loss图\n",[228,33658,33660,33662,33664,33666,33668,33670,33672],{"class":230,"line":33659},189,[228,33661,31842],{"class":238},[228,33663,456],{"class":287},[228,33665,616],{"class":238},[228,33667,316],{"class":287},[228,33669,616],{"class":238},[228,33671,456],{"class":287},[228,33673,245],{"class":238},[228,33675,33677],{"class":230,"line":33676},190,[228,33678,33679],{"class":297},"    # 补充:\n",[228,33681,33683],{"class":230,"line":33682},191,[228,33684,33685],{"class":297},"    # plt.subplot(nrows, ncols, index)\n",[228,33687,33689],{"class":230,"line":33688},192,[228,33690,33691],{"class":297},"    # nrows：行数\n",[228,33693,33695],{"class":230,"line":33694},193,[228,33696,33697],{"class":297},"    # ncols：列数\n",[228,33699,33701],{"class":230,"line":33700},194,[228,33702,33703],{"class":297},"    # index：目前选中第几个子图（从1开始）\n",[228,33705,33707,33710,33713,33716,33719,33721,33724,33726,33729],{"class":230,"line":33706},195,[228,33708,33709],{"class":238},"    plt.plot(train_process[",[228,33711,33712],{"class":343},"\"epoch\"",[228,33714,33715],{"class":238},"],train_process.train_loss_all,",[228,33717,33718],{"class":343},"'ro-'",[228,33720,616],{"class":238},[228,33722,33723],{"class":5331},"label",[228,33725,284],{"class":234},[228,33727,33728],{"class":343},"'train loss'",[228,33730,245],{"class":238},[228,33732,33734,33736,33738,33741,33744,33746,33748,33750,33753],{"class":230,"line":33733},196,[228,33735,33709],{"class":238},[228,33737,33712],{"class":343},[228,33739,33740],{"class":238},"],train_process.val_loss_all,",[228,33742,33743],{"class":343},"'bs--'",[228,33745,616],{"class":238},[228,33747,33723],{"class":5331},[228,33749,284],{"class":234},[228,33751,33752],{"class":343},"'val loss'",[228,33754,245],{"class":238},[228,33756,33758],{"class":230,"line":33757},197,[228,33759,33760],{"class":297},"    # 添加一个图例\n",[228,33762,33764],{"class":230,"line":33763},198,[228,33765,33766],{"class":238},"    plt.legend()\n",[228,33768,33770],{"class":230,"line":33769},199,[228,33771,33772],{"class":297},"    # 给轴添加标签\n",[228,33774,33776,33779,33782],{"class":230,"line":33775},200,[228,33777,33778],{"class":238},"    plt.xlabel(",[228,33780,33781],{"class":343},"'epoch'",[228,33783,245],{"class":238},[228,33785,33787,33790,33793],{"class":230,"line":33786},201,[228,33788,33789],{"class":238},"    plt.ylabel(",[228,33791,33792],{"class":343},"'loss'",[228,33794,245],{"class":238},[228,33796,33798],{"class":230,"line":33797},202,[228,33799,33800],{"class":297},"    # ②准确度图\n",[228,33802,33804,33806,33808,33810,33812,33814,33816],{"class":230,"line":33803},203,[228,33805,31842],{"class":238},[228,33807,456],{"class":287},[228,33809,616],{"class":238},[228,33811,316],{"class":287},[228,33813,616],{"class":238},[228,33815,316],{"class":287},[228,33817,245],{"class":238},[228,33819,33821,33823,33825,33828,33830,33832,33834,33836,33839],{"class":230,"line":33820},204,[228,33822,33709],{"class":238},[228,33824,33712],{"class":343},[228,33826,33827],{"class":238},"],train_process.train_acc_all,",[228,33829,33718],{"class":343},[228,33831,616],{"class":238},[228,33833,33723],{"class":5331},[228,33835,284],{"class":234},[228,33837,33838],{"class":343},"'train acc'",[228,33840,245],{"class":238},[228,33842,33844,33846,33848,33851,33853,33855,33857,33859,33862],{"class":230,"line":33843},205,[228,33845,33709],{"class":238},[228,33847,33712],{"class":343},[228,33849,33850],{"class":238},"],train_process.val_acc_all,",[228,33852,33743],{"class":343},[228,33854,616],{"class":238},[228,33856,33723],{"class":5331},[228,33858,284],{"class":234},[228,33860,33861],{"class":343},"'val acc'",[228,33863,245],{"class":238},[228,33865,33867],{"class":230,"line":33866},206,[228,33868,33869],{"class":297},"    # 添加图例\n",[228,33871,33873],{"class":230,"line":33872},207,[228,33874,33766],{"class":238},[228,33876,33878,33880,33882],{"class":230,"line":33877},208,[228,33879,33778],{"class":238},[228,33881,33712],{"class":343},[228,33883,245],{"class":238},[228,33885,33887,33889,33892],{"class":230,"line":33886},209,[228,33888,33789],{"class":238},[228,33890,33891],{"class":343},"\"acc\"",[228,33893,245],{"class":238},[228,33895,33897],{"class":230,"line":33896},210,[228,33898,33899],{"class":238},"    plt.show()\n",[228,33901,33903],{"class":230,"line":33902},211,[228,33904,2514],{"emptyLinePlaceholder":157},[228,33906,33908],{"class":230,"line":33907},212,[228,33909,33910],{"class":297},"# 正式开始训练:\n",[228,33912,33914,33916,33918,33920,33922],{"class":230,"line":33913},213,[228,33915,1645],{"class":234},[228,33917,31335],{"class":287},[228,33919,3063],{"class":234},[228,33921,31340],{"class":343},[228,33923,3853],{"class":238},[228,33925,33927],{"class":230,"line":33926},214,[228,33928,33929],{"class":297},"    # 将模型实例化\n",[228,33931,33933,33936,33938],{"class":230,"line":33932},215,[228,33934,33935],{"class":238},"    LeNet",[228,33937,284],{"class":234},[228,33939,33940],{"class":238},"LeNet()\n",[228,33942,33944,33947,33949],{"class":230,"line":33943},216,[228,33945,33946],{"class":238},"    train_dataloader,val_dataloader",[228,33948,284],{"class":234},[228,33950,33951],{"class":238},"train_val_data_process()\n",[228,33953,33955,33957,33959,33962,33965,33967,33969],{"class":230,"line":33954},217,[228,33956,33508],{"class":238},[228,33958,284],{"class":234},[228,33960,33961],{"class":238},"train_model_process(LeNet,train_dataloader,val_dataloader,",[228,33963,33964],{"class":5331},"num_epochs",[228,33966,284],{"class":234},[228,33968,938],{"class":287},[228,33970,245],{"class":238},[228,33972,33974],{"class":230,"line":33973},218,[228,33975,33976],{"class":238},"    matplot_acc_loss(train_process)\n",[19,33978,33979],{},"画图的补充点学习：",[19,33981,33982],{},[1576,33983],{"alt":141,"src":33984},"\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",[183,33986,33987],{"start":1293},[186,33988,33989],{},"测试",[220,33991,33993],{"className":30493,"code":33992,"language":30495,"meta":141,"style":141},"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",[30,33994,33995,34001,34011,34023,34033,34038,34048,34058,34062,34067,34076,34093,34105,34122,34133,34149,34154,34165,34176,34187,34194,34198,34203,34213,34218,34235,34243,34247,34252,34261,34270,34274,34279,34284,34289,34296,34301,34313,34323,34333,34338,34342,34347,34356,34361,34377,34382,34387,34392,34406,34411,34425,34429,34434,34449,34454,34466,34470,34475,34487,34492,34500,34505,34510,34520,34525,34534,34539,34544,34548,34553,34558,34574,34582,34587,34592,34651,34657,34662,34673,34681,34689,34693,34698,34702,34707,34715,34720,34736,34741,34751,34761],{"__ignoreMap":141},[228,33996,33997,33999],{"class":230,"line":231},[228,33998,30507],{"class":234},[228,34000,30510],{"class":238},[228,34002,34003,34005,34007,34009],{"class":230,"line":142},[228,34004,30507],{"class":234},[228,34006,31530],{"class":238},[228,34008,31498],{"class":234},[228,34010,31535],{"class":238},[228,34012,34013,34015,34018,34020],{"class":230,"line":1293},[228,34014,30852],{"class":234},[228,34016,34017],{"class":238}," jupyter_client.consoleapp ",[228,34019,30507],{"class":234},[228,34021,34022],{"class":238}," classes\n",[228,34024,34025,34027,34029,34031],{"class":230,"line":1308},[228,34026,30852],{"class":234},[228,34028,31513],{"class":238},[228,34030,30507],{"class":234},[228,34032,31518],{"class":238},[228,34034,34035],{"class":230,"line":1314},[228,34036,34037],{"class":297},"# 导入数据集\n",[228,34039,34040,34042,34044,34046],{"class":230,"line":1328},[228,34041,30852],{"class":234},[228,34043,31483],{"class":238},[228,34045,30507],{"class":234},[228,34047,31488],{"class":238},[228,34049,34050,34052,34054,34056],{"class":230,"line":1334},[228,34051,30852],{"class":234},[228,34053,32029],{"class":238},[228,34055,30507],{"class":234},[228,34057,32034],{"class":238},[228,34059,34060],{"class":230,"line":1425},[228,34061,2514],{"emptyLinePlaceholder":157},[228,34063,34064],{"class":230,"line":1431},[228,34065,34066],{"class":297},"# 测试数据处理\n",[228,34068,34069,34071,34074],{"class":230,"line":1443},[228,34070,32062],{"class":234},[228,34072,34073],{"class":2077}," test_data_process",[228,34075,32068],{"class":238},[228,34077,34078,34081,34083,34085,34087,34089,34091],{"class":230,"line":1726},[228,34079,34080],{"class":238},"    test_data",[228,34082,284],{"class":234},[228,34084,31570],{"class":238},[228,34086,31573],{"class":5331},[228,34088,284],{"class":234},[228,34090,31578],{"class":343},[228,34092,31581],{"class":238},[228,34094,34095,34098,34100,34103],{"class":230,"line":1731},[228,34096,34097],{"class":5331},"                           train",[228,34099,284],{"class":234},[228,34101,34102],{"class":287},"False",[228,34104,31581],{"class":238},[228,34106,34107,34110,34112,34114,34116,34118,34120],{"class":230,"line":1737},[228,34108,34109],{"class":5331},"                           transform",[228,34111,284],{"class":234},[228,34113,31608],{"class":238},[228,34115,31611],{"class":5331},[228,34117,284],{"class":234},[228,34119,1139],{"class":287},[228,34121,31619],{"class":238},[228,34123,34124,34127,34129,34131],{"class":230,"line":1742},[228,34125,34126],{"class":5331},"                           download",[228,34128,284],{"class":234},[228,34130,31591],{"class":287},[228,34132,245],{"class":238},[228,34134,34135,34138,34140,34142,34144,34146],{"class":230,"line":1756},[228,34136,34137],{"class":238},"    test_dataloader",[228,34139,284],{"class":234},[228,34141,31649],{"class":238},[228,34143,31652],{"class":5331},[228,34145,284],{"class":234},[228,34147,34148],{"class":238},"test_data,\n",[228,34150,34151],{"class":230,"line":1761},[228,34152,34153],{"class":297},"                                    # 这里是一张一张进行测试\n",[228,34155,34156,34159,34161,34163],{"class":230,"line":1767},[228,34157,34158],{"class":5331},"                                    batch_size",[228,34160,284],{"class":234},[228,34162,456],{"class":287},[228,34164,31581],{"class":238},[228,34166,34167,34170,34172,34174],{"class":230,"line":1788},[228,34168,34169],{"class":5331},"                                    shuffle",[228,34171,284],{"class":234},[228,34173,31591],{"class":287},[228,34175,31581],{"class":238},[228,34177,34178,34181,34183,34185],{"class":230,"line":1793},[228,34179,34180],{"class":5331},"                                    num_workers",[228,34182,284],{"class":234},[228,34184,430],{"class":287},[228,34186,245],{"class":238},[228,34188,34189,34191],{"class":230,"line":1807},[228,34190,4204],{"class":234},[228,34192,34193],{"class":238}," test_dataloader\n",[228,34195,34196],{"class":230,"line":1812},[228,34197,2514],{"emptyLinePlaceholder":157},[228,34199,34200],{"class":230,"line":1841},[228,34201,34202],{"class":297},"# 定义模型测试函数\n",[228,34204,34205,34207,34210],{"class":230,"line":1846},[228,34206,32062],{"class":234},[228,34208,34209],{"class":2077}," test_model_process",[228,34211,34212],{"class":238},"(model,test_dataloader):\n",[228,34214,34215],{"class":230,"line":1863},[228,34216,34217],{"class":297},"    # 将模型放到设备当中，先进行判断\n",[228,34219,34220,34222,34224,34226,34228,34230,34232],{"class":230,"line":1868},[228,34221,31352],{"class":238},[228,34223,284],{"class":234},[228,34225,31359],{"class":343},[228,34227,1818],{"class":234},[228,34229,31364],{"class":238},[228,34231,1815],{"class":234},[228,34233,34234],{"class":343}," \"cpu\"\n",[228,34236,34237,34239,34241],{"class":230,"line":1873},[228,34238,31404],{"class":238},[228,34240,284],{"class":234},[228,34242,32404],{"class":238},[228,34244,34245],{"class":230,"line":1878},[228,34246,2514],{"emptyLinePlaceholder":157},[228,34248,34249],{"class":230,"line":1892},[228,34250,34251],{"class":297},"    # 设置初始化参数\n",[228,34253,34254,34257,34259],{"class":230,"line":1897},[228,34255,34256],{"class":238},"    test_corrects",[228,34258,284],{"class":234},[228,34260,32457],{"class":287},[228,34262,34263,34266,34268],{"class":230,"line":2691},[228,34264,34265],{"class":238},"    test_num",[228,34267,284],{"class":234},[228,34269,3199],{"class":287},[228,34271,34272],{"class":230,"line":2705},[228,34273,2514],{"emptyLinePlaceholder":157},[228,34275,34276],{"class":230,"line":2713},[228,34277,34278],{"class":297},"    # 进行模型测试\n",[228,34280,34281],{"class":230,"line":2718},[228,34282,34283],{"class":297},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[228,34285,34286],{"class":230,"line":2724},[228,34287,34288],{"class":297},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[228,34290,34291,34294],{"class":230,"line":2730},[228,34292,34293],{"class":234},"    with",[228,34295,32999],{"class":238},[228,34297,34298],{"class":230,"line":2735},[228,34299,34300],{"class":297},"        # 从数据中进行\n",[228,34302,34303,34305,34308,34310],{"class":230,"line":8063},[228,34304,3517],{"class":234},[228,34306,34307],{"class":238}," test_data_x,test_data_y ",[228,34309,26159],{"class":234},[228,34311,34312],{"class":238}," test_dataloader:\n",[228,34314,34315,34318,34320],{"class":230,"line":8087},[228,34316,34317],{"class":238},"            test_data_x",[228,34319,284],{"class":234},[228,34321,34322],{"class":238},"test_data_x.to(device)\n",[228,34324,34325,34328,34330],{"class":230,"line":8092},[228,34326,34327],{"class":238},"            test_data_y",[228,34329,284],{"class":234},[228,34331,34332],{"class":238},"test_data_y.to(device)\n",[228,34334,34335],{"class":230,"line":8098},[228,34336,34337],{"class":297},"            # 设置为验证模式\n",[228,34339,34340],{"class":230,"line":8125},[228,34341,32990],{"class":238},[228,34343,34344],{"class":230,"line":8130},[228,34345,34346],{"class":297},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[228,34348,34349,34351,34353],{"class":230,"line":8136},[228,34350,32775],{"class":238},[228,34352,284],{"class":234},[228,34354,34355],{"class":238},"model(test_data_x)\n",[228,34357,34358],{"class":230,"line":8148},[228,34359,34360],{"class":297},"            # 查找每一行中最大值对应的下标\n",[228,34362,34363,34365,34367,34369,34371,34373,34375],{"class":230,"line":8160},[228,34364,32792],{"class":238},[228,34366,284],{"class":234},[228,34368,32797],{"class":238},[228,34370,32800],{"class":5331},[228,34372,284],{"class":234},[228,34374,456],{"class":287},[228,34376,245],{"class":238},[228,34378,34379],{"class":230,"line":8172},[228,34380,34381],{"class":297},"            # 计算正确率\n",[228,34383,34384],{"class":230,"line":9831},[228,34385,34386],{"class":297},"            # .data表示是一个不带梯度信息的tensor\n",[228,34388,34389],{"class":230,"line":9856},[228,34390,34391],{"class":297},"            # 如果预测正确，则准确度test_corrects加1\n",[228,34393,34394,34397,34399,34401,34403],{"class":230,"line":9879},[228,34395,34396],{"class":238},"            test_corrects",[228,34398,9592],{"class":234},[228,34400,32902],{"class":238},[228,34402,3063],{"class":234},[228,34404,34405],{"class":238},"test_data_y.data)\n",[228,34407,34408],{"class":230,"line":9903},[228,34409,34410],{"class":297},"            # 将所有的测试样本进行累计\n",[228,34412,34413,34416,34418,34421,34423],{"class":230,"line":9908},[228,34414,34415],{"class":238},"            test_num",[228,34417,9592],{"class":234},[228,34419,34420],{"class":238},"test_data_x.size(",[228,34422,430],{"class":287},[228,34424,245],{"class":238},[228,34426,34427],{"class":230,"line":9913},[228,34428,2514],{"emptyLinePlaceholder":157},[228,34430,34431],{"class":230,"line":9918},[228,34432,34433],{"class":297},"        # 计算准确度\n",[228,34435,34436,34439,34441,34444,34446],{"class":230,"line":9927},[228,34437,34438],{"class":238},"        test_acc",[228,34440,284],{"class":234},[228,34442,34443],{"class":238},"test_corrects.double().item()",[228,34445,822],{"class":234},[228,34447,34448],{"class":238},"test_num\n",[228,34450,34451],{"class":230,"line":9932},[228,34452,34453],{"class":297},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[228,34455,34456,34458,34460,34463],{"class":230,"line":9938},[228,34457,32566],{"class":287},[228,34459,239],{"class":238},[228,34461,34462],{"class":343},"\"测试的准确率：\"",[228,34464,34465],{"class":238},",test_acc)\n",[228,34467,34468],{"class":230,"line":9959},[228,34469,2514],{"emptyLinePlaceholder":157},[228,34471,34472],{"class":230,"line":9965},[228,34473,34474],{"class":297},"# 实现模型的测试功能\n",[228,34476,34477,34479,34481,34483,34485],{"class":230,"line":9979},[228,34478,1645],{"class":234},[228,34480,31335],{"class":287},[228,34482,3063],{"class":234},[228,34484,31340],{"class":343},[228,34486,3853],{"class":238},[228,34488,34489],{"class":230,"line":9985},[228,34490,34491],{"class":297},"    # 加载模型\n",[228,34493,34494,34496,34498],{"class":230,"line":10012},[228,34495,31404],{"class":238},[228,34497,284],{"class":234},[228,34499,33940],{"class":238},[228,34501,34502],{"class":230,"line":10021},[228,34503,34504],{"class":297},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[228,34506,34507],{"class":230,"line":10027},[228,34508,34509],{"class":297},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[228,34511,34512,34515,34518],{"class":230,"line":10035},[228,34513,34514],{"class":238},"    model.load_state_dict(torch.load(",[228,34516,34517],{"class":343},"'best_model.pth'",[228,34519,30612],{"class":238},[228,34521,34522],{"class":230,"line":10040},[228,34523,34524],{"class":297},"    # 数据加载\n",[228,34526,34527,34529,34531],{"class":230,"line":16719},[228,34528,34137],{"class":238},[228,34530,284],{"class":234},[228,34532,34533],{"class":238},"test_data_process()\n",[228,34535,34536],{"class":230,"line":16725},[228,34537,34538],{"class":297},"    # 加载模型测试的函数\n",[228,34540,34541],{"class":230,"line":16748},[228,34542,34543],{"class":238},"    test_model_process(model,test_dataloader)\n",[228,34545,34546],{"class":230,"line":16754},[228,34547,2514],{"emptyLinePlaceholder":157},[228,34549,34550],{"class":230,"line":16777},[228,34551,34552],{"class":297},"    # 验证集推理实现：\n",[228,34554,34555],{"class":230,"line":16791},[228,34556,34557],{"class":297},"    # 加载数据加载的更详细一些\n",[228,34559,34560,34562,34564,34566,34568,34570,34572],{"class":230,"line":16811},[228,34561,31352],{"class":238},[228,34563,284],{"class":234},[228,34565,31359],{"class":343},[228,34567,1818],{"class":234},[228,34569,31364],{"class":238},[228,34571,1815],{"class":234},[228,34573,34234],{"class":343},[228,34575,34576,34578,34580],{"class":230,"line":16817},[228,34577,31404],{"class":238},[228,34579,284],{"class":234},[228,34581,32404],{"class":238},[228,34583,34584],{"class":230,"line":16828},[228,34585,34586],{"class":297},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[228,34588,34589],{"class":230,"line":16851},[228,34590,34591],{"class":297},"    # 顺序不可改变\n",[228,34593,34594,34597,34599,34601,34604,34606,34609,34611,34614,34616,34619,34621,34624,34626,34629,34631,34634,34636,34639,34641,34644,34646,34649],{"class":230,"line":16873},[228,34595,34596],{"class":238},"    classes",[228,34598,284],{"class":234},[228,34600,1128],{"class":238},[228,34602,34603],{"class":343},"'T-shirt\u002Ftop'",[228,34605,616],{"class":238},[228,34607,34608],{"class":343},"'Trouser'",[228,34610,616],{"class":238},[228,34612,34613],{"class":343},"'Pullover'",[228,34615,616],{"class":238},[228,34617,34618],{"class":343},"'Dress'",[228,34620,616],{"class":238},[228,34622,34623],{"class":343},"'Coat'",[228,34625,616],{"class":238},[228,34627,34628],{"class":343},"'Sandal'",[228,34630,616],{"class":238},[228,34632,34633],{"class":343},"'Shirt'",[228,34635,616],{"class":238},[228,34637,34638],{"class":343},"'Sneaker'",[228,34640,616],{"class":238},[228,34642,34643],{"class":343},"'Bag'",[228,34645,616],{"class":238},[228,34647,34648],{"class":343},"'Ankle boot'",[228,34650,33361],{"class":238},[228,34652,34653,34655],{"class":230,"line":16878},[228,34654,34293],{"class":234},[228,34656,32999],{"class":238},[228,34658,34659],{"class":230,"line":16884},[228,34660,34661],{"class":297},"        # 将数据和标签都放到设备当中\n",[228,34663,34664,34666,34669,34671],{"class":230,"line":16898},[228,34665,3517],{"class":234},[228,34667,34668],{"class":238}," b_x,b_y ",[228,34670,26159],{"class":234},[228,34672,34312],{"class":238},[228,34674,34675,34677,34679],{"class":230,"line":16911},[228,34676,32725],{"class":238},[228,34678,284],{"class":234},[228,34680,32730],{"class":238},[228,34682,34683,34685,34687],{"class":230,"line":16916},[228,34684,32740],{"class":238},[228,34686,284],{"class":234},[228,34688,32745],{"class":238},[228,34690,34691],{"class":230,"line":16930},[228,34692,2514],{"emptyLinePlaceholder":157},[228,34694,34695],{"class":230,"line":16935},[228,34696,34697],{"class":297},"            # 设置模型为验证模式\n",[228,34699,34700],{"class":230,"line":16941},[228,34701,32990],{"class":238},[228,34703,34704],{"class":230,"line":16946},[228,34705,34706],{"class":297},"            # 模型推理结果\n",[228,34708,34709,34711,34713],{"class":230,"line":16960},[228,34710,32775],{"class":238},[228,34712,284],{"class":234},[228,34714,32780],{"class":238},[228,34716,34717],{"class":230,"line":16965},[228,34718,34719],{"class":297},"            # 获取最大下标，最大下标就是类别号\n",[228,34721,34722,34724,34726,34728,34730,34732,34734],{"class":230,"line":16970},[228,34723,32792],{"class":238},[228,34725,284],{"class":234},[228,34727,32797],{"class":238},[228,34729,32800],{"class":5331},[228,34731,284],{"class":234},[228,34733,456],{"class":287},[228,34735,245],{"class":238},[228,34737,34738],{"class":230,"line":16984},[228,34739,34740],{"class":297},"            # 取出张量中的数值\n",[228,34742,34743,34746,34748],{"class":230,"line":16996},[228,34744,34745],{"class":238},"            result",[228,34747,284],{"class":234},[228,34749,34750],{"class":238},"pre_lab.item()\n",[228,34752,34753,34756,34758],{"class":230,"line":17001},[228,34754,34755],{"class":238},"            label",[228,34757,284],{"class":234},[228,34759,34760],{"class":238},"b_y.item()\n",[228,34762,34763,34766,34768,34771,34774,34777,34779,34782],{"class":230,"line":17014},[228,34764,34765],{"class":287},"            print",[228,34767,239],{"class":238},[228,34769,34770],{"class":343},"\"预测值：\"",[228,34772,34773],{"class":238},",classes[result],",[228,34775,34776],{"class":343},"\"------\"",[228,34778,616],{"class":238},[228,34780,34781],{"class":343},"\"真实值：\"",[228,34783,34784],{"class":238},",classes[label])\n",[19,34786,34787],{},"（2）AlexNet",[183,34789,34790],{},[186,34791,34792],{},"神经网络构建",[220,34794,34796],{"className":30493,"code":34795,"language":30495,"meta":141,"style":141},"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",[30,34797,34798,34804,34814,34824,34836,34840,34857,34865,34880,34892,34934,34961,35004,35030,35074,35117,35160,35187,35191,35201,35206,35234,35253,35272,35276,35281,35289,35304,35314,35328,35338,35353,35368,35383,35394,35398,35403,35413,35428,35433,35447,35462,35474,35479,35490,35495,35501,35506,35518,35538,35543,35552],{"__ignoreMap":141},[228,34799,34800,34802],{"class":230,"line":231},[228,34801,30507],{"class":234},[228,34803,30510],{"class":238},[228,34805,34806,34808,34810,34812],{"class":230,"line":142},[228,34807,30852],{"class":234},[228,34809,30855],{"class":238},[228,34811,30507],{"class":234},[228,34813,30860],{"class":238},[228,34815,34816,34818,34820,34822],{"class":230,"line":1293},[228,34817,30852],{"class":234},[228,34819,30872],{"class":238},[228,34821,30507],{"class":234},[228,34823,30877],{"class":238},[228,34825,34826,34828,34831,34833],{"class":230,"line":1308},[228,34827,30507],{"class":234},[228,34829,34830],{"class":238}," torch.nn.functional ",[228,34832,31498],{"class":234},[228,34834,34835],{"class":238}," F\n",[228,34837,34838],{"class":230,"line":1314},[228,34839,2514],{"emptyLinePlaceholder":157},[228,34841,34842,34844,34847,34849,34851,34853,34855],{"class":230,"line":1328},[228,34843,14809],{"class":234},[228,34845,34846],{"class":2077}," AlexNet",[228,34848,239],{"class":238},[228,34850,30893],{"class":2077},[228,34852,796],{"class":238},[228,34854,30898],{"class":2077},[228,34856,30901],{"class":238},[228,34858,34859,34861,34863],{"class":230,"line":1334},[228,34860,30916],{"class":234},[228,34862,30919],{"class":287},[228,34864,30922],{"class":238},[228,34866,34867,34869,34872,34874,34876,34878],{"class":230,"line":1425},[228,34868,30932],{"class":287},[228,34870,34871],{"class":238},"(AlexNet,",[228,34873,30938],{"class":287},[228,34875,30941],{"class":238},[228,34877,30944],{"class":287},[228,34879,2090],{"class":238},[228,34881,34882,34884,34887,34889],{"class":230,"line":1431},[228,34883,30960],{"class":287},[228,34885,34886],{"class":238},".ReLu",[228,34888,284],{"class":234},[228,34890,34891],{"class":238},"nn.ReLU()\n",[228,34893,34894,34896,34898,34900,34902,34904,34906,34908,34910,34912,34914,34916,34918,34920,34922,34924,34926,34928,34930,34932],{"class":230,"line":1443},[228,34895,30960],{"class":287},[228,34897,30963],{"class":238},[228,34899,284],{"class":234},[228,34901,30968],{"class":238},[228,34903,30971],{"class":5331},[228,34905,284],{"class":234},[228,34907,456],{"class":287},[228,34909,616],{"class":238},[228,34911,30980],{"class":5331},[228,34913,284],{"class":234},[228,34915,448],{"class":287},[228,34917,616],{"class":238},[228,34919,30989],{"class":5331},[228,34921,284],{"class":234},[228,34923,710],{"class":287},[228,34925,616],{"class":238},[228,34927,31044],{"class":5331},[228,34929,284],{"class":234},[228,34931,531],{"class":287},[228,34933,245],{"class":238},[228,34935,34936,34938,34940,34942,34945,34947,34949,34951,34953,34955,34957,34959],{"class":230,"line":1726},[228,34937,30960],{"class":287},[228,34939,31028],{"class":238},[228,34941,284],{"class":234},[228,34943,34944],{"class":238},"nn.MaxPool2d(",[228,34946,30989],{"class":5331},[228,34948,284],{"class":234},[228,34950,310],{"class":287},[228,34952,616],{"class":238},[228,34954,31044],{"class":5331},[228,34956,284],{"class":234},[228,34958,316],{"class":287},[228,34960,245],{"class":238},[228,34962,34963,34965,34967,34969,34971,34973,34975,34977,34979,34981,34983,34986,34988,34990,34992,34994,34996,34998,35000,35002],{"class":230,"line":1731},[228,34964,30960],{"class":287},[228,34966,31057],{"class":238},[228,34968,284],{"class":234},[228,34970,30968],{"class":238},[228,34972,30971],{"class":5331},[228,34974,284],{"class":234},[228,34976,448],{"class":287},[228,34978,616],{"class":238},[228,34980,30980],{"class":5331},[228,34982,284],{"class":234},[228,34984,34985],{"class":287},"256",[228,34987,616],{"class":238},[228,34989,30989],{"class":5331},[228,34991,284],{"class":234},[228,34993,557],{"class":287},[228,34995,616],{"class":238},[228,34997,30998],{"class":5331},[228,34999,284],{"class":234},[228,35001,316],{"class":287},[228,35003,245],{"class":238},[228,35005,35006,35008,35010,35012,35014,35016,35018,35020,35022,35024,35026,35028],{"class":230,"line":1737},[228,35007,30960],{"class":287},[228,35009,31092],{"class":238},[228,35011,284],{"class":234},[228,35013,34944],{"class":238},[228,35015,30989],{"class":5331},[228,35017,284],{"class":234},[228,35019,310],{"class":287},[228,35021,616],{"class":238},[228,35023,31044],{"class":5331},[228,35025,284],{"class":234},[228,35027,316],{"class":287},[228,35029,245],{"class":238},[228,35031,35032,35034,35037,35039,35041,35043,35045,35047,35049,35051,35053,35056,35058,35060,35062,35064,35066,35068,35070,35072],{"class":230,"line":1742},[228,35033,30960],{"class":287},[228,35035,35036],{"class":238},".c5",[228,35038,284],{"class":234},[228,35040,30968],{"class":238},[228,35042,30971],{"class":5331},[228,35044,284],{"class":234},[228,35046,34985],{"class":287},[228,35048,616],{"class":238},[228,35050,30980],{"class":5331},[228,35052,284],{"class":234},[228,35054,35055],{"class":287},"384",[228,35057,616],{"class":238},[228,35059,30989],{"class":5331},[228,35061,284],{"class":234},[228,35063,310],{"class":287},[228,35065,616],{"class":238},[228,35067,30998],{"class":5331},[228,35069,284],{"class":234},[228,35071,456],{"class":287},[228,35073,245],{"class":238},[228,35075,35076,35078,35081,35083,35085,35087,35089,35091,35093,35095,35097,35099,35101,35103,35105,35107,35109,35111,35113,35115],{"class":230,"line":1756},[228,35077,30960],{"class":287},[228,35079,35080],{"class":238},".c6",[228,35082,284],{"class":234},[228,35084,30968],{"class":238},[228,35086,30971],{"class":5331},[228,35088,284],{"class":234},[228,35090,35055],{"class":287},[228,35092,616],{"class":238},[228,35094,30980],{"class":5331},[228,35096,284],{"class":234},[228,35098,35055],{"class":287},[228,35100,616],{"class":238},[228,35102,30989],{"class":5331},[228,35104,284],{"class":234},[228,35106,310],{"class":287},[228,35108,616],{"class":238},[228,35110,30998],{"class":5331},[228,35112,284],{"class":234},[228,35114,456],{"class":287},[228,35116,245],{"class":238},[228,35118,35119,35121,35124,35126,35128,35130,35132,35134,35136,35138,35140,35142,35144,35146,35148,35150,35152,35154,35156,35158],{"class":230,"line":1761},[228,35120,30960],{"class":287},[228,35122,35123],{"class":238},".c7",[228,35125,284],{"class":234},[228,35127,30968],{"class":238},[228,35129,30971],{"class":5331},[228,35131,284],{"class":234},[228,35133,35055],{"class":287},[228,35135,616],{"class":238},[228,35137,30980],{"class":5331},[228,35139,284],{"class":234},[228,35141,34985],{"class":287},[228,35143,616],{"class":238},[228,35145,30989],{"class":5331},[228,35147,284],{"class":234},[228,35149,310],{"class":287},[228,35151,616],{"class":238},[228,35153,30998],{"class":5331},[228,35155,284],{"class":234},[228,35157,456],{"class":287},[228,35159,245],{"class":238},[228,35161,35162,35164,35167,35169,35171,35173,35175,35177,35179,35181,35183,35185],{"class":230,"line":1767},[228,35163,30960],{"class":287},[228,35165,35166],{"class":238},".s8",[228,35168,284],{"class":234},[228,35170,34944],{"class":238},[228,35172,30989],{"class":5331},[228,35174,284],{"class":234},[228,35176,310],{"class":287},[228,35178,616],{"class":238},[228,35180,31044],{"class":5331},[228,35182,284],{"class":234},[228,35184,316],{"class":287},[228,35186,245],{"class":238},[228,35188,35189],{"class":230,"line":1788},[228,35190,31117],{"class":297},[228,35192,35193,35195,35197,35199],{"class":230,"line":1793},[228,35194,30960],{"class":287},[228,35196,31124],{"class":238},[228,35198,284],{"class":234},[228,35200,31129],{"class":238},[228,35202,35203],{"class":230,"line":1807},[228,35204,35205],{"class":297},"       # 定义全连接层\n",[228,35207,35208,35210,35213,35215,35217,35219,35221,35223,35225,35227,35229,35232],{"class":230,"line":1812},[228,35209,30960],{"class":287},[228,35211,35212],{"class":238},".f1",[228,35214,284],{"class":234},[228,35216,31146],{"class":238},[228,35218,582],{"class":287},[228,35220,693],{"class":234},[228,35222,582],{"class":287},[228,35224,693],{"class":234},[228,35226,34985],{"class":287},[228,35228,616],{"class":238},[228,35230,35231],{"class":287},"4096",[228,35233,245],{"class":238},[228,35235,35236,35238,35241,35243,35245,35247,35249,35251],{"class":230,"line":1841},[228,35237,30960],{"class":287},[228,35239,35240],{"class":238},".f2",[228,35242,284],{"class":234},[228,35244,31146],{"class":238},[228,35246,35231],{"class":287},[228,35248,616],{"class":238},[228,35250,35231],{"class":287},[228,35252,245],{"class":238},[228,35254,35255,35257,35260,35262,35264,35266,35268,35270],{"class":230,"line":1846},[228,35256,30960],{"class":287},[228,35258,35259],{"class":238},".f3",[228,35261,284],{"class":234},[228,35263,31146],{"class":238},[228,35265,35231],{"class":287},[228,35267,616],{"class":238},[228,35269,684],{"class":287},[228,35271,245],{"class":238},[228,35273,35274],{"class":230,"line":1863},[228,35275,2514],{"emptyLinePlaceholder":157},[228,35277,35278],{"class":230,"line":1868},[228,35279,35280],{"class":297},"    # 定义前向传播\n",[228,35282,35283,35285,35287],{"class":230,"line":1873},[228,35284,30916],{"class":234},[228,35286,31208],{"class":2077},[228,35288,31211],{"class":238},[228,35290,35291,35293,35295,35297,35300,35302],{"class":230,"line":1878},[228,35292,31216],{"class":238},[228,35294,284],{"class":234},[228,35296,30938],{"class":287},[228,35298,35299],{"class":238},".ReLu(",[228,35301,30938],{"class":287},[228,35303,31228],{"class":238},[228,35305,35306,35308,35310,35312],{"class":230,"line":1892},[228,35307,31216],{"class":238},[228,35309,284],{"class":234},[228,35311,30938],{"class":287},[228,35313,31239],{"class":238},[228,35315,35316,35318,35320,35322,35324,35326],{"class":230,"line":1897},[228,35317,31216],{"class":238},[228,35319,284],{"class":234},[228,35321,30938],{"class":287},[228,35323,35299],{"class":238},[228,35325,30938],{"class":287},[228,35327,31254],{"class":238},[228,35329,35330,35332,35334,35336],{"class":230,"line":2691},[228,35331,31216],{"class":238},[228,35333,284],{"class":234},[228,35335,30938],{"class":287},[228,35337,31265],{"class":238},[228,35339,35340,35342,35344,35346,35348,35350],{"class":230,"line":2705},[228,35341,31216],{"class":238},[228,35343,284],{"class":234},[228,35345,30938],{"class":287},[228,35347,35299],{"class":238},[228,35349,30938],{"class":287},[228,35351,35352],{"class":238},".c5(x))\n",[228,35354,35355,35357,35359,35361,35363,35365],{"class":230,"line":2713},[228,35356,31216],{"class":238},[228,35358,284],{"class":234},[228,35360,30938],{"class":287},[228,35362,35299],{"class":238},[228,35364,30938],{"class":287},[228,35366,35367],{"class":238},".c6(x))\n",[228,35369,35370,35372,35374,35376,35378,35380],{"class":230,"line":2718},[228,35371,31216],{"class":238},[228,35373,284],{"class":234},[228,35375,30938],{"class":287},[228,35377,35299],{"class":238},[228,35379,30938],{"class":287},[228,35381,35382],{"class":238},".c7(x))\n",[228,35384,35385,35387,35389,35391],{"class":230,"line":2724},[228,35386,31216],{"class":238},[228,35388,284],{"class":234},[228,35390,30938],{"class":287},[228,35392,35393],{"class":238},".s8(x)\n",[228,35395,35396],{"class":230,"line":2730},[228,35397,2514],{"emptyLinePlaceholder":157},[228,35399,35400],{"class":230,"line":2735},[228,35401,35402],{"class":297},"        # 展平加线性全连接层\n",[228,35404,35405,35407,35409,35411],{"class":230,"line":8063},[228,35406,31216],{"class":238},[228,35408,284],{"class":234},[228,35410,30938],{"class":287},[228,35412,31276],{"class":238},[228,35414,35415,35417,35419,35421,35423,35425],{"class":230,"line":8087},[228,35416,31216],{"class":238},[228,35418,284],{"class":234},[228,35420,30938],{"class":287},[228,35422,35299],{"class":238},[228,35424,30938],{"class":287},[228,35426,35427],{"class":238},".f1(x))\n",[228,35429,35430],{"class":230,"line":8092},[228,35431,35432],{"class":297},"        # 还需要dropout对神经元随机进行失活\n",[228,35434,35435,35437,35439,35442,35445],{"class":230,"line":8098},[228,35436,31216],{"class":238},[228,35438,284],{"class":234},[228,35440,35441],{"class":238},"F.dropout(x,",[228,35443,35444],{"class":287},"0.5",[228,35446,245],{"class":238},[228,35448,35449,35451,35453,35455,35457,35459],{"class":230,"line":8125},[228,35450,31216],{"class":238},[228,35452,284],{"class":234},[228,35454,30938],{"class":287},[228,35456,35299],{"class":238},[228,35458,30938],{"class":287},[228,35460,35461],{"class":238},".f2(x))\n",[228,35463,35464,35466,35468,35470,35472],{"class":230,"line":8130},[228,35465,31216],{"class":238},[228,35467,284],{"class":234},[228,35469,35441],{"class":238},[228,35471,35444],{"class":287},[228,35473,245],{"class":238},[228,35475,35476],{"class":230,"line":8136},[228,35477,35478],{"class":297},"        # 直接输出\n",[228,35480,35481,35483,35485,35487],{"class":230,"line":8148},[228,35482,31216],{"class":238},[228,35484,284],{"class":234},[228,35486,30938],{"class":287},[228,35488,35489],{"class":238},".f3(x)\n",[228,35491,35492],{"class":230,"line":8160},[228,35493,35494],{"class":297},"        # 前向传播输出\n",[228,35496,35497,35499],{"class":230,"line":8172},[228,35498,14867],{"class":234},[228,35500,31324],{"class":238},[228,35502,35503],{"class":230,"line":9831},[228,35504,35505],{"class":297},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[228,35507,35508,35510,35512,35514,35516],{"class":230,"line":9856},[228,35509,1645],{"class":234},[228,35511,31335],{"class":287},[228,35513,3063],{"class":234},[228,35515,31340],{"class":343},[228,35517,3853],{"class":238},[228,35519,35520,35522,35524,35526,35528,35530,35532,35534,35536],{"class":230,"line":9879},[228,35521,31352],{"class":238},[228,35523,284],{"class":234},[228,35525,30566],{"class":238},[228,35527,31359],{"class":343},[228,35529,1818],{"class":234},[228,35531,31364],{"class":238},[228,35533,1815],{"class":234},[228,35535,30591],{"class":343},[228,35537,245],{"class":238},[228,35539,35540],{"class":230,"line":9903},[228,35541,35542],{"class":297},"    # 模型实例化，然后将实例化的模型放到设备中\n",[228,35544,35545,35547,35549],{"class":230,"line":9908},[228,35546,31404],{"class":238},[228,35548,284],{"class":234},[228,35550,35551],{"class":238},"AlexNet().to(device)\n",[228,35553,35554,35556,35558,35560,35562,35565,35567,35569],{"class":230,"line":9913},[228,35555,31414],{"class":287},[228,35557,31417],{"class":238},[228,35559,456],{"class":287},[228,35561,616],{"class":238},[228,35563,35564],{"class":287},"227",[228,35566,616],{"class":238},[228,35568,35564],{"class":287},[228,35570,31430],{"class":238},[183,35572,35573],{"start":142},[186,35574,31443],{},[220,35576,35578],{"className":30493,"code":35577,"language":30495,"meta":141,"style":141},"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",[30,35579,35580,35586,35592,35602,35608,35618,35628,35638,35648,35658,35662,35673,35683,35687,35691,35695,35703,35715,35725,35741,35751,35783,35797,35807,35817,35821,35831,35845,35855,35865,35875,35881,35885,35889,35893,35897,35901,35909,35929,35933,35937,35941,35945,35949,35965,35969,35973,35981,35985,35989,35997,36001,36005,36009,36017,36021,36025,36029,36033,36041,36045,36053,36057,36065,36069,36077,36081,36089,36093,36097,36105,36109,36113,36117,36129,36153,36167,36171,36175,36179,36187,36191,36199,36203,36211,36215,36223,36227,36235,36239,36247,36251,36263,36267,36275,36279,36287,36291,36295,36299,36303,36311,36315,36331,36335,36343,36347,36351,36355,36359,36363,36367,36371,36387,36391,36403,36407,36419,36423,36435,36439,36447,36451,36459,36463,36467,36472,36478,36482,36491,36495,36512,36516,36525,36529,36547,36560,36565,36578,36582,36586,36594,36598,36602,36610,36614,36622,36626,36634,36638,36642,36684,36726,36730,36734,36750,36754,36770,36774,36778,36786,36790,36794,36806,36844,36849,36854,36863,36867,36881,36891,36897,36903,36909,36915,36919,36923,36929,36933,36937,36945,36949,36967,36971,36975,36979,36995,36999,37003,37007,37011,37015,37035,37055,37059,37063,37067,37075,37083,37087,37103,37123,37143,37147,37151,37159,37167,37171,37175,37179,37191,37195,37205,37213,37230],{"__ignoreMap":141},[228,35581,35582,35584],{"class":230,"line":231},[228,35583,30507],{"class":234},[228,35585,31937],{"class":238},[228,35587,35588,35590],{"class":230,"line":142},[228,35589,30507],{"class":234},[228,35591,31944],{"class":238},[228,35593,35594,35596,35598,35600],{"class":230,"line":1293},[228,35595,30507],{"class":234},[228,35597,31955],{"class":238},[228,35599,31498],{"class":234},[228,35601,31960],{"class":238},[228,35603,35604,35606],{"class":230,"line":1308},[228,35605,30507],{"class":234},[228,35607,30510],{"class":238},[228,35609,35610,35612,35614,35616],{"class":230,"line":1314},[228,35611,30852],{"class":234},[228,35613,31530],{"class":238},[228,35615,30507],{"class":234},[228,35617,31977],{"class":238},[228,35619,35620,35622,35624,35626],{"class":230,"line":1328},[228,35621,30852],{"class":234},[228,35623,31483],{"class":238},[228,35625,30507],{"class":234},[228,35627,31488],{"class":238},[228,35629,35630,35632,35634,35636],{"class":230,"line":1334},[228,35631,30852],{"class":234},[228,35633,31513],{"class":238},[228,35635,30507],{"class":234},[228,35637,31518],{"class":238},[228,35639,35640,35642,35644,35646],{"class":230,"line":1425},[228,35641,30507],{"class":234},[228,35643,31530],{"class":238},[228,35645,31498],{"class":234},[228,35647,31535],{"class":238},[228,35649,35650,35652,35654,35656],{"class":230,"line":1431},[228,35651,30507],{"class":234},[228,35653,31547],{"class":238},[228,35655,31498],{"class":234},[228,35657,31552],{"class":238},[228,35659,35660],{"class":230,"line":1443},[228,35661,32022],{"class":297},[228,35663,35664,35666,35668,35670],{"class":230,"line":1726},[228,35665,30852],{"class":234},[228,35667,32029],{"class":238},[228,35669,30507],{"class":234},[228,35671,35672],{"class":238}," AlexNet\n",[228,35674,35675,35677,35679,35681],{"class":230,"line":1731},[228,35676,30852],{"class":234},[228,35678,30855],{"class":238},[228,35680,30507],{"class":234},[228,35682,30860],{"class":238},[228,35684,35685],{"class":230,"line":1737},[228,35686,2514],{"emptyLinePlaceholder":157},[228,35688,35689],{"class":230,"line":1742},[228,35690,2514],{"emptyLinePlaceholder":157},[228,35692,35693],{"class":230,"line":1756},[228,35694,32057],{"class":297},[228,35696,35697,35699,35701],{"class":230,"line":1761},[228,35698,32062],{"class":234},[228,35700,32065],{"class":2077},[228,35702,32068],{"class":238},[228,35704,35705,35707,35709,35711,35713],{"class":230,"line":1767},[228,35706,32073],{"class":238},[228,35708,284],{"class":234},[228,35710,31570],{"class":238},[228,35712,31578],{"class":343},[228,35714,31581],{"class":238},[228,35716,35717,35719,35721,35723],{"class":230,"line":1788},[228,35718,32086],{"class":5331},[228,35720,284],{"class":234},[228,35722,31591],{"class":287},[228,35724,31581],{"class":238},[228,35726,35727,35729,35731,35733,35735,35737,35739],{"class":230,"line":1793},[228,35728,32097],{"class":5331},[228,35730,284],{"class":234},[228,35732,31608],{"class":238},[228,35734,31611],{"class":5331},[228,35736,284],{"class":234},[228,35738,35564],{"class":287},[228,35740,31619],{"class":238},[228,35742,35743,35745,35747,35749],{"class":230,"line":1807},[228,35744,32114],{"class":5331},[228,35746,284],{"class":234},[228,35748,31591],{"class":287},[228,35750,245],{"class":238},[228,35752,35753,35755,35757,35759,35761,35763,35765,35767,35769,35771,35773,35775,35777,35779,35781],{"class":230,"line":1812},[228,35754,32125],{"class":238},[228,35756,284],{"class":234},[228,35758,32130],{"class":238},[228,35760,32133],{"class":287},[228,35762,239],{"class":238},[228,35764,32138],{"class":287},[228,35766,693],{"class":234},[228,35768,7473],{"class":287},[228,35770,32145],{"class":238},[228,35772,32133],{"class":287},[228,35774,239],{"class":238},[228,35776,32152],{"class":287},[228,35778,693],{"class":234},[228,35780,7473],{"class":287},[228,35782,32159],{"class":238},[228,35784,35785,35787,35789,35791,35793,35795],{"class":230,"line":1841},[228,35786,32164],{"class":238},[228,35788,284],{"class":234},[228,35790,32169],{"class":238},[228,35792,31652],{"class":5331},[228,35794,284],{"class":234},[228,35796,31657],{"class":238},[228,35798,35799,35801,35803,35805],{"class":230,"line":1846},[228,35800,32180],{"class":5331},[228,35802,284],{"class":234},[228,35804,32185],{"class":287},[228,35806,31581],{"class":238},[228,35808,35809,35811,35813,35815],{"class":230,"line":1863},[228,35810,32192],{"class":5331},[228,35812,284],{"class":234},[228,35814,31591],{"class":287},[228,35816,31581],{"class":238},[228,35818,35819],{"class":230,"line":1868},[228,35820,32203],{"class":297},[228,35822,35823,35825,35827,35829],{"class":230,"line":1873},[228,35824,32208],{"class":5331},[228,35826,284],{"class":234},[228,35828,633],{"class":287},[228,35830,245],{"class":238},[228,35832,35833,35835,35837,35839,35841,35843],{"class":230,"line":1878},[228,35834,32219],{"class":238},[228,35836,284],{"class":234},[228,35838,31649],{"class":238},[228,35840,31652],{"class":5331},[228,35842,284],{"class":234},[228,35844,32230],{"class":238},[228,35846,35847,35849,35851,35853],{"class":230,"line":1892},[228,35848,32235],{"class":5331},[228,35850,284],{"class":234},[228,35852,32185],{"class":287},[228,35854,31581],{"class":238},[228,35856,35857,35859,35861,35863],{"class":230,"line":1897},[228,35858,32246],{"class":5331},[228,35860,284],{"class":234},[228,35862,31591],{"class":287},[228,35864,31581],{"class":238},[228,35866,35867,35869,35871,35873],{"class":230,"line":2691},[228,35868,32257],{"class":5331},[228,35870,284],{"class":234},[228,35872,633],{"class":287},[228,35874,245],{"class":238},[228,35876,35877,35879],{"class":230,"line":2705},[228,35878,4204],{"class":234},[228,35880,32270],{"class":238},[228,35882,35883],{"class":230,"line":2713},[228,35884,2514],{"emptyLinePlaceholder":157},[228,35886,35887],{"class":230,"line":2718},[228,35888,32279],{"class":297},[228,35890,35891],{"class":230,"line":2724},[228,35892,32284],{"class":297},[228,35894,35895],{"class":230,"line":2730},[228,35896,2514],{"emptyLinePlaceholder":157},[228,35898,35899],{"class":230,"line":2735},[228,35900,32293],{"class":297},[228,35902,35903,35905,35907],{"class":230,"line":8063},[228,35904,32062],{"class":234},[228,35906,32300],{"class":2077},[228,35908,32303],{"class":238},[228,35910,35911,35913,35915,35917,35919,35921,35923,35925,35927],{"class":230,"line":8087},[228,35912,31352],{"class":238},[228,35914,284],{"class":234},[228,35916,30566],{"class":238},[228,35918,31359],{"class":343},[228,35920,1818],{"class":234},[228,35922,31364],{"class":238},[228,35924,1815],{"class":234},[228,35926,32322],{"class":343},[228,35928,245],{"class":238},[228,35930,35931],{"class":230,"line":8092},[228,35932,2514],{"emptyLinePlaceholder":157},[228,35934,35935],{"class":230,"line":8098},[228,35936,2514],{"emptyLinePlaceholder":157},[228,35938,35939],{"class":230,"line":8125},[228,35940,32337],{"class":297},[228,35942,35943],{"class":230,"line":8130},[228,35944,32342],{"class":297},[228,35946,35947],{"class":230,"line":8136},[228,35948,32347],{"class":297},[228,35950,35951,35953,35955,35957,35959,35961,35963],{"class":230,"line":8148},[228,35952,32352],{"class":238},[228,35954,284],{"class":234},[228,35956,32357],{"class":238},[228,35958,32360],{"class":5331},[228,35960,284],{"class":234},[228,35962,32365],{"class":287},[228,35964,245],{"class":238},[228,35966,35967],{"class":230,"line":8160},[228,35968,2514],{"emptyLinePlaceholder":157},[228,35970,35971],{"class":230,"line":8172},[228,35972,32376],{"class":297},[228,35974,35975,35977,35979],{"class":230,"line":9831},[228,35976,32381],{"class":238},[228,35978,284],{"class":234},[228,35980,32386],{"class":238},[228,35982,35983],{"class":230,"line":9856},[228,35984,2514],{"emptyLinePlaceholder":157},[228,35986,35987],{"class":230,"line":9879},[228,35988,32395],{"class":297},[228,35990,35991,35993,35995],{"class":230,"line":9903},[228,35992,31404],{"class":238},[228,35994,284],{"class":234},[228,35996,32404],{"class":238},[228,35998,35999],{"class":230,"line":9908},[228,36000,32409],{"class":297},[228,36002,36003],{"class":230,"line":9913},[228,36004,32414],{"class":297},[228,36006,36007],{"class":230,"line":9918},[228,36008,32419],{"class":297},[228,36010,36011,36013,36015],{"class":230,"line":9927},[228,36012,32424],{"class":238},[228,36014,284],{"class":234},[228,36016,32429],{"class":238},[228,36018,36019],{"class":230,"line":9932},[228,36020,2514],{"emptyLinePlaceholder":157},[228,36022,36023],{"class":230,"line":9938},[228,36024,2514],{"emptyLinePlaceholder":157},[228,36026,36027],{"class":230,"line":9959},[228,36028,32442],{"class":297},[228,36030,36031],{"class":230,"line":9965},[228,36032,32447],{"class":297},[228,36034,36035,36037,36039],{"class":230,"line":9979},[228,36036,32452],{"class":238},[228,36038,284],{"class":234},[228,36040,32457],{"class":287},[228,36042,36043],{"class":230,"line":9985},[228,36044,32462],{"class":297},[228,36046,36047,36049,36051],{"class":230,"line":10012},[228,36048,32467],{"class":238},[228,36050,284],{"class":234},[228,36052,32472],{"class":238},[228,36054,36055],{"class":230,"line":10021},[228,36056,32477],{"class":297},[228,36058,36059,36061,36063],{"class":230,"line":10027},[228,36060,32482],{"class":238},[228,36062,284],{"class":234},[228,36064,32472],{"class":238},[228,36066,36067],{"class":230,"line":10035},[228,36068,32491],{"class":297},[228,36070,36071,36073,36075],{"class":230,"line":10040},[228,36072,32496],{"class":238},[228,36074,284],{"class":234},[228,36076,32472],{"class":238},[228,36078,36079],{"class":230,"line":16719},[228,36080,32505],{"class":297},[228,36082,36083,36085,36087],{"class":230,"line":16725},[228,36084,32510],{"class":238},[228,36086,284],{"class":234},[228,36088,32472],{"class":238},[228,36090,36091],{"class":230,"line":16748},[228,36092,2514],{"emptyLinePlaceholder":157},[228,36094,36095],{"class":230,"line":16754},[228,36096,32523],{"class":297},[228,36098,36099,36101,36103],{"class":230,"line":16777},[228,36100,32528],{"class":238},[228,36102,284],{"class":234},[228,36104,32533],{"class":238},[228,36106,36107],{"class":230,"line":16791},[228,36108,2514],{"emptyLinePlaceholder":157},[228,36110,36111],{"class":230,"line":16811},[228,36112,2514],{"emptyLinePlaceholder":157},[228,36114,36115],{"class":230,"line":16817},[228,36116,32546],{"class":297},[228,36118,36119,36121,36123,36125,36127],{"class":230,"line":16828},[228,36120,3315],{"class":234},[228,36122,32553],{"class":238},[228,36124,26159],{"class":234},[228,36126,32558],{"class":287},[228,36128,32561],{"class":238},[228,36130,36131,36133,36135,36137,36139,36141,36143,36145,36147,36149,36151],{"class":230,"line":16851},[228,36132,32566],{"class":287},[228,36134,239],{"class":238},[228,36136,32571],{"class":343},[228,36138,32574],{"class":287},[228,36140,822],{"class":343},[228,36142,32574],{"class":287},[228,36144,489],{"class":343},[228,36146,32583],{"class":238},[228,36148,770],{"class":234},[228,36150,456],{"class":287},[228,36152,30612],{"class":238},[228,36154,36155,36157,36159,36161,36163,36165],{"class":230,"line":16873},[228,36156,32566],{"class":287},[228,36158,239],{"class":238},[228,36160,32598],{"class":343},[228,36162,693],{"class":234},[228,36164,684],{"class":287},[228,36166,245],{"class":238},[228,36168,36169],{"class":230,"line":16878},[228,36170,2514],{"emptyLinePlaceholder":157},[228,36172,36173],{"class":230,"line":16884},[228,36174,32613],{"class":297},[228,36176,36177],{"class":230,"line":16898},[228,36178,32618],{"class":297},[228,36180,36181,36183,36185],{"class":230,"line":16911},[228,36182,32623],{"class":238},[228,36184,284],{"class":234},[228,36186,32457],{"class":287},[228,36188,36189],{"class":230,"line":16916},[228,36190,32632],{"class":297},[228,36192,36193,36195,36197],{"class":230,"line":16930},[228,36194,32637],{"class":238},[228,36196,284],{"class":234},[228,36198,3199],{"class":287},[228,36200,36201],{"class":230,"line":16935},[228,36202,32646],{"class":297},[228,36204,36205,36207,36209],{"class":230,"line":16941},[228,36206,32651],{"class":238},[228,36208,284],{"class":234},[228,36210,32457],{"class":287},[228,36212,36213],{"class":230,"line":16946},[228,36214,32660],{"class":297},[228,36216,36217,36219,36221],{"class":230,"line":16960},[228,36218,32665],{"class":238},[228,36220,284],{"class":234},[228,36222,3199],{"class":287},[228,36224,36225],{"class":230,"line":16965},[228,36226,32674],{"class":297},[228,36228,36229,36231,36233],{"class":230,"line":16970},[228,36230,32679],{"class":238},[228,36232,284],{"class":234},[228,36234,3199],{"class":287},[228,36236,36237],{"class":230,"line":16984},[228,36238,32688],{"class":297},[228,36240,36241,36243,36245],{"class":230,"line":16996},[228,36242,32693],{"class":238},[228,36244,284],{"class":234},[228,36246,3199],{"class":287},[228,36248,36249],{"class":230,"line":17001},[228,36250,32702],{"class":297},[228,36252,36253,36255,36257,36259,36261],{"class":230,"line":17014},[228,36254,3517],{"class":234},[228,36256,31716],{"class":238},[228,36258,26159],{"class":234},[228,36260,31721],{"class":287},[228,36262,32715],{"class":238},[228,36264,36265],{"class":230,"line":17019},[228,36266,32720],{"class":297},[228,36268,36269,36271,36273],{"class":230,"line":17024},[228,36270,32725],{"class":238},[228,36272,284],{"class":234},[228,36274,32730],{"class":238},[228,36276,36277],{"class":230,"line":17029},[228,36278,32735],{"class":297},[228,36280,36281,36283,36285],{"class":230,"line":17042},[228,36282,32740],{"class":238},[228,36284,284],{"class":234},[228,36286,32745],{"class":238},[228,36288,36289],{"class":230,"line":17047},[228,36290,32751],{"class":297},[228,36292,36293],{"class":230,"line":32748},[228,36294,32757],{"class":238},[228,36296,36297],{"class":230,"line":32754},[228,36298,32763],{"class":297},[228,36300,36301],{"class":230,"line":32760},[228,36302,32769],{"class":297},[228,36304,36305,36307,36309],{"class":230,"line":32766},[228,36306,32775],{"class":238},[228,36308,284],{"class":234},[228,36310,32780],{"class":238},[228,36312,36313],{"class":230,"line":32772},[228,36314,32786],{"class":297},[228,36316,36317,36319,36321,36323,36325,36327,36329],{"class":230,"line":32783},[228,36318,32792],{"class":238},[228,36320,284],{"class":234},[228,36322,32797],{"class":238},[228,36324,32800],{"class":5331},[228,36326,284],{"class":234},[228,36328,456],{"class":287},[228,36330,245],{"class":238},[228,36332,36333],{"class":230,"line":32789},[228,36334,32812],{"class":297},[228,36336,36337,36339,36341],{"class":230,"line":32809},[228,36338,32818],{"class":238},[228,36340,284],{"class":234},[228,36342,32823],{"class":238},[228,36344,36345],{"class":230,"line":32815},[228,36346,32829],{"class":297},[228,36348,36349],{"class":230,"line":32826},[228,36350,32835],{"class":238},[228,36352,36353],{"class":230,"line":32832},[228,36354,32841],{"class":297},[228,36356,36357],{"class":230,"line":32838},[228,36358,32847],{"class":238},[228,36360,36361],{"class":230,"line":32844},[228,36362,32853],{"class":297},[228,36364,36365],{"class":230,"line":32850},[228,36366,32859],{"class":238},[228,36368,36369],{"class":230,"line":32856},[228,36370,32865],{"class":297},[228,36372,36373,36375,36377,36379,36381,36383,36385],{"class":230,"line":32862},[228,36374,32871],{"class":238},[228,36376,9592],{"class":234},[228,36378,32876],{"class":238},[228,36380,693],{"class":234},[228,36382,32881],{"class":238},[228,36384,430],{"class":287},[228,36386,245],{"class":238},[228,36388,36389],{"class":230,"line":32868},[228,36390,32891],{"class":297},[228,36392,36393,36395,36397,36399,36401],{"class":230,"line":32888},[228,36394,32897],{"class":238},[228,36396,9592],{"class":234},[228,36398,32902],{"class":238},[228,36400,3063],{"class":234},[228,36402,32907],{"class":238},[228,36404,36405],{"class":230,"line":32894},[228,36406,32913],{"class":297},[228,36408,36409,36411,36413,36415,36417],{"class":230,"line":32910},[228,36410,32919],{"class":238},[228,36412,9592],{"class":234},[228,36414,32881],{"class":238},[228,36416,430],{"class":287},[228,36418,245],{"class":238},[228,36420,36421],{"class":230,"line":32916},[228,36422,32933],{"class":297},[228,36424,36425,36427,36429,36431,36433],{"class":230,"line":32930},[228,36426,3517],{"class":234},[228,36428,32941],{"class":238},[228,36430,26159],{"class":234},[228,36432,31721],{"class":287},[228,36434,32948],{"class":238},[228,36436,36437],{"class":230,"line":32936},[228,36438,32954],{"class":297},[228,36440,36441,36443,36445],{"class":230,"line":32951},[228,36442,32725],{"class":238},[228,36444,284],{"class":234},[228,36446,32730],{"class":238},[228,36448,36449],{"class":230,"line":32957},[228,36450,32969],{"class":297},[228,36452,36453,36455,36457],{"class":230,"line":32966},[228,36454,32740],{"class":238},[228,36456,284],{"class":234},[228,36458,32745],{"class":238},[228,36460,36461],{"class":230,"line":32972},[228,36462,32984],{"class":297},[228,36464,36465],{"class":230,"line":32981},[228,36466,32990],{"class":238},[228,36468,36469],{"class":230,"line":32987},[228,36470,36471],{"class":297},"            # 验证时不计算梯度以节省内存\u002F计算\n",[228,36473,36474,36476],{"class":230,"line":32993},[228,36475,32996],{"class":234},[228,36477,32999],{"class":238},[228,36479,36480],{"class":230,"line":33002},[228,36481,33005],{"class":297},[228,36483,36484,36487,36489],{"class":230,"line":33008},[228,36485,36486],{"class":238},"                output",[228,36488,284],{"class":234},[228,36490,32780],{"class":238},[228,36492,36493],{"class":230,"line":33019},[228,36494,33022],{"class":297},[228,36496,36497,36500,36502,36504,36506,36508,36510],{"class":230,"line":33025},[228,36498,36499],{"class":238},"                pre_lab",[228,36501,284],{"class":234},[228,36503,32797],{"class":238},[228,36505,32800],{"class":5331},[228,36507,284],{"class":234},[228,36509,456],{"class":287},[228,36511,245],{"class":238},[228,36513,36514],{"class":230,"line":33044},[228,36515,33047],{"class":297},[228,36517,36518,36521,36523],{"class":230,"line":33050},[228,36519,36520],{"class":238},"                val_batch_loss",[228,36522,284],{"class":234},[228,36524,32823],{"class":238},[228,36526,36527],{"class":230,"line":33061},[228,36528,33064],{"class":297},[228,36530,36531,36534,36536,36539,36541,36543,36545],{"class":230,"line":33067},[228,36532,36533],{"class":238},"                val_loss",[228,36535,9592],{"class":234},[228,36537,36538],{"class":238},"val_batch_loss.item()",[228,36540,693],{"class":234},[228,36542,32881],{"class":238},[228,36544,430],{"class":287},[228,36546,245],{"class":238},[228,36548,36549,36552,36554,36556,36558],{"class":230,"line":33087},[228,36550,36551],{"class":238},"                val_corrects",[228,36553,9592],{"class":234},[228,36555,32902],{"class":238},[228,36557,3063],{"class":234},[228,36559,32907],{"class":238},[228,36561,36562],{"class":230,"line":33103},[228,36563,36564],{"class":297},"            # 当前用于验证的样本数量\n",[228,36566,36567,36570,36572,36574,36576],{"class":230,"line":33109},[228,36568,36569],{"class":238},"            val_num",[228,36571,9592],{"class":234},[228,36573,32881],{"class":238},[228,36575,430],{"class":287},[228,36577,245],{"class":238},[228,36579,36580],{"class":230,"line":33123},[228,36581,33126],{"class":297},[228,36583,36584],{"class":230,"line":33129},[228,36585,33132],{"class":297},[228,36587,36588,36590,36592],{"class":230,"line":33135},[228,36589,33138],{"class":238},[228,36591,822],{"class":234},[228,36593,33143],{"class":238},[228,36595,36596],{"class":230,"line":33146},[228,36597,33149],{"class":297},[228,36599,36600],{"class":230,"line":33152},[228,36601,33155],{"class":297},[228,36603,36604,36606,36608],{"class":230,"line":33158},[228,36605,33161],{"class":238},[228,36607,822],{"class":234},[228,36609,33143],{"class":238},[228,36611,36612],{"class":230,"line":33168},[228,36613,33171],{"class":297},[228,36615,36616,36618,36620],{"class":230,"line":33174},[228,36617,33177],{"class":238},[228,36619,822],{"class":234},[228,36621,33182],{"class":238},[228,36623,36624],{"class":230,"line":33185},[228,36625,33188],{"class":297},[228,36627,36628,36630,36632],{"class":230,"line":33191},[228,36629,33194],{"class":238},[228,36631,822],{"class":234},[228,36633,33182],{"class":238},[228,36635,36636],{"class":230,"line":33201},[228,36637,2514],{"emptyLinePlaceholder":157},[228,36639,36640],{"class":230,"line":33206},[228,36641,33209],{"class":297},[228,36643,36644,36646,36648,36650,36652,36654,36656,36658,36660,36662,36664,36666,36668,36670,36672,36674,36676,36678,36680,36682],{"class":230,"line":33212},[228,36645,32566],{"class":287},[228,36647,239],{"class":238},[228,36649,3706],{"class":343},[228,36651,32574],{"class":287},[228,36653,33223],{"class":343},[228,36655,1134],{"class":287},[228,36657,33228],{"class":234},[228,36659,1184],{"class":287},[228,36661,33233],{"class":343},[228,36663,1134],{"class":287},[228,36665,33228],{"class":234},[228,36667,1184],{"class":287},[228,36669,3706],{"class":343},[228,36671,33244],{"class":238},[228,36673,770],{"class":234},[228,36675,456],{"class":287},[228,36677,33251],{"class":238},[228,36679,770],{"class":234},[228,36681,456],{"class":287},[228,36683,33258],{"class":238},[228,36685,36686,36688,36690,36692,36694,36696,36698,36700,36702,36704,36706,36708,36710,36712,36714,36716,36718,36720,36722,36724],{"class":230,"line":33261},[228,36687,32566],{"class":287},[228,36689,239],{"class":238},[228,36691,3706],{"class":343},[228,36693,32574],{"class":287},[228,36695,33272],{"class":343},[228,36697,1134],{"class":287},[228,36699,33228],{"class":234},[228,36701,1184],{"class":287},[228,36703,33281],{"class":343},[228,36705,1134],{"class":287},[228,36707,33228],{"class":234},[228,36709,1184],{"class":287},[228,36711,3706],{"class":343},[228,36713,33292],{"class":238},[228,36715,770],{"class":234},[228,36717,456],{"class":287},[228,36719,33299],{"class":238},[228,36721,770],{"class":234},[228,36723,456],{"class":287},[228,36725,33258],{"class":238},[228,36727,36728],{"class":230,"line":33308},[228,36729,2514],{"emptyLinePlaceholder":157},[228,36731,36732],{"class":230,"line":33313},[228,36733,33316],{"class":297},[228,36735,36736,36738,36740,36742,36744,36746,36748],{"class":230,"line":33319},[228,36737,2611],{"class":234},[228,36739,33324],{"class":238},[228,36741,770],{"class":234},[228,36743,456],{"class":287},[228,36745,1178],{"class":238},[228,36747,1198],{"class":234},[228,36749,33335],{"class":238},[228,36751,36752],{"class":230,"line":33338},[228,36753,33341],{"class":297},[228,36755,36756,36758,36760,36762,36764,36766,36768],{"class":230,"line":33344},[228,36757,33347],{"class":238},[228,36759,278],{"class":287},[228,36761,284],{"class":234},[228,36763,33354],{"class":238},[228,36765,770],{"class":234},[228,36767,456],{"class":287},[228,36769,33361],{"class":238},[228,36771,36772],{"class":230,"line":33364},[228,36773,33367],{"class":297},[228,36775,36776],{"class":230,"line":33370},[228,36777,33373],{"class":297},[228,36779,36780,36782,36784],{"class":230,"line":33376},[228,36781,33379],{"class":238},[228,36783,284],{"class":234},[228,36785,32429],{"class":238},[228,36787,36788],{"class":230,"line":33386},[228,36789,2514],{"emptyLinePlaceholder":157},[228,36791,36792],{"class":230,"line":33391},[228,36793,33394],{"class":297},[228,36795,36796,36798,36800,36802,36804],{"class":230,"line":33397},[228,36797,33400],{"class":238},[228,36799,284],{"class":234},[228,36801,33405],{"class":238},[228,36803,770],{"class":234},[228,36805,33410],{"class":238},[228,36807,36808,36810,36812,36814,36816,36818,36820,36822,36824,36826,36828,36830,36832,36834,36836,36838,36840,36842],{"class":230,"line":33413},[228,36809,32566],{"class":287},[228,36811,239],{"class":238},[228,36813,33420],{"class":343},[228,36815,1134],{"class":287},[228,36817,33425],{"class":234},[228,36819,1184],{"class":287},[228,36821,782],{"class":343},[228,36823,1134],{"class":287},[228,36825,33425],{"class":234},[228,36827,1184],{"class":287},[228,36829,33438],{"class":343},[228,36831,33441],{"class":238},[228,36833,33444],{"class":234},[228,36835,1145],{"class":287},[228,36837,33449],{"class":238},[228,36839,566],{"class":234},[228,36841,1145],{"class":287},[228,36843,30612],{"class":238},[228,36845,36846],{"class":230,"line":33458},[228,36847,36848],{"class":297},"    # 选择最优参数并保存\n",[228,36850,36851],{"class":230,"line":33464},[228,36852,36853],{"class":297},"    # 保存最佳模型权重字典\n",[228,36855,36856,36859,36861],{"class":230,"line":33470},[228,36857,36858],{"class":238},"    torch.save(best_model_wts,",[228,36860,33482],{"class":343},[228,36862,245],{"class":238},[228,36864,36865],{"class":230,"line":33476},[228,36866,33502],{"class":297},[228,36868,36869,36871,36873,36875,36877,36879],{"class":230,"line":33487},[228,36870,33508],{"class":238},[228,36872,284],{"class":234},[228,36874,33513],{"class":238},[228,36876,33516],{"class":5331},[228,36878,284],{"class":234},[228,36880,1660],{"class":238},[228,36882,36883,36885,36887,36889],{"class":230,"line":33493},[228,36884,33526],{"class":343},[228,36886,1097],{"class":238},[228,36888,33531],{"class":287},[228,36890,33534],{"class":238},[228,36892,36893,36895],{"class":230,"line":33499},[228,36894,33540],{"class":343},[228,36896,33543],{"class":238},[228,36898,36899,36901],{"class":230,"line":33505},[228,36900,33549],{"class":343},[228,36902,33552],{"class":238},[228,36904,36905,36907],{"class":230,"line":33523},[228,36906,33558],{"class":343},[228,36908,33561],{"class":238},[228,36910,36911,36913],{"class":230,"line":33537},[228,36912,33567],{"class":343},[228,36914,33570],{"class":238},[228,36916,36917],{"class":230,"line":33546},[228,36918,33576],{"class":238},[228,36920,36921],{"class":230,"line":33555},[228,36922,33582],{"class":297},[228,36924,36925,36927],{"class":230,"line":33564},[228,36926,4204],{"class":234},[228,36928,33590],{"class":238},[228,36930,36931],{"class":230,"line":33573},[228,36932,2514],{"emptyLinePlaceholder":157},[228,36934,36935],{"class":230,"line":33579},[228,36936,33601],{"class":297},[228,36938,36939,36941,36943],{"class":230,"line":33585},[228,36940,32062],{"class":234},[228,36942,33609],{"class":2077},[228,36944,33612],{"class":238},[228,36946,36947],{"class":230,"line":33593},[228,36948,33618],{"class":297},[228,36950,36951,36953,36955,36957,36959,36961,36963,36965],{"class":230,"line":33598},[228,36952,33624],{"class":238},[228,36954,31808],{"class":5331},[228,36956,284],{"class":234},[228,36958,239],{"class":238},[228,36960,736],{"class":287},[228,36962,616],{"class":238},[228,36964,531],{"class":287},[228,36966,30612],{"class":238},[228,36968,36969],{"class":230,"line":33604},[228,36970,33644],{"class":297},[228,36972,36973],{"class":230,"line":33615},[228,36974,33650],{"class":297},[228,36976,36977],{"class":230,"line":33621},[228,36978,33656],{"class":297},[228,36980,36981,36983,36985,36987,36989,36991,36993],{"class":230,"line":33641},[228,36982,31842],{"class":238},[228,36984,456],{"class":287},[228,36986,616],{"class":238},[228,36988,316],{"class":287},[228,36990,616],{"class":238},[228,36992,456],{"class":287},[228,36994,245],{"class":238},[228,36996,36997],{"class":230,"line":33647},[228,36998,33679],{"class":297},[228,37000,37001],{"class":230,"line":33653},[228,37002,33685],{"class":297},[228,37004,37005],{"class":230,"line":33659},[228,37006,33691],{"class":297},[228,37008,37009],{"class":230,"line":33676},[228,37010,33697],{"class":297},[228,37012,37013],{"class":230,"line":33682},[228,37014,33703],{"class":297},[228,37016,37017,37019,37021,37023,37025,37027,37029,37031,37033],{"class":230,"line":33688},[228,37018,33709],{"class":238},[228,37020,33712],{"class":343},[228,37022,33715],{"class":238},[228,37024,33718],{"class":343},[228,37026,616],{"class":238},[228,37028,33723],{"class":5331},[228,37030,284],{"class":234},[228,37032,33728],{"class":343},[228,37034,245],{"class":238},[228,37036,37037,37039,37041,37043,37045,37047,37049,37051,37053],{"class":230,"line":33694},[228,37038,33709],{"class":238},[228,37040,33712],{"class":343},[228,37042,33740],{"class":238},[228,37044,33743],{"class":343},[228,37046,616],{"class":238},[228,37048,33723],{"class":5331},[228,37050,284],{"class":234},[228,37052,33752],{"class":343},[228,37054,245],{"class":238},[228,37056,37057],{"class":230,"line":33700},[228,37058,33760],{"class":297},[228,37060,37061],{"class":230,"line":33706},[228,37062,33766],{"class":238},[228,37064,37065],{"class":230,"line":33733},[228,37066,33772],{"class":297},[228,37068,37069,37071,37073],{"class":230,"line":33757},[228,37070,33778],{"class":238},[228,37072,33781],{"class":343},[228,37074,245],{"class":238},[228,37076,37077,37079,37081],{"class":230,"line":33763},[228,37078,33789],{"class":238},[228,37080,33792],{"class":343},[228,37082,245],{"class":238},[228,37084,37085],{"class":230,"line":33769},[228,37086,33800],{"class":297},[228,37088,37089,37091,37093,37095,37097,37099,37101],{"class":230,"line":33775},[228,37090,31842],{"class":238},[228,37092,456],{"class":287},[228,37094,616],{"class":238},[228,37096,316],{"class":287},[228,37098,616],{"class":238},[228,37100,316],{"class":287},[228,37102,245],{"class":238},[228,37104,37105,37107,37109,37111,37113,37115,37117,37119,37121],{"class":230,"line":33786},[228,37106,33709],{"class":238},[228,37108,33712],{"class":343},[228,37110,33827],{"class":238},[228,37112,33718],{"class":343},[228,37114,616],{"class":238},[228,37116,33723],{"class":5331},[228,37118,284],{"class":234},[228,37120,33838],{"class":343},[228,37122,245],{"class":238},[228,37124,37125,37127,37129,37131,37133,37135,37137,37139,37141],{"class":230,"line":33797},[228,37126,33709],{"class":238},[228,37128,33712],{"class":343},[228,37130,33850],{"class":238},[228,37132,33743],{"class":343},[228,37134,616],{"class":238},[228,37136,33723],{"class":5331},[228,37138,284],{"class":234},[228,37140,33861],{"class":343},[228,37142,245],{"class":238},[228,37144,37145],{"class":230,"line":33803},[228,37146,33869],{"class":297},[228,37148,37149],{"class":230,"line":33820},[228,37150,33766],{"class":238},[228,37152,37153,37155,37157],{"class":230,"line":33843},[228,37154,33778],{"class":238},[228,37156,33712],{"class":343},[228,37158,245],{"class":238},[228,37160,37161,37163,37165],{"class":230,"line":33866},[228,37162,33789],{"class":238},[228,37164,33891],{"class":343},[228,37166,245],{"class":238},[228,37168,37169],{"class":230,"line":33872},[228,37170,33899],{"class":238},[228,37172,37173],{"class":230,"line":33877},[228,37174,2514],{"emptyLinePlaceholder":157},[228,37176,37177],{"class":230,"line":33886},[228,37178,33910],{"class":297},[228,37180,37181,37183,37185,37187,37189],{"class":230,"line":33896},[228,37182,1645],{"class":234},[228,37184,31335],{"class":287},[228,37186,3063],{"class":234},[228,37188,31340],{"class":343},[228,37190,3853],{"class":238},[228,37192,37193],{"class":230,"line":33902},[228,37194,33929],{"class":297},[228,37196,37197,37200,37202],{"class":230,"line":33907},[228,37198,37199],{"class":238},"    AlexNet",[228,37201,284],{"class":234},[228,37203,37204],{"class":238},"AlexNet()\n",[228,37206,37207,37209,37211],{"class":230,"line":33913},[228,37208,33946],{"class":238},[228,37210,284],{"class":234},[228,37212,33951],{"class":238},[228,37214,37215,37217,37219,37222,37224,37226,37228],{"class":230,"line":33926},[228,37216,33508],{"class":238},[228,37218,284],{"class":234},[228,37220,37221],{"class":238},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[228,37223,33964],{"class":5331},[228,37225,284],{"class":234},[228,37227,938],{"class":287},[228,37229,245],{"class":238},[228,37231,37232],{"class":230,"line":33932},[228,37233,33976],{"class":238},[183,37235,37236],{"start":1293},[186,37237,33989],{},[220,37239,37241],{"className":30493,"code":37240,"language":30495,"meta":141,"style":141},"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",[30,37242,37243,37249,37259,37269,37279,37283,37293,37303,37314,37318,37322,37326,37334,37350,37360,37376,37386,37400,37404,37414,37424,37434,37440,37444,37448,37456,37460,37476,37484,37488,37492,37500,37508,37512,37516,37520,37524,37530,37534,37544,37552,37560,37564,37568,37572,37580,37584,37600,37604,37608,37612,37624,37628,37640,37644,37648,37660,37664,37674,37678,37682,37694,37698,37706,37710,37714,37722,37726,37734,37738,37742,37746,37750,37754,37770,37778,37782,37786,37834,37840,37844,37854,37862,37870,37874,37878,37882,37886,37894,37898,37914,37918,37926,37934],{"__ignoreMap":141},[228,37244,37245,37247],{"class":230,"line":231},[228,37246,30507],{"class":234},[228,37248,30510],{"class":238},[228,37250,37251,37253,37255,37257],{"class":230,"line":142},[228,37252,30507],{"class":234},[228,37254,31530],{"class":238},[228,37256,31498],{"class":234},[228,37258,31535],{"class":238},[228,37260,37261,37263,37265,37267],{"class":230,"line":1293},[228,37262,30852],{"class":234},[228,37264,34017],{"class":238},[228,37266,30507],{"class":234},[228,37268,34022],{"class":238},[228,37270,37271,37273,37275,37277],{"class":230,"line":1308},[228,37272,30852],{"class":234},[228,37274,31513],{"class":238},[228,37276,30507],{"class":234},[228,37278,31518],{"class":238},[228,37280,37281],{"class":230,"line":1314},[228,37282,34037],{"class":297},[228,37284,37285,37287,37289,37291],{"class":230,"line":1328},[228,37286,30852],{"class":234},[228,37288,31483],{"class":238},[228,37290,30507],{"class":234},[228,37292,31488],{"class":238},[228,37294,37295,37297,37299,37301],{"class":230,"line":1334},[228,37296,30852],{"class":234},[228,37298,32029],{"class":238},[228,37300,30507],{"class":234},[228,37302,35672],{"class":238},[228,37304,37305,37307,37310,37312],{"class":230,"line":1425},[228,37306,30852],{"class":234},[228,37308,37309],{"class":238}," 练习.AlexNet.model ",[228,37311,30507],{"class":234},[228,37313,35672],{"class":238},[228,37315,37316],{"class":230,"line":1431},[228,37317,2514],{"emptyLinePlaceholder":157},[228,37319,37320],{"class":230,"line":1443},[228,37321,2514],{"emptyLinePlaceholder":157},[228,37323,37324],{"class":230,"line":1726},[228,37325,34066],{"class":297},[228,37327,37328,37330,37332],{"class":230,"line":1731},[228,37329,32062],{"class":234},[228,37331,34073],{"class":2077},[228,37333,32068],{"class":238},[228,37335,37336,37338,37340,37342,37344,37346,37348],{"class":230,"line":1737},[228,37337,34080],{"class":238},[228,37339,284],{"class":234},[228,37341,31570],{"class":238},[228,37343,31573],{"class":5331},[228,37345,284],{"class":234},[228,37347,31578],{"class":343},[228,37349,31581],{"class":238},[228,37351,37352,37354,37356,37358],{"class":230,"line":1742},[228,37353,34097],{"class":5331},[228,37355,284],{"class":234},[228,37357,34102],{"class":287},[228,37359,31581],{"class":238},[228,37361,37362,37364,37366,37368,37370,37372,37374],{"class":230,"line":1756},[228,37363,34109],{"class":5331},[228,37365,284],{"class":234},[228,37367,31608],{"class":238},[228,37369,31611],{"class":5331},[228,37371,284],{"class":234},[228,37373,35564],{"class":287},[228,37375,31619],{"class":238},[228,37377,37378,37380,37382,37384],{"class":230,"line":1761},[228,37379,34126],{"class":5331},[228,37381,284],{"class":234},[228,37383,31591],{"class":287},[228,37385,245],{"class":238},[228,37387,37388,37390,37392,37394,37396,37398],{"class":230,"line":1767},[228,37389,34137],{"class":238},[228,37391,284],{"class":234},[228,37393,31649],{"class":238},[228,37395,31652],{"class":5331},[228,37397,284],{"class":234},[228,37399,34148],{"class":238},[228,37401,37402],{"class":230,"line":1788},[228,37403,34153],{"class":297},[228,37405,37406,37408,37410,37412],{"class":230,"line":1793},[228,37407,34158],{"class":5331},[228,37409,284],{"class":234},[228,37411,456],{"class":287},[228,37413,31581],{"class":238},[228,37415,37416,37418,37420,37422],{"class":230,"line":1807},[228,37417,34169],{"class":5331},[228,37419,284],{"class":234},[228,37421,31591],{"class":287},[228,37423,31581],{"class":238},[228,37425,37426,37428,37430,37432],{"class":230,"line":1812},[228,37427,34180],{"class":5331},[228,37429,284],{"class":234},[228,37431,430],{"class":287},[228,37433,245],{"class":238},[228,37435,37436,37438],{"class":230,"line":1841},[228,37437,4204],{"class":234},[228,37439,34193],{"class":238},[228,37441,37442],{"class":230,"line":1846},[228,37443,2514],{"emptyLinePlaceholder":157},[228,37445,37446],{"class":230,"line":1863},[228,37447,34202],{"class":297},[228,37449,37450,37452,37454],{"class":230,"line":1868},[228,37451,32062],{"class":234},[228,37453,34209],{"class":2077},[228,37455,34212],{"class":238},[228,37457,37458],{"class":230,"line":1873},[228,37459,34217],{"class":297},[228,37461,37462,37464,37466,37468,37470,37472,37474],{"class":230,"line":1878},[228,37463,31352],{"class":238},[228,37465,284],{"class":234},[228,37467,31359],{"class":343},[228,37469,1818],{"class":234},[228,37471,31364],{"class":238},[228,37473,1815],{"class":234},[228,37475,34234],{"class":343},[228,37477,37478,37480,37482],{"class":230,"line":1892},[228,37479,31404],{"class":238},[228,37481,284],{"class":234},[228,37483,32404],{"class":238},[228,37485,37486],{"class":230,"line":1897},[228,37487,2514],{"emptyLinePlaceholder":157},[228,37489,37490],{"class":230,"line":2691},[228,37491,34251],{"class":297},[228,37493,37494,37496,37498],{"class":230,"line":2705},[228,37495,34256],{"class":238},[228,37497,284],{"class":234},[228,37499,32457],{"class":287},[228,37501,37502,37504,37506],{"class":230,"line":2713},[228,37503,34265],{"class":238},[228,37505,284],{"class":234},[228,37507,3199],{"class":287},[228,37509,37510],{"class":230,"line":2718},[228,37511,2514],{"emptyLinePlaceholder":157},[228,37513,37514],{"class":230,"line":2724},[228,37515,34278],{"class":297},[228,37517,37518],{"class":230,"line":2730},[228,37519,34283],{"class":297},[228,37521,37522],{"class":230,"line":2735},[228,37523,34288],{"class":297},[228,37525,37526,37528],{"class":230,"line":8063},[228,37527,34293],{"class":234},[228,37529,32999],{"class":238},[228,37531,37532],{"class":230,"line":8087},[228,37533,34300],{"class":297},[228,37535,37536,37538,37540,37542],{"class":230,"line":8092},[228,37537,3517],{"class":234},[228,37539,34307],{"class":238},[228,37541,26159],{"class":234},[228,37543,34312],{"class":238},[228,37545,37546,37548,37550],{"class":230,"line":8098},[228,37547,34317],{"class":238},[228,37549,284],{"class":234},[228,37551,34322],{"class":238},[228,37553,37554,37556,37558],{"class":230,"line":8125},[228,37555,34327],{"class":238},[228,37557,284],{"class":234},[228,37559,34332],{"class":238},[228,37561,37562],{"class":230,"line":8130},[228,37563,34337],{"class":297},[228,37565,37566],{"class":230,"line":8136},[228,37567,32990],{"class":238},[228,37569,37570],{"class":230,"line":8148},[228,37571,34346],{"class":297},[228,37573,37574,37576,37578],{"class":230,"line":8160},[228,37575,32775],{"class":238},[228,37577,284],{"class":234},[228,37579,34355],{"class":238},[228,37581,37582],{"class":230,"line":8172},[228,37583,34360],{"class":297},[228,37585,37586,37588,37590,37592,37594,37596,37598],{"class":230,"line":9831},[228,37587,32792],{"class":238},[228,37589,284],{"class":234},[228,37591,32797],{"class":238},[228,37593,32800],{"class":5331},[228,37595,284],{"class":234},[228,37597,456],{"class":287},[228,37599,245],{"class":238},[228,37601,37602],{"class":230,"line":9856},[228,37603,34381],{"class":297},[228,37605,37606],{"class":230,"line":9879},[228,37607,34386],{"class":297},[228,37609,37610],{"class":230,"line":9903},[228,37611,34391],{"class":297},[228,37613,37614,37616,37618,37620,37622],{"class":230,"line":9908},[228,37615,34396],{"class":238},[228,37617,9592],{"class":234},[228,37619,32902],{"class":238},[228,37621,3063],{"class":234},[228,37623,34405],{"class":238},[228,37625,37626],{"class":230,"line":9913},[228,37627,34410],{"class":297},[228,37629,37630,37632,37634,37636,37638],{"class":230,"line":9918},[228,37631,34415],{"class":238},[228,37633,9592],{"class":234},[228,37635,34420],{"class":238},[228,37637,430],{"class":287},[228,37639,245],{"class":238},[228,37641,37642],{"class":230,"line":9927},[228,37643,2514],{"emptyLinePlaceholder":157},[228,37645,37646],{"class":230,"line":9932},[228,37647,34433],{"class":297},[228,37649,37650,37652,37654,37656,37658],{"class":230,"line":9938},[228,37651,34438],{"class":238},[228,37653,284],{"class":234},[228,37655,34443],{"class":238},[228,37657,822],{"class":234},[228,37659,34448],{"class":238},[228,37661,37662],{"class":230,"line":9959},[228,37663,34453],{"class":297},[228,37665,37666,37668,37670,37672],{"class":230,"line":9965},[228,37667,32566],{"class":287},[228,37669,239],{"class":238},[228,37671,34462],{"class":343},[228,37673,34465],{"class":238},[228,37675,37676],{"class":230,"line":9979},[228,37677,2514],{"emptyLinePlaceholder":157},[228,37679,37680],{"class":230,"line":9985},[228,37681,34474],{"class":297},[228,37683,37684,37686,37688,37690,37692],{"class":230,"line":10012},[228,37685,1645],{"class":234},[228,37687,31335],{"class":287},[228,37689,3063],{"class":234},[228,37691,31340],{"class":343},[228,37693,3853],{"class":238},[228,37695,37696],{"class":230,"line":10021},[228,37697,34491],{"class":297},[228,37699,37700,37702,37704],{"class":230,"line":10027},[228,37701,31404],{"class":238},[228,37703,284],{"class":234},[228,37705,37204],{"class":238},[228,37707,37708],{"class":230,"line":10035},[228,37709,34504],{"class":297},[228,37711,37712],{"class":230,"line":10040},[228,37713,34509],{"class":297},[228,37715,37716,37718,37720],{"class":230,"line":16719},[228,37717,34514],{"class":238},[228,37719,34517],{"class":343},[228,37721,30612],{"class":238},[228,37723,37724],{"class":230,"line":16725},[228,37725,34524],{"class":297},[228,37727,37728,37730,37732],{"class":230,"line":16748},[228,37729,34137],{"class":238},[228,37731,284],{"class":234},[228,37733,34533],{"class":238},[228,37735,37736],{"class":230,"line":16754},[228,37737,34538],{"class":297},[228,37739,37740],{"class":230,"line":16777},[228,37741,34543],{"class":238},[228,37743,37744],{"class":230,"line":16791},[228,37745,2514],{"emptyLinePlaceholder":157},[228,37747,37748],{"class":230,"line":16811},[228,37749,34552],{"class":297},[228,37751,37752],{"class":230,"line":16817},[228,37753,34557],{"class":297},[228,37755,37756,37758,37760,37762,37764,37766,37768],{"class":230,"line":16828},[228,37757,31352],{"class":238},[228,37759,284],{"class":234},[228,37761,31359],{"class":343},[228,37763,1818],{"class":234},[228,37765,31364],{"class":238},[228,37767,1815],{"class":234},[228,37769,34234],{"class":343},[228,37771,37772,37774,37776],{"class":230,"line":16851},[228,37773,31404],{"class":238},[228,37775,284],{"class":234},[228,37777,32404],{"class":238},[228,37779,37780],{"class":230,"line":16873},[228,37781,34586],{"class":297},[228,37783,37784],{"class":230,"line":16878},[228,37785,34591],{"class":297},[228,37787,37788,37790,37792,37794,37796,37798,37800,37802,37804,37806,37808,37810,37812,37814,37816,37818,37820,37822,37824,37826,37828,37830,37832],{"class":230,"line":16884},[228,37789,34596],{"class":238},[228,37791,284],{"class":234},[228,37793,1128],{"class":238},[228,37795,34603],{"class":343},[228,37797,616],{"class":238},[228,37799,34608],{"class":343},[228,37801,616],{"class":238},[228,37803,34613],{"class":343},[228,37805,616],{"class":238},[228,37807,34618],{"class":343},[228,37809,616],{"class":238},[228,37811,34623],{"class":343},[228,37813,616],{"class":238},[228,37815,34628],{"class":343},[228,37817,616],{"class":238},[228,37819,34633],{"class":343},[228,37821,616],{"class":238},[228,37823,34638],{"class":343},[228,37825,616],{"class":238},[228,37827,34643],{"class":343},[228,37829,616],{"class":238},[228,37831,34648],{"class":343},[228,37833,33361],{"class":238},[228,37835,37836,37838],{"class":230,"line":16898},[228,37837,34293],{"class":234},[228,37839,32999],{"class":238},[228,37841,37842],{"class":230,"line":16911},[228,37843,34661],{"class":297},[228,37845,37846,37848,37850,37852],{"class":230,"line":16916},[228,37847,3517],{"class":234},[228,37849,34668],{"class":238},[228,37851,26159],{"class":234},[228,37853,34312],{"class":238},[228,37855,37856,37858,37860],{"class":230,"line":16930},[228,37857,32725],{"class":238},[228,37859,284],{"class":234},[228,37861,32730],{"class":238},[228,37863,37864,37866,37868],{"class":230,"line":16935},[228,37865,32740],{"class":238},[228,37867,284],{"class":234},[228,37869,32745],{"class":238},[228,37871,37872],{"class":230,"line":16941},[228,37873,2514],{"emptyLinePlaceholder":157},[228,37875,37876],{"class":230,"line":16946},[228,37877,34697],{"class":297},[228,37879,37880],{"class":230,"line":16960},[228,37881,32990],{"class":238},[228,37883,37884],{"class":230,"line":16965},[228,37885,34706],{"class":297},[228,37887,37888,37890,37892],{"class":230,"line":16970},[228,37889,32775],{"class":238},[228,37891,284],{"class":234},[228,37893,32780],{"class":238},[228,37895,37896],{"class":230,"line":16984},[228,37897,34719],{"class":297},[228,37899,37900,37902,37904,37906,37908,37910,37912],{"class":230,"line":16996},[228,37901,32792],{"class":238},[228,37903,284],{"class":234},[228,37905,32797],{"class":238},[228,37907,32800],{"class":5331},[228,37909,284],{"class":234},[228,37911,456],{"class":287},[228,37913,245],{"class":238},[228,37915,37916],{"class":230,"line":17001},[228,37917,34740],{"class":297},[228,37919,37920,37922,37924],{"class":230,"line":17014},[228,37921,34745],{"class":238},[228,37923,284],{"class":234},[228,37925,34750],{"class":238},[228,37927,37928,37930,37932],{"class":230,"line":17019},[228,37929,34755],{"class":238},[228,37931,284],{"class":234},[228,37933,34760],{"class":238},[228,37935,37936,37938,37940,37942,37944,37946,37948,37950],{"class":230,"line":17024},[228,37937,34765],{"class":287},[228,37939,239],{"class":238},[228,37941,34770],{"class":343},[228,37943,34773],{"class":238},[228,37945,34776],{"class":343},[228,37947,616],{"class":238},[228,37949,34781],{"class":343},[228,37951,34784],{"class":238},[200,37953,37955],{"id":37954},"_22vgg","2.2.VGG",[22113,37957,37959],{"id":37958},"_221原理","2.2.1.原理",[19,37961,37962],{},[1576,37963],{"alt":141,"src":37964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-015.png",[19,37966,37967],{},[1576,37968],{"alt":141,"src":37969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-016.png",[19,37971,37972],{},[1576,37973],{"alt":141,"src":37974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-017.png",[19,37976,37977],{},"参数详细描述：",[19,37979,37980],{},[1576,37981],{"alt":141,"src":37982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-018.png",[19,37984,37985],{},[1576,37986],{"alt":141,"src":37987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-019.png",[19,37989,37990],{},[1576,37991],{"alt":141,"src":37992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-020.png",[19,37994,37995],{},[1576,37996],{"alt":141,"src":37997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-021.png",[19,37999,38000],{},[1576,38001],{"alt":141,"src":38002},"\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",[22113,38004,38006],{"id":38005},"_222代码实现","2.2.2.代码实现",[183,38008,38009],{},[186,38010,38011],{},"网络搭建",[220,38013,38015],{"className":30493,"code":38014,"language":30495,"meta":141,"style":141},"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",[30,38016,38017,38023,38035,38045,38055,38059,38076,38084,38103,38108,38113,38125,38163,38168,38204,38208,38237,38242,38247,38258,38294,38298,38334,38338,38366,38370,38375,38386,38422,38426,38462,38466,38502,38506,38534,38538,38543,38554,38591,38595,38631,38635,38671,38675,38703,38707,38712,38723,38759,38763,38799,38803,38839,38843,38871,38875,38880,38891,38896,38901,38906,38927,38931,38943,38947,38959,38963,38967,38972,38977,38992,38997,39007,39012,39027,39032,39051,39056,39065,39070,39080,39085,39090,39104,39109,39123,39131,39135,39139,39147,39158,39169,39180,39191,39202,39213,39219,39223,39228,39241,39261,39267,39276],{"__ignoreMap":141},[228,38018,38019,38021],{"class":230,"line":231},[228,38020,30507],{"class":234},[228,38022,30510],{"class":238},[228,38024,38025,38027,38030,38032],{"class":230,"line":142},[228,38026,30852],{"class":234},[228,38028,38029],{"class":238}," sympy.core.sympify ",[228,38031,30507],{"class":234},[228,38033,38034],{"class":238}," kernS\n",[228,38036,38037,38039,38041,38043],{"class":230,"line":1293},[228,38038,30852],{"class":234},[228,38040,30855],{"class":238},[228,38042,30507],{"class":234},[228,38044,30860],{"class":238},[228,38046,38047,38049,38051,38053],{"class":230,"line":1308},[228,38048,30852],{"class":234},[228,38050,30872],{"class":238},[228,38052,30507],{"class":234},[228,38054,30877],{"class":238},[228,38056,38057],{"class":230,"line":1314},[228,38058,2514],{"emptyLinePlaceholder":157},[228,38060,38061,38063,38066,38068,38070,38072,38074],{"class":230,"line":1328},[228,38062,14809],{"class":234},[228,38064,38065],{"class":2077}," VGG16",[228,38067,239],{"class":238},[228,38069,30893],{"class":2077},[228,38071,796],{"class":238},[228,38073,30898],{"class":2077},[228,38075,30901],{"class":238},[228,38077,38078,38080,38082],{"class":230,"line":1334},[228,38079,30916],{"class":234},[228,38081,30919],{"class":287},[228,38083,30922],{"class":238},[228,38085,38086,38088,38090,38093,38095,38097,38099,38101],{"class":230,"line":1425},[228,38087,30932],{"class":287},[228,38089,239],{"class":238},[228,38091,38092],{"class":287},"VGG16",[228,38094,12550],{"class":238},[228,38096,30938],{"class":287},[228,38098,30941],{"class":238},[228,38100,30944],{"class":287},[228,38102,2090],{"class":238},[228,38104,38105],{"class":230,"line":1431},[228,38106,38107],{"class":297},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[228,38109,38110],{"class":230,"line":1443},[228,38111,38112],{"class":297},"        # 这里用的是灰度图\n",[228,38114,38115,38117,38120,38122],{"class":230,"line":1726},[228,38116,30960],{"class":287},[228,38118,38119],{"class":238},".block1",[228,38121,284],{"class":234},[228,38123,38124],{"class":238},"nn.Sequential(\n",[228,38126,38127,38130,38132,38134,38136,38138,38140,38142,38144,38146,38148,38150,38152,38154,38156,38158,38160],{"class":230,"line":1731},[228,38128,38129],{"class":238},"            nn.Conv2d(",[228,38131,30971],{"class":5331},[228,38133,284],{"class":234},[228,38135,456],{"class":287},[228,38137,616],{"class":238},[228,38139,30980],{"class":5331},[228,38141,284],{"class":234},[228,38143,442],{"class":287},[228,38145,616],{"class":238},[228,38147,30989],{"class":5331},[228,38149,284],{"class":234},[228,38151,310],{"class":287},[228,38153,616],{"class":238},[228,38155,30998],{"class":5331},[228,38157,284],{"class":234},[228,38159,456],{"class":287},[228,38161,38162],{"class":238},"),\n",[228,38164,38165],{"class":230,"line":1737},[228,38166,38167],{"class":238},"            nn.ReLU(),\n",[228,38169,38170,38172,38174,38176,38178,38180,38182,38184,38186,38188,38190,38192,38194,38196,38198,38200,38202],{"class":230,"line":1742},[228,38171,38129],{"class":238},[228,38173,30971],{"class":5331},[228,38175,284],{"class":234},[228,38177,442],{"class":287},[228,38179,616],{"class":238},[228,38181,30980],{"class":5331},[228,38183,284],{"class":234},[228,38185,442],{"class":287},[228,38187,616],{"class":238},[228,38189,30989],{"class":5331},[228,38191,284],{"class":234},[228,38193,310],{"class":287},[228,38195,616],{"class":238},[228,38197,30998],{"class":5331},[228,38199,284],{"class":234},[228,38201,456],{"class":287},[228,38203,38162],{"class":238},[228,38205,38206],{"class":230,"line":1756},[228,38207,38167],{"class":238},[228,38209,38210,38213,38215,38217,38219,38221,38223,38225,38227,38229,38231,38233,38235],{"class":230,"line":1761},[228,38211,38212],{"class":238},"            nn.MaxPool2d(",[228,38214,30989],{"class":5331},[228,38216,284],{"class":234},[228,38218,316],{"class":287},[228,38220,616],{"class":238},[228,38222,31044],{"class":5331},[228,38224,284],{"class":234},[228,38226,316],{"class":287},[228,38228,616],{"class":238},[228,38230,30998],{"class":5331},[228,38232,284],{"class":234},[228,38234,430],{"class":287},[228,38236,245],{"class":238},[228,38238,38239],{"class":230,"line":1767},[228,38240,38241],{"class":238},"        )\n",[228,38243,38244],{"class":230,"line":1788},[228,38245,38246],{"class":297},"        # 第二层\n",[228,38248,38249,38251,38254,38256],{"class":230,"line":1793},[228,38250,30960],{"class":287},[228,38252,38253],{"class":238},".block2",[228,38255,284],{"class":234},[228,38257,38124],{"class":238},[228,38259,38260,38262,38264,38266,38268,38270,38272,38274,38276,38278,38280,38282,38284,38286,38288,38290,38292],{"class":230,"line":1807},[228,38261,38129],{"class":238},[228,38263,30971],{"class":5331},[228,38265,284],{"class":234},[228,38267,442],{"class":287},[228,38269,616],{"class":238},[228,38271,30980],{"class":5331},[228,38273,284],{"class":234},[228,38275,32185],{"class":287},[228,38277,616],{"class":238},[228,38279,30989],{"class":5331},[228,38281,284],{"class":234},[228,38283,310],{"class":287},[228,38285,616],{"class":238},[228,38287,30998],{"class":5331},[228,38289,284],{"class":234},[228,38291,456],{"class":287},[228,38293,38162],{"class":238},[228,38295,38296],{"class":230,"line":1812},[228,38297,38167],{"class":238},[228,38299,38300,38302,38304,38306,38308,38310,38312,38314,38316,38318,38320,38322,38324,38326,38328,38330,38332],{"class":230,"line":1841},[228,38301,38129],{"class":238},[228,38303,30971],{"class":5331},[228,38305,284],{"class":234},[228,38307,32185],{"class":287},[228,38309,616],{"class":238},[228,38311,30980],{"class":5331},[228,38313,284],{"class":234},[228,38315,32185],{"class":287},[228,38317,616],{"class":238},[228,38319,30989],{"class":5331},[228,38321,284],{"class":234},[228,38323,310],{"class":287},[228,38325,616],{"class":238},[228,38327,30998],{"class":5331},[228,38329,284],{"class":234},[228,38331,456],{"class":287},[228,38333,38162],{"class":238},[228,38335,38336],{"class":230,"line":1846},[228,38337,38167],{"class":238},[228,38339,38340,38342,38344,38346,38348,38350,38352,38354,38356,38358,38360,38362,38364],{"class":230,"line":1863},[228,38341,38212],{"class":238},[228,38343,30989],{"class":5331},[228,38345,284],{"class":234},[228,38347,316],{"class":287},[228,38349,616],{"class":238},[228,38351,31044],{"class":5331},[228,38353,284],{"class":234},[228,38355,316],{"class":287},[228,38357,616],{"class":238},[228,38359,30998],{"class":5331},[228,38361,284],{"class":234},[228,38363,430],{"class":287},[228,38365,245],{"class":238},[228,38367,38368],{"class":230,"line":1868},[228,38369,38241],{"class":238},[228,38371,38372],{"class":230,"line":1873},[228,38373,38374],{"class":297},"        # 第三层\n",[228,38376,38377,38379,38382,38384],{"class":230,"line":1878},[228,38378,30960],{"class":287},[228,38380,38381],{"class":238},".block3",[228,38383,284],{"class":234},[228,38385,38124],{"class":238},[228,38387,38388,38390,38392,38394,38396,38398,38400,38402,38404,38406,38408,38410,38412,38414,38416,38418,38420],{"class":230,"line":1892},[228,38389,38129],{"class":238},[228,38391,30971],{"class":5331},[228,38393,284],{"class":234},[228,38395,32185],{"class":287},[228,38397,616],{"class":238},[228,38399,30980],{"class":5331},[228,38401,284],{"class":234},[228,38403,34985],{"class":287},[228,38405,616],{"class":238},[228,38407,30989],{"class":5331},[228,38409,284],{"class":234},[228,38411,310],{"class":287},[228,38413,616],{"class":238},[228,38415,30998],{"class":5331},[228,38417,284],{"class":234},[228,38419,456],{"class":287},[228,38421,38162],{"class":238},[228,38423,38424],{"class":230,"line":1897},[228,38425,38167],{"class":238},[228,38427,38428,38430,38432,38434,38436,38438,38440,38442,38444,38446,38448,38450,38452,38454,38456,38458,38460],{"class":230,"line":2691},[228,38429,38129],{"class":238},[228,38431,30971],{"class":5331},[228,38433,284],{"class":234},[228,38435,34985],{"class":287},[228,38437,616],{"class":238},[228,38439,30980],{"class":5331},[228,38441,284],{"class":234},[228,38443,34985],{"class":287},[228,38445,616],{"class":238},[228,38447,30989],{"class":5331},[228,38449,284],{"class":234},[228,38451,310],{"class":287},[228,38453,616],{"class":238},[228,38455,30998],{"class":5331},[228,38457,284],{"class":234},[228,38459,456],{"class":287},[228,38461,38162],{"class":238},[228,38463,38464],{"class":230,"line":2705},[228,38465,38167],{"class":238},[228,38467,38468,38470,38472,38474,38476,38478,38480,38482,38484,38486,38488,38490,38492,38494,38496,38498,38500],{"class":230,"line":2713},[228,38469,38129],{"class":238},[228,38471,30971],{"class":5331},[228,38473,284],{"class":234},[228,38475,34985],{"class":287},[228,38477,616],{"class":238},[228,38479,30980],{"class":5331},[228,38481,284],{"class":234},[228,38483,34985],{"class":287},[228,38485,616],{"class":238},[228,38487,30989],{"class":5331},[228,38489,284],{"class":234},[228,38491,310],{"class":287},[228,38493,616],{"class":238},[228,38495,30998],{"class":5331},[228,38497,284],{"class":234},[228,38499,456],{"class":287},[228,38501,38162],{"class":238},[228,38503,38504],{"class":230,"line":2718},[228,38505,38167],{"class":238},[228,38507,38508,38510,38512,38514,38516,38518,38520,38522,38524,38526,38528,38530,38532],{"class":230,"line":2724},[228,38509,38212],{"class":238},[228,38511,30989],{"class":5331},[228,38513,284],{"class":234},[228,38515,316],{"class":287},[228,38517,616],{"class":238},[228,38519,31044],{"class":5331},[228,38521,284],{"class":234},[228,38523,316],{"class":287},[228,38525,616],{"class":238},[228,38527,30998],{"class":5331},[228,38529,284],{"class":234},[228,38531,430],{"class":287},[228,38533,245],{"class":238},[228,38535,38536],{"class":230,"line":2730},[228,38537,38241],{"class":238},[228,38539,38540],{"class":230,"line":2735},[228,38541,38542],{"class":297},"        # 第四层\n",[228,38544,38545,38547,38550,38552],{"class":230,"line":8063},[228,38546,30960],{"class":287},[228,38548,38549],{"class":238},".block4",[228,38551,284],{"class":234},[228,38553,38124],{"class":238},[228,38555,38556,38558,38560,38562,38564,38566,38568,38570,38573,38575,38577,38579,38581,38583,38585,38587,38589],{"class":230,"line":8087},[228,38557,38129],{"class":238},[228,38559,30971],{"class":5331},[228,38561,284],{"class":234},[228,38563,34985],{"class":287},[228,38565,616],{"class":238},[228,38567,30980],{"class":5331},[228,38569,284],{"class":234},[228,38571,38572],{"class":287},"512",[228,38574,616],{"class":238},[228,38576,30989],{"class":5331},[228,38578,284],{"class":234},[228,38580,310],{"class":287},[228,38582,616],{"class":238},[228,38584,30998],{"class":5331},[228,38586,284],{"class":234},[228,38588,456],{"class":287},[228,38590,38162],{"class":238},[228,38592,38593],{"class":230,"line":8092},[228,38594,38167],{"class":238},[228,38596,38597,38599,38601,38603,38605,38607,38609,38611,38613,38615,38617,38619,38621,38623,38625,38627,38629],{"class":230,"line":8098},[228,38598,38129],{"class":238},[228,38600,30971],{"class":5331},[228,38602,284],{"class":234},[228,38604,38572],{"class":287},[228,38606,616],{"class":238},[228,38608,30980],{"class":5331},[228,38610,284],{"class":234},[228,38612,38572],{"class":287},[228,38614,616],{"class":238},[228,38616,30989],{"class":5331},[228,38618,284],{"class":234},[228,38620,310],{"class":287},[228,38622,616],{"class":238},[228,38624,30998],{"class":5331},[228,38626,284],{"class":234},[228,38628,456],{"class":287},[228,38630,38162],{"class":238},[228,38632,38633],{"class":230,"line":8125},[228,38634,38167],{"class":238},[228,38636,38637,38639,38641,38643,38645,38647,38649,38651,38653,38655,38657,38659,38661,38663,38665,38667,38669],{"class":230,"line":8130},[228,38638,38129],{"class":238},[228,38640,30971],{"class":5331},[228,38642,284],{"class":234},[228,38644,38572],{"class":287},[228,38646,616],{"class":238},[228,38648,30980],{"class":5331},[228,38650,284],{"class":234},[228,38652,38572],{"class":287},[228,38654,616],{"class":238},[228,38656,30989],{"class":5331},[228,38658,284],{"class":234},[228,38660,310],{"class":287},[228,38662,616],{"class":238},[228,38664,30998],{"class":5331},[228,38666,284],{"class":234},[228,38668,456],{"class":287},[228,38670,38162],{"class":238},[228,38672,38673],{"class":230,"line":8136},[228,38674,38167],{"class":238},[228,38676,38677,38679,38681,38683,38685,38687,38689,38691,38693,38695,38697,38699,38701],{"class":230,"line":8148},[228,38678,38212],{"class":238},[228,38680,30989],{"class":5331},[228,38682,284],{"class":234},[228,38684,316],{"class":287},[228,38686,616],{"class":238},[228,38688,31044],{"class":5331},[228,38690,284],{"class":234},[228,38692,316],{"class":287},[228,38694,616],{"class":238},[228,38696,30998],{"class":5331},[228,38698,284],{"class":234},[228,38700,430],{"class":287},[228,38702,245],{"class":238},[228,38704,38705],{"class":230,"line":8160},[228,38706,38241],{"class":238},[228,38708,38709],{"class":230,"line":8172},[228,38710,38711],{"class":297},"        # 第五层\n",[228,38713,38714,38716,38719,38721],{"class":230,"line":9831},[228,38715,30960],{"class":287},[228,38717,38718],{"class":238},".block5",[228,38720,284],{"class":234},[228,38722,38124],{"class":238},[228,38724,38725,38727,38729,38731,38733,38735,38737,38739,38741,38743,38745,38747,38749,38751,38753,38755,38757],{"class":230,"line":9856},[228,38726,38129],{"class":238},[228,38728,30971],{"class":5331},[228,38730,284],{"class":234},[228,38732,38572],{"class":287},[228,38734,616],{"class":238},[228,38736,30980],{"class":5331},[228,38738,284],{"class":234},[228,38740,38572],{"class":287},[228,38742,616],{"class":238},[228,38744,30989],{"class":5331},[228,38746,284],{"class":234},[228,38748,310],{"class":287},[228,38750,616],{"class":238},[228,38752,30998],{"class":5331},[228,38754,284],{"class":234},[228,38756,456],{"class":287},[228,38758,38162],{"class":238},[228,38760,38761],{"class":230,"line":9879},[228,38762,38167],{"class":238},[228,38764,38765,38767,38769,38771,38773,38775,38777,38779,38781,38783,38785,38787,38789,38791,38793,38795,38797],{"class":230,"line":9903},[228,38766,38129],{"class":238},[228,38768,30971],{"class":5331},[228,38770,284],{"class":234},[228,38772,38572],{"class":287},[228,38774,616],{"class":238},[228,38776,30980],{"class":5331},[228,38778,284],{"class":234},[228,38780,38572],{"class":287},[228,38782,616],{"class":238},[228,38784,30989],{"class":5331},[228,38786,284],{"class":234},[228,38788,310],{"class":287},[228,38790,616],{"class":238},[228,38792,30998],{"class":5331},[228,38794,284],{"class":234},[228,38796,456],{"class":287},[228,38798,38162],{"class":238},[228,38800,38801],{"class":230,"line":9908},[228,38802,38167],{"class":238},[228,38804,38805,38807,38809,38811,38813,38815,38817,38819,38821,38823,38825,38827,38829,38831,38833,38835,38837],{"class":230,"line":9913},[228,38806,38129],{"class":238},[228,38808,30971],{"class":5331},[228,38810,284],{"class":234},[228,38812,38572],{"class":287},[228,38814,616],{"class":238},[228,38816,30980],{"class":5331},[228,38818,284],{"class":234},[228,38820,38572],{"class":287},[228,38822,616],{"class":238},[228,38824,30989],{"class":5331},[228,38826,284],{"class":234},[228,38828,310],{"class":287},[228,38830,616],{"class":238},[228,38832,30998],{"class":5331},[228,38834,284],{"class":234},[228,38836,456],{"class":287},[228,38838,38162],{"class":238},[228,38840,38841],{"class":230,"line":9918},[228,38842,38167],{"class":238},[228,38844,38845,38847,38849,38851,38853,38855,38857,38859,38861,38863,38865,38867,38869],{"class":230,"line":9927},[228,38846,38212],{"class":238},[228,38848,30989],{"class":5331},[228,38850,284],{"class":234},[228,38852,316],{"class":287},[228,38854,616],{"class":238},[228,38856,31044],{"class":5331},[228,38858,284],{"class":234},[228,38860,316],{"class":287},[228,38862,616],{"class":238},[228,38864,30998],{"class":5331},[228,38866,284],{"class":234},[228,38868,430],{"class":287},[228,38870,245],{"class":238},[228,38872,38873],{"class":230,"line":9932},[228,38874,38241],{"class":238},[228,38876,38877],{"class":230,"line":9938},[228,38878,38879],{"class":297},"        # 全连接层\n",[228,38881,38882,38884,38887,38889],{"class":230,"line":9959},[228,38883,30960],{"class":287},[228,38885,38886],{"class":238},".block6",[228,38888,284],{"class":234},[228,38890,38124],{"class":238},[228,38892,38893],{"class":230,"line":9965},[228,38894,38895],{"class":297},"            # 平展操作\n",[228,38897,38898],{"class":230,"line":9979},[228,38899,38900],{"class":297},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[228,38902,38903],{"class":230,"line":9985},[228,38904,38905],{"class":238},"            nn.Flatten(),\n",[228,38907,38908,38911,38913,38915,38917,38919,38921,38923,38925],{"class":230,"line":10012},[228,38909,38910],{"class":238},"            nn.Linear(",[228,38912,607],{"class":287},[228,38914,693],{"class":234},[228,38916,607],{"class":287},[228,38918,693],{"class":234},[228,38920,38572],{"class":287},[228,38922,616],{"class":238},[228,38924,34985],{"class":287},[228,38926,38162],{"class":238},[228,38928,38929],{"class":230,"line":10021},[228,38930,38167],{"class":238},[228,38932,38933,38935,38937,38939,38941],{"class":230,"line":10027},[228,38934,38910],{"class":238},[228,38936,34985],{"class":287},[228,38938,616],{"class":238},[228,38940,32185],{"class":287},[228,38942,38162],{"class":238},[228,38944,38945],{"class":230,"line":10035},[228,38946,38167],{"class":238},[228,38948,38949,38951,38953,38955,38957],{"class":230,"line":10040},[228,38950,38910],{"class":238},[228,38952,32185],{"class":287},[228,38954,616],{"class":238},[228,38956,684],{"class":287},[228,38958,245],{"class":238},[228,38960,38961],{"class":230,"line":16719},[228,38962,38241],{"class":238},[228,38964,38965],{"class":230,"line":16725},[228,38966,2514],{"emptyLinePlaceholder":157},[228,38968,38969],{"class":230,"line":16748},[228,38970,38971],{"class":297},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[228,38973,38974],{"class":230,"line":16754},[228,38975,38976],{"class":297},"        # 循环遍历模型\n",[228,38978,38979,38981,38984,38986,38989],{"class":230,"line":16777},[228,38980,3517],{"class":234},[228,38982,38983],{"class":238}," m ",[228,38985,26159],{"class":234},[228,38987,38988],{"class":287}," self",[228,38990,38991],{"class":238},".modules():\n",[228,38993,38994],{"class":230,"line":16791},[228,38995,38996],{"class":297},"            # print(m)\n",[228,38998,38999,39001,39004],{"class":230,"line":16811},[228,39000,4756],{"class":234},[228,39002,39003],{"class":287}," isinstance",[228,39005,39006],{"class":238},"(m,nn.Conv2d):\n",[228,39008,39009],{"class":230,"line":16817},[228,39010,39011],{"class":297},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[228,39013,39014,39017,39020,39022,39025],{"class":230,"line":16828},[228,39015,39016],{"class":238},"                nn.init.kaiming_normal_(m.weight,",[228,39018,39019],{"class":5331},"nonlinearity",[228,39021,284],{"class":234},[228,39023,39024],{"class":343},"'relu'",[228,39026,245],{"class":238},[228,39028,39029],{"class":230,"line":16851},[228,39030,39031],{"class":297},"                # 判断b参数是否存在\n",[228,39033,39034,39037,39040,39043,39046,39049],{"class":230,"line":16873},[228,39035,39036],{"class":234},"                if",[228,39038,39039],{"class":238}," m.bias ",[228,39041,39042],{"class":234},"is",[228,39044,39045],{"class":234}," not",[228,39047,39048],{"class":287}," None",[228,39050,3853],{"class":238},[228,39052,39053],{"class":230,"line":16878},[228,39054,39055],{"class":297},"                    # 如果参数不存在的化初始化b=0\n",[228,39057,39058,39061,39063],{"class":230,"line":16884},[228,39059,39060],{"class":238},"                    nn.init.constant_(m.bias,",[228,39062,430],{"class":287},[228,39064,245],{"class":238},[228,39066,39067],{"class":230,"line":16898},[228,39068,39069],{"class":297},"            # 全连接层初始化\n",[228,39071,39072,39075,39077],{"class":230,"line":16911},[228,39073,39074],{"class":234},"            elif",[228,39076,39003],{"class":287},[228,39078,39079],{"class":238},"(m,nn.Linear):\n",[228,39081,39082],{"class":230,"line":16916},[228,39083,39084],{"class":297},"                # 这个初始化方法是利用的是正太分布的方式\n",[228,39086,39087],{"class":230,"line":16930},[228,39088,39089],{"class":297},"                # 均值为0，方差为0.01\n",[228,39091,39092,39095,39097,39099,39102],{"class":230,"line":16935},[228,39093,39094],{"class":238},"                nn.init.normal_(m.weight,",[228,39096,430],{"class":287},[228,39098,616],{"class":238},[228,39100,39101],{"class":287},"0.01",[228,39103,245],{"class":238},[228,39105,39106],{"class":230,"line":16941},[228,39107,39108],{"class":297},"                # 初始化b参数\n",[228,39110,39111,39113,39115,39117,39119,39121],{"class":230,"line":16946},[228,39112,39036],{"class":234},[228,39114,39039],{"class":238},[228,39116,39042],{"class":234},[228,39118,39045],{"class":234},[228,39120,39048],{"class":287},[228,39122,3853],{"class":238},[228,39124,39125,39127,39129],{"class":230,"line":16960},[228,39126,39060],{"class":238},[228,39128,430],{"class":287},[228,39130,245],{"class":238},[228,39132,39133],{"class":230,"line":16965},[228,39134,2514],{"emptyLinePlaceholder":157},[228,39136,39137],{"class":230,"line":16970},[228,39138,35280],{"class":297},[228,39140,39141,39143,39145],{"class":230,"line":16984},[228,39142,30916],{"class":234},[228,39144,31208],{"class":2077},[228,39146,31211],{"class":238},[228,39148,39149,39151,39153,39155],{"class":230,"line":16996},[228,39150,31216],{"class":238},[228,39152,284],{"class":234},[228,39154,30938],{"class":287},[228,39156,39157],{"class":238},".block1(x)\n",[228,39159,39160,39162,39164,39166],{"class":230,"line":17001},[228,39161,31216],{"class":238},[228,39163,284],{"class":234},[228,39165,30938],{"class":287},[228,39167,39168],{"class":238},".block2(x)\n",[228,39170,39171,39173,39175,39177],{"class":230,"line":17014},[228,39172,31216],{"class":238},[228,39174,284],{"class":234},[228,39176,30938],{"class":287},[228,39178,39179],{"class":238},".block3(x)\n",[228,39181,39182,39184,39186,39188],{"class":230,"line":17019},[228,39183,31216],{"class":238},[228,39185,284],{"class":234},[228,39187,30938],{"class":287},[228,39189,39190],{"class":238},".block4(x)\n",[228,39192,39193,39195,39197,39199],{"class":230,"line":17024},[228,39194,31216],{"class":238},[228,39196,284],{"class":234},[228,39198,30938],{"class":287},[228,39200,39201],{"class":238},".block5(x)\n",[228,39203,39204,39206,39208,39210],{"class":230,"line":17029},[228,39205,31216],{"class":238},[228,39207,284],{"class":234},[228,39209,30938],{"class":287},[228,39211,39212],{"class":238},".block6(x)\n",[228,39214,39215,39217],{"class":230,"line":17042},[228,39216,14867],{"class":234},[228,39218,31324],{"class":238},[228,39220,39221],{"class":230,"line":17047},[228,39222,2514],{"emptyLinePlaceholder":157},[228,39224,39225],{"class":230,"line":32748},[228,39226,39227],{"class":297},"# 验证模型\n",[228,39229,39230,39232,39234,39236,39239],{"class":230,"line":32754},[228,39231,1645],{"class":234},[228,39233,31335],{"class":287},[228,39235,3063],{"class":234},[228,39237,39238],{"class":343},"'__main__'",[228,39240,3853],{"class":238},[228,39242,39243,39245,39247,39249,39251,39253,39255,39257,39259],{"class":230,"line":32760},[228,39244,31352],{"class":238},[228,39246,284],{"class":234},[228,39248,30566],{"class":238},[228,39250,31359],{"class":343},[228,39252,1818],{"class":234},[228,39254,31364],{"class":238},[228,39256,1815],{"class":234},[228,39258,30591],{"class":343},[228,39260,245],{"class":238},[228,39262,39263,39265],{"class":230,"line":32766},[228,39264,31414],{"class":287},[228,39266,30600],{"class":238},[228,39268,39269,39271,39273],{"class":230,"line":32772},[228,39270,31404],{"class":238},[228,39272,284],{"class":234},[228,39274,39275],{"class":238},"VGG16().to(device)\n",[228,39277,39278,39280,39282,39284,39286,39288,39290,39292],{"class":230,"line":32783},[228,39279,31414],{"class":287},[228,39281,31417],{"class":238},[228,39283,456],{"class":287},[228,39285,616],{"class":238},[228,39287,31616],{"class":287},[228,39289,616],{"class":238},[228,39291,31616],{"class":287},[228,39293,31430],{"class":238},[183,39295,39296],{"start":142},[186,39297,39298],{},"训练代码",[19,39300,39301],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,39303,39304],{},"解决方式:",[19,39306,39307],{},"①权重初始化",[220,39309,39311],{"className":30493,"code":39310,"language":30495,"meta":141,"style":141},"# 权重初始化,保证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",[30,39312,39313,39318,39323,39335,39340,39348,39353,39366,39371,39385,39390,39399,39404,39413,39418,39423,39436,39441,39455],{"__ignoreMap":141},[228,39314,39315],{"class":230,"line":231},[228,39316,39317],{"class":297},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[228,39319,39320],{"class":230,"line":142},[228,39321,39322],{"class":297},"# 循环遍历模型\n",[228,39324,39325,39327,39329,39331,39333],{"class":230,"line":1293},[228,39326,3139],{"class":234},[228,39328,38983],{"class":238},[228,39330,26159],{"class":234},[228,39332,38988],{"class":287},[228,39334,38991],{"class":238},[228,39336,39337],{"class":230,"line":1308},[228,39338,39339],{"class":297},"    # print(m)\n",[228,39341,39342,39344,39346],{"class":230,"line":1314},[228,39343,3215],{"class":234},[228,39345,39003],{"class":287},[228,39347,39006],{"class":238},[228,39349,39350],{"class":230,"line":1328},[228,39351,39352],{"class":297},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[228,39354,39355,39358,39360,39362,39364],{"class":230,"line":1334},[228,39356,39357],{"class":238},"        nn.init.kaiming_normal_(m.weight,",[228,39359,39019],{"class":5331},[228,39361,284],{"class":234},[228,39363,39024],{"class":343},[228,39365,245],{"class":238},[228,39367,39368],{"class":230,"line":1425},[228,39369,39370],{"class":297},"        # 判断b参数是否存在\n",[228,39372,39373,39375,39377,39379,39381,39383],{"class":230,"line":1431},[228,39374,2611],{"class":234},[228,39376,39039],{"class":238},[228,39378,39042],{"class":234},[228,39380,39045],{"class":234},[228,39382,39048],{"class":287},[228,39384,3853],{"class":238},[228,39386,39387],{"class":230,"line":1443},[228,39388,39389],{"class":297},"            # 如果参数不存在的化初始化b=0\n",[228,39391,39392,39395,39397],{"class":230,"line":1726},[228,39393,39394],{"class":238},"            nn.init.constant_(m.bias,",[228,39396,430],{"class":287},[228,39398,245],{"class":238},[228,39400,39401],{"class":230,"line":1731},[228,39402,39403],{"class":297},"    # 全连接层初始化\n",[228,39405,39406,39409,39411],{"class":230,"line":1737},[228,39407,39408],{"class":234},"    elif",[228,39410,39003],{"class":287},[228,39412,39079],{"class":238},[228,39414,39415],{"class":230,"line":1742},[228,39416,39417],{"class":297},"        # 这个初始化方法是利用的是正太分布的方式\n",[228,39419,39420],{"class":230,"line":1756},[228,39421,39422],{"class":297},"        # 均值为0，方差为0.01\n",[228,39424,39425,39428,39430,39432,39434],{"class":230,"line":1761},[228,39426,39427],{"class":238},"        nn.init.normal_(m.weight,",[228,39429,430],{"class":287},[228,39431,616],{"class":238},[228,39433,39101],{"class":287},[228,39435,245],{"class":238},[228,39437,39438],{"class":230,"line":1767},[228,39439,39440],{"class":297},"        # 初始化b参数\n",[228,39442,39443,39445,39447,39449,39451,39453],{"class":230,"line":1788},[228,39444,2611],{"class":234},[228,39446,39039],{"class":238},[228,39448,39042],{"class":234},[228,39450,39045],{"class":234},[228,39452,39048],{"class":287},[228,39454,3853],{"class":238},[228,39456,39457,39459,39461],{"class":230,"line":1793},[228,39458,39394],{"class":238},[228,39460,430],{"class":287},[228,39462,245],{"class":238},[19,39464,39465],{},"②尽可能地增加批次",[19,39467,39468],{},"训练完整代码：",[220,39470,39471],{"className":30493,"code":38014,"language":30495,"meta":141,"style":141},[30,39472,39473,39479,39489,39499,39509,39513,39529,39537,39555,39559,39563,39573,39609,39613,39649,39653,39681,39685,39689,39699,39735,39739,39775,39779,39807,39811,39815,39825,39861,39865,39901,39905,39941,39945,39973,39977,39981,39991,40027,40031,40067,40071,40107,40111,40139,40143,40147,40157,40193,40197,40233,40237,40273,40277,40305,40309,40313,40323,40327,40331,40335,40355,40359,40371,40375,40387,40391,40395,40399,40403,40415,40419,40427,40431,40443,40447,40461,40465,40473,40477,40485,40489,40493,40505,40509,40523,40531,40535,40539,40547,40557,40567,40577,40587,40597,40607,40613,40617,40621,40633,40653,40659,40667],{"__ignoreMap":141},[228,39474,39475,39477],{"class":230,"line":231},[228,39476,30507],{"class":234},[228,39478,30510],{"class":238},[228,39480,39481,39483,39485,39487],{"class":230,"line":142},[228,39482,30852],{"class":234},[228,39484,38029],{"class":238},[228,39486,30507],{"class":234},[228,39488,38034],{"class":238},[228,39490,39491,39493,39495,39497],{"class":230,"line":1293},[228,39492,30852],{"class":234},[228,39494,30855],{"class":238},[228,39496,30507],{"class":234},[228,39498,30860],{"class":238},[228,39500,39501,39503,39505,39507],{"class":230,"line":1308},[228,39502,30852],{"class":234},[228,39504,30872],{"class":238},[228,39506,30507],{"class":234},[228,39508,30877],{"class":238},[228,39510,39511],{"class":230,"line":1314},[228,39512,2514],{"emptyLinePlaceholder":157},[228,39514,39515,39517,39519,39521,39523,39525,39527],{"class":230,"line":1328},[228,39516,14809],{"class":234},[228,39518,38065],{"class":2077},[228,39520,239],{"class":238},[228,39522,30893],{"class":2077},[228,39524,796],{"class":238},[228,39526,30898],{"class":2077},[228,39528,30901],{"class":238},[228,39530,39531,39533,39535],{"class":230,"line":1334},[228,39532,30916],{"class":234},[228,39534,30919],{"class":287},[228,39536,30922],{"class":238},[228,39538,39539,39541,39543,39545,39547,39549,39551,39553],{"class":230,"line":1425},[228,39540,30932],{"class":287},[228,39542,239],{"class":238},[228,39544,38092],{"class":287},[228,39546,12550],{"class":238},[228,39548,30938],{"class":287},[228,39550,30941],{"class":238},[228,39552,30944],{"class":287},[228,39554,2090],{"class":238},[228,39556,39557],{"class":230,"line":1431},[228,39558,38107],{"class":297},[228,39560,39561],{"class":230,"line":1443},[228,39562,38112],{"class":297},[228,39564,39565,39567,39569,39571],{"class":230,"line":1726},[228,39566,30960],{"class":287},[228,39568,38119],{"class":238},[228,39570,284],{"class":234},[228,39572,38124],{"class":238},[228,39574,39575,39577,39579,39581,39583,39585,39587,39589,39591,39593,39595,39597,39599,39601,39603,39605,39607],{"class":230,"line":1731},[228,39576,38129],{"class":238},[228,39578,30971],{"class":5331},[228,39580,284],{"class":234},[228,39582,456],{"class":287},[228,39584,616],{"class":238},[228,39586,30980],{"class":5331},[228,39588,284],{"class":234},[228,39590,442],{"class":287},[228,39592,616],{"class":238},[228,39594,30989],{"class":5331},[228,39596,284],{"class":234},[228,39598,310],{"class":287},[228,39600,616],{"class":238},[228,39602,30998],{"class":5331},[228,39604,284],{"class":234},[228,39606,456],{"class":287},[228,39608,38162],{"class":238},[228,39610,39611],{"class":230,"line":1737},[228,39612,38167],{"class":238},[228,39614,39615,39617,39619,39621,39623,39625,39627,39629,39631,39633,39635,39637,39639,39641,39643,39645,39647],{"class":230,"line":1742},[228,39616,38129],{"class":238},[228,39618,30971],{"class":5331},[228,39620,284],{"class":234},[228,39622,442],{"class":287},[228,39624,616],{"class":238},[228,39626,30980],{"class":5331},[228,39628,284],{"class":234},[228,39630,442],{"class":287},[228,39632,616],{"class":238},[228,39634,30989],{"class":5331},[228,39636,284],{"class":234},[228,39638,310],{"class":287},[228,39640,616],{"class":238},[228,39642,30998],{"class":5331},[228,39644,284],{"class":234},[228,39646,456],{"class":287},[228,39648,38162],{"class":238},[228,39650,39651],{"class":230,"line":1756},[228,39652,38167],{"class":238},[228,39654,39655,39657,39659,39661,39663,39665,39667,39669,39671,39673,39675,39677,39679],{"class":230,"line":1761},[228,39656,38212],{"class":238},[228,39658,30989],{"class":5331},[228,39660,284],{"class":234},[228,39662,316],{"class":287},[228,39664,616],{"class":238},[228,39666,31044],{"class":5331},[228,39668,284],{"class":234},[228,39670,316],{"class":287},[228,39672,616],{"class":238},[228,39674,30998],{"class":5331},[228,39676,284],{"class":234},[228,39678,430],{"class":287},[228,39680,245],{"class":238},[228,39682,39683],{"class":230,"line":1767},[228,39684,38241],{"class":238},[228,39686,39687],{"class":230,"line":1788},[228,39688,38246],{"class":297},[228,39690,39691,39693,39695,39697],{"class":230,"line":1793},[228,39692,30960],{"class":287},[228,39694,38253],{"class":238},[228,39696,284],{"class":234},[228,39698,38124],{"class":238},[228,39700,39701,39703,39705,39707,39709,39711,39713,39715,39717,39719,39721,39723,39725,39727,39729,39731,39733],{"class":230,"line":1807},[228,39702,38129],{"class":238},[228,39704,30971],{"class":5331},[228,39706,284],{"class":234},[228,39708,442],{"class":287},[228,39710,616],{"class":238},[228,39712,30980],{"class":5331},[228,39714,284],{"class":234},[228,39716,32185],{"class":287},[228,39718,616],{"class":238},[228,39720,30989],{"class":5331},[228,39722,284],{"class":234},[228,39724,310],{"class":287},[228,39726,616],{"class":238},[228,39728,30998],{"class":5331},[228,39730,284],{"class":234},[228,39732,456],{"class":287},[228,39734,38162],{"class":238},[228,39736,39737],{"class":230,"line":1812},[228,39738,38167],{"class":238},[228,39740,39741,39743,39745,39747,39749,39751,39753,39755,39757,39759,39761,39763,39765,39767,39769,39771,39773],{"class":230,"line":1841},[228,39742,38129],{"class":238},[228,39744,30971],{"class":5331},[228,39746,284],{"class":234},[228,39748,32185],{"class":287},[228,39750,616],{"class":238},[228,39752,30980],{"class":5331},[228,39754,284],{"class":234},[228,39756,32185],{"class":287},[228,39758,616],{"class":238},[228,39760,30989],{"class":5331},[228,39762,284],{"class":234},[228,39764,310],{"class":287},[228,39766,616],{"class":238},[228,39768,30998],{"class":5331},[228,39770,284],{"class":234},[228,39772,456],{"class":287},[228,39774,38162],{"class":238},[228,39776,39777],{"class":230,"line":1846},[228,39778,38167],{"class":238},[228,39780,39781,39783,39785,39787,39789,39791,39793,39795,39797,39799,39801,39803,39805],{"class":230,"line":1863},[228,39782,38212],{"class":238},[228,39784,30989],{"class":5331},[228,39786,284],{"class":234},[228,39788,316],{"class":287},[228,39790,616],{"class":238},[228,39792,31044],{"class":5331},[228,39794,284],{"class":234},[228,39796,316],{"class":287},[228,39798,616],{"class":238},[228,39800,30998],{"class":5331},[228,39802,284],{"class":234},[228,39804,430],{"class":287},[228,39806,245],{"class":238},[228,39808,39809],{"class":230,"line":1868},[228,39810,38241],{"class":238},[228,39812,39813],{"class":230,"line":1873},[228,39814,38374],{"class":297},[228,39816,39817,39819,39821,39823],{"class":230,"line":1878},[228,39818,30960],{"class":287},[228,39820,38381],{"class":238},[228,39822,284],{"class":234},[228,39824,38124],{"class":238},[228,39826,39827,39829,39831,39833,39835,39837,39839,39841,39843,39845,39847,39849,39851,39853,39855,39857,39859],{"class":230,"line":1892},[228,39828,38129],{"class":238},[228,39830,30971],{"class":5331},[228,39832,284],{"class":234},[228,39834,32185],{"class":287},[228,39836,616],{"class":238},[228,39838,30980],{"class":5331},[228,39840,284],{"class":234},[228,39842,34985],{"class":287},[228,39844,616],{"class":238},[228,39846,30989],{"class":5331},[228,39848,284],{"class":234},[228,39850,310],{"class":287},[228,39852,616],{"class":238},[228,39854,30998],{"class":5331},[228,39856,284],{"class":234},[228,39858,456],{"class":287},[228,39860,38162],{"class":238},[228,39862,39863],{"class":230,"line":1897},[228,39864,38167],{"class":238},[228,39866,39867,39869,39871,39873,39875,39877,39879,39881,39883,39885,39887,39889,39891,39893,39895,39897,39899],{"class":230,"line":2691},[228,39868,38129],{"class":238},[228,39870,30971],{"class":5331},[228,39872,284],{"class":234},[228,39874,34985],{"class":287},[228,39876,616],{"class":238},[228,39878,30980],{"class":5331},[228,39880,284],{"class":234},[228,39882,34985],{"class":287},[228,39884,616],{"class":238},[228,39886,30989],{"class":5331},[228,39888,284],{"class":234},[228,39890,310],{"class":287},[228,39892,616],{"class":238},[228,39894,30998],{"class":5331},[228,39896,284],{"class":234},[228,39898,456],{"class":287},[228,39900,38162],{"class":238},[228,39902,39903],{"class":230,"line":2705},[228,39904,38167],{"class":238},[228,39906,39907,39909,39911,39913,39915,39917,39919,39921,39923,39925,39927,39929,39931,39933,39935,39937,39939],{"class":230,"line":2713},[228,39908,38129],{"class":238},[228,39910,30971],{"class":5331},[228,39912,284],{"class":234},[228,39914,34985],{"class":287},[228,39916,616],{"class":238},[228,39918,30980],{"class":5331},[228,39920,284],{"class":234},[228,39922,34985],{"class":287},[228,39924,616],{"class":238},[228,39926,30989],{"class":5331},[228,39928,284],{"class":234},[228,39930,310],{"class":287},[228,39932,616],{"class":238},[228,39934,30998],{"class":5331},[228,39936,284],{"class":234},[228,39938,456],{"class":287},[228,39940,38162],{"class":238},[228,39942,39943],{"class":230,"line":2718},[228,39944,38167],{"class":238},[228,39946,39947,39949,39951,39953,39955,39957,39959,39961,39963,39965,39967,39969,39971],{"class":230,"line":2724},[228,39948,38212],{"class":238},[228,39950,30989],{"class":5331},[228,39952,284],{"class":234},[228,39954,316],{"class":287},[228,39956,616],{"class":238},[228,39958,31044],{"class":5331},[228,39960,284],{"class":234},[228,39962,316],{"class":287},[228,39964,616],{"class":238},[228,39966,30998],{"class":5331},[228,39968,284],{"class":234},[228,39970,430],{"class":287},[228,39972,245],{"class":238},[228,39974,39975],{"class":230,"line":2730},[228,39976,38241],{"class":238},[228,39978,39979],{"class":230,"line":2735},[228,39980,38542],{"class":297},[228,39982,39983,39985,39987,39989],{"class":230,"line":8063},[228,39984,30960],{"class":287},[228,39986,38549],{"class":238},[228,39988,284],{"class":234},[228,39990,38124],{"class":238},[228,39992,39993,39995,39997,39999,40001,40003,40005,40007,40009,40011,40013,40015,40017,40019,40021,40023,40025],{"class":230,"line":8087},[228,39994,38129],{"class":238},[228,39996,30971],{"class":5331},[228,39998,284],{"class":234},[228,40000,34985],{"class":287},[228,40002,616],{"class":238},[228,40004,30980],{"class":5331},[228,40006,284],{"class":234},[228,40008,38572],{"class":287},[228,40010,616],{"class":238},[228,40012,30989],{"class":5331},[228,40014,284],{"class":234},[228,40016,310],{"class":287},[228,40018,616],{"class":238},[228,40020,30998],{"class":5331},[228,40022,284],{"class":234},[228,40024,456],{"class":287},[228,40026,38162],{"class":238},[228,40028,40029],{"class":230,"line":8092},[228,40030,38167],{"class":238},[228,40032,40033,40035,40037,40039,40041,40043,40045,40047,40049,40051,40053,40055,40057,40059,40061,40063,40065],{"class":230,"line":8098},[228,40034,38129],{"class":238},[228,40036,30971],{"class":5331},[228,40038,284],{"class":234},[228,40040,38572],{"class":287},[228,40042,616],{"class":238},[228,40044,30980],{"class":5331},[228,40046,284],{"class":234},[228,40048,38572],{"class":287},[228,40050,616],{"class":238},[228,40052,30989],{"class":5331},[228,40054,284],{"class":234},[228,40056,310],{"class":287},[228,40058,616],{"class":238},[228,40060,30998],{"class":5331},[228,40062,284],{"class":234},[228,40064,456],{"class":287},[228,40066,38162],{"class":238},[228,40068,40069],{"class":230,"line":8125},[228,40070,38167],{"class":238},[228,40072,40073,40075,40077,40079,40081,40083,40085,40087,40089,40091,40093,40095,40097,40099,40101,40103,40105],{"class":230,"line":8130},[228,40074,38129],{"class":238},[228,40076,30971],{"class":5331},[228,40078,284],{"class":234},[228,40080,38572],{"class":287},[228,40082,616],{"class":238},[228,40084,30980],{"class":5331},[228,40086,284],{"class":234},[228,40088,38572],{"class":287},[228,40090,616],{"class":238},[228,40092,30989],{"class":5331},[228,40094,284],{"class":234},[228,40096,310],{"class":287},[228,40098,616],{"class":238},[228,40100,30998],{"class":5331},[228,40102,284],{"class":234},[228,40104,456],{"class":287},[228,40106,38162],{"class":238},[228,40108,40109],{"class":230,"line":8136},[228,40110,38167],{"class":238},[228,40112,40113,40115,40117,40119,40121,40123,40125,40127,40129,40131,40133,40135,40137],{"class":230,"line":8148},[228,40114,38212],{"class":238},[228,40116,30989],{"class":5331},[228,40118,284],{"class":234},[228,40120,316],{"class":287},[228,40122,616],{"class":238},[228,40124,31044],{"class":5331},[228,40126,284],{"class":234},[228,40128,316],{"class":287},[228,40130,616],{"class":238},[228,40132,30998],{"class":5331},[228,40134,284],{"class":234},[228,40136,430],{"class":287},[228,40138,245],{"class":238},[228,40140,40141],{"class":230,"line":8160},[228,40142,38241],{"class":238},[228,40144,40145],{"class":230,"line":8172},[228,40146,38711],{"class":297},[228,40148,40149,40151,40153,40155],{"class":230,"line":9831},[228,40150,30960],{"class":287},[228,40152,38718],{"class":238},[228,40154,284],{"class":234},[228,40156,38124],{"class":238},[228,40158,40159,40161,40163,40165,40167,40169,40171,40173,40175,40177,40179,40181,40183,40185,40187,40189,40191],{"class":230,"line":9856},[228,40160,38129],{"class":238},[228,40162,30971],{"class":5331},[228,40164,284],{"class":234},[228,40166,38572],{"class":287},[228,40168,616],{"class":238},[228,40170,30980],{"class":5331},[228,40172,284],{"class":234},[228,40174,38572],{"class":287},[228,40176,616],{"class":238},[228,40178,30989],{"class":5331},[228,40180,284],{"class":234},[228,40182,310],{"class":287},[228,40184,616],{"class":238},[228,40186,30998],{"class":5331},[228,40188,284],{"class":234},[228,40190,456],{"class":287},[228,40192,38162],{"class":238},[228,40194,40195],{"class":230,"line":9879},[228,40196,38167],{"class":238},[228,40198,40199,40201,40203,40205,40207,40209,40211,40213,40215,40217,40219,40221,40223,40225,40227,40229,40231],{"class":230,"line":9903},[228,40200,38129],{"class":238},[228,40202,30971],{"class":5331},[228,40204,284],{"class":234},[228,40206,38572],{"class":287},[228,40208,616],{"class":238},[228,40210,30980],{"class":5331},[228,40212,284],{"class":234},[228,40214,38572],{"class":287},[228,40216,616],{"class":238},[228,40218,30989],{"class":5331},[228,40220,284],{"class":234},[228,40222,310],{"class":287},[228,40224,616],{"class":238},[228,40226,30998],{"class":5331},[228,40228,284],{"class":234},[228,40230,456],{"class":287},[228,40232,38162],{"class":238},[228,40234,40235],{"class":230,"line":9908},[228,40236,38167],{"class":238},[228,40238,40239,40241,40243,40245,40247,40249,40251,40253,40255,40257,40259,40261,40263,40265,40267,40269,40271],{"class":230,"line":9913},[228,40240,38129],{"class":238},[228,40242,30971],{"class":5331},[228,40244,284],{"class":234},[228,40246,38572],{"class":287},[228,40248,616],{"class":238},[228,40250,30980],{"class":5331},[228,40252,284],{"class":234},[228,40254,38572],{"class":287},[228,40256,616],{"class":238},[228,40258,30989],{"class":5331},[228,40260,284],{"class":234},[228,40262,310],{"class":287},[228,40264,616],{"class":238},[228,40266,30998],{"class":5331},[228,40268,284],{"class":234},[228,40270,456],{"class":287},[228,40272,38162],{"class":238},[228,40274,40275],{"class":230,"line":9918},[228,40276,38167],{"class":238},[228,40278,40279,40281,40283,40285,40287,40289,40291,40293,40295,40297,40299,40301,40303],{"class":230,"line":9927},[228,40280,38212],{"class":238},[228,40282,30989],{"class":5331},[228,40284,284],{"class":234},[228,40286,316],{"class":287},[228,40288,616],{"class":238},[228,40290,31044],{"class":5331},[228,40292,284],{"class":234},[228,40294,316],{"class":287},[228,40296,616],{"class":238},[228,40298,30998],{"class":5331},[228,40300,284],{"class":234},[228,40302,430],{"class":287},[228,40304,245],{"class":238},[228,40306,40307],{"class":230,"line":9932},[228,40308,38241],{"class":238},[228,40310,40311],{"class":230,"line":9938},[228,40312,38879],{"class":297},[228,40314,40315,40317,40319,40321],{"class":230,"line":9959},[228,40316,30960],{"class":287},[228,40318,38886],{"class":238},[228,40320,284],{"class":234},[228,40322,38124],{"class":238},[228,40324,40325],{"class":230,"line":9965},[228,40326,38895],{"class":297},[228,40328,40329],{"class":230,"line":9979},[228,40330,38900],{"class":297},[228,40332,40333],{"class":230,"line":9985},[228,40334,38905],{"class":238},[228,40336,40337,40339,40341,40343,40345,40347,40349,40351,40353],{"class":230,"line":10012},[228,40338,38910],{"class":238},[228,40340,607],{"class":287},[228,40342,693],{"class":234},[228,40344,607],{"class":287},[228,40346,693],{"class":234},[228,40348,38572],{"class":287},[228,40350,616],{"class":238},[228,40352,34985],{"class":287},[228,40354,38162],{"class":238},[228,40356,40357],{"class":230,"line":10021},[228,40358,38167],{"class":238},[228,40360,40361,40363,40365,40367,40369],{"class":230,"line":10027},[228,40362,38910],{"class":238},[228,40364,34985],{"class":287},[228,40366,616],{"class":238},[228,40368,32185],{"class":287},[228,40370,38162],{"class":238},[228,40372,40373],{"class":230,"line":10035},[228,40374,38167],{"class":238},[228,40376,40377,40379,40381,40383,40385],{"class":230,"line":10040},[228,40378,38910],{"class":238},[228,40380,32185],{"class":287},[228,40382,616],{"class":238},[228,40384,684],{"class":287},[228,40386,245],{"class":238},[228,40388,40389],{"class":230,"line":16719},[228,40390,38241],{"class":238},[228,40392,40393],{"class":230,"line":16725},[228,40394,2514],{"emptyLinePlaceholder":157},[228,40396,40397],{"class":230,"line":16748},[228,40398,38971],{"class":297},[228,40400,40401],{"class":230,"line":16754},[228,40402,38976],{"class":297},[228,40404,40405,40407,40409,40411,40413],{"class":230,"line":16777},[228,40406,3517],{"class":234},[228,40408,38983],{"class":238},[228,40410,26159],{"class":234},[228,40412,38988],{"class":287},[228,40414,38991],{"class":238},[228,40416,40417],{"class":230,"line":16791},[228,40418,38996],{"class":297},[228,40420,40421,40423,40425],{"class":230,"line":16811},[228,40422,4756],{"class":234},[228,40424,39003],{"class":287},[228,40426,39006],{"class":238},[228,40428,40429],{"class":230,"line":16817},[228,40430,39011],{"class":297},[228,40432,40433,40435,40437,40439,40441],{"class":230,"line":16828},[228,40434,39016],{"class":238},[228,40436,39019],{"class":5331},[228,40438,284],{"class":234},[228,40440,39024],{"class":343},[228,40442,245],{"class":238},[228,40444,40445],{"class":230,"line":16851},[228,40446,39031],{"class":297},[228,40448,40449,40451,40453,40455,40457,40459],{"class":230,"line":16873},[228,40450,39036],{"class":234},[228,40452,39039],{"class":238},[228,40454,39042],{"class":234},[228,40456,39045],{"class":234},[228,40458,39048],{"class":287},[228,40460,3853],{"class":238},[228,40462,40463],{"class":230,"line":16878},[228,40464,39055],{"class":297},[228,40466,40467,40469,40471],{"class":230,"line":16884},[228,40468,39060],{"class":238},[228,40470,430],{"class":287},[228,40472,245],{"class":238},[228,40474,40475],{"class":230,"line":16898},[228,40476,39069],{"class":297},[228,40478,40479,40481,40483],{"class":230,"line":16911},[228,40480,39074],{"class":234},[228,40482,39003],{"class":287},[228,40484,39079],{"class":238},[228,40486,40487],{"class":230,"line":16916},[228,40488,39084],{"class":297},[228,40490,40491],{"class":230,"line":16930},[228,40492,39089],{"class":297},[228,40494,40495,40497,40499,40501,40503],{"class":230,"line":16935},[228,40496,39094],{"class":238},[228,40498,430],{"class":287},[228,40500,616],{"class":238},[228,40502,39101],{"class":287},[228,40504,245],{"class":238},[228,40506,40507],{"class":230,"line":16941},[228,40508,39108],{"class":297},[228,40510,40511,40513,40515,40517,40519,40521],{"class":230,"line":16946},[228,40512,39036],{"class":234},[228,40514,39039],{"class":238},[228,40516,39042],{"class":234},[228,40518,39045],{"class":234},[228,40520,39048],{"class":287},[228,40522,3853],{"class":238},[228,40524,40525,40527,40529],{"class":230,"line":16960},[228,40526,39060],{"class":238},[228,40528,430],{"class":287},[228,40530,245],{"class":238},[228,40532,40533],{"class":230,"line":16965},[228,40534,2514],{"emptyLinePlaceholder":157},[228,40536,40537],{"class":230,"line":16970},[228,40538,35280],{"class":297},[228,40540,40541,40543,40545],{"class":230,"line":16984},[228,40542,30916],{"class":234},[228,40544,31208],{"class":2077},[228,40546,31211],{"class":238},[228,40548,40549,40551,40553,40555],{"class":230,"line":16996},[228,40550,31216],{"class":238},[228,40552,284],{"class":234},[228,40554,30938],{"class":287},[228,40556,39157],{"class":238},[228,40558,40559,40561,40563,40565],{"class":230,"line":17001},[228,40560,31216],{"class":238},[228,40562,284],{"class":234},[228,40564,30938],{"class":287},[228,40566,39168],{"class":238},[228,40568,40569,40571,40573,40575],{"class":230,"line":17014},[228,40570,31216],{"class":238},[228,40572,284],{"class":234},[228,40574,30938],{"class":287},[228,40576,39179],{"class":238},[228,40578,40579,40581,40583,40585],{"class":230,"line":17019},[228,40580,31216],{"class":238},[228,40582,284],{"class":234},[228,40584,30938],{"class":287},[228,40586,39190],{"class":238},[228,40588,40589,40591,40593,40595],{"class":230,"line":17024},[228,40590,31216],{"class":238},[228,40592,284],{"class":234},[228,40594,30938],{"class":287},[228,40596,39201],{"class":238},[228,40598,40599,40601,40603,40605],{"class":230,"line":17029},[228,40600,31216],{"class":238},[228,40602,284],{"class":234},[228,40604,30938],{"class":287},[228,40606,39212],{"class":238},[228,40608,40609,40611],{"class":230,"line":17042},[228,40610,14867],{"class":234},[228,40612,31324],{"class":238},[228,40614,40615],{"class":230,"line":17047},[228,40616,2514],{"emptyLinePlaceholder":157},[228,40618,40619],{"class":230,"line":32748},[228,40620,39227],{"class":297},[228,40622,40623,40625,40627,40629,40631],{"class":230,"line":32754},[228,40624,1645],{"class":234},[228,40626,31335],{"class":287},[228,40628,3063],{"class":234},[228,40630,39238],{"class":343},[228,40632,3853],{"class":238},[228,40634,40635,40637,40639,40641,40643,40645,40647,40649,40651],{"class":230,"line":32760},[228,40636,31352],{"class":238},[228,40638,284],{"class":234},[228,40640,30566],{"class":238},[228,40642,31359],{"class":343},[228,40644,1818],{"class":234},[228,40646,31364],{"class":238},[228,40648,1815],{"class":234},[228,40650,30591],{"class":343},[228,40652,245],{"class":238},[228,40654,40655,40657],{"class":230,"line":32766},[228,40656,31414],{"class":287},[228,40658,30600],{"class":238},[228,40660,40661,40663,40665],{"class":230,"line":32772},[228,40662,31404],{"class":238},[228,40664,284],{"class":234},[228,40666,39275],{"class":238},[228,40668,40669,40671,40673,40675,40677,40679,40681,40683],{"class":230,"line":32783},[228,40670,31414],{"class":287},[228,40672,31417],{"class":238},[228,40674,456],{"class":287},[228,40676,616],{"class":238},[228,40678,31616],{"class":287},[228,40680,616],{"class":238},[228,40682,31616],{"class":287},[228,40684,31430],{"class":238},[183,40686,40687],{"start":1293},[186,40688,40689],{},"测试代码",[220,40691,40693],{"className":30493,"code":40692,"language":30495,"meta":141,"style":141},"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",[30,40694,40695,40701,40711,40721,40725,40735,40746,40750,40754,40758,40766,40782,40792,40808,40818,40832,40836,40846,40856,40866,40872,40876,40880,40888,40892,40908,40916,40920,40924,40932,40940,40944,40948,40952,40956,40962,40966,40976,40984,40992,40996,41000,41004,41012,41016,41032,41036,41040,41044,41056,41060,41072,41076,41080,41092,41096,41106,41110,41114,41126,41130,41139,41143,41147,41155,41159,41167,41171,41175,41179,41183,41187,41203,41211,41215,41219,41267,41273,41277,41287,41295,41303,41307,41311,41315,41319,41327,41331,41347,41351,41359,41367],{"__ignoreMap":141},[228,40696,40697,40699],{"class":230,"line":231},[228,40698,30507],{"class":234},[228,40700,30510],{"class":238},[228,40702,40703,40705,40707,40709],{"class":230,"line":142},[228,40704,30507],{"class":234},[228,40706,31530],{"class":238},[228,40708,31498],{"class":234},[228,40710,31535],{"class":238},[228,40712,40713,40715,40717,40719],{"class":230,"line":1293},[228,40714,30852],{"class":234},[228,40716,31513],{"class":238},[228,40718,30507],{"class":234},[228,40720,31518],{"class":238},[228,40722,40723],{"class":230,"line":1308},[228,40724,34037],{"class":297},[228,40726,40727,40729,40731,40733],{"class":230,"line":1314},[228,40728,30852],{"class":234},[228,40730,31483],{"class":238},[228,40732,30507],{"class":234},[228,40734,31488],{"class":238},[228,40736,40737,40739,40741,40743],{"class":230,"line":1328},[228,40738,30852],{"class":234},[228,40740,32029],{"class":238},[228,40742,30507],{"class":234},[228,40744,40745],{"class":287}," VGG16\n",[228,40747,40748],{"class":230,"line":1334},[228,40749,2514],{"emptyLinePlaceholder":157},[228,40751,40752],{"class":230,"line":1425},[228,40753,2514],{"emptyLinePlaceholder":157},[228,40755,40756],{"class":230,"line":1431},[228,40757,34066],{"class":297},[228,40759,40760,40762,40764],{"class":230,"line":1443},[228,40761,32062],{"class":234},[228,40763,34073],{"class":2077},[228,40765,32068],{"class":238},[228,40767,40768,40770,40772,40774,40776,40778,40780],{"class":230,"line":1726},[228,40769,34080],{"class":238},[228,40771,284],{"class":234},[228,40773,31570],{"class":238},[228,40775,31573],{"class":5331},[228,40777,284],{"class":234},[228,40779,31578],{"class":343},[228,40781,31581],{"class":238},[228,40783,40784,40786,40788,40790],{"class":230,"line":1731},[228,40785,34097],{"class":5331},[228,40787,284],{"class":234},[228,40789,34102],{"class":287},[228,40791,31581],{"class":238},[228,40793,40794,40796,40798,40800,40802,40804,40806],{"class":230,"line":1737},[228,40795,34109],{"class":5331},[228,40797,284],{"class":234},[228,40799,31608],{"class":238},[228,40801,31611],{"class":5331},[228,40803,284],{"class":234},[228,40805,31616],{"class":287},[228,40807,31619],{"class":238},[228,40809,40810,40812,40814,40816],{"class":230,"line":1742},[228,40811,34126],{"class":5331},[228,40813,284],{"class":234},[228,40815,31591],{"class":287},[228,40817,245],{"class":238},[228,40819,40820,40822,40824,40826,40828,40830],{"class":230,"line":1756},[228,40821,34137],{"class":238},[228,40823,284],{"class":234},[228,40825,31649],{"class":238},[228,40827,31652],{"class":5331},[228,40829,284],{"class":234},[228,40831,34148],{"class":238},[228,40833,40834],{"class":230,"line":1761},[228,40835,34153],{"class":297},[228,40837,40838,40840,40842,40844],{"class":230,"line":1767},[228,40839,34158],{"class":5331},[228,40841,284],{"class":234},[228,40843,456],{"class":287},[228,40845,31581],{"class":238},[228,40847,40848,40850,40852,40854],{"class":230,"line":1788},[228,40849,34169],{"class":5331},[228,40851,284],{"class":234},[228,40853,31591],{"class":287},[228,40855,31581],{"class":238},[228,40857,40858,40860,40862,40864],{"class":230,"line":1793},[228,40859,34180],{"class":5331},[228,40861,284],{"class":234},[228,40863,430],{"class":287},[228,40865,245],{"class":238},[228,40867,40868,40870],{"class":230,"line":1807},[228,40869,4204],{"class":234},[228,40871,34193],{"class":238},[228,40873,40874],{"class":230,"line":1812},[228,40875,2514],{"emptyLinePlaceholder":157},[228,40877,40878],{"class":230,"line":1841},[228,40879,34202],{"class":297},[228,40881,40882,40884,40886],{"class":230,"line":1846},[228,40883,32062],{"class":234},[228,40885,34209],{"class":2077},[228,40887,34212],{"class":238},[228,40889,40890],{"class":230,"line":1863},[228,40891,34217],{"class":297},[228,40893,40894,40896,40898,40900,40902,40904,40906],{"class":230,"line":1868},[228,40895,31352],{"class":238},[228,40897,284],{"class":234},[228,40899,31359],{"class":343},[228,40901,1818],{"class":234},[228,40903,31364],{"class":238},[228,40905,1815],{"class":234},[228,40907,34234],{"class":343},[228,40909,40910,40912,40914],{"class":230,"line":1873},[228,40911,31404],{"class":238},[228,40913,284],{"class":234},[228,40915,32404],{"class":238},[228,40917,40918],{"class":230,"line":1878},[228,40919,2514],{"emptyLinePlaceholder":157},[228,40921,40922],{"class":230,"line":1892},[228,40923,34251],{"class":297},[228,40925,40926,40928,40930],{"class":230,"line":1897},[228,40927,34256],{"class":238},[228,40929,284],{"class":234},[228,40931,32457],{"class":287},[228,40933,40934,40936,40938],{"class":230,"line":2691},[228,40935,34265],{"class":238},[228,40937,284],{"class":234},[228,40939,3199],{"class":287},[228,40941,40942],{"class":230,"line":2705},[228,40943,2514],{"emptyLinePlaceholder":157},[228,40945,40946],{"class":230,"line":2713},[228,40947,34278],{"class":297},[228,40949,40950],{"class":230,"line":2718},[228,40951,34283],{"class":297},[228,40953,40954],{"class":230,"line":2724},[228,40955,34288],{"class":297},[228,40957,40958,40960],{"class":230,"line":2730},[228,40959,34293],{"class":234},[228,40961,32999],{"class":238},[228,40963,40964],{"class":230,"line":2735},[228,40965,34300],{"class":297},[228,40967,40968,40970,40972,40974],{"class":230,"line":8063},[228,40969,3517],{"class":234},[228,40971,34307],{"class":238},[228,40973,26159],{"class":234},[228,40975,34312],{"class":238},[228,40977,40978,40980,40982],{"class":230,"line":8087},[228,40979,34317],{"class":238},[228,40981,284],{"class":234},[228,40983,34322],{"class":238},[228,40985,40986,40988,40990],{"class":230,"line":8092},[228,40987,34327],{"class":238},[228,40989,284],{"class":234},[228,40991,34332],{"class":238},[228,40993,40994],{"class":230,"line":8098},[228,40995,34337],{"class":297},[228,40997,40998],{"class":230,"line":8125},[228,40999,32990],{"class":238},[228,41001,41002],{"class":230,"line":8130},[228,41003,34346],{"class":297},[228,41005,41006,41008,41010],{"class":230,"line":8136},[228,41007,32775],{"class":238},[228,41009,284],{"class":234},[228,41011,34355],{"class":238},[228,41013,41014],{"class":230,"line":8148},[228,41015,34360],{"class":297},[228,41017,41018,41020,41022,41024,41026,41028,41030],{"class":230,"line":8160},[228,41019,32792],{"class":238},[228,41021,284],{"class":234},[228,41023,32797],{"class":238},[228,41025,32800],{"class":5331},[228,41027,284],{"class":234},[228,41029,456],{"class":287},[228,41031,245],{"class":238},[228,41033,41034],{"class":230,"line":8172},[228,41035,34381],{"class":297},[228,41037,41038],{"class":230,"line":9831},[228,41039,34386],{"class":297},[228,41041,41042],{"class":230,"line":9856},[228,41043,34391],{"class":297},[228,41045,41046,41048,41050,41052,41054],{"class":230,"line":9879},[228,41047,34396],{"class":238},[228,41049,9592],{"class":234},[228,41051,32902],{"class":238},[228,41053,3063],{"class":234},[228,41055,34405],{"class":238},[228,41057,41058],{"class":230,"line":9903},[228,41059,34410],{"class":297},[228,41061,41062,41064,41066,41068,41070],{"class":230,"line":9908},[228,41063,34415],{"class":238},[228,41065,9592],{"class":234},[228,41067,34420],{"class":238},[228,41069,430],{"class":287},[228,41071,245],{"class":238},[228,41073,41074],{"class":230,"line":9913},[228,41075,2514],{"emptyLinePlaceholder":157},[228,41077,41078],{"class":230,"line":9918},[228,41079,34433],{"class":297},[228,41081,41082,41084,41086,41088,41090],{"class":230,"line":9927},[228,41083,34438],{"class":238},[228,41085,284],{"class":234},[228,41087,34443],{"class":238},[228,41089,822],{"class":234},[228,41091,34448],{"class":238},[228,41093,41094],{"class":230,"line":9932},[228,41095,34453],{"class":297},[228,41097,41098,41100,41102,41104],{"class":230,"line":9938},[228,41099,32566],{"class":287},[228,41101,239],{"class":238},[228,41103,34462],{"class":343},[228,41105,34465],{"class":238},[228,41107,41108],{"class":230,"line":9959},[228,41109,2514],{"emptyLinePlaceholder":157},[228,41111,41112],{"class":230,"line":9965},[228,41113,34474],{"class":297},[228,41115,41116,41118,41120,41122,41124],{"class":230,"line":9979},[228,41117,1645],{"class":234},[228,41119,31335],{"class":287},[228,41121,3063],{"class":234},[228,41123,31340],{"class":343},[228,41125,3853],{"class":238},[228,41127,41128],{"class":230,"line":9985},[228,41129,34491],{"class":297},[228,41131,41132,41134,41136],{"class":230,"line":10012},[228,41133,31404],{"class":238},[228,41135,284],{"class":234},[228,41137,41138],{"class":238},"VGG16()\n",[228,41140,41141],{"class":230,"line":10021},[228,41142,34504],{"class":297},[228,41144,41145],{"class":230,"line":10027},[228,41146,34509],{"class":297},[228,41148,41149,41151,41153],{"class":230,"line":10035},[228,41150,34514],{"class":238},[228,41152,34517],{"class":343},[228,41154,30612],{"class":238},[228,41156,41157],{"class":230,"line":10040},[228,41158,34524],{"class":297},[228,41160,41161,41163,41165],{"class":230,"line":16719},[228,41162,34137],{"class":238},[228,41164,284],{"class":234},[228,41166,34533],{"class":238},[228,41168,41169],{"class":230,"line":16725},[228,41170,34538],{"class":297},[228,41172,41173],{"class":230,"line":16748},[228,41174,34543],{"class":238},[228,41176,41177],{"class":230,"line":16754},[228,41178,2514],{"emptyLinePlaceholder":157},[228,41180,41181],{"class":230,"line":16777},[228,41182,34552],{"class":297},[228,41184,41185],{"class":230,"line":16791},[228,41186,34557],{"class":297},[228,41188,41189,41191,41193,41195,41197,41199,41201],{"class":230,"line":16811},[228,41190,31352],{"class":238},[228,41192,284],{"class":234},[228,41194,31359],{"class":343},[228,41196,1818],{"class":234},[228,41198,31364],{"class":238},[228,41200,1815],{"class":234},[228,41202,34234],{"class":343},[228,41204,41205,41207,41209],{"class":230,"line":16817},[228,41206,31404],{"class":238},[228,41208,284],{"class":234},[228,41210,32404],{"class":238},[228,41212,41213],{"class":230,"line":16828},[228,41214,34586],{"class":297},[228,41216,41217],{"class":230,"line":16851},[228,41218,34591],{"class":297},[228,41220,41221,41223,41225,41227,41229,41231,41233,41235,41237,41239,41241,41243,41245,41247,41249,41251,41253,41255,41257,41259,41261,41263,41265],{"class":230,"line":16873},[228,41222,34596],{"class":238},[228,41224,284],{"class":234},[228,41226,1128],{"class":238},[228,41228,34603],{"class":343},[228,41230,616],{"class":238},[228,41232,34608],{"class":343},[228,41234,616],{"class":238},[228,41236,34613],{"class":343},[228,41238,616],{"class":238},[228,41240,34618],{"class":343},[228,41242,616],{"class":238},[228,41244,34623],{"class":343},[228,41246,616],{"class":238},[228,41248,34628],{"class":343},[228,41250,616],{"class":238},[228,41252,34633],{"class":343},[228,41254,616],{"class":238},[228,41256,34638],{"class":343},[228,41258,616],{"class":238},[228,41260,34643],{"class":343},[228,41262,616],{"class":238},[228,41264,34648],{"class":343},[228,41266,33361],{"class":238},[228,41268,41269,41271],{"class":230,"line":16878},[228,41270,34293],{"class":234},[228,41272,32999],{"class":238},[228,41274,41275],{"class":230,"line":16884},[228,41276,34661],{"class":297},[228,41278,41279,41281,41283,41285],{"class":230,"line":16898},[228,41280,3517],{"class":234},[228,41282,34668],{"class":238},[228,41284,26159],{"class":234},[228,41286,34312],{"class":238},[228,41288,41289,41291,41293],{"class":230,"line":16911},[228,41290,32725],{"class":238},[228,41292,284],{"class":234},[228,41294,32730],{"class":238},[228,41296,41297,41299,41301],{"class":230,"line":16916},[228,41298,32740],{"class":238},[228,41300,284],{"class":234},[228,41302,32745],{"class":238},[228,41304,41305],{"class":230,"line":16930},[228,41306,2514],{"emptyLinePlaceholder":157},[228,41308,41309],{"class":230,"line":16935},[228,41310,34697],{"class":297},[228,41312,41313],{"class":230,"line":16941},[228,41314,32990],{"class":238},[228,41316,41317],{"class":230,"line":16946},[228,41318,34706],{"class":297},[228,41320,41321,41323,41325],{"class":230,"line":16960},[228,41322,32775],{"class":238},[228,41324,284],{"class":234},[228,41326,32780],{"class":238},[228,41328,41329],{"class":230,"line":16965},[228,41330,34719],{"class":297},[228,41332,41333,41335,41337,41339,41341,41343,41345],{"class":230,"line":16970},[228,41334,32792],{"class":238},[228,41336,284],{"class":234},[228,41338,32797],{"class":238},[228,41340,32800],{"class":5331},[228,41342,284],{"class":234},[228,41344,456],{"class":287},[228,41346,245],{"class":238},[228,41348,41349],{"class":230,"line":16984},[228,41350,34740],{"class":297},[228,41352,41353,41355,41357],{"class":230,"line":16996},[228,41354,34745],{"class":238},[228,41356,284],{"class":234},[228,41358,34750],{"class":238},[228,41360,41361,41363,41365],{"class":230,"line":17001},[228,41362,34755],{"class":238},[228,41364,284],{"class":234},[228,41366,34760],{"class":238},[228,41368,41369,41371,41373,41375,41377,41379,41381,41383],{"class":230,"line":17014},[228,41370,34765],{"class":287},[228,41372,239],{"class":238},[228,41374,34770],{"class":343},[228,41376,34773],{"class":238},[228,41378,34776],{"class":343},[228,41380,616],{"class":238},[228,41382,34781],{"class":343},[228,41384,34784],{"class":238},[200,41386,41388],{"id":41387},"_23googlenet","2.3.GoogLeNet",[22113,41390,41392],{"id":41391},"_231原理","2.3.1.原理",[183,41394,41395],{},[186,41396,41397],{},"网络结构",[19,41399,41400],{},[1576,41401],{"alt":141,"src":41402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-023.png",[19,41404,41405],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,41407,41408],{},[1576,41409],{"alt":141,"src":41410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-024.png",[19,41412,41413],{},[1576,41414],{"alt":141,"src":41415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-025.png",[19,41417,41418],{},[1576,41419],{"alt":141,"src":41420},"\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",[183,41422,41423],{"start":142},[186,41424,41425],{},"1x1卷积的优点",[19,41427,41428],{},[1576,41429],{"alt":141,"src":41430},"\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",[183,41432,41433],{"start":1293},[186,41434,41435],{},"全局平均池化层优点",[19,41437,41438],{},[1576,41439],{"alt":141,"src":41440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-028.png",[19,41442,41443],{},[1576,41444],{"alt":141,"src":41445},"\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",[183,41447,41448],{"start":1308},[186,41449,41450],{},"参数详细描述",[19,41452,41453],{},[1576,41454],{"alt":141,"src":41455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-030.png",[19,41457,41458],{},[1576,41459],{"alt":141,"src":41460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-031.png",[19,41462,41463],{},[1576,41464],{"alt":141,"src":41465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-032.png",[19,41467,41468],{},[1576,41469],{"alt":141,"src":41470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-033.png",[19,41472,41473],{},[1576,41474],{"alt":141,"src":41475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-034.png",[19,41477,41478],{},[1576,41479],{"alt":141,"src":41480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-035.png",[19,41482,41483],{},[1576,41484],{"alt":141,"src":41485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-036.png",[19,41487,41488],{},[1576,41489],{"alt":141,"src":41490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-037.png",[19,41492,41493],{},[1576,41494],{"alt":141,"src":41495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-038.png",[19,41497,41498],{},[1576,41499],{"alt":141,"src":41500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-039.png",[19,41502,41503],{},[1576,41504],{"alt":141,"src":41505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-040.png",[19,41507,41508],{},[1576,41509],{"alt":141,"src":41510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-041.png",[19,41512,41513],{},[1576,41514],{"alt":141,"src":41515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-042.png",[19,41517,41518],{},[1576,41519],{"alt":141,"src":41520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-043.png",[19,41522,41523],{},[1576,41524],{"alt":141,"src":41525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-044.png",[19,41527,41528],{},[1576,41529],{"alt":141,"src":41530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-045.png",[19,41532,41533],{},[1576,41534],{"alt":141,"src":41535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-046.png",[19,41537,41538],{},[1576,41539],{"alt":141,"src":41540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-047.png",[19,41542,41543],{},[1576,41544],{"alt":141,"src":41545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-048.png",[19,41547,41548],{},[1576,41549],{"alt":141,"src":41550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-049.png",[19,41552,41553],{},[1576,41554],{"alt":141,"src":41555},"\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",[22113,41557,41559],{"id":41558},"_232代码实现","2.3.2.代码实现",[183,41561,41562],{},[186,41563,30826],{},[19,41565,41566],{},"根据原理一步一步搭建即可",[220,41568,41570],{"className":30493,"code":41569,"language":30495,"meta":141,"style":141},"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",[30,41571,41572,41578,41588,41598,41602,41619,41628,41643,41653,41658,41691,41696,41733,41780,41785,41821,41868,41873,41878,41913,41945,41949,41957,41973,41997,42022,42043,42048,42063,42067,42071,42076,42093,42098,42107,42122,42133,42177,42181,42209,42213,42224,42252,42256,42293,42297,42325,42329,42340,42376,42408,42436,42440,42451,42485,42517,42549,42582,42616,42644,42648,42659,42692,42724,42738,42742,42755,42759,42764,42776,42784,42806,42811,42816,42821,42826,42831,42836,42850,42858,42867,42880,42895,42904,42908,42916,42927,42938,42949,42960,42971,42977,42981,42986,42998,43018,43027],{"__ignoreMap":141},[228,41573,41574,41576],{"class":230,"line":231},[228,41575,30507],{"class":234},[228,41577,30510],{"class":238},[228,41579,41580,41582,41584,41586],{"class":230,"line":142},[228,41581,30852],{"class":234},[228,41583,30855],{"class":238},[228,41585,30507],{"class":234},[228,41587,30860],{"class":238},[228,41589,41590,41592,41594,41596],{"class":230,"line":1293},[228,41591,30852],{"class":234},[228,41593,30872],{"class":238},[228,41595,30507],{"class":234},[228,41597,30877],{"class":238},[228,41599,41600],{"class":230,"line":1308},[228,41601,2514],{"emptyLinePlaceholder":157},[228,41603,41604,41606,41609,41611,41613,41615,41617],{"class":230,"line":1314},[228,41605,14809],{"class":234},[228,41607,41608],{"class":2077}," Inception",[228,41610,239],{"class":238},[228,41612,30893],{"class":2077},[228,41614,796],{"class":238},[228,41616,30898],{"class":2077},[228,41618,30901],{"class":238},[228,41620,41621,41623,41625],{"class":230,"line":1328},[228,41622,30916],{"class":234},[228,41624,30919],{"class":287},[228,41626,41627],{"class":238},"(self,in_channels,c1,c2,c3,c4):\n",[228,41629,41630,41632,41635,41637,41639,41641],{"class":230,"line":1334},[228,41631,30932],{"class":287},[228,41633,41634],{"class":238},"(Inception,",[228,41636,30938],{"class":287},[228,41638,30941],{"class":238},[228,41640,30944],{"class":287},[228,41642,2090],{"class":238},[228,41644,41645,41647,41649,41651],{"class":230,"line":1425},[228,41646,30960],{"class":287},[228,41648,34886],{"class":238},[228,41650,284],{"class":234},[228,41652,34891],{"class":238},[228,41654,41655],{"class":230,"line":1431},[228,41656,41657],{"class":297},"        # 路线1：定义1*1卷积\n",[228,41659,41660,41662,41665,41667,41669,41671,41673,41676,41678,41680,41683,41685,41687,41689],{"class":230,"line":1443},[228,41661,30960],{"class":287},[228,41663,41664],{"class":238},".p1_1",[228,41666,284],{"class":234},[228,41668,30968],{"class":238},[228,41670,30971],{"class":5331},[228,41672,284],{"class":234},[228,41674,41675],{"class":238},"in_channels,",[228,41677,30980],{"class":5331},[228,41679,284],{"class":234},[228,41681,41682],{"class":238},"c1,",[228,41684,30989],{"class":5331},[228,41686,284],{"class":234},[228,41688,456],{"class":287},[228,41690,245],{"class":238},[228,41692,41693],{"class":230,"line":1726},[228,41694,41695],{"class":297},"        # 路线2：定义1*1卷积和3*3\n",[228,41697,41698,41700,41703,41705,41707,41709,41711,41713,41715,41717,41720,41722,41725,41727,41729,41731],{"class":230,"line":1731},[228,41699,30960],{"class":287},[228,41701,41702],{"class":238},".p2_1",[228,41704,284],{"class":234},[228,41706,30968],{"class":238},[228,41708,30971],{"class":5331},[228,41710,284],{"class":234},[228,41712,41675],{"class":238},[228,41714,30980],{"class":5331},[228,41716,284],{"class":234},[228,41718,41719],{"class":238},"c2[",[228,41721,430],{"class":287},[228,41723,41724],{"class":238},"],",[228,41726,30989],{"class":5331},[228,41728,284],{"class":234},[228,41730,456],{"class":287},[228,41732,245],{"class":238},[228,41734,41735,41737,41740,41742,41744,41746,41748,41750,41752,41754,41756,41758,41760,41762,41764,41766,41768,41770,41772,41774,41776,41778],{"class":230,"line":1737},[228,41736,30960],{"class":287},[228,41738,41739],{"class":238},".p2_2",[228,41741,284],{"class":234},[228,41743,30968],{"class":238},[228,41745,30971],{"class":5331},[228,41747,284],{"class":234},[228,41749,41719],{"class":238},[228,41751,430],{"class":287},[228,41753,41724],{"class":238},[228,41755,30980],{"class":5331},[228,41757,284],{"class":234},[228,41759,41719],{"class":238},[228,41761,456],{"class":287},[228,41763,41724],{"class":238},[228,41765,30989],{"class":5331},[228,41767,284],{"class":234},[228,41769,310],{"class":287},[228,41771,616],{"class":238},[228,41773,30998],{"class":5331},[228,41775,284],{"class":234},[228,41777,456],{"class":287},[228,41779,245],{"class":238},[228,41781,41782],{"class":230,"line":1742},[228,41783,41784],{"class":297},"        # 路线3：定义1*1卷积和5*5\n",[228,41786,41787,41789,41792,41794,41796,41798,41800,41802,41804,41806,41809,41811,41813,41815,41817,41819],{"class":230,"line":1756},[228,41788,30960],{"class":287},[228,41790,41791],{"class":238},".p3_1",[228,41793,284],{"class":234},[228,41795,30968],{"class":238},[228,41797,30971],{"class":5331},[228,41799,284],{"class":234},[228,41801,41675],{"class":238},[228,41803,30980],{"class":5331},[228,41805,284],{"class":234},[228,41807,41808],{"class":238},"c3[",[228,41810,430],{"class":287},[228,41812,41724],{"class":238},[228,41814,30989],{"class":5331},[228,41816,284],{"class":234},[228,41818,456],{"class":287},[228,41820,245],{"class":238},[228,41822,41823,41825,41828,41830,41832,41834,41836,41838,41840,41842,41844,41846,41848,41850,41852,41854,41856,41858,41860,41862,41864,41866],{"class":230,"line":1761},[228,41824,30960],{"class":287},[228,41826,41827],{"class":238},".p3_2",[228,41829,284],{"class":234},[228,41831,30968],{"class":238},[228,41833,30971],{"class":5331},[228,41835,284],{"class":234},[228,41837,41808],{"class":238},[228,41839,430],{"class":287},[228,41841,41724],{"class":238},[228,41843,30980],{"class":5331},[228,41845,284],{"class":234},[228,41847,41808],{"class":238},[228,41849,456],{"class":287},[228,41851,41724],{"class":238},[228,41853,30989],{"class":5331},[228,41855,284],{"class":234},[228,41857,557],{"class":287},[228,41859,616],{"class":238},[228,41861,30998],{"class":5331},[228,41863,284],{"class":234},[228,41865,316],{"class":287},[228,41867,245],{"class":238},[228,41869,41870],{"class":230,"line":1767},[228,41871,41872],{"class":297},"        # 路线4：定义3*3最大池化和1*1卷积\n",[228,41874,41875],{"class":230,"line":1788},[228,41876,41877],{"class":297},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[228,41879,41880,41882,41885,41887,41889,41891,41893,41895,41897,41899,41901,41903,41905,41907,41909,41911],{"class":230,"line":1793},[228,41881,30960],{"class":287},[228,41883,41884],{"class":238},".p4_1",[228,41886,284],{"class":234},[228,41888,34944],{"class":238},[228,41890,30989],{"class":5331},[228,41892,284],{"class":234},[228,41894,310],{"class":287},[228,41896,616],{"class":238},[228,41898,31044],{"class":5331},[228,41900,284],{"class":234},[228,41902,456],{"class":287},[228,41904,616],{"class":238},[228,41906,30998],{"class":5331},[228,41908,284],{"class":234},[228,41910,456],{"class":287},[228,41912,245],{"class":238},[228,41914,41915,41917,41920,41922,41924,41926,41928,41930,41932,41934,41937,41939,41941,41943],{"class":230,"line":1807},[228,41916,30960],{"class":287},[228,41918,41919],{"class":238},".p4_2",[228,41921,284],{"class":234},[228,41923,30968],{"class":238},[228,41925,30971],{"class":5331},[228,41927,284],{"class":234},[228,41929,41675],{"class":238},[228,41931,30980],{"class":5331},[228,41933,284],{"class":234},[228,41935,41936],{"class":238},"c4,",[228,41938,30989],{"class":5331},[228,41940,284],{"class":234},[228,41942,456],{"class":287},[228,41944,245],{"class":238},[228,41946,41947],{"class":230,"line":1812},[228,41948,2514],{"emptyLinePlaceholder":157},[228,41950,41951,41953,41955],{"class":230,"line":1841},[228,41952,30916],{"class":234},[228,41954,31208],{"class":2077},[228,41956,31211],{"class":238},[228,41958,41959,41962,41964,41966,41968,41970],{"class":230,"line":1846},[228,41960,41961],{"class":238},"        p1",[228,41963,284],{"class":234},[228,41965,30938],{"class":287},[228,41967,35299],{"class":238},[228,41969,30938],{"class":287},[228,41971,41972],{"class":238},".p1_1(x))\n",[228,41974,41975,41977,41979,41981,41983,41985,41988,41990,41992,41994],{"class":230,"line":1863},[228,41976,7200],{"class":238},[228,41978,284],{"class":234},[228,41980,30938],{"class":287},[228,41982,35299],{"class":238},[228,41984,30938],{"class":287},[228,41986,41987],{"class":238},".p2_2(",[228,41989,30938],{"class":287},[228,41991,35299],{"class":238},[228,41993,30938],{"class":287},[228,41995,41996],{"class":238},".p2_1(x))))\n",[228,41998,41999,42002,42004,42006,42008,42010,42013,42015,42017,42019],{"class":230,"line":1868},[228,42000,42001],{"class":238},"        p3",[228,42003,284],{"class":234},[228,42005,30938],{"class":287},[228,42007,35299],{"class":238},[228,42009,30938],{"class":287},[228,42011,42012],{"class":238},".p3_2(",[228,42014,30938],{"class":287},[228,42016,35299],{"class":238},[228,42018,30938],{"class":287},[228,42020,42021],{"class":238},".p3_1(x))))\n",[228,42023,42024,42027,42029,42031,42033,42035,42038,42040],{"class":230,"line":1873},[228,42025,42026],{"class":238},"        p4",[228,42028,284],{"class":234},[228,42030,30938],{"class":287},[228,42032,35299],{"class":238},[228,42034,30938],{"class":287},[228,42036,42037],{"class":238},".p4_2(",[228,42039,30938],{"class":287},[228,42041,42042],{"class":238},".p4_1(x)))\n",[228,42044,42045],{"class":230,"line":1878},[228,42046,42047],{"class":297},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[228,42049,42050,42052,42055,42057,42059,42061],{"class":230,"line":1892},[228,42051,14867],{"class":234},[228,42053,42054],{"class":238}," torch.cat((p1,p2,p3,p4),",[228,42056,32800],{"class":5331},[228,42058,284],{"class":234},[228,42060,456],{"class":287},[228,42062,245],{"class":238},[228,42064,42065],{"class":230,"line":1897},[228,42066,2514],{"emptyLinePlaceholder":157},[228,42068,42069],{"class":230,"line":2691},[228,42070,2514],{"emptyLinePlaceholder":157},[228,42072,42073],{"class":230,"line":2705},[228,42074,42075],{"class":297},"# 搭建GoogLeNet网络\n",[228,42077,42078,42080,42083,42085,42087,42089,42091],{"class":230,"line":2713},[228,42079,14809],{"class":234},[228,42081,42082],{"class":2077}," GoogLeNet",[228,42084,239],{"class":238},[228,42086,30893],{"class":2077},[228,42088,796],{"class":238},[228,42090,30898],{"class":2077},[228,42092,30901],{"class":238},[228,42094,42095],{"class":230,"line":2718},[228,42096,42097],{"class":297},"    # 必须把Inception导入到里边\n",[228,42099,42100,42102,42104],{"class":230,"line":2724},[228,42101,30916],{"class":234},[228,42103,30919],{"class":287},[228,42105,42106],{"class":238},"(self,Inception):\n",[228,42108,42109,42111,42114,42116,42118,42120],{"class":230,"line":2730},[228,42110,30932],{"class":287},[228,42112,42113],{"class":238},"(GoogLeNet,",[228,42115,30938],{"class":287},[228,42117,30941],{"class":238},[228,42119,30944],{"class":287},[228,42121,2090],{"class":238},[228,42123,42124,42126,42129,42131],{"class":230,"line":2735},[228,42125,30960],{"class":287},[228,42127,42128],{"class":238},".b1",[228,42130,284],{"class":234},[228,42132,38124],{"class":238},[228,42134,42135,42137,42139,42141,42143,42145,42147,42149,42151,42153,42155,42157,42159,42161,42163,42165,42167,42169,42171,42173,42175],{"class":230,"line":8063},[228,42136,38129],{"class":238},[228,42138,30971],{"class":5331},[228,42140,284],{"class":234},[228,42142,456],{"class":287},[228,42144,616],{"class":238},[228,42146,30980],{"class":5331},[228,42148,284],{"class":234},[228,42150,442],{"class":287},[228,42152,616],{"class":238},[228,42154,30989],{"class":5331},[228,42156,284],{"class":234},[228,42158,607],{"class":287},[228,42160,616],{"class":238},[228,42162,31044],{"class":5331},[228,42164,284],{"class":234},[228,42166,316],{"class":287},[228,42168,616],{"class":238},[228,42170,30998],{"class":5331},[228,42172,284],{"class":234},[228,42174,310],{"class":287},[228,42176,38162],{"class":238},[228,42178,42179],{"class":230,"line":8087},[228,42180,38167],{"class":238},[228,42182,42183,42185,42187,42189,42191,42193,42195,42197,42199,42201,42203,42205,42207],{"class":230,"line":8092},[228,42184,38212],{"class":238},[228,42186,30989],{"class":5331},[228,42188,284],{"class":234},[228,42190,310],{"class":287},[228,42192,616],{"class":238},[228,42194,31044],{"class":5331},[228,42196,284],{"class":234},[228,42198,316],{"class":287},[228,42200,616],{"class":238},[228,42202,30998],{"class":5331},[228,42204,284],{"class":234},[228,42206,456],{"class":287},[228,42208,245],{"class":238},[228,42210,42211],{"class":230,"line":8098},[228,42212,38241],{"class":238},[228,42214,42215,42217,42220,42222],{"class":230,"line":8125},[228,42216,30960],{"class":287},[228,42218,42219],{"class":238},".b2",[228,42221,284],{"class":234},[228,42223,38124],{"class":238},[228,42225,42226,42228,42230,42232,42234,42236,42238,42240,42242,42244,42246,42248,42250],{"class":230,"line":8130},[228,42227,38129],{"class":238},[228,42229,30971],{"class":5331},[228,42231,284],{"class":234},[228,42233,442],{"class":287},[228,42235,616],{"class":238},[228,42237,30980],{"class":5331},[228,42239,284],{"class":234},[228,42241,442],{"class":287},[228,42243,616],{"class":238},[228,42245,30989],{"class":5331},[228,42247,284],{"class":234},[228,42249,456],{"class":287},[228,42251,38162],{"class":238},[228,42253,42254],{"class":230,"line":8136},[228,42255,38167],{"class":238},[228,42257,42258,42260,42262,42264,42266,42268,42270,42272,42275,42277,42279,42281,42283,42285,42287,42289,42291],{"class":230,"line":8148},[228,42259,38129],{"class":238},[228,42261,30971],{"class":5331},[228,42263,284],{"class":234},[228,42265,442],{"class":287},[228,42267,616],{"class":238},[228,42269,30980],{"class":5331},[228,42271,284],{"class":234},[228,42273,42274],{"class":287},"192",[228,42276,616],{"class":238},[228,42278,30989],{"class":5331},[228,42280,284],{"class":234},[228,42282,310],{"class":287},[228,42284,616],{"class":238},[228,42286,30998],{"class":5331},[228,42288,284],{"class":234},[228,42290,456],{"class":287},[228,42292,38162],{"class":238},[228,42294,42295],{"class":230,"line":8160},[228,42296,38167],{"class":238},[228,42298,42299,42301,42303,42305,42307,42309,42311,42313,42315,42317,42319,42321,42323],{"class":230,"line":8172},[228,42300,38212],{"class":238},[228,42302,30989],{"class":5331},[228,42304,284],{"class":234},[228,42306,310],{"class":287},[228,42308,616],{"class":238},[228,42310,31044],{"class":5331},[228,42312,284],{"class":234},[228,42314,316],{"class":287},[228,42316,616],{"class":238},[228,42318,30998],{"class":5331},[228,42320,284],{"class":234},[228,42322,456],{"class":287},[228,42324,245],{"class":238},[228,42326,42327],{"class":230,"line":9831},[228,42328,38241],{"class":238},[228,42330,42331,42333,42336,42338],{"class":230,"line":9856},[228,42332,30960],{"class":287},[228,42334,42335],{"class":238},".b3",[228,42337,284],{"class":234},[228,42339,38124],{"class":238},[228,42341,42342,42345,42347,42349,42351,42354,42356,42358,42360,42363,42365,42367,42369,42372,42374],{"class":230,"line":9879},[228,42343,42344],{"class":238},"            Inception(",[228,42346,42274],{"class":287},[228,42348,616],{"class":238},[228,42350,442],{"class":287},[228,42352,42353],{"class":238},",(",[228,42355,448],{"class":287},[228,42357,616],{"class":238},[228,42359,32185],{"class":287},[228,42361,42362],{"class":238},"),(",[228,42364,839],{"class":287},[228,42366,616],{"class":238},[228,42368,436],{"class":287},[228,42370,42371],{"class":238},"),",[228,42373,436],{"class":287},[228,42375,38162],{"class":238},[228,42377,42378,42380,42382,42384,42386,42388,42390,42392,42394,42396,42398,42400,42402,42404,42406],{"class":230,"line":9903},[228,42379,42344],{"class":238},[228,42381,34985],{"class":287},[228,42383,616],{"class":238},[228,42385,32185],{"class":287},[228,42387,42353],{"class":238},[228,42389,32185],{"class":287},[228,42391,616],{"class":238},[228,42393,42274],{"class":287},[228,42395,42362],{"class":238},[228,42397,436],{"class":287},[228,42399,616],{"class":238},[228,42401,448],{"class":287},[228,42403,42371],{"class":238},[228,42405,442],{"class":287},[228,42407,38162],{"class":238},[228,42409,42410,42412,42414,42416,42418,42420,42422,42424,42426,42428,42430,42432,42434],{"class":230,"line":9908},[228,42411,38212],{"class":238},[228,42413,30989],{"class":5331},[228,42415,284],{"class":234},[228,42417,310],{"class":287},[228,42419,616],{"class":238},[228,42421,31044],{"class":5331},[228,42423,284],{"class":234},[228,42425,316],{"class":287},[228,42427,616],{"class":238},[228,42429,30998],{"class":5331},[228,42431,284],{"class":234},[228,42433,456],{"class":287},[228,42435,245],{"class":238},[228,42437,42438],{"class":230,"line":9913},[228,42439,38241],{"class":238},[228,42441,42442,42444,42447,42449],{"class":230,"line":9918},[228,42443,30960],{"class":287},[228,42445,42446],{"class":238},".b4",[228,42448,284],{"class":234},[228,42450,38124],{"class":238},[228,42452,42453,42455,42458,42460,42462,42464,42466,42468,42471,42473,42475,42477,42479,42481,42483],{"class":230,"line":9927},[228,42454,42344],{"class":238},[228,42456,42457],{"class":287},"480",[228,42459,616],{"class":238},[228,42461,42274],{"class":287},[228,42463,42353],{"class":238},[228,42465,448],{"class":287},[228,42467,616],{"class":238},[228,42469,42470],{"class":287},"208",[228,42472,42362],{"class":238},[228,42474,839],{"class":287},[228,42476,616],{"class":238},[228,42478,845],{"class":287},[228,42480,42371],{"class":238},[228,42482,442],{"class":287},[228,42484,38162],{"class":238},[228,42486,42487,42489,42491,42493,42495,42497,42499,42501,42503,42505,42507,42509,42511,42513,42515],{"class":230,"line":9932},[228,42488,42344],{"class":238},[228,42490,38572],{"class":287},[228,42492,616],{"class":238},[228,42494,21163],{"class":287},[228,42496,42353],{"class":238},[228,42498,856],{"class":287},[228,42500,616],{"class":238},[228,42502,31616],{"class":287},[228,42504,42362],{"class":238},[228,42506,1038],{"class":287},[228,42508,616],{"class":238},[228,42510,442],{"class":287},[228,42512,42371],{"class":238},[228,42514,442],{"class":287},[228,42516,38162],{"class":238},[228,42518,42519,42521,42523,42525,42527,42529,42531,42533,42535,42537,42539,42541,42543,42545,42547],{"class":230,"line":9938},[228,42520,42344],{"class":238},[228,42522,38572],{"class":287},[228,42524,616],{"class":238},[228,42526,32185],{"class":287},[228,42528,42353],{"class":238},[228,42530,32185],{"class":287},[228,42532,616],{"class":238},[228,42534,34985],{"class":287},[228,42536,42362],{"class":238},[228,42538,1038],{"class":287},[228,42540,616],{"class":238},[228,42542,442],{"class":287},[228,42544,42371],{"class":238},[228,42546,442],{"class":287},[228,42548,38162],{"class":238},[228,42550,42551,42553,42555,42557,42559,42561,42563,42565,42568,42570,42572,42574,42576,42578,42580],{"class":230,"line":9959},[228,42552,42344],{"class":238},[228,42554,38572],{"class":287},[228,42556,616],{"class":238},[228,42558,856],{"class":287},[228,42560,42353],{"class":238},[228,42562,32185],{"class":287},[228,42564,616],{"class":238},[228,42566,42567],{"class":287},"288",[228,42569,42362],{"class":238},[228,42571,436],{"class":287},[228,42573,616],{"class":238},[228,42575,442],{"class":287},[228,42577,42371],{"class":238},[228,42579,442],{"class":287},[228,42581,38162],{"class":238},[228,42583,42584,42586,42589,42591,42593,42595,42597,42599,42602,42604,42606,42608,42610,42612,42614],{"class":230,"line":9965},[228,42585,42344],{"class":238},[228,42587,42588],{"class":287},"528",[228,42590,616],{"class":238},[228,42592,34985],{"class":287},[228,42594,42353],{"class":238},[228,42596,21163],{"class":287},[228,42598,616],{"class":238},[228,42600,42601],{"class":287},"320",[228,42603,42362],{"class":238},[228,42605,436],{"class":287},[228,42607,616],{"class":238},[228,42609,32185],{"class":287},[228,42611,42371],{"class":238},[228,42613,32185],{"class":287},[228,42615,38162],{"class":238},[228,42617,42618,42620,42622,42624,42626,42628,42630,42632,42634,42636,42638,42640,42642],{"class":230,"line":9979},[228,42619,38212],{"class":238},[228,42621,30989],{"class":5331},[228,42623,284],{"class":234},[228,42625,310],{"class":287},[228,42627,616],{"class":238},[228,42629,31044],{"class":5331},[228,42631,284],{"class":234},[228,42633,316],{"class":287},[228,42635,616],{"class":238},[228,42637,30998],{"class":5331},[228,42639,284],{"class":234},[228,42641,456],{"class":287},[228,42643,245],{"class":238},[228,42645,42646],{"class":230,"line":9985},[228,42647,38241],{"class":238},[228,42649,42650,42652,42655,42657],{"class":230,"line":10012},[228,42651,30960],{"class":287},[228,42653,42654],{"class":238},".b5",[228,42656,284],{"class":234},[228,42658,38124],{"class":238},[228,42660,42661,42663,42666,42668,42670,42672,42674,42676,42678,42680,42682,42684,42686,42688,42690],{"class":230,"line":10021},[228,42662,42344],{"class":238},[228,42664,42665],{"class":287},"832",[228,42667,616],{"class":238},[228,42669,34985],{"class":287},[228,42671,42353],{"class":238},[228,42673,21163],{"class":287},[228,42675,616],{"class":238},[228,42677,42601],{"class":287},[228,42679,42362],{"class":238},[228,42681,436],{"class":287},[228,42683,616],{"class":238},[228,42685,32185],{"class":287},[228,42687,42371],{"class":238},[228,42689,32185],{"class":287},[228,42691,38162],{"class":238},[228,42693,42694,42696,42698,42700,42702,42704,42706,42708,42710,42712,42714,42716,42718,42720,42722],{"class":230,"line":10027},[228,42695,42344],{"class":238},[228,42697,42665],{"class":287},[228,42699,616],{"class":238},[228,42701,35055],{"class":287},[228,42703,42353],{"class":238},[228,42705,42274],{"class":287},[228,42707,616],{"class":238},[228,42709,35055],{"class":287},[228,42711,42362],{"class":238},[228,42713,845],{"class":287},[228,42715,616],{"class":238},[228,42717,32185],{"class":287},[228,42719,42371],{"class":238},[228,42721,32185],{"class":287},[228,42723,38162],{"class":238},[228,42725,42726,42729,42731,42733,42735],{"class":230,"line":10035},[228,42727,42728],{"class":238},"            nn.AdaptiveAvgPool2d((",[228,42730,456],{"class":287},[228,42732,616],{"class":238},[228,42734,456],{"class":287},[228,42736,42737],{"class":238},")),\n",[228,42739,42740],{"class":230,"line":10040},[228,42741,38905],{"class":238},[228,42743,42744,42746,42749,42751,42753],{"class":230,"line":16719},[228,42745,38910],{"class":238},[228,42747,42748],{"class":287},"1024",[228,42750,616],{"class":238},[228,42752,684],{"class":287},[228,42754,245],{"class":238},[228,42756,42757],{"class":230,"line":16725},[228,42758,38241],{"class":238},[228,42760,42761],{"class":230,"line":16748},[228,42762,42763],{"class":297},"        # 对模型参数初始化\n",[228,42765,42766,42768,42770,42772,42774],{"class":230,"line":16754},[228,42767,3517],{"class":234},[228,42769,38983],{"class":238},[228,42771,26159],{"class":234},[228,42773,38988],{"class":287},[228,42775,38991],{"class":238},[228,42777,42778,42780,42782],{"class":230,"line":16777},[228,42779,4756],{"class":234},[228,42781,39003],{"class":287},[228,42783,39006],{"class":238},[228,42785,42786,42788,42791,42793,42796,42798,42800,42802,42804],{"class":230,"line":16791},[228,42787,39016],{"class":238},[228,42789,42790],{"class":5331},"mode",[228,42792,284],{"class":234},[228,42794,42795],{"class":343},"'fan_out'",[228,42797,616],{"class":238},[228,42799,39019],{"class":5331},[228,42801,284],{"class":234},[228,42803,39024],{"class":343},[228,42805,245],{"class":238},[228,42807,42808],{"class":230,"line":16811},[228,42809,42810],{"class":297},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[228,42812,42813],{"class":230,"line":16817},[228,42814,42815],{"class":297},"                # ② mode = 'fan_out'决定使用的fan值：\n",[228,42817,42818],{"class":230,"line":16828},[228,42819,42820],{"class":297},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[228,42822,42823],{"class":230,"line":16851},[228,42824,42825],{"class":297},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[228,42827,42828],{"class":230,"line":16873},[228,42829,42830],{"class":297},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[228,42832,42833],{"class":230,"line":16878},[228,42834,42835],{"class":297},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[228,42837,42838,42840,42842,42844,42846,42848],{"class":230,"line":16884},[228,42839,39036],{"class":234},[228,42841,39039],{"class":238},[228,42843,39042],{"class":234},[228,42845,39045],{"class":234},[228,42847,39048],{"class":287},[228,42849,3853],{"class":238},[228,42851,42852,42854,42856],{"class":230,"line":16898},[228,42853,39060],{"class":238},[228,42855,430],{"class":287},[228,42857,245],{"class":238},[228,42859,42860,42863,42865],{"class":230,"line":16911},[228,42861,42862],{"class":234},"                elif",[228,42864,39003],{"class":287},[228,42866,39079],{"class":238},[228,42868,42869,42872,42874,42876,42878],{"class":230,"line":16916},[228,42870,42871],{"class":238},"                    nn.init.normal_(m.weight,",[228,42873,430],{"class":287},[228,42875,616],{"class":238},[228,42877,39101],{"class":287},[228,42879,245],{"class":238},[228,42881,42882,42885,42887,42889,42891,42893],{"class":230,"line":16930},[228,42883,42884],{"class":234},"                    if",[228,42886,39039],{"class":238},[228,42888,39042],{"class":234},[228,42890,39045],{"class":234},[228,42892,39048],{"class":287},[228,42894,3853],{"class":238},[228,42896,42897,42900,42902],{"class":230,"line":16935},[228,42898,42899],{"class":238},"                        nn.init.constant_(m.bias,",[228,42901,430],{"class":287},[228,42903,245],{"class":238},[228,42905,42906],{"class":230,"line":16941},[228,42907,35280],{"class":297},[228,42909,42910,42912,42914],{"class":230,"line":16946},[228,42911,30916],{"class":234},[228,42913,31208],{"class":2077},[228,42915,31211],{"class":238},[228,42917,42918,42920,42922,42924],{"class":230,"line":16960},[228,42919,31216],{"class":238},[228,42921,284],{"class":234},[228,42923,30938],{"class":287},[228,42925,42926],{"class":238},".b1(x)\n",[228,42928,42929,42931,42933,42935],{"class":230,"line":16965},[228,42930,31216],{"class":238},[228,42932,284],{"class":234},[228,42934,30938],{"class":287},[228,42936,42937],{"class":238},".b2(x)\n",[228,42939,42940,42942,42944,42946],{"class":230,"line":16970},[228,42941,31216],{"class":238},[228,42943,284],{"class":234},[228,42945,30938],{"class":287},[228,42947,42948],{"class":238},".b3(x)\n",[228,42950,42951,42953,42955,42957],{"class":230,"line":16984},[228,42952,31216],{"class":238},[228,42954,284],{"class":234},[228,42956,30938],{"class":287},[228,42958,42959],{"class":238},".b4(x)\n",[228,42961,42962,42964,42966,42968],{"class":230,"line":16996},[228,42963,31216],{"class":238},[228,42965,284],{"class":234},[228,42967,30938],{"class":287},[228,42969,42970],{"class":238},".b5(x)\n",[228,42972,42973,42975],{"class":230,"line":17001},[228,42974,14867],{"class":234},[228,42976,31324],{"class":238},[228,42978,42979],{"class":230,"line":17014},[228,42980,2514],{"emptyLinePlaceholder":157},[228,42982,42983],{"class":230,"line":17019},[228,42984,42985],{"class":297},"# 模型展示\n",[228,42987,42988,42990,42992,42994,42996],{"class":230,"line":17024},[228,42989,1645],{"class":234},[228,42991,31335],{"class":287},[228,42993,3063],{"class":234},[228,42995,31340],{"class":343},[228,42997,3853],{"class":238},[228,42999,43000,43002,43004,43006,43008,43010,43012,43014,43016],{"class":230,"line":17029},[228,43001,31352],{"class":238},[228,43003,284],{"class":234},[228,43005,30566],{"class":238},[228,43007,31359],{"class":343},[228,43009,1818],{"class":234},[228,43011,31364],{"class":238},[228,43013,1815],{"class":234},[228,43015,30591],{"class":343},[228,43017,245],{"class":238},[228,43019,43020,43022,43024],{"class":230,"line":17042},[228,43021,31404],{"class":238},[228,43023,284],{"class":234},[228,43025,43026],{"class":238},"GoogLeNet(Inception).to(device)\n",[228,43028,43029,43031,43033,43035,43037,43039,43041,43043],{"class":230,"line":17047},[228,43030,31414],{"class":287},[228,43032,31417],{"class":238},[228,43034,456],{"class":287},[228,43036,616],{"class":238},[228,43038,31616],{"class":287},[228,43040,616],{"class":238},[228,43042,31616],{"class":287},[228,43044,31430],{"class":238},[183,43046,43047],{"start":142},[186,43048,39298],{},[220,43050,43052],{"className":30493,"code":43051,"language":30495,"meta":141,"style":141},"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",[30,43053,43054,43060,43066,43076,43082,43092,43102,43112,43122,43132,43136,43147,43157,43161,43165,43169,43177,43189,43199,43215,43225,43257,43271,43281,43291,43295,43305,43319,43329,43339,43349,43355,43359,43363,43367,43371,43375,43383,43403,43407,43411,43415,43419,43423,43439,43443,43447,43455,43459,43463,43471,43475,43479,43483,43491,43495,43499,43503,43507,43515,43519,43527,43531,43539,43543,43551,43555,43563,43567,43571,43579,43583,43587,43591,43603,43627,43641,43645,43649,43653,43661,43665,43673,43677,43685,43689,43697,43701,43709,43713,43721,43725,43737,43741,43749,43753,43761,43765,43769,43773,43777,43785,43789,43805,43809,43817,43821,43825,43829,43833,43837,43841,43845,43861,43865,43877,43881,43893,43897,43909,43913,43921,43925,43933,43937,43941,43945,43951,43955,43963,43967,43983,43987,43995,43999,44015,44027,44031,44043,44047,44051,44059,44063,44067,44075,44079,44087,44091,44099,44103,44107,44149,44191,44195,44199,44215,44219,44235,44239,44243,44251,44255,44259,44271,44309,44313,44317,44325,44329,44343,44353,44359,44365,44371,44377,44381,44385,44391,44395,44399,44407,44411,44429,44433,44437,44441,44457,44461,44465,44469,44473,44477,44497,44517,44521,44525,44529,44537,44545,44549,44565,44585,44605,44609,44613,44621,44629,44633,44637,44641,44653,44657,44667,44675,44692],{"__ignoreMap":141},[228,43055,43056,43058],{"class":230,"line":231},[228,43057,30507],{"class":234},[228,43059,31937],{"class":238},[228,43061,43062,43064],{"class":230,"line":142},[228,43063,30507],{"class":234},[228,43065,31944],{"class":238},[228,43067,43068,43070,43072,43074],{"class":230,"line":1293},[228,43069,30507],{"class":234},[228,43071,31955],{"class":238},[228,43073,31498],{"class":234},[228,43075,31960],{"class":238},[228,43077,43078,43080],{"class":230,"line":1308},[228,43079,30507],{"class":234},[228,43081,30510],{"class":238},[228,43083,43084,43086,43088,43090],{"class":230,"line":1314},[228,43085,30852],{"class":234},[228,43087,31530],{"class":238},[228,43089,30507],{"class":234},[228,43091,31977],{"class":238},[228,43093,43094,43096,43098,43100],{"class":230,"line":1328},[228,43095,30852],{"class":234},[228,43097,31483],{"class":238},[228,43099,30507],{"class":234},[228,43101,31488],{"class":238},[228,43103,43104,43106,43108,43110],{"class":230,"line":1334},[228,43105,30852],{"class":234},[228,43107,31513],{"class":238},[228,43109,30507],{"class":234},[228,43111,31518],{"class":238},[228,43113,43114,43116,43118,43120],{"class":230,"line":1425},[228,43115,30507],{"class":234},[228,43117,31530],{"class":238},[228,43119,31498],{"class":234},[228,43121,31535],{"class":238},[228,43123,43124,43126,43128,43130],{"class":230,"line":1431},[228,43125,30507],{"class":234},[228,43127,31547],{"class":238},[228,43129,31498],{"class":234},[228,43131,31552],{"class":238},[228,43133,43134],{"class":230,"line":1443},[228,43135,32022],{"class":297},[228,43137,43138,43140,43142,43144],{"class":230,"line":1726},[228,43139,30852],{"class":234},[228,43141,32029],{"class":238},[228,43143,30507],{"class":234},[228,43145,43146],{"class":238}," GoogLeNet, Inception\n",[228,43148,43149,43151,43153,43155],{"class":230,"line":1731},[228,43150,30852],{"class":234},[228,43152,30855],{"class":238},[228,43154,30507],{"class":234},[228,43156,30860],{"class":238},[228,43158,43159],{"class":230,"line":1737},[228,43160,2514],{"emptyLinePlaceholder":157},[228,43162,43163],{"class":230,"line":1742},[228,43164,2514],{"emptyLinePlaceholder":157},[228,43166,43167],{"class":230,"line":1756},[228,43168,32057],{"class":297},[228,43170,43171,43173,43175],{"class":230,"line":1761},[228,43172,32062],{"class":234},[228,43174,32065],{"class":2077},[228,43176,32068],{"class":238},[228,43178,43179,43181,43183,43185,43187],{"class":230,"line":1767},[228,43180,32073],{"class":238},[228,43182,284],{"class":234},[228,43184,31570],{"class":238},[228,43186,31578],{"class":343},[228,43188,31581],{"class":238},[228,43190,43191,43193,43195,43197],{"class":230,"line":1788},[228,43192,32086],{"class":5331},[228,43194,284],{"class":234},[228,43196,31591],{"class":287},[228,43198,31581],{"class":238},[228,43200,43201,43203,43205,43207,43209,43211,43213],{"class":230,"line":1793},[228,43202,32097],{"class":5331},[228,43204,284],{"class":234},[228,43206,31608],{"class":238},[228,43208,31611],{"class":5331},[228,43210,284],{"class":234},[228,43212,35564],{"class":287},[228,43214,31619],{"class":238},[228,43216,43217,43219,43221,43223],{"class":230,"line":1807},[228,43218,32114],{"class":5331},[228,43220,284],{"class":234},[228,43222,31591],{"class":287},[228,43224,245],{"class":238},[228,43226,43227,43229,43231,43233,43235,43237,43239,43241,43243,43245,43247,43249,43251,43253,43255],{"class":230,"line":1812},[228,43228,32125],{"class":238},[228,43230,284],{"class":234},[228,43232,32130],{"class":238},[228,43234,32133],{"class":287},[228,43236,239],{"class":238},[228,43238,32138],{"class":287},[228,43240,693],{"class":234},[228,43242,7473],{"class":287},[228,43244,32145],{"class":238},[228,43246,32133],{"class":287},[228,43248,239],{"class":238},[228,43250,32152],{"class":287},[228,43252,693],{"class":234},[228,43254,7473],{"class":287},[228,43256,32159],{"class":238},[228,43258,43259,43261,43263,43265,43267,43269],{"class":230,"line":1841},[228,43260,32164],{"class":238},[228,43262,284],{"class":234},[228,43264,32169],{"class":238},[228,43266,31652],{"class":5331},[228,43268,284],{"class":234},[228,43270,31657],{"class":238},[228,43272,43273,43275,43277,43279],{"class":230,"line":1846},[228,43274,32180],{"class":5331},[228,43276,284],{"class":234},[228,43278,436],{"class":287},[228,43280,31581],{"class":238},[228,43282,43283,43285,43287,43289],{"class":230,"line":1863},[228,43284,32192],{"class":5331},[228,43286,284],{"class":234},[228,43288,31591],{"class":287},[228,43290,31581],{"class":238},[228,43292,43293],{"class":230,"line":1868},[228,43294,32203],{"class":297},[228,43296,43297,43299,43301,43303],{"class":230,"line":1873},[228,43298,32208],{"class":5331},[228,43300,284],{"class":234},[228,43302,633],{"class":287},[228,43304,245],{"class":238},[228,43306,43307,43309,43311,43313,43315,43317],{"class":230,"line":1878},[228,43308,32219],{"class":238},[228,43310,284],{"class":234},[228,43312,31649],{"class":238},[228,43314,31652],{"class":5331},[228,43316,284],{"class":234},[228,43318,32230],{"class":238},[228,43320,43321,43323,43325,43327],{"class":230,"line":1892},[228,43322,32235],{"class":5331},[228,43324,284],{"class":234},[228,43326,436],{"class":287},[228,43328,31581],{"class":238},[228,43330,43331,43333,43335,43337],{"class":230,"line":1897},[228,43332,32246],{"class":5331},[228,43334,284],{"class":234},[228,43336,31591],{"class":287},[228,43338,31581],{"class":238},[228,43340,43341,43343,43345,43347],{"class":230,"line":2691},[228,43342,32257],{"class":5331},[228,43344,284],{"class":234},[228,43346,633],{"class":287},[228,43348,245],{"class":238},[228,43350,43351,43353],{"class":230,"line":2705},[228,43352,4204],{"class":234},[228,43354,32270],{"class":238},[228,43356,43357],{"class":230,"line":2713},[228,43358,2514],{"emptyLinePlaceholder":157},[228,43360,43361],{"class":230,"line":2718},[228,43362,32279],{"class":297},[228,43364,43365],{"class":230,"line":2724},[228,43366,32284],{"class":297},[228,43368,43369],{"class":230,"line":2730},[228,43370,2514],{"emptyLinePlaceholder":157},[228,43372,43373],{"class":230,"line":2735},[228,43374,32293],{"class":297},[228,43376,43377,43379,43381],{"class":230,"line":8063},[228,43378,32062],{"class":234},[228,43380,32300],{"class":2077},[228,43382,32303],{"class":238},[228,43384,43385,43387,43389,43391,43393,43395,43397,43399,43401],{"class":230,"line":8087},[228,43386,31352],{"class":238},[228,43388,284],{"class":234},[228,43390,30566],{"class":238},[228,43392,31359],{"class":343},[228,43394,1818],{"class":234},[228,43396,31364],{"class":238},[228,43398,1815],{"class":234},[228,43400,32322],{"class":343},[228,43402,245],{"class":238},[228,43404,43405],{"class":230,"line":8092},[228,43406,2514],{"emptyLinePlaceholder":157},[228,43408,43409],{"class":230,"line":8098},[228,43410,2514],{"emptyLinePlaceholder":157},[228,43412,43413],{"class":230,"line":8125},[228,43414,32337],{"class":297},[228,43416,43417],{"class":230,"line":8130},[228,43418,32342],{"class":297},[228,43420,43421],{"class":230,"line":8136},[228,43422,32347],{"class":297},[228,43424,43425,43427,43429,43431,43433,43435,43437],{"class":230,"line":8148},[228,43426,32352],{"class":238},[228,43428,284],{"class":234},[228,43430,32357],{"class":238},[228,43432,32360],{"class":5331},[228,43434,284],{"class":234},[228,43436,32365],{"class":287},[228,43438,245],{"class":238},[228,43440,43441],{"class":230,"line":8160},[228,43442,2514],{"emptyLinePlaceholder":157},[228,43444,43445],{"class":230,"line":8172},[228,43446,32376],{"class":297},[228,43448,43449,43451,43453],{"class":230,"line":9831},[228,43450,32381],{"class":238},[228,43452,284],{"class":234},[228,43454,32386],{"class":238},[228,43456,43457],{"class":230,"line":9856},[228,43458,2514],{"emptyLinePlaceholder":157},[228,43460,43461],{"class":230,"line":9879},[228,43462,32395],{"class":297},[228,43464,43465,43467,43469],{"class":230,"line":9903},[228,43466,31404],{"class":238},[228,43468,284],{"class":234},[228,43470,32404],{"class":238},[228,43472,43473],{"class":230,"line":9908},[228,43474,32409],{"class":297},[228,43476,43477],{"class":230,"line":9913},[228,43478,32414],{"class":297},[228,43480,43481],{"class":230,"line":9918},[228,43482,32419],{"class":297},[228,43484,43485,43487,43489],{"class":230,"line":9927},[228,43486,32424],{"class":238},[228,43488,284],{"class":234},[228,43490,32429],{"class":238},[228,43492,43493],{"class":230,"line":9932},[228,43494,2514],{"emptyLinePlaceholder":157},[228,43496,43497],{"class":230,"line":9938},[228,43498,2514],{"emptyLinePlaceholder":157},[228,43500,43501],{"class":230,"line":9959},[228,43502,32442],{"class":297},[228,43504,43505],{"class":230,"line":9965},[228,43506,32447],{"class":297},[228,43508,43509,43511,43513],{"class":230,"line":9979},[228,43510,32452],{"class":238},[228,43512,284],{"class":234},[228,43514,32457],{"class":287},[228,43516,43517],{"class":230,"line":9985},[228,43518,32462],{"class":297},[228,43520,43521,43523,43525],{"class":230,"line":10012},[228,43522,32467],{"class":238},[228,43524,284],{"class":234},[228,43526,32472],{"class":238},[228,43528,43529],{"class":230,"line":10021},[228,43530,32477],{"class":297},[228,43532,43533,43535,43537],{"class":230,"line":10027},[228,43534,32482],{"class":238},[228,43536,284],{"class":234},[228,43538,32472],{"class":238},[228,43540,43541],{"class":230,"line":10035},[228,43542,32491],{"class":297},[228,43544,43545,43547,43549],{"class":230,"line":10040},[228,43546,32496],{"class":238},[228,43548,284],{"class":234},[228,43550,32472],{"class":238},[228,43552,43553],{"class":230,"line":16719},[228,43554,32505],{"class":297},[228,43556,43557,43559,43561],{"class":230,"line":16725},[228,43558,32510],{"class":238},[228,43560,284],{"class":234},[228,43562,32472],{"class":238},[228,43564,43565],{"class":230,"line":16748},[228,43566,2514],{"emptyLinePlaceholder":157},[228,43568,43569],{"class":230,"line":16754},[228,43570,32523],{"class":297},[228,43572,43573,43575,43577],{"class":230,"line":16777},[228,43574,32528],{"class":238},[228,43576,284],{"class":234},[228,43578,32533],{"class":238},[228,43580,43581],{"class":230,"line":16791},[228,43582,2514],{"emptyLinePlaceholder":157},[228,43584,43585],{"class":230,"line":16811},[228,43586,2514],{"emptyLinePlaceholder":157},[228,43588,43589],{"class":230,"line":16817},[228,43590,32546],{"class":297},[228,43592,43593,43595,43597,43599,43601],{"class":230,"line":16828},[228,43594,3315],{"class":234},[228,43596,32553],{"class":238},[228,43598,26159],{"class":234},[228,43600,32558],{"class":287},[228,43602,32561],{"class":238},[228,43604,43605,43607,43609,43611,43613,43615,43617,43619,43621,43623,43625],{"class":230,"line":16851},[228,43606,32566],{"class":287},[228,43608,239],{"class":238},[228,43610,32571],{"class":343},[228,43612,32574],{"class":287},[228,43614,822],{"class":343},[228,43616,32574],{"class":287},[228,43618,489],{"class":343},[228,43620,32583],{"class":238},[228,43622,770],{"class":234},[228,43624,456],{"class":287},[228,43626,30612],{"class":238},[228,43628,43629,43631,43633,43635,43637,43639],{"class":230,"line":16873},[228,43630,32566],{"class":287},[228,43632,239],{"class":238},[228,43634,32598],{"class":343},[228,43636,693],{"class":234},[228,43638,684],{"class":287},[228,43640,245],{"class":238},[228,43642,43643],{"class":230,"line":16878},[228,43644,2514],{"emptyLinePlaceholder":157},[228,43646,43647],{"class":230,"line":16884},[228,43648,32613],{"class":297},[228,43650,43651],{"class":230,"line":16898},[228,43652,32618],{"class":297},[228,43654,43655,43657,43659],{"class":230,"line":16911},[228,43656,32623],{"class":238},[228,43658,284],{"class":234},[228,43660,32457],{"class":287},[228,43662,43663],{"class":230,"line":16916},[228,43664,32632],{"class":297},[228,43666,43667,43669,43671],{"class":230,"line":16930},[228,43668,32637],{"class":238},[228,43670,284],{"class":234},[228,43672,3199],{"class":287},[228,43674,43675],{"class":230,"line":16935},[228,43676,32646],{"class":297},[228,43678,43679,43681,43683],{"class":230,"line":16941},[228,43680,32651],{"class":238},[228,43682,284],{"class":234},[228,43684,32457],{"class":287},[228,43686,43687],{"class":230,"line":16946},[228,43688,32660],{"class":297},[228,43690,43691,43693,43695],{"class":230,"line":16960},[228,43692,32665],{"class":238},[228,43694,284],{"class":234},[228,43696,3199],{"class":287},[228,43698,43699],{"class":230,"line":16965},[228,43700,32674],{"class":297},[228,43702,43703,43705,43707],{"class":230,"line":16970},[228,43704,32679],{"class":238},[228,43706,284],{"class":234},[228,43708,3199],{"class":287},[228,43710,43711],{"class":230,"line":16984},[228,43712,32688],{"class":297},[228,43714,43715,43717,43719],{"class":230,"line":16996},[228,43716,32693],{"class":238},[228,43718,284],{"class":234},[228,43720,3199],{"class":287},[228,43722,43723],{"class":230,"line":17001},[228,43724,32702],{"class":297},[228,43726,43727,43729,43731,43733,43735],{"class":230,"line":17014},[228,43728,3517],{"class":234},[228,43730,31716],{"class":238},[228,43732,26159],{"class":234},[228,43734,31721],{"class":287},[228,43736,32715],{"class":238},[228,43738,43739],{"class":230,"line":17019},[228,43740,32720],{"class":297},[228,43742,43743,43745,43747],{"class":230,"line":17024},[228,43744,32725],{"class":238},[228,43746,284],{"class":234},[228,43748,32730],{"class":238},[228,43750,43751],{"class":230,"line":17029},[228,43752,32735],{"class":297},[228,43754,43755,43757,43759],{"class":230,"line":17042},[228,43756,32740],{"class":238},[228,43758,284],{"class":234},[228,43760,32745],{"class":238},[228,43762,43763],{"class":230,"line":17047},[228,43764,32751],{"class":297},[228,43766,43767],{"class":230,"line":32748},[228,43768,32757],{"class":238},[228,43770,43771],{"class":230,"line":32754},[228,43772,32763],{"class":297},[228,43774,43775],{"class":230,"line":32760},[228,43776,32769],{"class":297},[228,43778,43779,43781,43783],{"class":230,"line":32766},[228,43780,32775],{"class":238},[228,43782,284],{"class":234},[228,43784,32780],{"class":238},[228,43786,43787],{"class":230,"line":32772},[228,43788,32786],{"class":297},[228,43790,43791,43793,43795,43797,43799,43801,43803],{"class":230,"line":32783},[228,43792,32792],{"class":238},[228,43794,284],{"class":234},[228,43796,32797],{"class":238},[228,43798,32800],{"class":5331},[228,43800,284],{"class":234},[228,43802,456],{"class":287},[228,43804,245],{"class":238},[228,43806,43807],{"class":230,"line":32789},[228,43808,32812],{"class":297},[228,43810,43811,43813,43815],{"class":230,"line":32809},[228,43812,32818],{"class":238},[228,43814,284],{"class":234},[228,43816,32823],{"class":238},[228,43818,43819],{"class":230,"line":32815},[228,43820,32829],{"class":297},[228,43822,43823],{"class":230,"line":32826},[228,43824,32835],{"class":238},[228,43826,43827],{"class":230,"line":32832},[228,43828,32841],{"class":297},[228,43830,43831],{"class":230,"line":32838},[228,43832,32847],{"class":238},[228,43834,43835],{"class":230,"line":32844},[228,43836,32853],{"class":297},[228,43838,43839],{"class":230,"line":32850},[228,43840,32859],{"class":238},[228,43842,43843],{"class":230,"line":32856},[228,43844,32865],{"class":297},[228,43846,43847,43849,43851,43853,43855,43857,43859],{"class":230,"line":32862},[228,43848,32871],{"class":238},[228,43850,9592],{"class":234},[228,43852,32876],{"class":238},[228,43854,693],{"class":234},[228,43856,32881],{"class":238},[228,43858,430],{"class":287},[228,43860,245],{"class":238},[228,43862,43863],{"class":230,"line":32868},[228,43864,32891],{"class":297},[228,43866,43867,43869,43871,43873,43875],{"class":230,"line":32888},[228,43868,32897],{"class":238},[228,43870,9592],{"class":234},[228,43872,32902],{"class":238},[228,43874,3063],{"class":234},[228,43876,32907],{"class":238},[228,43878,43879],{"class":230,"line":32894},[228,43880,32913],{"class":297},[228,43882,43883,43885,43887,43889,43891],{"class":230,"line":32910},[228,43884,32919],{"class":238},[228,43886,9592],{"class":234},[228,43888,32881],{"class":238},[228,43890,430],{"class":287},[228,43892,245],{"class":238},[228,43894,43895],{"class":230,"line":32916},[228,43896,32933],{"class":297},[228,43898,43899,43901,43903,43905,43907],{"class":230,"line":32930},[228,43900,3517],{"class":234},[228,43902,32941],{"class":238},[228,43904,26159],{"class":234},[228,43906,31721],{"class":287},[228,43908,32948],{"class":238},[228,43910,43911],{"class":230,"line":32936},[228,43912,32954],{"class":297},[228,43914,43915,43917,43919],{"class":230,"line":32951},[228,43916,32725],{"class":238},[228,43918,284],{"class":234},[228,43920,32730],{"class":238},[228,43922,43923],{"class":230,"line":32957},[228,43924,32969],{"class":297},[228,43926,43927,43929,43931],{"class":230,"line":32966},[228,43928,32740],{"class":238},[228,43930,284],{"class":234},[228,43932,32745],{"class":238},[228,43934,43935],{"class":230,"line":32972},[228,43936,32984],{"class":297},[228,43938,43939],{"class":230,"line":32981},[228,43940,32990],{"class":238},[228,43942,43943],{"class":230,"line":32987},[228,43944,36471],{"class":297},[228,43946,43947,43949],{"class":230,"line":32993},[228,43948,32996],{"class":234},[228,43950,32999],{"class":238},[228,43952,43953],{"class":230,"line":33002},[228,43954,33005],{"class":297},[228,43956,43957,43959,43961],{"class":230,"line":33008},[228,43958,36486],{"class":238},[228,43960,284],{"class":234},[228,43962,32780],{"class":238},[228,43964,43965],{"class":230,"line":33019},[228,43966,33022],{"class":297},[228,43968,43969,43971,43973,43975,43977,43979,43981],{"class":230,"line":33025},[228,43970,36499],{"class":238},[228,43972,284],{"class":234},[228,43974,32797],{"class":238},[228,43976,32800],{"class":5331},[228,43978,284],{"class":234},[228,43980,456],{"class":287},[228,43982,245],{"class":238},[228,43984,43985],{"class":230,"line":33044},[228,43986,33047],{"class":297},[228,43988,43989,43991,43993],{"class":230,"line":33050},[228,43990,36520],{"class":238},[228,43992,284],{"class":234},[228,43994,32823],{"class":238},[228,43996,43997],{"class":230,"line":33061},[228,43998,33064],{"class":297},[228,44000,44001,44003,44005,44007,44009,44011,44013],{"class":230,"line":33067},[228,44002,36533],{"class":238},[228,44004,9592],{"class":234},[228,44006,36538],{"class":238},[228,44008,693],{"class":234},[228,44010,32881],{"class":238},[228,44012,430],{"class":287},[228,44014,245],{"class":238},[228,44016,44017,44019,44021,44023,44025],{"class":230,"line":33087},[228,44018,36551],{"class":238},[228,44020,9592],{"class":234},[228,44022,32902],{"class":238},[228,44024,3063],{"class":234},[228,44026,32907],{"class":238},[228,44028,44029],{"class":230,"line":33103},[228,44030,36564],{"class":297},[228,44032,44033,44035,44037,44039,44041],{"class":230,"line":33109},[228,44034,36569],{"class":238},[228,44036,9592],{"class":234},[228,44038,32881],{"class":238},[228,44040,430],{"class":287},[228,44042,245],{"class":238},[228,44044,44045],{"class":230,"line":33123},[228,44046,33126],{"class":297},[228,44048,44049],{"class":230,"line":33129},[228,44050,33132],{"class":297},[228,44052,44053,44055,44057],{"class":230,"line":33135},[228,44054,33138],{"class":238},[228,44056,822],{"class":234},[228,44058,33143],{"class":238},[228,44060,44061],{"class":230,"line":33146},[228,44062,33149],{"class":297},[228,44064,44065],{"class":230,"line":33152},[228,44066,33155],{"class":297},[228,44068,44069,44071,44073],{"class":230,"line":33158},[228,44070,33161],{"class":238},[228,44072,822],{"class":234},[228,44074,33143],{"class":238},[228,44076,44077],{"class":230,"line":33168},[228,44078,33171],{"class":297},[228,44080,44081,44083,44085],{"class":230,"line":33174},[228,44082,33177],{"class":238},[228,44084,822],{"class":234},[228,44086,33182],{"class":238},[228,44088,44089],{"class":230,"line":33185},[228,44090,33188],{"class":297},[228,44092,44093,44095,44097],{"class":230,"line":33191},[228,44094,33194],{"class":238},[228,44096,822],{"class":234},[228,44098,33182],{"class":238},[228,44100,44101],{"class":230,"line":33201},[228,44102,2514],{"emptyLinePlaceholder":157},[228,44104,44105],{"class":230,"line":33206},[228,44106,33209],{"class":297},[228,44108,44109,44111,44113,44115,44117,44119,44121,44123,44125,44127,44129,44131,44133,44135,44137,44139,44141,44143,44145,44147],{"class":230,"line":33212},[228,44110,32566],{"class":287},[228,44112,239],{"class":238},[228,44114,3706],{"class":343},[228,44116,32574],{"class":287},[228,44118,33223],{"class":343},[228,44120,1134],{"class":287},[228,44122,33228],{"class":234},[228,44124,1184],{"class":287},[228,44126,33233],{"class":343},[228,44128,1134],{"class":287},[228,44130,33228],{"class":234},[228,44132,1184],{"class":287},[228,44134,3706],{"class":343},[228,44136,33244],{"class":238},[228,44138,770],{"class":234},[228,44140,456],{"class":287},[228,44142,33251],{"class":238},[228,44144,770],{"class":234},[228,44146,456],{"class":287},[228,44148,33258],{"class":238},[228,44150,44151,44153,44155,44157,44159,44161,44163,44165,44167,44169,44171,44173,44175,44177,44179,44181,44183,44185,44187,44189],{"class":230,"line":33261},[228,44152,32566],{"class":287},[228,44154,239],{"class":238},[228,44156,3706],{"class":343},[228,44158,32574],{"class":287},[228,44160,33272],{"class":343},[228,44162,1134],{"class":287},[228,44164,33228],{"class":234},[228,44166,1184],{"class":287},[228,44168,33281],{"class":343},[228,44170,1134],{"class":287},[228,44172,33228],{"class":234},[228,44174,1184],{"class":287},[228,44176,3706],{"class":343},[228,44178,33292],{"class":238},[228,44180,770],{"class":234},[228,44182,456],{"class":287},[228,44184,33299],{"class":238},[228,44186,770],{"class":234},[228,44188,456],{"class":287},[228,44190,33258],{"class":238},[228,44192,44193],{"class":230,"line":33308},[228,44194,2514],{"emptyLinePlaceholder":157},[228,44196,44197],{"class":230,"line":33313},[228,44198,33316],{"class":297},[228,44200,44201,44203,44205,44207,44209,44211,44213],{"class":230,"line":33319},[228,44202,2611],{"class":234},[228,44204,33324],{"class":238},[228,44206,770],{"class":234},[228,44208,456],{"class":287},[228,44210,1178],{"class":238},[228,44212,1198],{"class":234},[228,44214,33335],{"class":238},[228,44216,44217],{"class":230,"line":33338},[228,44218,33341],{"class":297},[228,44220,44221,44223,44225,44227,44229,44231,44233],{"class":230,"line":33344},[228,44222,33347],{"class":238},[228,44224,278],{"class":287},[228,44226,284],{"class":234},[228,44228,33354],{"class":238},[228,44230,770],{"class":234},[228,44232,456],{"class":287},[228,44234,33361],{"class":238},[228,44236,44237],{"class":230,"line":33364},[228,44238,33367],{"class":297},[228,44240,44241],{"class":230,"line":33370},[228,44242,33373],{"class":297},[228,44244,44245,44247,44249],{"class":230,"line":33376},[228,44246,33379],{"class":238},[228,44248,284],{"class":234},[228,44250,32429],{"class":238},[228,44252,44253],{"class":230,"line":33386},[228,44254,2514],{"emptyLinePlaceholder":157},[228,44256,44257],{"class":230,"line":33391},[228,44258,33394],{"class":297},[228,44260,44261,44263,44265,44267,44269],{"class":230,"line":33397},[228,44262,33400],{"class":238},[228,44264,284],{"class":234},[228,44266,33405],{"class":238},[228,44268,770],{"class":234},[228,44270,33410],{"class":238},[228,44272,44273,44275,44277,44279,44281,44283,44285,44287,44289,44291,44293,44295,44297,44299,44301,44303,44305,44307],{"class":230,"line":33413},[228,44274,32566],{"class":287},[228,44276,239],{"class":238},[228,44278,33420],{"class":343},[228,44280,1134],{"class":287},[228,44282,33425],{"class":234},[228,44284,1184],{"class":287},[228,44286,782],{"class":343},[228,44288,1134],{"class":287},[228,44290,33425],{"class":234},[228,44292,1184],{"class":287},[228,44294,33438],{"class":343},[228,44296,33441],{"class":238},[228,44298,33444],{"class":234},[228,44300,1145],{"class":287},[228,44302,33449],{"class":238},[228,44304,566],{"class":234},[228,44306,1145],{"class":287},[228,44308,30612],{"class":238},[228,44310,44311],{"class":230,"line":33458},[228,44312,36848],{"class":297},[228,44314,44315],{"class":230,"line":33464},[228,44316,36853],{"class":297},[228,44318,44319,44321,44323],{"class":230,"line":33470},[228,44320,36858],{"class":238},[228,44322,33482],{"class":343},[228,44324,245],{"class":238},[228,44326,44327],{"class":230,"line":33476},[228,44328,33502],{"class":297},[228,44330,44331,44333,44335,44337,44339,44341],{"class":230,"line":33487},[228,44332,33508],{"class":238},[228,44334,284],{"class":234},[228,44336,33513],{"class":238},[228,44338,33516],{"class":5331},[228,44340,284],{"class":234},[228,44342,1660],{"class":238},[228,44344,44345,44347,44349,44351],{"class":230,"line":33493},[228,44346,33526],{"class":343},[228,44348,1097],{"class":238},[228,44350,33531],{"class":287},[228,44352,33534],{"class":238},[228,44354,44355,44357],{"class":230,"line":33499},[228,44356,33540],{"class":343},[228,44358,33543],{"class":238},[228,44360,44361,44363],{"class":230,"line":33505},[228,44362,33549],{"class":343},[228,44364,33552],{"class":238},[228,44366,44367,44369],{"class":230,"line":33523},[228,44368,33558],{"class":343},[228,44370,33561],{"class":238},[228,44372,44373,44375],{"class":230,"line":33537},[228,44374,33567],{"class":343},[228,44376,33570],{"class":238},[228,44378,44379],{"class":230,"line":33546},[228,44380,33576],{"class":238},[228,44382,44383],{"class":230,"line":33555},[228,44384,33582],{"class":297},[228,44386,44387,44389],{"class":230,"line":33564},[228,44388,4204],{"class":234},[228,44390,33590],{"class":238},[228,44392,44393],{"class":230,"line":33573},[228,44394,2514],{"emptyLinePlaceholder":157},[228,44396,44397],{"class":230,"line":33579},[228,44398,33601],{"class":297},[228,44400,44401,44403,44405],{"class":230,"line":33585},[228,44402,32062],{"class":234},[228,44404,33609],{"class":2077},[228,44406,33612],{"class":238},[228,44408,44409],{"class":230,"line":33593},[228,44410,33618],{"class":297},[228,44412,44413,44415,44417,44419,44421,44423,44425,44427],{"class":230,"line":33598},[228,44414,33624],{"class":238},[228,44416,31808],{"class":5331},[228,44418,284],{"class":234},[228,44420,239],{"class":238},[228,44422,736],{"class":287},[228,44424,616],{"class":238},[228,44426,531],{"class":287},[228,44428,30612],{"class":238},[228,44430,44431],{"class":230,"line":33604},[228,44432,33644],{"class":297},[228,44434,44435],{"class":230,"line":33615},[228,44436,33650],{"class":297},[228,44438,44439],{"class":230,"line":33621},[228,44440,33656],{"class":297},[228,44442,44443,44445,44447,44449,44451,44453,44455],{"class":230,"line":33641},[228,44444,31842],{"class":238},[228,44446,456],{"class":287},[228,44448,616],{"class":238},[228,44450,316],{"class":287},[228,44452,616],{"class":238},[228,44454,456],{"class":287},[228,44456,245],{"class":238},[228,44458,44459],{"class":230,"line":33647},[228,44460,33679],{"class":297},[228,44462,44463],{"class":230,"line":33653},[228,44464,33685],{"class":297},[228,44466,44467],{"class":230,"line":33659},[228,44468,33691],{"class":297},[228,44470,44471],{"class":230,"line":33676},[228,44472,33697],{"class":297},[228,44474,44475],{"class":230,"line":33682},[228,44476,33703],{"class":297},[228,44478,44479,44481,44483,44485,44487,44489,44491,44493,44495],{"class":230,"line":33688},[228,44480,33709],{"class":238},[228,44482,33712],{"class":343},[228,44484,33715],{"class":238},[228,44486,33718],{"class":343},[228,44488,616],{"class":238},[228,44490,33723],{"class":5331},[228,44492,284],{"class":234},[228,44494,33728],{"class":343},[228,44496,245],{"class":238},[228,44498,44499,44501,44503,44505,44507,44509,44511,44513,44515],{"class":230,"line":33694},[228,44500,33709],{"class":238},[228,44502,33712],{"class":343},[228,44504,33740],{"class":238},[228,44506,33743],{"class":343},[228,44508,616],{"class":238},[228,44510,33723],{"class":5331},[228,44512,284],{"class":234},[228,44514,33752],{"class":343},[228,44516,245],{"class":238},[228,44518,44519],{"class":230,"line":33700},[228,44520,33760],{"class":297},[228,44522,44523],{"class":230,"line":33706},[228,44524,33766],{"class":238},[228,44526,44527],{"class":230,"line":33733},[228,44528,33772],{"class":297},[228,44530,44531,44533,44535],{"class":230,"line":33757},[228,44532,33778],{"class":238},[228,44534,33781],{"class":343},[228,44536,245],{"class":238},[228,44538,44539,44541,44543],{"class":230,"line":33763},[228,44540,33789],{"class":238},[228,44542,33792],{"class":343},[228,44544,245],{"class":238},[228,44546,44547],{"class":230,"line":33769},[228,44548,33800],{"class":297},[228,44550,44551,44553,44555,44557,44559,44561,44563],{"class":230,"line":33775},[228,44552,31842],{"class":238},[228,44554,456],{"class":287},[228,44556,616],{"class":238},[228,44558,316],{"class":287},[228,44560,616],{"class":238},[228,44562,316],{"class":287},[228,44564,245],{"class":238},[228,44566,44567,44569,44571,44573,44575,44577,44579,44581,44583],{"class":230,"line":33786},[228,44568,33709],{"class":238},[228,44570,33712],{"class":343},[228,44572,33827],{"class":238},[228,44574,33718],{"class":343},[228,44576,616],{"class":238},[228,44578,33723],{"class":5331},[228,44580,284],{"class":234},[228,44582,33838],{"class":343},[228,44584,245],{"class":238},[228,44586,44587,44589,44591,44593,44595,44597,44599,44601,44603],{"class":230,"line":33797},[228,44588,33709],{"class":238},[228,44590,33712],{"class":343},[228,44592,33850],{"class":238},[228,44594,33743],{"class":343},[228,44596,616],{"class":238},[228,44598,33723],{"class":5331},[228,44600,284],{"class":234},[228,44602,33861],{"class":343},[228,44604,245],{"class":238},[228,44606,44607],{"class":230,"line":33803},[228,44608,33869],{"class":297},[228,44610,44611],{"class":230,"line":33820},[228,44612,33766],{"class":238},[228,44614,44615,44617,44619],{"class":230,"line":33843},[228,44616,33778],{"class":238},[228,44618,33712],{"class":343},[228,44620,245],{"class":238},[228,44622,44623,44625,44627],{"class":230,"line":33866},[228,44624,33789],{"class":238},[228,44626,33891],{"class":343},[228,44628,245],{"class":238},[228,44630,44631],{"class":230,"line":33872},[228,44632,33899],{"class":238},[228,44634,44635],{"class":230,"line":33877},[228,44636,2514],{"emptyLinePlaceholder":157},[228,44638,44639],{"class":230,"line":33886},[228,44640,33910],{"class":297},[228,44642,44643,44645,44647,44649,44651],{"class":230,"line":33896},[228,44644,1645],{"class":234},[228,44646,31335],{"class":287},[228,44648,3063],{"class":234},[228,44650,31340],{"class":343},[228,44652,3853],{"class":238},[228,44654,44655],{"class":230,"line":33902},[228,44656,33929],{"class":297},[228,44658,44659,44662,44664],{"class":230,"line":33907},[228,44660,44661],{"class":238},"    GoogLeNet",[228,44663,284],{"class":234},[228,44665,44666],{"class":238},"GoogLeNet(Inception)\n",[228,44668,44669,44671,44673],{"class":230,"line":33913},[228,44670,33946],{"class":238},[228,44672,284],{"class":234},[228,44674,33951],{"class":238},[228,44676,44677,44679,44681,44684,44686,44688,44690],{"class":230,"line":33926},[228,44678,33508],{"class":238},[228,44680,284],{"class":234},[228,44682,44683],{"class":238},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[228,44685,33964],{"class":5331},[228,44687,284],{"class":234},[228,44689,1189],{"class":287},[228,44691,245],{"class":238},[228,44693,44694],{"class":230,"line":33932},[228,44695,33976],{"class":238},[183,44697,44698],{"start":1293},[186,44699,40689],{},[220,44701,44703],{"className":30493,"code":44702,"language":30495,"meta":141,"style":141},"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",[30,44704,44705,44711,44721,44731,44735,44745,44756,44760,44764,44768,44776,44792,44802,44818,44828,44842,44846,44856,44866,44876,44882,44886,44890,44898,44902,44918,44926,44930,44934,44942,44950,44954,44958,44962,44966,44972,44976,44986,44994,45002,45006,45010,45014,45022,45026,45042,45046,45050,45054,45066,45070,45082,45086,45090,45102,45106,45116,45120,45124,45136,45140,45148,45152,45156,45164,45168,45176,45180,45184,45188,45192,45196,45212,45220,45224,45228,45276,45282,45286,45296,45304,45312,45316,45320,45324,45328,45336,45340,45356,45360,45368,45376],{"__ignoreMap":141},[228,44706,44707,44709],{"class":230,"line":231},[228,44708,30507],{"class":234},[228,44710,30510],{"class":238},[228,44712,44713,44715,44717,44719],{"class":230,"line":142},[228,44714,30507],{"class":234},[228,44716,31530],{"class":238},[228,44718,31498],{"class":234},[228,44720,31535],{"class":238},[228,44722,44723,44725,44727,44729],{"class":230,"line":1293},[228,44724,30852],{"class":234},[228,44726,31513],{"class":238},[228,44728,30507],{"class":234},[228,44730,31518],{"class":238},[228,44732,44733],{"class":230,"line":1308},[228,44734,34037],{"class":297},[228,44736,44737,44739,44741,44743],{"class":230,"line":1314},[228,44738,30852],{"class":234},[228,44740,31483],{"class":238},[228,44742,30507],{"class":234},[228,44744,31488],{"class":238},[228,44746,44747,44749,44751,44753],{"class":230,"line":1328},[228,44748,30852],{"class":234},[228,44750,32029],{"class":238},[228,44752,30507],{"class":234},[228,44754,44755],{"class":238}," GoogLeNet,Inception\n",[228,44757,44758],{"class":230,"line":1334},[228,44759,2514],{"emptyLinePlaceholder":157},[228,44761,44762],{"class":230,"line":1425},[228,44763,2514],{"emptyLinePlaceholder":157},[228,44765,44766],{"class":230,"line":1431},[228,44767,34066],{"class":297},[228,44769,44770,44772,44774],{"class":230,"line":1443},[228,44771,32062],{"class":234},[228,44773,34073],{"class":2077},[228,44775,32068],{"class":238},[228,44777,44778,44780,44782,44784,44786,44788,44790],{"class":230,"line":1726},[228,44779,34080],{"class":238},[228,44781,284],{"class":234},[228,44783,31570],{"class":238},[228,44785,31573],{"class":5331},[228,44787,284],{"class":234},[228,44789,31578],{"class":343},[228,44791,31581],{"class":238},[228,44793,44794,44796,44798,44800],{"class":230,"line":1731},[228,44795,34097],{"class":5331},[228,44797,284],{"class":234},[228,44799,34102],{"class":287},[228,44801,31581],{"class":238},[228,44803,44804,44806,44808,44810,44812,44814,44816],{"class":230,"line":1737},[228,44805,34109],{"class":5331},[228,44807,284],{"class":234},[228,44809,31608],{"class":238},[228,44811,31611],{"class":5331},[228,44813,284],{"class":234},[228,44815,35564],{"class":287},[228,44817,31619],{"class":238},[228,44819,44820,44822,44824,44826],{"class":230,"line":1742},[228,44821,34126],{"class":5331},[228,44823,284],{"class":234},[228,44825,31591],{"class":287},[228,44827,245],{"class":238},[228,44829,44830,44832,44834,44836,44838,44840],{"class":230,"line":1756},[228,44831,34137],{"class":238},[228,44833,284],{"class":234},[228,44835,31649],{"class":238},[228,44837,31652],{"class":5331},[228,44839,284],{"class":234},[228,44841,34148],{"class":238},[228,44843,44844],{"class":230,"line":1761},[228,44845,34153],{"class":297},[228,44847,44848,44850,44852,44854],{"class":230,"line":1767},[228,44849,34158],{"class":5331},[228,44851,284],{"class":234},[228,44853,456],{"class":287},[228,44855,31581],{"class":238},[228,44857,44858,44860,44862,44864],{"class":230,"line":1788},[228,44859,34169],{"class":5331},[228,44861,284],{"class":234},[228,44863,31591],{"class":287},[228,44865,31581],{"class":238},[228,44867,44868,44870,44872,44874],{"class":230,"line":1793},[228,44869,34180],{"class":5331},[228,44871,284],{"class":234},[228,44873,430],{"class":287},[228,44875,245],{"class":238},[228,44877,44878,44880],{"class":230,"line":1807},[228,44879,4204],{"class":234},[228,44881,34193],{"class":238},[228,44883,44884],{"class":230,"line":1812},[228,44885,2514],{"emptyLinePlaceholder":157},[228,44887,44888],{"class":230,"line":1841},[228,44889,34202],{"class":297},[228,44891,44892,44894,44896],{"class":230,"line":1846},[228,44893,32062],{"class":234},[228,44895,34209],{"class":2077},[228,44897,34212],{"class":238},[228,44899,44900],{"class":230,"line":1863},[228,44901,34217],{"class":297},[228,44903,44904,44906,44908,44910,44912,44914,44916],{"class":230,"line":1868},[228,44905,31352],{"class":238},[228,44907,284],{"class":234},[228,44909,31359],{"class":343},[228,44911,1818],{"class":234},[228,44913,31364],{"class":238},[228,44915,1815],{"class":234},[228,44917,34234],{"class":343},[228,44919,44920,44922,44924],{"class":230,"line":1873},[228,44921,31404],{"class":238},[228,44923,284],{"class":234},[228,44925,32404],{"class":238},[228,44927,44928],{"class":230,"line":1878},[228,44929,2514],{"emptyLinePlaceholder":157},[228,44931,44932],{"class":230,"line":1892},[228,44933,34251],{"class":297},[228,44935,44936,44938,44940],{"class":230,"line":1897},[228,44937,34256],{"class":238},[228,44939,284],{"class":234},[228,44941,32457],{"class":287},[228,44943,44944,44946,44948],{"class":230,"line":2691},[228,44945,34265],{"class":238},[228,44947,284],{"class":234},[228,44949,3199],{"class":287},[228,44951,44952],{"class":230,"line":2705},[228,44953,2514],{"emptyLinePlaceholder":157},[228,44955,44956],{"class":230,"line":2713},[228,44957,34278],{"class":297},[228,44959,44960],{"class":230,"line":2718},[228,44961,34283],{"class":297},[228,44963,44964],{"class":230,"line":2724},[228,44965,34288],{"class":297},[228,44967,44968,44970],{"class":230,"line":2730},[228,44969,34293],{"class":234},[228,44971,32999],{"class":238},[228,44973,44974],{"class":230,"line":2735},[228,44975,34300],{"class":297},[228,44977,44978,44980,44982,44984],{"class":230,"line":8063},[228,44979,3517],{"class":234},[228,44981,34307],{"class":238},[228,44983,26159],{"class":234},[228,44985,34312],{"class":238},[228,44987,44988,44990,44992],{"class":230,"line":8087},[228,44989,34317],{"class":238},[228,44991,284],{"class":234},[228,44993,34322],{"class":238},[228,44995,44996,44998,45000],{"class":230,"line":8092},[228,44997,34327],{"class":238},[228,44999,284],{"class":234},[228,45001,34332],{"class":238},[228,45003,45004],{"class":230,"line":8098},[228,45005,34337],{"class":297},[228,45007,45008],{"class":230,"line":8125},[228,45009,32990],{"class":238},[228,45011,45012],{"class":230,"line":8130},[228,45013,34346],{"class":297},[228,45015,45016,45018,45020],{"class":230,"line":8136},[228,45017,32775],{"class":238},[228,45019,284],{"class":234},[228,45021,34355],{"class":238},[228,45023,45024],{"class":230,"line":8148},[228,45025,34360],{"class":297},[228,45027,45028,45030,45032,45034,45036,45038,45040],{"class":230,"line":8160},[228,45029,32792],{"class":238},[228,45031,284],{"class":234},[228,45033,32797],{"class":238},[228,45035,32800],{"class":5331},[228,45037,284],{"class":234},[228,45039,456],{"class":287},[228,45041,245],{"class":238},[228,45043,45044],{"class":230,"line":8172},[228,45045,34381],{"class":297},[228,45047,45048],{"class":230,"line":9831},[228,45049,34386],{"class":297},[228,45051,45052],{"class":230,"line":9856},[228,45053,34391],{"class":297},[228,45055,45056,45058,45060,45062,45064],{"class":230,"line":9879},[228,45057,34396],{"class":238},[228,45059,9592],{"class":234},[228,45061,32902],{"class":238},[228,45063,3063],{"class":234},[228,45065,34405],{"class":238},[228,45067,45068],{"class":230,"line":9903},[228,45069,34410],{"class":297},[228,45071,45072,45074,45076,45078,45080],{"class":230,"line":9908},[228,45073,34415],{"class":238},[228,45075,9592],{"class":234},[228,45077,34420],{"class":238},[228,45079,430],{"class":287},[228,45081,245],{"class":238},[228,45083,45084],{"class":230,"line":9913},[228,45085,2514],{"emptyLinePlaceholder":157},[228,45087,45088],{"class":230,"line":9918},[228,45089,34433],{"class":297},[228,45091,45092,45094,45096,45098,45100],{"class":230,"line":9927},[228,45093,34438],{"class":238},[228,45095,284],{"class":234},[228,45097,34443],{"class":238},[228,45099,822],{"class":234},[228,45101,34448],{"class":238},[228,45103,45104],{"class":230,"line":9932},[228,45105,34453],{"class":297},[228,45107,45108,45110,45112,45114],{"class":230,"line":9938},[228,45109,32566],{"class":287},[228,45111,239],{"class":238},[228,45113,34462],{"class":343},[228,45115,34465],{"class":238},[228,45117,45118],{"class":230,"line":9959},[228,45119,2514],{"emptyLinePlaceholder":157},[228,45121,45122],{"class":230,"line":9965},[228,45123,34474],{"class":297},[228,45125,45126,45128,45130,45132,45134],{"class":230,"line":9979},[228,45127,1645],{"class":234},[228,45129,31335],{"class":287},[228,45131,3063],{"class":234},[228,45133,31340],{"class":343},[228,45135,3853],{"class":238},[228,45137,45138],{"class":230,"line":9985},[228,45139,34491],{"class":297},[228,45141,45142,45144,45146],{"class":230,"line":10012},[228,45143,31404],{"class":238},[228,45145,284],{"class":234},[228,45147,44666],{"class":238},[228,45149,45150],{"class":230,"line":10021},[228,45151,34504],{"class":297},[228,45153,45154],{"class":230,"line":10027},[228,45155,34509],{"class":297},[228,45157,45158,45160,45162],{"class":230,"line":10035},[228,45159,34514],{"class":238},[228,45161,34517],{"class":343},[228,45163,30612],{"class":238},[228,45165,45166],{"class":230,"line":10040},[228,45167,34524],{"class":297},[228,45169,45170,45172,45174],{"class":230,"line":16719},[228,45171,34137],{"class":238},[228,45173,284],{"class":234},[228,45175,34533],{"class":238},[228,45177,45178],{"class":230,"line":16725},[228,45179,34538],{"class":297},[228,45181,45182],{"class":230,"line":16748},[228,45183,34543],{"class":238},[228,45185,45186],{"class":230,"line":16754},[228,45187,2514],{"emptyLinePlaceholder":157},[228,45189,45190],{"class":230,"line":16777},[228,45191,34552],{"class":297},[228,45193,45194],{"class":230,"line":16791},[228,45195,34557],{"class":297},[228,45197,45198,45200,45202,45204,45206,45208,45210],{"class":230,"line":16811},[228,45199,31352],{"class":238},[228,45201,284],{"class":234},[228,45203,31359],{"class":343},[228,45205,1818],{"class":234},[228,45207,31364],{"class":238},[228,45209,1815],{"class":234},[228,45211,34234],{"class":343},[228,45213,45214,45216,45218],{"class":230,"line":16817},[228,45215,31404],{"class":238},[228,45217,284],{"class":234},[228,45219,32404],{"class":238},[228,45221,45222],{"class":230,"line":16828},[228,45223,34586],{"class":297},[228,45225,45226],{"class":230,"line":16851},[228,45227,34591],{"class":297},[228,45229,45230,45232,45234,45236,45238,45240,45242,45244,45246,45248,45250,45252,45254,45256,45258,45260,45262,45264,45266,45268,45270,45272,45274],{"class":230,"line":16873},[228,45231,34596],{"class":238},[228,45233,284],{"class":234},[228,45235,1128],{"class":238},[228,45237,34603],{"class":343},[228,45239,616],{"class":238},[228,45241,34608],{"class":343},[228,45243,616],{"class":238},[228,45245,34613],{"class":343},[228,45247,616],{"class":238},[228,45249,34618],{"class":343},[228,45251,616],{"class":238},[228,45253,34623],{"class":343},[228,45255,616],{"class":238},[228,45257,34628],{"class":343},[228,45259,616],{"class":238},[228,45261,34633],{"class":343},[228,45263,616],{"class":238},[228,45265,34638],{"class":343},[228,45267,616],{"class":238},[228,45269,34643],{"class":343},[228,45271,616],{"class":238},[228,45273,34648],{"class":343},[228,45275,33361],{"class":238},[228,45277,45278,45280],{"class":230,"line":16878},[228,45279,34293],{"class":234},[228,45281,32999],{"class":238},[228,45283,45284],{"class":230,"line":16884},[228,45285,34661],{"class":297},[228,45287,45288,45290,45292,45294],{"class":230,"line":16898},[228,45289,3517],{"class":234},[228,45291,34668],{"class":238},[228,45293,26159],{"class":234},[228,45295,34312],{"class":238},[228,45297,45298,45300,45302],{"class":230,"line":16911},[228,45299,32725],{"class":238},[228,45301,284],{"class":234},[228,45303,32730],{"class":238},[228,45305,45306,45308,45310],{"class":230,"line":16916},[228,45307,32740],{"class":238},[228,45309,284],{"class":234},[228,45311,32745],{"class":238},[228,45313,45314],{"class":230,"line":16930},[228,45315,2514],{"emptyLinePlaceholder":157},[228,45317,45318],{"class":230,"line":16935},[228,45319,34697],{"class":297},[228,45321,45322],{"class":230,"line":16941},[228,45323,32990],{"class":238},[228,45325,45326],{"class":230,"line":16946},[228,45327,34706],{"class":297},[228,45329,45330,45332,45334],{"class":230,"line":16960},[228,45331,32775],{"class":238},[228,45333,284],{"class":234},[228,45335,32780],{"class":238},[228,45337,45338],{"class":230,"line":16965},[228,45339,34719],{"class":297},[228,45341,45342,45344,45346,45348,45350,45352,45354],{"class":230,"line":16970},[228,45343,32792],{"class":238},[228,45345,284],{"class":234},[228,45347,32797],{"class":238},[228,45349,32800],{"class":5331},[228,45351,284],{"class":234},[228,45353,456],{"class":287},[228,45355,245],{"class":238},[228,45357,45358],{"class":230,"line":16984},[228,45359,34740],{"class":297},[228,45361,45362,45364,45366],{"class":230,"line":16996},[228,45363,34745],{"class":238},[228,45365,284],{"class":234},[228,45367,34750],{"class":238},[228,45369,45370,45372,45374],{"class":230,"line":17001},[228,45371,34755],{"class":238},[228,45373,284],{"class":234},[228,45375,34760],{"class":238},[228,45377,45378,45380,45382,45384,45386,45388,45390,45392],{"class":230,"line":17014},[228,45379,34765],{"class":287},[228,45381,239],{"class":238},[228,45383,34770],{"class":343},[228,45385,34773],{"class":238},[228,45387,34776],{"class":343},[228,45389,616],{"class":238},[228,45391,34781],{"class":343},[228,45393,34784],{"class":238},[200,45395,45397],{"id":45396},"_24训练自己的数据集","2.4.训练自己的数据集",[19,45399,45400],{},"猫狗分类任务",[19,45402,45403],{},"划分数据集和验证集",[220,45405,45407],{"className":30493,"code":45406,"language":30495,"meta":141,"style":141},"# 创建脚本，用于划分数据集和验证集\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",[30,45408,45409,45414,45421,45426,45437,45444,45448,45458,45472,45481,45485,45490,45500,45520,45524,45529,45539,45550,45563,45567,45572,45581,45591,45602,45606,45611,45621,45625,45630,45635,45640,45645,45650,45654,45664,45691,45704,45716,45743,45748,45753,45767,45772,45784,45799,45814,45822,45826,45831,45837,45849,45862,45867,45872,45877,45927,45933,45937],{"__ignoreMap":141},[228,45410,45411],{"class":230,"line":231},[228,45412,45413],{"class":297},"# 创建脚本，用于划分数据集和验证集\n",[228,45415,45416,45418],{"class":230,"line":142},[228,45417,30507],{"class":234},[228,45419,45420],{"class":238}," os\n",[228,45422,45423],{"class":230,"line":1293},[228,45424,45425],{"class":297},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[228,45427,45428,45430,45433,45435],{"class":230,"line":1308},[228,45429,30852],{"class":234},[228,45431,45432],{"class":238}," shutil ",[228,45434,30507],{"class":234},[228,45436,31937],{"class":238},[228,45438,45439,45441],{"class":230,"line":1314},[228,45440,30507],{"class":234},[228,45442,45443],{"class":238}," random\n",[228,45445,45446],{"class":230,"line":1328},[228,45447,2514],{"emptyLinePlaceholder":157},[228,45449,45450,45452,45455],{"class":230,"line":1334},[228,45451,32062],{"class":234},[228,45453,45454],{"class":2077}," mkfile",[228,45456,45457],{"class":238},"(file):\n",[228,45459,45460,45462,45464,45467,45470],{"class":230,"line":1425},[228,45461,3215],{"class":234},[228,45463,39045],{"class":234},[228,45465,45466],{"class":238}," os.path.exists(",[228,45468,45469],{"class":5331},"file",[228,45471,30901],{"class":238},[228,45473,45474,45477,45479],{"class":230,"line":1431},[228,45475,45476],{"class":238},"        os.makedirs(",[228,45478,45469],{"class":5331},[228,45480,245],{"class":238},[228,45482,45483],{"class":230,"line":1443},[228,45484,2514],{"emptyLinePlaceholder":157},[228,45486,45487],{"class":230,"line":1726},[228,45488,45489],{"class":297},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[228,45491,45492,45495,45497],{"class":230,"line":1731},[228,45493,45494],{"class":238},"file_path",[228,45496,284],{"class":234},[228,45498,45499],{"class":343},"'data_cat_dog'\n",[228,45501,45502,45505,45507,45510,45512,45515,45517],{"class":230,"line":1737},[228,45503,45504],{"class":238},"flower_class",[228,45506,284],{"class":234},[228,45508,45509],{"class":238},"[cla ",[228,45511,3139],{"class":234},[228,45513,45514],{"class":238}," cla ",[228,45516,26159],{"class":234},[228,45518,45519],{"class":238}," os.listdir(file_path)]\n",[228,45521,45522],{"class":230,"line":1742},[228,45523,2514],{"emptyLinePlaceholder":157},[228,45525,45526],{"class":230,"line":1756},[228,45527,45528],{"class":297},"# 创建训练集train文件夹\n",[228,45530,45531,45534,45537],{"class":230,"line":1761},[228,45532,45533],{"class":238},"mkfile(",[228,45535,45536],{"class":343},"'data\u002Ftrain'",[228,45538,245],{"class":238},[228,45540,45541,45543,45545,45547],{"class":230,"line":1767},[228,45542,3139],{"class":234},[228,45544,45514],{"class":238},[228,45546,26159],{"class":234},[228,45548,45549],{"class":238}," flower_class:\n",[228,45551,45552,45555,45558,45560],{"class":230,"line":1788},[228,45553,45554],{"class":238},"    mkfile(",[228,45556,45557],{"class":343},"'data\u002Ftrain\u002F'",[228,45559,719],{"class":234},[228,45561,45562],{"class":238},"cla)\n",[228,45564,45565],{"class":230,"line":1793},[228,45566,2514],{"emptyLinePlaceholder":157},[228,45568,45569],{"class":230,"line":1807},[228,45570,45571],{"class":297},"# 创建验证集val文件夹\n",[228,45573,45574,45576,45579],{"class":230,"line":1812},[228,45575,45533],{"class":238},[228,45577,45578],{"class":343},"'data\u002Ftest'",[228,45580,245],{"class":238},[228,45582,45583,45585,45587,45589],{"class":230,"line":1841},[228,45584,3139],{"class":234},[228,45586,45514],{"class":238},[228,45588,26159],{"class":234},[228,45590,45549],{"class":238},[228,45592,45593,45595,45598,45600],{"class":230,"line":1846},[228,45594,45554],{"class":238},[228,45596,45597],{"class":343},"'data\u002Ftest\u002F'",[228,45599,719],{"class":234},[228,45601,45562],{"class":238},[228,45603,45604],{"class":230,"line":1863},[228,45605,2514],{"emptyLinePlaceholder":157},[228,45607,45608],{"class":230,"line":1868},[228,45609,45610],{"class":297},"# 划分比例，训练集：测试集=9：1\n",[228,45612,45613,45616,45618],{"class":230,"line":1873},[228,45614,45615],{"class":238},"split_rate",[228,45617,284],{"class":234},[228,45619,45620],{"class":287},"0.1\n",[228,45622,45623],{"class":230,"line":1878},[228,45624,2514],{"emptyLinePlaceholder":157},[228,45626,45627],{"class":230,"line":1892},[228,45628,45629],{"class":297},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[228,45631,45632],{"class":230,"line":1897},[228,45633,45634],{"class":297},"# cla_path：当前类别的原始图片路径\n",[228,45636,45637],{"class":230,"line":2691},[228,45638,45639],{"class":297},"# images：当前类别下所有图片的文件名列表\n",[228,45641,45642],{"class":230,"line":2705},[228,45643,45644],{"class":297},"# num：该类别图片总数\n",[228,45646,45647],{"class":230,"line":2713},[228,45648,45649],{"class":297},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[228,45651,45652],{"class":230,"line":2718},[228,45653,2514],{"emptyLinePlaceholder":157},[228,45655,45656,45658,45660,45662],{"class":230,"line":2724},[228,45657,3139],{"class":234},[228,45659,45514],{"class":238},[228,45661,26159],{"class":234},[228,45663,45549],{"class":238},[228,45665,45666,45669,45671,45674,45676,45679,45682,45684,45686,45688],{"class":230,"line":2730},[228,45667,45668],{"class":238},"    cla_path ",[228,45670,284],{"class":234},[228,45672,45673],{"class":238}," file_path ",[228,45675,719],{"class":234},[228,45677,45678],{"class":343}," '\u002F'",[228,45680,45681],{"class":234}," +",[228,45683,45514],{"class":238},[228,45685,719],{"class":234},[228,45687,45678],{"class":343},[228,45689,45690],{"class":297},"  # 某一类别的子目录\n",[228,45692,45693,45696,45698,45701],{"class":230,"line":2735},[228,45694,45695],{"class":238},"    images ",[228,45697,284],{"class":234},[228,45699,45700],{"class":238}," os.listdir(cla_path)  ",[228,45702,45703],{"class":297},"# iamges 列表存储了该目录下所有图像的名称\n",[228,45705,45706,45709,45711,45713],{"class":230,"line":8063},[228,45707,45708],{"class":238},"    num ",[228,45710,284],{"class":234},[228,45712,7446],{"class":287},[228,45714,45715],{"class":238},"(images)\n",[228,45717,45718,45721,45723,45726,45728,45730,45732,45735,45737,45740],{"class":230,"line":8087},[228,45719,45720],{"class":238},"    eval_index ",[228,45722,284],{"class":234},[228,45724,45725],{"class":238}," random.sample(images, ",[228,45727,731],{"class":5331},[228,45729,284],{"class":234},[228,45731,242],{"class":287},[228,45733,45734],{"class":238},"(num ",[228,45736,693],{"class":234},[228,45738,45739],{"class":238}," split_rate))  ",[228,45741,45742],{"class":297},"# 从images列表中随机抽取 k 个图像名称\n",[228,45744,45745],{"class":230,"line":8092},[228,45746,45747],{"class":297},"    # 遍历该类别下的所有图片\n",[228,45749,45750],{"class":230,"line":8098},[228,45751,45752],{"class":297},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[228,45754,45755,45757,45760,45762,45764],{"class":230,"line":8125},[228,45756,3315],{"class":234},[228,45758,45759],{"class":238}," index, image ",[228,45761,26159],{"class":234},[228,45763,31721],{"class":287},[228,45765,45766],{"class":238},"(images):\n",[228,45768,45769],{"class":230,"line":8130},[228,45770,45771],{"class":297},"        # eval_index 中保存验证集val的图像名称\n",[228,45773,45774,45776,45779,45781],{"class":230,"line":8136},[228,45775,2611],{"class":234},[228,45777,45778],{"class":238}," image ",[228,45780,26159],{"class":234},[228,45782,45783],{"class":238}," eval_index:\n",[228,45785,45786,45789,45791,45794,45796],{"class":230,"line":8148},[228,45787,45788],{"class":238},"            image_path ",[228,45790,284],{"class":234},[228,45792,45793],{"class":238}," cla_path ",[228,45795,719],{"class":234},[228,45797,45798],{"class":238}," image\n",[228,45800,45801,45804,45806,45809,45811],{"class":230,"line":8160},[228,45802,45803],{"class":238},"            new_path ",[228,45805,284],{"class":234},[228,45807,45808],{"class":343}," 'data\u002Ftest\u002F'",[228,45810,45681],{"class":234},[228,45812,45813],{"class":238}," cla\n",[228,45815,45816,45819],{"class":230,"line":8172},[228,45817,45818],{"class":238},"            copy(image_path, new_path)  ",[228,45820,45821],{"class":297},"# 将选中的图像复制到新路径\n",[228,45823,45824],{"class":230,"line":9831},[228,45825,2514],{"emptyLinePlaceholder":157},[228,45827,45828],{"class":230,"line":9856},[228,45829,45830],{"class":297},"        # 其余的图像保存在训练集train中\n",[228,45832,45833,45835],{"class":230,"line":9879},[228,45834,2648],{"class":234},[228,45836,3853],{"class":238},[228,45838,45839,45841,45843,45845,45847],{"class":230,"line":9903},[228,45840,45788],{"class":238},[228,45842,284],{"class":234},[228,45844,45793],{"class":238},[228,45846,719],{"class":234},[228,45848,45798],{"class":238},[228,45850,45851,45853,45855,45858,45860],{"class":230,"line":9908},[228,45852,45803],{"class":238},[228,45854,284],{"class":234},[228,45856,45857],{"class":343}," 'data\u002Ftrain\u002F'",[228,45859,45681],{"class":234},[228,45861,45813],{"class":238},[228,45863,45864],{"class":230,"line":9913},[228,45865,45866],{"class":238},"            copy(image_path, new_path)\n",[228,45868,45869],{"class":230,"line":9918},[228,45870,45871],{"class":297},"            # 打印进度条信息\n",[228,45873,45874],{"class":230,"line":9927},[228,45875,45876],{"class":297},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[228,45878,45879,45881,45883,45885,45888,45890,45892,45895,45897,45899,45901,45904,45907,45909,45911,45914,45917,45919,45921,45924],{"class":230,"line":9932},[228,45880,32566],{"class":287},[228,45882,239],{"class":238},[228,45884,489],{"class":343},[228,45886,45887],{"class":287},"\\r",[228,45889,1128],{"class":343},[228,45891,32574],{"class":287},[228,45893,45894],{"class":343},"] processing [",[228,45896,32574],{"class":287},[228,45898,822],{"class":343},[228,45900,32574],{"class":287},[228,45902,45903],{"class":343},"]\"",[228,45905,45906],{"class":238},".format(cla, index ",[228,45908,719],{"class":234},[228,45910,25234],{"class":287},[228,45912,45913],{"class":238},", num), ",[228,45915,45916],{"class":5331},"end",[228,45918,284],{"class":234},[228,45920,7767],{"class":343},[228,45922,45923],{"class":238},")  ",[228,45925,45926],{"class":297},"# processing bar\n",[228,45928,45929,45931],{"class":230,"line":9938},[228,45930,31414],{"class":287},[228,45932,2090],{"class":238},[228,45934,45935],{"class":230,"line":9959},[228,45936,2514],{"emptyLinePlaceholder":157},[228,45938,45939,45941,45943,45946],{"class":230,"line":9965},[228,45940,30530],{"class":287},[228,45942,239],{"class":238},[228,45944,45945],{"class":343},"\"processing done!\"",[228,45947,245],{"class":238},[19,45949,45950],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22113,45952,45954],{"id":45953},"_242模型代码","2.4.2.模型代码",[19,45956,45957],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[220,45959,45961],{"className":30493,"code":45960,"language":30495,"meta":141,"style":141},"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",[30,45962,45963,45969,45979,45989,45993,46009,46017,46031,46041,46045,46075,46079,46113,46159,46163,46197,46243,46247,46251,46285,46315,46319,46327,46341,46363,46385,46403,46407,46421,46425,46429,46445,46449,46457,46471,46481,46525,46529,46557,46561,46571,46599,46603,46639,46643,46671,46675,46685,46717,46749,46777,46781,46791,46823,46855,46887,46919,46951,46979,46983,46993,47025,47057,47069,47073,47085,47089,47093,47105,47113,47133,47137,47141,47145,47149,47153,47157,47171,47179,47187,47199,47213,47221,47225,47233,47243,47253,47263,47273,47283,47289,47293,47297,47309,47329,47337],{"__ignoreMap":141},[228,45964,45965,45967],{"class":230,"line":231},[228,45966,30507],{"class":234},[228,45968,30510],{"class":238},[228,45970,45971,45973,45975,45977],{"class":230,"line":142},[228,45972,30852],{"class":234},[228,45974,30855],{"class":238},[228,45976,30507],{"class":234},[228,45978,30860],{"class":238},[228,45980,45981,45983,45985,45987],{"class":230,"line":1293},[228,45982,30852],{"class":234},[228,45984,30872],{"class":238},[228,45986,30507],{"class":234},[228,45988,30877],{"class":238},[228,45990,45991],{"class":230,"line":1308},[228,45992,2514],{"emptyLinePlaceholder":157},[228,45994,45995,45997,45999,46001,46003,46005,46007],{"class":230,"line":1314},[228,45996,14809],{"class":234},[228,45998,41608],{"class":2077},[228,46000,239],{"class":238},[228,46002,30893],{"class":2077},[228,46004,796],{"class":238},[228,46006,30898],{"class":2077},[228,46008,30901],{"class":238},[228,46010,46011,46013,46015],{"class":230,"line":1328},[228,46012,30916],{"class":234},[228,46014,30919],{"class":287},[228,46016,41627],{"class":238},[228,46018,46019,46021,46023,46025,46027,46029],{"class":230,"line":1334},[228,46020,30932],{"class":287},[228,46022,41634],{"class":238},[228,46024,30938],{"class":287},[228,46026,30941],{"class":238},[228,46028,30944],{"class":287},[228,46030,2090],{"class":238},[228,46032,46033,46035,46037,46039],{"class":230,"line":1425},[228,46034,30960],{"class":287},[228,46036,34886],{"class":238},[228,46038,284],{"class":234},[228,46040,34891],{"class":238},[228,46042,46043],{"class":230,"line":1431},[228,46044,41657],{"class":297},[228,46046,46047,46049,46051,46053,46055,46057,46059,46061,46063,46065,46067,46069,46071,46073],{"class":230,"line":1443},[228,46048,30960],{"class":287},[228,46050,41664],{"class":238},[228,46052,284],{"class":234},[228,46054,30968],{"class":238},[228,46056,30971],{"class":5331},[228,46058,284],{"class":234},[228,46060,41675],{"class":238},[228,46062,30980],{"class":5331},[228,46064,284],{"class":234},[228,46066,41682],{"class":238},[228,46068,30989],{"class":5331},[228,46070,284],{"class":234},[228,46072,456],{"class":287},[228,46074,245],{"class":238},[228,46076,46077],{"class":230,"line":1726},[228,46078,41695],{"class":297},[228,46080,46081,46083,46085,46087,46089,46091,46093,46095,46097,46099,46101,46103,46105,46107,46109,46111],{"class":230,"line":1731},[228,46082,30960],{"class":287},[228,46084,41702],{"class":238},[228,46086,284],{"class":234},[228,46088,30968],{"class":238},[228,46090,30971],{"class":5331},[228,46092,284],{"class":234},[228,46094,41675],{"class":238},[228,46096,30980],{"class":5331},[228,46098,284],{"class":234},[228,46100,41719],{"class":238},[228,46102,430],{"class":287},[228,46104,41724],{"class":238},[228,46106,30989],{"class":5331},[228,46108,284],{"class":234},[228,46110,456],{"class":287},[228,46112,245],{"class":238},[228,46114,46115,46117,46119,46121,46123,46125,46127,46129,46131,46133,46135,46137,46139,46141,46143,46145,46147,46149,46151,46153,46155,46157],{"class":230,"line":1737},[228,46116,30960],{"class":287},[228,46118,41739],{"class":238},[228,46120,284],{"class":234},[228,46122,30968],{"class":238},[228,46124,30971],{"class":5331},[228,46126,284],{"class":234},[228,46128,41719],{"class":238},[228,46130,430],{"class":287},[228,46132,41724],{"class":238},[228,46134,30980],{"class":5331},[228,46136,284],{"class":234},[228,46138,41719],{"class":238},[228,46140,456],{"class":287},[228,46142,41724],{"class":238},[228,46144,30989],{"class":5331},[228,46146,284],{"class":234},[228,46148,310],{"class":287},[228,46150,616],{"class":238},[228,46152,30998],{"class":5331},[228,46154,284],{"class":234},[228,46156,456],{"class":287},[228,46158,245],{"class":238},[228,46160,46161],{"class":230,"line":1742},[228,46162,41784],{"class":297},[228,46164,46165,46167,46169,46171,46173,46175,46177,46179,46181,46183,46185,46187,46189,46191,46193,46195],{"class":230,"line":1756},[228,46166,30960],{"class":287},[228,46168,41791],{"class":238},[228,46170,284],{"class":234},[228,46172,30968],{"class":238},[228,46174,30971],{"class":5331},[228,46176,284],{"class":234},[228,46178,41675],{"class":238},[228,46180,30980],{"class":5331},[228,46182,284],{"class":234},[228,46184,41808],{"class":238},[228,46186,430],{"class":287},[228,46188,41724],{"class":238},[228,46190,30989],{"class":5331},[228,46192,284],{"class":234},[228,46194,456],{"class":287},[228,46196,245],{"class":238},[228,46198,46199,46201,46203,46205,46207,46209,46211,46213,46215,46217,46219,46221,46223,46225,46227,46229,46231,46233,46235,46237,46239,46241],{"class":230,"line":1761},[228,46200,30960],{"class":287},[228,46202,41827],{"class":238},[228,46204,284],{"class":234},[228,46206,30968],{"class":238},[228,46208,30971],{"class":5331},[228,46210,284],{"class":234},[228,46212,41808],{"class":238},[228,46214,430],{"class":287},[228,46216,41724],{"class":238},[228,46218,30980],{"class":5331},[228,46220,284],{"class":234},[228,46222,41808],{"class":238},[228,46224,456],{"class":287},[228,46226,41724],{"class":238},[228,46228,30989],{"class":5331},[228,46230,284],{"class":234},[228,46232,557],{"class":287},[228,46234,616],{"class":238},[228,46236,30998],{"class":5331},[228,46238,284],{"class":234},[228,46240,316],{"class":287},[228,46242,245],{"class":238},[228,46244,46245],{"class":230,"line":1767},[228,46246,41872],{"class":297},[228,46248,46249],{"class":230,"line":1788},[228,46250,41877],{"class":297},[228,46252,46253,46255,46257,46259,46261,46263,46265,46267,46269,46271,46273,46275,46277,46279,46281,46283],{"class":230,"line":1793},[228,46254,30960],{"class":287},[228,46256,41884],{"class":238},[228,46258,284],{"class":234},[228,46260,34944],{"class":238},[228,46262,30989],{"class":5331},[228,46264,284],{"class":234},[228,46266,310],{"class":287},[228,46268,616],{"class":238},[228,46270,31044],{"class":5331},[228,46272,284],{"class":234},[228,46274,456],{"class":287},[228,46276,616],{"class":238},[228,46278,30998],{"class":5331},[228,46280,284],{"class":234},[228,46282,456],{"class":287},[228,46284,245],{"class":238},[228,46286,46287,46289,46291,46293,46295,46297,46299,46301,46303,46305,46307,46309,46311,46313],{"class":230,"line":1807},[228,46288,30960],{"class":287},[228,46290,41919],{"class":238},[228,46292,284],{"class":234},[228,46294,30968],{"class":238},[228,46296,30971],{"class":5331},[228,46298,284],{"class":234},[228,46300,41675],{"class":238},[228,46302,30980],{"class":5331},[228,46304,284],{"class":234},[228,46306,41936],{"class":238},[228,46308,30989],{"class":5331},[228,46310,284],{"class":234},[228,46312,456],{"class":287},[228,46314,245],{"class":238},[228,46316,46317],{"class":230,"line":1812},[228,46318,2514],{"emptyLinePlaceholder":157},[228,46320,46321,46323,46325],{"class":230,"line":1841},[228,46322,30916],{"class":234},[228,46324,31208],{"class":2077},[228,46326,31211],{"class":238},[228,46328,46329,46331,46333,46335,46337,46339],{"class":230,"line":1846},[228,46330,41961],{"class":238},[228,46332,284],{"class":234},[228,46334,30938],{"class":287},[228,46336,35299],{"class":238},[228,46338,30938],{"class":287},[228,46340,41972],{"class":238},[228,46342,46343,46345,46347,46349,46351,46353,46355,46357,46359,46361],{"class":230,"line":1863},[228,46344,7200],{"class":238},[228,46346,284],{"class":234},[228,46348,30938],{"class":287},[228,46350,35299],{"class":238},[228,46352,30938],{"class":287},[228,46354,41987],{"class":238},[228,46356,30938],{"class":287},[228,46358,35299],{"class":238},[228,46360,30938],{"class":287},[228,46362,41996],{"class":238},[228,46364,46365,46367,46369,46371,46373,46375,46377,46379,46381,46383],{"class":230,"line":1868},[228,46366,42001],{"class":238},[228,46368,284],{"class":234},[228,46370,30938],{"class":287},[228,46372,35299],{"class":238},[228,46374,30938],{"class":287},[228,46376,42012],{"class":238},[228,46378,30938],{"class":287},[228,46380,35299],{"class":238},[228,46382,30938],{"class":287},[228,46384,42021],{"class":238},[228,46386,46387,46389,46391,46393,46395,46397,46399,46401],{"class":230,"line":1873},[228,46388,42026],{"class":238},[228,46390,284],{"class":234},[228,46392,30938],{"class":287},[228,46394,35299],{"class":238},[228,46396,30938],{"class":287},[228,46398,42037],{"class":238},[228,46400,30938],{"class":287},[228,46402,42042],{"class":238},[228,46404,46405],{"class":230,"line":1878},[228,46406,42047],{"class":297},[228,46408,46409,46411,46413,46415,46417,46419],{"class":230,"line":1892},[228,46410,14867],{"class":234},[228,46412,42054],{"class":238},[228,46414,32800],{"class":5331},[228,46416,284],{"class":234},[228,46418,456],{"class":287},[228,46420,245],{"class":238},[228,46422,46423],{"class":230,"line":1897},[228,46424,2514],{"emptyLinePlaceholder":157},[228,46426,46427],{"class":230,"line":2691},[228,46428,42075],{"class":297},[228,46430,46431,46433,46435,46437,46439,46441,46443],{"class":230,"line":2705},[228,46432,14809],{"class":234},[228,46434,42082],{"class":2077},[228,46436,239],{"class":238},[228,46438,30893],{"class":2077},[228,46440,796],{"class":238},[228,46442,30898],{"class":2077},[228,46444,30901],{"class":238},[228,46446,46447],{"class":230,"line":2713},[228,46448,42097],{"class":297},[228,46450,46451,46453,46455],{"class":230,"line":2718},[228,46452,30916],{"class":234},[228,46454,30919],{"class":287},[228,46456,42106],{"class":238},[228,46458,46459,46461,46463,46465,46467,46469],{"class":230,"line":2724},[228,46460,30932],{"class":287},[228,46462,42113],{"class":238},[228,46464,30938],{"class":287},[228,46466,30941],{"class":238},[228,46468,30944],{"class":287},[228,46470,2090],{"class":238},[228,46472,46473,46475,46477,46479],{"class":230,"line":2730},[228,46474,30960],{"class":287},[228,46476,42128],{"class":238},[228,46478,284],{"class":234},[228,46480,38124],{"class":238},[228,46482,46483,46485,46487,46489,46491,46493,46495,46497,46499,46501,46503,46505,46507,46509,46511,46513,46515,46517,46519,46521,46523],{"class":230,"line":2735},[228,46484,38129],{"class":238},[228,46486,30971],{"class":5331},[228,46488,284],{"class":234},[228,46490,310],{"class":287},[228,46492,616],{"class":238},[228,46494,30980],{"class":5331},[228,46496,284],{"class":234},[228,46498,442],{"class":287},[228,46500,616],{"class":238},[228,46502,30989],{"class":5331},[228,46504,284],{"class":234},[228,46506,607],{"class":287},[228,46508,616],{"class":238},[228,46510,31044],{"class":5331},[228,46512,284],{"class":234},[228,46514,316],{"class":287},[228,46516,616],{"class":238},[228,46518,30998],{"class":5331},[228,46520,284],{"class":234},[228,46522,310],{"class":287},[228,46524,38162],{"class":238},[228,46526,46527],{"class":230,"line":8063},[228,46528,38167],{"class":238},[228,46530,46531,46533,46535,46537,46539,46541,46543,46545,46547,46549,46551,46553,46555],{"class":230,"line":8087},[228,46532,38212],{"class":238},[228,46534,30989],{"class":5331},[228,46536,284],{"class":234},[228,46538,310],{"class":287},[228,46540,616],{"class":238},[228,46542,31044],{"class":5331},[228,46544,284],{"class":234},[228,46546,316],{"class":287},[228,46548,616],{"class":238},[228,46550,30998],{"class":5331},[228,46552,284],{"class":234},[228,46554,456],{"class":287},[228,46556,245],{"class":238},[228,46558,46559],{"class":230,"line":8092},[228,46560,38241],{"class":238},[228,46562,46563,46565,46567,46569],{"class":230,"line":8098},[228,46564,30960],{"class":287},[228,46566,42219],{"class":238},[228,46568,284],{"class":234},[228,46570,38124],{"class":238},[228,46572,46573,46575,46577,46579,46581,46583,46585,46587,46589,46591,46593,46595,46597],{"class":230,"line":8125},[228,46574,38129],{"class":238},[228,46576,30971],{"class":5331},[228,46578,284],{"class":234},[228,46580,442],{"class":287},[228,46582,616],{"class":238},[228,46584,30980],{"class":5331},[228,46586,284],{"class":234},[228,46588,442],{"class":287},[228,46590,616],{"class":238},[228,46592,30989],{"class":5331},[228,46594,284],{"class":234},[228,46596,456],{"class":287},[228,46598,38162],{"class":238},[228,46600,46601],{"class":230,"line":8130},[228,46602,38167],{"class":238},[228,46604,46605,46607,46609,46611,46613,46615,46617,46619,46621,46623,46625,46627,46629,46631,46633,46635,46637],{"class":230,"line":8136},[228,46606,38129],{"class":238},[228,46608,30971],{"class":5331},[228,46610,284],{"class":234},[228,46612,442],{"class":287},[228,46614,616],{"class":238},[228,46616,30980],{"class":5331},[228,46618,284],{"class":234},[228,46620,42274],{"class":287},[228,46622,616],{"class":238},[228,46624,30989],{"class":5331},[228,46626,284],{"class":234},[228,46628,310],{"class":287},[228,46630,616],{"class":238},[228,46632,30998],{"class":5331},[228,46634,284],{"class":234},[228,46636,456],{"class":287},[228,46638,38162],{"class":238},[228,46640,46641],{"class":230,"line":8148},[228,46642,38167],{"class":238},[228,46644,46645,46647,46649,46651,46653,46655,46657,46659,46661,46663,46665,46667,46669],{"class":230,"line":8160},[228,46646,38212],{"class":238},[228,46648,30989],{"class":5331},[228,46650,284],{"class":234},[228,46652,310],{"class":287},[228,46654,616],{"class":238},[228,46656,31044],{"class":5331},[228,46658,284],{"class":234},[228,46660,316],{"class":287},[228,46662,616],{"class":238},[228,46664,30998],{"class":5331},[228,46666,284],{"class":234},[228,46668,456],{"class":287},[228,46670,245],{"class":238},[228,46672,46673],{"class":230,"line":8172},[228,46674,38241],{"class":238},[228,46676,46677,46679,46681,46683],{"class":230,"line":9831},[228,46678,30960],{"class":287},[228,46680,42335],{"class":238},[228,46682,284],{"class":234},[228,46684,38124],{"class":238},[228,46686,46687,46689,46691,46693,46695,46697,46699,46701,46703,46705,46707,46709,46711,46713,46715],{"class":230,"line":9856},[228,46688,42344],{"class":238},[228,46690,42274],{"class":287},[228,46692,616],{"class":238},[228,46694,442],{"class":287},[228,46696,42353],{"class":238},[228,46698,448],{"class":287},[228,46700,616],{"class":238},[228,46702,32185],{"class":287},[228,46704,42362],{"class":238},[228,46706,839],{"class":287},[228,46708,616],{"class":238},[228,46710,436],{"class":287},[228,46712,42371],{"class":238},[228,46714,436],{"class":287},[228,46716,38162],{"class":238},[228,46718,46719,46721,46723,46725,46727,46729,46731,46733,46735,46737,46739,46741,46743,46745,46747],{"class":230,"line":9879},[228,46720,42344],{"class":238},[228,46722,34985],{"class":287},[228,46724,616],{"class":238},[228,46726,32185],{"class":287},[228,46728,42353],{"class":238},[228,46730,32185],{"class":287},[228,46732,616],{"class":238},[228,46734,42274],{"class":287},[228,46736,42362],{"class":238},[228,46738,436],{"class":287},[228,46740,616],{"class":238},[228,46742,448],{"class":287},[228,46744,42371],{"class":238},[228,46746,442],{"class":287},[228,46748,38162],{"class":238},[228,46750,46751,46753,46755,46757,46759,46761,46763,46765,46767,46769,46771,46773,46775],{"class":230,"line":9903},[228,46752,38212],{"class":238},[228,46754,30989],{"class":5331},[228,46756,284],{"class":234},[228,46758,310],{"class":287},[228,46760,616],{"class":238},[228,46762,31044],{"class":5331},[228,46764,284],{"class":234},[228,46766,316],{"class":287},[228,46768,616],{"class":238},[228,46770,30998],{"class":5331},[228,46772,284],{"class":234},[228,46774,456],{"class":287},[228,46776,245],{"class":238},[228,46778,46779],{"class":230,"line":9908},[228,46780,38241],{"class":238},[228,46782,46783,46785,46787,46789],{"class":230,"line":9913},[228,46784,30960],{"class":287},[228,46786,42446],{"class":238},[228,46788,284],{"class":234},[228,46790,38124],{"class":238},[228,46792,46793,46795,46797,46799,46801,46803,46805,46807,46809,46811,46813,46815,46817,46819,46821],{"class":230,"line":9918},[228,46794,42344],{"class":238},[228,46796,42457],{"class":287},[228,46798,616],{"class":238},[228,46800,42274],{"class":287},[228,46802,42353],{"class":238},[228,46804,448],{"class":287},[228,46806,616],{"class":238},[228,46808,42470],{"class":287},[228,46810,42362],{"class":238},[228,46812,839],{"class":287},[228,46814,616],{"class":238},[228,46816,845],{"class":287},[228,46818,42371],{"class":238},[228,46820,442],{"class":287},[228,46822,38162],{"class":238},[228,46824,46825,46827,46829,46831,46833,46835,46837,46839,46841,46843,46845,46847,46849,46851,46853],{"class":230,"line":9927},[228,46826,42344],{"class":238},[228,46828,38572],{"class":287},[228,46830,616],{"class":238},[228,46832,21163],{"class":287},[228,46834,42353],{"class":238},[228,46836,856],{"class":287},[228,46838,616],{"class":238},[228,46840,31616],{"class":287},[228,46842,42362],{"class":238},[228,46844,1038],{"class":287},[228,46846,616],{"class":238},[228,46848,442],{"class":287},[228,46850,42371],{"class":238},[228,46852,442],{"class":287},[228,46854,38162],{"class":238},[228,46856,46857,46859,46861,46863,46865,46867,46869,46871,46873,46875,46877,46879,46881,46883,46885],{"class":230,"line":9932},[228,46858,42344],{"class":238},[228,46860,38572],{"class":287},[228,46862,616],{"class":238},[228,46864,32185],{"class":287},[228,46866,42353],{"class":238},[228,46868,32185],{"class":287},[228,46870,616],{"class":238},[228,46872,34985],{"class":287},[228,46874,42362],{"class":238},[228,46876,1038],{"class":287},[228,46878,616],{"class":238},[228,46880,442],{"class":287},[228,46882,42371],{"class":238},[228,46884,442],{"class":287},[228,46886,38162],{"class":238},[228,46888,46889,46891,46893,46895,46897,46899,46901,46903,46905,46907,46909,46911,46913,46915,46917],{"class":230,"line":9938},[228,46890,42344],{"class":238},[228,46892,38572],{"class":287},[228,46894,616],{"class":238},[228,46896,856],{"class":287},[228,46898,42353],{"class":238},[228,46900,32185],{"class":287},[228,46902,616],{"class":238},[228,46904,42567],{"class":287},[228,46906,42362],{"class":238},[228,46908,436],{"class":287},[228,46910,616],{"class":238},[228,46912,442],{"class":287},[228,46914,42371],{"class":238},[228,46916,442],{"class":287},[228,46918,38162],{"class":238},[228,46920,46921,46923,46925,46927,46929,46931,46933,46935,46937,46939,46941,46943,46945,46947,46949],{"class":230,"line":9959},[228,46922,42344],{"class":238},[228,46924,42588],{"class":287},[228,46926,616],{"class":238},[228,46928,34985],{"class":287},[228,46930,42353],{"class":238},[228,46932,21163],{"class":287},[228,46934,616],{"class":238},[228,46936,42601],{"class":287},[228,46938,42362],{"class":238},[228,46940,436],{"class":287},[228,46942,616],{"class":238},[228,46944,32185],{"class":287},[228,46946,42371],{"class":238},[228,46948,32185],{"class":287},[228,46950,38162],{"class":238},[228,46952,46953,46955,46957,46959,46961,46963,46965,46967,46969,46971,46973,46975,46977],{"class":230,"line":9965},[228,46954,38212],{"class":238},[228,46956,30989],{"class":5331},[228,46958,284],{"class":234},[228,46960,310],{"class":287},[228,46962,616],{"class":238},[228,46964,31044],{"class":5331},[228,46966,284],{"class":234},[228,46968,316],{"class":287},[228,46970,616],{"class":238},[228,46972,30998],{"class":5331},[228,46974,284],{"class":234},[228,46976,456],{"class":287},[228,46978,245],{"class":238},[228,46980,46981],{"class":230,"line":9979},[228,46982,38241],{"class":238},[228,46984,46985,46987,46989,46991],{"class":230,"line":9985},[228,46986,30960],{"class":287},[228,46988,42654],{"class":238},[228,46990,284],{"class":234},[228,46992,38124],{"class":238},[228,46994,46995,46997,46999,47001,47003,47005,47007,47009,47011,47013,47015,47017,47019,47021,47023],{"class":230,"line":10012},[228,46996,42344],{"class":238},[228,46998,42665],{"class":287},[228,47000,616],{"class":238},[228,47002,34985],{"class":287},[228,47004,42353],{"class":238},[228,47006,21163],{"class":287},[228,47008,616],{"class":238},[228,47010,42601],{"class":287},[228,47012,42362],{"class":238},[228,47014,436],{"class":287},[228,47016,616],{"class":238},[228,47018,32185],{"class":287},[228,47020,42371],{"class":238},[228,47022,32185],{"class":287},[228,47024,38162],{"class":238},[228,47026,47027,47029,47031,47033,47035,47037,47039,47041,47043,47045,47047,47049,47051,47053,47055],{"class":230,"line":10021},[228,47028,42344],{"class":238},[228,47030,42665],{"class":287},[228,47032,616],{"class":238},[228,47034,35055],{"class":287},[228,47036,42353],{"class":238},[228,47038,42274],{"class":287},[228,47040,616],{"class":238},[228,47042,35055],{"class":287},[228,47044,42362],{"class":238},[228,47046,845],{"class":287},[228,47048,616],{"class":238},[228,47050,32185],{"class":287},[228,47052,42371],{"class":238},[228,47054,32185],{"class":287},[228,47056,38162],{"class":238},[228,47058,47059,47061,47063,47065,47067],{"class":230,"line":10027},[228,47060,42728],{"class":238},[228,47062,456],{"class":287},[228,47064,616],{"class":238},[228,47066,456],{"class":287},[228,47068,42737],{"class":238},[228,47070,47071],{"class":230,"line":10035},[228,47072,38905],{"class":238},[228,47074,47075,47077,47079,47081,47083],{"class":230,"line":10040},[228,47076,38910],{"class":238},[228,47078,42748],{"class":287},[228,47080,616],{"class":238},[228,47082,316],{"class":287},[228,47084,245],{"class":238},[228,47086,47087],{"class":230,"line":16719},[228,47088,38241],{"class":238},[228,47090,47091],{"class":230,"line":16725},[228,47092,42763],{"class":297},[228,47094,47095,47097,47099,47101,47103],{"class":230,"line":16748},[228,47096,3517],{"class":234},[228,47098,38983],{"class":238},[228,47100,26159],{"class":234},[228,47102,38988],{"class":287},[228,47104,38991],{"class":238},[228,47106,47107,47109,47111],{"class":230,"line":16754},[228,47108,4756],{"class":234},[228,47110,39003],{"class":287},[228,47112,39006],{"class":238},[228,47114,47115,47117,47119,47121,47123,47125,47127,47129,47131],{"class":230,"line":16777},[228,47116,39016],{"class":238},[228,47118,42790],{"class":5331},[228,47120,284],{"class":234},[228,47122,42795],{"class":343},[228,47124,616],{"class":238},[228,47126,39019],{"class":5331},[228,47128,284],{"class":234},[228,47130,39024],{"class":343},[228,47132,245],{"class":238},[228,47134,47135],{"class":230,"line":16791},[228,47136,42810],{"class":297},[228,47138,47139],{"class":230,"line":16811},[228,47140,42815],{"class":297},[228,47142,47143],{"class":230,"line":16817},[228,47144,42820],{"class":297},[228,47146,47147],{"class":230,"line":16828},[228,47148,42825],{"class":297},[228,47150,47151],{"class":230,"line":16851},[228,47152,42830],{"class":297},[228,47154,47155],{"class":230,"line":16873},[228,47156,42835],{"class":297},[228,47158,47159,47161,47163,47165,47167,47169],{"class":230,"line":16878},[228,47160,39036],{"class":234},[228,47162,39039],{"class":238},[228,47164,39042],{"class":234},[228,47166,39045],{"class":234},[228,47168,39048],{"class":287},[228,47170,3853],{"class":238},[228,47172,47173,47175,47177],{"class":230,"line":16884},[228,47174,39060],{"class":238},[228,47176,430],{"class":287},[228,47178,245],{"class":238},[228,47180,47181,47183,47185],{"class":230,"line":16898},[228,47182,42862],{"class":234},[228,47184,39003],{"class":287},[228,47186,39079],{"class":238},[228,47188,47189,47191,47193,47195,47197],{"class":230,"line":16911},[228,47190,42871],{"class":238},[228,47192,430],{"class":287},[228,47194,616],{"class":238},[228,47196,39101],{"class":287},[228,47198,245],{"class":238},[228,47200,47201,47203,47205,47207,47209,47211],{"class":230,"line":16916},[228,47202,42884],{"class":234},[228,47204,39039],{"class":238},[228,47206,39042],{"class":234},[228,47208,39045],{"class":234},[228,47210,39048],{"class":287},[228,47212,3853],{"class":238},[228,47214,47215,47217,47219],{"class":230,"line":16930},[228,47216,42899],{"class":238},[228,47218,430],{"class":287},[228,47220,245],{"class":238},[228,47222,47223],{"class":230,"line":16935},[228,47224,35280],{"class":297},[228,47226,47227,47229,47231],{"class":230,"line":16941},[228,47228,30916],{"class":234},[228,47230,31208],{"class":2077},[228,47232,31211],{"class":238},[228,47234,47235,47237,47239,47241],{"class":230,"line":16946},[228,47236,31216],{"class":238},[228,47238,284],{"class":234},[228,47240,30938],{"class":287},[228,47242,42926],{"class":238},[228,47244,47245,47247,47249,47251],{"class":230,"line":16960},[228,47246,31216],{"class":238},[228,47248,284],{"class":234},[228,47250,30938],{"class":287},[228,47252,42937],{"class":238},[228,47254,47255,47257,47259,47261],{"class":230,"line":16965},[228,47256,31216],{"class":238},[228,47258,284],{"class":234},[228,47260,30938],{"class":287},[228,47262,42948],{"class":238},[228,47264,47265,47267,47269,47271],{"class":230,"line":16970},[228,47266,31216],{"class":238},[228,47268,284],{"class":234},[228,47270,30938],{"class":287},[228,47272,42959],{"class":238},[228,47274,47275,47277,47279,47281],{"class":230,"line":16984},[228,47276,31216],{"class":238},[228,47278,284],{"class":234},[228,47280,30938],{"class":287},[228,47282,42970],{"class":238},[228,47284,47285,47287],{"class":230,"line":16996},[228,47286,14867],{"class":234},[228,47288,31324],{"class":238},[228,47290,47291],{"class":230,"line":17001},[228,47292,2514],{"emptyLinePlaceholder":157},[228,47294,47295],{"class":230,"line":17014},[228,47296,42985],{"class":297},[228,47298,47299,47301,47303,47305,47307],{"class":230,"line":17019},[228,47300,1645],{"class":234},[228,47302,31335],{"class":287},[228,47304,3063],{"class":234},[228,47306,31340],{"class":343},[228,47308,3853],{"class":238},[228,47310,47311,47313,47315,47317,47319,47321,47323,47325,47327],{"class":230,"line":17024},[228,47312,31352],{"class":238},[228,47314,284],{"class":234},[228,47316,30566],{"class":238},[228,47318,31359],{"class":343},[228,47320,1818],{"class":234},[228,47322,31364],{"class":238},[228,47324,1815],{"class":234},[228,47326,30591],{"class":343},[228,47328,245],{"class":238},[228,47330,47331,47333,47335],{"class":230,"line":17029},[228,47332,31404],{"class":238},[228,47334,284],{"class":234},[228,47336,43026],{"class":238},[228,47338,47339,47341,47343,47345,47347,47349,47351,47353],{"class":230,"line":17042},[228,47340,31414],{"class":287},[228,47342,31417],{"class":238},[228,47344,456],{"class":287},[228,47346,616],{"class":238},[228,47348,31616],{"class":287},[228,47350,616],{"class":238},[228,47352,31616],{"class":287},[228,47354,31430],{"class":238},[22113,47356,47358],{"id":47357},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,47360,47361],{},"计算图片的均值与方差，用于训练中归一化处理操作",[220,47363,47365],{"className":30493,"code":47364,"language":30495,"meta":141,"style":141},"# 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",[30,47366,47367,47372,47385,47390,47396,47401,47411,47415,47420,47430,47434,47439,47449,47466,47470,47475,47487,47499,47530,47539,47549,47559,47563,47568,47583,47587,47592,47597,47602,47612,47617,47642,47646,47651,47666,47670,47683,47687,47692,47697,47702,47707,47712,47722,47732,47755,47763,47771,47779,47783,47795,47799,47804,47808,47812,47819,47839,47863,47870,47884,47889,47894,47898,47912,47916,47928],{"__ignoreMap":141},[228,47368,47369],{"class":230,"line":231},[228,47370,47371],{"class":297},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[228,47373,47374,47376,47379,47382],{"class":230,"line":142},[228,47375,30852],{"class":234},[228,47377,47378],{"class":287}," PIL",[228,47380,47381],{"class":234}," import",[228,47383,47384],{"class":238}," Image\n",[228,47386,47387],{"class":230,"line":1293},[228,47388,47389],{"class":297},"# os 用来处理文件夹和文件路径\n",[228,47391,47392,47394],{"class":230,"line":1308},[228,47393,30507],{"class":234},[228,47395,45420],{"class":238},[228,47397,47398],{"class":230,"line":1314},[228,47399,47400],{"class":297},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[228,47402,47403,47405,47407,47409],{"class":230,"line":1328},[228,47404,30507],{"class":234},[228,47406,31495],{"class":238},[228,47408,31498],{"class":234},[228,47410,31501],{"class":238},[228,47412,47413],{"class":230,"line":1334},[228,47414,2514],{"emptyLinePlaceholder":157},[228,47416,47417],{"class":230,"line":1425},[228,47418,47419],{"class":297},"# 文件夹路径，包含所有图片文件\n",[228,47421,47422,47425,47427],{"class":230,"line":1431},[228,47423,47424],{"class":238},"folder_path ",[228,47426,284],{"class":234},[228,47428,47429],{"class":343}," 'data_cat_dog'\n",[228,47431,47432],{"class":230,"line":1443},[228,47433,2514],{"emptyLinePlaceholder":157},[228,47435,47436],{"class":230,"line":1726},[228,47437,47438],{"class":297},"# 初始化累积变量\n",[228,47440,47441,47444,47446],{"class":230,"line":1731},[228,47442,47443],{"class":238},"total_pixels ",[228,47445,284],{"class":234},[228,47447,47448],{"class":287}," 0\n",[228,47450,47451,47454,47456,47459,47461,47463],{"class":230,"line":1737},[228,47452,47453],{"class":238},"sum_normalized_pixel_values ",[228,47455,284],{"class":234},[228,47457,47458],{"class":238}," np.zeros(",[228,47460,310],{"class":287},[228,47462,45923],{"class":238},[228,47464,47465],{"class":297},"# 如果是RGB图像，需要三个通道的均值和方差\n",[228,47467,47468],{"class":230,"line":1742},[228,47469,2514],{"emptyLinePlaceholder":157},[228,47471,47472],{"class":230,"line":1756},[228,47473,47474],{"class":297},"# 遍历文件夹中的图片文件\n",[228,47476,47477,47479,47482,47484],{"class":230,"line":1761},[228,47478,3139],{"class":234},[228,47480,47481],{"class":238}," root, dirs, files ",[228,47483,26159],{"class":234},[228,47485,47486],{"class":238}," os.walk(folder_path):\n",[228,47488,47489,47491,47494,47496],{"class":230,"line":1767},[228,47490,3315],{"class":234},[228,47492,47493],{"class":238}," filename ",[228,47495,26159],{"class":234},[228,47497,47498],{"class":238}," files:\n",[228,47500,47501,47503,47506,47509,47511,47514,47516,47519,47521,47524,47527],{"class":230,"line":1788},[228,47502,2611],{"class":234},[228,47504,47505],{"class":238}," filename.endswith((",[228,47507,47508],{"class":343},"'.jpg'",[228,47510,12550],{"class":238},[228,47512,47513],{"class":343},"'.jpeg'",[228,47515,12550],{"class":238},[228,47517,47518],{"class":343},"'.png'",[228,47520,12550],{"class":238},[228,47522,47523],{"class":343},"'.bmp'",[228,47525,47526],{"class":238},")):  ",[228,47528,47529],{"class":297},"# 可根据实际情况添加其他格式\n",[228,47531,47532,47534,47536],{"class":230,"line":1793},[228,47533,45788],{"class":238},[228,47535,284],{"class":234},[228,47537,47538],{"class":238}," os.path.join(root, filename)\n",[228,47540,47541,47544,47546],{"class":230,"line":1807},[228,47542,47543],{"class":238},"            image ",[228,47545,284],{"class":234},[228,47547,47548],{"class":238}," Image.open(image_path)\n",[228,47550,47551,47554,47556],{"class":230,"line":1812},[228,47552,47553],{"class":238},"            image_array ",[228,47555,284],{"class":234},[228,47557,47558],{"class":238}," np.array(image)\n",[228,47560,47561],{"class":230,"line":1841},[228,47562,2514],{"emptyLinePlaceholder":157},[228,47564,47565],{"class":230,"line":1846},[228,47566,47567],{"class":297},"            # 归一化像素值到0-1之间\n",[228,47569,47570,47573,47575,47578,47580],{"class":230,"line":1863},[228,47571,47572],{"class":238},"            normalized_image_array ",[228,47574,284],{"class":234},[228,47576,47577],{"class":238}," image_array ",[228,47579,822],{"class":234},[228,47581,47582],{"class":287}," 255.0\n",[228,47584,47585],{"class":230,"line":1868},[228,47586,2514],{"emptyLinePlaceholder":157},[228,47588,47589],{"class":230,"line":1873},[228,47590,47591],{"class":297},"            # print(image_path)\n",[228,47593,47594],{"class":230,"line":1878},[228,47595,47596],{"class":297},"            # print(normalized_image_array.shape)\n",[228,47598,47599],{"class":230,"line":1892},[228,47600,47601],{"class":297},"            # 累积归一化后的像素值和像素数量\n",[228,47603,47604,47607,47609],{"class":230,"line":1897},[228,47605,47606],{"class":238},"            total_pixels ",[228,47608,9592],{"class":234},[228,47610,47611],{"class":238}," normalized_image_array.size\n",[228,47613,47614],{"class":230,"line":2691},[228,47615,47616],{"class":297},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[228,47618,47619,47622,47624,47627,47630,47632,47634,47636,47638,47640],{"class":230,"line":2705},[228,47620,47621],{"class":238},"            sum_normalized_pixel_values ",[228,47623,9592],{"class":234},[228,47625,47626],{"class":238}," np.sum(normalized_image_array, ",[228,47628,47629],{"class":5331},"axis",[228,47631,284],{"class":234},[228,47633,239],{"class":238},[228,47635,430],{"class":287},[228,47637,12550],{"class":238},[228,47639,456],{"class":287},[228,47641,30612],{"class":238},[228,47643,47644],{"class":230,"line":2713},[228,47645,2514],{"emptyLinePlaceholder":157},[228,47647,47648],{"class":230,"line":2718},[228,47649,47650],{"class":297},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[228,47652,47653,47656,47658,47661,47663],{"class":230,"line":2724},[228,47654,47655],{"class":238},"mean ",[228,47657,284],{"class":234},[228,47659,47660],{"class":238}," sum_normalized_pixel_values ",[228,47662,822],{"class":234},[228,47664,47665],{"class":238}," total_pixels\n",[228,47667,47668],{"class":230,"line":2730},[228,47669,2514],{"emptyLinePlaceholder":157},[228,47671,47672,47675,47677,47679,47681],{"class":230,"line":2735},[228,47673,47674],{"class":238},"sum_squared_diff ",[228,47676,284],{"class":234},[228,47678,47458],{"class":238},[228,47680,310],{"class":287},[228,47682,245],{"class":238},[228,47684,47685],{"class":230,"line":8063},[228,47686,2514],{"emptyLinePlaceholder":157},[228,47688,47689],{"class":230,"line":8087},[228,47690,47691],{"class":297},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[228,47693,47694],{"class":230,"line":8092},[228,47695,47696],{"class":297},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[228,47698,47699],{"class":230,"line":8098},[228,47700,47701],{"class":297},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[228,47703,47704],{"class":230,"line":8125},[228,47705,47706],{"class":297},"# Image.open(image_path)：打开图片\n",[228,47708,47709],{"class":230,"line":8130},[228,47710,47711],{"class":297},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[228,47713,47714,47716,47718,47720],{"class":230,"line":8136},[228,47715,3139],{"class":234},[228,47717,47481],{"class":238},[228,47719,26159],{"class":234},[228,47721,47486],{"class":238},[228,47723,47724,47726,47728,47730],{"class":230,"line":8148},[228,47725,3315],{"class":234},[228,47727,47493],{"class":238},[228,47729,26159],{"class":234},[228,47731,47498],{"class":238},[228,47733,47734,47736,47738,47740,47742,47744,47746,47748,47750,47752],{"class":230,"line":8160},[228,47735,2611],{"class":234},[228,47737,47505],{"class":238},[228,47739,47508],{"class":343},[228,47741,12550],{"class":238},[228,47743,47513],{"class":343},[228,47745,12550],{"class":238},[228,47747,47518],{"class":343},[228,47749,12550],{"class":238},[228,47751,47523],{"class":343},[228,47753,47754],{"class":238},")):\n",[228,47756,47757,47759,47761],{"class":230,"line":8172},[228,47758,45788],{"class":238},[228,47760,284],{"class":234},[228,47762,47538],{"class":238},[228,47764,47765,47767,47769],{"class":230,"line":9831},[228,47766,47543],{"class":238},[228,47768,284],{"class":234},[228,47770,47548],{"class":238},[228,47772,47773,47775,47777],{"class":230,"line":9856},[228,47774,47553],{"class":238},[228,47776,284],{"class":234},[228,47778,47558],{"class":238},[228,47780,47781],{"class":230,"line":9879},[228,47782,47567],{"class":297},[228,47784,47785,47787,47789,47791,47793],{"class":230,"line":9903},[228,47786,47572],{"class":238},[228,47788,284],{"class":234},[228,47790,47577],{"class":238},[228,47792,822],{"class":234},[228,47794,47582],{"class":287},[228,47796,47797],{"class":230,"line":9908},[228,47798,47596],{"class":297},[228,47800,47801],{"class":230,"line":9913},[228,47802,47803],{"class":297},"            # print(mean.shape)\n",[228,47805,47806],{"class":230,"line":9918},[228,47807,47591],{"class":297},[228,47809,47810],{"class":230,"line":9927},[228,47811,2514],{"emptyLinePlaceholder":157},[228,47813,47814,47817],{"class":230,"line":9932},[228,47815,47816],{"class":234},"            try",[228,47818,3853],{"class":238},[228,47820,47821,47824,47826,47829,47831,47834,47836],{"class":230,"line":9938},[228,47822,47823],{"class":238},"                diff ",[228,47825,284],{"class":234},[228,47827,47828],{"class":238}," (normalized_image_array ",[228,47830,770],{"class":234},[228,47832,47833],{"class":238}," mean) ",[228,47835,10776],{"class":234},[228,47837,47838],{"class":287}," 2\n",[228,47840,47841,47844,47846,47849,47851,47853,47855,47857,47859,47861],{"class":230,"line":9959},[228,47842,47843],{"class":238},"                sum_squared_diff ",[228,47845,9592],{"class":234},[228,47847,47848],{"class":238}," np.sum(diff, ",[228,47850,47629],{"class":5331},[228,47852,284],{"class":234},[228,47854,239],{"class":238},[228,47856,430],{"class":287},[228,47858,12550],{"class":238},[228,47860,456],{"class":287},[228,47862,30612],{"class":238},[228,47864,47865,47868],{"class":230,"line":9965},[228,47866,47867],{"class":234},"            except",[228,47869,3853],{"class":238},[228,47871,47872,47875,47877,47879,47882],{"class":230,"line":9979},[228,47873,47874],{"class":287},"                print",[228,47876,239],{"class":238},[228,47878,291],{"class":234},[228,47880,47881],{"class":343},"\"捕获到自定义异常\"",[228,47883,245],{"class":238},[228,47885,47886],{"class":230,"line":9985},[228,47887,47888],{"class":297},"            # diff = (normalized_image_array - mean) ** 2\n",[228,47890,47891],{"class":230,"line":10012},[228,47892,47893],{"class":297},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[228,47895,47896],{"class":230,"line":10021},[228,47897,2514],{"emptyLinePlaceholder":157},[228,47899,47900,47903,47905,47908,47910],{"class":230,"line":10027},[228,47901,47902],{"class":238},"variance ",[228,47904,284],{"class":234},[228,47906,47907],{"class":238}," sum_squared_diff ",[228,47909,822],{"class":234},[228,47911,47665],{"class":238},[228,47913,47914],{"class":230,"line":10035},[228,47915,2514],{"emptyLinePlaceholder":157},[228,47917,47918,47920,47922,47925],{"class":230,"line":10040},[228,47919,30530],{"class":287},[228,47921,239],{"class":238},[228,47923,47924],{"class":343},"\"Mean:\"",[228,47926,47927],{"class":238},", mean)\n",[228,47929,47930,47932,47934,47937],{"class":230,"line":16719},[228,47931,30530],{"class":287},[228,47933,239],{"class":238},[228,47935,47936],{"class":343},"\"Variance:\"",[228,47938,47939],{"class":238},", variance)\n",[220,47941,47943],{"className":30493,"code":47942,"language":30495,"meta":141,"style":141},"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",[30,47944,47945,47951,47957,47967,47973,47983,47997,48007,48017,48027,48031,48041,48051,48055,48059,48067,48072,48077,48096,48100,48105,48110,48115,48120,48161,48166,48176,48181,48194,48199,48204,48209,48214,48219,48223,48228,48233,48255,48259,48291,48305,48315,48325,48329,48339,48353,48363,48373,48383,48389,48393,48397,48401,48405,48409,48417,48437,48441,48445,48449,48453,48469,48473,48477,48485,48489,48493,48501,48505,48509,48513,48521,48525,48529,48533,48541,48545,48553,48557,48565,48569,48577,48581,48589,48593,48597,48605,48609,48613,48625,48649,48663,48667,48671,48675,48683,48687,48695,48699,48707,48711,48719,48723,48731,48735,48743,48747,48759,48763,48771,48775,48783,48787,48791,48795,48799,48807,48811,48827,48831,48839,48843,48847,48851,48855,48859,48863,48867,48883,48887,48899,48903,48915,48919,48931,48935,48943,48947,48955,48959,48963,48967,48973,48977,48985,48989,49005,49009,49017,49021,49037,49049,49053,49065,49069,49073,49081,49085,49089,49097,49101,49109,49113,49121,49125,49129,49171,49213,49217,49221,49237,49241,49257,49261,49265,49273,49277,49281,49293,49331,49335,49339,49347,49351,49365,49375,49381,49387,49393,49399,49403,49407,49413,49417,49421,49429,49433,49451,49455,49459,49463,49479,49483,49487,49491,49495,49499,49519,49539,49543,49547,49551,49559,49567,49571,49587,49607,49627,49631,49636,49645,49654,49659,49664,49669,49682,49687,49696,49705,49722],{"__ignoreMap":141},[228,47946,47947,47949],{"class":230,"line":231},[228,47948,30507],{"class":234},[228,47950,31937],{"class":238},[228,47952,47953,47955],{"class":230,"line":142},[228,47954,30507],{"class":234},[228,47956,31944],{"class":238},[228,47958,47959,47961,47963,47965],{"class":230,"line":1293},[228,47960,30507],{"class":234},[228,47962,31955],{"class":238},[228,47964,31498],{"class":234},[228,47966,31960],{"class":238},[228,47968,47969,47971],{"class":230,"line":1308},[228,47970,30507],{"class":234},[228,47972,30510],{"class":238},[228,47974,47975,47977,47979,47981],{"class":230,"line":1314},[228,47976,30852],{"class":234},[228,47978,31530],{"class":238},[228,47980,30507],{"class":234},[228,47982,31977],{"class":238},[228,47984,47985,47987,47989,47991,47994],{"class":230,"line":1328},[228,47986,30852],{"class":234},[228,47988,31483],{"class":238},[228,47990,30507],{"class":234},[228,47992,47993],{"class":238}," ImageFolder ",[228,47995,47996],{"class":297},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[228,47998,47999,48001,48003,48005],{"class":230,"line":1334},[228,48000,30852],{"class":234},[228,48002,31513],{"class":238},[228,48004,30507],{"class":234},[228,48006,31518],{"class":238},[228,48008,48009,48011,48013,48015],{"class":230,"line":1425},[228,48010,30507],{"class":234},[228,48012,31530],{"class":238},[228,48014,31498],{"class":234},[228,48016,31535],{"class":238},[228,48018,48019,48021,48023,48025],{"class":230,"line":1431},[228,48020,30507],{"class":234},[228,48022,31547],{"class":238},[228,48024,31498],{"class":234},[228,48026,31552],{"class":238},[228,48028,48029],{"class":230,"line":1443},[228,48030,32022],{"class":297},[228,48032,48033,48035,48037,48039],{"class":230,"line":1726},[228,48034,30852],{"class":234},[228,48036,32029],{"class":238},[228,48038,30507],{"class":234},[228,48040,43146],{"class":238},[228,48042,48043,48045,48047,48049],{"class":230,"line":1731},[228,48044,30852],{"class":234},[228,48046,30855],{"class":238},[228,48048,30507],{"class":234},[228,48050,30860],{"class":238},[228,48052,48053],{"class":230,"line":1737},[228,48054,2514],{"emptyLinePlaceholder":157},[228,48056,48057],{"class":230,"line":1742},[228,48058,32057],{"class":297},[228,48060,48061,48063,48065],{"class":230,"line":1756},[228,48062,32062],{"class":234},[228,48064,32065],{"class":2077},[228,48066,32068],{"class":238},[228,48068,48069],{"class":230,"line":1761},[228,48070,48071],{"class":297},"    # 导入自己的数据集，并进行数据处理\n",[228,48073,48074],{"class":230,"line":1767},[228,48075,48076],{"class":297},"    # 定义数据集的路径\n",[228,48078,48079,48082,48084,48086,48088,48090,48094],{"class":230,"line":1788},[228,48080,48081],{"class":287},"    ROOT_PATH",[228,48083,284],{"class":234},[228,48085,908],{"class":234},[228,48087,489],{"class":343},[228,48089,796],{"class":287},[228,48091,48093],{"class":48092},"sA_wV","\u002Fdata\u002Ftrain",[228,48095,25249],{"class":343},[228,48097,48098],{"class":230,"line":1793},[228,48099,2514],{"emptyLinePlaceholder":157},[228,48101,48102],{"class":230,"line":1807},[228,48103,48104],{"class":297},"    # 定义归一化方法\n",[228,48106,48107],{"class":230,"line":1812},[228,48108,48109],{"class":297},"    # 这里需要先计算一下数据集的均值和方差\n",[228,48111,48112],{"class":230,"line":1841},[228,48113,48114],{"class":297},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[228,48116,48117],{"class":230,"line":1846},[228,48118,48119],{"class":297},"    # 第一个参数是均值，第二个参数是方差\n",[228,48121,48122,48125,48127,48130,48133,48135,48138,48140,48143,48146,48149,48151,48154,48156,48159],{"class":230,"line":1863},[228,48123,48124],{"class":238},"    normalize",[228,48126,284],{"class":234},[228,48128,48129],{"class":238},"transforms.Normalize([",[228,48131,48132],{"class":287},"0.162",[228,48134,616],{"class":238},[228,48136,48137],{"class":287},"0.151",[228,48139,616],{"class":238},[228,48141,48142],{"class":287},"0.138",[228,48144,48145],{"class":238},"],[",[228,48147,48148],{"class":287},"0.058",[228,48150,616],{"class":238},[228,48152,48153],{"class":287},"0.052",[228,48155,616],{"class":238},[228,48157,48158],{"class":287},"0.048",[228,48160,4771],{"class":238},[228,48162,48163],{"class":230,"line":1868},[228,48164,48165],{"class":297},"    # 定义数据集处理方法变量\n",[228,48167,48168,48171,48173],{"class":230,"line":1873},[228,48169,48170],{"class":238},"    train_transform",[228,48172,284],{"class":234},[228,48174,48175],{"class":238},"transforms.Compose([\n",[228,48177,48178],{"class":230,"line":1878},[228,48179,48180],{"class":297},"        # 调整图像大小为224*224\n",[228,48182,48183,48186,48188,48190,48192],{"class":230,"line":1892},[228,48184,48185],{"class":238},"        transforms.Resize((",[228,48187,31616],{"class":287},[228,48189,616],{"class":238},[228,48191,31616],{"class":287},[228,48193,42737],{"class":238},[228,48195,48196],{"class":230,"line":1897},[228,48197,48198],{"class":297},"        # 将图像转换为张量\n",[228,48200,48201],{"class":230,"line":2691},[228,48202,48203],{"class":238},"        transforms.ToTensor(),\n",[228,48205,48206],{"class":230,"line":2705},[228,48207,48208],{"class":238},"        normalize])\n",[228,48210,48211],{"class":230,"line":2713},[228,48212,48213],{"class":297},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[228,48215,48216],{"class":230,"line":2718},[228,48217,48218],{"class":297},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[228,48220,48221],{"class":230,"line":2724},[228,48222,2514],{"emptyLinePlaceholder":157},[228,48224,48225],{"class":230,"line":2730},[228,48226,48227],{"class":297},"    # 加载数据集\n",[228,48229,48230],{"class":230,"line":2735},[228,48231,48232],{"class":297},"    # 传入数据集路径与处理方法\n",[228,48234,48235,48237,48239,48242,48245,48247,48250,48252],{"class":230,"line":8063},[228,48236,32073],{"class":238},[228,48238,284],{"class":234},[228,48240,48241],{"class":238},"ImageFolder(",[228,48243,48244],{"class":287},"ROOT_PATH",[228,48246,616],{"class":238},[228,48248,48249],{"class":5331},"transform",[228,48251,284],{"class":234},[228,48253,48254],{"class":238},"train_transform)\n",[228,48256,48257],{"class":230,"line":8087},[228,48258,2514],{"emptyLinePlaceholder":157},[228,48260,48261,48263,48265,48267,48269,48271,48273,48275,48277,48279,48281,48283,48285,48287,48289],{"class":230,"line":8092},[228,48262,32125],{"class":238},[228,48264,284],{"class":234},[228,48266,32130],{"class":238},[228,48268,32133],{"class":287},[228,48270,239],{"class":238},[228,48272,32138],{"class":287},[228,48274,693],{"class":234},[228,48276,7473],{"class":287},[228,48278,32145],{"class":238},[228,48280,32133],{"class":287},[228,48282,239],{"class":238},[228,48284,32152],{"class":287},[228,48286,693],{"class":234},[228,48288,7473],{"class":287},[228,48290,32159],{"class":238},[228,48292,48293,48295,48297,48299,48301,48303],{"class":230,"line":8098},[228,48294,32164],{"class":238},[228,48296,284],{"class":234},[228,48298,32169],{"class":238},[228,48300,31652],{"class":5331},[228,48302,284],{"class":234},[228,48304,31657],{"class":238},[228,48306,48307,48309,48311,48313],{"class":230,"line":8125},[228,48308,32180],{"class":5331},[228,48310,284],{"class":234},[228,48312,436],{"class":287},[228,48314,31581],{"class":238},[228,48316,48317,48319,48321,48323],{"class":230,"line":8130},[228,48318,32192],{"class":5331},[228,48320,284],{"class":234},[228,48322,31591],{"class":287},[228,48324,31581],{"class":238},[228,48326,48327],{"class":230,"line":8136},[228,48328,32203],{"class":297},[228,48330,48331,48333,48335,48337],{"class":230,"line":8148},[228,48332,32208],{"class":5331},[228,48334,284],{"class":234},[228,48336,633],{"class":287},[228,48338,245],{"class":238},[228,48340,48341,48343,48345,48347,48349,48351],{"class":230,"line":8160},[228,48342,32219],{"class":238},[228,48344,284],{"class":234},[228,48346,31649],{"class":238},[228,48348,31652],{"class":5331},[228,48350,284],{"class":234},[228,48352,32230],{"class":238},[228,48354,48355,48357,48359,48361],{"class":230,"line":8172},[228,48356,32235],{"class":5331},[228,48358,284],{"class":234},[228,48360,436],{"class":287},[228,48362,31581],{"class":238},[228,48364,48365,48367,48369,48371],{"class":230,"line":9831},[228,48366,32246],{"class":5331},[228,48368,284],{"class":234},[228,48370,31591],{"class":287},[228,48372,31581],{"class":238},[228,48374,48375,48377,48379,48381],{"class":230,"line":9856},[228,48376,32257],{"class":5331},[228,48378,284],{"class":234},[228,48380,633],{"class":287},[228,48382,245],{"class":238},[228,48384,48385,48387],{"class":230,"line":9879},[228,48386,4204],{"class":234},[228,48388,32270],{"class":238},[228,48390,48391],{"class":230,"line":9903},[228,48392,2514],{"emptyLinePlaceholder":157},[228,48394,48395],{"class":230,"line":9908},[228,48396,32279],{"class":297},[228,48398,48399],{"class":230,"line":9913},[228,48400,32284],{"class":297},[228,48402,48403],{"class":230,"line":9918},[228,48404,2514],{"emptyLinePlaceholder":157},[228,48406,48407],{"class":230,"line":9927},[228,48408,32293],{"class":297},[228,48410,48411,48413,48415],{"class":230,"line":9932},[228,48412,32062],{"class":234},[228,48414,32300],{"class":2077},[228,48416,32303],{"class":238},[228,48418,48419,48421,48423,48425,48427,48429,48431,48433,48435],{"class":230,"line":9938},[228,48420,31352],{"class":238},[228,48422,284],{"class":234},[228,48424,30566],{"class":238},[228,48426,31359],{"class":343},[228,48428,1818],{"class":234},[228,48430,31364],{"class":238},[228,48432,1815],{"class":234},[228,48434,32322],{"class":343},[228,48436,245],{"class":238},[228,48438,48439],{"class":230,"line":9959},[228,48440,2514],{"emptyLinePlaceholder":157},[228,48442,48443],{"class":230,"line":9965},[228,48444,32337],{"class":297},[228,48446,48447],{"class":230,"line":9979},[228,48448,32342],{"class":297},[228,48450,48451],{"class":230,"line":9985},[228,48452,32347],{"class":297},[228,48454,48455,48457,48459,48461,48463,48465,48467],{"class":230,"line":10012},[228,48456,32352],{"class":238},[228,48458,284],{"class":234},[228,48460,32357],{"class":238},[228,48462,32360],{"class":5331},[228,48464,284],{"class":234},[228,48466,32365],{"class":287},[228,48468,245],{"class":238},[228,48470,48471],{"class":230,"line":10021},[228,48472,2514],{"emptyLinePlaceholder":157},[228,48474,48475],{"class":230,"line":10027},[228,48476,32376],{"class":297},[228,48478,48479,48481,48483],{"class":230,"line":10035},[228,48480,32381],{"class":238},[228,48482,284],{"class":234},[228,48484,32386],{"class":238},[228,48486,48487],{"class":230,"line":10040},[228,48488,2514],{"emptyLinePlaceholder":157},[228,48490,48491],{"class":230,"line":16719},[228,48492,32395],{"class":297},[228,48494,48495,48497,48499],{"class":230,"line":16725},[228,48496,31404],{"class":238},[228,48498,284],{"class":234},[228,48500,32404],{"class":238},[228,48502,48503],{"class":230,"line":16748},[228,48504,32409],{"class":297},[228,48506,48507],{"class":230,"line":16754},[228,48508,32414],{"class":297},[228,48510,48511],{"class":230,"line":16777},[228,48512,32419],{"class":297},[228,48514,48515,48517,48519],{"class":230,"line":16791},[228,48516,32424],{"class":238},[228,48518,284],{"class":234},[228,48520,32429],{"class":238},[228,48522,48523],{"class":230,"line":16811},[228,48524,2514],{"emptyLinePlaceholder":157},[228,48526,48527],{"class":230,"line":16817},[228,48528,32442],{"class":297},[228,48530,48531],{"class":230,"line":16828},[228,48532,32447],{"class":297},[228,48534,48535,48537,48539],{"class":230,"line":16851},[228,48536,32452],{"class":238},[228,48538,284],{"class":234},[228,48540,32457],{"class":287},[228,48542,48543],{"class":230,"line":16873},[228,48544,32462],{"class":297},[228,48546,48547,48549,48551],{"class":230,"line":16878},[228,48548,32467],{"class":238},[228,48550,284],{"class":234},[228,48552,32472],{"class":238},[228,48554,48555],{"class":230,"line":16884},[228,48556,32477],{"class":297},[228,48558,48559,48561,48563],{"class":230,"line":16898},[228,48560,32482],{"class":238},[228,48562,284],{"class":234},[228,48564,32472],{"class":238},[228,48566,48567],{"class":230,"line":16911},[228,48568,32491],{"class":297},[228,48570,48571,48573,48575],{"class":230,"line":16916},[228,48572,32496],{"class":238},[228,48574,284],{"class":234},[228,48576,32472],{"class":238},[228,48578,48579],{"class":230,"line":16930},[228,48580,32505],{"class":297},[228,48582,48583,48585,48587],{"class":230,"line":16935},[228,48584,32510],{"class":238},[228,48586,284],{"class":234},[228,48588,32472],{"class":238},[228,48590,48591],{"class":230,"line":16941},[228,48592,2514],{"emptyLinePlaceholder":157},[228,48594,48595],{"class":230,"line":16946},[228,48596,32523],{"class":297},[228,48598,48599,48601,48603],{"class":230,"line":16960},[228,48600,32528],{"class":238},[228,48602,284],{"class":234},[228,48604,32533],{"class":238},[228,48606,48607],{"class":230,"line":16965},[228,48608,2514],{"emptyLinePlaceholder":157},[228,48610,48611],{"class":230,"line":16970},[228,48612,32546],{"class":297},[228,48614,48615,48617,48619,48621,48623],{"class":230,"line":16984},[228,48616,3315],{"class":234},[228,48618,32553],{"class":238},[228,48620,26159],{"class":234},[228,48622,32558],{"class":287},[228,48624,32561],{"class":238},[228,48626,48627,48629,48631,48633,48635,48637,48639,48641,48643,48645,48647],{"class":230,"line":16996},[228,48628,32566],{"class":287},[228,48630,239],{"class":238},[228,48632,32571],{"class":343},[228,48634,32574],{"class":287},[228,48636,822],{"class":343},[228,48638,32574],{"class":287},[228,48640,489],{"class":343},[228,48642,32583],{"class":238},[228,48644,770],{"class":234},[228,48646,456],{"class":287},[228,48648,30612],{"class":238},[228,48650,48651,48653,48655,48657,48659,48661],{"class":230,"line":17001},[228,48652,32566],{"class":287},[228,48654,239],{"class":238},[228,48656,32598],{"class":343},[228,48658,693],{"class":234},[228,48660,684],{"class":287},[228,48662,245],{"class":238},[228,48664,48665],{"class":230,"line":17014},[228,48666,2514],{"emptyLinePlaceholder":157},[228,48668,48669],{"class":230,"line":17019},[228,48670,32613],{"class":297},[228,48672,48673],{"class":230,"line":17024},[228,48674,32618],{"class":297},[228,48676,48677,48679,48681],{"class":230,"line":17029},[228,48678,32623],{"class":238},[228,48680,284],{"class":234},[228,48682,32457],{"class":287},[228,48684,48685],{"class":230,"line":17042},[228,48686,32632],{"class":297},[228,48688,48689,48691,48693],{"class":230,"line":17047},[228,48690,32637],{"class":238},[228,48692,284],{"class":234},[228,48694,3199],{"class":287},[228,48696,48697],{"class":230,"line":32748},[228,48698,32646],{"class":297},[228,48700,48701,48703,48705],{"class":230,"line":32754},[228,48702,32651],{"class":238},[228,48704,284],{"class":234},[228,48706,32457],{"class":287},[228,48708,48709],{"class":230,"line":32760},[228,48710,32660],{"class":297},[228,48712,48713,48715,48717],{"class":230,"line":32766},[228,48714,32665],{"class":238},[228,48716,284],{"class":234},[228,48718,3199],{"class":287},[228,48720,48721],{"class":230,"line":32772},[228,48722,32674],{"class":297},[228,48724,48725,48727,48729],{"class":230,"line":32783},[228,48726,32679],{"class":238},[228,48728,284],{"class":234},[228,48730,3199],{"class":287},[228,48732,48733],{"class":230,"line":32789},[228,48734,32688],{"class":297},[228,48736,48737,48739,48741],{"class":230,"line":32809},[228,48738,32693],{"class":238},[228,48740,284],{"class":234},[228,48742,3199],{"class":287},[228,48744,48745],{"class":230,"line":32815},[228,48746,32702],{"class":297},[228,48748,48749,48751,48753,48755,48757],{"class":230,"line":32826},[228,48750,3517],{"class":234},[228,48752,31716],{"class":238},[228,48754,26159],{"class":234},[228,48756,31721],{"class":287},[228,48758,32715],{"class":238},[228,48760,48761],{"class":230,"line":32832},[228,48762,32720],{"class":297},[228,48764,48765,48767,48769],{"class":230,"line":32838},[228,48766,32725],{"class":238},[228,48768,284],{"class":234},[228,48770,32730],{"class":238},[228,48772,48773],{"class":230,"line":32844},[228,48774,32735],{"class":297},[228,48776,48777,48779,48781],{"class":230,"line":32850},[228,48778,32740],{"class":238},[228,48780,284],{"class":234},[228,48782,32745],{"class":238},[228,48784,48785],{"class":230,"line":32856},[228,48786,32751],{"class":297},[228,48788,48789],{"class":230,"line":32862},[228,48790,32757],{"class":238},[228,48792,48793],{"class":230,"line":32868},[228,48794,32763],{"class":297},[228,48796,48797],{"class":230,"line":32888},[228,48798,32769],{"class":297},[228,48800,48801,48803,48805],{"class":230,"line":32894},[228,48802,32775],{"class":238},[228,48804,284],{"class":234},[228,48806,32780],{"class":238},[228,48808,48809],{"class":230,"line":32910},[228,48810,32786],{"class":297},[228,48812,48813,48815,48817,48819,48821,48823,48825],{"class":230,"line":32916},[228,48814,32792],{"class":238},[228,48816,284],{"class":234},[228,48818,32797],{"class":238},[228,48820,32800],{"class":5331},[228,48822,284],{"class":234},[228,48824,456],{"class":287},[228,48826,245],{"class":238},[228,48828,48829],{"class":230,"line":32930},[228,48830,32812],{"class":297},[228,48832,48833,48835,48837],{"class":230,"line":32936},[228,48834,32818],{"class":238},[228,48836,284],{"class":234},[228,48838,32823],{"class":238},[228,48840,48841],{"class":230,"line":32951},[228,48842,32829],{"class":297},[228,48844,48845],{"class":230,"line":32957},[228,48846,32835],{"class":238},[228,48848,48849],{"class":230,"line":32966},[228,48850,32841],{"class":297},[228,48852,48853],{"class":230,"line":32972},[228,48854,32847],{"class":238},[228,48856,48857],{"class":230,"line":32981},[228,48858,32853],{"class":297},[228,48860,48861],{"class":230,"line":32987},[228,48862,32859],{"class":238},[228,48864,48865],{"class":230,"line":32993},[228,48866,32865],{"class":297},[228,48868,48869,48871,48873,48875,48877,48879,48881],{"class":230,"line":33002},[228,48870,32871],{"class":238},[228,48872,9592],{"class":234},[228,48874,32876],{"class":238},[228,48876,693],{"class":234},[228,48878,32881],{"class":238},[228,48880,430],{"class":287},[228,48882,245],{"class":238},[228,48884,48885],{"class":230,"line":33008},[228,48886,32891],{"class":297},[228,48888,48889,48891,48893,48895,48897],{"class":230,"line":33019},[228,48890,32897],{"class":238},[228,48892,9592],{"class":234},[228,48894,32902],{"class":238},[228,48896,3063],{"class":234},[228,48898,32907],{"class":238},[228,48900,48901],{"class":230,"line":33025},[228,48902,32913],{"class":297},[228,48904,48905,48907,48909,48911,48913],{"class":230,"line":33044},[228,48906,32919],{"class":238},[228,48908,9592],{"class":234},[228,48910,32881],{"class":238},[228,48912,430],{"class":287},[228,48914,245],{"class":238},[228,48916,48917],{"class":230,"line":33050},[228,48918,32933],{"class":297},[228,48920,48921,48923,48925,48927,48929],{"class":230,"line":33061},[228,48922,3517],{"class":234},[228,48924,32941],{"class":238},[228,48926,26159],{"class":234},[228,48928,31721],{"class":287},[228,48930,32948],{"class":238},[228,48932,48933],{"class":230,"line":33067},[228,48934,32954],{"class":297},[228,48936,48937,48939,48941],{"class":230,"line":33087},[228,48938,32725],{"class":238},[228,48940,284],{"class":234},[228,48942,32730],{"class":238},[228,48944,48945],{"class":230,"line":33103},[228,48946,32969],{"class":297},[228,48948,48949,48951,48953],{"class":230,"line":33109},[228,48950,32740],{"class":238},[228,48952,284],{"class":234},[228,48954,32745],{"class":238},[228,48956,48957],{"class":230,"line":33123},[228,48958,32984],{"class":297},[228,48960,48961],{"class":230,"line":33129},[228,48962,32990],{"class":238},[228,48964,48965],{"class":230,"line":33135},[228,48966,36471],{"class":297},[228,48968,48969,48971],{"class":230,"line":33146},[228,48970,32996],{"class":234},[228,48972,32999],{"class":238},[228,48974,48975],{"class":230,"line":33152},[228,48976,33005],{"class":297},[228,48978,48979,48981,48983],{"class":230,"line":33158},[228,48980,36486],{"class":238},[228,48982,284],{"class":234},[228,48984,32780],{"class":238},[228,48986,48987],{"class":230,"line":33168},[228,48988,33022],{"class":297},[228,48990,48991,48993,48995,48997,48999,49001,49003],{"class":230,"line":33174},[228,48992,36499],{"class":238},[228,48994,284],{"class":234},[228,48996,32797],{"class":238},[228,48998,32800],{"class":5331},[228,49000,284],{"class":234},[228,49002,456],{"class":287},[228,49004,245],{"class":238},[228,49006,49007],{"class":230,"line":33185},[228,49008,33047],{"class":297},[228,49010,49011,49013,49015],{"class":230,"line":33191},[228,49012,36520],{"class":238},[228,49014,284],{"class":234},[228,49016,32823],{"class":238},[228,49018,49019],{"class":230,"line":33201},[228,49020,33064],{"class":297},[228,49022,49023,49025,49027,49029,49031,49033,49035],{"class":230,"line":33206},[228,49024,36533],{"class":238},[228,49026,9592],{"class":234},[228,49028,36538],{"class":238},[228,49030,693],{"class":234},[228,49032,32881],{"class":238},[228,49034,430],{"class":287},[228,49036,245],{"class":238},[228,49038,49039,49041,49043,49045,49047],{"class":230,"line":33212},[228,49040,36551],{"class":238},[228,49042,9592],{"class":234},[228,49044,32902],{"class":238},[228,49046,3063],{"class":234},[228,49048,32907],{"class":238},[228,49050,49051],{"class":230,"line":33261},[228,49052,36564],{"class":297},[228,49054,49055,49057,49059,49061,49063],{"class":230,"line":33308},[228,49056,36569],{"class":238},[228,49058,9592],{"class":234},[228,49060,32881],{"class":238},[228,49062,430],{"class":287},[228,49064,245],{"class":238},[228,49066,49067],{"class":230,"line":33313},[228,49068,33126],{"class":297},[228,49070,49071],{"class":230,"line":33319},[228,49072,33132],{"class":297},[228,49074,49075,49077,49079],{"class":230,"line":33338},[228,49076,33138],{"class":238},[228,49078,822],{"class":234},[228,49080,33143],{"class":238},[228,49082,49083],{"class":230,"line":33344},[228,49084,33149],{"class":297},[228,49086,49087],{"class":230,"line":33364},[228,49088,33155],{"class":297},[228,49090,49091,49093,49095],{"class":230,"line":33370},[228,49092,33161],{"class":238},[228,49094,822],{"class":234},[228,49096,33143],{"class":238},[228,49098,49099],{"class":230,"line":33376},[228,49100,33171],{"class":297},[228,49102,49103,49105,49107],{"class":230,"line":33386},[228,49104,33177],{"class":238},[228,49106,822],{"class":234},[228,49108,33182],{"class":238},[228,49110,49111],{"class":230,"line":33391},[228,49112,33188],{"class":297},[228,49114,49115,49117,49119],{"class":230,"line":33397},[228,49116,33194],{"class":238},[228,49118,822],{"class":234},[228,49120,33182],{"class":238},[228,49122,49123],{"class":230,"line":33413},[228,49124,2514],{"emptyLinePlaceholder":157},[228,49126,49127],{"class":230,"line":33458},[228,49128,33209],{"class":297},[228,49130,49131,49133,49135,49137,49139,49141,49143,49145,49147,49149,49151,49153,49155,49157,49159,49161,49163,49165,49167,49169],{"class":230,"line":33464},[228,49132,32566],{"class":287},[228,49134,239],{"class":238},[228,49136,3706],{"class":343},[228,49138,32574],{"class":287},[228,49140,33223],{"class":343},[228,49142,1134],{"class":287},[228,49144,33228],{"class":234},[228,49146,1184],{"class":287},[228,49148,33233],{"class":343},[228,49150,1134],{"class":287},[228,49152,33228],{"class":234},[228,49154,1184],{"class":287},[228,49156,3706],{"class":343},[228,49158,33244],{"class":238},[228,49160,770],{"class":234},[228,49162,456],{"class":287},[228,49164,33251],{"class":238},[228,49166,770],{"class":234},[228,49168,456],{"class":287},[228,49170,33258],{"class":238},[228,49172,49173,49175,49177,49179,49181,49183,49185,49187,49189,49191,49193,49195,49197,49199,49201,49203,49205,49207,49209,49211],{"class":230,"line":33470},[228,49174,32566],{"class":287},[228,49176,239],{"class":238},[228,49178,3706],{"class":343},[228,49180,32574],{"class":287},[228,49182,33272],{"class":343},[228,49184,1134],{"class":287},[228,49186,33228],{"class":234},[228,49188,1184],{"class":287},[228,49190,33281],{"class":343},[228,49192,1134],{"class":287},[228,49194,33228],{"class":234},[228,49196,1184],{"class":287},[228,49198,3706],{"class":343},[228,49200,33292],{"class":238},[228,49202,770],{"class":234},[228,49204,456],{"class":287},[228,49206,33299],{"class":238},[228,49208,770],{"class":234},[228,49210,456],{"class":287},[228,49212,33258],{"class":238},[228,49214,49215],{"class":230,"line":33476},[228,49216,2514],{"emptyLinePlaceholder":157},[228,49218,49219],{"class":230,"line":33487},[228,49220,33316],{"class":297},[228,49222,49223,49225,49227,49229,49231,49233,49235],{"class":230,"line":33493},[228,49224,2611],{"class":234},[228,49226,33324],{"class":238},[228,49228,770],{"class":234},[228,49230,456],{"class":287},[228,49232,1178],{"class":238},[228,49234,1198],{"class":234},[228,49236,33335],{"class":238},[228,49238,49239],{"class":230,"line":33499},[228,49240,33341],{"class":297},[228,49242,49243,49245,49247,49249,49251,49253,49255],{"class":230,"line":33505},[228,49244,33347],{"class":238},[228,49246,278],{"class":287},[228,49248,284],{"class":234},[228,49250,33354],{"class":238},[228,49252,770],{"class":234},[228,49254,456],{"class":287},[228,49256,33361],{"class":238},[228,49258,49259],{"class":230,"line":33523},[228,49260,33367],{"class":297},[228,49262,49263],{"class":230,"line":33537},[228,49264,33373],{"class":297},[228,49266,49267,49269,49271],{"class":230,"line":33546},[228,49268,33379],{"class":238},[228,49270,284],{"class":234},[228,49272,32429],{"class":238},[228,49274,49275],{"class":230,"line":33555},[228,49276,2514],{"emptyLinePlaceholder":157},[228,49278,49279],{"class":230,"line":33564},[228,49280,33394],{"class":297},[228,49282,49283,49285,49287,49289,49291],{"class":230,"line":33573},[228,49284,33400],{"class":238},[228,49286,284],{"class":234},[228,49288,33405],{"class":238},[228,49290,770],{"class":234},[228,49292,33410],{"class":238},[228,49294,49295,49297,49299,49301,49303,49305,49307,49309,49311,49313,49315,49317,49319,49321,49323,49325,49327,49329],{"class":230,"line":33579},[228,49296,32566],{"class":287},[228,49298,239],{"class":238},[228,49300,33420],{"class":343},[228,49302,1134],{"class":287},[228,49304,33425],{"class":234},[228,49306,1184],{"class":287},[228,49308,782],{"class":343},[228,49310,1134],{"class":287},[228,49312,33425],{"class":234},[228,49314,1184],{"class":287},[228,49316,33438],{"class":343},[228,49318,33441],{"class":238},[228,49320,33444],{"class":234},[228,49322,1145],{"class":287},[228,49324,33449],{"class":238},[228,49326,566],{"class":234},[228,49328,1145],{"class":287},[228,49330,30612],{"class":238},[228,49332,49333],{"class":230,"line":33585},[228,49334,36848],{"class":297},[228,49336,49337],{"class":230,"line":33593},[228,49338,36853],{"class":297},[228,49340,49341,49343,49345],{"class":230,"line":33598},[228,49342,36858],{"class":238},[228,49344,33482],{"class":343},[228,49346,245],{"class":238},[228,49348,49349],{"class":230,"line":33604},[228,49350,33502],{"class":297},[228,49352,49353,49355,49357,49359,49361,49363],{"class":230,"line":33615},[228,49354,33508],{"class":238},[228,49356,284],{"class":234},[228,49358,33513],{"class":238},[228,49360,33516],{"class":5331},[228,49362,284],{"class":234},[228,49364,1660],{"class":238},[228,49366,49367,49369,49371,49373],{"class":230,"line":33621},[228,49368,33526],{"class":343},[228,49370,1097],{"class":238},[228,49372,33531],{"class":287},[228,49374,33534],{"class":238},[228,49376,49377,49379],{"class":230,"line":33641},[228,49378,33540],{"class":343},[228,49380,33543],{"class":238},[228,49382,49383,49385],{"class":230,"line":33647},[228,49384,33549],{"class":343},[228,49386,33552],{"class":238},[228,49388,49389,49391],{"class":230,"line":33653},[228,49390,33558],{"class":343},[228,49392,33561],{"class":238},[228,49394,49395,49397],{"class":230,"line":33659},[228,49396,33567],{"class":343},[228,49398,33570],{"class":238},[228,49400,49401],{"class":230,"line":33676},[228,49402,33576],{"class":238},[228,49404,49405],{"class":230,"line":33682},[228,49406,33582],{"class":297},[228,49408,49409,49411],{"class":230,"line":33688},[228,49410,4204],{"class":234},[228,49412,33590],{"class":238},[228,49414,49415],{"class":230,"line":33694},[228,49416,2514],{"emptyLinePlaceholder":157},[228,49418,49419],{"class":230,"line":33700},[228,49420,33601],{"class":297},[228,49422,49423,49425,49427],{"class":230,"line":33706},[228,49424,32062],{"class":234},[228,49426,33609],{"class":2077},[228,49428,33612],{"class":238},[228,49430,49431],{"class":230,"line":33733},[228,49432,33618],{"class":297},[228,49434,49435,49437,49439,49441,49443,49445,49447,49449],{"class":230,"line":33757},[228,49436,33624],{"class":238},[228,49438,31808],{"class":5331},[228,49440,284],{"class":234},[228,49442,239],{"class":238},[228,49444,736],{"class":287},[228,49446,616],{"class":238},[228,49448,531],{"class":287},[228,49450,30612],{"class":238},[228,49452,49453],{"class":230,"line":33763},[228,49454,33644],{"class":297},[228,49456,49457],{"class":230,"line":33769},[228,49458,33650],{"class":297},[228,49460,49461],{"class":230,"line":33775},[228,49462,33656],{"class":297},[228,49464,49465,49467,49469,49471,49473,49475,49477],{"class":230,"line":33786},[228,49466,31842],{"class":238},[228,49468,456],{"class":287},[228,49470,616],{"class":238},[228,49472,316],{"class":287},[228,49474,616],{"class":238},[228,49476,456],{"class":287},[228,49478,245],{"class":238},[228,49480,49481],{"class":230,"line":33797},[228,49482,33679],{"class":297},[228,49484,49485],{"class":230,"line":33803},[228,49486,33685],{"class":297},[228,49488,49489],{"class":230,"line":33820},[228,49490,33691],{"class":297},[228,49492,49493],{"class":230,"line":33843},[228,49494,33697],{"class":297},[228,49496,49497],{"class":230,"line":33866},[228,49498,33703],{"class":297},[228,49500,49501,49503,49505,49507,49509,49511,49513,49515,49517],{"class":230,"line":33872},[228,49502,33709],{"class":238},[228,49504,33712],{"class":343},[228,49506,33715],{"class":238},[228,49508,33718],{"class":343},[228,49510,616],{"class":238},[228,49512,33723],{"class":5331},[228,49514,284],{"class":234},[228,49516,33728],{"class":343},[228,49518,245],{"class":238},[228,49520,49521,49523,49525,49527,49529,49531,49533,49535,49537],{"class":230,"line":33877},[228,49522,33709],{"class":238},[228,49524,33712],{"class":343},[228,49526,33740],{"class":238},[228,49528,33743],{"class":343},[228,49530,616],{"class":238},[228,49532,33723],{"class":5331},[228,49534,284],{"class":234},[228,49536,33752],{"class":343},[228,49538,245],{"class":238},[228,49540,49541],{"class":230,"line":33886},[228,49542,33760],{"class":297},[228,49544,49545],{"class":230,"line":33896},[228,49546,33766],{"class":238},[228,49548,49549],{"class":230,"line":33902},[228,49550,33772],{"class":297},[228,49552,49553,49555,49557],{"class":230,"line":33907},[228,49554,33778],{"class":238},[228,49556,33781],{"class":343},[228,49558,245],{"class":238},[228,49560,49561,49563,49565],{"class":230,"line":33913},[228,49562,33789],{"class":238},[228,49564,33792],{"class":343},[228,49566,245],{"class":238},[228,49568,49569],{"class":230,"line":33926},[228,49570,33800],{"class":297},[228,49572,49573,49575,49577,49579,49581,49583,49585],{"class":230,"line":33932},[228,49574,31842],{"class":238},[228,49576,456],{"class":287},[228,49578,616],{"class":238},[228,49580,316],{"class":287},[228,49582,616],{"class":238},[228,49584,316],{"class":287},[228,49586,245],{"class":238},[228,49588,49589,49591,49593,49595,49597,49599,49601,49603,49605],{"class":230,"line":33943},[228,49590,33709],{"class":238},[228,49592,33712],{"class":343},[228,49594,33827],{"class":238},[228,49596,33718],{"class":343},[228,49598,616],{"class":238},[228,49600,33723],{"class":5331},[228,49602,284],{"class":234},[228,49604,33838],{"class":343},[228,49606,245],{"class":238},[228,49608,49609,49611,49613,49615,49617,49619,49621,49623,49625],{"class":230,"line":33954},[228,49610,33709],{"class":238},[228,49612,33712],{"class":343},[228,49614,33850],{"class":238},[228,49616,33743],{"class":343},[228,49618,616],{"class":238},[228,49620,33723],{"class":5331},[228,49622,284],{"class":234},[228,49624,33861],{"class":343},[228,49626,245],{"class":238},[228,49628,49629],{"class":230,"line":33973},[228,49630,33869],{"class":297},[228,49632,49634],{"class":230,"line":49633},219,[228,49635,33766],{"class":238},[228,49637,49639,49641,49643],{"class":230,"line":49638},220,[228,49640,33778],{"class":238},[228,49642,33712],{"class":343},[228,49644,245],{"class":238},[228,49646,49648,49650,49652],{"class":230,"line":49647},221,[228,49649,33789],{"class":238},[228,49651,33891],{"class":343},[228,49653,245],{"class":238},[228,49655,49657],{"class":230,"line":49656},222,[228,49658,33899],{"class":238},[228,49660,49662],{"class":230,"line":49661},223,[228,49663,2514],{"emptyLinePlaceholder":157},[228,49665,49667],{"class":230,"line":49666},224,[228,49668,33910],{"class":297},[228,49670,49672,49674,49676,49678,49680],{"class":230,"line":49671},225,[228,49673,1645],{"class":234},[228,49675,31335],{"class":287},[228,49677,3063],{"class":234},[228,49679,31340],{"class":343},[228,49681,3853],{"class":238},[228,49683,49685],{"class":230,"line":49684},226,[228,49686,33929],{"class":297},[228,49688,49690,49692,49694],{"class":230,"line":49689},227,[228,49691,44661],{"class":238},[228,49693,284],{"class":234},[228,49695,44666],{"class":238},[228,49697,49699,49701,49703],{"class":230,"line":49698},228,[228,49700,33946],{"class":238},[228,49702,284],{"class":234},[228,49704,33951],{"class":238},[228,49706,49708,49710,49712,49714,49716,49718,49720],{"class":230,"line":49707},229,[228,49709,33508],{"class":238},[228,49711,284],{"class":234},[228,49713,44683],{"class":238},[228,49715,33964],{"class":5331},[228,49717,284],{"class":234},[228,49719,1145],{"class":287},[228,49721,245],{"class":238},[228,49723,49725],{"class":230,"line":49724},230,[228,49726,33976],{"class":238},[22113,49728,49730],{"id":49729},"_242测试代码","2.4.2.测试代码",[19,49732,49733],{},"使用测试集进行测试与推理",[220,49735,49737],{"className":30493,"code":49736,"language":30495,"meta":141,"style":141},"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",[30,49738,49739,49745,49755,49765,49776,49786,49790,49794,49802,49807,49811,49828,49832,49836,49840,49844,49848,49880,49884,49892,49896,49908,49912,49916,49920,49924,49928,49932,49936,49940,49958,49972,49976,49986,49996,50006,50012,50016,50020,50028,50032,50048,50056,50060,50064,50072,50080,50084,50088,50092,50096,50102,50106,50116,50124,50132,50136,50140,50144,50152,50156,50172,50176,50180,50184,50196,50200,50212,50216,50220,50232,50236,50246,50250,50254,50266,50270,50278,50282,50286,50294,50298,50306,50310,50314,50318,50322,50326,50342,50350,50354,50358,50376,50382,50386,50396,50404,50412,50416,50420,50424,50428,50436,50440,50456,50460,50468,50476],{"__ignoreMap":141},[228,49740,49741,49743],{"class":230,"line":231},[228,49742,30507],{"class":234},[228,49744,30510],{"class":238},[228,49746,49747,49749,49751,49753],{"class":230,"line":142},[228,49748,30507],{"class":234},[228,49750,31530],{"class":238},[228,49752,31498],{"class":234},[228,49754,31535],{"class":238},[228,49756,49757,49759,49761,49763],{"class":230,"line":1293},[228,49758,30852],{"class":234},[228,49760,31513],{"class":238},[228,49762,30507],{"class":234},[228,49764,31518],{"class":238},[228,49766,49767,49769,49771,49773],{"class":230,"line":1308},[228,49768,30852],{"class":234},[228,49770,31483],{"class":238},[228,49772,30507],{"class":234},[228,49774,49775],{"class":238}," ImageFolder\n",[228,49777,49778,49780,49782,49784],{"class":230,"line":1314},[228,49779,30852],{"class":234},[228,49781,32029],{"class":238},[228,49783,30507],{"class":234},[228,49785,44755],{"class":238},[228,49787,49788],{"class":230,"line":1328},[228,49789,2514],{"emptyLinePlaceholder":157},[228,49791,49792],{"class":230,"line":1334},[228,49793,34066],{"class":297},[228,49795,49796,49798,49800],{"class":230,"line":1425},[228,49797,32062],{"class":234},[228,49799,34073],{"class":2077},[228,49801,32068],{"class":238},[228,49803,49804],{"class":230,"line":1431},[228,49805,49806],{"class":297},"   # 导入自己的数据集，并进行数据处理\n",[228,49808,49809],{"class":230,"line":1443},[228,49810,48076],{"class":297},[228,49812,49813,49815,49817,49819,49821,49823,49826],{"class":230,"line":1726},[228,49814,48081],{"class":287},[228,49816,284],{"class":234},[228,49818,908],{"class":234},[228,49820,489],{"class":343},[228,49822,796],{"class":287},[228,49824,49825],{"class":48092},"\u002Fdata\u002Ftest",[228,49827,25249],{"class":343},[228,49829,49830],{"class":230,"line":1731},[228,49831,2514],{"emptyLinePlaceholder":157},[228,49833,49834],{"class":230,"line":1737},[228,49835,48104],{"class":297},[228,49837,49838],{"class":230,"line":1742},[228,49839,48109],{"class":297},[228,49841,49842],{"class":230,"line":1756},[228,49843,48114],{"class":297},[228,49845,49846],{"class":230,"line":1761},[228,49847,48119],{"class":297},[228,49849,49850,49852,49854,49856,49858,49860,49862,49864,49866,49868,49870,49872,49874,49876,49878],{"class":230,"line":1767},[228,49851,48124],{"class":238},[228,49853,284],{"class":234},[228,49855,48129],{"class":238},[228,49857,48132],{"class":287},[228,49859,616],{"class":238},[228,49861,48137],{"class":287},[228,49863,616],{"class":238},[228,49865,48142],{"class":287},[228,49867,48145],{"class":238},[228,49869,48148],{"class":287},[228,49871,616],{"class":238},[228,49873,48153],{"class":287},[228,49875,616],{"class":238},[228,49877,48158],{"class":287},[228,49879,4771],{"class":238},[228,49881,49882],{"class":230,"line":1788},[228,49883,48165],{"class":297},[228,49885,49886,49888,49890],{"class":230,"line":1793},[228,49887,48170],{"class":238},[228,49889,284],{"class":234},[228,49891,48175],{"class":238},[228,49893,49894],{"class":230,"line":1807},[228,49895,48180],{"class":297},[228,49897,49898,49900,49902,49904,49906],{"class":230,"line":1812},[228,49899,48185],{"class":238},[228,49901,31616],{"class":287},[228,49903,616],{"class":238},[228,49905,31616],{"class":287},[228,49907,42737],{"class":238},[228,49909,49910],{"class":230,"line":1841},[228,49911,48198],{"class":297},[228,49913,49914],{"class":230,"line":1846},[228,49915,48203],{"class":238},[228,49917,49918],{"class":230,"line":1863},[228,49919,48208],{"class":238},[228,49921,49922],{"class":230,"line":1868},[228,49923,48213],{"class":297},[228,49925,49926],{"class":230,"line":1873},[228,49927,48218],{"class":297},[228,49929,49930],{"class":230,"line":1878},[228,49931,2514],{"emptyLinePlaceholder":157},[228,49933,49934],{"class":230,"line":1892},[228,49935,48227],{"class":297},[228,49937,49938],{"class":230,"line":1897},[228,49939,48232],{"class":297},[228,49941,49942,49944,49946,49948,49950,49952,49954,49956],{"class":230,"line":2691},[228,49943,34080],{"class":238},[228,49945,284],{"class":234},[228,49947,48241],{"class":238},[228,49949,48244],{"class":287},[228,49951,616],{"class":238},[228,49953,48249],{"class":5331},[228,49955,284],{"class":234},[228,49957,48254],{"class":238},[228,49959,49960,49962,49964,49966,49968,49970],{"class":230,"line":2705},[228,49961,34137],{"class":238},[228,49963,284],{"class":234},[228,49965,31649],{"class":238},[228,49967,31652],{"class":5331},[228,49969,284],{"class":234},[228,49971,34148],{"class":238},[228,49973,49974],{"class":230,"line":2713},[228,49975,34153],{"class":297},[228,49977,49978,49980,49982,49984],{"class":230,"line":2718},[228,49979,34158],{"class":5331},[228,49981,284],{"class":234},[228,49983,456],{"class":287},[228,49985,31581],{"class":238},[228,49987,49988,49990,49992,49994],{"class":230,"line":2724},[228,49989,34169],{"class":5331},[228,49991,284],{"class":234},[228,49993,31591],{"class":287},[228,49995,31581],{"class":238},[228,49997,49998,50000,50002,50004],{"class":230,"line":2730},[228,49999,34180],{"class":5331},[228,50001,284],{"class":234},[228,50003,430],{"class":287},[228,50005,245],{"class":238},[228,50007,50008,50010],{"class":230,"line":2735},[228,50009,4204],{"class":234},[228,50011,34193],{"class":238},[228,50013,50014],{"class":230,"line":8063},[228,50015,2514],{"emptyLinePlaceholder":157},[228,50017,50018],{"class":230,"line":8087},[228,50019,34202],{"class":297},[228,50021,50022,50024,50026],{"class":230,"line":8092},[228,50023,32062],{"class":234},[228,50025,34209],{"class":2077},[228,50027,34212],{"class":238},[228,50029,50030],{"class":230,"line":8098},[228,50031,34217],{"class":297},[228,50033,50034,50036,50038,50040,50042,50044,50046],{"class":230,"line":8125},[228,50035,31352],{"class":238},[228,50037,284],{"class":234},[228,50039,31359],{"class":343},[228,50041,1818],{"class":234},[228,50043,31364],{"class":238},[228,50045,1815],{"class":234},[228,50047,34234],{"class":343},[228,50049,50050,50052,50054],{"class":230,"line":8130},[228,50051,31404],{"class":238},[228,50053,284],{"class":234},[228,50055,32404],{"class":238},[228,50057,50058],{"class":230,"line":8136},[228,50059,2514],{"emptyLinePlaceholder":157},[228,50061,50062],{"class":230,"line":8148},[228,50063,34251],{"class":297},[228,50065,50066,50068,50070],{"class":230,"line":8160},[228,50067,34256],{"class":238},[228,50069,284],{"class":234},[228,50071,32457],{"class":287},[228,50073,50074,50076,50078],{"class":230,"line":8172},[228,50075,34265],{"class":238},[228,50077,284],{"class":234},[228,50079,3199],{"class":287},[228,50081,50082],{"class":230,"line":9831},[228,50083,2514],{"emptyLinePlaceholder":157},[228,50085,50086],{"class":230,"line":9856},[228,50087,34278],{"class":297},[228,50089,50090],{"class":230,"line":9879},[228,50091,34283],{"class":297},[228,50093,50094],{"class":230,"line":9903},[228,50095,34288],{"class":297},[228,50097,50098,50100],{"class":230,"line":9908},[228,50099,34293],{"class":234},[228,50101,32999],{"class":238},[228,50103,50104],{"class":230,"line":9913},[228,50105,34300],{"class":297},[228,50107,50108,50110,50112,50114],{"class":230,"line":9918},[228,50109,3517],{"class":234},[228,50111,34307],{"class":238},[228,50113,26159],{"class":234},[228,50115,34312],{"class":238},[228,50117,50118,50120,50122],{"class":230,"line":9927},[228,50119,34317],{"class":238},[228,50121,284],{"class":234},[228,50123,34322],{"class":238},[228,50125,50126,50128,50130],{"class":230,"line":9932},[228,50127,34327],{"class":238},[228,50129,284],{"class":234},[228,50131,34332],{"class":238},[228,50133,50134],{"class":230,"line":9938},[228,50135,34337],{"class":297},[228,50137,50138],{"class":230,"line":9959},[228,50139,32990],{"class":238},[228,50141,50142],{"class":230,"line":9965},[228,50143,34346],{"class":297},[228,50145,50146,50148,50150],{"class":230,"line":9979},[228,50147,32775],{"class":238},[228,50149,284],{"class":234},[228,50151,34355],{"class":238},[228,50153,50154],{"class":230,"line":9985},[228,50155,34360],{"class":297},[228,50157,50158,50160,50162,50164,50166,50168,50170],{"class":230,"line":10012},[228,50159,32792],{"class":238},[228,50161,284],{"class":234},[228,50163,32797],{"class":238},[228,50165,32800],{"class":5331},[228,50167,284],{"class":234},[228,50169,456],{"class":287},[228,50171,245],{"class":238},[228,50173,50174],{"class":230,"line":10021},[228,50175,34381],{"class":297},[228,50177,50178],{"class":230,"line":10027},[228,50179,34386],{"class":297},[228,50181,50182],{"class":230,"line":10035},[228,50183,34391],{"class":297},[228,50185,50186,50188,50190,50192,50194],{"class":230,"line":10040},[228,50187,34396],{"class":238},[228,50189,9592],{"class":234},[228,50191,32902],{"class":238},[228,50193,3063],{"class":234},[228,50195,34405],{"class":238},[228,50197,50198],{"class":230,"line":16719},[228,50199,34410],{"class":297},[228,50201,50202,50204,50206,50208,50210],{"class":230,"line":16725},[228,50203,34415],{"class":238},[228,50205,9592],{"class":234},[228,50207,34420],{"class":238},[228,50209,430],{"class":287},[228,50211,245],{"class":238},[228,50213,50214],{"class":230,"line":16748},[228,50215,2514],{"emptyLinePlaceholder":157},[228,50217,50218],{"class":230,"line":16754},[228,50219,34433],{"class":297},[228,50221,50222,50224,50226,50228,50230],{"class":230,"line":16777},[228,50223,34438],{"class":238},[228,50225,284],{"class":234},[228,50227,34443],{"class":238},[228,50229,822],{"class":234},[228,50231,34448],{"class":238},[228,50233,50234],{"class":230,"line":16791},[228,50235,34453],{"class":297},[228,50237,50238,50240,50242,50244],{"class":230,"line":16811},[228,50239,32566],{"class":287},[228,50241,239],{"class":238},[228,50243,34462],{"class":343},[228,50245,34465],{"class":238},[228,50247,50248],{"class":230,"line":16817},[228,50249,2514],{"emptyLinePlaceholder":157},[228,50251,50252],{"class":230,"line":16828},[228,50253,34474],{"class":297},[228,50255,50256,50258,50260,50262,50264],{"class":230,"line":16851},[228,50257,1645],{"class":234},[228,50259,31335],{"class":287},[228,50261,3063],{"class":234},[228,50263,31340],{"class":343},[228,50265,3853],{"class":238},[228,50267,50268],{"class":230,"line":16873},[228,50269,34491],{"class":297},[228,50271,50272,50274,50276],{"class":230,"line":16878},[228,50273,31404],{"class":238},[228,50275,284],{"class":234},[228,50277,44666],{"class":238},[228,50279,50280],{"class":230,"line":16884},[228,50281,34504],{"class":297},[228,50283,50284],{"class":230,"line":16898},[228,50285,34509],{"class":297},[228,50287,50288,50290,50292],{"class":230,"line":16911},[228,50289,34514],{"class":238},[228,50291,34517],{"class":343},[228,50293,30612],{"class":238},[228,50295,50296],{"class":230,"line":16916},[228,50297,34524],{"class":297},[228,50299,50300,50302,50304],{"class":230,"line":16930},[228,50301,34137],{"class":238},[228,50303,284],{"class":234},[228,50305,34533],{"class":238},[228,50307,50308],{"class":230,"line":16935},[228,50309,34538],{"class":297},[228,50311,50312],{"class":230,"line":16941},[228,50313,34543],{"class":238},[228,50315,50316],{"class":230,"line":16946},[228,50317,2514],{"emptyLinePlaceholder":157},[228,50319,50320],{"class":230,"line":16960},[228,50321,34552],{"class":297},[228,50323,50324],{"class":230,"line":16965},[228,50325,34557],{"class":297},[228,50327,50328,50330,50332,50334,50336,50338,50340],{"class":230,"line":16970},[228,50329,31352],{"class":238},[228,50331,284],{"class":234},[228,50333,31359],{"class":343},[228,50335,1818],{"class":234},[228,50337,31364],{"class":238},[228,50339,1815],{"class":234},[228,50341,34234],{"class":343},[228,50343,50344,50346,50348],{"class":230,"line":16984},[228,50345,31404],{"class":238},[228,50347,284],{"class":234},[228,50349,32404],{"class":238},[228,50351,50352],{"class":230,"line":16996},[228,50353,34586],{"class":297},[228,50355,50356],{"class":230,"line":17001},[228,50357,34591],{"class":297},[228,50359,50360,50362,50364,50366,50369,50371,50374],{"class":230,"line":17014},[228,50361,34596],{"class":238},[228,50363,284],{"class":234},[228,50365,1128],{"class":238},[228,50367,50368],{"class":343},"'猫'",[228,50370,616],{"class":238},[228,50372,50373],{"class":343},"'狗'",[228,50375,33361],{"class":238},[228,50377,50378,50380],{"class":230,"line":17019},[228,50379,34293],{"class":234},[228,50381,32999],{"class":238},[228,50383,50384],{"class":230,"line":17024},[228,50385,34661],{"class":297},[228,50387,50388,50390,50392,50394],{"class":230,"line":17029},[228,50389,3517],{"class":234},[228,50391,34668],{"class":238},[228,50393,26159],{"class":234},[228,50395,34312],{"class":238},[228,50397,50398,50400,50402],{"class":230,"line":17042},[228,50399,32725],{"class":238},[228,50401,284],{"class":234},[228,50403,32730],{"class":238},[228,50405,50406,50408,50410],{"class":230,"line":17047},[228,50407,32740],{"class":238},[228,50409,284],{"class":234},[228,50411,32745],{"class":238},[228,50413,50414],{"class":230,"line":32748},[228,50415,2514],{"emptyLinePlaceholder":157},[228,50417,50418],{"class":230,"line":32754},[228,50419,34697],{"class":297},[228,50421,50422],{"class":230,"line":32760},[228,50423,32990],{"class":238},[228,50425,50426],{"class":230,"line":32766},[228,50427,34706],{"class":297},[228,50429,50430,50432,50434],{"class":230,"line":32772},[228,50431,32775],{"class":238},[228,50433,284],{"class":234},[228,50435,32780],{"class":238},[228,50437,50438],{"class":230,"line":32783},[228,50439,34719],{"class":297},[228,50441,50442,50444,50446,50448,50450,50452,50454],{"class":230,"line":32789},[228,50443,32792],{"class":238},[228,50445,284],{"class":234},[228,50447,32797],{"class":238},[228,50449,32800],{"class":5331},[228,50451,284],{"class":234},[228,50453,456],{"class":287},[228,50455,245],{"class":238},[228,50457,50458],{"class":230,"line":32809},[228,50459,34740],{"class":297},[228,50461,50462,50464,50466],{"class":230,"line":32815},[228,50463,34745],{"class":238},[228,50465,284],{"class":234},[228,50467,34750],{"class":238},[228,50469,50470,50472,50474],{"class":230,"line":32826},[228,50471,34755],{"class":238},[228,50473,284],{"class":234},[228,50475,34760],{"class":238},[228,50477,50478,50480,50482,50484,50486,50488,50490,50492],{"class":230,"line":32832},[228,50479,34765],{"class":287},[228,50481,239],{"class":238},[228,50483,34770],{"class":343},[228,50485,34773],{"class":238},[228,50487,34776],{"class":343},[228,50489,616],{"class":238},[228,50491,34781],{"class":343},[228,50493,34784],{"class":238},[5241,50495,50496],{},"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":141,"searchDepth":142,"depth":142,"links":50498},[50499,50500,50501,50502],{"id":30706,"depth":1293,"text":30707},{"id":37954,"depth":1293,"text":37955},{"id":41387,"depth":1293,"text":41388},{"id":45396,"depth":1293,"text":45397},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30698,"description":154},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50509,"title":50510,"body":50511,"description":154,"extension":155,"meta":50518,"navigation":157,"path":50519,"seo":50520,"stem":50521,"__hash__":50522},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50512,"toc":50516},[50513],[10,50514,50510],{"id":50515},"_3yolo模型学习",{"title":141,"searchDepth":142,"depth":142,"links":50517},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50510,"description":154},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50524,"title":50525,"body":50526,"description":50533,"extension":155,"meta":50534,"navigation":157,"path":50536,"seo":50537,"stem":50538,"__hash__":50539},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50527,"toc":50531},[50528],[19,50529,50530],{},"yolo模型还未补充",{"title":141,"searchDepth":142,"depth":142,"links":50532},[],"深度学习学习",{"category":50535},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50525,"description":50533},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50541,"title":50542,"body":50543,"description":154,"extension":155,"meta":50568,"navigation":157,"path":50569,"seo":50570,"stem":50571,"__hash__":50572},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50544,"toc":50566},[50545,50548,50551,50556,50563],[10,50546,50542],{"id":50547},"_1工具",[19,50549,50550],{},"提示错误插件：有问题会提前报错",[19,50552,50553],{},[1576,50554],{"alt":141,"src":50555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,50557,50558],{},[476,50559,50562],{"href":50560,"rel":50561},"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",[23980],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,50564,50565],{},"alt键加上下箭头可以实现语句的移动",{"title":141,"searchDepth":142,"depth":142,"links":50567},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50542,"description":154},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50574,"title":50575,"body":50576,"description":154,"extension":155,"meta":53440,"navigation":157,"path":53441,"seo":53442,"stem":53443,"__hash__":53444},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50577,"toc":53391},[50578,50581,50585,50589,50594,50597,50602,50606,50613,50618,50625,50630,50637,50642,50646,50651,50654,50658,50663,50667,50672,50675,50678,50681,50684,50687,50690,50693,50696,50701,50706,50711,50715,50718,50721,50725,50730,50733,50741,50746,50763,50771,50776,50781,50786,50791,50796,50799,50804,50809,50813,50822,50827,50832,50836,50841,50844,50848,50853,50861,50866,50871,50874,50879,50884,50889,50892,50895,50898,50903,50908,50911,50916,50919,50924,50927,50930,50933,50938,50941,50944,50959,50964,50969,50974,50977,50980,50983,50997,51000,51005,51010,51013,51016,51019,51022,51025,51028,51031,51035,51039,51044,51048,51051,51056,51061,51064,51069,51072,51076,51081,51084,51087,51090,51093,51096,51099,51102,51105,51108,51112,51117,51122,51127,51130,51133,51137,51142,51145,51149,51152,51155,51160,51163,51166,51170,51174,51177,51182,51187,51190,51219,51224,51229,51234,51239,51243,51248,51252,51257,51260,51264,51268,51273,51277,51282,51287,51291,51296,51299,51301,51304,51309,51313,51318,51322,51326,51331,51336,51341,51346,51350,51355,51360,51365,51368,51371,51376,51379,51384,51389,51394,51399,51403,52210,52214,52557,52562,52565,52568,52571,52574,52577,52580,52583,52586,52588,52591,52593,52596,52600,52605,52608,52611,52614,52618,52623,52628,52648,52651,52655,52660,52665,52682,52686,52715,52719,52741,52743,52782,52790,52796,52800,52803,52806,52811,52816,52819,52822,52825,52830,52835,52838,52841,52844,52847,52850,52853,52856,52859,52862,52865,52868,52870,52873,52876,52879,52882,52885,52888,52891,52894,52898,52903,52906,52911,52914,52917,52920,52923,52926,52929,52932,52934,52937,52940,52943,52946,52949,52952,52956,52959,52968,52971,52976,52979,52984,52987,52990,52993,52996,52999,53002,53005,53009,53013,53016,53019,53024,53029,53034,53038,53043,53048,53051,53054,53057,53060,53063,53068,53071,53076,53078,53083,53086,53090,53095,53098,53101,53106,53110,53113,53118,53121,53124,53153,53158,53161,53164,53167,53170,53173,53177,53180,53266,53270,53273,53278,53283,53290,53293,53296,53299,53302,53305,53310,53315,53318,53321,53324,53327,53330,53333,53336,53339,53342,53344,53347,53351,53356,53361,53366,53369,53374,53379,53382,53385,53388],[10,50579,50575],{"id":50580},"_2基础语法",[14,50582,50584],{"id":50583},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[200,50586,50588],{"id":50587},"_211-js组成","2.1.1 js组成",[183,50590,50591],{},[186,50592,50593],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,50595,50596],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[183,50598,50599],{"start":142},[186,50600,50601],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[200,50603,50605],{"id":50604},"_212-js书写位置","2.1.2 js书写位置",[183,50607,50608],{},[186,50609,50610],{},[388,50611,50612],{},"内部 JavaScript",[19,50614,50615],{},[1576,50616],{"alt":141,"src":50617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[183,50619,50620],{"start":142},[186,50621,50622],{},[388,50623,50624],{},"外部 JavaScript",[19,50626,50627],{},[1576,50628],{"alt":141,"src":50629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[183,50631,50632],{"start":1293},[186,50633,50634],{},[388,50635,50636],{},"内联 JavaScript",[19,50638,50639],{},[1576,50640],{"alt":141,"src":50641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[200,50643,50645],{"id":50644},"_213-javascript注释","2.1.3 JavaScript注释",[19,50647,50648],{},[1576,50649],{"alt":141,"src":50650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,50652,50653],{},"alt+shift+a一定要记住！",[200,50655,50657],{"id":50656},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,50659,50660],{},[1576,50661],{"alt":141,"src":50662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[200,50664,50666],{"id":50665},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[183,50668,50669],{},[186,50670,50671],{},"输出语法：",[19,50673,50674],{},"①document.write('要出的内容')",[19,50676,50677],{},"向body内输出内容；",[19,50679,50680],{},"如果输出的内容写的是标签，也会被解析cheng",[19,50682,50683],{},"②alert('要出的内容')",[19,50685,50686],{},"页面弹出警告对话框",[19,50688,50689],{},"③console.log('控制台打印')",[19,50691,50692],{},"控制台输出语法，程序员调试使用",[19,50694,50695],{},"输入log就行，自动生成：",[19,50697,50698],{},[1576,50699],{"alt":141,"src":50700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[183,50702,50703],{"start":142},[186,50704,50705],{},"输入语法：",[19,50707,50708],{},[1576,50709],{"alt":141,"src":50710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[200,50712,50714],{"id":50713},"_2116-字面量","21.1.6 字面量",[19,50716,50717],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,50719,50720],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,50722,50724],{"id":50723},"_22-变量","2.2 变量",[183,50726,50727],{},[186,50728,50729],{},"变量声明",[19,50731,50732],{},"let 变量名",[1245,50734,50735,50738],{},[186,50736,50737],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[186,50739,50740],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[183,50742,50743],{"start":142},[186,50744,50745],{},"变量赋值",[220,50747,50751],{"className":50748,"code":50749,"language":50750,"meta":141,"style":141},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[30,50752,50753,50758],{"__ignoreMap":141},[228,50754,50755],{"class":230,"line":231},[228,50756,50757],{"class":238},"let age\n",[228,50759,50760],{"class":230,"line":142},[228,50761,50762],{"class":238},"age=18\n",[183,50764,50765,50768],{"start":1293},[186,50766,50767],{},"连这些（变量的初始化）：let age=18",[186,50769,50770],{},"更新变量",[19,50772,50773],{},[1576,50774],{"alt":141,"src":50775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[183,50777,50778],{"start":1314},[186,50779,50780],{},"声明多个变量",[19,50782,50783],{},[1576,50784],{"alt":141,"src":50785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[183,50787,50788],{"start":1328},[186,50789,50790],{},"变量命名规则与规范",[19,50792,50793],{},[1576,50794],{"alt":141,"src":50795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,50797,50798],{},"遵守小驼峰！",[183,50800,50801],{"start":1334},[186,50802,50803],{},"变量拓展-let和var的区别",[19,50805,50806],{},[1576,50807],{"alt":141,"src":50808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,50810,50812],{"id":50811},"_23-数组","2.3 数组",[220,50814,50816],{"className":50748,"code":50815,"language":50750,"meta":141,"style":141},"let arr = []\n",[30,50817,50818],{"__ignoreMap":141},[228,50819,50820],{"class":230,"line":231},[228,50821,50815],{"class":238},[19,50823,50824],{},[1576,50825],{"alt":141,"src":50826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,50828,50829],{},[1576,50830],{"alt":141,"src":50831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,50833,50835],{"id":50834},"_24-常量","2.4 常量",[19,50837,50838],{},[1576,50839],{"alt":141,"src":50840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,50842,50843],{},"const — 类似于 let ，但是变量的值无法被修改",[14,50845,50847],{"id":50846},"_25-数据类型","2.5 数据类型",[19,50849,50850],{},[1576,50851],{"alt":141,"src":50852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[183,50854,50855,50858],{},[186,50856,50857],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[186,50859,50860],{},"算数运算符：",[19,50862,50863],{},[1576,50864],{"alt":141,"src":50865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[183,50867,50868],{"start":1293},[186,50869,50870],{},"数字类型（Number）",[19,50872,50873],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,50875,50876],{},[1576,50877],{"alt":141,"src":50878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[183,50880,50881],{"start":1308},[186,50882,50883],{},"字符串类型（string）",[19,50885,50886],{},[1576,50887],{"alt":141,"src":50888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,50890,50891],{},"反引号也是可以使用的",[19,50893,50894],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,50896,50897],{},"例如：document.write(\"我今年\"+age+\"岁\")",[183,50899,50900],{"start":1314},[186,50901,50902],{},"模板字符串",[19,50904,50905],{},[1576,50906],{"alt":141,"src":50907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,50909,50910],{},"类似于python的字符串格式化",[183,50912,50913],{"start":1328},[186,50914,50915],{},"布尔类型",[19,50917,50918],{},"true 和 false",[183,50920,50921],{"start":1334},[186,50922,50923],{},"未定义类型（underfined）",[19,50925,50926],{},"表示没有赋值",[19,50928,50929],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,50931,50932],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[183,50934,50935],{"start":1425},[186,50936,50937],{},"null（空类型）",[19,50939,50940],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,50942,50943],{},"赋值了，但是内容为空",[220,50945,50947],{"className":50748,"code":50946,"language":50750,"meta":141,"style":141},"typeof null\n输出的是'object'，是一个对象数据类型\n",[30,50948,50949,50954],{"__ignoreMap":141},[228,50950,50951],{"class":230,"line":231},[228,50952,50953],{"class":238},"typeof null\n",[228,50955,50956],{"class":230,"line":142},[228,50957,50958],{"class":238},"输出的是'object'，是一个对象数据类型\n",[183,50960,50961],{"start":1431},[186,50962,50963],{},"控制台检测数据类型",[19,50965,50966],{},[1576,50967],{"alt":141,"src":50968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[183,50970,50971],{"start":1443},[186,50972,50973],{},"类型转换",[19,50975,50976],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,50978,50979],{},"转换方式：隐式转换和显示转换",[19,50981,50982],{},"①隐式转换",[1245,50984,50985,50988,50991,50994],{},[186,50986,50987],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[186,50989,50990],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[186,50992,50993],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[186,50995,50996],{},"任何数据和字符串相加结果都是字符串",[19,50998,50999],{},"②显示转换",[19,51001,51002],{},[1576,51003],{"alt":141,"src":51004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,51006,51007],{},[1576,51008],{"alt":141,"src":51009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,51011,51012],{},"在输入的时候要用好隐式转换，简单写起来",[19,51014,51015],{},"let num = +prompt(’请输入数字：‘)",[19,51017,51018],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,51020,51021],{},"console.log(parseInt('12.333px'))",[19,51023,51024],{},"输出为：12",[19,51026,51027],{},"console.log(parseInt('a'a'a12.333px'))",[19,51029,51030],{},"输出：NaN",[14,51032,51034],{"id":51033},"_26-运算符","2.6 运算符",[200,51036,51038],{"id":51037},"_261-赋值运算符","2.6.1 赋值运算符",[19,51040,51041],{},[1576,51042],{"alt":141,"src":51043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[200,51045,51047],{"id":51046},"_262-一元运算符","2.6.2 一元运算符",[19,51049,51050],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,51052,51053],{},[1576,51054],{"alt":141,"src":51055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,51057,51058],{},[1576,51059],{"alt":141,"src":51060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,51062,51063],{},"两者的区别：",[19,51065,51066],{},[1576,51067],{"alt":141,"src":51068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,51070,51071],{},"前置先自加；后置后加，代码执行完之后再加",[200,51073,51075],{"id":51074},"_263-比较运算符","2.6.3 比较运算符",[19,51077,51078],{},[1576,51079],{"alt":141,"src":51080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,51082,51083],{},"比较运算符也有隐式转换",[19,51085,51086],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,51088,51089],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,51091,51092],{},"要使用三等，开发的时候",[19,51094,51095],{},"NaN不等于任何人，包括它自己",[19,51097,51098],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,51100,51101],{},"7\u002F10=0.7",[19,51103,51104],{},"最后：0.5+0.2=0.7",[19,51106,51107],{},"字符串比较，比较的是字符对应的ASCII码",[200,51109,51111],{"id":51110},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,51113,51114],{},[1576,51115],{"alt":141,"src":51116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,51118,51119],{},[1576,51120],{"alt":141,"src":51121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,51123,51124],{},[1576,51125],{"alt":141,"src":51126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,51128,51129],{},"上述题目选D",[19,51131,51132],{},"与真2假1；或真1假2",[200,51134,51136],{"id":51135},"_265-运算符优先级","2.6.5 运算符优先级",[19,51138,51139],{},[1576,51140],{"alt":141,"src":51141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,51143,51144],{},"先算逻辑与，后算逻辑或",[14,51146,51148],{"id":51147},"_27-语句","2.7 语句",[19,51150,51151],{},"表达式：是可以被求值的代码，会有结果给我们",[19,51153,51154],{},"语句：语句是可以被执行的代码，例如prompt()",[19,51156,51157],{},[1576,51158],{"alt":141,"src":51159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,51161,51162],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,51164,51165],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[200,51167,51169],{"id":51168},"_271-分支语句","2.7.1 分支语句",[22113,51171,51173],{"id":51172},"_2711-if分支语句","2.7.1.1 if分支语句",[19,51175,51176],{},"if语句单行简单的话，可以不写{}，写在一行就行",[183,51178,51179],{},[186,51180,51181],{},"单分支语句",[19,51183,51184],{},[1576,51185],{"alt":141,"src":51186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,51188,51189],{},"除了0，所有数字都为真",[220,51191,51193],{"className":50748,"code":51192,"language":50750,"meta":141,"style":141},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[30,51194,51195,51200,51205,51210,51214],{"__ignoreMap":141},[228,51196,51197],{"class":230,"line":231},[228,51198,51199],{"class":238},"if（0) {\n",[228,51201,51202],{"class":230,"line":142},[228,51203,51204],{"class":238},"    let a=1\n",[228,51206,51207],{"class":230,"line":1293},[228,51208,51209],{"class":238},"    alert(typeof a)\n",[228,51211,51212],{"class":230,"line":1308},[228,51213,1679],{"class":238},[228,51215,51216],{"class":230,"line":1314},[228,51217,51218],{"class":238},"不输出，括号为假\n",[183,51220,51221],{"start":142},[186,51222,51223],{},"双分支语句",[19,51225,51226],{},[1576,51227],{"alt":141,"src":51228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[183,51230,51231],{"start":1293},[186,51232,51233],{},"多分支语句",[19,51235,51236],{},[1576,51237],{"alt":141,"src":51238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22113,51240,51242],{"id":51241},"_2712-三元运算符","2.7.1.2 三元运算符",[19,51244,51245],{},[1576,51246],{"alt":141,"src":51247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22113,51249,51251],{"id":51250},"_2713-switch语句","2.7.1.3 switch语句",[19,51253,51254],{},[1576,51255],{"alt":141,"src":51256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,51258,51259],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[200,51261,51263],{"id":51262},"_272-循环语句","2.7.2 循环语句",[22113,51265,51267],{"id":51266},"_2721-断点演示","2.7.2.1 断点演示",[19,51269,51270],{},[1576,51271],{"alt":141,"src":51272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22113,51274,51276],{"id":51275},"_2722-while循环","2.7.2.2 while循环",[19,51278,51279],{},[1576,51280],{"alt":141,"src":51281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,51283,51284],{},[1576,51285],{"alt":141,"src":51286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22113,51288,51290],{"id":51289},"_2723-for循环","2.7.2.3 for循环",[19,51292,51293],{},[1576,51294],{"alt":141,"src":51295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,51297,51298],{},"for(;;) {",[19,51300,1184],{},[19,51302,51303],{},"表示无限循环",[19,51305,51306],{},[1576,51307],{"alt":141,"src":51308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22113,51310,51312],{"id":51311},"_2724-循环的退出","2.7.2.4 循环的退出",[19,51314,51315],{},[1576,51316],{"alt":141,"src":51317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,51319,51321],{"id":51320},"_28-数组","2.8 数组",[200,51323,51325],{"id":51324},"_281-基础认识","2.8.1 基础认识",[19,51327,51328],{},[1576,51329],{"alt":141,"src":51330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,51332,51333],{},[1576,51334],{"alt":141,"src":51335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,51337,51338],{},[1576,51339],{"alt":141,"src":51340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,51342,51343],{},[1576,51344],{"alt":141,"src":51345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[200,51347,51349],{"id":51348},"_282-操作数组","2.8.2 操作数组",[19,51351,51352],{},[1576,51353],{"alt":141,"src":51354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[183,51356,51357],{},[186,51358,51359],{},"添加元素",[19,51361,51362],{},[1576,51363],{"alt":141,"src":51364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,51366,51367],{},"console.log(arr.push('green'))",[19,51369,51370],{},"输出结果：为新数组的长度",[19,51372,51373],{},[1576,51374],{"alt":141,"src":51375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,51377,51378],{},"push用的非常多，一定要记住",[183,51380,51381],{},[186,51382,51383],{},"删除元素",[19,51385,51386],{},[1576,51387],{"alt":141,"src":51388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,51390,51391],{},[1576,51392],{"alt":141,"src":51393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,51395,51396],{},[1576,51397],{"alt":141,"src":51398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[200,51400,51402],{"id":51401},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[220,51404,51406],{"className":50748,"code":51405,"language":50750,"meta":141,"style":141},"\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",[30,51407,51408,51423,51439,51443,51452,51470,51494,51516,51530,51538,51545,51557,51568,51572,51576,51583,51595,51610,51623,51642,51659,51674,51686,51698,51710,51714,51718,51729,51739,51751,51763,51775,51786,51790,51794,51806,51810,51824,51828,51832,51843,51857,51869,51883,51887,51896,51905,51909,51918,51922,51931,51936,51941,51954,51982,51987,51992,52017,52022,52026,52031,52036,52051,52055,52060,52090,52102,52118,52134,52148,52153,52160,52164,52169,52182,52190,52198,52202],{"__ignoreMap":141},[228,51409,51410,51413,51417,51420],{"class":230,"line":231},[228,51411,51412],{"class":238},"\u003C!",[228,51414,51416],{"class":51415},"s9eBZ","DOCTYPE",[228,51418,51419],{"class":2077}," html",[228,51421,51422],{"class":238},">\n",[228,51424,51425,51427,51429,51432,51434,51437],{"class":230,"line":142},[228,51426,1148],{"class":238},[228,51428,50750],{"class":51415},[228,51430,51431],{"class":2077}," lang",[228,51433,284],{"class":238},[228,51435,51436],{"class":343},"\"en\"",[228,51438,51422],{"class":238},[228,51440,51441],{"class":230,"line":1293},[228,51442,2514],{"emptyLinePlaceholder":157},[228,51444,51445,51447,51450],{"class":230,"line":1308},[228,51446,1148],{"class":238},[228,51448,51449],{"class":51415},"head",[228,51451,51422],{"class":238},[228,51453,51454,51457,51460,51463,51465,51468],{"class":230,"line":1314},[228,51455,51456],{"class":238},"    \u003C",[228,51458,51459],{"class":51415},"meta",[228,51461,51462],{"class":2077}," charset",[228,51464,284],{"class":238},[228,51466,51467],{"class":343},"\"UTF-8\"",[228,51469,51422],{"class":238},[228,51471,51472,51474,51476,51479,51481,51484,51487,51489,51492],{"class":230,"line":1328},[228,51473,51456],{"class":238},[228,51475,51459],{"class":51415},[228,51477,51478],{"class":2077}," http-equiv",[228,51480,284],{"class":238},[228,51482,51483],{"class":343},"\"X-UA-Compatible\"",[228,51485,51486],{"class":2077}," content",[228,51488,284],{"class":238},[228,51490,51491],{"class":343},"\"IE=edge\"",[228,51493,51422],{"class":238},[228,51495,51496,51498,51500,51502,51504,51507,51509,51511,51514],{"class":230,"line":1334},[228,51497,51456],{"class":238},[228,51499,51459],{"class":51415},[228,51501,15035],{"class":2077},[228,51503,284],{"class":238},[228,51505,51506],{"class":343},"\"viewport\"",[228,51508,51486],{"class":2077},[228,51510,284],{"class":238},[228,51512,51513],{"class":343},"\"width=device-width, initial-scale=1.0\"",[228,51515,51422],{"class":238},[228,51517,51518,51520,51523,51526,51528],{"class":230,"line":1425},[228,51519,51456],{"class":238},[228,51521,51522],{"class":51415},"title",[228,51524,51525],{"class":238},">Document\u003C\u002F",[228,51527,51522],{"class":51415},[228,51529,51422],{"class":238},[228,51531,51532,51534,51536],{"class":230,"line":1431},[228,51533,51456],{"class":238},[228,51535,5241],{"class":51415},[228,51537,51422],{"class":238},[228,51539,51540,51543],{"class":230,"line":1443},[228,51541,51542],{"class":51415},"        *",[228,51544,15687],{"class":238},[228,51546,51547,51550,51553,51555],{"class":230,"line":1726},[228,51548,51549],{"class":287},"            margin",[228,51551,51552],{"class":238},": ",[228,51554,430],{"class":287},[228,51556,1404],{"class":238},[228,51558,51559,51562,51564,51566],{"class":230,"line":1731},[228,51560,51561],{"class":287},"            padding",[228,51563,51552],{"class":238},[228,51565,430],{"class":287},[228,51567,1404],{"class":238},[228,51569,51570],{"class":230,"line":1737},[228,51571,2643],{"class":238},[228,51573,51574],{"class":230,"line":1742},[228,51575,2514],{"emptyLinePlaceholder":157},[228,51577,51578,51581],{"class":230,"line":1756},[228,51579,51580],{"class":2077},"        .box",[228,51582,15687],{"class":238},[228,51584,51585,51588,51590,51593],{"class":230,"line":1761},[228,51586,51587],{"class":287},"            display",[228,51589,51552],{"class":238},[228,51591,51592],{"class":287},"flex",[228,51594,1404],{"class":238},[228,51596,51597,51600,51602,51605,51608],{"class":230,"line":1767},[228,51598,51599],{"class":287},"            width",[228,51601,51552],{"class":238},[228,51603,51604],{"class":287},"700",[228,51606,51607],{"class":234},"px",[228,51609,1404],{"class":238},[228,51611,51612,51615,51617,51619,51621],{"class":230,"line":1788},[228,51613,51614],{"class":287},"            height",[228,51616,51552],{"class":238},[228,51618,4087],{"class":287},[228,51620,51607],{"class":234},[228,51622,1404],{"class":238},[228,51624,51625,51628,51630,51632,51634,51637,51640],{"class":230,"line":1793},[228,51626,51627],{"class":287},"            border-left",[228,51629,51552],{"class":238},[228,51631,456],{"class":287},[228,51633,51607],{"class":234},[228,51635,51636],{"class":287}," solid",[228,51638,51639],{"class":287}," pink",[228,51641,1404],{"class":238},[228,51643,51644,51647,51649,51651,51653,51655,51657],{"class":230,"line":1807},[228,51645,51646],{"class":287},"            border-bottom",[228,51648,51552],{"class":238},[228,51650,456],{"class":287},[228,51652,51607],{"class":234},[228,51654,51636],{"class":287},[228,51656,51639],{"class":287},[228,51658,1404],{"class":238},[228,51660,51661,51663,51665,51667,51669,51672],{"class":230,"line":1812},[228,51662,51549],{"class":287},[228,51664,51552],{"class":238},[228,51666,894],{"class":287},[228,51668,51607],{"class":234},[228,51670,51671],{"class":287}," auto",[228,51673,1404],{"class":238},[228,51675,51676,51679,51681,51684],{"class":230,"line":1841},[228,51677,51678],{"class":287},"            justify-content",[228,51680,51552],{"class":238},[228,51682,51683],{"class":287},"space-around",[228,51685,1404],{"class":238},[228,51687,51688,51691,51693,51696],{"class":230,"line":1846},[228,51689,51690],{"class":287},"            align-items",[228,51692,51552],{"class":238},[228,51694,51695],{"class":287},"flex-end",[228,51697,1404],{"class":238},[228,51699,51700,51703,51705,51708],{"class":230,"line":1863},[228,51701,51702],{"class":287},"            text-align",[228,51704,51552],{"class":238},[228,51706,51707],{"class":287},"center",[228,51709,1404],{"class":238},[228,51711,51712],{"class":230,"line":1868},[228,51713,2643],{"class":238},[228,51715,51716],{"class":230,"line":1873},[228,51717,2514],{"emptyLinePlaceholder":157},[228,51719,51720,51722,51724,51727],{"class":230,"line":1878},[228,51721,51580],{"class":2077},[228,51723,1198],{"class":234},[228,51725,51726],{"class":51415},"div",[228,51728,15687],{"class":238},[228,51730,51731,51733,51735,51737],{"class":230,"line":1892},[228,51732,51587],{"class":287},[228,51734,51552],{"class":238},[228,51736,51592],{"class":287},[228,51738,1404],{"class":238},[228,51740,51741,51743,51745,51747,51749],{"class":230,"line":1897},[228,51742,51599],{"class":287},[228,51744,51552],{"class":238},[228,51746,894],{"class":287},[228,51748,51607],{"class":234},[228,51750,1404],{"class":238},[228,51752,51753,51756,51758,51761],{"class":230,"line":2691},[228,51754,51755],{"class":287},"            background-color",[228,51757,51552],{"class":238},[228,51759,51760],{"class":287},"pink",[228,51762,1404],{"class":238},[228,51764,51765,51768,51770,51773],{"class":230,"line":2705},[228,51766,51767],{"class":287},"            flex-direction",[228,51769,51552],{"class":238},[228,51771,51772],{"class":287},"column",[228,51774,1404],{"class":238},[228,51776,51777,51779,51781,51784],{"class":230,"line":2713},[228,51778,51678],{"class":287},[228,51780,51552],{"class":238},[228,51782,51783],{"class":287},"space-between",[228,51785,1404],{"class":238},[228,51787,51788],{"class":230,"line":2718},[228,51789,2643],{"class":238},[228,51791,51792],{"class":230,"line":2724},[228,51793,2514],{"emptyLinePlaceholder":157},[228,51795,51796,51798,51801,51804],{"class":230,"line":2730},[228,51797,51580],{"class":2077},[228,51799,51800],{"class":51415}," div",[228,51802,51803],{"class":51415}," span",[228,51805,15687],{"class":238},[228,51807,51808],{"class":230,"line":2735},[228,51809,2514],{"emptyLinePlaceholder":157},[228,51811,51812,51815,51817,51820,51822],{"class":230,"line":8063},[228,51813,51814],{"class":287},"            margin-top",[228,51816,51552],{"class":238},[228,51818,51819],{"class":287},"-20",[228,51821,51607],{"class":234},[228,51823,1404],{"class":238},[228,51825,51826],{"class":230,"line":8087},[228,51827,2643],{"class":238},[228,51829,51830],{"class":230,"line":8092},[228,51831,2514],{"emptyLinePlaceholder":157},[228,51833,51834,51836,51838,51841],{"class":230,"line":8098},[228,51835,51580],{"class":2077},[228,51837,51800],{"class":51415},[228,51839,51840],{"class":51415}," h4",[228,51842,15687],{"class":238},[228,51844,51845,51848,51850,51853,51855],{"class":230,"line":8125},[228,51846,51847],{"class":287},"            margin-bottom",[228,51849,51552],{"class":238},[228,51851,51852],{"class":287},"-35",[228,51854,51607],{"class":234},[228,51856,1404],{"class":238},[228,51858,51859,51861,51863,51865,51867],{"class":230,"line":8130},[228,51860,51599],{"class":287},[228,51862,51552],{"class":238},[228,51864,594],{"class":287},[228,51866,51607],{"class":234},[228,51868,1404],{"class":238},[228,51870,51871,51874,51876,51879,51881],{"class":230,"line":8136},[228,51872,51873],{"class":287},"            margin-left",[228,51875,51552],{"class":238},[228,51877,51878],{"class":287},"-10",[228,51880,51607],{"class":234},[228,51882,1404],{"class":238},[228,51884,51885],{"class":230,"line":8148},[228,51886,2643],{"class":238},[228,51888,51889,51892,51894],{"class":230,"line":8160},[228,51890,51891],{"class":238},"    \u003C\u002F",[228,51893,5241],{"class":51415},[228,51895,51422],{"class":238},[228,51897,51898,51901,51903],{"class":230,"line":8172},[228,51899,51900],{"class":238},"\u003C\u002F",[228,51902,51449],{"class":51415},[228,51904,51422],{"class":238},[228,51906,51907],{"class":230,"line":9831},[228,51908,2514],{"emptyLinePlaceholder":157},[228,51910,51911,51913,51916],{"class":230,"line":9856},[228,51912,1148],{"class":238},[228,51914,51915],{"class":51415},"body",[228,51917,51422],{"class":238},[228,51919,51920],{"class":230,"line":9879},[228,51921,2514],{"emptyLinePlaceholder":157},[228,51923,51924,51926,51929],{"class":230,"line":9903},[228,51925,51456],{"class":238},[228,51927,51928],{"class":51415},"script",[228,51930,51422],{"class":238},[228,51932,51933],{"class":230,"line":9908},[228,51934,51935],{"class":297},"        \u002F\u002F 1. 四次弹框效果\n",[228,51937,51938],{"class":230,"line":9913},[228,51939,51940],{"class":297},"        \u002F\u002F 声明一个新的数组\n",[228,51942,51943,51946,51949,51951],{"class":230,"line":9918},[228,51944,51945],{"class":234},"        let",[228,51947,51948],{"class":238}," arr ",[228,51950,284],{"class":234},[228,51952,51953],{"class":238}," []\n",[228,51955,51956,51958,51960,51963,51965,51967,51969,51971,51973,51976,51978,51980],{"class":230,"line":9927},[228,51957,3517],{"class":234},[228,51959,1772],{"class":238},[228,51961,51962],{"class":234},"let",[228,51964,9553],{"class":238},[228,51966,284],{"class":234},[228,51968,25234],{"class":287},[228,51970,9560],{"class":238},[228,51972,1702],{"class":234},[228,51974,51975],{"class":287}," 4",[228,51977,3328],{"class":238},[228,51979,2406],{"class":234},[228,51981,12557],{"class":238},[228,51983,51984],{"class":230,"line":9932},[228,51985,51986],{"class":297},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[228,51988,51989],{"class":230,"line":9938},[228,51990,51991],{"class":297},"            \u002F\u002F arr.push(num)\n",[228,51993,51994,51997,52000,52002,52005,52007,52010,52012,52015],{"class":230,"line":9959},[228,51995,51996],{"class":238},"            arr.",[228,51998,51999],{"class":2077},"push",[228,52001,239],{"class":238},[228,52003,52004],{"class":2077},"prompt",[228,52006,239],{"class":238},[228,52008,52009],{"class":343},"`请输入第${",[228,52011,679],{"class":238},[228,52013,52014],{"class":343},"}季度的数据:`",[228,52016,30612],{"class":238},[228,52018,52019],{"class":230,"line":9965},[228,52020,52021],{"class":297},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[228,52023,52024],{"class":230,"line":9979},[228,52025,2643],{"class":238},[228,52027,52028],{"class":230,"line":9985},[228,52029,52030],{"class":297},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[228,52032,52033],{"class":230,"line":10012},[228,52034,52035],{"class":297},"        \u002F\u002F 盒子开头\n",[228,52037,52038,52041,52044,52046,52049],{"class":230,"line":10021},[228,52039,52040],{"class":238},"        document.",[228,52042,52043],{"class":2077},"write",[228,52045,239],{"class":238},[228,52047,52048],{"class":343},"` \u003Cdiv class=\"box\">`",[228,52050,245],{"class":238},[228,52052,52053],{"class":230,"line":10027},[228,52054,2514],{"emptyLinePlaceholder":157},[228,52056,52057],{"class":230,"line":10035},[228,52058,52059],{"class":297},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[228,52061,52062,52064,52066,52068,52070,52072,52074,52076,52078,52081,52084,52086,52088],{"class":230,"line":10040},[228,52063,3517],{"class":234},[228,52065,1772],{"class":238},[228,52067,51962],{"class":234},[228,52069,9553],{"class":238},[228,52071,284],{"class":234},[228,52073,4207],{"class":287},[228,52075,9560],{"class":238},[228,52077,1148],{"class":234},[228,52079,52080],{"class":238}," arr.",[228,52082,52083],{"class":287},"length",[228,52085,3328],{"class":238},[228,52087,2406],{"class":234},[228,52089,12557],{"class":238},[228,52091,52092,52095,52097,52099],{"class":230,"line":16719},[228,52093,52094],{"class":238},"            document.",[228,52096,52043],{"class":2077},[228,52098,239],{"class":238},[228,52100,52101],{"class":343},"`\n",[228,52103,52104,52107,52109,52111,52113,52115],{"class":230,"line":16725},[228,52105,52106],{"class":343},"              \u003Cdiv style=\"height: ${",[228,52108,3994],{"class":238},[228,52110,1128],{"class":343},[228,52112,679],{"class":238},[228,52114,1178],{"class":343},[228,52116,52117],{"class":343},"}px;\">\n",[228,52119,52120,52123,52125,52127,52129,52131],{"class":230,"line":16748},[228,52121,52122],{"class":343},"                \u003Cspan>${",[228,52124,3994],{"class":238},[228,52126,1128],{"class":343},[228,52128,679],{"class":238},[228,52130,1178],{"class":343},[228,52132,52133],{"class":343},"}\u003C\u002Fspan>\n",[228,52135,52136,52139,52141,52143,52145],{"class":230,"line":16754},[228,52137,52138],{"class":343},"                \u003Ch4>第${",[228,52140,679],{"class":238},[228,52142,45681],{"class":234},[228,52144,25234],{"class":287},[228,52146,52147],{"class":343},"}季度\u003C\u002Fh4>\n",[228,52149,52150],{"class":230,"line":16777},[228,52151,52152],{"class":343},"              \u003C\u002Fdiv>          \n",[228,52154,52155,52158],{"class":230,"line":16791},[228,52156,52157],{"class":343},"            `",[228,52159,245],{"class":238},[228,52161,52162],{"class":230,"line":16811},[228,52163,2643],{"class":238},[228,52165,52166],{"class":230,"line":16817},[228,52167,52168],{"class":297},"        \u002F\u002F 盒子结尾\n",[228,52170,52171,52173,52175,52177,52180],{"class":230,"line":16828},[228,52172,52040],{"class":238},[228,52174,52043],{"class":2077},[228,52176,239],{"class":238},[228,52178,52179],{"class":343},"` \u003C\u002Fdiv>`",[228,52181,245],{"class":238},[228,52183,52184,52186,52188],{"class":230,"line":16851},[228,52185,51891],{"class":238},[228,52187,51928],{"class":51415},[228,52189,51422],{"class":238},[228,52191,52192,52194,52196],{"class":230,"line":16873},[228,52193,51900],{"class":238},[228,52195,51915],{"class":51415},[228,52197,51422],{"class":238},[228,52199,52200],{"class":230,"line":16878},[228,52201,2514],{"emptyLinePlaceholder":157},[228,52203,52204,52206,52208],{"class":230,"line":16884},[228,52205,51900],{"class":238},[228,52207,50750],{"class":51415},[228,52209,51422],{"class":238},[200,52211,52213],{"id":52212},"_284-冒泡排序","2.8.4 冒泡排序",[220,52215,52217],{"className":50748,"code":52216,"language":50750,"meta":141,"style":141},"\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",[30,52218,52219,52229,52243,52247,52255,52270,52290,52302,52310,52314,52322,52330,52362,52395,52432,52437,52456,52461,52474,52489,52505,52509,52514,52518,52528,52537,52545,52549],{"__ignoreMap":141},[228,52220,52221,52223,52225,52227],{"class":230,"line":231},[228,52222,51412],{"class":238},[228,52224,51416],{"class":51415},[228,52226,51419],{"class":2077},[228,52228,51422],{"class":238},[228,52230,52231,52233,52235,52237,52239,52241],{"class":230,"line":142},[228,52232,1148],{"class":238},[228,52234,50750],{"class":51415},[228,52236,51431],{"class":2077},[228,52238,284],{"class":238},[228,52240,51436],{"class":343},[228,52242,51422],{"class":238},[228,52244,52245],{"class":230,"line":1293},[228,52246,2514],{"emptyLinePlaceholder":157},[228,52248,52249,52251,52253],{"class":230,"line":1308},[228,52250,1148],{"class":238},[228,52252,51449],{"class":51415},[228,52254,51422],{"class":238},[228,52256,52257,52260,52262,52264,52266,52268],{"class":230,"line":1314},[228,52258,52259],{"class":238},"  \u003C",[228,52261,51459],{"class":51415},[228,52263,51462],{"class":2077},[228,52265,284],{"class":238},[228,52267,51467],{"class":343},[228,52269,51422],{"class":238},[228,52271,52272,52274,52276,52278,52280,52282,52284,52286,52288],{"class":230,"line":1328},[228,52273,52259],{"class":238},[228,52275,51459],{"class":51415},[228,52277,15035],{"class":2077},[228,52279,284],{"class":238},[228,52281,51506],{"class":343},[228,52283,51486],{"class":2077},[228,52285,284],{"class":238},[228,52287,51513],{"class":343},[228,52289,51422],{"class":238},[228,52291,52292,52294,52296,52298,52300],{"class":230,"line":1334},[228,52293,52259],{"class":238},[228,52295,51522],{"class":51415},[228,52297,51525],{"class":238},[228,52299,51522],{"class":51415},[228,52301,51422],{"class":238},[228,52303,52304,52306,52308],{"class":230,"line":1425},[228,52305,51900],{"class":238},[228,52307,51449],{"class":51415},[228,52309,51422],{"class":238},[228,52311,52312],{"class":230,"line":1431},[228,52313,2514],{"emptyLinePlaceholder":157},[228,52315,52316,52318,52320],{"class":230,"line":1443},[228,52317,1148],{"class":238},[228,52319,51915],{"class":51415},[228,52321,51422],{"class":238},[228,52323,52324,52326,52328],{"class":230,"line":1726},[228,52325,52259],{"class":238},[228,52327,51928],{"class":51415},[228,52329,51422],{"class":238},[228,52331,52332,52335,52337,52339,52342,52344,52346,52348,52350,52352,52354,52356,52358,52360],{"class":230,"line":1731},[228,52333,52334],{"class":234},"    let",[228,52336,51948],{"class":238},[228,52338,284],{"class":234},[228,52340,52341],{"class":238}," [",[228,52343,557],{"class":287},[228,52345,12550],{"class":238},[228,52347,531],{"class":287},[228,52349,12550],{"class":238},[228,52351,310],{"class":287},[228,52353,12550],{"class":238},[228,52355,316],{"class":287},[228,52357,12550],{"class":238},[228,52359,456],{"class":287},[228,52361,33361],{"class":238},[228,52363,52364,52366,52368,52370,52372,52374,52376,52378,52380,52382,52384,52387,52389,52391,52393],{"class":230,"line":1737},[228,52365,3315],{"class":234},[228,52367,1772],{"class":238},[228,52369,51962],{"class":234},[228,52371,9553],{"class":238},[228,52373,284],{"class":234},[228,52375,4207],{"class":287},[228,52377,9560],{"class":238},[228,52379,1148],{"class":234},[228,52381,52080],{"class":238},[228,52383,52083],{"class":287},[228,52385,52386],{"class":234}," -",[228,52388,25234],{"class":287},[228,52390,3328],{"class":238},[228,52392,2406],{"class":234},[228,52394,12557],{"class":238},[228,52396,52397,52400,52402,52404,52406,52408,52410,52412,52414,52416,52418,52420,52422,52424,52426,52428,52430],{"class":230,"line":1742},[228,52398,52399],{"class":234},"      for",[228,52401,1772],{"class":238},[228,52403,51962],{"class":234},[228,52405,9615],{"class":238},[228,52407,284],{"class":234},[228,52409,4207],{"class":287},[228,52411,9622],{"class":238},[228,52413,1148],{"class":234},[228,52415,52080],{"class":238},[228,52417,52083],{"class":287},[228,52419,52386],{"class":234},[228,52421,9553],{"class":238},[228,52423,770],{"class":234},[228,52425,25234],{"class":287},[228,52427,9629],{"class":238},[228,52429,2406],{"class":234},[228,52431,12557],{"class":238},[228,52433,52434],{"class":230,"line":1756},[228,52435,52436],{"class":297},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[228,52438,52439,52441,52444,52446,52449,52451,52453],{"class":230,"line":1761},[228,52440,2611],{"class":234},[228,52442,52443],{"class":238}," (arr[j] ",[228,52445,1198],{"class":234},[228,52447,52448],{"class":238}," arr[j ",[228,52450,719],{"class":234},[228,52452,25234],{"class":287},[228,52454,52455],{"class":238},"]) {\n",[228,52457,52458],{"class":230,"line":1767},[228,52459,52460],{"class":297},"          \u002F\u002F 交换两个变量\n",[228,52462,52463,52466,52469,52471],{"class":230,"line":1788},[228,52464,52465],{"class":234},"          let",[228,52467,52468],{"class":238}," tmp ",[228,52470,284],{"class":234},[228,52472,52473],{"class":238}," arr[j]\n",[228,52475,52476,52479,52481,52483,52485,52487],{"class":230,"line":1793},[228,52477,52478],{"class":238},"          arr[j] ",[228,52480,284],{"class":234},[228,52482,52448],{"class":238},[228,52484,719],{"class":234},[228,52486,25234],{"class":287},[228,52488,33361],{"class":238},[228,52490,52491,52494,52496,52498,52500,52502],{"class":230,"line":1807},[228,52492,52493],{"class":238},"          arr[j ",[228,52495,719],{"class":234},[228,52497,25234],{"class":287},[228,52499,4557],{"class":238},[228,52501,284],{"class":234},[228,52503,52504],{"class":238}," tmp\n",[228,52506,52507],{"class":230,"line":1812},[228,52508,2643],{"class":238},[228,52510,52511],{"class":230,"line":1841},[228,52512,52513],{"class":238},"      }\n",[228,52515,52516],{"class":230,"line":1846},[228,52517,2301],{"class":238},[228,52519,52520,52523,52525],{"class":230,"line":1863},[228,52521,52522],{"class":238},"    document.",[228,52524,52043],{"class":2077},[228,52526,52527],{"class":238},"(arr)\n",[228,52529,52530,52533,52535],{"class":230,"line":1868},[228,52531,52532],{"class":238},"  \u003C\u002F",[228,52534,51928],{"class":51415},[228,52536,51422],{"class":238},[228,52538,52539,52541,52543],{"class":230,"line":1873},[228,52540,51900],{"class":238},[228,52542,51915],{"class":51415},[228,52544,51422],{"class":238},[228,52546,52547],{"class":230,"line":1878},[228,52548,2514],{"emptyLinePlaceholder":157},[228,52550,52551,52553,52555],{"class":230,"line":1892},[228,52552,51900],{"class":238},[228,52554,50750],{"class":51415},[228,52556,51422],{"class":238},[19,52558,52559],{},[1576,52560],{"alt":141,"src":52561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,52563,52564],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,52566,52567],{},"let arr = [4, 2, 5, 1, 3]",[19,52569,52570],{},"\u002F\u002F 1.升序排列写法",[19,52572,52573],{},"arr.sort(function (a, b) {",[19,52575,52576],{},"return a - b",[19,52578,52579],{},"})",[19,52581,52582],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,52584,52585],{},"\u002F\u002F 降序排列写法",[19,52587,52573],{},[19,52589,52590],{},"return b - a",[19,52592,52579],{},[19,52594,52595],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,52597,52599],{"id":52598},"_29-函数","2.9 函数",[19,52601,52602],{},[1576,52603],{"alt":141,"src":52604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,52606,52607],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,52609,52610],{},"函数的声明用function",[19,52612,52613],{},"函数里边可以嵌套函数",[200,52615,52617],{"id":52616},"_291-函数传参","2.9.1 函数传参",[19,52619,52620],{},[1576,52621],{"alt":141,"src":52622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,52624,52625],{},[1576,52626],{"alt":141,"src":52627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1245,52629,52630,52633,52636,52639,52642,52645],{},[186,52631,52632],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[186,52634,52635],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[186,52637,52638],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[186,52640,52641],{},"开发中尽量保持形参和实参个数一致",[186,52643,52644],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[186,52646,52647],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,52649,52650],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[200,52652,52654],{"id":52653},"_292-函数的返回值","2.9.2 函数的返回值",[19,52656,52657],{},[1576,52658],{"alt":141,"src":52659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,52661,52662],{},[1576,52663],{"alt":141,"src":52664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1245,52666,52667,52670,52673,52676,52679],{},[186,52668,52669],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[186,52671,52672],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[186,52674,52675],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[186,52677,52678],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[186,52680,52681],{},"断点调试:进入函数内部看执行过程F11",[200,52683,52685],{"id":52684},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[220,52687,52689],{"className":50748,"code":52688,"language":50750,"meta":141,"style":141},"    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",[30,52690,52691,52696,52701,52705,52710],{"__ignoreMap":141},[228,52692,52693],{"class":230,"line":231},[228,52694,52695],{"class":238},"    function fn(a, b) {\n",[228,52697,52698],{"class":230,"line":142},[228,52699,52700],{"class":238},"      console.log(a + b);\n",[228,52702,52703],{"class":230,"line":1293},[228,52704,2301],{"class":238},[228,52706,52707],{"class":230,"line":1308},[228,52708,52709],{"class":238},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[228,52711,52712],{"class":230,"line":1314},[228,52713,52714],{"class":238},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[200,52716,52718],{"id":52717},"_294-作用域","2.9.4 作用域",[1245,52720,52721,52727,52732,52735,52738],{},[186,52722,52723,52724],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[388,52725,52726],{},"作用域",[186,52728,52729],{},[388,52730,52731],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[186,52733,52734],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[186,52736,52737],{},"函数内部可以直接所使用全局变量",[186,52739,52740],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,52742,14748],{},[220,52744,52746],{"className":50748,"code":52745,"language":50750,"meta":141,"style":141},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[30,52747,52748,52753,52758,52762,52767,52772,52777],{"__ignoreMap":141},[228,52749,52750],{"class":230,"line":231},[228,52751,52752],{"class":238},"    function fun() {\n",[228,52754,52755],{"class":230,"line":142},[228,52756,52757],{"class":238},"      num = 10\n",[228,52759,52760],{"class":230,"line":1293},[228,52761,2301],{"class":238},[228,52763,52764],{"class":230,"line":1308},[228,52765,52766],{"class":238},"    fun()\n",[228,52768,52769],{"class":230,"line":1314},[228,52770,52771],{"class":238},"    console.log(num)\n",[228,52773,52774],{"class":230,"line":1328},[228,52775,52776],{"class":238},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[228,52778,52779],{"class":230,"line":1334},[228,52780,52781],{"class":238},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1245,52783,52784,52787],{},[186,52785,52786],{},"函数内部的形参可以看做是局部变量",[186,52788,52789],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,52791,52792,52793],{},"变量访问原则： ",[388,52794,52795],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[200,52797,52799],{"id":52798},"_295-匿名函数","2.9.5 匿名函数",[19,52801,52802],{},"函数可以分为具名函数和匿名函数",[19,52804,52805],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[183,52807,52808],{},[186,52809,52810],{},"函数表达式",[19,52812,52813],{},[1576,52814],{"alt":141,"src":52815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,52817,52818],{},"里边也可以写参数",[19,52820,52821],{},"具名函数调用位置可以随意调整；",[19,52823,52824],{},"匿名函数函数表达式形式只能在声明后才可以使用",[183,52826,52827],{"start":142},[186,52828,52829],{},"立即执行函数",[19,52831,52832],{},[1576,52833],{"alt":141,"src":52834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,52836,52837],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,52839,52840],{},"写法：两个小括号，然后在第一个小括号中写function",[19,52842,52843],{},"(function () {})();",[19,52845,52846],{},"不要落下最后的;",[19,52848,52849],{},"立即执行函数必须要加;",[19,52851,52852],{},"分号写前写后都没问题",[19,52854,52855],{},"写前：",[19,52857,52858],{},"(function() {})()",[19,52860,52861],{},";(function () {})();",[19,52863,52864],{},"写后:",[19,52866,52867],{},"(function() {})();",[19,52869,52843],{},[19,52871,52872],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,52874,52875],{},"还有一种写法：",[19,52877,52878],{},"(function(){}());",[19,52880,52881],{},"或者:",[19,52883,52884],{},"!function(){}();",[19,52886,52887],{},"立即执行函数有时候也是可以加名字的：",[19,52889,52890],{},"(function flexible(window,document) {}(window,document));",[19,52892,52893],{},"省一些调用方法",[200,52895,52897],{"id":52896},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,52899,52900],{},[1576,52901],{"alt":141,"src":52902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,52904,52905],{},"这样就不用非得给x,y初始化了",[19,52907,52908],{},[1576,52909],{"alt":141,"src":52910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,52912,52913],{},"代码执行时先看左边",[19,52915,52916],{},"例如：console.log(false && 3+5)",[19,52918,52919],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,52921,52922],{},"&&都是真时，就返回最后一个真值",[19,52924,52925],{},"console.log(11 && 22)",[19,52927,52928],{},"输出22",[19,52930,52931],{},"逻辑与：遇真则真",[19,52933,14748],{},[19,52935,52936],{},"let age=1",[19,52938,52939],{},"console.log(11 || age++)",[19,52941,52942],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,52944,52945],{},"console.log(11 || 22)",[19,52947,52948],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,52950,52951],{},"||如果都是假的话，就取最后一个假的值了",[200,52953,52955],{"id":52954},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,52957,52958],{},"显示转换：",[19,52960,52961,52964,52965],{},[388,52962,52963],{},"记忆","： ",[388,52966,52967],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,52969,52970],{},"空字符串为假，其他字符串全为真",[19,52972,52973],{},[1576,52974],{"alt":141,"src":52975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,52977,52978],{},"隐式转换：",[19,52980,52981],{},[1576,52982],{"alt":141,"src":52983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,52985,52986],{},"隐式转换:",[19,52988,52989],{},"null+3=3",[19,52991,52992],{},"undefined+3=NaN",[19,52994,52995],{},"null==undefined 输出true,他两个都当0看",[19,52997,52998],{},"null===undefined 输出false",[19,53000,53001],{},"undefined做任何操作都是NaN",[19,53003,53004],{},"NaN不等于NaN，NaN表示计算错误",[14,53006,53008],{"id":53007},"_210-对象","2.10 对象",[200,53010,53012],{"id":53011},"_2101-对象的介绍","2.10.1 对象的介绍",[19,53014,53015],{},"对象也是一种数据类型，里边的数据是无序的",[19,53017,53018],{},"对象由属性和方法组成",[19,53020,53021],{},[1576,53022],{"alt":141,"src":53023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,53025,53026],{},[1576,53027],{"alt":141,"src":53028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,53030,53031],{},[1576,53032],{"alt":141,"src":53033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[200,53035,53037],{"id":53036},"_2102-对象属性","2.10.2 对象属性",[19,53039,53040],{},[1576,53041],{"alt":141,"src":53042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[183,53044,53045],{},[186,53046,53047],{},"查询对象",[19,53049,53050],{},"对象名.属性 goods.uname",[19,53052,53053],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,53055,53056],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,53058,53059],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,53061,53062],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[183,53064,53065],{"start":142},[186,53066,53067],{},"重新赋值",[19,53069,53070],{},"对象名.属性=新值",[183,53072,53073],{"start":1293},[186,53074,53075],{},"增加新数据",[19,53077,53070],{},[183,53079,53080],{"start":1308},[186,53081,53082],{},"删除对象中的属性",[19,53084,53085],{},"delete 对象名.属性",[200,53087,53089],{"id":53088},"_2103-对象方法","2.10.3 对象方法",[19,53091,53092],{},[1576,53093],{"alt":141,"src":53094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,53096,53097],{},"后边跟的是匿名函数",[19,53099,53100],{},"对象外面的叫函数；对象内部的叫方法",[19,53102,53103],{},[1576,53104],{"alt":141,"src":53105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[200,53107,53109],{"id":53108},"_2104-遍历对象","2.10.4 遍历对象",[19,53111,53112],{},"理解为加括号的python字典遍历",[19,53114,53115],{},[1576,53116],{"alt":141,"src":53117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,53119,53120],{},"k是字符串类型",[19,53122,53123],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[220,53125,53127],{"className":50748,"code":53126,"language":50750,"meta":141,"style":141},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[30,53128,53129,53134,53139,53144,53149],{"__ignoreMap":141},[228,53130,53131],{"class":230,"line":231},[228,53132,53133],{"class":238},"   let arr = [1, 2, 3]\n",[228,53135,53136],{"class":230,"line":142},[228,53137,53138],{"class":238},"    for (let k in arr) {\n",[228,53140,53141],{"class":230,"line":1293},[228,53142,53143],{"class":238},"      console.log(k)\n",[228,53145,53146],{"class":230,"line":1308},[228,53147,53148],{"class":238},"      console.log(arr[k])\n",[228,53150,53151],{"class":230,"line":1314},[228,53152,2301],{"class":238},[19,53154,53155],{},[1576,53156],{"alt":141,"src":53157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,53159,53160],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,53162,53163],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,53165,53166],{},"for in 得到的k是属性名",[51928,53168,53169],{},"\n\nlet pink = {\n\nuname: 'pink老师',\n\nage: 18,\n\ngender: '男',\n\nsing: function () {\n\ndocument.write('唱歌')\n\n}\n\n}\n\n\u002F\u002F 遍历对象\n\nfor (let k in pink) {\n\nconsole.log(k)\n\nconsole.log(pink\\[k\\])\n\n}\n\n",[19,53171,53172],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[200,53174,53176],{"id":53175},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,53178,53179],{},"数组中放对象信息",[220,53181,53185],{"className":53182,"code":53183,"language":53184,"meta":141,"style":141},"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",[30,53186,53187,53195,53200,53205,53210,53215,53220,53225,53230,53235,53240,53245,53250,53254,53258],{"__ignoreMap":141},[228,53188,53189,53191,53193],{"class":230,"line":231},[228,53190,1148],{"class":238},[228,53192,51928],{"class":51415},[228,53194,51422],{"class":238},[228,53196,53197],{"class":230,"line":142},[228,53198,53199],{"class":238},"    let students = [\n",[228,53201,53202],{"class":230,"line":1293},[228,53203,53204],{"class":238},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[228,53206,53207],{"class":230,"line":1308},[228,53208,53209],{"class":238},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[228,53211,53212],{"class":230,"line":1314},[228,53213,53214],{"class":238},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[228,53216,53217],{"class":230,"line":1328},[228,53218,53219],{"class":238},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[228,53221,53222],{"class":230,"line":1334},[228,53223,53224],{"class":238},"    ]\n",[228,53226,53227],{"class":230,"line":1425},[228,53228,53229],{"class":238},"    for (let i = 0; i \u003C students.length; i++) {\n",[228,53231,53232],{"class":230,"line":1431},[228,53233,53234],{"class":238},"      for (let k in students[i]) {\n",[228,53236,53237],{"class":230,"line":1443},[228,53238,53239],{"class":238},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[228,53241,53242],{"class":230,"line":1726},[228,53243,53244],{"class":238},"        \u002F\u002F输出每个人的名字：\n",[228,53246,53247],{"class":230,"line":1731},[228,53248,53249],{"class":238},"        \u002F\u002Fconsole.log(students[i].name)\n",[228,53251,53252],{"class":230,"line":1737},[228,53253,52513],{"class":238},[228,53255,53256],{"class":230,"line":1742},[228,53257,2301],{"class":238},[228,53259,53260,53262,53264],{"class":230,"line":1756},[228,53261,52532],{"class":238},[228,53263,51928],{"class":51415},[228,53265,51422],{"class":238},[200,53267,53269],{"id":53268},"_2106-内置对象","2.10.6 内置对象",[19,53271,53272],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[183,53274,53275],{},[186,53276,53277],{},"数学对象Math",[19,53279,53280],{},[1576,53281],{"alt":141,"src":53282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,53284,53285],{},[476,53286,53289],{"href":53287,"rel":53288},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[23980],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,53291,53292],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,53294,53295],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,53297,53298],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,53300,53301],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,53303,53304],{},"null属于对象数据类型",[183,53306,53307],{"start":142},[186,53308,53309],{},"生成任意范围随机数",[19,53311,53312],{},[1576,53313],{"alt":141,"src":53314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,53316,53317],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,53319,53320],{},"乘以几就取不到几",[19,53322,53323],{},"取数组中的随机元素：",[19,53325,53326],{},"let arr = ['red', 'green', 'blue']",[19,53328,53329],{},"let random = Math.floor(Math.random() * arr.length)",[19,53331,53332],{},"console.log(arr[random])",[19,53334,53335],{},"这个函数得到的是全闭区间",[19,53337,53338],{},"function getRandom(N, M) {",[19,53340,53341],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,53343,1184],{},[19,53345,53346],{},"console.log(getRandom(4, 8))",[200,53348,53350],{"id":53349},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,53352,53353],{},[1576,53354],{"alt":141,"src":53355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,53357,53358],{},[1576,53359],{"alt":141,"src":53360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,53362,53363],{},[1576,53364],{"alt":141,"src":53365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,53367,53368],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,53370,53371],{},[1576,53372],{"alt":141,"src":53373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,53375,53376],{},[1576,53377],{"alt":141,"src":53378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,53380,53381],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,53383,53384],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,53386,53387],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[5241,53389,53390],{},"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":141,"searchDepth":142,"depth":142,"links":53392},[53393,53401,53402,53403,53404,53405,53412,53416,53422,53431],{"id":50583,"depth":142,"text":50584,"children":53394},[53395,53396,53397,53398,53399,53400],{"id":50587,"depth":1293,"text":50588},{"id":50604,"depth":1293,"text":50605},{"id":50644,"depth":1293,"text":50645},{"id":50656,"depth":1293,"text":50657},{"id":50665,"depth":1293,"text":50666},{"id":50713,"depth":1293,"text":50714},{"id":50723,"depth":142,"text":50724},{"id":50811,"depth":142,"text":50812},{"id":50834,"depth":142,"text":50835},{"id":50846,"depth":142,"text":50847},{"id":51033,"depth":142,"text":51034,"children":53406},[53407,53408,53409,53410,53411],{"id":51037,"depth":1293,"text":51038},{"id":51046,"depth":1293,"text":51047},{"id":51074,"depth":1293,"text":51075},{"id":51110,"depth":1293,"text":51111},{"id":51135,"depth":1293,"text":51136},{"id":51147,"depth":142,"text":51148,"children":53413},[53414,53415],{"id":51168,"depth":1293,"text":51169},{"id":51262,"depth":1293,"text":51263},{"id":51320,"depth":142,"text":51321,"children":53417},[53418,53419,53420,53421],{"id":51324,"depth":1293,"text":51325},{"id":51348,"depth":1293,"text":51349},{"id":51401,"depth":1293,"text":51402},{"id":52212,"depth":1293,"text":52213},{"id":52598,"depth":142,"text":52599,"children":53423},[53424,53425,53426,53427,53428,53429,53430],{"id":52616,"depth":1293,"text":52617},{"id":52653,"depth":1293,"text":52654},{"id":52684,"depth":1293,"text":52685},{"id":52717,"depth":1293,"text":52718},{"id":52798,"depth":1293,"text":52799},{"id":52896,"depth":1293,"text":52897},{"id":52954,"depth":1293,"text":52955},{"id":53007,"depth":142,"text":53008,"children":53432},[53433,53434,53435,53436,53437,53438,53439],{"id":53011,"depth":1293,"text":53012},{"id":53036,"depth":1293,"text":53037},{"id":53088,"depth":1293,"text":53089},{"id":53108,"depth":1293,"text":53109},{"id":53175,"depth":1293,"text":53176},{"id":53268,"depth":1293,"text":53269},{"id":53349,"depth":1293,"text":53350},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50575,"description":154},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53446,"title":53447,"body":53448,"description":154,"extension":155,"meta":76788,"navigation":157,"path":76789,"seo":76790,"stem":76791,"__hash__":76792},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53449,"toc":76728},[53450,53453,53456,53459,53464,53467,53470,53473,53477,53481,53487,53492,53500,53507,53510,53514,53519,53524,53529,53532,53535,53546,53549,53553,53556,53559,53564,53569,53574,53577,53580,53672,53675,53680,53683,53688,53691,53694,53699,53702,53707,53711,53714,53728,53732,53737,53740,53743,53747,53752,53755,53759,53763,53768,53772,53777,53780,53783,53786,53789,53792,53795,53800,53805,53833,53836,53839,53842,53847,53850,53853,53856,53859,53863,53892,53896,53901,53906,53909,53912,53915,53920,54035,54040,54045,54206,54211,54214,54218,54223,54228,54231,54234,54237,54240,54243,54246,54249,54252,54255,54258,54261,54264,54267,54270,54272,54275,54278,54281,54286,54290,54687,54690,54696,54700,54705,55987,55992,55995,55998,56001,56006,57202,57206,57212,57217,57220,57225,57230,57234,57238,57243,57246,57251,57254,57257,57261,58169,58172,58176,58397,58400,58403,58406,58632,58635,58859,58862,58866,58871,58874,58877,59105,59108,59141,59144,59148,59153,59157,59160,59163,59166,59169,59172,59175,59178,59183,60463,60467,60470,61563,61567,61570,61573,61576,61579,61583,61586,61589,61591,61599,63080,63084,63087,63090,63093,63302,63305,63309,63313,63318,63323,63326,63329,63334,63338,63343,63346,63455,63459,63464,63469,63472,63475,63479,63484,63489,63494,63497,63500,63511,63514,63519,63524,63527,63530,63603,63607,63612,63615,63617,63628,63632,63637,64963,64966,64969,64972,64974,64977,64980,64983,64986,64989,64992,64995,64998,65001,65004,65007,65010,65012,65014,65017,65021,66115,66118,66121,66137,66151,66154,66159,66165,66170,66174,66178,66183,66187,66192,66634,66639,66642,66646,66651,66654,66657,66661,66666,66670,66675,66680,66684,66689,66694,66697,66702,66707,66711,66716,66721,66825,66828,66832,66837,67203,67206,67209,67212,67215,67218,67221,67224,67227,68523,68527,68532,68537,68540,68543,68546,68549,68551,68556,68561,68564,68568,68573,68578,68583,68586,68589,68592,68595,68598,68603,68606,68610,68615,68620,68624,68629,68632,68637,68640,68643,68646,68649,68652,68657,68660,68663,68666,68669,68673,68678,68681,68685,68690,68693,68696,68700,68729,68732,68736,68740,68745,68749,68754,68757,68760,68763,68766,68769,68772,68775,68778,68781,68784,68787,68790,68793,68796,68800,68805,68810,68813,68817,68821,68826,68829,68833,68836,68839,68844,68849,68854,68859,68864,68867,68870,68875,68880,68884,68889,68892,68897,68900,68903,68906,68909,68914,68917,68926,68930,68935,68938,68941,68945,68948,68953,68957,68960,68966,68972,68976,69002,69005,70566,70569,71065,71068,71073,71078,71083,71087,71092,71097,71102,71106,71111,71114,71117,71120,71123,71127,71130,71135,71138,71143,71147,71152,71155,71160,71165,71170,71173,71176,71181,71186,71189,71192,71196,71199,71204,71207,71212,71215,71220,71225,71230,71233,71238,71303,71306,71317,71321,71326,71498,71502,71507,71510,71513,71516,71520,71531,71535,71538,71543,71548,71551,71554,71557,71560,71563,71565,71568,71571,71574,71579,71582,71587,71590,71594,71597,71600,71614,71618,71621,71676,71681,71684,71687,71692,71695,71699,71704,71834,71838,71843,71848,71929,71934,71938,71941,71946,71951,71957,71960,71963,71966,71970,71975,71978,71989,71993,72010,75057,75061,75064,75067,75070,75091,75095,75098,75106,75109,75114,75117,75120,75125,75130,75134,75155,75159,75164,75167,75170,75173,75176,75180,75185,75188,75192,75197,75200,75205,75208,75213,75216,75221,76424,76428,76433,76436,76441,76725],[10,53451,53447],{"id":53452},"_3web-apis",[19,53454,53455],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,53457,53458],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,53460,53461],{},[1576,53462],{"alt":141,"src":53463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,53465,53466],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,53468,53469],{},"建议数组和对象使用 const 来声明",[19,53471,53472],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,53474,53476],{"id":53475},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[200,53478,53480],{"id":53479},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,53482,53483,53486],{},[30,53484,53485],{},"document"," = HTML 文件解析后的对象化表示；",[19,53488,53489,53491],{},[30,53490,53485],{}," ≠ HTML 文件本身",[19,53493,53494,53499],{},[388,53495,53496],{},[30,53497,53498],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,53501,53502,53506],{},[388,53503,53504],{},[30,53505,53485],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,53508,53509],{},"document实际上为window.document的简写",[200,53511,53513],{"id":53512},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,53515,53516],{},[1576,53517],{"alt":141,"src":53518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,53520,53521],{},[1576,53522],{"alt":141,"src":53523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,53525,53526],{},[1576,53527],{"alt":141,"src":53528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,53530,53531],{},"console.dir()",[19,53533,53534],{},"dir用来打印对象",[1245,53536,53537,53540,53543],{},[186,53538,53539],{},"任何一个标签，都是一个对象",[186,53541,53542],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[186,53544,53545],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,53547,53548],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[200,53550,53552],{"id":53551},"_312-获取dom对象","3.1.2 获取DoM对象",[19,53554,53555],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,53557,53558],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,53560,53561],{},[388,53562,53563],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[183,53565,53566],{},[186,53567,53568],{},"利用CSS选择器来获取标签元素",[19,53570,53571],{},[1576,53572],{"alt":141,"src":53573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,53575,53576],{},"里边的选择器必须必须加引号！！！",[19,53578,53579],{},"只选择第一个元素",[220,53581,53583],{"className":53182,"code":53582,"language":53184,"meta":141,"style":141},"\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",[30,53584,53585,53593,53614,53633,53641,53646,53651,53656,53664],{"__ignoreMap":141},[228,53586,53587,53589,53591],{"class":230,"line":231},[228,53588,1148],{"class":238},[228,53590,51915],{"class":51415},[228,53592,51422],{"class":238},[228,53594,53595,53597,53599,53602,53604,53607,53610,53612],{"class":230,"line":142},[228,53596,52259],{"class":238},[228,53598,51726],{"class":51415},[228,53600,53601],{"class":2077}," class",[228,53603,284],{"class":238},[228,53605,53606],{"class":343},"\"box\"",[228,53608,53609],{"class":238},">123\u003C\u002F",[228,53611,51726],{"class":51415},[228,53613,51422],{"class":238},[228,53615,53616,53618,53620,53622,53624,53626,53629,53631],{"class":230,"line":1293},[228,53617,52259],{"class":238},[228,53619,51726],{"class":51415},[228,53621,53601],{"class":2077},[228,53623,284],{"class":238},[228,53625,53606],{"class":343},[228,53627,53628],{"class":238},">456\u003C\u002F",[228,53630,51726],{"class":51415},[228,53632,51422],{"class":238},[228,53634,53635,53637,53639],{"class":230,"line":1308},[228,53636,52259],{"class":238},[228,53638,51928],{"class":51415},[228,53640,51422],{"class":238},[228,53642,53643],{"class":230,"line":1314},[228,53644,53645],{"class":238},"    \u002F\u002F 1.获取匹配的第一个元素\n",[228,53647,53648],{"class":230,"line":1328},[228,53649,53650],{"class":238},"    const box = document.querySelector('div')\n",[228,53652,53653],{"class":230,"line":1334},[228,53654,53655],{"class":238},"    console.dir(box)\n",[228,53657,53658,53660,53662],{"class":230,"line":1425},[228,53659,52532],{"class":238},[228,53661,51928],{"class":51415},[228,53663,51422],{"class":238},[228,53665,53666,53668,53670],{"class":230,"line":1431},[228,53667,51900],{"class":238},[228,53669,51915],{"class":51415},[228,53671,51422],{"class":238},[19,53673,53674],{},"只选123，不选456",[19,53676,53677],{},[1576,53678],{"alt":141,"src":53679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,53681,53682],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,53684,53685],{},[1576,53686],{"alt":141,"src":53687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,53689,53690],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,53692,53693],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[183,53695,53696],{"start":142},[186,53697,53698],{},"其他方法来获取标签元素",[19,53700,53701],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,53703,53704],{},[1576,53705],{"alt":141,"src":53706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[200,53708,53710],{"id":53709},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,53712,53713],{},"设置修改DOM元素内容有两种方式：",[1245,53715,53716,53719,53722,53725],{},[186,53717,53718],{},"元素.innerText=''",[186,53720,53721],{},"元素.innerHTML=''",[186,53723,53724],{},"不写字符串输出数字也是可以的",[186,53726,53727],{},"元素.innerHtml=1",[22113,53729,53731],{"id":53730},"_3131-innertext","3.1.3.1 innerText",[19,53733,53734],{},[1576,53735],{"alt":141,"src":53736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,53738,53739],{},"思路：实现了修改盒子中的内容！",[19,53741,53742],{},"它只显示纯文本，不解析标签",[22113,53744,53746],{"id":53745},"_3132-innerhtml","3.1.3.2 innerHTML",[19,53748,53749],{},[1576,53750],{"alt":141,"src":53751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,53753,53754],{},"相比于innerText，他的强大之处在于可以解析标签",[200,53756,53758],{"id":53757},"_314-操作元素属性","3.1.4 操作元素属性",[22113,53760,53762],{"id":53761},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,53764,53765],{},[1576,53766],{"alt":141,"src":53767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22113,53769,53771],{"id":53770},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,53773,53774],{},[1576,53775],{"alt":141,"src":53776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,53778,53779],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,53781,53782],{},"div.style.backgroundColor = 'hotpink'",[19,53784,53785],{},"如果按照css的写法，-表示减，就会出错",[19,53787,53788],{},"body元素不需要再获取，直接用就行！！！！！！",[19,53790,53791],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,53793,53794],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,53796,53797],{},[1576,53798],{"alt":141,"src":53799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,53801,53802],{},[1576,53803],{"alt":141,"src":53804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[183,53806,53807,53810,53813,53816,53819,53822],{},[186,53808,53809],{},"className这个方式就是修改很多样式的时候来使用的！",[186,53811,53812],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[186,53814,53815],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[186,53817,53818],{},"className为属性名，如果还用class的话就导致与关键字冲突",[186,53820,53821],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[186,53823,53824,53825,53830],{},"解析标签的时候就变为了",[51726,53826],{"className":53827},[53828,53829],"nav","box",[53831,53832],"br",{},[19,53834,53835],{},"例子：",[51726,53837],{"className":53838},[53828],[51928,53840,53841],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,53843,53844],{},[1576,53845],{"alt":141,"src":53846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,53848,53849],{},"追加和删除类名用classList",[19,53851,53852],{},"常用于类似于开关的操作",[19,53854,53855],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,53857,53858],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22113,53860,53862],{"id":53861},"_3143-牢记点","3.1.4.3 牢记点",[183,53864,53865,53868,53871,53874,53877,53880,53883,53886,53889],{},[186,53866,53867],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[186,53869,53870],{},"使用style属性操作css时不要忘记引号",[186,53872,53873],{},"使用className或者classList时也不要忘记引号",[186,53875,53876],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[186,53878,53879],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[186,53881,53882],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[186,53884,53885],{},"若： let arr=['1','2',3] arr[0]=1",[186,53887,53888],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[186,53890,53891],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[200,53893,53895],{"id":53894},"_315-操作表单元素","3.1.5 操作表单元素",[183,53897,53898],{},[186,53899,53900],{},"天生的属性",[19,53902,53903],{},[1576,53904],{"alt":141,"src":53905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,53907,53908],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,53910,53911],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,53913,53914],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,53916,53917],{},[1576,53918],{"alt":141,"src":53919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[220,53921,53923],{"className":50748,"code":53922,"language":50750,"meta":141,"style":141},"在复选框中如果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",[30,53924,53925,53930,53962,53967,53972,53977,53982,53986,53991,53996,54013,54025,54030],{"__ignoreMap":141},[228,53926,53927],{"class":230,"line":231},[228,53928,53929],{"class":238},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[228,53931,53932,53934,53937,53940,53942,53945,53947,53949,53951,53953,53955,53957,53960],{"class":230,"line":142},[228,53933,1148],{"class":238},[228,53935,53936],{"class":51415},"input",[228,53938,53939],{"class":2077}," type",[228,53941,284],{"class":238},[228,53943,53944],{"class":343},"\"checkbox\"",[228,53946,15035],{"class":2077},[228,53948,284],{"class":238},[228,53950,7767],{"class":343},[228,53952,15074],{"class":2077},[228,53954,284],{"class":238},[228,53956,7767],{"class":343},[228,53958,53959],{"class":2077}," checked",[228,53961,51422],{"class":238},[228,53963,53964],{"class":230,"line":1293},[228,53965,53966],{"class":238},"不选的话：\n",[228,53968,53969],{"class":230,"line":1308},[228,53970,53971],{"class":238},"const input = document.querySelector('input')\n",[228,53973,53974],{"class":230,"line":1314},[228,53975,53976],{"class":238},"input.checked=false\n",[228,53978,53979],{"class":230,"line":1328},[228,53980,53981],{"class":238},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[228,53983,53984],{"class":230,"line":1334},[228,53985,2514],{"emptyLinePlaceholder":157},[228,53987,53988],{"class":230,"line":1425},[228,53989,53990],{"class":238},"禁用按钮：\n",[228,53992,53993],{"class":230,"line":1431},[228,53994,53995],{"class":238},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[228,53997,53998,54000,54003,54006,54009,54011],{"class":230,"line":1443},[228,53999,1148],{"class":238},[228,54001,54002],{"class":51415},"button",[228,54004,54005],{"class":2077}," disabled",[228,54007,54008],{"class":238},">点击\u003C\u002F",[228,54010,54002],{"class":51415},[228,54012,51422],{"class":238},[228,54014,54015,54017,54019,54021,54023],{"class":230,"line":1726},[228,54016,1148],{"class":238},[228,54018,54002],{"class":51415},[228,54020,54008],{"class":238},[228,54022,54002],{"class":51415},[228,54024,51422],{"class":238},[228,54026,54027],{"class":230,"line":1731},[228,54028,54029],{"class":238},"const bt = document.querySelector('button')\n",[228,54031,54032],{"class":230,"line":1737},[228,54033,54034],{"class":238},"bt.disabled = false\n",[183,54036,54037],{"start":142},[186,54038,54039],{},"自定义属性",[19,54041,54042],{},[1576,54043],{"alt":141,"src":54044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[220,54046,54048],{"className":53182,"code":54047,"language":53184,"meta":141,"style":141},"\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",[30,54049,54050,54058,54086,54105,54124,54143,54162,54170,54175,54180,54185,54190,54198],{"__ignoreMap":141},[228,54051,54052,54054,54056],{"class":230,"line":231},[228,54053,1148],{"class":238},[228,54055,51915],{"class":51415},[228,54057,51422],{"class":238},[228,54059,54060,54062,54064,54067,54069,54071,54074,54076,54079,54082,54084],{"class":230,"line":142},[228,54061,52259],{"class":238},[228,54063,51726],{"class":51415},[228,54065,54066],{"class":2077}," data-id",[228,54068,284],{"class":238},[228,54070,3792],{"class":343},[228,54072,54073],{"class":2077}," data-spm",[228,54075,284],{"class":238},[228,54077,54078],{"class":343},"\"我不知道\"",[228,54080,54081],{"class":238},">1\u003C\u002F",[228,54083,51726],{"class":51415},[228,54085,51422],{"class":238},[228,54087,54088,54090,54092,54094,54096,54098,54101,54103],{"class":230,"line":1293},[228,54089,52259],{"class":238},[228,54091,51726],{"class":51415},[228,54093,54066],{"class":2077},[228,54095,284],{"class":238},[228,54097,3815],{"class":343},[228,54099,54100],{"class":238},">2\u003C\u002F",[228,54102,51726],{"class":51415},[228,54104,51422],{"class":238},[228,54106,54107,54109,54111,54113,54115,54117,54120,54122],{"class":230,"line":1308},[228,54108,52259],{"class":238},[228,54110,51726],{"class":51415},[228,54112,54066],{"class":2077},[228,54114,284],{"class":238},[228,54116,3828],{"class":343},[228,54118,54119],{"class":238},">3\u003C\u002F",[228,54121,51726],{"class":51415},[228,54123,51422],{"class":238},[228,54125,54126,54128,54130,54132,54134,54136,54139,54141],{"class":230,"line":1314},[228,54127,52259],{"class":238},[228,54129,51726],{"class":51415},[228,54131,54066],{"class":2077},[228,54133,284],{"class":238},[228,54135,3841],{"class":343},[228,54137,54138],{"class":238},">4\u003C\u002F",[228,54140,51726],{"class":51415},[228,54142,51422],{"class":238},[228,54144,54145,54147,54149,54151,54153,54155,54158,54160],{"class":230,"line":1328},[228,54146,52259],{"class":238},[228,54148,51726],{"class":51415},[228,54150,54066],{"class":2077},[228,54152,284],{"class":238},[228,54154,3862],{"class":343},[228,54156,54157],{"class":238},">5\u003C\u002F",[228,54159,51726],{"class":51415},[228,54161,51422],{"class":238},[228,54163,54164,54166,54168],{"class":230,"line":1334},[228,54165,52259],{"class":238},[228,54167,51928],{"class":51415},[228,54169,51422],{"class":238},[228,54171,54172],{"class":230,"line":1425},[228,54173,54174],{"class":238},"    const one = document.querySelector('div')\n",[228,54176,54177],{"class":230,"line":1431},[228,54178,54179],{"class":238},"    console.log(one.dataset)\n",[228,54181,54182],{"class":230,"line":1443},[228,54183,54184],{"class":238},"    console.log(one.dataset.id)\n",[228,54186,54187],{"class":230,"line":1726},[228,54188,54189],{"class":238},"    console.log(one.dataset.spm)\n",[228,54191,54192,54194,54196],{"class":230,"line":1731},[228,54193,52532],{"class":238},[228,54195,51928],{"class":51415},[228,54197,51422],{"class":238},[228,54199,54200,54202,54204],{"class":230,"line":1737},[228,54201,51900],{"class":238},[228,54203,51915],{"class":51415},[228,54205,51422],{"class":238},[19,54207,54208],{},[1576,54209],{"alt":141,"src":54210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,54212,54213],{},"document.querySelector选择的是第一个对象（元素）",[200,54215,54217],{"id":54216},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,54219,54220],{},[1576,54221],{"alt":141,"src":54222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,54224,54225],{},[1576,54226],{"alt":141,"src":54227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,54229,54230],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51928,54232,54233],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,54235,54236],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51928,54238,54239],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   let n1 = setInterval(fn, 1000)\n\n   console.log(n1)\n\n",[19,54241,54242],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,54244,54245],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,54247,54248],{},"单位为毫秒！！！",[19,54250,54251],{},"可以搭配匿名函数来用！！！",[19,54253,54254],{},"setInterval(function () {",[19,54256,54257],{},"alert('两秒执行一次')",[19,54259,54260],{},"}, 2000)",[19,54262,54263],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,54265,54266],{},"function fn() {",[19,54268,54269],{},"document.write(1)",[19,54271,1184],{},[19,54273,54274],{},"setInterval(fn, 1000)",[19,54276,54277],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,54279,54280],{},"setInterval('fn()', 1000)",[19,54282,54283],{},[1576,54284],{"alt":141,"src":54285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22113,54287,54289],{"id":54288},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[220,54291,54293],{"className":50748,"code":54292,"language":50750,"meta":141,"style":141},"\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",[30,54294,54295,54305,54319,54323,54331,54345,54365,54377,54385,54389,54397,54434,54439,54444,54449,54457,54465,54487,54495,54500,54522,54527,54532,54543,54548,54568,54576,54591,54606,54617,54622,54632,54642,54646,54655,54659,54667,54675,54679],{"__ignoreMap":141},[228,54296,54297,54299,54301,54303],{"class":230,"line":231},[228,54298,51412],{"class":238},[228,54300,51416],{"class":51415},[228,54302,51419],{"class":2077},[228,54304,51422],{"class":238},[228,54306,54307,54309,54311,54313,54315,54317],{"class":230,"line":142},[228,54308,1148],{"class":238},[228,54310,50750],{"class":51415},[228,54312,51431],{"class":2077},[228,54314,284],{"class":238},[228,54316,51436],{"class":343},[228,54318,51422],{"class":238},[228,54320,54321],{"class":230,"line":1293},[228,54322,2514],{"emptyLinePlaceholder":157},[228,54324,54325,54327,54329],{"class":230,"line":1308},[228,54326,1148],{"class":238},[228,54328,51449],{"class":51415},[228,54330,51422],{"class":238},[228,54332,54333,54335,54337,54339,54341,54343],{"class":230,"line":1314},[228,54334,52259],{"class":238},[228,54336,51459],{"class":51415},[228,54338,51462],{"class":2077},[228,54340,284],{"class":238},[228,54342,51467],{"class":343},[228,54344,51422],{"class":238},[228,54346,54347,54349,54351,54353,54355,54357,54359,54361,54363],{"class":230,"line":1328},[228,54348,52259],{"class":238},[228,54350,51459],{"class":51415},[228,54352,15035],{"class":2077},[228,54354,284],{"class":238},[228,54356,51506],{"class":343},[228,54358,51486],{"class":2077},[228,54360,284],{"class":238},[228,54362,51513],{"class":343},[228,54364,51422],{"class":238},[228,54366,54367,54369,54371,54373,54375],{"class":230,"line":1334},[228,54368,52259],{"class":238},[228,54370,51522],{"class":51415},[228,54372,51525],{"class":238},[228,54374,51522],{"class":51415},[228,54376,51422],{"class":238},[228,54378,54379,54381,54383],{"class":230,"line":1425},[228,54380,51900],{"class":238},[228,54382,51449],{"class":51415},[228,54384,51422],{"class":238},[228,54386,54387],{"class":230,"line":1431},[228,54388,2514],{"emptyLinePlaceholder":157},[228,54390,54391,54393,54395],{"class":230,"line":1443},[228,54392,1148],{"class":238},[228,54394,51915],{"class":51415},[228,54396,51422],{"class":238},[228,54398,54399,54401,54404,54406,54408,54410,54412,54414,54416,54419,54421,54424,54427,54429,54432],{"class":230,"line":1726},[228,54400,52259],{"class":238},[228,54402,54403],{"class":51415},"textarea",[228,54405,15035],{"class":2077},[228,54407,284],{"class":238},[228,54409,7767],{"class":343},[228,54411,15074],{"class":2077},[228,54413,284],{"class":238},[228,54415,7767],{"class":343},[228,54417,54418],{"class":2077}," cols",[228,54420,284],{"class":238},[228,54422,54423],{"class":343},"\"30\"",[228,54425,54426],{"class":2077}," rows",[228,54428,284],{"class":238},[228,54430,54431],{"class":343},"\"10\"",[228,54433,51422],{"class":238},[228,54435,54436],{"class":230,"line":1731},[228,54437,54438],{"class":238},"        用户注册协议\n",[228,54440,54441],{"class":230,"line":1737},[228,54442,54443],{"class":238},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[228,54445,54446],{"class":230,"line":1742},[228,54447,54448],{"class":238},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[228,54450,54451,54453,54455],{"class":230,"line":1756},[228,54452,51891],{"class":238},[228,54454,54403],{"class":51415},[228,54456,51422],{"class":238},[228,54458,54459,54461,54463],{"class":230,"line":1761},[228,54460,52259],{"class":238},[228,54462,53831],{"class":51415},[228,54464,51422],{"class":238},[228,54466,54467,54469,54471,54473,54475,54478,54480,54483,54485],{"class":230,"line":1767},[228,54468,52259],{"class":238},[228,54470,54002],{"class":51415},[228,54472,53601],{"class":2077},[228,54474,284],{"class":238},[228,54476,54477],{"class":343},"\"btn\"",[228,54479,54005],{"class":2077},[228,54481,54482],{"class":238},">我已经阅读用户协议(5)\u003C\u002F",[228,54484,54002],{"class":51415},[228,54486,51422],{"class":238},[228,54488,54489,54491,54493],{"class":230,"line":1788},[228,54490,52259],{"class":238},[228,54492,51928],{"class":51415},[228,54494,51422],{"class":238},[228,54496,54497],{"class":230,"line":1793},[228,54498,54499],{"class":297},"    \u002F\u002F 1. 获取元素\n",[228,54501,54502,54504,54507,54509,54512,54515,54517,54520],{"class":230,"line":1807},[228,54503,11336],{"class":234},[228,54505,54506],{"class":287}," btn",[228,54508,13679],{"class":234},[228,54510,54511],{"class":238}," document.",[228,54513,54514],{"class":2077},"querySelector",[228,54516,239],{"class":238},[228,54518,54519],{"class":343},"'.btn'",[228,54521,245],{"class":238},[228,54523,54524],{"class":230,"line":1812},[228,54525,54526],{"class":297},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[228,54528,54529],{"class":230,"line":1841},[228,54530,54531],{"class":297},"    \u002F\u002F 2. 倒计时\n",[228,54533,54534,54536,54538,54540],{"class":230,"line":1846},[228,54535,52334],{"class":234},[228,54537,9553],{"class":238},[228,54539,284],{"class":234},[228,54541,54542],{"class":287}," 5\n",[228,54544,54545],{"class":230,"line":1863},[228,54546,54547],{"class":297},"    \u002F\u002F 2.1 开启定时器\n",[228,54549,54550,54552,54555,54557,54560,54562,54565],{"class":230,"line":1868},[228,54551,52334],{"class":234},[228,54553,54554],{"class":238}," n ",[228,54556,284],{"class":234},[228,54558,54559],{"class":2077}," setInterval",[228,54561,239],{"class":238},[228,54563,54564],{"class":234},"function",[228,54566,54567],{"class":238}," () {\n",[228,54569,54570,54573],{"class":230,"line":1873},[228,54571,54572],{"class":238},"      i",[228,54574,54575],{"class":234},"--\n",[228,54577,54578,54581,54583,54586,54588],{"class":230,"line":1878},[228,54579,54580],{"class":238},"      btn.innerHTML ",[228,54582,284],{"class":234},[228,54584,54585],{"class":343}," `我已经阅读用户协议(${",[228,54587,679],{"class":238},[228,54589,54590],{"class":343},"})`\n",[228,54592,54593,54596,54599,54602,54604],{"class":230,"line":1892},[228,54594,54595],{"class":234},"      if",[228,54597,54598],{"class":238}," (i ",[228,54600,54601],{"class":234},"===",[228,54603,4207],{"class":287},[228,54605,12557],{"class":238},[228,54607,54608,54611,54614],{"class":230,"line":1897},[228,54609,54610],{"class":2077},"        clearInterval",[228,54612,54613],{"class":238},"(n)  ",[228,54615,54616],{"class":297},"\u002F\u002F 关闭定时器\n",[228,54618,54619],{"class":230,"line":2691},[228,54620,54621],{"class":297},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[228,54623,54624,54627,54629],{"class":230,"line":2705},[228,54625,54626],{"class":238},"        btn.disabled ",[228,54628,284],{"class":234},[228,54630,54631],{"class":287}," false\n",[228,54633,54634,54637,54639],{"class":230,"line":2713},[228,54635,54636],{"class":238},"        btn.innerHTML ",[228,54638,284],{"class":234},[228,54640,54641],{"class":343}," '同意'\n",[228,54643,54644],{"class":230,"line":2718},[228,54645,52513],{"class":238},[228,54647,54648,54651,54653],{"class":230,"line":2724},[228,54649,54650],{"class":238},"    }, ",[228,54652,6525],{"class":287},[228,54654,245],{"class":238},[228,54656,54657],{"class":230,"line":2730},[228,54658,2514],{"emptyLinePlaceholder":157},[228,54660,54661,54663,54665],{"class":230,"line":2735},[228,54662,52532],{"class":238},[228,54664,51928],{"class":51415},[228,54666,51422],{"class":238},[228,54668,54669,54671,54673],{"class":230,"line":8063},[228,54670,51900],{"class":238},[228,54672,51915],{"class":51415},[228,54674,51422],{"class":238},[228,54676,54677],{"class":230,"line":8087},[228,54678,2514],{"emptyLinePlaceholder":157},[228,54680,54681,54683,54685],{"class":230,"line":8092},[228,54682,51900],{"class":238},[228,54684,50750],{"class":51415},[228,54686,51422],{"class":238},[19,54688,54689],{},"不要一直想着用死循环,避免死循环",[19,54691,54692,54695],{},[30,54693,54694],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22113,54697,54699],{"id":54698},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[183,54701,54702],{},[186,54703,54704],{},"法1",[220,54706,54708],{"className":50748,"code":54707,"language":50750,"meta":141,"style":141},"\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",[30,54709,54710,54720,54734,54738,54746,54760,54780,54792,54800,54806,54817,54828,54832,54836,54843,54855,54859,54863,54870,54882,54896,54909,54923,54927,54931,54938,54949,54960,54971,54983,54995,55007,55011,55015,55023,55033,55046,55058,55071,55075,55079,55086,55096,55108,55120,55131,55142,55152,55164,55176,55180,55184,55193,55205,55217,55245,55258,55262,55266,55273,55284,55288,55296,55304,55308,55316,55330,55345,55369,55377,55392,55405,55413,55434,55446,55458,55470,55482,55494,55506,55518,55527,55535,55543,55551,55563,55586,55605,55624,55643,55662,55681,55700,55720,55724,55744,55763,55783,55804,55815,55832,55842,55852,55862,55867,55872,55877,55882,55907,55920,55924,55947,55951,55959,55967,55975,55979],{"__ignoreMap":141},[228,54711,54712,54714,54716,54718],{"class":230,"line":231},[228,54713,51412],{"class":238},[228,54715,51416],{"class":51415},[228,54717,51419],{"class":2077},[228,54719,51422],{"class":238},[228,54721,54722,54724,54726,54728,54730,54732],{"class":230,"line":142},[228,54723,1148],{"class":238},[228,54725,50750],{"class":51415},[228,54727,51431],{"class":2077},[228,54729,284],{"class":238},[228,54731,51436],{"class":343},[228,54733,51422],{"class":238},[228,54735,54736],{"class":230,"line":1293},[228,54737,2514],{"emptyLinePlaceholder":157},[228,54739,54740,54742,54744],{"class":230,"line":1308},[228,54741,1148],{"class":238},[228,54743,51449],{"class":51415},[228,54745,51422],{"class":238},[228,54747,54748,54750,54752,54754,54756,54758],{"class":230,"line":1314},[228,54749,52259],{"class":238},[228,54751,51459],{"class":51415},[228,54753,51462],{"class":2077},[228,54755,284],{"class":238},[228,54757,51467],{"class":343},[228,54759,51422],{"class":238},[228,54761,54762,54764,54766,54768,54770,54772,54774,54776,54778],{"class":230,"line":1328},[228,54763,52259],{"class":238},[228,54765,51459],{"class":51415},[228,54767,15035],{"class":2077},[228,54769,284],{"class":238},[228,54771,51506],{"class":343},[228,54773,51486],{"class":2077},[228,54775,284],{"class":238},[228,54777,51513],{"class":343},[228,54779,51422],{"class":238},[228,54781,54782,54784,54786,54788,54790],{"class":230,"line":1334},[228,54783,52259],{"class":238},[228,54785,51522],{"class":51415},[228,54787,51525],{"class":238},[228,54789,51522],{"class":51415},[228,54791,51422],{"class":238},[228,54793,54794,54796,54798],{"class":230,"line":1425},[228,54795,52259],{"class":238},[228,54797,5241],{"class":51415},[228,54799,51422],{"class":238},[228,54801,54802,54804],{"class":230,"line":1431},[228,54803,6518],{"class":51415},[228,54805,15687],{"class":238},[228,54807,54808,54811,54813,54815],{"class":230,"line":1443},[228,54809,54810],{"class":287},"      padding",[228,54812,51552],{"class":238},[228,54814,430],{"class":287},[228,54816,1404],{"class":238},[228,54818,54819,54822,54824,54826],{"class":230,"line":1726},[228,54820,54821],{"class":287},"      margin",[228,54823,51552],{"class":238},[228,54825,430],{"class":287},[228,54827,1404],{"class":238},[228,54829,54830],{"class":230,"line":1731},[228,54831,2301],{"class":238},[228,54833,54834],{"class":230,"line":1737},[228,54835,2514],{"emptyLinePlaceholder":157},[228,54837,54838,54841],{"class":230,"line":1742},[228,54839,54840],{"class":51415},"    li",[228,54842,15687],{"class":238},[228,54844,54845,54848,54850,54853],{"class":230,"line":1756},[228,54846,54847],{"class":287},"      list-style",[228,54849,51552],{"class":238},[228,54851,54852],{"class":287},"none",[228,54854,1404],{"class":238},[228,54856,54857],{"class":230,"line":1761},[228,54858,2301],{"class":238},[228,54860,54861],{"class":230,"line":1767},[228,54862,2514],{"emptyLinePlaceholder":157},[228,54864,54865,54868],{"class":230,"line":1788},[228,54866,54867],{"class":2077},"    .box",[228,54869,15687],{"class":238},[228,54871,54872,54875,54877,54880],{"class":230,"line":1793},[228,54873,54874],{"class":287},"      position",[228,54876,51552],{"class":238},[228,54878,54879],{"class":287},"relative",[228,54881,1404],{"class":238},[228,54883,54884,54887,54889,54892,54894],{"class":230,"line":1807},[228,54885,54886],{"class":287},"      width",[228,54888,51552],{"class":238},[228,54890,54891],{"class":287},"976",[228,54893,51607],{"class":234},[228,54895,1404],{"class":238},[228,54897,54898,54901,54903,54905,54907],{"class":230,"line":1812},[228,54899,54900],{"class":287},"      height",[228,54902,51552],{"class":238},[228,54904,1653],{"class":287},[228,54906,51607],{"class":234},[228,54908,1404],{"class":238},[228,54910,54911,54913,54915,54917,54919,54921],{"class":230,"line":1841},[228,54912,54821],{"class":287},[228,54914,51552],{"class":238},[228,54916,549],{"class":287},[228,54918,51607],{"class":234},[228,54920,51671],{"class":287},[228,54922,1404],{"class":238},[228,54924,54925],{"class":230,"line":1846},[228,54926,2301],{"class":238},[228,54928,54929],{"class":230,"line":1863},[228,54930,2514],{"emptyLinePlaceholder":157},[228,54932,54933,54936],{"class":230,"line":1868},[228,54934,54935],{"class":2077},"    .slider-footer",[228,54937,15687],{"class":238},[228,54939,54940,54942,54944,54947],{"class":230,"line":1873},[228,54941,54874],{"class":287},[228,54943,51552],{"class":238},[228,54945,54946],{"class":287},"absolute",[228,54948,1404],{"class":238},[228,54950,54951,54954,54956,54958],{"class":230,"line":1878},[228,54952,54953],{"class":287},"      left",[228,54955,51552],{"class":238},[228,54957,430],{"class":287},[228,54959,1404],{"class":238},[228,54961,54962,54965,54967,54969],{"class":230,"line":1892},[228,54963,54964],{"class":287},"      bottom",[228,54966,51552],{"class":238},[228,54968,430],{"class":287},[228,54970,1404],{"class":238},[228,54972,54973,54975,54977,54979,54981],{"class":230,"line":1897},[228,54974,54886],{"class":287},[228,54976,51552],{"class":238},[228,54978,549],{"class":287},[228,54980,566],{"class":234},[228,54982,1404],{"class":238},[228,54984,54985,54987,54989,54991,54993],{"class":230,"line":2691},[228,54986,54900],{"class":287},[228,54988,51552],{"class":238},[228,54990,813],{"class":287},[228,54992,566],{"class":234},[228,54994,1404],{"class":238},[228,54996,54997,55000,55002,55005],{"class":230,"line":2705},[228,54998,54999],{"class":287},"      background-color",[228,55001,51552],{"class":238},[228,55003,55004],{"class":287},"skyblue",[228,55006,1404],{"class":238},[228,55008,55009],{"class":230,"line":2713},[228,55010,2301],{"class":238},[228,55012,55013],{"class":230,"line":2718},[228,55014,2514],{"emptyLinePlaceholder":157},[228,55016,55017,55019,55021],{"class":230,"line":2724},[228,55018,54935],{"class":2077},[228,55020,6940],{"class":51415},[228,55022,15687],{"class":238},[228,55024,55025,55027,55029,55031],{"class":230,"line":2730},[228,55026,54874],{"class":287},[228,55028,51552],{"class":238},[228,55030,54946],{"class":287},[228,55032,1404],{"class":238},[228,55034,55035,55038,55040,55042,55044],{"class":230,"line":2735},[228,55036,55037],{"class":287},"      font-size",[228,55039,51552],{"class":238},[228,55041,1139],{"class":287},[228,55043,51607],{"class":234},[228,55045,1404],{"class":238},[228,55047,55048,55050,55052,55054,55056],{"class":230,"line":8063},[228,55049,54953],{"class":287},[228,55051,51552],{"class":238},[228,55053,938],{"class":287},[228,55055,51607],{"class":234},[228,55057,1404],{"class":238},[228,55059,55060,55063,55065,55067,55069],{"class":230,"line":8087},[228,55061,55062],{"class":287},"      top",[228,55064,51552],{"class":238},[228,55066,557],{"class":287},[228,55068,51607],{"class":234},[228,55070,1404],{"class":238},[228,55072,55073],{"class":230,"line":8092},[228,55074,2301],{"class":238},[228,55076,55077],{"class":230,"line":8098},[228,55078,2514],{"emptyLinePlaceholder":157},[228,55080,55081,55084],{"class":230,"line":8125},[228,55082,55083],{"class":51415},"    ul",[228,55085,15687],{"class":238},[228,55087,55088,55090,55092,55094],{"class":230,"line":8130},[228,55089,54874],{"class":287},[228,55091,51552],{"class":238},[228,55093,54946],{"class":287},[228,55095,1404],{"class":238},[228,55097,55098,55100,55102,55104,55106],{"class":230,"line":8136},[228,55099,55062],{"class":287},[228,55101,51552],{"class":238},[228,55103,1019],{"class":287},[228,55105,51607],{"class":234},[228,55107,1404],{"class":238},[228,55109,55110,55112,55114,55116,55118],{"class":230,"line":8148},[228,55111,54953],{"class":287},[228,55113,51552],{"class":238},[228,55115,938],{"class":287},[228,55117,51607],{"class":234},[228,55119,1404],{"class":238},[228,55121,55122,55125,55127,55129],{"class":230,"line":8160},[228,55123,55124],{"class":287},"      display",[228,55126,51552],{"class":238},[228,55128,51592],{"class":287},[228,55130,1404],{"class":238},[228,55132,55133,55136,55138,55140],{"class":230,"line":8172},[228,55134,55135],{"class":287},"      justify-content",[228,55137,51552],{"class":238},[228,55139,51783],{"class":287},[228,55141,1404],{"class":238},[228,55143,55144,55146,55148,55150],{"class":230,"line":9831},[228,55145,54874],{"class":287},[228,55147,51552],{"class":238},[228,55149,54946],{"class":287},[228,55151,1404],{"class":238},[228,55153,55154,55156,55158,55160,55162],{"class":230,"line":9856},[228,55155,54886],{"class":287},[228,55157,51552],{"class":238},[228,55159,4106],{"class":287},[228,55161,51607],{"class":234},[228,55163,1404],{"class":238},[228,55165,55166,55168,55170,55172,55174],{"class":230,"line":9879},[228,55167,54900],{"class":287},[228,55169,51552],{"class":238},[228,55171,938],{"class":287},[228,55173,51607],{"class":234},[228,55175,1404],{"class":238},[228,55177,55178],{"class":230,"line":9903},[228,55179,2301],{"class":238},[228,55181,55182],{"class":230,"line":9908},[228,55183,2514],{"emptyLinePlaceholder":157},[228,55185,55186,55188,55191],{"class":230,"line":9913},[228,55187,55083],{"class":51415},[228,55189,55190],{"class":51415}," li",[228,55192,15687],{"class":238},[228,55194,55195,55197,55199,55201,55203],{"class":230,"line":9918},[228,55196,54886],{"class":287},[228,55198,51552],{"class":238},[228,55200,938],{"class":287},[228,55202,51607],{"class":234},[228,55204,1404],{"class":238},[228,55206,55207,55209,55211,55213,55215],{"class":230,"line":9927},[228,55208,54900],{"class":287},[228,55210,51552],{"class":238},[228,55212,938],{"class":287},[228,55214,51607],{"class":234},[228,55216,1404],{"class":238},[228,55218,55219,55221,55223,55226,55228,55230,55232,55234,55236,55238,55240,55243],{"class":230,"line":9932},[228,55220,54999],{"class":287},[228,55222,51552],{"class":238},[228,55224,55225],{"class":287},"rgba",[228,55227,239],{"class":238},[228,55229,430],{"class":287},[228,55231,12550],{"class":238},[228,55233,430],{"class":287},[228,55235,12550],{"class":238},[228,55237,430],{"class":287},[228,55239,12550],{"class":238},[228,55241,55242],{"class":287},".4",[228,55244,2833],{"class":238},[228,55246,55247,55250,55252,55254,55256],{"class":230,"line":9938},[228,55248,55249],{"class":287},"      border-radius",[228,55251,51552],{"class":238},[228,55253,684],{"class":287},[228,55255,51607],{"class":234},[228,55257,1404],{"class":238},[228,55259,55260],{"class":230,"line":9959},[228,55261,2301],{"class":238},[228,55263,55264],{"class":230,"line":9965},[228,55265,2514],{"emptyLinePlaceholder":157},[228,55267,55268,55271],{"class":230,"line":9979},[228,55269,55270],{"class":2077},"    .activate",[228,55272,15687],{"class":238},[228,55274,55275,55277,55279,55282],{"class":230,"line":9985},[228,55276,54999],{"class":287},[228,55278,51552],{"class":238},[228,55280,55281],{"class":287},"#f7f7f7",[228,55283,1404],{"class":238},[228,55285,55286],{"class":230,"line":10012},[228,55287,2301],{"class":238},[228,55289,55290,55292,55294],{"class":230,"line":10021},[228,55291,52532],{"class":238},[228,55293,5241],{"class":51415},[228,55295,51422],{"class":238},[228,55297,55298,55300,55302],{"class":230,"line":10027},[228,55299,51900],{"class":238},[228,55301,51449],{"class":51415},[228,55303,51422],{"class":238},[228,55305,55306],{"class":230,"line":10035},[228,55307,2514],{"emptyLinePlaceholder":157},[228,55309,55310,55312,55314],{"class":230,"line":10040},[228,55311,1148],{"class":238},[228,55313,51915],{"class":51415},[228,55315,51422],{"class":238},[228,55317,55318,55320,55322,55324,55326,55328],{"class":230,"line":16719},[228,55319,52259],{"class":238},[228,55321,51726],{"class":51415},[228,55323,53601],{"class":2077},[228,55325,284],{"class":238},[228,55327,53606],{"class":343},[228,55329,51422],{"class":238},[228,55331,55332,55334,55336,55338,55340,55343],{"class":230,"line":16725},[228,55333,51456],{"class":238},[228,55335,51726],{"class":51415},[228,55337,53601],{"class":2077},[228,55339,284],{"class":238},[228,55341,55342],{"class":343},"\"slider-wrapper\"",[228,55344,51422],{"class":238},[228,55346,55347,55350,55352,55355,55357,55360,55363,55365,55367],{"class":230,"line":16748},[228,55348,55349],{"class":238},"      \u003C",[228,55351,1576],{"class":51415},[228,55353,55354],{"class":2077}," src",[228,55356,284],{"class":238},[228,55358,55359],{"class":343},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[228,55361,55362],{"class":2077}," alt",[228,55364,284],{"class":238},[228,55366,7767],{"class":343},[228,55368,51422],{"class":238},[228,55370,55371,55373,55375],{"class":230,"line":16754},[228,55372,51891],{"class":238},[228,55374,51726],{"class":51415},[228,55376,51422],{"class":238},[228,55378,55379,55381,55383,55385,55387,55390],{"class":230,"line":16777},[228,55380,51456],{"class":238},[228,55382,51726],{"class":51415},[228,55384,53601],{"class":2077},[228,55386,284],{"class":238},[228,55388,55389],{"class":343},"\"slider-footer\"",[228,55391,51422],{"class":238},[228,55393,55394,55396,55398,55401,55403],{"class":230,"line":16791},[228,55395,55349],{"class":238},[228,55397,19],{"class":51415},[228,55399,55400],{"class":238},">对人类来说会不会太超前了?\u003C\u002F",[228,55402,19],{"class":51415},[228,55404,51422],{"class":238},[228,55406,55407,55409,55411],{"class":230,"line":16811},[228,55408,55349],{"class":238},[228,55410,1245],{"class":51415},[228,55412,51422],{"class":238},[228,55414,55415,55418,55420,55422,55424,55427,55430,55432],{"class":230,"line":16817},[228,55416,55417],{"class":238},"        \u003C",[228,55419,186],{"class":51415},[228,55421,53601],{"class":2077},[228,55423,284],{"class":238},[228,55425,55426],{"class":343},"\"activate\"",[228,55428,55429],{"class":238},">\u003C\u002F",[228,55431,186],{"class":51415},[228,55433,51422],{"class":238},[228,55435,55436,55438,55440,55442,55444],{"class":230,"line":16828},[228,55437,55417],{"class":238},[228,55439,186],{"class":51415},[228,55441,55429],{"class":238},[228,55443,186],{"class":51415},[228,55445,51422],{"class":238},[228,55447,55448,55450,55452,55454,55456],{"class":230,"line":16851},[228,55449,55417],{"class":238},[228,55451,186],{"class":51415},[228,55453,55429],{"class":238},[228,55455,186],{"class":51415},[228,55457,51422],{"class":238},[228,55459,55460,55462,55464,55466,55468],{"class":230,"line":16873},[228,55461,55417],{"class":238},[228,55463,186],{"class":51415},[228,55465,55429],{"class":238},[228,55467,186],{"class":51415},[228,55469,51422],{"class":238},[228,55471,55472,55474,55476,55478,55480],{"class":230,"line":16878},[228,55473,55417],{"class":238},[228,55475,186],{"class":51415},[228,55477,55429],{"class":238},[228,55479,186],{"class":51415},[228,55481,51422],{"class":238},[228,55483,55484,55486,55488,55490,55492],{"class":230,"line":16884},[228,55485,55417],{"class":238},[228,55487,186],{"class":51415},[228,55489,55429],{"class":238},[228,55491,186],{"class":51415},[228,55493,51422],{"class":238},[228,55495,55496,55498,55500,55502,55504],{"class":230,"line":16898},[228,55497,55417],{"class":238},[228,55499,186],{"class":51415},[228,55501,55429],{"class":238},[228,55503,186],{"class":51415},[228,55505,51422],{"class":238},[228,55507,55508,55510,55512,55514,55516],{"class":230,"line":16911},[228,55509,55417],{"class":238},[228,55511,186],{"class":51415},[228,55513,55429],{"class":238},[228,55515,186],{"class":51415},[228,55517,51422],{"class":238},[228,55519,55520,55523,55525],{"class":230,"line":16916},[228,55521,55522],{"class":238},"      \u003C\u002F",[228,55524,1245],{"class":51415},[228,55526,51422],{"class":238},[228,55528,55529,55531,55533],{"class":230,"line":16930},[228,55530,51891],{"class":238},[228,55532,51726],{"class":51415},[228,55534,51422],{"class":238},[228,55536,55537,55539,55541],{"class":230,"line":16935},[228,55538,52532],{"class":238},[228,55540,51726],{"class":51415},[228,55542,51422],{"class":238},[228,55544,55545,55547,55549],{"class":230,"line":16941},[228,55546,52259],{"class":238},[228,55548,51928],{"class":51415},[228,55550,51422],{"class":238},[228,55552,55553,55555,55558,55560],{"class":230,"line":16946},[228,55554,11336],{"class":234},[228,55556,55557],{"class":287}," arrImage",[228,55559,13679],{"class":234},[228,55561,55562],{"class":238}," [\n",[228,55564,55565,55568,55571,55574,55577,55580,55583],{"class":230,"line":16960},[228,55566,55567],{"class":238},"      { url: ",[228,55569,55570],{"class":343},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[228,55572,55573],{"class":238},", title: ",[228,55575,55576],{"class":343},"'对人类来说会不会太超前了?'",[228,55578,55579],{"class":238},", color: ",[228,55581,55582],{"class":343},"'rgba(100,67,68)'",[228,55584,55585],{"class":238}," },\n",[228,55587,55588,55590,55593,55595,55598,55600,55603],{"class":230,"line":16965},[228,55589,55567],{"class":238},[228,55591,55592],{"class":343},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[228,55594,55573],{"class":238},[228,55596,55597],{"class":343},"'开启剑与雪的黑暗传说!'",[228,55599,55579],{"class":238},[228,55601,55602],{"class":343},"'rgba(43,35,26)'",[228,55604,55585],{"class":238},[228,55606,55607,55609,55612,55614,55617,55619,55622],{"class":230,"line":16970},[228,55608,55567],{"class":238},[228,55610,55611],{"class":343},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[228,55613,55573],{"class":238},[228,55615,55616],{"class":343},"'真正的jo厨出现了!'",[228,55618,55579],{"class":238},[228,55620,55621],{"class":343},"'rgba(36,31,33)'",[228,55623,55585],{"class":238},[228,55625,55626,55628,55631,55633,55636,55638,55641],{"class":230,"line":16984},[228,55627,55567],{"class":238},[228,55629,55630],{"class":343},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[228,55632,55573],{"class":238},[228,55634,55635],{"class":343},"'李玉刚:让世界通过b站看到东方大国文化'",[228,55637,55579],{"class":238},[228,55639,55640],{"class":343},"'rgba(139,98,66)'",[228,55642,55585],{"class":238},[228,55644,55645,55647,55650,55652,55655,55657,55660],{"class":230,"line":16996},[228,55646,55567],{"class":238},[228,55648,55649],{"class":343},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[228,55651,55573],{"class":238},[228,55653,55654],{"class":343},"'快来分享你的寒假日常吧'",[228,55656,55579],{"class":238},[228,55658,55659],{"class":343},"'rgba(67,90,92)'",[228,55661,55585],{"class":238},[228,55663,55664,55666,55669,55671,55674,55676,55679],{"class":230,"line":17001},[228,55665,55567],{"class":238},[228,55667,55668],{"class":343},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[228,55670,55573],{"class":238},[228,55672,55673],{"class":343},"'哔哩哔哩小年YEAR'",[228,55675,55579],{"class":238},[228,55677,55678],{"class":343},"'rgba(166,131,143)'",[228,55680,55585],{"class":238},[228,55682,55683,55685,55688,55690,55693,55695,55698],{"class":230,"line":17014},[228,55684,55567],{"class":238},[228,55686,55687],{"class":343},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[228,55689,55573],{"class":238},[228,55691,55692],{"class":343},"'一站式解决你的电脑配置问题'",[228,55694,55579],{"class":238},[228,55696,55697],{"class":343},"'rgba(53,29,25)'",[228,55699,55585],{"class":238},[228,55701,55702,55704,55707,55709,55712,55714,55717],{"class":230,"line":17019},[228,55703,55567],{"class":238},[228,55705,55706],{"class":343},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[228,55708,55573],{"class":238},[228,55710,55711],{"class":343},"'谁不想和小猫咪贴贴呢?'",[228,55713,55579],{"class":238},[228,55715,55716],{"class":343},"'rgba(99,72,114)'",[228,55718,55719],{"class":238}," }\n",[228,55721,55722],{"class":230,"line":17024},[228,55723,53224],{"class":238},[228,55725,55726,55728,55731,55733,55735,55737,55739,55742],{"class":230,"line":17029},[228,55727,11336],{"class":234},[228,55729,55730],{"class":287}," img",[228,55732,13679],{"class":234},[228,55734,54511],{"class":238},[228,55736,54514],{"class":2077},[228,55738,239],{"class":238},[228,55740,55741],{"class":343},"'.slider-wrapper img'",[228,55743,245],{"class":238},[228,55745,55746,55748,55750,55752,55754,55756,55758,55761],{"class":230,"line":17042},[228,55747,11336],{"class":234},[228,55749,6940],{"class":287},[228,55751,13679],{"class":234},[228,55753,54511],{"class":238},[228,55755,54514],{"class":2077},[228,55757,239],{"class":238},[228,55759,55760],{"class":343},"'.slider-footer p'",[228,55762,245],{"class":238},[228,55764,55765,55767,55770,55772,55774,55776,55778,55781],{"class":230,"line":17047},[228,55766,11336],{"class":234},[228,55768,55769],{"class":287}," color",[228,55771,13679],{"class":234},[228,55773,54511],{"class":238},[228,55775,54514],{"class":2077},[228,55777,239],{"class":238},[228,55779,55780],{"class":343},"'.slider-footer'",[228,55782,245],{"class":238},[228,55784,55785,55787,55790,55792,55794,55797,55799,55802],{"class":230,"line":32748},[228,55786,11336],{"class":234},[228,55788,55789],{"class":287}," lis",[228,55791,13679],{"class":234},[228,55793,54511],{"class":238},[228,55795,55796],{"class":2077},"querySelectorAll",[228,55798,239],{"class":238},[228,55800,55801],{"class":343},"'.slider-footer ul li'",[228,55803,245],{"class":238},[228,55805,55806,55808,55810,55812],{"class":230,"line":32754},[228,55807,52334],{"class":234},[228,55809,9553],{"class":238},[228,55811,284],{"class":234},[228,55813,55814],{"class":287}," 1\n",[228,55816,55817,55819,55822,55824,55826,55828,55830],{"class":230,"line":32760},[228,55818,52334],{"class":234},[228,55820,55821],{"class":238}," timer ",[228,55823,284],{"class":234},[228,55825,54559],{"class":2077},[228,55827,239],{"class":238},[228,55829,54564],{"class":234},[228,55831,54567],{"class":238},[228,55833,55834,55837,55839],{"class":230,"line":32766},[228,55835,55836],{"class":238},"      img.src ",[228,55838,284],{"class":234},[228,55840,55841],{"class":238}," arrImage[i].url\n",[228,55843,55844,55847,55849],{"class":230,"line":32772},[228,55845,55846],{"class":238},"      p.innerHTML ",[228,55848,284],{"class":234},[228,55850,55851],{"class":238}," arrImage[i].title\n",[228,55853,55854,55857,55859],{"class":230,"line":32783},[228,55855,55856],{"class":238},"      color.style.backgroundColor ",[228,55858,284],{"class":234},[228,55860,55861],{"class":238}," arrImage[i].color\n",[228,55863,55864],{"class":230,"line":32789},[228,55865,55866],{"class":297},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[228,55868,55869],{"class":230,"line":32809},[228,55870,55871],{"class":297},"      \u002F\u002F li.classList.add('activate')\n",[228,55873,55874],{"class":230,"line":32815},[228,55875,55876],{"class":297},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[228,55878,55879],{"class":230,"line":32826},[228,55880,55881],{"class":297},"      \u002F\u002F lis[i].classList.remove('activate')\n",[228,55883,55884,55887,55889,55891,55894,55897,55900,55902,55905],{"class":230,"line":32832},[228,55885,55886],{"class":238},"      document.",[228,55888,54514],{"class":2077},[228,55890,239],{"class":238},[228,55892,55893],{"class":343},"'.activate'",[228,55895,55896],{"class":238},")?.classList.",[228,55898,55899],{"class":2077},"toggle",[228,55901,239],{"class":238},[228,55903,55904],{"class":343},"'activate'",[228,55906,245],{"class":238},[228,55908,55909,55912,55914,55916,55918],{"class":230,"line":32838},[228,55910,55911],{"class":238},"      lis[i].classList.",[228,55913,5449],{"class":2077},[228,55915,239],{"class":238},[228,55917,55904],{"class":343},[228,55919,245],{"class":238},[228,55921,55922],{"class":230,"line":32844},[228,55923,2514],{"emptyLinePlaceholder":157},[228,55925,55926,55929,55931,55933,55935,55937,55939,55941,55944],{"class":230,"line":32850},[228,55927,55928],{"class":238},"      i ",[228,55930,284],{"class":234},[228,55932,54598],{"class":238},[228,55934,719],{"class":234},[228,55936,25234],{"class":287},[228,55938,13829],{"class":238},[228,55940,566],{"class":234},[228,55942,55943],{"class":238}," arrImage.",[228,55945,55946],{"class":287},"length\n",[228,55948,55949],{"class":230,"line":32856},[228,55950,2514],{"emptyLinePlaceholder":157},[228,55952,55953,55955,55957],{"class":230,"line":32862},[228,55954,54650],{"class":238},[228,55956,6525],{"class":287},[228,55958,245],{"class":238},[228,55960,55961,55963,55965],{"class":230,"line":32868},[228,55962,52532],{"class":238},[228,55964,51928],{"class":51415},[228,55966,51422],{"class":238},[228,55968,55969,55971,55973],{"class":230,"line":32888},[228,55970,51900],{"class":238},[228,55972,51915],{"class":51415},[228,55974,51422],{"class":238},[228,55976,55977],{"class":230,"line":32894},[228,55978,2514],{"emptyLinePlaceholder":157},[228,55980,55981,55983,55985],{"class":230,"line":32910},[228,55982,51900],{"class":238},[228,55984,50750],{"class":51415},[228,55986,51422],{"class":238},[19,55988,55989],{},[1576,55990],{"alt":141,"src":55991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,55993,55994],{},"?.就是短路保护,确保输出正常进行",[19,55996,55997],{},"不要忘记取余%,有时候可以用",[19,55999,56000],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[183,56002,56003],{"start":142},[186,56004,56005],{},"法2",[220,56007,56009],{"className":50748,"code":56008,"language":50750,"meta":141,"style":141},"\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",[30,56010,56011,56021,56035,56039,56047,56061,56081,56093,56101,56107,56117,56127,56131,56135,56141,56151,56155,56159,56165,56175,56187,56199,56213,56217,56221,56227,56237,56247,56257,56269,56281,56291,56295,56299,56307,56317,56329,56341,56353,56357,56361,56367,56377,56389,56401,56411,56421,56431,56443,56455,56459,56463,56471,56483,56495,56521,56533,56537,56541,56547,56557,56561,56569,56577,56581,56589,56603,56617,56637,56645,56659,56671,56679,56697,56709,56721,56733,56745,56757,56769,56781,56789,56797,56805,56813,56824,56840,56856,56872,56888,56904,56920,56936,56952,56956,56961,56979,56997,57007,57012,57017,57028,57034,57049,57058,57062,57067,57076,57081,57090,57095,57100,57105,57128,57158,57162,57170,57174,57182,57190,57194],{"__ignoreMap":141},[228,56012,56013,56015,56017,56019],{"class":230,"line":231},[228,56014,51412],{"class":238},[228,56016,51416],{"class":51415},[228,56018,51419],{"class":2077},[228,56020,51422],{"class":238},[228,56022,56023,56025,56027,56029,56031,56033],{"class":230,"line":142},[228,56024,1148],{"class":238},[228,56026,50750],{"class":51415},[228,56028,51431],{"class":2077},[228,56030,284],{"class":238},[228,56032,51436],{"class":343},[228,56034,51422],{"class":238},[228,56036,56037],{"class":230,"line":1293},[228,56038,2514],{"emptyLinePlaceholder":157},[228,56040,56041,56043,56045],{"class":230,"line":1308},[228,56042,1148],{"class":238},[228,56044,51449],{"class":51415},[228,56046,51422],{"class":238},[228,56048,56049,56051,56053,56055,56057,56059],{"class":230,"line":1314},[228,56050,52259],{"class":238},[228,56052,51459],{"class":51415},[228,56054,51462],{"class":2077},[228,56056,284],{"class":238},[228,56058,51467],{"class":343},[228,56060,51422],{"class":238},[228,56062,56063,56065,56067,56069,56071,56073,56075,56077,56079],{"class":230,"line":1328},[228,56064,52259],{"class":238},[228,56066,51459],{"class":51415},[228,56068,15035],{"class":2077},[228,56070,284],{"class":238},[228,56072,51506],{"class":343},[228,56074,51486],{"class":2077},[228,56076,284],{"class":238},[228,56078,51513],{"class":343},[228,56080,51422],{"class":238},[228,56082,56083,56085,56087,56089,56091],{"class":230,"line":1334},[228,56084,52259],{"class":238},[228,56086,51522],{"class":51415},[228,56088,51525],{"class":238},[228,56090,51522],{"class":51415},[228,56092,51422],{"class":238},[228,56094,56095,56097,56099],{"class":230,"line":1425},[228,56096,52259],{"class":238},[228,56098,5241],{"class":51415},[228,56100,51422],{"class":238},[228,56102,56103,56105],{"class":230,"line":1431},[228,56104,6518],{"class":51415},[228,56106,15687],{"class":238},[228,56108,56109,56111,56113,56115],{"class":230,"line":1443},[228,56110,54810],{"class":287},[228,56112,51552],{"class":238},[228,56114,430],{"class":287},[228,56116,1404],{"class":238},[228,56118,56119,56121,56123,56125],{"class":230,"line":1726},[228,56120,54821],{"class":287},[228,56122,51552],{"class":238},[228,56124,430],{"class":287},[228,56126,1404],{"class":238},[228,56128,56129],{"class":230,"line":1731},[228,56130,2301],{"class":238},[228,56132,56133],{"class":230,"line":1737},[228,56134,2514],{"emptyLinePlaceholder":157},[228,56136,56137,56139],{"class":230,"line":1742},[228,56138,54840],{"class":51415},[228,56140,15687],{"class":238},[228,56142,56143,56145,56147,56149],{"class":230,"line":1756},[228,56144,54847],{"class":287},[228,56146,51552],{"class":238},[228,56148,54852],{"class":287},[228,56150,1404],{"class":238},[228,56152,56153],{"class":230,"line":1761},[228,56154,2301],{"class":238},[228,56156,56157],{"class":230,"line":1767},[228,56158,2514],{"emptyLinePlaceholder":157},[228,56160,56161,56163],{"class":230,"line":1788},[228,56162,54867],{"class":2077},[228,56164,15687],{"class":238},[228,56166,56167,56169,56171,56173],{"class":230,"line":1793},[228,56168,54874],{"class":287},[228,56170,51552],{"class":238},[228,56172,54879],{"class":287},[228,56174,1404],{"class":238},[228,56176,56177,56179,56181,56183,56185],{"class":230,"line":1807},[228,56178,54886],{"class":287},[228,56180,51552],{"class":238},[228,56182,54891],{"class":287},[228,56184,51607],{"class":234},[228,56186,1404],{"class":238},[228,56188,56189,56191,56193,56195,56197],{"class":230,"line":1812},[228,56190,54900],{"class":287},[228,56192,51552],{"class":238},[228,56194,1653],{"class":287},[228,56196,51607],{"class":234},[228,56198,1404],{"class":238},[228,56200,56201,56203,56205,56207,56209,56211],{"class":230,"line":1841},[228,56202,54821],{"class":287},[228,56204,51552],{"class":238},[228,56206,549],{"class":287},[228,56208,51607],{"class":234},[228,56210,51671],{"class":287},[228,56212,1404],{"class":238},[228,56214,56215],{"class":230,"line":1846},[228,56216,2301],{"class":238},[228,56218,56219],{"class":230,"line":1863},[228,56220,2514],{"emptyLinePlaceholder":157},[228,56222,56223,56225],{"class":230,"line":1868},[228,56224,54935],{"class":2077},[228,56226,15687],{"class":238},[228,56228,56229,56231,56233,56235],{"class":230,"line":1873},[228,56230,54874],{"class":287},[228,56232,51552],{"class":238},[228,56234,54946],{"class":287},[228,56236,1404],{"class":238},[228,56238,56239,56241,56243,56245],{"class":230,"line":1878},[228,56240,54953],{"class":287},[228,56242,51552],{"class":238},[228,56244,430],{"class":287},[228,56246,1404],{"class":238},[228,56248,56249,56251,56253,56255],{"class":230,"line":1892},[228,56250,54964],{"class":287},[228,56252,51552],{"class":238},[228,56254,430],{"class":287},[228,56256,1404],{"class":238},[228,56258,56259,56261,56263,56265,56267],{"class":230,"line":1897},[228,56260,54886],{"class":287},[228,56262,51552],{"class":238},[228,56264,549],{"class":287},[228,56266,566],{"class":234},[228,56268,1404],{"class":238},[228,56270,56271,56273,56275,56277,56279],{"class":230,"line":2691},[228,56272,54900],{"class":287},[228,56274,51552],{"class":238},[228,56276,813],{"class":287},[228,56278,566],{"class":234},[228,56280,1404],{"class":238},[228,56282,56283,56285,56287,56289],{"class":230,"line":2705},[228,56284,54999],{"class":287},[228,56286,51552],{"class":238},[228,56288,55004],{"class":287},[228,56290,1404],{"class":238},[228,56292,56293],{"class":230,"line":2713},[228,56294,2301],{"class":238},[228,56296,56297],{"class":230,"line":2718},[228,56298,2514],{"emptyLinePlaceholder":157},[228,56300,56301,56303,56305],{"class":230,"line":2724},[228,56302,54935],{"class":2077},[228,56304,6940],{"class":51415},[228,56306,15687],{"class":238},[228,56308,56309,56311,56313,56315],{"class":230,"line":2730},[228,56310,54874],{"class":287},[228,56312,51552],{"class":238},[228,56314,54946],{"class":287},[228,56316,1404],{"class":238},[228,56318,56319,56321,56323,56325,56327],{"class":230,"line":2735},[228,56320,55037],{"class":287},[228,56322,51552],{"class":238},[228,56324,1139],{"class":287},[228,56326,51607],{"class":234},[228,56328,1404],{"class":238},[228,56330,56331,56333,56335,56337,56339],{"class":230,"line":8063},[228,56332,54953],{"class":287},[228,56334,51552],{"class":238},[228,56336,938],{"class":287},[228,56338,51607],{"class":234},[228,56340,1404],{"class":238},[228,56342,56343,56345,56347,56349,56351],{"class":230,"line":8087},[228,56344,55062],{"class":287},[228,56346,51552],{"class":238},[228,56348,557],{"class":287},[228,56350,51607],{"class":234},[228,56352,1404],{"class":238},[228,56354,56355],{"class":230,"line":8092},[228,56356,2301],{"class":238},[228,56358,56359],{"class":230,"line":8098},[228,56360,2514],{"emptyLinePlaceholder":157},[228,56362,56363,56365],{"class":230,"line":8125},[228,56364,55083],{"class":51415},[228,56366,15687],{"class":238},[228,56368,56369,56371,56373,56375],{"class":230,"line":8130},[228,56370,54874],{"class":287},[228,56372,51552],{"class":238},[228,56374,54946],{"class":287},[228,56376,1404],{"class":238},[228,56378,56379,56381,56383,56385,56387],{"class":230,"line":8136},[228,56380,55062],{"class":287},[228,56382,51552],{"class":238},[228,56384,1019],{"class":287},[228,56386,51607],{"class":234},[228,56388,1404],{"class":238},[228,56390,56391,56393,56395,56397,56399],{"class":230,"line":8148},[228,56392,54953],{"class":287},[228,56394,51552],{"class":238},[228,56396,938],{"class":287},[228,56398,51607],{"class":234},[228,56400,1404],{"class":238},[228,56402,56403,56405,56407,56409],{"class":230,"line":8160},[228,56404,55124],{"class":287},[228,56406,51552],{"class":238},[228,56408,51592],{"class":287},[228,56410,1404],{"class":238},[228,56412,56413,56415,56417,56419],{"class":230,"line":8172},[228,56414,55135],{"class":287},[228,56416,51552],{"class":238},[228,56418,51783],{"class":287},[228,56420,1404],{"class":238},[228,56422,56423,56425,56427,56429],{"class":230,"line":9831},[228,56424,54874],{"class":287},[228,56426,51552],{"class":238},[228,56428,54946],{"class":287},[228,56430,1404],{"class":238},[228,56432,56433,56435,56437,56439,56441],{"class":230,"line":9856},[228,56434,54886],{"class":287},[228,56436,51552],{"class":238},[228,56438,4106],{"class":287},[228,56440,51607],{"class":234},[228,56442,1404],{"class":238},[228,56444,56445,56447,56449,56451,56453],{"class":230,"line":9879},[228,56446,54900],{"class":287},[228,56448,51552],{"class":238},[228,56450,938],{"class":287},[228,56452,51607],{"class":234},[228,56454,1404],{"class":238},[228,56456,56457],{"class":230,"line":9903},[228,56458,2301],{"class":238},[228,56460,56461],{"class":230,"line":9908},[228,56462,2514],{"emptyLinePlaceholder":157},[228,56464,56465,56467,56469],{"class":230,"line":9913},[228,56466,55083],{"class":51415},[228,56468,55190],{"class":51415},[228,56470,15687],{"class":238},[228,56472,56473,56475,56477,56479,56481],{"class":230,"line":9918},[228,56474,54886],{"class":287},[228,56476,51552],{"class":238},[228,56478,938],{"class":287},[228,56480,51607],{"class":234},[228,56482,1404],{"class":238},[228,56484,56485,56487,56489,56491,56493],{"class":230,"line":9927},[228,56486,54900],{"class":287},[228,56488,51552],{"class":238},[228,56490,938],{"class":287},[228,56492,51607],{"class":234},[228,56494,1404],{"class":238},[228,56496,56497,56499,56501,56503,56505,56507,56509,56511,56513,56515,56517,56519],{"class":230,"line":9932},[228,56498,54999],{"class":287},[228,56500,51552],{"class":238},[228,56502,55225],{"class":287},[228,56504,239],{"class":238},[228,56506,430],{"class":287},[228,56508,12550],{"class":238},[228,56510,430],{"class":287},[228,56512,12550],{"class":238},[228,56514,430],{"class":287},[228,56516,12550],{"class":238},[228,56518,55242],{"class":287},[228,56520,2833],{"class":238},[228,56522,56523,56525,56527,56529,56531],{"class":230,"line":9938},[228,56524,55249],{"class":287},[228,56526,51552],{"class":238},[228,56528,684],{"class":287},[228,56530,51607],{"class":234},[228,56532,1404],{"class":238},[228,56534,56535],{"class":230,"line":9959},[228,56536,2301],{"class":238},[228,56538,56539],{"class":230,"line":9965},[228,56540,2514],{"emptyLinePlaceholder":157},[228,56542,56543,56545],{"class":230,"line":9979},[228,56544,55270],{"class":2077},[228,56546,15687],{"class":238},[228,56548,56549,56551,56553,56555],{"class":230,"line":9985},[228,56550,54999],{"class":287},[228,56552,51552],{"class":238},[228,56554,55281],{"class":287},[228,56556,1404],{"class":238},[228,56558,56559],{"class":230,"line":10012},[228,56560,2301],{"class":238},[228,56562,56563,56565,56567],{"class":230,"line":10021},[228,56564,52532],{"class":238},[228,56566,5241],{"class":51415},[228,56568,51422],{"class":238},[228,56570,56571,56573,56575],{"class":230,"line":10027},[228,56572,51900],{"class":238},[228,56574,51449],{"class":51415},[228,56576,51422],{"class":238},[228,56578,56579],{"class":230,"line":10035},[228,56580,2514],{"emptyLinePlaceholder":157},[228,56582,56583,56585,56587],{"class":230,"line":10040},[228,56584,1148],{"class":238},[228,56586,51915],{"class":51415},[228,56588,51422],{"class":238},[228,56590,56591,56593,56595,56597,56599,56601],{"class":230,"line":16719},[228,56592,52259],{"class":238},[228,56594,51726],{"class":51415},[228,56596,53601],{"class":2077},[228,56598,284],{"class":238},[228,56600,53606],{"class":343},[228,56602,51422],{"class":238},[228,56604,56605,56607,56609,56611,56613,56615],{"class":230,"line":16725},[228,56606,51456],{"class":238},[228,56608,51726],{"class":51415},[228,56610,53601],{"class":2077},[228,56612,284],{"class":238},[228,56614,55342],{"class":343},[228,56616,51422],{"class":238},[228,56618,56619,56621,56623,56625,56627,56629,56631,56633,56635],{"class":230,"line":16748},[228,56620,55349],{"class":238},[228,56622,1576],{"class":51415},[228,56624,55354],{"class":2077},[228,56626,284],{"class":238},[228,56628,55359],{"class":343},[228,56630,55362],{"class":2077},[228,56632,284],{"class":238},[228,56634,7767],{"class":343},[228,56636,51422],{"class":238},[228,56638,56639,56641,56643],{"class":230,"line":16754},[228,56640,51891],{"class":238},[228,56642,51726],{"class":51415},[228,56644,51422],{"class":238},[228,56646,56647,56649,56651,56653,56655,56657],{"class":230,"line":16777},[228,56648,51456],{"class":238},[228,56650,51726],{"class":51415},[228,56652,53601],{"class":2077},[228,56654,284],{"class":238},[228,56656,55389],{"class":343},[228,56658,51422],{"class":238},[228,56660,56661,56663,56665,56667,56669],{"class":230,"line":16791},[228,56662,55349],{"class":238},[228,56664,19],{"class":51415},[228,56666,55400],{"class":238},[228,56668,19],{"class":51415},[228,56670,51422],{"class":238},[228,56672,56673,56675,56677],{"class":230,"line":16811},[228,56674,55349],{"class":238},[228,56676,1245],{"class":51415},[228,56678,51422],{"class":238},[228,56680,56681,56683,56685,56687,56689,56691,56693,56695],{"class":230,"line":16817},[228,56682,55417],{"class":238},[228,56684,186],{"class":51415},[228,56686,53601],{"class":2077},[228,56688,284],{"class":238},[228,56690,55426],{"class":343},[228,56692,55429],{"class":238},[228,56694,186],{"class":51415},[228,56696,51422],{"class":238},[228,56698,56699,56701,56703,56705,56707],{"class":230,"line":16828},[228,56700,55417],{"class":238},[228,56702,186],{"class":51415},[228,56704,55429],{"class":238},[228,56706,186],{"class":51415},[228,56708,51422],{"class":238},[228,56710,56711,56713,56715,56717,56719],{"class":230,"line":16851},[228,56712,55417],{"class":238},[228,56714,186],{"class":51415},[228,56716,55429],{"class":238},[228,56718,186],{"class":51415},[228,56720,51422],{"class":238},[228,56722,56723,56725,56727,56729,56731],{"class":230,"line":16873},[228,56724,55417],{"class":238},[228,56726,186],{"class":51415},[228,56728,55429],{"class":238},[228,56730,186],{"class":51415},[228,56732,51422],{"class":238},[228,56734,56735,56737,56739,56741,56743],{"class":230,"line":16878},[228,56736,55417],{"class":238},[228,56738,186],{"class":51415},[228,56740,55429],{"class":238},[228,56742,186],{"class":51415},[228,56744,51422],{"class":238},[228,56746,56747,56749,56751,56753,56755],{"class":230,"line":16884},[228,56748,55417],{"class":238},[228,56750,186],{"class":51415},[228,56752,55429],{"class":238},[228,56754,186],{"class":51415},[228,56756,51422],{"class":238},[228,56758,56759,56761,56763,56765,56767],{"class":230,"line":16898},[228,56760,55417],{"class":238},[228,56762,186],{"class":51415},[228,56764,55429],{"class":238},[228,56766,186],{"class":51415},[228,56768,51422],{"class":238},[228,56770,56771,56773,56775,56777,56779],{"class":230,"line":16911},[228,56772,55417],{"class":238},[228,56774,186],{"class":51415},[228,56776,55429],{"class":238},[228,56778,186],{"class":51415},[228,56780,51422],{"class":238},[228,56782,56783,56785,56787],{"class":230,"line":16916},[228,56784,55522],{"class":238},[228,56786,1245],{"class":51415},[228,56788,51422],{"class":238},[228,56790,56791,56793,56795],{"class":230,"line":16930},[228,56792,51891],{"class":238},[228,56794,51726],{"class":51415},[228,56796,51422],{"class":238},[228,56798,56799,56801,56803],{"class":230,"line":16935},[228,56800,52532],{"class":238},[228,56802,51726],{"class":51415},[228,56804,51422],{"class":238},[228,56806,56807,56809,56811],{"class":230,"line":16941},[228,56808,52259],{"class":238},[228,56810,51928],{"class":51415},[228,56812,51422],{"class":238},[228,56814,56815,56817,56820,56822],{"class":230,"line":16946},[228,56816,11336],{"class":234},[228,56818,56819],{"class":287}," sliderData",[228,56821,13679],{"class":234},[228,56823,55562],{"class":238},[228,56825,56826,56828,56830,56832,56834,56836,56838],{"class":230,"line":16960},[228,56827,55567],{"class":238},[228,56829,55570],{"class":343},[228,56831,55573],{"class":238},[228,56833,55576],{"class":343},[228,56835,55579],{"class":238},[228,56837,55582],{"class":343},[228,56839,55585],{"class":238},[228,56841,56842,56844,56846,56848,56850,56852,56854],{"class":230,"line":16965},[228,56843,55567],{"class":238},[228,56845,55592],{"class":343},[228,56847,55573],{"class":238},[228,56849,55597],{"class":343},[228,56851,55579],{"class":238},[228,56853,55602],{"class":343},[228,56855,55585],{"class":238},[228,56857,56858,56860,56862,56864,56866,56868,56870],{"class":230,"line":16970},[228,56859,55567],{"class":238},[228,56861,55611],{"class":343},[228,56863,55573],{"class":238},[228,56865,55616],{"class":343},[228,56867,55579],{"class":238},[228,56869,55621],{"class":343},[228,56871,55585],{"class":238},[228,56873,56874,56876,56878,56880,56882,56884,56886],{"class":230,"line":16984},[228,56875,55567],{"class":238},[228,56877,55630],{"class":343},[228,56879,55573],{"class":238},[228,56881,55635],{"class":343},[228,56883,55579],{"class":238},[228,56885,55640],{"class":343},[228,56887,55585],{"class":238},[228,56889,56890,56892,56894,56896,56898,56900,56902],{"class":230,"line":16996},[228,56891,55567],{"class":238},[228,56893,55649],{"class":343},[228,56895,55573],{"class":238},[228,56897,55654],{"class":343},[228,56899,55579],{"class":238},[228,56901,55659],{"class":343},[228,56903,55585],{"class":238},[228,56905,56906,56908,56910,56912,56914,56916,56918],{"class":230,"line":17001},[228,56907,55567],{"class":238},[228,56909,55668],{"class":343},[228,56911,55573],{"class":238},[228,56913,55673],{"class":343},[228,56915,55579],{"class":238},[228,56917,55678],{"class":343},[228,56919,55585],{"class":238},[228,56921,56922,56924,56926,56928,56930,56932,56934],{"class":230,"line":17014},[228,56923,55567],{"class":238},[228,56925,55687],{"class":343},[228,56927,55573],{"class":238},[228,56929,55692],{"class":343},[228,56931,55579],{"class":238},[228,56933,55697],{"class":343},[228,56935,55585],{"class":238},[228,56937,56938,56940,56942,56944,56946,56948,56950],{"class":230,"line":17019},[228,56939,55567],{"class":238},[228,56941,55706],{"class":343},[228,56943,55573],{"class":238},[228,56945,55711],{"class":343},[228,56947,55579],{"class":238},[228,56949,55716],{"class":343},[228,56951,55719],{"class":238},[228,56953,56954],{"class":230,"line":17024},[228,56955,53224],{"class":238},[228,56957,56958],{"class":230,"line":17029},[228,56959,56960],{"class":297},"    \u002F\u002F 1.获取元素\n",[228,56962,56963,56965,56967,56969,56971,56973,56975,56977],{"class":230,"line":17042},[228,56964,11336],{"class":234},[228,56966,55730],{"class":287},[228,56968,13679],{"class":234},[228,56970,54511],{"class":238},[228,56972,54514],{"class":2077},[228,56974,239],{"class":238},[228,56976,55741],{"class":343},[228,56978,245],{"class":238},[228,56980,56981,56983,56985,56987,56989,56991,56993,56995],{"class":230,"line":17047},[228,56982,11336],{"class":234},[228,56984,6940],{"class":287},[228,56986,13679],{"class":234},[228,56988,54511],{"class":238},[228,56990,54514],{"class":2077},[228,56992,239],{"class":238},[228,56994,55760],{"class":343},[228,56996,245],{"class":238},[228,56998,56999,57001,57003,57005],{"class":230,"line":32748},[228,57000,52334],{"class":234},[228,57002,9553],{"class":238},[228,57004,284],{"class":234},[228,57006,47448],{"class":287},[228,57008,57009],{"class":230,"line":32754},[228,57010,57011],{"class":297},"    \u002F\u002F 2.开启定时器\n",[228,57013,57014],{"class":230,"line":32760},[228,57015,57016],{"class":297},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[228,57018,57019,57022,57024,57026],{"class":230,"line":32766},[228,57020,57021],{"class":2077},"    setInterval",[228,57023,239],{"class":238},[228,57025,54564],{"class":234},[228,57027,54567],{"class":238},[228,57029,57030,57032],{"class":230,"line":32772},[228,57031,54572],{"class":238},[228,57033,2816],{"class":234},[228,57035,57036,57038,57040,57042,57045,57047],{"class":230,"line":32783},[228,57037,54595],{"class":234},[228,57039,54598],{"class":238},[228,57041,1824],{"class":234},[228,57043,57044],{"class":238}," sliderData.",[228,57046,52083],{"class":287},[228,57048,12557],{"class":238},[228,57050,57051,57054,57056],{"class":230,"line":32789},[228,57052,57053],{"class":238},"        i ",[228,57055,284],{"class":234},[228,57057,47448],{"class":287},[228,57059,57060],{"class":230,"line":32809},[228,57061,52513],{"class":238},[228,57063,57064],{"class":230,"line":32815},[228,57065,57066],{"class":297},"      \u002F\u002F 更换图片路径\n",[228,57068,57069,57071,57073],{"class":230,"line":32826},[228,57070,55836],{"class":238},[228,57072,284],{"class":234},[228,57074,57075],{"class":238}," sliderData[i].url\n",[228,57077,57078],{"class":230,"line":32832},[228,57079,57080],{"class":297},"      \u002F\u002F 把文字写到p里面\n",[228,57082,57083,57085,57087],{"class":230,"line":32838},[228,57084,55846],{"class":238},[228,57086,284],{"class":234},[228,57088,57089],{"class":238}," sliderData[i].title\n",[228,57091,57092],{"class":230,"line":32844},[228,57093,57094],{"class":297},"      \u002F\u002F 小圆点\n",[228,57096,57097],{"class":230,"line":32850},[228,57098,57099],{"class":297},"      \u002F\u002F 先删除以前的active\n",[228,57101,57102],{"class":230,"line":32856},[228,57103,57104],{"class":297},"      \u002F\u002F 只让当前li添加active\n",[228,57106,57107,57109,57111,57113,57116,57119,57122,57124,57126],{"class":230,"line":32862},[228,57108,55886],{"class":238},[228,57110,54514],{"class":2077},[228,57112,239],{"class":238},[228,57114,57115],{"class":343},"'.slider-footer .activate'",[228,57117,57118],{"class":238},").classList.",[228,57120,57121],{"class":2077},"remove",[228,57123,239],{"class":238},[228,57125,55904],{"class":343},[228,57127,245],{"class":238},[228,57129,57130,57132,57134,57136,57139,57141,57143,57145,57148,57150,57152,57154,57156],{"class":230,"line":32868},[228,57131,55886],{"class":238},[228,57133,54514],{"class":2077},[228,57135,239],{"class":238},[228,57137,57138],{"class":343},"`.slider-footer ul li:nth-child(${",[228,57140,679],{"class":238},[228,57142,45681],{"class":234},[228,57144,25234],{"class":287},[228,57146,57147],{"class":343},"})`",[228,57149,57118],{"class":238},[228,57151,5449],{"class":2077},[228,57153,239],{"class":238},[228,57155,55904],{"class":343},[228,57157,245],{"class":238},[228,57159,57160],{"class":230,"line":32888},[228,57161,2514],{"emptyLinePlaceholder":157},[228,57163,57164,57166,57168],{"class":230,"line":32894},[228,57165,54650],{"class":238},[228,57167,6525],{"class":287},[228,57169,245],{"class":238},[228,57171,57172],{"class":230,"line":32910},[228,57173,2514],{"emptyLinePlaceholder":157},[228,57175,57176,57178,57180],{"class":230,"line":32916},[228,57177,52532],{"class":238},[228,57179,51928],{"class":51415},[228,57181,51422],{"class":238},[228,57183,57184,57186,57188],{"class":230,"line":32930},[228,57185,51900],{"class":238},[228,57187,51915],{"class":51415},[228,57189,51422],{"class":238},[228,57191,57192],{"class":230,"line":32936},[228,57193,2514],{"emptyLinePlaceholder":157},[228,57195,57196,57198,57200],{"class":230,"line":32951},[228,57197,51900],{"class":238},[228,57199,50750],{"class":51415},[228,57201,51422],{"class":238},[200,57203,57205],{"id":57204},"_317-重要知识点","3.1.7 重要知识点",[19,57207,57208,57209],{},"浏览器在渲染文本时， ",[388,57210,57211],{},"没有空格或换行符就没有“断行点”",[19,57213,57214],{},[1576,57215],{"alt":141,"src":57216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,57218,57219],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,57221,57222],{},[1576,57223],{"alt":141,"src":57224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,57226,57227],{},[1576,57228],{"alt":141,"src":57229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,57231,57233],{"id":57232},"_32-dom事件基础","3.2 DOM事件基础",[200,57235,57237],{"id":57236},"_321-事件监听","3.2.1 事件监听",[19,57239,57240],{},[1576,57241],{"alt":141,"src":57242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,57244,57245],{},"事件监听有响应的发生",[19,57247,57248],{},[1576,57249],{"alt":141,"src":57250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,57252,57253],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,57255,57256],{},"对于有名函数,要执行的函数名后边不要加()",[200,57258,57260],{"id":57259},"_322-随机点名案例","3.2.2 随机点名案例",[220,57262,57264],{"className":50748,"code":57263,"language":50750,"meta":141,"style":141},"\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",[30,57265,57266,57276,57290,57294,57302,57316,57336,57348,57356,57362,57372,57382,57386,57390,57397,57408,57412,57416,57422,57434,57448,57458,57470,57483,57487,57491,57498,57502,57515,57527,57539,57543,57547,57551,57558,57568,57572,57576,57585,57597,57609,57624,57628,57636,57644,57648,57656,57669,57683,57696,57716,57724,57739,57759,57779,57787,57791,57799,57804,57840,57860,57865,57884,57889,57900,57905,57916,57921,57940,57955,57960,57986,57996,58005,58010,58026,58031,58036,58041,58056,58060,58064,58069,58088,58105,58113,58118,58133,58137,58141,58149,58157,58161],{"__ignoreMap":141},[228,57267,57268,57270,57272,57274],{"class":230,"line":231},[228,57269,51412],{"class":238},[228,57271,51416],{"class":51415},[228,57273,51419],{"class":2077},[228,57275,51422],{"class":238},[228,57277,57278,57280,57282,57284,57286,57288],{"class":230,"line":142},[228,57279,1148],{"class":238},[228,57281,50750],{"class":51415},[228,57283,51431],{"class":2077},[228,57285,284],{"class":238},[228,57287,51436],{"class":343},[228,57289,51422],{"class":238},[228,57291,57292],{"class":230,"line":1293},[228,57293,2514],{"emptyLinePlaceholder":157},[228,57295,57296,57298,57300],{"class":230,"line":1308},[228,57297,1148],{"class":238},[228,57299,51449],{"class":51415},[228,57301,51422],{"class":238},[228,57303,57304,57306,57308,57310,57312,57314],{"class":230,"line":1314},[228,57305,52259],{"class":238},[228,57307,51459],{"class":51415},[228,57309,51462],{"class":2077},[228,57311,284],{"class":238},[228,57313,51467],{"class":343},[228,57315,51422],{"class":238},[228,57317,57318,57320,57322,57324,57326,57328,57330,57332,57334],{"class":230,"line":1328},[228,57319,52259],{"class":238},[228,57321,51459],{"class":51415},[228,57323,15035],{"class":2077},[228,57325,284],{"class":238},[228,57327,51506],{"class":343},[228,57329,51486],{"class":2077},[228,57331,284],{"class":238},[228,57333,51513],{"class":343},[228,57335,51422],{"class":238},[228,57337,57338,57340,57342,57344,57346],{"class":230,"line":1334},[228,57339,52259],{"class":238},[228,57341,51522],{"class":51415},[228,57343,51525],{"class":238},[228,57345,51522],{"class":51415},[228,57347,51422],{"class":238},[228,57349,57350,57352,57354],{"class":230,"line":1425},[228,57351,52259],{"class":238},[228,57353,5241],{"class":51415},[228,57355,51422],{"class":238},[228,57357,57358,57360],{"class":230,"line":1431},[228,57359,6518],{"class":51415},[228,57361,15687],{"class":238},[228,57363,57364,57366,57368,57370],{"class":230,"line":1443},[228,57365,54821],{"class":287},[228,57367,51552],{"class":238},[228,57369,430],{"class":287},[228,57371,1404],{"class":238},[228,57373,57374,57376,57378,57380],{"class":230,"line":1726},[228,57375,54810],{"class":287},[228,57377,51552],{"class":238},[228,57379,430],{"class":287},[228,57381,1404],{"class":238},[228,57383,57384],{"class":230,"line":1731},[228,57385,2301],{"class":238},[228,57387,57388],{"class":230,"line":1737},[228,57389,2514],{"emptyLinePlaceholder":157},[228,57391,57392,57395],{"class":230,"line":1742},[228,57393,57394],{"class":51415},"    h2",[228,57396,15687],{"class":238},[228,57398,57399,57402,57404,57406],{"class":230,"line":1756},[228,57400,57401],{"class":287},"      text-align",[228,57403,51552],{"class":238},[228,57405,51707],{"class":287},[228,57407,1404],{"class":238},[228,57409,57410],{"class":230,"line":1761},[228,57411,2301],{"class":238},[228,57413,57414],{"class":230,"line":1767},[228,57415,2514],{"emptyLinePlaceholder":157},[228,57417,57418,57420],{"class":230,"line":1788},[228,57419,54867],{"class":2077},[228,57421,15687],{"class":238},[228,57423,57424,57426,57428,57430,57432],{"class":230,"line":1793},[228,57425,54886],{"class":287},[228,57427,51552],{"class":238},[228,57429,1653],{"class":287},[228,57431,51607],{"class":234},[228,57433,1404],{"class":238},[228,57435,57436,57438,57440,57442,57444,57446],{"class":230,"line":1807},[228,57437,54821],{"class":287},[228,57439,51552],{"class":238},[228,57441,894],{"class":287},[228,57443,51607],{"class":234},[228,57445,51671],{"class":287},[228,57447,1404],{"class":238},[228,57449,57450,57452,57454,57456],{"class":230,"line":1812},[228,57451,55124],{"class":287},[228,57453,51552],{"class":238},[228,57455,51592],{"class":287},[228,57457,1404],{"class":238},[228,57459,57460,57462,57464,57466,57468],{"class":230,"line":1841},[228,57461,55037],{"class":287},[228,57463,51552],{"class":238},[228,57465,1063],{"class":287},[228,57467,51607],{"class":234},[228,57469,1404],{"class":238},[228,57471,57472,57475,57477,57479,57481],{"class":230,"line":1846},[228,57473,57474],{"class":287},"      line-height",[228,57476,51552],{"class":238},[228,57478,639],{"class":287},[228,57480,51607],{"class":234},[228,57482,1404],{"class":238},[228,57484,57485],{"class":230,"line":1863},[228,57486,2301],{"class":238},[228,57488,57489],{"class":230,"line":1868},[228,57490,2514],{"emptyLinePlaceholder":157},[228,57492,57493,57496],{"class":230,"line":1873},[228,57494,57495],{"class":2077},"    .qs",[228,57497,15687],{"class":238},[228,57499,57500],{"class":230,"line":1878},[228,57501,2514],{"emptyLinePlaceholder":157},[228,57503,57504,57506,57508,57511,57513],{"class":230,"line":1892},[228,57505,54886],{"class":287},[228,57507,51552],{"class":238},[228,57509,57510],{"class":287},"450",[228,57512,51607],{"class":234},[228,57514,1404],{"class":238},[228,57516,57517,57519,57521,57523,57525],{"class":230,"line":1897},[228,57518,54900],{"class":287},[228,57520,51552],{"class":238},[228,57522,639],{"class":287},[228,57524,51607],{"class":234},[228,57526,1404],{"class":238},[228,57528,57529,57532,57534,57537],{"class":230,"line":2691},[228,57530,57531],{"class":287},"      color",[228,57533,51552],{"class":238},[228,57535,57536],{"class":287},"red",[228,57538,1404],{"class":238},[228,57540,57541],{"class":230,"line":2705},[228,57542,2514],{"emptyLinePlaceholder":157},[228,57544,57545],{"class":230,"line":2713},[228,57546,2301],{"class":238},[228,57548,57549],{"class":230,"line":2718},[228,57550,2514],{"emptyLinePlaceholder":157},[228,57552,57553,57556],{"class":230,"line":2724},[228,57554,57555],{"class":2077},"    .btns",[228,57557,15687],{"class":238},[228,57559,57560,57562,57564,57566],{"class":230,"line":2730},[228,57561,57401],{"class":287},[228,57563,51552],{"class":238},[228,57565,51707],{"class":287},[228,57567,1404],{"class":238},[228,57569,57570],{"class":230,"line":2735},[228,57571,2301],{"class":238},[228,57573,57574],{"class":230,"line":8063},[228,57575,2514],{"emptyLinePlaceholder":157},[228,57577,57578,57580,57583],{"class":230,"line":8087},[228,57579,57555],{"class":2077},[228,57581,57582],{"class":51415}," button",[228,57584,15687],{"class":238},[228,57586,57587,57589,57591,57593,57595],{"class":230,"line":8092},[228,57588,54886],{"class":287},[228,57590,51552],{"class":238},[228,57592,1055],{"class":287},[228,57594,51607],{"class":234},[228,57596,1404],{"class":238},[228,57598,57599,57601,57603,57605,57607],{"class":230,"line":8098},[228,57600,54900],{"class":287},[228,57602,51552],{"class":238},[228,57604,511],{"class":287},[228,57606,51607],{"class":234},[228,57608,1404],{"class":238},[228,57610,57611,57613,57615,57617,57620,57622],{"class":230,"line":8125},[228,57612,54821],{"class":287},[228,57614,51552],{"class":238},[228,57616,430],{"class":287},[228,57618,57619],{"class":287}," 50",[228,57621,51607],{"class":234},[228,57623,1404],{"class":238},[228,57625,57626],{"class":230,"line":8130},[228,57627,2301],{"class":238},[228,57629,57630,57632,57634],{"class":230,"line":8136},[228,57631,52532],{"class":238},[228,57633,5241],{"class":51415},[228,57635,51422],{"class":238},[228,57637,57638,57640,57642],{"class":230,"line":8148},[228,57639,51900],{"class":238},[228,57641,51449],{"class":51415},[228,57643,51422],{"class":238},[228,57645,57646],{"class":230,"line":8160},[228,57647,2514],{"emptyLinePlaceholder":157},[228,57649,57650,57652,57654],{"class":230,"line":8172},[228,57651,1148],{"class":238},[228,57653,51915],{"class":51415},[228,57655,51422],{"class":238},[228,57657,57658,57660,57662,57665,57667],{"class":230,"line":9831},[228,57659,52259],{"class":238},[228,57661,14],{"class":51415},[228,57663,57664],{"class":238},">随机点名\u003C\u002F",[228,57666,14],{"class":51415},[228,57668,51422],{"class":238},[228,57670,57671,57673,57675,57677,57679,57681],{"class":230,"line":9856},[228,57672,52259],{"class":238},[228,57674,51726],{"class":51415},[228,57676,53601],{"class":2077},[228,57678,284],{"class":238},[228,57680,53606],{"class":343},[228,57682,51422],{"class":238},[228,57684,57685,57687,57689,57692,57694],{"class":230,"line":9879},[228,57686,51456],{"class":238},[228,57688,228],{"class":51415},[228,57690,57691],{"class":238},">名字是：\u003C\u002F",[228,57693,228],{"class":51415},[228,57695,51422],{"class":238},[228,57697,57698,57700,57702,57704,57706,57709,57712,57714],{"class":230,"line":9903},[228,57699,51456],{"class":238},[228,57701,51726],{"class":51415},[228,57703,53601],{"class":2077},[228,57705,284],{"class":238},[228,57707,57708],{"class":343},"\"qs\"",[228,57710,57711],{"class":238},">这里显示姓名\u003C\u002F",[228,57713,51726],{"class":51415},[228,57715,51422],{"class":238},[228,57717,57718,57720,57722],{"class":230,"line":9908},[228,57719,52532],{"class":238},[228,57721,51726],{"class":51415},[228,57723,51422],{"class":238},[228,57725,57726,57728,57730,57732,57734,57737],{"class":230,"line":9913},[228,57727,52259],{"class":238},[228,57729,51726],{"class":51415},[228,57731,53601],{"class":2077},[228,57733,284],{"class":238},[228,57735,57736],{"class":343},"\"btns\"",[228,57738,51422],{"class":238},[228,57740,57741,57743,57745,57747,57749,57752,57755,57757],{"class":230,"line":9918},[228,57742,51456],{"class":238},[228,57744,54002],{"class":51415},[228,57746,53601],{"class":2077},[228,57748,284],{"class":238},[228,57750,57751],{"class":343},"\"start\"",[228,57753,57754],{"class":238},">开始\u003C\u002F",[228,57756,54002],{"class":51415},[228,57758,51422],{"class":238},[228,57760,57761,57763,57765,57767,57769,57772,57775,57777],{"class":230,"line":9927},[228,57762,51456],{"class":238},[228,57764,54002],{"class":51415},[228,57766,53601],{"class":2077},[228,57768,284],{"class":238},[228,57770,57771],{"class":343},"\"end\"",[228,57773,57774],{"class":238},">结束\u003C\u002F",[228,57776,54002],{"class":51415},[228,57778,51422],{"class":238},[228,57780,57781,57783,57785],{"class":230,"line":9932},[228,57782,52532],{"class":238},[228,57784,51726],{"class":51415},[228,57786,51422],{"class":238},[228,57788,57789],{"class":230,"line":9938},[228,57790,2514],{"emptyLinePlaceholder":157},[228,57792,57793,57795,57797],{"class":230,"line":9959},[228,57794,52259],{"class":238},[228,57796,51928],{"class":51415},[228,57798,51422],{"class":238},[228,57800,57801],{"class":230,"line":9965},[228,57802,57803],{"class":297},"    \u002F\u002F 数据数组\n",[228,57805,57806,57808,57811,57813,57815,57818,57820,57823,57825,57828,57830,57833,57835,57838],{"class":230,"line":9979},[228,57807,11336],{"class":234},[228,57809,57810],{"class":287}," arr",[228,57812,13679],{"class":234},[228,57814,52341],{"class":238},[228,57816,57817],{"class":343},"'马超'",[228,57819,12550],{"class":238},[228,57821,57822],{"class":343},"'黄忠'",[228,57824,12550],{"class":238},[228,57826,57827],{"class":343},"'赵云'",[228,57829,12550],{"class":238},[228,57831,57832],{"class":343},"'关羽'",[228,57834,12550],{"class":238},[228,57836,57837],{"class":343},"'张飞'",[228,57839,33361],{"class":238},[228,57841,57842,57844,57847,57849,57851,57853,57855,57858],{"class":230,"line":9985},[228,57843,11336],{"class":234},[228,57845,57846],{"class":287}," qs",[228,57848,13679],{"class":234},[228,57850,54511],{"class":238},[228,57852,54514],{"class":2077},[228,57854,239],{"class":238},[228,57856,57857],{"class":343},"'.qs'",[228,57859,245],{"class":238},[228,57861,57862],{"class":230,"line":10012},[228,57863,57864],{"class":297},"    \u002F\u002F 1.业务1.开始按钮模块\n",[228,57866,57867,57869,57871,57873,57875,57877,57879,57882],{"class":230,"line":10021},[228,57868,11336],{"class":234},[228,57870,4298],{"class":287},[228,57872,13679],{"class":234},[228,57874,54511],{"class":238},[228,57876,54514],{"class":2077},[228,57878,239],{"class":238},[228,57880,57881],{"class":343},"'.start'",[228,57883,245],{"class":238},[228,57885,57886],{"class":230,"line":10027},[228,57887,57888],{"class":297},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[228,57890,57891,57893,57896,57898],{"class":230,"line":10035},[228,57892,52334],{"class":234},[228,57894,57895],{"class":238}," timerId ",[228,57897,284],{"class":234},[228,57899,47448],{"class":287},[228,57901,57902],{"class":230,"line":10040},[228,57903,57904],{"class":297},"    \u002F\u002F 随机号要全局变量\n",[228,57906,57907,57909,57912,57914],{"class":230,"line":16719},[228,57908,52334],{"class":234},[228,57910,57911],{"class":238}," random ",[228,57913,284],{"class":234},[228,57915,47448],{"class":287},[228,57917,57918],{"class":230,"line":16725},[228,57919,57920],{"class":297},"    \u002F\u002F 1.1 添加点击事件\n",[228,57922,57923,57926,57929,57931,57934,57936,57938],{"class":230,"line":16748},[228,57924,57925],{"class":238},"    start.",[228,57927,57928],{"class":2077},"addEventListener",[228,57930,239],{"class":238},[228,57932,57933],{"class":343},"'click'",[228,57935,12550],{"class":238},[228,57937,54564],{"class":234},[228,57939,54567],{"class":238},[228,57941,57942,57945,57947,57949,57951,57953],{"class":230,"line":16754},[228,57943,57944],{"class":238},"      timerId ",[228,57946,284],{"class":234},[228,57948,54559],{"class":2077},[228,57950,239],{"class":238},[228,57952,54564],{"class":234},[228,57954,54567],{"class":238},[228,57956,57957],{"class":230,"line":16777},[228,57958,57959],{"class":297},"        \u002F\u002F 随机数\n",[228,57961,57962,57965,57967,57970,57973,57976,57978,57980,57982,57984],{"class":230,"line":16791},[228,57963,57964],{"class":238},"        random ",[228,57966,284],{"class":234},[228,57968,57969],{"class":2077}," parseInt",[228,57971,57972],{"class":238},"(Math.",[228,57974,57975],{"class":2077},"random",[228,57977,13165],{"class":238},[228,57979,693],{"class":234},[228,57981,52080],{"class":238},[228,57983,52083],{"class":287},[228,57985,245],{"class":238},[228,57987,57988,57991,57993],{"class":230,"line":16811},[228,57989,57990],{"class":238},"        qs.innerHTML ",[228,57992,284],{"class":234},[228,57994,57995],{"class":238}," arr[random]\n",[228,57997,57998,58001,58003],{"class":230,"line":16817},[228,57999,58000],{"class":238},"      }, ",[228,58002,511],{"class":287},[228,58004,245],{"class":238},[228,58006,58007],{"class":230,"line":16828},[228,58008,58009],{"class":297},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[228,58011,58012,58014,58017,58019,58022,58024],{"class":230,"line":16851},[228,58013,54595],{"class":234},[228,58015,58016],{"class":238}," (arr.",[228,58018,52083],{"class":287},[228,58020,58021],{"class":234}," ===",[228,58023,25234],{"class":287},[228,58025,12557],{"class":238},[228,58027,58028],{"class":230,"line":16873},[228,58029,58030],{"class":297},"        \u002F\u002F start.disabled = true\n",[228,58032,58033],{"class":230,"line":16878},[228,58034,58035],{"class":297},"        \u002F\u002F end.disabled = true\n",[228,58037,58038],{"class":230,"line":16884},[228,58039,58040],{"class":297},"        \u002F\u002F 可以合起来写\n",[228,58042,58043,58046,58048,58051,58053],{"class":230,"line":16898},[228,58044,58045],{"class":238},"        start.disabled ",[228,58047,284],{"class":234},[228,58049,58050],{"class":238}," end.disabled ",[228,58052,284],{"class":234},[228,58054,58055],{"class":287}," true\n",[228,58057,58058],{"class":230,"line":16911},[228,58059,52513],{"class":238},[228,58061,58062],{"class":230,"line":16916},[228,58063,33576],{"class":238},[228,58065,58066],{"class":230,"line":16930},[228,58067,58068],{"class":297},"    \u002F\u002F 1.2 关闭按钮模块\n",[228,58070,58071,58073,58075,58077,58079,58081,58083,58086],{"class":230,"line":16935},[228,58072,11336],{"class":234},[228,58074,4314],{"class":287},[228,58076,13679],{"class":234},[228,58078,54511],{"class":238},[228,58080,54514],{"class":2077},[228,58082,239],{"class":238},[228,58084,58085],{"class":343},"'.end'",[228,58087,245],{"class":238},[228,58089,58090,58093,58095,58097,58099,58101,58103],{"class":230,"line":16941},[228,58091,58092],{"class":238},"    end.",[228,58094,57928],{"class":2077},[228,58096,239],{"class":238},[228,58098,57933],{"class":343},[228,58100,12550],{"class":238},[228,58102,54564],{"class":234},[228,58104,54567],{"class":238},[228,58106,58107,58110],{"class":230,"line":16946},[228,58108,58109],{"class":2077},"      clearInterval",[228,58111,58112],{"class":238},"(timerId)\n",[228,58114,58115],{"class":230,"line":16960},[228,58116,58117],{"class":297},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[228,58119,58120,58123,58126,58129,58131],{"class":230,"line":16965},[228,58121,58122],{"class":238},"      arr.",[228,58124,58125],{"class":2077},"splice",[228,58127,58128],{"class":238},"(random, ",[228,58130,456],{"class":287},[228,58132,245],{"class":238},[228,58134,58135],{"class":230,"line":16970},[228,58136,33576],{"class":238},[228,58138,58139],{"class":230,"line":16984},[228,58140,2514],{"emptyLinePlaceholder":157},[228,58142,58143,58145,58147],{"class":230,"line":16996},[228,58144,52532],{"class":238},[228,58146,51928],{"class":51415},[228,58148,51422],{"class":238},[228,58150,58151,58153,58155],{"class":230,"line":17001},[228,58152,51900],{"class":238},[228,58154,51915],{"class":51415},[228,58156,51422],{"class":238},[228,58158,58159],{"class":230,"line":17014},[228,58160,2514],{"emptyLinePlaceholder":157},[228,58162,58163,58165,58167],{"class":230,"line":17019},[228,58164,51900],{"class":238},[228,58166,50750],{"class":51415},[228,58168,51422],{"class":238},[19,58170,58171],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[200,58173,58175],{"id":58174},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[220,58177,58179],{"className":50748,"code":58178,"language":50750,"meta":141,"style":141},"\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",[30,58180,58181,58191,58205,58209,58217,58231,58251,58263,58271,58275,58283,58295,58303,58322,58339,58355,58365,58369,58377,58385,58389],{"__ignoreMap":141},[228,58182,58183,58185,58187,58189],{"class":230,"line":231},[228,58184,51412],{"class":238},[228,58186,51416],{"class":51415},[228,58188,51419],{"class":2077},[228,58190,51422],{"class":238},[228,58192,58193,58195,58197,58199,58201,58203],{"class":230,"line":142},[228,58194,1148],{"class":238},[228,58196,50750],{"class":51415},[228,58198,51431],{"class":2077},[228,58200,284],{"class":238},[228,58202,51436],{"class":343},[228,58204,51422],{"class":238},[228,58206,58207],{"class":230,"line":1293},[228,58208,2514],{"emptyLinePlaceholder":157},[228,58210,58211,58213,58215],{"class":230,"line":1308},[228,58212,1148],{"class":238},[228,58214,51449],{"class":51415},[228,58216,51422],{"class":238},[228,58218,58219,58221,58223,58225,58227,58229],{"class":230,"line":1314},[228,58220,52259],{"class":238},[228,58222,51459],{"class":51415},[228,58224,51462],{"class":2077},[228,58226,284],{"class":238},[228,58228,51467],{"class":343},[228,58230,51422],{"class":238},[228,58232,58233,58235,58237,58239,58241,58243,58245,58247,58249],{"class":230,"line":1328},[228,58234,52259],{"class":238},[228,58236,51459],{"class":51415},[228,58238,15035],{"class":2077},[228,58240,284],{"class":238},[228,58242,51506],{"class":343},[228,58244,51486],{"class":2077},[228,58246,284],{"class":238},[228,58248,51513],{"class":343},[228,58250,51422],{"class":238},[228,58252,58253,58255,58257,58259,58261],{"class":230,"line":1334},[228,58254,52259],{"class":238},[228,58256,51522],{"class":51415},[228,58258,51525],{"class":238},[228,58260,51522],{"class":51415},[228,58262,51422],{"class":238},[228,58264,58265,58267,58269],{"class":230,"line":1425},[228,58266,51900],{"class":238},[228,58268,51449],{"class":51415},[228,58270,51422],{"class":238},[228,58272,58273],{"class":230,"line":1431},[228,58274,2514],{"emptyLinePlaceholder":157},[228,58276,58277,58279,58281],{"class":230,"line":1443},[228,58278,1148],{"class":238},[228,58280,51915],{"class":51415},[228,58282,51422],{"class":238},[228,58284,58285,58287,58289,58291,58293],{"class":230,"line":1726},[228,58286,52259],{"class":238},[228,58288,54002],{"class":51415},[228,58290,54008],{"class":238},[228,58292,54002],{"class":51415},[228,58294,51422],{"class":238},[228,58296,58297,58299,58301],{"class":230,"line":1731},[228,58298,52259],{"class":238},[228,58300,51928],{"class":51415},[228,58302,51422],{"class":238},[228,58304,58305,58307,58309,58311,58313,58315,58317,58320],{"class":230,"line":1737},[228,58306,11336],{"class":234},[228,58308,54506],{"class":287},[228,58310,13679],{"class":234},[228,58312,54511],{"class":238},[228,58314,54514],{"class":2077},[228,58316,239],{"class":238},[228,58318,58319],{"class":343},"'button'",[228,58321,245],{"class":238},[228,58323,58324,58327,58329,58331,58333,58335,58337],{"class":230,"line":1742},[228,58325,58326],{"class":238},"    btn.",[228,58328,57928],{"class":2077},[228,58330,239],{"class":238},[228,58332,57933],{"class":343},[228,58334,12550],{"class":238},[228,58336,54564],{"class":234},[228,58338,54567],{"class":238},[228,58340,58341,58344,58346,58348,58351,58353],{"class":230,"line":1756},[228,58342,58343],{"class":234},"      const",[228,58345,2354],{"class":287},[228,58347,13679],{"class":234},[228,58349,58350],{"class":238}," Math.",[228,58352,57975],{"class":2077},[228,58354,2090],{"class":238},[228,58356,58357,58360,58363],{"class":230,"line":1761},[228,58358,58359],{"class":238},"      console.",[228,58361,58362],{"class":2077},"log",[228,58364,252],{"class":238},[228,58366,58367],{"class":230,"line":1767},[228,58368,33576],{"class":238},[228,58370,58371,58373,58375],{"class":230,"line":1788},[228,58372,52532],{"class":238},[228,58374,51928],{"class":51415},[228,58376,51422],{"class":238},[228,58378,58379,58381,58383],{"class":230,"line":1793},[228,58380,51900],{"class":238},[228,58382,51915],{"class":51415},[228,58384,51422],{"class":238},[228,58386,58387],{"class":230,"line":1807},[228,58388,2514],{"emptyLinePlaceholder":157},[228,58390,58391,58393,58395],{"class":230,"line":1812},[228,58392,51900],{"class":238},[228,58394,50750],{"class":51415},[228,58396,51422],{"class":238},[19,58398,58399],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,58401,58402],{},"常量不可以重新赋值",[19,58404,58405],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[220,58407,58409],{"className":50748,"code":58408,"language":50750,"meta":141,"style":141},"\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",[30,58410,58411,58421,58435,58439,58447,58461,58481,58493,58501,58505,58513,58525,58533,58544,58562,58578,58592,58600,58604,58612,58620,58624],{"__ignoreMap":141},[228,58412,58413,58415,58417,58419],{"class":230,"line":231},[228,58414,51412],{"class":238},[228,58416,51416],{"class":51415},[228,58418,51419],{"class":2077},[228,58420,51422],{"class":238},[228,58422,58423,58425,58427,58429,58431,58433],{"class":230,"line":142},[228,58424,1148],{"class":238},[228,58426,50750],{"class":51415},[228,58428,51431],{"class":2077},[228,58430,284],{"class":238},[228,58432,51436],{"class":343},[228,58434,51422],{"class":238},[228,58436,58437],{"class":230,"line":1293},[228,58438,2514],{"emptyLinePlaceholder":157},[228,58440,58441,58443,58445],{"class":230,"line":1308},[228,58442,1148],{"class":238},[228,58444,51449],{"class":51415},[228,58446,51422],{"class":238},[228,58448,58449,58451,58453,58455,58457,58459],{"class":230,"line":1314},[228,58450,52259],{"class":238},[228,58452,51459],{"class":51415},[228,58454,51462],{"class":2077},[228,58456,284],{"class":238},[228,58458,51467],{"class":343},[228,58460,51422],{"class":238},[228,58462,58463,58465,58467,58469,58471,58473,58475,58477,58479],{"class":230,"line":1328},[228,58464,52259],{"class":238},[228,58466,51459],{"class":51415},[228,58468,15035],{"class":2077},[228,58470,284],{"class":238},[228,58472,51506],{"class":343},[228,58474,51486],{"class":2077},[228,58476,284],{"class":238},[228,58478,51513],{"class":343},[228,58480,51422],{"class":238},[228,58482,58483,58485,58487,58489,58491],{"class":230,"line":1334},[228,58484,52259],{"class":238},[228,58486,51522],{"class":51415},[228,58488,51525],{"class":238},[228,58490,51522],{"class":51415},[228,58492,51422],{"class":238},[228,58494,58495,58497,58499],{"class":230,"line":1425},[228,58496,51900],{"class":238},[228,58498,51449],{"class":51415},[228,58500,51422],{"class":238},[228,58502,58503],{"class":230,"line":1431},[228,58504,2514],{"emptyLinePlaceholder":157},[228,58506,58507,58509,58511],{"class":230,"line":1443},[228,58508,1148],{"class":238},[228,58510,51915],{"class":51415},[228,58512,51422],{"class":238},[228,58514,58515,58517,58519,58521,58523],{"class":230,"line":1726},[228,58516,52259],{"class":238},[228,58518,54002],{"class":51415},[228,58520,54008],{"class":238},[228,58522,54002],{"class":51415},[228,58524,51422],{"class":238},[228,58526,58527,58529,58531],{"class":230,"line":1731},[228,58528,52259],{"class":238},[228,58530,51928],{"class":51415},[228,58532,51422],{"class":238},[228,58534,58535,58537,58539,58541],{"class":230,"line":1737},[228,58536,11336],{"class":234},[228,58538,2354],{"class":287},[228,58540,13679],{"class":234},[228,58542,58543],{"class":287}," 10\n",[228,58545,58546,58548,58550,58552,58554,58556,58558,58560],{"class":230,"line":1742},[228,58547,11336],{"class":234},[228,58549,54506],{"class":287},[228,58551,13679],{"class":234},[228,58553,54511],{"class":238},[228,58555,54514],{"class":2077},[228,58557,239],{"class":238},[228,58559,58319],{"class":343},[228,58561,245],{"class":238},[228,58563,58564,58566,58568,58570,58572,58574,58576],{"class":230,"line":1756},[228,58565,58326],{"class":238},[228,58567,57928],{"class":2077},[228,58569,239],{"class":238},[228,58571,57933],{"class":343},[228,58573,12550],{"class":238},[228,58575,54564],{"class":234},[228,58577,54567],{"class":238},[228,58579,58580,58582,58584,58586,58588,58590],{"class":230,"line":1761},[228,58581,58343],{"class":234},[228,58583,2354],{"class":287},[228,58585,13679],{"class":234},[228,58587,58350],{"class":238},[228,58589,57975],{"class":2077},[228,58591,2090],{"class":238},[228,58593,58594,58596,58598],{"class":230,"line":1767},[228,58595,58359],{"class":238},[228,58597,58362],{"class":2077},[228,58599,252],{"class":238},[228,58601,58602],{"class":230,"line":1788},[228,58603,33576],{"class":238},[228,58605,58606,58608,58610],{"class":230,"line":1793},[228,58607,52532],{"class":238},[228,58609,51928],{"class":51415},[228,58611,51422],{"class":238},[228,58613,58614,58616,58618],{"class":230,"line":1807},[228,58615,51900],{"class":238},[228,58617,51915],{"class":51415},[228,58619,51422],{"class":238},[228,58621,58622],{"class":230,"line":1812},[228,58623,2514],{"emptyLinePlaceholder":157},[228,58625,58626,58628,58630],{"class":230,"line":1841},[228,58627,51900],{"class":238},[228,58629,50750],{"class":51415},[228,58631,51422],{"class":238},[19,58633,58634],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[220,58636,58638],{"className":50748,"code":58637,"language":50750,"meta":141,"style":141},"\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",[30,58639,58640,58650,58664,58668,58676,58690,58710,58722,58730,58734,58742,58754,58762,58772,58790,58806,58819,58827,58831,58839,58847,58851],{"__ignoreMap":141},[228,58641,58642,58644,58646,58648],{"class":230,"line":231},[228,58643,51412],{"class":238},[228,58645,51416],{"class":51415},[228,58647,51419],{"class":2077},[228,58649,51422],{"class":238},[228,58651,58652,58654,58656,58658,58660,58662],{"class":230,"line":142},[228,58653,1148],{"class":238},[228,58655,50750],{"class":51415},[228,58657,51431],{"class":2077},[228,58659,284],{"class":238},[228,58661,51436],{"class":343},[228,58663,51422],{"class":238},[228,58665,58666],{"class":230,"line":1293},[228,58667,2514],{"emptyLinePlaceholder":157},[228,58669,58670,58672,58674],{"class":230,"line":1308},[228,58671,1148],{"class":238},[228,58673,51449],{"class":51415},[228,58675,51422],{"class":238},[228,58677,58678,58680,58682,58684,58686,58688],{"class":230,"line":1314},[228,58679,52259],{"class":238},[228,58681,51459],{"class":51415},[228,58683,51462],{"class":2077},[228,58685,284],{"class":238},[228,58687,51467],{"class":343},[228,58689,51422],{"class":238},[228,58691,58692,58694,58696,58698,58700,58702,58704,58706,58708],{"class":230,"line":1328},[228,58693,52259],{"class":238},[228,58695,51459],{"class":51415},[228,58697,15035],{"class":2077},[228,58699,284],{"class":238},[228,58701,51506],{"class":343},[228,58703,51486],{"class":2077},[228,58705,284],{"class":238},[228,58707,51513],{"class":343},[228,58709,51422],{"class":238},[228,58711,58712,58714,58716,58718,58720],{"class":230,"line":1334},[228,58713,52259],{"class":238},[228,58715,51522],{"class":51415},[228,58717,51525],{"class":238},[228,58719,51522],{"class":51415},[228,58721,51422],{"class":238},[228,58723,58724,58726,58728],{"class":230,"line":1425},[228,58725,51900],{"class":238},[228,58727,51449],{"class":51415},[228,58729,51422],{"class":238},[228,58731,58732],{"class":230,"line":1431},[228,58733,2514],{"emptyLinePlaceholder":157},[228,58735,58736,58738,58740],{"class":230,"line":1443},[228,58737,1148],{"class":238},[228,58739,51915],{"class":51415},[228,58741,51422],{"class":238},[228,58743,58744,58746,58748,58750,58752],{"class":230,"line":1726},[228,58745,52259],{"class":238},[228,58747,54002],{"class":51415},[228,58749,54008],{"class":238},[228,58751,54002],{"class":51415},[228,58753,51422],{"class":238},[228,58755,58756,58758,58760],{"class":230,"line":1731},[228,58757,52259],{"class":238},[228,58759,51928],{"class":51415},[228,58761,51422],{"class":238},[228,58763,58764,58766,58768,58770],{"class":230,"line":1737},[228,58765,11336],{"class":234},[228,58767,2354],{"class":287},[228,58769,13679],{"class":234},[228,58771,58543],{"class":287},[228,58773,58774,58776,58778,58780,58782,58784,58786,58788],{"class":230,"line":1742},[228,58775,11336],{"class":234},[228,58777,54506],{"class":287},[228,58779,13679],{"class":234},[228,58781,54511],{"class":238},[228,58783,54514],{"class":2077},[228,58785,239],{"class":238},[228,58787,58319],{"class":343},[228,58789,245],{"class":238},[228,58791,58792,58794,58796,58798,58800,58802,58804],{"class":230,"line":1756},[228,58793,58326],{"class":238},[228,58795,57928],{"class":2077},[228,58797,239],{"class":238},[228,58799,57933],{"class":343},[228,58801,12550],{"class":238},[228,58803,54564],{"class":234},[228,58805,54567],{"class":238},[228,58807,58808,58811,58813,58815,58817],{"class":230,"line":1761},[228,58809,58810],{"class":238},"      num ",[228,58812,284],{"class":234},[228,58814,58350],{"class":238},[228,58816,57975],{"class":2077},[228,58818,2090],{"class":238},[228,58820,58821,58823,58825],{"class":230,"line":1767},[228,58822,58359],{"class":238},[228,58824,58362],{"class":2077},[228,58826,252],{"class":238},[228,58828,58829],{"class":230,"line":1788},[228,58830,33576],{"class":238},[228,58832,58833,58835,58837],{"class":230,"line":1793},[228,58834,52532],{"class":238},[228,58836,51928],{"class":51415},[228,58838,51422],{"class":238},[228,58840,58841,58843,58845],{"class":230,"line":1807},[228,58842,51900],{"class":238},[228,58844,51915],{"class":51415},[228,58846,51422],{"class":238},[228,58848,58849],{"class":230,"line":1812},[228,58850,2514],{"emptyLinePlaceholder":157},[228,58852,58853,58855,58857],{"class":230,"line":1841},[228,58854,51900],{"class":238},[228,58856,50750],{"class":51415},[228,58858,51422],{"class":238},[19,58860,58861],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[200,58863,58865],{"id":58864},"_324-事件监听版本","3.2.4 事件监听版本",[19,58867,58868],{},[1576,58869],{"alt":141,"src":58870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,58872,58873],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,58875,58876],{},"这种方式会覆盖前边的事件监听:",[220,58878,58880],{"className":50748,"code":58879,"language":50750,"meta":141,"style":141},"\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",[30,58881,58882,58892,58906,58910,58918,58932,58952,58964,58972,58976,58984,58996,59004,59022,59036,59047,59051,59063,59073,59077,59085,59093,59097],{"__ignoreMap":141},[228,58883,58884,58886,58888,58890],{"class":230,"line":231},[228,58885,51412],{"class":238},[228,58887,51416],{"class":51415},[228,58889,51419],{"class":2077},[228,58891,51422],{"class":238},[228,58893,58894,58896,58898,58900,58902,58904],{"class":230,"line":142},[228,58895,1148],{"class":238},[228,58897,50750],{"class":51415},[228,58899,51431],{"class":2077},[228,58901,284],{"class":238},[228,58903,51436],{"class":343},[228,58905,51422],{"class":238},[228,58907,58908],{"class":230,"line":1293},[228,58909,2514],{"emptyLinePlaceholder":157},[228,58911,58912,58914,58916],{"class":230,"line":1308},[228,58913,1148],{"class":238},[228,58915,51449],{"class":51415},[228,58917,51422],{"class":238},[228,58919,58920,58922,58924,58926,58928,58930],{"class":230,"line":1314},[228,58921,52259],{"class":238},[228,58923,51459],{"class":51415},[228,58925,51462],{"class":2077},[228,58927,284],{"class":238},[228,58929,51467],{"class":343},[228,58931,51422],{"class":238},[228,58933,58934,58936,58938,58940,58942,58944,58946,58948,58950],{"class":230,"line":1328},[228,58935,52259],{"class":238},[228,58937,51459],{"class":51415},[228,58939,15035],{"class":2077},[228,58941,284],{"class":238},[228,58943,51506],{"class":343},[228,58945,51486],{"class":2077},[228,58947,284],{"class":238},[228,58949,51513],{"class":343},[228,58951,51422],{"class":238},[228,58953,58954,58956,58958,58960,58962],{"class":230,"line":1334},[228,58955,52259],{"class":238},[228,58957,51522],{"class":51415},[228,58959,51525],{"class":238},[228,58961,51522],{"class":51415},[228,58963,51422],{"class":238},[228,58965,58966,58968,58970],{"class":230,"line":1425},[228,58967,51900],{"class":238},[228,58969,51449],{"class":51415},[228,58971,51422],{"class":238},[228,58973,58974],{"class":230,"line":1431},[228,58975,2514],{"emptyLinePlaceholder":157},[228,58977,58978,58980,58982],{"class":230,"line":1443},[228,58979,1148],{"class":238},[228,58981,51915],{"class":51415},[228,58983,51422],{"class":238},[228,58985,58986,58988,58990,58992,58994],{"class":230,"line":1726},[228,58987,52259],{"class":238},[228,58989,54002],{"class":51415},[228,58991,54008],{"class":238},[228,58993,54002],{"class":51415},[228,58995,51422],{"class":238},[228,58997,58998,59000,59002],{"class":230,"line":1731},[228,58999,52259],{"class":238},[228,59001,51928],{"class":51415},[228,59003,51422],{"class":238},[228,59005,59006,59008,59010,59012,59014,59016,59018,59020],{"class":230,"line":1737},[228,59007,11336],{"class":234},[228,59009,54506],{"class":287},[228,59011,13679],{"class":234},[228,59013,54511],{"class":238},[228,59015,54514],{"class":2077},[228,59017,239],{"class":238},[228,59019,58319],{"class":343},[228,59021,245],{"class":238},[228,59023,59024,59026,59029,59031,59034],{"class":230,"line":1742},[228,59025,58326],{"class":238},[228,59027,59028],{"class":2077},"onclick",[228,59030,13679],{"class":234},[228,59032,59033],{"class":234}," function",[228,59035,54567],{"class":238},[228,59037,59038,59041,59043,59045],{"class":230,"line":1756},[228,59039,59040],{"class":2077},"      alert",[228,59042,239],{"class":238},[228,59044,710],{"class":287},[228,59046,245],{"class":238},[228,59048,59049],{"class":230,"line":1761},[228,59050,2301],{"class":238},[228,59052,59053,59055,59057,59059,59061],{"class":230,"line":1767},[228,59054,58326],{"class":238},[228,59056,59028],{"class":2077},[228,59058,13679],{"class":234},[228,59060,59033],{"class":234},[228,59062,54567],{"class":238},[228,59064,59065,59067,59069,59071],{"class":230,"line":1788},[228,59066,59040],{"class":2077},[228,59068,239],{"class":238},[228,59070,988],{"class":287},[228,59072,245],{"class":238},[228,59074,59075],{"class":230,"line":1793},[228,59076,2301],{"class":238},[228,59078,59079,59081,59083],{"class":230,"line":1807},[228,59080,52532],{"class":238},[228,59082,51928],{"class":51415},[228,59084,51422],{"class":238},[228,59086,59087,59089,59091],{"class":230,"line":1812},[228,59088,51900],{"class":238},[228,59090,51915],{"class":51415},[228,59092,51422],{"class":238},[228,59094,59095],{"class":230,"line":1841},[228,59096,2514],{"emptyLinePlaceholder":157},[228,59098,59099,59101,59103],{"class":230,"line":1846},[228,59100,51900],{"class":238},[228,59102,50750],{"class":51415},[228,59104,51422],{"class":238},[19,59106,59107],{},"只要点击就输出结果为22,前边11被覆盖了",[220,59109,59111],{"className":50748,"code":59110,"language":50750,"meta":141,"style":141},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[30,59112,59113,59118,59123,59127,59132,59137],{"__ignoreMap":141},[228,59114,59115],{"class":230,"line":231},[228,59116,59117],{"class":238},"  btn.addEventListener('click', function () {\n",[228,59119,59120],{"class":230,"line":142},[228,59121,59122],{"class":238},"      alert(11)\n",[228,59124,59125],{"class":230,"line":1293},[228,59126,33576],{"class":238},[228,59128,59129],{"class":230,"line":1308},[228,59130,59131],{"class":238},"    btn.addEventListener('click', function () {\n",[228,59133,59134],{"class":230,"line":1314},[228,59135,59136],{"class":238},"      alert(22)\n",[228,59138,59139],{"class":230,"line":1328},[228,59140,33576],{"class":238},[19,59142,59143],{},"点击第一次输出11,第二次点击为22",[200,59145,59147],{"id":59146},"_325-事件类型","3.2.5 事件类型",[19,59149,59150],{},[1576,59151],{"alt":141,"src":59152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22113,59154,59156],{"id":59155},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,59158,59159],{},"补充知识:",[19,59161,59162],{},"轮播图自动播放模块,可以使用",[19,59164,59165],{},"let timerId = setInterval(function () {",[19,59167,59168],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,59170,59171],{},"用js方法模拟进行点击事件,click必须加()",[19,59173,59174],{},"next.click()",[19,59176,59177],{},"}, 1000)",[19,59179,59180],{},[1576,59181],{"alt":141,"src":59182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[220,59184,59186],{"className":53182,"code":59185,"language":53184,"meta":141,"style":141},"\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",[30,59187,59188,59192,59202,59216,59220,59228,59243,59263,59283,59296,59304,59309,59314,59318,59322,59327,59332,59337,59342,59346,59350,59355,59360,59365,59369,59373,59378,59382,59387,59392,59396,59400,59405,59410,59415,59420,59425,59429,59433,59438,59443,59448,59453,59458,59462,59466,59471,59476,59481,59486,59491,59496,59501,59506,59511,59516,59520,59524,59529,59534,59538,59542,59547,59552,59556,59561,59566,59570,59574,59579,59583,59588,59593,59597,59602,59606,59610,59615,59620,59625,59630,59635,59640,59645,59649,59653,59657,59662,59667,59672,59677,59681,59689,59697,59701,59709,59724,59738,59759,59767,59781,59794,59809,59828,59840,59852,59864,59876,59888,59900,59912,59920,59935,59959,59983,59991,59999,60007,60015,60020,60025,60030,60035,60040,60045,60050,60055,60060,60065,60069,60074,60079,60084,60089,60094,60099,60104,60109,60114,60118,60123,60128,60133,60138,60143,60148,60153,60158,60163,60168,60173,60178,60182,60186,60191,60196,60201,60205,60210,60215,60220,60225,60230,60234,60239,60243,60247,60251,60255,60259,60263,60268,60273,60278,60283,60288,60293,60298,60303,60308,60312,60316,60321,60326,60331,60336,60341,60345,60350,60355,60360,60365,60370,60375,60379,60383,60388,60392,60397,60401,60406,60411,60416,60421,60426,60431,60435,60443,60451,60455],{"__ignoreMap":141},[228,59189,59190],{"class":230,"line":231},[228,59191,2514],{"emptyLinePlaceholder":157},[228,59193,59194,59196,59198,59200],{"class":230,"line":142},[228,59195,51412],{"class":238},[228,59197,51416],{"class":234},[228,59199,51419],{"class":287},[228,59201,51422],{"class":238},[228,59203,59204,59206,59208,59210,59212,59214],{"class":230,"line":1293},[228,59205,1148],{"class":238},[228,59207,50750],{"class":51415},[228,59209,51431],{"class":2077},[228,59211,284],{"class":238},[228,59213,51436],{"class":343},[228,59215,51422],{"class":238},[228,59217,59218],{"class":230,"line":1308},[228,59219,2514],{"emptyLinePlaceholder":157},[228,59221,59222,59224,59226],{"class":230,"line":1314},[228,59223,1148],{"class":238},[228,59225,51449],{"class":51415},[228,59227,51422],{"class":238},[228,59229,59230,59232,59234,59236,59238,59240],{"class":230,"line":1328},[228,59231,52259],{"class":238},[228,59233,51459],{"class":51415},[228,59235,51462],{"class":2077},[228,59237,284],{"class":238},[228,59239,51467],{"class":343},[228,59241,59242],{"class":238}," \u002F>\n",[228,59244,59245,59247,59249,59251,59253,59255,59257,59259,59261],{"class":230,"line":1334},[228,59246,52259],{"class":238},[228,59248,51459],{"class":51415},[228,59250,51478],{"class":2077},[228,59252,284],{"class":238},[228,59254,51483],{"class":343},[228,59256,51486],{"class":2077},[228,59258,284],{"class":238},[228,59260,51491],{"class":343},[228,59262,59242],{"class":238},[228,59264,59265,59267,59269,59271,59273,59275,59277,59279,59281],{"class":230,"line":1425},[228,59266,52259],{"class":238},[228,59268,51459],{"class":51415},[228,59270,15035],{"class":2077},[228,59272,284],{"class":238},[228,59274,51506],{"class":343},[228,59276,51486],{"class":2077},[228,59278,284],{"class":238},[228,59280,51513],{"class":343},[228,59282,59242],{"class":238},[228,59284,59285,59287,59289,59292,59294],{"class":230,"line":1431},[228,59286,52259],{"class":238},[228,59288,51522],{"class":51415},[228,59290,59291],{"class":238},">轮播图点击切换\u003C\u002F",[228,59293,51522],{"class":51415},[228,59295,51422],{"class":238},[228,59297,59298,59300,59302],{"class":230,"line":1443},[228,59299,52259],{"class":238},[228,59301,5241],{"class":51415},[228,59303,51422],{"class":238},[228,59305,59306],{"class":230,"line":1726},[228,59307,59308],{"class":238},"    * {\n",[228,59310,59311],{"class":230,"line":1731},[228,59312,59313],{"class":238},"      box-sizing: border-box;\n",[228,59315,59316],{"class":230,"line":1737},[228,59317,2301],{"class":238},[228,59319,59320],{"class":230,"line":1742},[228,59321,2514],{"emptyLinePlaceholder":157},[228,59323,59324],{"class":230,"line":1756},[228,59325,59326],{"class":238},"    .slider {\n",[228,59328,59329],{"class":230,"line":1761},[228,59330,59331],{"class":238},"      width: 560px;\n",[228,59333,59334],{"class":230,"line":1767},[228,59335,59336],{"class":238},"      height: 400px;\n",[228,59338,59339],{"class":230,"line":1788},[228,59340,59341],{"class":238},"      overflow: hidden;\n",[228,59343,59344],{"class":230,"line":1793},[228,59345,2301],{"class":238},[228,59347,59348],{"class":230,"line":1807},[228,59349,2514],{"emptyLinePlaceholder":157},[228,59351,59352],{"class":230,"line":1812},[228,59353,59354],{"class":238},"    .slider-wrapper {\n",[228,59356,59357],{"class":230,"line":1841},[228,59358,59359],{"class":238},"      width: 100%;\n",[228,59361,59362],{"class":230,"line":1846},[228,59363,59364],{"class":238},"      height: 320px;\n",[228,59366,59367],{"class":230,"line":1863},[228,59368,2301],{"class":238},[228,59370,59371],{"class":230,"line":1868},[228,59372,2514],{"emptyLinePlaceholder":157},[228,59374,59375],{"class":230,"line":1873},[228,59376,59377],{"class":238},"    .slider-wrapper img {\n",[228,59379,59380],{"class":230,"line":1878},[228,59381,59359],{"class":238},[228,59383,59384],{"class":230,"line":1892},[228,59385,59386],{"class":238},"      height: 100%;\n",[228,59388,59389],{"class":230,"line":1897},[228,59390,59391],{"class":238},"      display: block;\n",[228,59393,59394],{"class":230,"line":2691},[228,59395,2301],{"class":238},[228,59397,59398],{"class":230,"line":2705},[228,59399,2514],{"emptyLinePlaceholder":157},[228,59401,59402],{"class":230,"line":2713},[228,59403,59404],{"class":238},"    .slider-footer {\n",[228,59406,59407],{"class":230,"line":2718},[228,59408,59409],{"class":238},"      height: 80px;\n",[228,59411,59412],{"class":230,"line":2724},[228,59413,59414],{"class":238},"      background-color: rgb(100, 67, 68);\n",[228,59416,59417],{"class":230,"line":2730},[228,59418,59419],{"class":238},"      padding: 12px 12px 0 12px;\n",[228,59421,59422],{"class":230,"line":2735},[228,59423,59424],{"class":238},"      position: relative;\n",[228,59426,59427],{"class":230,"line":8063},[228,59428,2301],{"class":238},[228,59430,59431],{"class":230,"line":8087},[228,59432,2514],{"emptyLinePlaceholder":157},[228,59434,59435],{"class":230,"line":8092},[228,59436,59437],{"class":238},"    .slider-footer .toggle {\n",[228,59439,59440],{"class":230,"line":8098},[228,59441,59442],{"class":238},"      position: absolute;\n",[228,59444,59445],{"class":230,"line":8125},[228,59446,59447],{"class":238},"      right: 0;\n",[228,59449,59450],{"class":230,"line":8130},[228,59451,59452],{"class":238},"      top: 12px;\n",[228,59454,59455],{"class":230,"line":8136},[228,59456,59457],{"class":238},"      display: flex;\n",[228,59459,59460],{"class":230,"line":8148},[228,59461,2301],{"class":238},[228,59463,59464],{"class":230,"line":8160},[228,59465,2514],{"emptyLinePlaceholder":157},[228,59467,59468],{"class":230,"line":8172},[228,59469,59470],{"class":238},"    .slider-footer .toggle button {\n",[228,59472,59473],{"class":230,"line":9831},[228,59474,59475],{"class":238},"      margin-right: 12px;\n",[228,59477,59478],{"class":230,"line":9856},[228,59479,59480],{"class":238},"      width: 28px;\n",[228,59482,59483],{"class":230,"line":9879},[228,59484,59485],{"class":238},"      height: 28px;\n",[228,59487,59488],{"class":230,"line":9903},[228,59489,59490],{"class":238},"      appearance: none;\n",[228,59492,59493],{"class":230,"line":9908},[228,59494,59495],{"class":238},"      border: none;\n",[228,59497,59498],{"class":230,"line":9913},[228,59499,59500],{"class":238},"      background: rgba(255, 255, 255, 0.1);\n",[228,59502,59503],{"class":230,"line":9918},[228,59504,59505],{"class":238},"      color: #fff;\n",[228,59507,59508],{"class":230,"line":9927},[228,59509,59510],{"class":238},"      border-radius: 4px;\n",[228,59512,59513],{"class":230,"line":9932},[228,59514,59515],{"class":238},"      cursor: pointer;\n",[228,59517,59518],{"class":230,"line":9938},[228,59519,2301],{"class":238},[228,59521,59522],{"class":230,"line":9959},[228,59523,2514],{"emptyLinePlaceholder":157},[228,59525,59526],{"class":230,"line":9965},[228,59527,59528],{"class":238},"    .slider-footer .toggle button:hover {\n",[228,59530,59531],{"class":230,"line":9979},[228,59532,59533],{"class":238},"      background: rgba(255, 255, 255, 0.2);\n",[228,59535,59536],{"class":230,"line":9985},[228,59537,2301],{"class":238},[228,59539,59540],{"class":230,"line":10012},[228,59541,2514],{"emptyLinePlaceholder":157},[228,59543,59544],{"class":230,"line":10021},[228,59545,59546],{"class":238},"    .slider-footer p {\n",[228,59548,59549],{"class":230,"line":10027},[228,59550,59551],{"class":238},"      margin: 0;\n",[228,59553,59554],{"class":230,"line":10035},[228,59555,59505],{"class":238},[228,59557,59558],{"class":230,"line":10040},[228,59559,59560],{"class":238},"      font-size: 18px;\n",[228,59562,59563],{"class":230,"line":16719},[228,59564,59565],{"class":238},"      margin-bottom: 10px;\n",[228,59567,59568],{"class":230,"line":16725},[228,59569,2301],{"class":238},[228,59571,59572],{"class":230,"line":16748},[228,59573,2514],{"emptyLinePlaceholder":157},[228,59575,59576],{"class":230,"line":16754},[228,59577,59578],{"class":238},"    .slider-indicator {\n",[228,59580,59581],{"class":230,"line":16777},[228,59582,59551],{"class":238},[228,59584,59585],{"class":230,"line":16791},[228,59586,59587],{"class":238},"      padding: 0;\n",[228,59589,59590],{"class":230,"line":16811},[228,59591,59592],{"class":238},"      list-style: none;\n",[228,59594,59595],{"class":230,"line":16817},[228,59596,59457],{"class":238},[228,59598,59599],{"class":230,"line":16828},[228,59600,59601],{"class":238},"      align-items: center;\n",[228,59603,59604],{"class":230,"line":16851},[228,59605,2301],{"class":238},[228,59607,59608],{"class":230,"line":16873},[228,59609,2514],{"emptyLinePlaceholder":157},[228,59611,59612],{"class":230,"line":16878},[228,59613,59614],{"class":238},"    .slider-indicator li {\n",[228,59616,59617],{"class":230,"line":16884},[228,59618,59619],{"class":238},"      width: 8px;\n",[228,59621,59622],{"class":230,"line":16898},[228,59623,59624],{"class":238},"      height: 8px;\n",[228,59626,59627],{"class":230,"line":16911},[228,59628,59629],{"class":238},"      margin: 4px;\n",[228,59631,59632],{"class":230,"line":16916},[228,59633,59634],{"class":238},"      border-radius: 50%;\n",[228,59636,59637],{"class":230,"line":16930},[228,59638,59639],{"class":238},"      background: #fff;\n",[228,59641,59642],{"class":230,"line":16935},[228,59643,59644],{"class":238},"      opacity: 0.4;\n",[228,59646,59647],{"class":230,"line":16941},[228,59648,59515],{"class":238},[228,59650,59651],{"class":230,"line":16946},[228,59652,2301],{"class":238},[228,59654,59655],{"class":230,"line":16960},[228,59656,2514],{"emptyLinePlaceholder":157},[228,59658,59659],{"class":230,"line":16965},[228,59660,59661],{"class":238},"    .slider-indicator li.active {\n",[228,59663,59664],{"class":230,"line":16970},[228,59665,59666],{"class":238},"      width: 12px;\n",[228,59668,59669],{"class":230,"line":16984},[228,59670,59671],{"class":238},"      height: 12px;\n",[228,59673,59674],{"class":230,"line":16996},[228,59675,59676],{"class":238},"      opacity: 1;\n",[228,59678,59679],{"class":230,"line":17001},[228,59680,2301],{"class":238},[228,59682,59683,59685,59687],{"class":230,"line":17014},[228,59684,52532],{"class":238},[228,59686,5241],{"class":51415},[228,59688,51422],{"class":238},[228,59690,59691,59693,59695],{"class":230,"line":17019},[228,59692,51900],{"class":238},[228,59694,51449],{"class":51415},[228,59696,51422],{"class":238},[228,59698,59699],{"class":230,"line":17024},[228,59700,2514],{"emptyLinePlaceholder":157},[228,59702,59703,59705,59707],{"class":230,"line":17029},[228,59704,1148],{"class":238},[228,59706,51915],{"class":51415},[228,59708,51422],{"class":238},[228,59710,59711,59713,59715,59717,59719,59722],{"class":230,"line":17042},[228,59712,52259],{"class":238},[228,59714,51726],{"class":51415},[228,59716,53601],{"class":2077},[228,59718,284],{"class":238},[228,59720,59721],{"class":343},"\"slider\"",[228,59723,51422],{"class":238},[228,59725,59726,59728,59730,59732,59734,59736],{"class":230,"line":17047},[228,59727,51456],{"class":238},[228,59729,51726],{"class":51415},[228,59731,53601],{"class":2077},[228,59733,284],{"class":238},[228,59735,55342],{"class":343},[228,59737,51422],{"class":238},[228,59739,59740,59742,59744,59746,59748,59751,59753,59755,59757],{"class":230,"line":32748},[228,59741,55349],{"class":238},[228,59743,1576],{"class":51415},[228,59745,55354],{"class":2077},[228,59747,284],{"class":238},[228,59749,59750],{"class":343},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[228,59752,55362],{"class":2077},[228,59754,284],{"class":238},[228,59756,7767],{"class":343},[228,59758,59242],{"class":238},[228,59760,59761,59763,59765],{"class":230,"line":32754},[228,59762,51891],{"class":238},[228,59764,51726],{"class":51415},[228,59766,51422],{"class":238},[228,59768,59769,59771,59773,59775,59777,59779],{"class":230,"line":32760},[228,59770,51456],{"class":238},[228,59772,51726],{"class":51415},[228,59774,53601],{"class":2077},[228,59776,284],{"class":238},[228,59778,55389],{"class":343},[228,59780,51422],{"class":238},[228,59782,59783,59785,59787,59790,59792],{"class":230,"line":32766},[228,59784,55349],{"class":238},[228,59786,19],{"class":51415},[228,59788,59789],{"class":238},">对人类来说会不会太超前了？\u003C\u002F",[228,59791,19],{"class":51415},[228,59793,51422],{"class":238},[228,59795,59796,59798,59800,59802,59804,59807],{"class":230,"line":32772},[228,59797,55349],{"class":238},[228,59799,1245],{"class":51415},[228,59801,53601],{"class":2077},[228,59803,284],{"class":238},[228,59805,59806],{"class":343},"\"slider-indicator\"",[228,59808,51422],{"class":238},[228,59810,59811,59813,59815,59817,59819,59822,59824,59826],{"class":230,"line":32783},[228,59812,55417],{"class":238},[228,59814,186],{"class":51415},[228,59816,53601],{"class":2077},[228,59818,284],{"class":238},[228,59820,59821],{"class":343},"\"active\"",[228,59823,55429],{"class":238},[228,59825,186],{"class":51415},[228,59827,51422],{"class":238},[228,59829,59830,59832,59834,59836,59838],{"class":230,"line":32789},[228,59831,55417],{"class":238},[228,59833,186],{"class":51415},[228,59835,55429],{"class":238},[228,59837,186],{"class":51415},[228,59839,51422],{"class":238},[228,59841,59842,59844,59846,59848,59850],{"class":230,"line":32809},[228,59843,55417],{"class":238},[228,59845,186],{"class":51415},[228,59847,55429],{"class":238},[228,59849,186],{"class":51415},[228,59851,51422],{"class":238},[228,59853,59854,59856,59858,59860,59862],{"class":230,"line":32815},[228,59855,55417],{"class":238},[228,59857,186],{"class":51415},[228,59859,55429],{"class":238},[228,59861,186],{"class":51415},[228,59863,51422],{"class":238},[228,59865,59866,59868,59870,59872,59874],{"class":230,"line":32826},[228,59867,55417],{"class":238},[228,59869,186],{"class":51415},[228,59871,55429],{"class":238},[228,59873,186],{"class":51415},[228,59875,51422],{"class":238},[228,59877,59878,59880,59882,59884,59886],{"class":230,"line":32832},[228,59879,55417],{"class":238},[228,59881,186],{"class":51415},[228,59883,55429],{"class":238},[228,59885,186],{"class":51415},[228,59887,51422],{"class":238},[228,59889,59890,59892,59894,59896,59898],{"class":230,"line":32838},[228,59891,55417],{"class":238},[228,59893,186],{"class":51415},[228,59895,55429],{"class":238},[228,59897,186],{"class":51415},[228,59899,51422],{"class":238},[228,59901,59902,59904,59906,59908,59910],{"class":230,"line":32844},[228,59903,55417],{"class":238},[228,59905,186],{"class":51415},[228,59907,55429],{"class":238},[228,59909,186],{"class":51415},[228,59911,51422],{"class":238},[228,59913,59914,59916,59918],{"class":230,"line":32850},[228,59915,55522],{"class":238},[228,59917,1245],{"class":51415},[228,59919,51422],{"class":238},[228,59921,59922,59924,59926,59928,59930,59933],{"class":230,"line":32856},[228,59923,55349],{"class":238},[228,59925,51726],{"class":51415},[228,59927,53601],{"class":2077},[228,59929,284],{"class":238},[228,59931,59932],{"class":343},"\"toggle\"",[228,59934,51422],{"class":238},[228,59936,59937,59939,59941,59943,59945,59948,59950,59953,59955,59957],{"class":230,"line":32862},[228,59938,55417],{"class":238},[228,59940,54002],{"class":51415},[228,59942,53601],{"class":2077},[228,59944,284],{"class":238},[228,59946,59947],{"class":343},"\"prev\"",[228,59949,1198],{"class":238},[228,59951,59952],{"class":287},"&lt;",[228,59954,51900],{"class":238},[228,59956,54002],{"class":51415},[228,59958,51422],{"class":238},[228,59960,59961,59963,59965,59967,59969,59972,59974,59977,59979,59981],{"class":230,"line":32868},[228,59962,55417],{"class":238},[228,59964,54002],{"class":51415},[228,59966,53601],{"class":2077},[228,59968,284],{"class":238},[228,59970,59971],{"class":343},"\"next\"",[228,59973,1198],{"class":238},[228,59975,59976],{"class":287},"&gt;",[228,59978,51900],{"class":238},[228,59980,54002],{"class":51415},[228,59982,51422],{"class":238},[228,59984,59985,59987,59989],{"class":230,"line":32888},[228,59986,55522],{"class":238},[228,59988,51726],{"class":51415},[228,59990,51422],{"class":238},[228,59992,59993,59995,59997],{"class":230,"line":32894},[228,59994,51891],{"class":238},[228,59996,51726],{"class":51415},[228,59998,51422],{"class":238},[228,60000,60001,60003,60005],{"class":230,"line":32910},[228,60002,52532],{"class":238},[228,60004,51726],{"class":51415},[228,60006,51422],{"class":238},[228,60008,60009,60011,60013],{"class":230,"line":32916},[228,60010,52259],{"class":238},[228,60012,51928],{"class":51415},[228,60014,51422],{"class":238},[228,60016,60017],{"class":230,"line":32930},[228,60018,60019],{"class":238},"    \u002F\u002F 1. 初始数据\n",[228,60021,60022],{"class":230,"line":32936},[228,60023,60024],{"class":238},"    const data = [\n",[228,60026,60027],{"class":230,"line":32951},[228,60028,60029],{"class":238},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[228,60031,60032],{"class":230,"line":32957},[228,60033,60034],{"class":238},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[228,60036,60037],{"class":230,"line":32966},[228,60038,60039],{"class":238},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[228,60041,60042],{"class":230,"line":32972},[228,60043,60044],{"class":238},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[228,60046,60047],{"class":230,"line":32981},[228,60048,60049],{"class":238},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[228,60051,60052],{"class":230,"line":32987},[228,60053,60054],{"class":238},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[228,60056,60057],{"class":230,"line":32993},[228,60058,60059],{"class":238},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[228,60061,60062],{"class":230,"line":33002},[228,60063,60064],{"class":238},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[228,60066,60067],{"class":230,"line":33008},[228,60068,53224],{"class":238},[228,60070,60071],{"class":230,"line":33019},[228,60072,60073],{"class":238},"    \u002F\u002F 获取元素\n",[228,60075,60076],{"class":230,"line":33025},[228,60077,60078],{"class":238},"    const img = document.querySelector('.slider-wrapper img')\n",[228,60080,60081],{"class":230,"line":33044},[228,60082,60083],{"class":238},"    const p = document.querySelector('.slider-footer p')\n",[228,60085,60086],{"class":230,"line":33050},[228,60087,60088],{"class":238},"    const footer = document.querySelector('.slider-footer')\n",[228,60090,60091],{"class":230,"line":33061},[228,60092,60093],{"class":238},"    \u002F\u002F 1. 右按钮业务\n",[228,60095,60096],{"class":230,"line":33067},[228,60097,60098],{"class":238},"    \u002F\u002F 1.1 获取右侧按钮 \n",[228,60100,60101],{"class":230,"line":33087},[228,60102,60103],{"class":238},"    const next = document.querySelector('.next')\n",[228,60105,60106],{"class":230,"line":33103},[228,60107,60108],{"class":238},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[228,60110,60111],{"class":230,"line":33109},[228,60112,60113],{"class":238},"    \u002F\u002F 1.2 注册点击事件\n",[228,60115,60116],{"class":230,"line":33123},[228,60117,2514],{"emptyLinePlaceholder":157},[228,60119,60120],{"class":230,"line":33129},[228,60121,60122],{"class":238},"    next.addEventListener('click', function () {\n",[228,60124,60125],{"class":230,"line":33135},[228,60126,60127],{"class":238},"      \u002F\u002F console.log(11)\n",[228,60129,60130],{"class":230,"line":33146},[228,60131,60132],{"class":238},"      i++\n",[228,60134,60135],{"class":230,"line":33152},[228,60136,60137],{"class":238},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[228,60139,60140],{"class":230,"line":33158},[228,60141,60142],{"class":238},"      \u002F\u002F if (i >= 8) {\n",[228,60144,60145],{"class":230,"line":33168},[228,60146,60147],{"class":238},"      \u002F\u002F   i = 0\n",[228,60149,60150],{"class":230,"line":33174},[228,60151,60152],{"class":238},"      \u002F\u002F }\n",[228,60154,60155],{"class":230,"line":33185},[228,60156,60157],{"class":238},"      i = i >= data.length ? 0 : i\n",[228,60159,60160],{"class":230,"line":33191},[228,60161,60162],{"class":238},"      \u002F\u002F 1.3 得到对应的对象\n",[228,60164,60165],{"class":230,"line":33201},[228,60166,60167],{"class":238},"      \u002F\u002F console.log(data[i])\n",[228,60169,60170],{"class":230,"line":33206},[228,60171,60172],{"class":238},"      \u002F\u002F 调用函数\n",[228,60174,60175],{"class":230,"line":33212},[228,60176,60177],{"class":238},"      toggle()\n",[228,60179,60180],{"class":230,"line":33261},[228,60181,33576],{"class":238},[228,60183,60184],{"class":230,"line":33308},[228,60185,2514],{"emptyLinePlaceholder":157},[228,60187,60188],{"class":230,"line":33313},[228,60189,60190],{"class":238},"    \u002F\u002F 2. 左侧按钮业务\n",[228,60192,60193],{"class":230,"line":33319},[228,60194,60195],{"class":238},"    \u002F\u002F 2.1 获取左侧按钮 \n",[228,60197,60198],{"class":230,"line":33338},[228,60199,60200],{"class":238},"    const prev = document.querySelector('.prev')\n",[228,60202,60203],{"class":230,"line":33344},[228,60204,60113],{"class":238},[228,60206,60207],{"class":230,"line":33364},[228,60208,60209],{"class":238},"    prev.addEventListener('click', function () {\n",[228,60211,60212],{"class":230,"line":33370},[228,60213,60214],{"class":238},"      i--\n",[228,60216,60217],{"class":230,"line":33376},[228,60218,60219],{"class":238},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[228,60221,60222],{"class":230,"line":33386},[228,60223,60224],{"class":238},"      \u002F\u002F if (i \u003C 0) {\n",[228,60226,60227],{"class":230,"line":33391},[228,60228,60229],{"class":238},"      \u002F\u002F   i = 7\n",[228,60231,60232],{"class":230,"line":33397},[228,60233,60152],{"class":238},[228,60235,60236],{"class":230,"line":33413},[228,60237,60238],{"class":238},"      i = i \u003C 0 ? data.length - 1 : i\n",[228,60240,60241],{"class":230,"line":33458},[228,60242,60162],{"class":238},[228,60244,60245],{"class":230,"line":33464},[228,60246,60167],{"class":238},[228,60248,60249],{"class":230,"line":33470},[228,60250,60172],{"class":238},[228,60252,60253],{"class":230,"line":33476},[228,60254,60177],{"class":238},[228,60256,60257],{"class":230,"line":33487},[228,60258,33576],{"class":238},[228,60260,60261],{"class":230,"line":33493},[228,60262,2514],{"emptyLinePlaceholder":157},[228,60264,60265],{"class":230,"line":33499},[228,60266,60267],{"class":238},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[228,60269,60270],{"class":230,"line":33505},[228,60271,60272],{"class":238},"    function toggle() {\n",[228,60274,60275],{"class":230,"line":33523},[228,60276,60277],{"class":238},"      \u002F\u002F 1.4 渲染对应的数据\n",[228,60279,60280],{"class":230,"line":33537},[228,60281,60282],{"class":238},"      img.src = data[i].url\n",[228,60284,60285],{"class":230,"line":33546},[228,60286,60287],{"class":238},"      p.innerHTML = data[i].title\n",[228,60289,60290],{"class":230,"line":33555},[228,60291,60292],{"class":238},"      footer.style.backgroundColor = data[i].color\n",[228,60294,60295],{"class":230,"line":33564},[228,60296,60297],{"class":238},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[228,60299,60300],{"class":230,"line":33573},[228,60301,60302],{"class":238},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[228,60304,60305],{"class":230,"line":33579},[228,60306,60307],{"class":238},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[228,60309,60310],{"class":230,"line":33585},[228,60311,2301],{"class":238},[228,60313,60314],{"class":230,"line":33593},[228,60315,2514],{"emptyLinePlaceholder":157},[228,60317,60318],{"class":230,"line":33598},[228,60319,60320],{"class":238},"    \u002F\u002F 3. 自动播放模块\n",[228,60322,60323],{"class":230,"line":33604},[228,60324,60325],{"class":238},"    let timerId = setInterval(function () {\n",[228,60327,60328],{"class":230,"line":33615},[228,60329,60330],{"class":238},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[228,60332,60333],{"class":230,"line":33621},[228,60334,60335],{"class":238},"      next.click()\n",[228,60337,60338],{"class":230,"line":33641},[228,60339,60340],{"class":238},"    }, 1000)\n",[228,60342,60343],{"class":230,"line":33647},[228,60344,2514],{"emptyLinePlaceholder":157},[228,60346,60347],{"class":230,"line":33653},[228,60348,60349],{"class":238},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[228,60351,60352],{"class":230,"line":33659},[228,60353,60354],{"class":238},"    const slider = document.querySelector('.slider')\n",[228,60356,60357],{"class":230,"line":33676},[228,60358,60359],{"class":238},"    \u002F\u002F 注册事件\n",[228,60361,60362],{"class":230,"line":33682},[228,60363,60364],{"class":238},"    slider.addEventListener('mouseenter', function () {\n",[228,60366,60367],{"class":230,"line":33688},[228,60368,60369],{"class":238},"      \u002F\u002F 停止定时器\n",[228,60371,60372],{"class":230,"line":33694},[228,60373,60374],{"class":238},"      clearInterval(timerId)\n",[228,60376,60377],{"class":230,"line":33700},[228,60378,33576],{"class":238},[228,60380,60381],{"class":230,"line":33706},[228,60382,2514],{"emptyLinePlaceholder":157},[228,60384,60385],{"class":230,"line":33733},[228,60386,60387],{"class":238},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[228,60389,60390],{"class":230,"line":33757},[228,60391,60359],{"class":238},[228,60393,60394],{"class":230,"line":33763},[228,60395,60396],{"class":238},"    slider.addEventListener('mouseleave', function () {\n",[228,60398,60399],{"class":230,"line":33769},[228,60400,60369],{"class":238},[228,60402,60403],{"class":230,"line":33775},[228,60404,60405],{"class":238},"      if (timerId) clearInterval(timerId)\n",[228,60407,60408],{"class":230,"line":33786},[228,60409,60410],{"class":238},"      \u002F\u002F 开启定时器\n",[228,60412,60413],{"class":230,"line":33797},[228,60414,60415],{"class":238},"      timerId = setInterval(function () {\n",[228,60417,60418],{"class":230,"line":33803},[228,60419,60420],{"class":238},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[228,60422,60423],{"class":230,"line":33820},[228,60424,60425],{"class":238},"        next.click()\n",[228,60427,60428],{"class":230,"line":33843},[228,60429,60430],{"class":238},"      }, 1000)\n",[228,60432,60433],{"class":230,"line":33866},[228,60434,33576],{"class":238},[228,60436,60437,60439,60441],{"class":230,"line":33872},[228,60438,52532],{"class":238},[228,60440,51928],{"class":51415},[228,60442,51422],{"class":238},[228,60444,60445,60447,60449],{"class":230,"line":33877},[228,60446,51900],{"class":238},[228,60448,51915],{"class":51415},[228,60450,51422],{"class":238},[228,60452,60453],{"class":230,"line":33886},[228,60454,2514],{"emptyLinePlaceholder":157},[228,60456,60457,60459,60461],{"class":230,"line":33896},[228,60458,51900],{"class":238},[228,60460,50750],{"class":51415},[228,60462,51422],{"class":238},[22113,60464,60466],{"id":60465},"_3252-焦点事件","3.2.5.2 焦点事件",[19,60468,60469],{},"小米搜索框案例：",[220,60471,60473],{"className":50748,"code":60472,"language":50750,"meta":141,"style":141},"\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",[30,60474,60475,60485,60499,60503,60511,60525,60545,60565,60577,60585,60591,60601,60611,60623,60627,60631,60638,60642,60653,60657,60661,60668,60679,60692,60706,60710,60714,60723,60735,60747,60761,60774,60787,60805,60816,60820,60824,60833,60850,60854,60858,60865,60875,60885,60896,60909,60921,60937,60948,60960,60964,60968,60976,60987,61004,61016,61028,61039,61043,61047,61058,61069,61073,61081,61085,61093,61097,61105,61120,61143,61158,61189,61216,61243,61270,61297,61324,61351,61360,61368,61376,61381,61401,61421,61426,61431,61449,61454,61464,61469,61483,61488,61493,61510,61519,61531,61535,61543,61551,61555],{"__ignoreMap":141},[228,60476,60477,60479,60481,60483],{"class":230,"line":231},[228,60478,51412],{"class":238},[228,60480,51416],{"class":51415},[228,60482,51419],{"class":2077},[228,60484,51422],{"class":238},[228,60486,60487,60489,60491,60493,60495,60497],{"class":230,"line":142},[228,60488,1148],{"class":238},[228,60490,50750],{"class":51415},[228,60492,51431],{"class":2077},[228,60494,284],{"class":238},[228,60496,51436],{"class":343},[228,60498,51422],{"class":238},[228,60500,60501],{"class":230,"line":1293},[228,60502,2514],{"emptyLinePlaceholder":157},[228,60504,60505,60507,60509],{"class":230,"line":1308},[228,60506,1148],{"class":238},[228,60508,51449],{"class":51415},[228,60510,51422],{"class":238},[228,60512,60513,60515,60517,60519,60521,60523],{"class":230,"line":1314},[228,60514,51456],{"class":238},[228,60516,51459],{"class":51415},[228,60518,51462],{"class":2077},[228,60520,284],{"class":238},[228,60522,51467],{"class":343},[228,60524,51422],{"class":238},[228,60526,60527,60529,60531,60533,60535,60537,60539,60541,60543],{"class":230,"line":1328},[228,60528,51456],{"class":238},[228,60530,51459],{"class":51415},[228,60532,51478],{"class":2077},[228,60534,284],{"class":238},[228,60536,51483],{"class":343},[228,60538,51486],{"class":2077},[228,60540,284],{"class":238},[228,60542,51491],{"class":343},[228,60544,51422],{"class":238},[228,60546,60547,60549,60551,60553,60555,60557,60559,60561,60563],{"class":230,"line":1334},[228,60548,51456],{"class":238},[228,60550,51459],{"class":51415},[228,60552,15035],{"class":2077},[228,60554,284],{"class":238},[228,60556,51506],{"class":343},[228,60558,51486],{"class":2077},[228,60560,284],{"class":238},[228,60562,51513],{"class":343},[228,60564,51422],{"class":238},[228,60566,60567,60569,60571,60573,60575],{"class":230,"line":1425},[228,60568,51456],{"class":238},[228,60570,51522],{"class":51415},[228,60572,51525],{"class":238},[228,60574,51522],{"class":51415},[228,60576,51422],{"class":238},[228,60578,60579,60581,60583],{"class":230,"line":1431},[228,60580,51456],{"class":238},[228,60582,5241],{"class":51415},[228,60584,51422],{"class":238},[228,60586,60587,60589],{"class":230,"line":1443},[228,60588,51542],{"class":51415},[228,60590,15687],{"class":238},[228,60592,60593,60595,60597,60599],{"class":230,"line":1726},[228,60594,51549],{"class":287},[228,60596,51552],{"class":238},[228,60598,430],{"class":287},[228,60600,1404],{"class":238},[228,60602,60603,60605,60607,60609],{"class":230,"line":1731},[228,60604,51561],{"class":287},[228,60606,51552],{"class":238},[228,60608,430],{"class":287},[228,60610,1404],{"class":238},[228,60612,60613,60616,60618,60621],{"class":230,"line":1737},[228,60614,60615],{"class":287},"            box-sizing",[228,60617,51552],{"class":238},[228,60619,60620],{"class":287},"border-box",[228,60622,1404],{"class":238},[228,60624,60625],{"class":230,"line":1742},[228,60626,2643],{"class":238},[228,60628,60629],{"class":230,"line":1756},[228,60630,2514],{"emptyLinePlaceholder":157},[228,60632,60633,60636],{"class":230,"line":1761},[228,60634,60635],{"class":51415},"        ul",[228,60637,15687],{"class":238},[228,60639,60640],{"class":230,"line":1767},[228,60641,2514],{"emptyLinePlaceholder":157},[228,60643,60644,60647,60649,60651],{"class":230,"line":1788},[228,60645,60646],{"class":287},"            list-style",[228,60648,51552],{"class":238},[228,60650,54852],{"class":287},[228,60652,1404],{"class":238},[228,60654,60655],{"class":230,"line":1793},[228,60656,2643],{"class":238},[228,60658,60659],{"class":230,"line":1807},[228,60660,2514],{"emptyLinePlaceholder":157},[228,60662,60663,60666],{"class":230,"line":1812},[228,60664,60665],{"class":2077},"        .mi",[228,60667,15687],{"class":238},[228,60669,60670,60673,60675,60677],{"class":230,"line":1841},[228,60671,60672],{"class":287},"            position",[228,60674,51552],{"class":238},[228,60676,54879],{"class":287},[228,60678,1404],{"class":238},[228,60680,60681,60683,60685,60688,60690],{"class":230,"line":1846},[228,60682,51599],{"class":287},[228,60684,51552],{"class":238},[228,60686,60687],{"class":287},"223",[228,60689,51607],{"class":234},[228,60691,1404],{"class":238},[228,60693,60694,60696,60698,60700,60702,60704],{"class":230,"line":1863},[228,60695,51549],{"class":287},[228,60697,51552],{"class":238},[228,60699,549],{"class":287},[228,60701,51607],{"class":234},[228,60703,51671],{"class":287},[228,60705,1404],{"class":238},[228,60707,60708],{"class":230,"line":1868},[228,60709,2643],{"class":238},[228,60711,60712],{"class":230,"line":1873},[228,60713,2514],{"emptyLinePlaceholder":157},[228,60715,60716,60718,60721],{"class":230,"line":1878},[228,60717,60665],{"class":2077},[228,60719,60720],{"class":51415}," input",[228,60722,15687],{"class":238},[228,60724,60725,60727,60729,60731,60733],{"class":230,"line":1892},[228,60726,51599],{"class":287},[228,60728,51552],{"class":238},[228,60730,60687],{"class":287},[228,60732,51607],{"class":234},[228,60734,1404],{"class":238},[228,60736,60737,60739,60741,60743,60745],{"class":230,"line":1897},[228,60738,51614],{"class":287},[228,60740,51552],{"class":238},[228,60742,845],{"class":287},[228,60744,51607],{"class":234},[228,60746,1404],{"class":238},[228,60748,60749,60751,60753,60755,60757,60759],{"class":230,"line":2691},[228,60750,51561],{"class":287},[228,60752,51552],{"class":238},[228,60754,430],{"class":287},[228,60756,2152],{"class":287},[228,60758,51607],{"class":234},[228,60760,1404],{"class":238},[228,60762,60763,60766,60768,60770,60772],{"class":230,"line":2705},[228,60764,60765],{"class":287},"            font-size",[228,60767,51552],{"class":238},[228,60769,787],{"class":287},[228,60771,51607],{"class":234},[228,60773,1404],{"class":238},[228,60775,60776,60779,60781,60783,60785],{"class":230,"line":2713},[228,60777,60778],{"class":287},"            line-height",[228,60780,51552],{"class":238},[228,60782,845],{"class":287},[228,60784,51607],{"class":234},[228,60786,1404],{"class":238},[228,60788,60789,60792,60794,60796,60798,60800,60803],{"class":230,"line":2718},[228,60790,60791],{"class":287},"            border",[228,60793,51552],{"class":238},[228,60795,456],{"class":287},[228,60797,51607],{"class":234},[228,60799,51636],{"class":287},[228,60801,60802],{"class":287}," #e0e0e0",[228,60804,1404],{"class":238},[228,60806,60807,60810,60812,60814],{"class":230,"line":2724},[228,60808,60809],{"class":287},"            outline",[228,60811,51552],{"class":238},[228,60813,54852],{"class":287},[228,60815,1404],{"class":238},[228,60817,60818],{"class":230,"line":2730},[228,60819,2643],{"class":238},[228,60821,60822],{"class":230,"line":2735},[228,60823,2514],{"emptyLinePlaceholder":157},[228,60825,60826,60828,60831],{"class":230,"line":8063},[228,60827,60665],{"class":2077},[228,60829,60830],{"class":2077}," .search",[228,60832,15687],{"class":238},[228,60834,60835,60837,60839,60841,60843,60845,60848],{"class":230,"line":8087},[228,60836,60791],{"class":287},[228,60838,51552],{"class":238},[228,60840,456],{"class":287},[228,60842,51607],{"class":234},[228,60844,51636],{"class":287},[228,60846,60847],{"class":287}," #ff6700",[228,60849,1404],{"class":238},[228,60851,60852],{"class":230,"line":8092},[228,60853,2643],{"class":238},[228,60855,60856],{"class":230,"line":8098},[228,60857,2514],{"emptyLinePlaceholder":157},[228,60859,60860,60863],{"class":230,"line":8125},[228,60861,60862],{"class":2077},"        .result-list",[228,60864,15687],{"class":238},[228,60866,60867,60869,60871,60873],{"class":230,"line":8130},[228,60868,51587],{"class":287},[228,60870,51552],{"class":238},[228,60872,54852],{"class":287},[228,60874,1404],{"class":238},[228,60876,60877,60879,60881,60883],{"class":230,"line":8136},[228,60878,60672],{"class":287},[228,60880,51552],{"class":238},[228,60882,54946],{"class":287},[228,60884,1404],{"class":238},[228,60886,60887,60890,60892,60894],{"class":230,"line":8148},[228,60888,60889],{"class":287},"            left",[228,60891,51552],{"class":238},[228,60893,430],{"class":287},[228,60895,1404],{"class":238},[228,60897,60898,60901,60903,60905,60907],{"class":230,"line":8160},[228,60899,60900],{"class":287},"            top",[228,60902,51552],{"class":238},[228,60904,845],{"class":287},[228,60906,51607],{"class":234},[228,60908,1404],{"class":238},[228,60910,60911,60913,60915,60917,60919],{"class":230,"line":8172},[228,60912,51599],{"class":287},[228,60914,51552],{"class":238},[228,60916,60687],{"class":287},[228,60918,51607],{"class":234},[228,60920,1404],{"class":238},[228,60922,60923,60925,60927,60929,60931,60933,60935],{"class":230,"line":9831},[228,60924,60791],{"class":287},[228,60926,51552],{"class":238},[228,60928,456],{"class":287},[228,60930,51607],{"class":234},[228,60932,51636],{"class":287},[228,60934,60847],{"class":287},[228,60936,1404],{"class":238},[228,60938,60939,60942,60944,60946],{"class":230,"line":9856},[228,60940,60941],{"class":287},"            border-top",[228,60943,51552],{"class":238},[228,60945,430],{"class":287},[228,60947,1404],{"class":238},[228,60949,60950,60953,60955,60958],{"class":230,"line":9879},[228,60951,60952],{"class":287},"            background",[228,60954,51552],{"class":238},[228,60956,60957],{"class":287},"#fff",[228,60959,1404],{"class":238},[228,60961,60962],{"class":230,"line":9903},[228,60963,2643],{"class":238},[228,60965,60966],{"class":230,"line":9908},[228,60967,2514],{"emptyLinePlaceholder":157},[228,60969,60970,60972,60974],{"class":230,"line":9913},[228,60971,60862],{"class":2077},[228,60973,1512],{"class":51415},[228,60975,15687],{"class":238},[228,60977,60978,60980,60982,60985],{"class":230,"line":9918},[228,60979,51587],{"class":287},[228,60981,51552],{"class":238},[228,60983,60984],{"class":287},"block",[228,60986,1404],{"class":238},[228,60988,60989,60991,60993,60995,60997,61000,61002],{"class":230,"line":9927},[228,60990,51561],{"class":287},[228,60992,51552],{"class":238},[228,60994,582],{"class":287},[228,60996,51607],{"class":234},[228,60998,60999],{"class":287}," 15",[228,61001,51607],{"class":234},[228,61003,1404],{"class":238},[228,61005,61006,61008,61010,61012,61014],{"class":230,"line":9932},[228,61007,60765],{"class":287},[228,61009,51552],{"class":238},[228,61011,736],{"class":287},[228,61013,51607],{"class":234},[228,61015,1404],{"class":238},[228,61017,61018,61021,61023,61026],{"class":230,"line":9938},[228,61019,61020],{"class":287},"            color",[228,61022,51552],{"class":238},[228,61024,61025],{"class":287},"#424242",[228,61027,1404],{"class":238},[228,61029,61030,61033,61035,61037],{"class":230,"line":9959},[228,61031,61032],{"class":287},"            text-decoration",[228,61034,51552],{"class":238},[228,61036,54852],{"class":287},[228,61038,1404],{"class":238},[228,61040,61041],{"class":230,"line":9965},[228,61042,2643],{"class":238},[228,61044,61045],{"class":230,"line":9979},[228,61046,2514],{"emptyLinePlaceholder":157},[228,61048,61049,61051,61053,61056],{"class":230,"line":9985},[228,61050,60862],{"class":2077},[228,61052,1512],{"class":51415},[228,61054,61055],{"class":2077},":hover",[228,61057,15687],{"class":238},[228,61059,61060,61062,61064,61067],{"class":230,"line":10012},[228,61061,51755],{"class":287},[228,61063,51552],{"class":238},[228,61065,61066],{"class":287},"#eee",[228,61068,1404],{"class":238},[228,61070,61071],{"class":230,"line":10021},[228,61072,2643],{"class":238},[228,61074,61075,61077,61079],{"class":230,"line":10027},[228,61076,51891],{"class":238},[228,61078,5241],{"class":51415},[228,61080,51422],{"class":238},[228,61082,61083],{"class":230,"line":10035},[228,61084,2514],{"emptyLinePlaceholder":157},[228,61086,61087,61089,61091],{"class":230,"line":10040},[228,61088,51900],{"class":238},[228,61090,51449],{"class":51415},[228,61092,51422],{"class":238},[228,61094,61095],{"class":230,"line":16719},[228,61096,2514],{"emptyLinePlaceholder":157},[228,61098,61099,61101,61103],{"class":230,"line":16725},[228,61100,1148],{"class":238},[228,61102,51915],{"class":51415},[228,61104,51422],{"class":238},[228,61106,61107,61109,61111,61113,61115,61118],{"class":230,"line":16748},[228,61108,51456],{"class":238},[228,61110,51726],{"class":51415},[228,61112,53601],{"class":2077},[228,61114,284],{"class":238},[228,61116,61117],{"class":343},"\"mi\"",[228,61119,51422],{"class":238},[228,61121,61122,61124,61126,61128,61130,61133,61136,61138,61141],{"class":230,"line":16754},[228,61123,55417],{"class":238},[228,61125,53936],{"class":51415},[228,61127,53939],{"class":2077},[228,61129,284],{"class":238},[228,61131,61132],{"class":343},"\"search\"",[228,61134,61135],{"class":2077}," placeholder",[228,61137,284],{"class":238},[228,61139,61140],{"class":343},"\"小米笔记本\"",[228,61142,51422],{"class":238},[228,61144,61145,61147,61149,61151,61153,61156],{"class":230,"line":16777},[228,61146,55417],{"class":238},[228,61148,1245],{"class":51415},[228,61150,53601],{"class":2077},[228,61152,284],{"class":238},[228,61154,61155],{"class":343},"\"result-list\"",[228,61157,51422],{"class":238},[228,61159,61160,61163,61165,61168,61170,61173,61175,61178,61181,61183,61185,61187],{"class":230,"line":16791},[228,61161,61162],{"class":238},"            \u003C",[228,61164,186],{"class":51415},[228,61166,61167],{"class":238},">\u003C",[228,61169,476],{"class":51415},[228,61171,61172],{"class":2077}," href",[228,61174,284],{"class":238},[228,61176,61177],{"class":343},"\"#\"",[228,61179,61180],{"class":238},">全部商品\u003C\u002F",[228,61182,476],{"class":51415},[228,61184,55429],{"class":238},[228,61186,186],{"class":51415},[228,61188,51422],{"class":238},[228,61190,61191,61193,61195,61197,61199,61201,61203,61205,61208,61210,61212,61214],{"class":230,"line":16811},[228,61192,61162],{"class":238},[228,61194,186],{"class":51415},[228,61196,61167],{"class":238},[228,61198,476],{"class":51415},[228,61200,61172],{"class":2077},[228,61202,284],{"class":238},[228,61204,61177],{"class":343},[228,61206,61207],{"class":238},">小米11\u003C\u002F",[228,61209,476],{"class":51415},[228,61211,55429],{"class":238},[228,61213,186],{"class":51415},[228,61215,51422],{"class":238},[228,61217,61218,61220,61222,61224,61226,61228,61230,61232,61235,61237,61239,61241],{"class":230,"line":16817},[228,61219,61162],{"class":238},[228,61221,186],{"class":51415},[228,61223,61167],{"class":238},[228,61225,476],{"class":51415},[228,61227,61172],{"class":2077},[228,61229,284],{"class":238},[228,61231,61177],{"class":343},[228,61233,61234],{"class":238},">小米10S\u003C\u002F",[228,61236,476],{"class":51415},[228,61238,55429],{"class":238},[228,61240,186],{"class":51415},[228,61242,51422],{"class":238},[228,61244,61245,61247,61249,61251,61253,61255,61257,61259,61262,61264,61266,61268],{"class":230,"line":16828},[228,61246,61162],{"class":238},[228,61248,186],{"class":51415},[228,61250,61167],{"class":238},[228,61252,476],{"class":51415},[228,61254,61172],{"class":2077},[228,61256,284],{"class":238},[228,61258,61177],{"class":343},[228,61260,61261],{"class":238},">小米笔记本\u003C\u002F",[228,61263,476],{"class":51415},[228,61265,55429],{"class":238},[228,61267,186],{"class":51415},[228,61269,51422],{"class":238},[228,61271,61272,61274,61276,61278,61280,61282,61284,61286,61289,61291,61293,61295],{"class":230,"line":16851},[228,61273,61162],{"class":238},[228,61275,186],{"class":51415},[228,61277,61167],{"class":238},[228,61279,476],{"class":51415},[228,61281,61172],{"class":2077},[228,61283,284],{"class":238},[228,61285,61177],{"class":343},[228,61287,61288],{"class":238},">小米手机\u003C\u002F",[228,61290,476],{"class":51415},[228,61292,55429],{"class":238},[228,61294,186],{"class":51415},[228,61296,51422],{"class":238},[228,61298,61299,61301,61303,61305,61307,61309,61311,61313,61316,61318,61320,61322],{"class":230,"line":16873},[228,61300,61162],{"class":238},[228,61302,186],{"class":51415},[228,61304,61167],{"class":238},[228,61306,476],{"class":51415},[228,61308,61172],{"class":2077},[228,61310,284],{"class":238},[228,61312,61177],{"class":343},[228,61314,61315],{"class":238},">黑鲨4\u003C\u002F",[228,61317,476],{"class":51415},[228,61319,55429],{"class":238},[228,61321,186],{"class":51415},[228,61323,51422],{"class":238},[228,61325,61326,61328,61330,61332,61334,61336,61338,61340,61343,61345,61347,61349],{"class":230,"line":16878},[228,61327,61162],{"class":238},[228,61329,186],{"class":51415},[228,61331,61167],{"class":238},[228,61333,476],{"class":51415},[228,61335,61172],{"class":2077},[228,61337,284],{"class":238},[228,61339,61177],{"class":343},[228,61341,61342],{"class":238},">空调\u003C\u002F",[228,61344,476],{"class":51415},[228,61346,55429],{"class":238},[228,61348,186],{"class":51415},[228,61350,51422],{"class":238},[228,61352,61353,61356,61358],{"class":230,"line":16884},[228,61354,61355],{"class":238},"        \u003C\u002F",[228,61357,1245],{"class":51415},[228,61359,51422],{"class":238},[228,61361,61362,61364,61366],{"class":230,"line":16898},[228,61363,51891],{"class":238},[228,61365,51726],{"class":51415},[228,61367,51422],{"class":238},[228,61369,61370,61372,61374],{"class":230,"line":16911},[228,61371,51456],{"class":238},[228,61373,51928],{"class":51415},[228,61375,51422],{"class":238},[228,61377,61378],{"class":230,"line":16916},[228,61379,61380],{"class":297},"        \u002F\u002F 1. 获取元素\n",[228,61382,61383,61386,61388,61390,61392,61394,61396,61399],{"class":230,"line":16930},[228,61384,61385],{"class":234},"        const",[228,61387,60720],{"class":287},[228,61389,13679],{"class":234},[228,61391,54511],{"class":238},[228,61393,54514],{"class":2077},[228,61395,239],{"class":238},[228,61397,61398],{"class":343},"'[type=search]'",[228,61400,245],{"class":238},[228,61402,61403,61405,61408,61410,61412,61414,61416,61419],{"class":230,"line":16935},[228,61404,61385],{"class":234},[228,61406,61407],{"class":287}," ul",[228,61409,13679],{"class":234},[228,61411,54511],{"class":238},[228,61413,54514],{"class":2077},[228,61415,239],{"class":238},[228,61417,61418],{"class":343},"'.result-list'",[228,61420,245],{"class":238},[228,61422,61423],{"class":230,"line":16941},[228,61424,61425],{"class":297},"        \u002F\u002F console.log(input)\n",[228,61427,61428],{"class":230,"line":16946},[228,61429,61430],{"class":297},"        \u002F\u002F 2. 监听事件 获得焦点\n",[228,61432,61433,61436,61438,61440,61443,61445,61447],{"class":230,"line":16960},[228,61434,61435],{"class":238},"        input.",[228,61437,57928],{"class":2077},[228,61439,239],{"class":238},[228,61441,61442],{"class":343},"'focus'",[228,61444,12550],{"class":238},[228,61446,54564],{"class":234},[228,61448,54567],{"class":238},[228,61450,61451],{"class":230,"line":16965},[228,61452,61453],{"class":297},"            \u002F\u002F ul显示\n",[228,61455,61456,61459,61461],{"class":230,"line":16970},[228,61457,61458],{"class":238},"            ul.style.display ",[228,61460,284],{"class":234},[228,61462,61463],{"class":343}," 'block'\n",[228,61465,61466],{"class":230,"line":16984},[228,61467,61468],{"class":297},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[228,61470,61471,61474,61476,61478,61481],{"class":230,"line":16996},[228,61472,61473],{"class":238},"            input.classList.",[228,61475,5449],{"class":2077},[228,61477,239],{"class":238},[228,61479,61480],{"class":343},"'search'",[228,61482,245],{"class":238},[228,61484,61485],{"class":230,"line":17001},[228,61486,61487],{"class":238},"        })\n",[228,61489,61490],{"class":230,"line":17014},[228,61491,61492],{"class":297},"        \u002F\u002F 3. 监听事件 失去焦点\n",[228,61494,61495,61497,61499,61501,61504,61506,61508],{"class":230,"line":17019},[228,61496,61435],{"class":238},[228,61498,57928],{"class":2077},[228,61500,239],{"class":238},[228,61502,61503],{"class":343},"'blur'",[228,61505,12550],{"class":238},[228,61507,54564],{"class":234},[228,61509,54567],{"class":238},[228,61511,61512,61514,61516],{"class":230,"line":17024},[228,61513,61458],{"class":238},[228,61515,284],{"class":234},[228,61517,61518],{"class":343}," 'none'\n",[228,61520,61521,61523,61525,61527,61529],{"class":230,"line":17029},[228,61522,61473],{"class":238},[228,61524,57121],{"class":2077},[228,61526,239],{"class":238},[228,61528,61480],{"class":343},[228,61530,245],{"class":238},[228,61532,61533],{"class":230,"line":17042},[228,61534,61487],{"class":238},[228,61536,61537,61539,61541],{"class":230,"line":17047},[228,61538,51891],{"class":238},[228,61540,51928],{"class":51415},[228,61542,51422],{"class":238},[228,61544,61545,61547,61549],{"class":230,"line":32748},[228,61546,51900],{"class":238},[228,61548,51915],{"class":51415},[228,61550,51422],{"class":238},[228,61552,61553],{"class":230,"line":32754},[228,61554,2514],{"emptyLinePlaceholder":157},[228,61556,61557,61559,61561],{"class":230,"line":32760},[228,61558,51900],{"class":238},[228,61560,50750],{"class":51415},[228,61562,51422],{"class":238},[22113,61564,61566],{"id":61565},"_3253-键盘事件","3.2.5.3 键盘事件",[19,61568,61569],{},"评论字数统计案例",[19,61571,61572],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,61574,61575],{},"牢记focus伪类选择器",[51459,61577],{"charSet":61578},"UTF-8",[51459,61580],{"name":61581,"content":61582},"viewport","width=device-width, initial-scale=1.0",[51522,61584,61585],{},"Document",[5241,61587,61588],{},"\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",[53936,61590],{"type":5302},[1245,61592,61593,61596],{},[186,61594,61595],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[186,61597,61598],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[220,61600,61602],{"className":50748,"code":61601,"language":50750,"meta":141,"style":141},"\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",[30,61603,61604,61614,61628,61632,61640,61654,61674,61694,61707,61715,61722,61735,61749,61759,61769,61773,61777,61784,61796,61808,61820,61832,61861,61874,61878,61882,61891,61902,61914,61925,61936,61948,61959,61971,61987,61999,62003,62007,62018,62029,62039,62051,62055,62059,62067,62078,62088,62099,62111,62124,62136,62148,62152,62156,62165,62177,62188,62201,62212,62226,62230,62234,62241,62253,62265,62275,62279,62283,62292,62304,62314,62318,62322,62333,62343,62362,62375,62379,62383,62393,62403,62407,62411,62422,62433,62445,62457,62461,62465,62476,62487,62501,62505,62509,62520,62530,62542,62546,62554,62562,62566,62574,62589,62608,62648,62661,62669,62683,62703,62711,62726,62749,62767,62782,62802,62822,62842,62850,62858,62866,62874,62894,62914,62919,62936,62945,62949,62954,62970,62978,62982,62987,63004,63009,63034,63038,63042,63047,63052,63060,63068,63072],{"__ignoreMap":141},[228,61605,61606,61608,61610,61612],{"class":230,"line":231},[228,61607,51412],{"class":238},[228,61609,51416],{"class":51415},[228,61611,51419],{"class":2077},[228,61613,51422],{"class":238},[228,61615,61616,61618,61620,61622,61624,61626],{"class":230,"line":142},[228,61617,1148],{"class":238},[228,61619,50750],{"class":51415},[228,61621,51431],{"class":2077},[228,61623,284],{"class":238},[228,61625,51436],{"class":343},[228,61627,51422],{"class":238},[228,61629,61630],{"class":230,"line":1293},[228,61631,2514],{"emptyLinePlaceholder":157},[228,61633,61634,61636,61638],{"class":230,"line":1308},[228,61635,1148],{"class":238},[228,61637,51449],{"class":51415},[228,61639,51422],{"class":238},[228,61641,61642,61644,61646,61648,61650,61652],{"class":230,"line":1314},[228,61643,52259],{"class":238},[228,61645,51459],{"class":51415},[228,61647,51462],{"class":2077},[228,61649,284],{"class":238},[228,61651,51467],{"class":343},[228,61653,51422],{"class":238},[228,61655,61656,61658,61660,61662,61664,61666,61668,61670,61672],{"class":230,"line":1328},[228,61657,52259],{"class":238},[228,61659,51459],{"class":51415},[228,61661,51478],{"class":2077},[228,61663,284],{"class":238},[228,61665,51483],{"class":343},[228,61667,51486],{"class":2077},[228,61669,284],{"class":238},[228,61671,51491],{"class":343},[228,61673,51422],{"class":238},[228,61675,61676,61678,61680,61682,61684,61686,61688,61690,61692],{"class":230,"line":1334},[228,61677,52259],{"class":238},[228,61679,51459],{"class":51415},[228,61681,15035],{"class":2077},[228,61683,284],{"class":238},[228,61685,51506],{"class":343},[228,61687,51486],{"class":2077},[228,61689,284],{"class":238},[228,61691,51513],{"class":343},[228,61693,51422],{"class":238},[228,61695,61696,61698,61700,61703,61705],{"class":230,"line":1425},[228,61697,52259],{"class":238},[228,61699,51522],{"class":51415},[228,61701,61702],{"class":238},">评论回车发布\u003C\u002F",[228,61704,51522],{"class":51415},[228,61706,51422],{"class":238},[228,61708,61709,61711,61713],{"class":230,"line":1431},[228,61710,52259],{"class":238},[228,61712,5241],{"class":51415},[228,61714,51422],{"class":238},[228,61716,61717,61720],{"class":230,"line":1443},[228,61718,61719],{"class":2077},"    .wrapper",[228,61721,15687],{"class":238},[228,61723,61724,61727,61729,61731,61733],{"class":230,"line":1726},[228,61725,61726],{"class":287},"      min-width",[228,61728,51552],{"class":238},[228,61730,4101],{"class":287},[228,61732,51607],{"class":234},[228,61734,1404],{"class":238},[228,61736,61737,61740,61742,61745,61747],{"class":230,"line":1731},[228,61738,61739],{"class":287},"      max-width",[228,61741,51552],{"class":238},[228,61743,61744],{"class":287},"800",[228,61746,51607],{"class":234},[228,61748,1404],{"class":238},[228,61750,61751,61753,61755,61757],{"class":230,"line":1737},[228,61752,55124],{"class":287},[228,61754,51552],{"class":238},[228,61756,51592],{"class":287},[228,61758,1404],{"class":238},[228,61760,61761,61763,61765,61767],{"class":230,"line":1742},[228,61762,55135],{"class":287},[228,61764,51552],{"class":238},[228,61766,51695],{"class":287},[228,61768,1404],{"class":238},[228,61770,61771],{"class":230,"line":1756},[228,61772,2301],{"class":238},[228,61774,61775],{"class":230,"line":1761},[228,61776,2514],{"emptyLinePlaceholder":157},[228,61778,61779,61782],{"class":230,"line":1767},[228,61780,61781],{"class":2077},"    .avatar",[228,61783,15687],{"class":238},[228,61785,61786,61788,61790,61792,61794],{"class":230,"line":1788},[228,61787,54886],{"class":287},[228,61789,51552],{"class":238},[228,61791,845],{"class":287},[228,61793,51607],{"class":234},[228,61795,1404],{"class":238},[228,61797,61798,61800,61802,61804,61806],{"class":230,"line":1793},[228,61799,54900],{"class":287},[228,61801,51552],{"class":238},[228,61803,845],{"class":287},[228,61805,51607],{"class":234},[228,61807,1404],{"class":238},[228,61809,61810,61812,61814,61816,61818],{"class":230,"line":1807},[228,61811,55249],{"class":287},[228,61813,51552],{"class":238},[228,61815,894],{"class":287},[228,61817,566],{"class":234},[228,61819,1404],{"class":238},[228,61821,61822,61825,61827,61830],{"class":230,"line":1812},[228,61823,61824],{"class":287},"      overflow",[228,61826,51552],{"class":238},[228,61828,61829],{"class":287},"hidden",[228,61831,1404],{"class":238},[228,61833,61834,61837,61839,61842,61844,61847,61849,61852,61854,61856,61859],{"class":230,"line":1841},[228,61835,61836],{"class":287},"      background",[228,61838,51552],{"class":238},[228,61840,61841],{"class":287},"url",[228,61843,239],{"class":238},[228,61845,61846],{"class":5331},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[228,61848,13829],{"class":238},[228,61850,61851],{"class":287},"no-repeat",[228,61853,17259],{"class":287},[228,61855,25094],{"class":238},[228,61857,61858],{"class":287},"cover",[228,61860,1404],{"class":238},[228,61862,61863,61866,61868,61870,61872],{"class":230,"line":1846},[228,61864,61865],{"class":287},"      margin-right",[228,61867,51552],{"class":238},[228,61869,938],{"class":287},[228,61871,51607],{"class":234},[228,61873,1404],{"class":238},[228,61875,61876],{"class":230,"line":1863},[228,61877,2301],{"class":238},[228,61879,61880],{"class":230,"line":1868},[228,61881,2514],{"emptyLinePlaceholder":157},[228,61883,61884,61886,61889],{"class":230,"line":1873},[228,61885,61719],{"class":2077},[228,61887,61888],{"class":51415}," textarea",[228,61890,15687],{"class":238},[228,61892,61893,61896,61898,61900],{"class":230,"line":1878},[228,61894,61895],{"class":287},"      outline",[228,61897,51552],{"class":238},[228,61899,54852],{"class":287},[228,61901,1404],{"class":238},[228,61903,61904,61907,61909,61912],{"class":230,"line":1892},[228,61905,61906],{"class":287},"      border-color",[228,61908,51552],{"class":238},[228,61910,61911],{"class":287},"transparent",[228,61913,1404],{"class":238},[228,61915,61916,61919,61921,61923],{"class":230,"line":1897},[228,61917,61918],{"class":287},"      resize",[228,61920,51552],{"class":238},[228,61922,54852],{"class":287},[228,61924,1404],{"class":238},[228,61926,61927,61929,61931,61934],{"class":230,"line":2691},[228,61928,61836],{"class":287},[228,61930,51552],{"class":238},[228,61932,61933],{"class":287},"#f5f5f5",[228,61935,1404],{"class":238},[228,61937,61938,61940,61942,61944,61946],{"class":230,"line":2705},[228,61939,55249],{"class":287},[228,61941,51552],{"class":238},[228,61943,531],{"class":287},[228,61945,51607],{"class":234},[228,61947,1404],{"class":238},[228,61949,61950,61953,61955,61957],{"class":230,"line":2713},[228,61951,61952],{"class":287},"      flex",[228,61954,51552],{"class":238},[228,61956,456],{"class":287},[228,61958,1404],{"class":238},[228,61960,61961,61963,61965,61967,61969],{"class":230,"line":2718},[228,61962,54810],{"class":287},[228,61964,51552],{"class":238},[228,61966,684],{"class":287},[228,61968,51607],{"class":234},[228,61970,1404],{"class":238},[228,61972,61973,61976,61978,61980,61983,61985],{"class":230,"line":2724},[228,61974,61975],{"class":287},"      transition",[228,61977,51552],{"class":238},[228,61979,28237],{"class":287},[228,61981,61982],{"class":287}," 0.5",[228,61984,933],{"class":234},[228,61986,1404],{"class":238},[228,61988,61989,61991,61993,61995,61997],{"class":230,"line":2730},[228,61990,54900],{"class":287},[228,61992,51552],{"class":238},[228,61994,1189],{"class":287},[228,61996,51607],{"class":234},[228,61998,1404],{"class":238},[228,62000,62001],{"class":230,"line":2735},[228,62002,2301],{"class":238},[228,62004,62005],{"class":230,"line":8063},[228,62006,2514],{"emptyLinePlaceholder":157},[228,62008,62009,62011,62013,62016],{"class":230,"line":8087},[228,62010,61719],{"class":2077},[228,62012,61888],{"class":51415},[228,62014,62015],{"class":2077},":focus",[228,62017,15687],{"class":238},[228,62019,62020,62022,62024,62027],{"class":230,"line":8092},[228,62021,61906],{"class":287},[228,62023,51552],{"class":238},[228,62025,62026],{"class":287},"#e4e4e4",[228,62028,1404],{"class":238},[228,62030,62031,62033,62035,62037],{"class":230,"line":8098},[228,62032,61836],{"class":287},[228,62034,51552],{"class":238},[228,62036,60957],{"class":287},[228,62038,1404],{"class":238},[228,62040,62041,62043,62045,62047,62049],{"class":230,"line":8125},[228,62042,54900],{"class":287},[228,62044,51552],{"class":238},[228,62046,894],{"class":287},[228,62048,51607],{"class":234},[228,62050,1404],{"class":238},[228,62052,62053],{"class":230,"line":8130},[228,62054,2301],{"class":238},[228,62056,62057],{"class":230,"line":8136},[228,62058,2514],{"emptyLinePlaceholder":157},[228,62060,62061,62063,62065],{"class":230,"line":8148},[228,62062,61719],{"class":2077},[228,62064,57582],{"class":51415},[228,62066,15687],{"class":238},[228,62068,62069,62071,62073,62076],{"class":230,"line":8160},[228,62070,61836],{"class":287},[228,62072,51552],{"class":238},[228,62074,62075],{"class":287},"#00aeec",[228,62077,1404],{"class":238},[228,62079,62080,62082,62084,62086],{"class":230,"line":8172},[228,62081,57531],{"class":287},[228,62083,51552],{"class":238},[228,62085,60957],{"class":287},[228,62087,1404],{"class":238},[228,62089,62090,62093,62095,62097],{"class":230,"line":9831},[228,62091,62092],{"class":287},"      border",[228,62094,51552],{"class":238},[228,62096,54852],{"class":287},[228,62098,1404],{"class":238},[228,62100,62101,62103,62105,62107,62109],{"class":230,"line":9856},[228,62102,55249],{"class":287},[228,62104,51552],{"class":238},[228,62106,531],{"class":287},[228,62108,51607],{"class":234},[228,62110,1404],{"class":238},[228,62112,62113,62116,62118,62120,62122],{"class":230,"line":9879},[228,62114,62115],{"class":287},"      margin-left",[228,62117,51552],{"class":238},[228,62119,684],{"class":287},[228,62121,51607],{"class":234},[228,62123,1404],{"class":238},[228,62125,62126,62128,62130,62132,62134],{"class":230,"line":9903},[228,62127,54886],{"class":287},[228,62129,51552],{"class":238},[228,62131,594],{"class":287},[228,62133,51607],{"class":234},[228,62135,1404],{"class":238},[228,62137,62138,62141,62143,62146],{"class":230,"line":9908},[228,62139,62140],{"class":287},"      cursor",[228,62142,51552],{"class":238},[228,62144,62145],{"class":287},"pointer",[228,62147,1404],{"class":238},[228,62149,62150],{"class":230,"line":9913},[228,62151,2301],{"class":238},[228,62153,62154],{"class":230,"line":9918},[228,62155,2514],{"emptyLinePlaceholder":157},[228,62157,62158,62160,62163],{"class":230,"line":9927},[228,62159,61719],{"class":2077},[228,62161,62162],{"class":2077}," .total",[228,62164,15687],{"class":238},[228,62166,62167,62169,62171,62173,62175],{"class":230,"line":9932},[228,62168,61865],{"class":287},[228,62170,51552],{"class":238},[228,62172,850],{"class":287},[228,62174,51607],{"class":234},[228,62176,1404],{"class":238},[228,62178,62179,62181,62183,62186],{"class":230,"line":9938},[228,62180,57531],{"class":287},[228,62182,51552],{"class":238},[228,62184,62185],{"class":287},"#999",[228,62187,1404],{"class":238},[228,62189,62190,62193,62195,62197,62199],{"class":230,"line":9959},[228,62191,62192],{"class":287},"      margin-top",[228,62194,51552],{"class":238},[228,62196,557],{"class":287},[228,62198,51607],{"class":234},[228,62200,1404],{"class":238},[228,62202,62203,62206,62208,62210],{"class":230,"line":9965},[228,62204,62205],{"class":287},"      opacity",[228,62207,51552],{"class":238},[228,62209,430],{"class":287},[228,62211,1404],{"class":238},[228,62213,62214,62216,62218,62220,62222,62224],{"class":230,"line":9979},[228,62215,61975],{"class":287},[228,62217,51552],{"class":238},[228,62219,28237],{"class":287},[228,62221,61982],{"class":287},[228,62223,933],{"class":234},[228,62225,1404],{"class":238},[228,62227,62228],{"class":230,"line":9985},[228,62229,2301],{"class":238},[228,62231,62232],{"class":230,"line":10012},[228,62233,2514],{"emptyLinePlaceholder":157},[228,62235,62236,62239],{"class":230,"line":10021},[228,62237,62238],{"class":2077},"    .list",[228,62240,15687],{"class":238},[228,62242,62243,62245,62247,62249,62251],{"class":230,"line":10027},[228,62244,61726],{"class":287},[228,62246,51552],{"class":238},[228,62248,4101],{"class":287},[228,62250,51607],{"class":234},[228,62252,1404],{"class":238},[228,62254,62255,62257,62259,62261,62263],{"class":230,"line":10035},[228,62256,61739],{"class":287},[228,62258,51552],{"class":238},[228,62260,61744],{"class":287},[228,62262,51607],{"class":234},[228,62264,1404],{"class":238},[228,62266,62267,62269,62271,62273],{"class":230,"line":10040},[228,62268,55124],{"class":287},[228,62270,51552],{"class":238},[228,62272,51592],{"class":287},[228,62274,1404],{"class":238},[228,62276,62277],{"class":230,"line":16719},[228,62278,2301],{"class":238},[228,62280,62281],{"class":230,"line":16725},[228,62282,2514],{"emptyLinePlaceholder":157},[228,62284,62285,62287,62290],{"class":230,"line":16748},[228,62286,62238],{"class":2077},[228,62288,62289],{"class":2077}," .item",[228,62291,15687],{"class":238},[228,62293,62294,62296,62298,62300,62302],{"class":230,"line":16754},[228,62295,54886],{"class":287},[228,62297,51552],{"class":238},[228,62299,549],{"class":287},[228,62301,566],{"class":234},[228,62303,1404],{"class":238},[228,62305,62306,62308,62310,62312],{"class":230,"line":16777},[228,62307,55124],{"class":287},[228,62309,51552],{"class":238},[228,62311,51592],{"class":287},[228,62313,1404],{"class":238},[228,62315,62316],{"class":230,"line":16791},[228,62317,2301],{"class":238},[228,62319,62320],{"class":230,"line":16811},[228,62321,2514],{"emptyLinePlaceholder":157},[228,62323,62324,62326,62328,62331],{"class":230,"line":16817},[228,62325,62238],{"class":2077},[228,62327,62289],{"class":2077},[228,62329,62330],{"class":2077}," .info",[228,62332,15687],{"class":238},[228,62334,62335,62337,62339,62341],{"class":230,"line":16828},[228,62336,61952],{"class":287},[228,62338,51552],{"class":238},[228,62340,456],{"class":287},[228,62342,1404],{"class":238},[228,62344,62345,62348,62350,62352,62354,62357,62360],{"class":230,"line":16851},[228,62346,62347],{"class":287},"      border-bottom",[228,62349,51552],{"class":238},[228,62351,456],{"class":287},[228,62353,51607],{"class":234},[228,62355,62356],{"class":287}," dashed",[228,62358,62359],{"class":287}," #e4e4e4",[228,62361,1404],{"class":238},[228,62363,62364,62367,62369,62371,62373],{"class":230,"line":16873},[228,62365,62366],{"class":287},"      padding-bottom",[228,62368,51552],{"class":238},[228,62370,684],{"class":287},[228,62372,51607],{"class":234},[228,62374,1404],{"class":238},[228,62376,62377],{"class":230,"line":16878},[228,62378,2301],{"class":238},[228,62380,62381],{"class":230,"line":16884},[228,62382,2514],{"emptyLinePlaceholder":157},[228,62384,62385,62387,62389,62391],{"class":230,"line":16898},[228,62386,62238],{"class":2077},[228,62388,62289],{"class":2077},[228,62390,6940],{"class":51415},[228,62392,15687],{"class":238},[228,62394,62395,62397,62399,62401],{"class":230,"line":16911},[228,62396,54821],{"class":287},[228,62398,51552],{"class":238},[228,62400,430],{"class":287},[228,62402,1404],{"class":238},[228,62404,62405],{"class":230,"line":16916},[228,62406,2301],{"class":238},[228,62408,62409],{"class":230,"line":16930},[228,62410,2514],{"emptyLinePlaceholder":157},[228,62412,62413,62415,62417,62420],{"class":230,"line":16935},[228,62414,62238],{"class":2077},[228,62416,62289],{"class":2077},[228,62418,62419],{"class":2077}," .name",[228,62421,15687],{"class":238},[228,62423,62424,62426,62428,62431],{"class":230,"line":16941},[228,62425,57531],{"class":287},[228,62427,51552],{"class":238},[228,62429,62430],{"class":287},"#FB7299",[228,62432,1404],{"class":238},[228,62434,62435,62437,62439,62441,62443],{"class":230,"line":16946},[228,62436,55037],{"class":287},[228,62438,51552],{"class":238},[228,62440,787],{"class":287},[228,62442,51607],{"class":234},[228,62444,1404],{"class":238},[228,62446,62447,62450,62452,62455],{"class":230,"line":16960},[228,62448,62449],{"class":287},"      font-weight",[228,62451,51552],{"class":238},[228,62453,62454],{"class":287},"bold",[228,62456,1404],{"class":238},[228,62458,62459],{"class":230,"line":16965},[228,62460,2301],{"class":238},[228,62462,62463],{"class":230,"line":16970},[228,62464,2514],{"emptyLinePlaceholder":157},[228,62466,62467,62469,62471,62474],{"class":230,"line":16984},[228,62468,62238],{"class":2077},[228,62470,62289],{"class":2077},[228,62472,62473],{"class":2077}," .text",[228,62475,15687],{"class":238},[228,62477,62478,62480,62482,62485],{"class":230,"line":16996},[228,62479,57531],{"class":287},[228,62481,51552],{"class":238},[228,62483,62484],{"class":287},"#333",[228,62486,1404],{"class":238},[228,62488,62489,62491,62493,62495,62497,62499],{"class":230,"line":17001},[228,62490,54810],{"class":287},[228,62492,51552],{"class":238},[228,62494,684],{"class":287},[228,62496,51607],{"class":234},[228,62498,4207],{"class":287},[228,62500,1404],{"class":238},[228,62502,62503],{"class":230,"line":17014},[228,62504,2301],{"class":238},[228,62506,62507],{"class":230,"line":17019},[228,62508,2514],{"emptyLinePlaceholder":157},[228,62510,62511,62513,62515,62518],{"class":230,"line":17024},[228,62512,62238],{"class":2077},[228,62514,62289],{"class":2077},[228,62516,62517],{"class":2077}," .time",[228,62519,15687],{"class":238},[228,62521,62522,62524,62526,62528],{"class":230,"line":17029},[228,62523,57531],{"class":287},[228,62525,51552],{"class":238},[228,62527,62185],{"class":287},[228,62529,1404],{"class":238},[228,62531,62532,62534,62536,62538,62540],{"class":230,"line":17042},[228,62533,55037],{"class":287},[228,62535,51552],{"class":238},[228,62537,736],{"class":287},[228,62539,51607],{"class":234},[228,62541,1404],{"class":238},[228,62543,62544],{"class":230,"line":17047},[228,62545,2301],{"class":238},[228,62547,62548,62550,62552],{"class":230,"line":32748},[228,62549,52532],{"class":238},[228,62551,5241],{"class":51415},[228,62553,51422],{"class":238},[228,62555,62556,62558,62560],{"class":230,"line":32754},[228,62557,51900],{"class":238},[228,62559,51449],{"class":51415},[228,62561,51422],{"class":238},[228,62563,62564],{"class":230,"line":32760},[228,62565,2514],{"emptyLinePlaceholder":157},[228,62567,62568,62570,62572],{"class":230,"line":32766},[228,62569,1148],{"class":238},[228,62571,51915],{"class":51415},[228,62573,51422],{"class":238},[228,62575,62576,62578,62580,62582,62584,62587],{"class":230,"line":32772},[228,62577,52259],{"class":238},[228,62579,51726],{"class":51415},[228,62581,53601],{"class":2077},[228,62583,284],{"class":238},[228,62585,62586],{"class":343},"\"wrapper\"",[228,62588,51422],{"class":238},[228,62590,62591,62593,62595,62597,62599,62602,62604,62606],{"class":230,"line":32783},[228,62592,51456],{"class":238},[228,62594,679],{"class":51415},[228,62596,53601],{"class":2077},[228,62598,284],{"class":238},[228,62600,62601],{"class":343},"\"avatar\"",[228,62603,55429],{"class":238},[228,62605,679],{"class":51415},[228,62607,51422],{"class":238},[228,62609,62610,62612,62614,62616,62618,62621,62623,62625,62628,62630,62632,62634,62637,62639,62642,62644,62646],{"class":230,"line":32789},[228,62611,51456],{"class":238},[228,62613,54403],{"class":51415},[228,62615,15074],{"class":2077},[228,62617,284],{"class":238},[228,62619,62620],{"class":343},"\"tx\"",[228,62622,61135],{"class":2077},[228,62624,284],{"class":238},[228,62626,62627],{"class":343},"\"发一条友善的评论\"",[228,62629,54426],{"class":2077},[228,62631,284],{"class":238},[228,62633,3815],{"class":343},[228,62635,62636],{"class":2077}," maxlength",[228,62638,284],{"class":238},[228,62640,62641],{"class":343},"\"200\"",[228,62643,55429],{"class":238},[228,62645,54403],{"class":51415},[228,62647,51422],{"class":238},[228,62649,62650,62652,62654,62657,62659],{"class":230,"line":32809},[228,62651,51456],{"class":238},[228,62653,54002],{"class":51415},[228,62655,62656],{"class":238},">发布\u003C\u002F",[228,62658,54002],{"class":51415},[228,62660,51422],{"class":238},[228,62662,62663,62665,62667],{"class":230,"line":32815},[228,62664,52532],{"class":238},[228,62666,51726],{"class":51415},[228,62668,51422],{"class":238},[228,62670,62671,62673,62675,62677,62679,62681],{"class":230,"line":32826},[228,62672,52259],{"class":238},[228,62674,51726],{"class":51415},[228,62676,53601],{"class":2077},[228,62678,284],{"class":238},[228,62680,62586],{"class":343},[228,62682,51422],{"class":238},[228,62684,62685,62687,62689,62691,62693,62696,62699,62701],{"class":230,"line":32832},[228,62686,51456],{"class":238},[228,62688,228],{"class":51415},[228,62690,53601],{"class":2077},[228,62692,284],{"class":238},[228,62694,62695],{"class":343},"\"total\"",[228,62697,62698],{"class":238},">0\u002F200字\u003C\u002F",[228,62700,228],{"class":51415},[228,62702,51422],{"class":238},[228,62704,62705,62707,62709],{"class":230,"line":32838},[228,62706,52532],{"class":238},[228,62708,51726],{"class":51415},[228,62710,51422],{"class":238},[228,62712,62713,62715,62717,62719,62721,62724],{"class":230,"line":32844},[228,62714,52259],{"class":238},[228,62716,51726],{"class":51415},[228,62718,53601],{"class":2077},[228,62720,284],{"class":238},[228,62722,62723],{"class":343},"\"list\"",[228,62725,51422],{"class":238},[228,62727,62728,62730,62732,62734,62736,62739,62742,62744,62747],{"class":230,"line":32850},[228,62729,51456],{"class":238},[228,62731,51726],{"class":51415},[228,62733,53601],{"class":2077},[228,62735,284],{"class":238},[228,62737,62738],{"class":343},"\"item\"",[228,62740,62741],{"class":2077}," style",[228,62743,284],{"class":238},[228,62745,62746],{"class":343},"\"display: none;\"",[228,62748,51422],{"class":238},[228,62750,62751,62753,62755,62757,62759,62761,62763,62765],{"class":230,"line":32856},[228,62752,55349],{"class":238},[228,62754,679],{"class":51415},[228,62756,53601],{"class":2077},[228,62758,284],{"class":238},[228,62760,62601],{"class":343},[228,62762,55429],{"class":238},[228,62764,679],{"class":51415},[228,62766,51422],{"class":238},[228,62768,62769,62771,62773,62775,62777,62780],{"class":230,"line":32862},[228,62770,55349],{"class":238},[228,62772,51726],{"class":51415},[228,62774,53601],{"class":2077},[228,62776,284],{"class":238},[228,62778,62779],{"class":343},"\"info\"",[228,62781,51422],{"class":238},[228,62783,62784,62786,62788,62790,62792,62795,62798,62800],{"class":230,"line":32868},[228,62785,55417],{"class":238},[228,62787,19],{"class":51415},[228,62789,53601],{"class":2077},[228,62791,284],{"class":238},[228,62793,62794],{"class":343},"\"name\"",[228,62796,62797],{"class":238},">清风徐来\u003C\u002F",[228,62799,19],{"class":51415},[228,62801,51422],{"class":238},[228,62803,62804,62806,62808,62810,62812,62815,62818,62820],{"class":230,"line":32888},[228,62805,55417],{"class":238},[228,62807,19],{"class":51415},[228,62809,53601],{"class":2077},[228,62811,284],{"class":238},[228,62813,62814],{"class":343},"\"text\"",[228,62816,62817],{"class":238},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[228,62819,19],{"class":51415},[228,62821,51422],{"class":238},[228,62823,62824,62826,62828,62830,62832,62835,62838,62840],{"class":230,"line":32894},[228,62825,55417],{"class":238},[228,62827,19],{"class":51415},[228,62829,53601],{"class":2077},[228,62831,284],{"class":238},[228,62833,62834],{"class":343},"\"time\"",[228,62836,62837],{"class":238},">2022-10-10 20:29:21\u003C\u002F",[228,62839,19],{"class":51415},[228,62841,51422],{"class":238},[228,62843,62844,62846,62848],{"class":230,"line":32910},[228,62845,55522],{"class":238},[228,62847,51726],{"class":51415},[228,62849,51422],{"class":238},[228,62851,62852,62854,62856],{"class":230,"line":32916},[228,62853,51891],{"class":238},[228,62855,51726],{"class":51415},[228,62857,51422],{"class":238},[228,62859,62860,62862,62864],{"class":230,"line":32930},[228,62861,52532],{"class":238},[228,62863,51726],{"class":51415},[228,62865,51422],{"class":238},[228,62867,62868,62870,62872],{"class":230,"line":32936},[228,62869,52259],{"class":238},[228,62871,51928],{"class":51415},[228,62873,51422],{"class":238},[228,62875,62876,62878,62881,62883,62885,62887,62889,62892],{"class":230,"line":32951},[228,62877,11336],{"class":234},[228,62879,62880],{"class":287}," tx",[228,62882,13679],{"class":234},[228,62884,54511],{"class":238},[228,62886,54514],{"class":2077},[228,62888,239],{"class":238},[228,62890,62891],{"class":343},"'#tx'",[228,62893,245],{"class":238},[228,62895,62896,62898,62901,62903,62905,62907,62909,62912],{"class":230,"line":32957},[228,62897,11336],{"class":234},[228,62899,62900],{"class":287}," total",[228,62902,13679],{"class":234},[228,62904,54511],{"class":238},[228,62906,54514],{"class":2077},[228,62908,239],{"class":238},[228,62910,62911],{"class":343},"'.total'",[228,62913,245],{"class":238},[228,62915,62916],{"class":230,"line":32966},[228,62917,62918],{"class":297},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[228,62920,62921,62924,62926,62928,62930,62932,62934],{"class":230,"line":32972},[228,62922,62923],{"class":238},"    tx.",[228,62925,57928],{"class":2077},[228,62927,239],{"class":238},[228,62929,61442],{"class":343},[228,62931,12550],{"class":238},[228,62933,54564],{"class":234},[228,62935,54567],{"class":238},[228,62937,62938,62941,62943],{"class":230,"line":32981},[228,62939,62940],{"class":238},"      total.style.opacity ",[228,62942,284],{"class":234},[228,62944,55814],{"class":287},[228,62946,62947],{"class":230,"line":32987},[228,62948,33576],{"class":238},[228,62950,62951],{"class":230,"line":32993},[228,62952,62953],{"class":297},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[228,62955,62956,62958,62960,62962,62964,62966,62968],{"class":230,"line":33002},[228,62957,62923],{"class":238},[228,62959,57928],{"class":2077},[228,62961,239],{"class":238},[228,62963,61503],{"class":343},[228,62965,12550],{"class":238},[228,62967,54564],{"class":234},[228,62969,54567],{"class":238},[228,62971,62972,62974,62976],{"class":230,"line":33008},[228,62973,62940],{"class":238},[228,62975,284],{"class":234},[228,62977,47448],{"class":287},[228,62979,62980],{"class":230,"line":33019},[228,62981,33576],{"class":238},[228,62983,62984],{"class":230,"line":33025},[228,62985,62986],{"class":297},"    \u002F\u002F 3. 检测用户输入\n",[228,62988,62989,62991,62993,62995,62998,63000,63002],{"class":230,"line":33044},[228,62990,62923],{"class":238},[228,62992,57928],{"class":2077},[228,62994,239],{"class":238},[228,62996,62997],{"class":343},"'input'",[228,62999,12550],{"class":238},[228,63001,54564],{"class":234},[228,63003,54567],{"class":238},[228,63005,63006],{"class":230,"line":33050},[228,63007,63008],{"class":297},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[228,63010,63011,63014,63016,63019,63022,63024,63027,63029,63031],{"class":230,"line":33061},[228,63012,63013],{"class":238},"      total.innerHTML ",[228,63015,284],{"class":234},[228,63017,63018],{"class":343}," `${",[228,63020,63021],{"class":238},"tx",[228,63023,796],{"class":343},[228,63025,63026],{"class":238},"value",[228,63028,796],{"class":343},[228,63030,52083],{"class":287},[228,63032,63033],{"class":343},"}\u002F200字`\n",[228,63035,63036],{"class":230,"line":33067},[228,63037,33576],{"class":238},[228,63039,63040],{"class":230,"line":33087},[228,63041,2514],{"emptyLinePlaceholder":157},[228,63043,63044],{"class":230,"line":33103},[228,63045,63046],{"class":297},"    \u002F\u002F const str = 'andy'\n",[228,63048,63049],{"class":230,"line":33109},[228,63050,63051],{"class":297},"    \u002F\u002F console.log(str.length)\n",[228,63053,63054,63056,63058],{"class":230,"line":33123},[228,63055,52532],{"class":238},[228,63057,51928],{"class":51415},[228,63059,51422],{"class":238},[228,63061,63062,63064,63066],{"class":230,"line":33129},[228,63063,51900],{"class":238},[228,63065,51915],{"class":51415},[228,63067,51422],{"class":238},[228,63069,63070],{"class":230,"line":33135},[228,63071,2514],{"emptyLinePlaceholder":157},[228,63073,63074,63076,63078],{"class":230,"line":33146},[228,63075,51900],{"class":238},[228,63077,50750],{"class":51415},[228,63079,51422],{"class":238},[22113,63081,63083],{"id":63082},"_3254-change事件","3.2.5.4 change事件",[19,63085,63086],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,63088,63089],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,63091,63092],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[220,63094,63096],{"className":50748,"code":63095,"language":50750,"meta":141,"style":141},"\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",[30,63097,63098,63108,63122,63126,63134,63148,63168,63180,63188,63192,63200,63214,63222,63240,63258,63270,63274,63282,63290,63294],{"__ignoreMap":141},[228,63099,63100,63102,63104,63106],{"class":230,"line":231},[228,63101,51412],{"class":238},[228,63103,51416],{"class":51415},[228,63105,51419],{"class":2077},[228,63107,51422],{"class":238},[228,63109,63110,63112,63114,63116,63118,63120],{"class":230,"line":142},[228,63111,1148],{"class":238},[228,63113,50750],{"class":51415},[228,63115,51431],{"class":2077},[228,63117,284],{"class":238},[228,63119,51436],{"class":343},[228,63121,51422],{"class":238},[228,63123,63124],{"class":230,"line":1293},[228,63125,2514],{"emptyLinePlaceholder":157},[228,63127,63128,63130,63132],{"class":230,"line":1308},[228,63129,1148],{"class":238},[228,63131,51449],{"class":51415},[228,63133,51422],{"class":238},[228,63135,63136,63138,63140,63142,63144,63146],{"class":230,"line":1314},[228,63137,52259],{"class":238},[228,63139,51459],{"class":51415},[228,63141,51462],{"class":2077},[228,63143,284],{"class":238},[228,63145,51467],{"class":343},[228,63147,51422],{"class":238},[228,63149,63150,63152,63154,63156,63158,63160,63162,63164,63166],{"class":230,"line":1328},[228,63151,52259],{"class":238},[228,63153,51459],{"class":51415},[228,63155,15035],{"class":2077},[228,63157,284],{"class":238},[228,63159,51506],{"class":343},[228,63161,51486],{"class":2077},[228,63163,284],{"class":238},[228,63165,51513],{"class":343},[228,63167,51422],{"class":238},[228,63169,63170,63172,63174,63176,63178],{"class":230,"line":1334},[228,63171,52259],{"class":238},[228,63173,51522],{"class":51415},[228,63175,51525],{"class":238},[228,63177,51522],{"class":51415},[228,63179,51422],{"class":238},[228,63181,63182,63184,63186],{"class":230,"line":1425},[228,63183,51900],{"class":238},[228,63185,51449],{"class":51415},[228,63187,51422],{"class":238},[228,63189,63190],{"class":230,"line":1431},[228,63191,2514],{"emptyLinePlaceholder":157},[228,63193,63194,63196,63198],{"class":230,"line":1443},[228,63195,1148],{"class":238},[228,63197,51915],{"class":51415},[228,63199,51422],{"class":238},[228,63201,63202,63204,63206,63208,63210,63212],{"class":230,"line":1726},[228,63203,52259],{"class":238},[228,63205,53936],{"class":51415},[228,63207,53939],{"class":2077},[228,63209,284],{"class":238},[228,63211,62814],{"class":343},[228,63213,51422],{"class":238},[228,63215,63216,63218,63220],{"class":230,"line":1731},[228,63217,52259],{"class":238},[228,63219,51928],{"class":51415},[228,63221,51422],{"class":238},[228,63223,63224,63226,63228,63230,63232,63234,63236,63238],{"class":230,"line":1737},[228,63225,11336],{"class":234},[228,63227,60720],{"class":287},[228,63229,13679],{"class":234},[228,63231,54511],{"class":238},[228,63233,54514],{"class":2077},[228,63235,239],{"class":238},[228,63237,62997],{"class":343},[228,63239,245],{"class":238},[228,63241,63242,63245,63247,63249,63252,63254,63256],{"class":230,"line":1742},[228,63243,63244],{"class":238},"    input.",[228,63246,57928],{"class":2077},[228,63248,239],{"class":238},[228,63250,63251],{"class":343},"'change'",[228,63253,12550],{"class":238},[228,63255,54564],{"class":234},[228,63257,54567],{"class":238},[228,63259,63260,63262,63264,63266,63268],{"class":230,"line":1756},[228,63261,58359],{"class":238},[228,63263,58362],{"class":2077},[228,63265,239],{"class":238},[228,63267,831],{"class":287},[228,63269,245],{"class":238},[228,63271,63272],{"class":230,"line":1761},[228,63273,33576],{"class":238},[228,63275,63276,63278,63280],{"class":230,"line":1767},[228,63277,52532],{"class":238},[228,63279,51928],{"class":51415},[228,63281,51422],{"class":238},[228,63283,63284,63286,63288],{"class":230,"line":1788},[228,63285,51900],{"class":238},[228,63287,51915],{"class":51415},[228,63289,51422],{"class":238},[228,63291,63292],{"class":230,"line":1793},[228,63293,2514],{"emptyLinePlaceholder":157},[228,63295,63296,63298,63300],{"class":230,"line":1807},[228,63297,51900],{"class":238},[228,63299,50750],{"class":51415},[228,63301,51422],{"class":238},[19,63303,63304],{},"总结：内容发生改变才回去触发",[200,63306,63308],{"id":63307},"_326-事件对象","3.2.6 事件对象",[22113,63310,63312],{"id":63311},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,63314,63315],{},[1576,63316],{"alt":141,"src":63317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,63319,63320],{},[1576,63321],{"alt":141,"src":63322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,63324,63325],{},"点击一次，就输出了事件对象，它是个对象",[19,63327,63328],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,63330,63331],{},[1576,63332],{"alt":141,"src":63333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22113,63335,63337],{"id":63336},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,63339,63340],{},[1576,63341],{"alt":141,"src":63342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,63344,63345],{},"实现按特殊字符才是实现打印输出效果：",[220,63347,63349],{"className":53182,"code":63348,"language":53184,"meta":141,"style":141},"\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",[30,63350,63351,63359,63364,63378,63386,63391,63396,63401,63406,63411,63416,63421,63426,63431,63435,63439,63447],{"__ignoreMap":141},[228,63352,63353,63355,63357],{"class":230,"line":231},[228,63354,1148],{"class":238},[228,63356,51915],{"class":51415},[228,63358,51422],{"class":238},[228,63360,63361],{"class":230,"line":142},[228,63362,63363],{"class":297},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[228,63365,63366,63368,63370,63372,63374,63376],{"class":230,"line":1293},[228,63367,52259],{"class":238},[228,63369,53936],{"class":51415},[228,63371,53939],{"class":2077},[228,63373,284],{"class":238},[228,63375,62814],{"class":343},[228,63377,51422],{"class":238},[228,63379,63380,63382,63384],{"class":230,"line":1308},[228,63381,52259],{"class":238},[228,63383,51928],{"class":51415},[228,63385,51422],{"class":238},[228,63387,63388],{"class":230,"line":1314},[228,63389,63390],{"class":238},"    \u002F\u002F const btn = document.querySelector('button')\n",[228,63392,63393],{"class":230,"line":1328},[228,63394,63395],{"class":238},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[228,63397,63398],{"class":230,"line":1334},[228,63399,63400],{"class":238},"    \u002F\u002F   console.log(e);\n",[228,63402,63403],{"class":230,"line":1425},[228,63404,63405],{"class":238},"    \u002F\u002F })\n",[228,63407,63408],{"class":230,"line":1431},[228,63409,63410],{"class":238},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[228,63412,63413],{"class":230,"line":1443},[228,63414,63415],{"class":238},"    const input = document.querySelector('input')\n",[228,63417,63418],{"class":230,"line":1726},[228,63419,63420],{"class":238},"    input.addEventListener('keyup', function (e) {\n",[228,63422,63423],{"class":230,"line":1731},[228,63424,63425],{"class":238},"      if (e.key === 'Enter') {\n",[228,63427,63428],{"class":230,"line":1737},[228,63429,63430],{"class":238},"        console.log('我按下了回车键')\n",[228,63432,63433],{"class":230,"line":1742},[228,63434,52513],{"class":238},[228,63436,63437],{"class":230,"line":1756},[228,63438,33576],{"class":238},[228,63440,63441,63443,63445],{"class":230,"line":1761},[228,63442,52532],{"class":238},[228,63444,51928],{"class":51415},[228,63446,51422],{"class":238},[228,63448,63449,63451,63453],{"class":230,"line":1767},[228,63450,51900],{"class":238},[228,63452,51915],{"class":51415},[228,63454,51422],{"class":238},[22113,63456,63458],{"id":63457},"_3263-trim方法","3.2.6.3 trim方法",[19,63460,63461],{},[1576,63462],{"alt":141,"src":63463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,63465,63466],{},[1576,63467],{"alt":141,"src":63468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,63470,63471],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,63473,63474],{},"str.trim()",[200,63476,63478],{"id":63477},"_327-环境对象","3.2.7 环境对象",[19,63480,63481],{},[1576,63482],{"alt":141,"src":63483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,63485,63486],{},[1576,63487],{"alt":141,"src":63488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,63490,63491],{},[1576,63492],{"alt":141,"src":63493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,63495,63496],{},"实际函数调用是window.fn()",[19,63498,63499],{},"普通函数里面this指向的是window",[1245,63501,63502,63505,63508],{},[186,63503,63504],{},"在普通函数下，this指向的是window",[186,63506,63507],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[186,63509,63510],{},"箭头函数没有this",[19,63512,63513],{},"粗略记法就是：谁调用，this就指向谁",[19,63515,63516],{},[1576,63517],{"alt":141,"src":63518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,63520,63521],{},[1576,63522],{"alt":141,"src":63523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,63525,63526],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,63528,63529],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[220,63531,63533],{"className":53182,"code":63532,"language":53184,"meta":141,"style":141},"\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",[30,63534,63535,63543,63555,63563,63568,63573,63578,63583,63587,63595],{"__ignoreMap":141},[228,63536,63537,63539,63541],{"class":230,"line":231},[228,63538,1148],{"class":238},[228,63540,51915],{"class":51415},[228,63542,51422],{"class":238},[228,63544,63545,63547,63549,63551,63553],{"class":230,"line":142},[228,63546,52259],{"class":238},[228,63548,54002],{"class":51415},[228,63550,54008],{"class":238},[228,63552,54002],{"class":51415},[228,63554,51422],{"class":238},[228,63556,63557,63559,63561],{"class":230,"line":1293},[228,63558,52259],{"class":238},[228,63560,51928],{"class":51415},[228,63562,51422],{"class":238},[228,63564,63565],{"class":230,"line":1308},[228,63566,63567],{"class":238},"    const button = document.querySelector('button')\n",[228,63569,63570],{"class":230,"line":1314},[228,63571,63572],{"class":238},"    button.addEventListener('click', function () {\n",[228,63574,63575],{"class":230,"line":1328},[228,63576,63577],{"class":238},"      \u002F\u002F console.log(this);\n",[228,63579,63580],{"class":230,"line":1334},[228,63581,63582],{"class":238},"      this.style.color = 'pink'\n",[228,63584,63585],{"class":230,"line":1425},[228,63586,33576],{"class":238},[228,63588,63589,63591,63593],{"class":230,"line":1431},[228,63590,52532],{"class":238},[228,63592,51928],{"class":51415},[228,63594,51422],{"class":238},[228,63596,63597,63599,63601],{"class":230,"line":1443},[228,63598,51900],{"class":238},[228,63600,51915],{"class":51415},[228,63602,51422],{"class":238},[200,63604,63606],{"id":63605},"_328-回调函数","3.2.8 回调函数",[19,63608,63609],{},[1576,63610],{"alt":141,"src":63611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,63613,63614],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,63616,11447],{},[1245,63618,63619,63622,63625],{},[186,63620,63621],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[186,63623,63624],{},"回调函数本质还是函数，只不过把它当成参数使用",[186,63626,63627],{},"使用匿名函数做为回调函数比较常见",[200,63629,63631],{"id":63630},"_329-tab栏切换","3.2.9 tab栏切换",[19,63633,63634],{},[1576,63635],{"alt":141,"src":63636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[220,63638,63640],{"className":50748,"code":63639,"language":50750,"meta":141,"style":141},"\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",[30,63641,63642,63652,63666,63670,63678,63692,63712,63732,63745,63753,63759,63769,63779,63783,63787,63794,63807,63820,63832,63848,63852,63856,63863,63875,63887,63899,63909,63919,63923,63927,63936,63948,63959,63971,63975,63979,63987,63997,64007,64017,64021,64025,64035,64049,64061,64065,64069,64081,64092,64109,64119,64123,64127,64142,64153,64163,64167,64171,64178,64193,64197,64201,64209,64219,64223,64227,64236,64246,64250,64258,64266,64270,64278,64293,64308,64321,64329,64363,64390,64417,64444,64471,64479,64487,64502,64539,64574,64609,64644,64679,64687,64695,64703,64708,64713,64733,64738,64767,64772,64777,64795,64800,64805,64810,64832,64837,64853,64857,64862,64867,64888,64893,64922,64926,64931,64935,64943,64951,64955],{"__ignoreMap":141},[228,63643,63644,63646,63648,63650],{"class":230,"line":231},[228,63645,51412],{"class":238},[228,63647,51416],{"class":51415},[228,63649,51419],{"class":2077},[228,63651,51422],{"class":238},[228,63653,63654,63656,63658,63660,63662,63664],{"class":230,"line":142},[228,63655,1148],{"class":238},[228,63657,50750],{"class":51415},[228,63659,51431],{"class":2077},[228,63661,284],{"class":238},[228,63663,51436],{"class":343},[228,63665,51422],{"class":238},[228,63667,63668],{"class":230,"line":1293},[228,63669,2514],{"emptyLinePlaceholder":157},[228,63671,63672,63674,63676],{"class":230,"line":1308},[228,63673,1148],{"class":238},[228,63675,51449],{"class":51415},[228,63677,51422],{"class":238},[228,63679,63680,63682,63684,63686,63688,63690],{"class":230,"line":1314},[228,63681,52259],{"class":238},[228,63683,51459],{"class":51415},[228,63685,51462],{"class":2077},[228,63687,284],{"class":238},[228,63689,51467],{"class":343},[228,63691,59242],{"class":238},[228,63693,63694,63696,63698,63700,63702,63704,63706,63708,63710],{"class":230,"line":1328},[228,63695,52259],{"class":238},[228,63697,51459],{"class":51415},[228,63699,51478],{"class":2077},[228,63701,284],{"class":238},[228,63703,51483],{"class":343},[228,63705,51486],{"class":2077},[228,63707,284],{"class":238},[228,63709,51491],{"class":343},[228,63711,59242],{"class":238},[228,63713,63714,63716,63718,63720,63722,63724,63726,63728,63730],{"class":230,"line":1334},[228,63715,52259],{"class":238},[228,63717,51459],{"class":51415},[228,63719,15035],{"class":2077},[228,63721,284],{"class":238},[228,63723,51506],{"class":343},[228,63725,51486],{"class":2077},[228,63727,284],{"class":238},[228,63729,51513],{"class":343},[228,63731,59242],{"class":238},[228,63733,63734,63736,63738,63741,63743],{"class":230,"line":1425},[228,63735,52259],{"class":238},[228,63737,51522],{"class":51415},[228,63739,63740],{"class":238},">tab栏切换\u003C\u002F",[228,63742,51522],{"class":51415},[228,63744,51422],{"class":238},[228,63746,63747,63749,63751],{"class":230,"line":1431},[228,63748,52259],{"class":238},[228,63750,5241],{"class":51415},[228,63752,51422],{"class":238},[228,63754,63755,63757],{"class":230,"line":1443},[228,63756,6518],{"class":51415},[228,63758,15687],{"class":238},[228,63760,63761,63763,63765,63767],{"class":230,"line":1726},[228,63762,54821],{"class":287},[228,63764,51552],{"class":238},[228,63766,430],{"class":287},[228,63768,1404],{"class":238},[228,63770,63771,63773,63775,63777],{"class":230,"line":1731},[228,63772,54810],{"class":287},[228,63774,51552],{"class":238},[228,63776,430],{"class":287},[228,63778,1404],{"class":238},[228,63780,63781],{"class":230,"line":1737},[228,63782,2301],{"class":238},[228,63784,63785],{"class":230,"line":1742},[228,63786,2514],{"emptyLinePlaceholder":157},[228,63788,63789,63792],{"class":230,"line":1756},[228,63790,63791],{"class":2077},"    .tab",[228,63793,15687],{"class":238},[228,63795,63796,63798,63800,63803,63805],{"class":230,"line":1761},[228,63797,54886],{"class":287},[228,63799,51552],{"class":238},[228,63801,63802],{"class":287},"590",[228,63804,51607],{"class":234},[228,63806,1404],{"class":238},[228,63808,63809,63811,63813,63816,63818],{"class":230,"line":1767},[228,63810,54900],{"class":287},[228,63812,51552],{"class":238},[228,63814,63815],{"class":287},"340",[228,63817,51607],{"class":234},[228,63819,1404],{"class":238},[228,63821,63822,63824,63826,63828,63830],{"class":230,"line":1788},[228,63823,54821],{"class":287},[228,63825,51552],{"class":238},[228,63827,938],{"class":287},[228,63829,51607],{"class":234},[228,63831,1404],{"class":238},[228,63833,63834,63836,63838,63840,63842,63844,63846],{"class":230,"line":1793},[228,63835,62092],{"class":287},[228,63837,51552],{"class":238},[228,63839,456],{"class":287},[228,63841,51607],{"class":234},[228,63843,51636],{"class":287},[228,63845,62359],{"class":287},[228,63847,1404],{"class":238},[228,63849,63850],{"class":230,"line":1807},[228,63851,2301],{"class":238},[228,63853,63854],{"class":230,"line":1812},[228,63855,2514],{"emptyLinePlaceholder":157},[228,63857,63858,63861],{"class":230,"line":1841},[228,63859,63860],{"class":2077},"    .tab-nav",[228,63862,15687],{"class":238},[228,63864,63865,63867,63869,63871,63873],{"class":230,"line":1846},[228,63866,54886],{"class":287},[228,63868,51552],{"class":238},[228,63870,549],{"class":287},[228,63872,566],{"class":234},[228,63874,1404],{"class":238},[228,63876,63877,63879,63881,63883,63885],{"class":230,"line":1863},[228,63878,54900],{"class":287},[228,63880,51552],{"class":238},[228,63882,1145],{"class":287},[228,63884,51607],{"class":234},[228,63886,1404],{"class":238},[228,63888,63889,63891,63893,63895,63897],{"class":230,"line":1868},[228,63890,57474],{"class":287},[228,63892,51552],{"class":238},[228,63894,1145],{"class":287},[228,63896,51607],{"class":234},[228,63898,1404],{"class":238},[228,63900,63901,63903,63905,63907],{"class":230,"line":1873},[228,63902,55124],{"class":287},[228,63904,51552],{"class":238},[228,63906,51592],{"class":287},[228,63908,1404],{"class":238},[228,63910,63911,63913,63915,63917],{"class":230,"line":1878},[228,63912,55135],{"class":287},[228,63914,51552],{"class":238},[228,63916,51783],{"class":287},[228,63918,1404],{"class":238},[228,63920,63921],{"class":230,"line":1892},[228,63922,2301],{"class":238},[228,63924,63925],{"class":230,"line":1897},[228,63926,2514],{"emptyLinePlaceholder":157},[228,63928,63929,63931,63934],{"class":230,"line":2691},[228,63930,63860],{"class":2077},[228,63932,63933],{"class":51415}," h3",[228,63935,15687],{"class":238},[228,63937,63938,63940,63942,63944,63946],{"class":230,"line":2705},[228,63939,55037],{"class":287},[228,63941,51552],{"class":238},[228,63943,1038],{"class":287},[228,63945,51607],{"class":234},[228,63947,1404],{"class":238},[228,63949,63950,63952,63954,63957],{"class":230,"line":2713},[228,63951,62449],{"class":287},[228,63953,51552],{"class":238},[228,63955,63956],{"class":287},"normal",[228,63958,1404],{"class":238},[228,63960,63961,63963,63965,63967,63969],{"class":230,"line":2718},[228,63962,62115],{"class":287},[228,63964,51552],{"class":238},[228,63966,938],{"class":287},[228,63968,51607],{"class":234},[228,63970,1404],{"class":238},[228,63972,63973],{"class":230,"line":2724},[228,63974,2301],{"class":238},[228,63976,63977],{"class":230,"line":2730},[228,63978,2514],{"emptyLinePlaceholder":157},[228,63980,63981,63983,63985],{"class":230,"line":2735},[228,63982,63860],{"class":2077},[228,63984,61407],{"class":51415},[228,63986,15687],{"class":238},[228,63988,63989,63991,63993,63995],{"class":230,"line":8063},[228,63990,54847],{"class":287},[228,63992,51552],{"class":238},[228,63994,54852],{"class":287},[228,63996,1404],{"class":238},[228,63998,63999,64001,64003,64005],{"class":230,"line":8087},[228,64000,55124],{"class":287},[228,64002,51552],{"class":238},[228,64004,51592],{"class":287},[228,64006,1404],{"class":238},[228,64008,64009,64011,64013,64015],{"class":230,"line":8092},[228,64010,55135],{"class":287},[228,64012,51552],{"class":238},[228,64014,51695],{"class":287},[228,64016,1404],{"class":238},[228,64018,64019],{"class":230,"line":8098},[228,64020,2301],{"class":238},[228,64022,64023],{"class":230,"line":8125},[228,64024,2514],{"emptyLinePlaceholder":157},[228,64026,64027,64029,64031,64033],{"class":230,"line":8130},[228,64028,63860],{"class":2077},[228,64030,61407],{"class":51415},[228,64032,55190],{"class":51415},[228,64034,15687],{"class":238},[228,64036,64037,64039,64041,64043,64045,64047],{"class":230,"line":8136},[228,64038,54821],{"class":287},[228,64040,51552],{"class":238},[228,64042,430],{"class":287},[228,64044,9065],{"class":287},[228,64046,51607],{"class":234},[228,64048,1404],{"class":238},[228,64050,64051,64053,64055,64057,64059],{"class":230,"line":8148},[228,64052,55037],{"class":287},[228,64054,51552],{"class":238},[228,64056,787],{"class":287},[228,64058,51607],{"class":234},[228,64060,1404],{"class":238},[228,64062,64063],{"class":230,"line":8160},[228,64064,2301],{"class":238},[228,64066,64067],{"class":230,"line":8172},[228,64068,2514],{"emptyLinePlaceholder":157},[228,64070,64071,64073,64075,64077,64079],{"class":230,"line":9831},[228,64072,63860],{"class":2077},[228,64074,61407],{"class":51415},[228,64076,55190],{"class":51415},[228,64078,1512],{"class":51415},[228,64080,15687],{"class":238},[228,64082,64083,64086,64088,64090],{"class":230,"line":9856},[228,64084,64085],{"class":287},"      text-decoration",[228,64087,51552],{"class":238},[228,64089,54852],{"class":287},[228,64091,1404],{"class":238},[228,64093,64094,64096,64098,64100,64102,64104,64107],{"class":230,"line":9879},[228,64095,62347],{"class":287},[228,64097,51552],{"class":238},[228,64099,316],{"class":287},[228,64101,51607],{"class":234},[228,64103,51636],{"class":287},[228,64105,64106],{"class":287}," transparent",[228,64108,1404],{"class":238},[228,64110,64111,64113,64115,64117],{"class":230,"line":9903},[228,64112,57531],{"class":287},[228,64114,51552],{"class":238},[228,64116,62484],{"class":287},[228,64118,1404],{"class":238},[228,64120,64121],{"class":230,"line":9908},[228,64122,2301],{"class":238},[228,64124,64125],{"class":230,"line":9913},[228,64126,2514],{"emptyLinePlaceholder":157},[228,64128,64129,64131,64133,64135,64137,64140],{"class":230,"line":9918},[228,64130,63860],{"class":2077},[228,64132,61407],{"class":51415},[228,64134,55190],{"class":51415},[228,64136,1512],{"class":51415},[228,64138,64139],{"class":2077},".active",[228,64141,15687],{"class":238},[228,64143,64144,64146,64148,64151],{"class":230,"line":9927},[228,64145,61906],{"class":287},[228,64147,51552],{"class":238},[228,64149,64150],{"class":287},"#e1251b",[228,64152,1404],{"class":238},[228,64154,64155,64157,64159,64161],{"class":230,"line":9932},[228,64156,57531],{"class":287},[228,64158,51552],{"class":238},[228,64160,64150],{"class":287},[228,64162,1404],{"class":238},[228,64164,64165],{"class":230,"line":9938},[228,64166,2301],{"class":238},[228,64168,64169],{"class":230,"line":9959},[228,64170,2514],{"emptyLinePlaceholder":157},[228,64172,64173,64176],{"class":230,"line":9965},[228,64174,64175],{"class":2077},"    .tab-content",[228,64177,15687],{"class":238},[228,64179,64180,64182,64184,64186,64189,64191],{"class":230,"line":9979},[228,64181,54810],{"class":287},[228,64183,51552],{"class":238},[228,64185,430],{"class":287},[228,64187,64188],{"class":287}," 16",[228,64190,51607],{"class":234},[228,64192,1404],{"class":238},[228,64194,64195],{"class":230,"line":9985},[228,64196,2301],{"class":238},[228,64198,64199],{"class":230,"line":10012},[228,64200,2514],{"emptyLinePlaceholder":157},[228,64202,64203,64205,64207],{"class":230,"line":10021},[228,64204,64175],{"class":2077},[228,64206,62289],{"class":2077},[228,64208,15687],{"class":238},[228,64210,64211,64213,64215,64217],{"class":230,"line":10027},[228,64212,55124],{"class":287},[228,64214,51552],{"class":238},[228,64216,54852],{"class":287},[228,64218,1404],{"class":238},[228,64220,64221],{"class":230,"line":10035},[228,64222,2301],{"class":238},[228,64224,64225],{"class":230,"line":10040},[228,64226,2514],{"emptyLinePlaceholder":157},[228,64228,64229,64231,64234],{"class":230,"line":16719},[228,64230,64175],{"class":2077},[228,64232,64233],{"class":2077}," .item.active",[228,64235,15687],{"class":238},[228,64237,64238,64240,64242,64244],{"class":230,"line":16725},[228,64239,55124],{"class":287},[228,64241,51552],{"class":238},[228,64243,60984],{"class":287},[228,64245,1404],{"class":238},[228,64247,64248],{"class":230,"line":16748},[228,64249,2301],{"class":238},[228,64251,64252,64254,64256],{"class":230,"line":16754},[228,64253,52532],{"class":238},[228,64255,5241],{"class":51415},[228,64257,51422],{"class":238},[228,64259,64260,64262,64264],{"class":230,"line":16777},[228,64261,51900],{"class":238},[228,64263,51449],{"class":51415},[228,64265,51422],{"class":238},[228,64267,64268],{"class":230,"line":16791},[228,64269,2514],{"emptyLinePlaceholder":157},[228,64271,64272,64274,64276],{"class":230,"line":16811},[228,64273,1148],{"class":238},[228,64275,51915],{"class":51415},[228,64277,51422],{"class":238},[228,64279,64280,64282,64284,64286,64288,64291],{"class":230,"line":16817},[228,64281,52259],{"class":238},[228,64283,51726],{"class":51415},[228,64285,53601],{"class":2077},[228,64287,284],{"class":238},[228,64289,64290],{"class":343},"\"tab\"",[228,64292,51422],{"class":238},[228,64294,64295,64297,64299,64301,64303,64306],{"class":230,"line":16828},[228,64296,51456],{"class":238},[228,64298,51726],{"class":51415},[228,64300,53601],{"class":2077},[228,64302,284],{"class":238},[228,64304,64305],{"class":343},"\"tab-nav\"",[228,64307,51422],{"class":238},[228,64309,64310,64312,64314,64317,64319],{"class":230,"line":16851},[228,64311,55349],{"class":238},[228,64313,200],{"class":51415},[228,64315,64316],{"class":238},">每日特价\u003C\u002F",[228,64318,200],{"class":51415},[228,64320,51422],{"class":238},[228,64322,64323,64325,64327],{"class":230,"line":16873},[228,64324,55349],{"class":238},[228,64326,1245],{"class":51415},[228,64328,51422],{"class":238},[228,64330,64331,64333,64335,64337,64339,64341,64343,64345,64347,64349,64352,64355,64357,64359,64361],{"class":230,"line":16878},[228,64332,55417],{"class":238},[228,64334,186],{"class":51415},[228,64336,61167],{"class":238},[228,64338,476],{"class":51415},[228,64340,53601],{"class":2077},[228,64342,284],{"class":238},[228,64344,59821],{"class":343},[228,64346,61172],{"class":2077},[228,64348,284],{"class":238},[228,64350,64351],{"class":343},"\"javascript:;\"",[228,64353,64354],{"class":238},">精选\u003C\u002F",[228,64356,476],{"class":51415},[228,64358,55429],{"class":238},[228,64360,186],{"class":51415},[228,64362,51422],{"class":238},[228,64364,64365,64367,64369,64371,64373,64375,64377,64379,64382,64384,64386,64388],{"class":230,"line":16884},[228,64366,55417],{"class":238},[228,64368,186],{"class":51415},[228,64370,61167],{"class":238},[228,64372,476],{"class":51415},[228,64374,61172],{"class":2077},[228,64376,284],{"class":238},[228,64378,64351],{"class":343},[228,64380,64381],{"class":238},">美食\u003C\u002F",[228,64383,476],{"class":51415},[228,64385,55429],{"class":238},[228,64387,186],{"class":51415},[228,64389,51422],{"class":238},[228,64391,64392,64394,64396,64398,64400,64402,64404,64406,64409,64411,64413,64415],{"class":230,"line":16898},[228,64393,55417],{"class":238},[228,64395,186],{"class":51415},[228,64397,61167],{"class":238},[228,64399,476],{"class":51415},[228,64401,61172],{"class":2077},[228,64403,284],{"class":238},[228,64405,64351],{"class":343},[228,64407,64408],{"class":238},">百货\u003C\u002F",[228,64410,476],{"class":51415},[228,64412,55429],{"class":238},[228,64414,186],{"class":51415},[228,64416,51422],{"class":238},[228,64418,64419,64421,64423,64425,64427,64429,64431,64433,64436,64438,64440,64442],{"class":230,"line":16911},[228,64420,55417],{"class":238},[228,64422,186],{"class":51415},[228,64424,61167],{"class":238},[228,64426,476],{"class":51415},[228,64428,61172],{"class":2077},[228,64430,284],{"class":238},[228,64432,64351],{"class":343},[228,64434,64435],{"class":238},">个护\u003C\u002F",[228,64437,476],{"class":51415},[228,64439,55429],{"class":238},[228,64441,186],{"class":51415},[228,64443,51422],{"class":238},[228,64445,64446,64448,64450,64452,64454,64456,64458,64460,64463,64465,64467,64469],{"class":230,"line":16916},[228,64447,55417],{"class":238},[228,64449,186],{"class":51415},[228,64451,61167],{"class":238},[228,64453,476],{"class":51415},[228,64455,61172],{"class":2077},[228,64457,284],{"class":238},[228,64459,64351],{"class":343},[228,64461,64462],{"class":238},">预告\u003C\u002F",[228,64464,476],{"class":51415},[228,64466,55429],{"class":238},[228,64468,186],{"class":51415},[228,64470,51422],{"class":238},[228,64472,64473,64475,64477],{"class":230,"line":16930},[228,64474,55522],{"class":238},[228,64476,1245],{"class":51415},[228,64478,51422],{"class":238},[228,64480,64481,64483,64485],{"class":230,"line":16935},[228,64482,51891],{"class":238},[228,64484,51726],{"class":51415},[228,64486,51422],{"class":238},[228,64488,64489,64491,64493,64495,64497,64500],{"class":230,"line":16941},[228,64490,51456],{"class":238},[228,64492,51726],{"class":51415},[228,64494,53601],{"class":2077},[228,64496,284],{"class":238},[228,64498,64499],{"class":343},"\"tab-content\"",[228,64501,51422],{"class":238},[228,64503,64504,64506,64508,64510,64512,64515,64517,64519,64521,64523,64526,64528,64530,64532,64535,64537],{"class":230,"line":16946},[228,64505,55349],{"class":238},[228,64507,51726],{"class":51415},[228,64509,53601],{"class":2077},[228,64511,284],{"class":238},[228,64513,64514],{"class":343},"\"item active\"",[228,64516,61167],{"class":238},[228,64518,1576],{"class":51415},[228,64520,55354],{"class":2077},[228,64522,284],{"class":238},[228,64524,64525],{"class":343},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[228,64527,55362],{"class":2077},[228,64529,284],{"class":238},[228,64531,7767],{"class":343},[228,64533,64534],{"class":238}," \u002F>\u003C\u002F",[228,64536,51726],{"class":51415},[228,64538,51422],{"class":238},[228,64540,64541,64543,64545,64547,64549,64551,64553,64555,64557,64559,64562,64564,64566,64568,64570,64572],{"class":230,"line":16960},[228,64542,55349],{"class":238},[228,64544,51726],{"class":51415},[228,64546,53601],{"class":2077},[228,64548,284],{"class":238},[228,64550,62738],{"class":343},[228,64552,61167],{"class":238},[228,64554,1576],{"class":51415},[228,64556,55354],{"class":2077},[228,64558,284],{"class":238},[228,64560,64561],{"class":343},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[228,64563,55362],{"class":2077},[228,64565,284],{"class":238},[228,64567,7767],{"class":343},[228,64569,64534],{"class":238},[228,64571,51726],{"class":51415},[228,64573,51422],{"class":238},[228,64575,64576,64578,64580,64582,64584,64586,64588,64590,64592,64594,64597,64599,64601,64603,64605,64607],{"class":230,"line":16965},[228,64577,55349],{"class":238},[228,64579,51726],{"class":51415},[228,64581,53601],{"class":2077},[228,64583,284],{"class":238},[228,64585,62738],{"class":343},[228,64587,61167],{"class":238},[228,64589,1576],{"class":51415},[228,64591,55354],{"class":2077},[228,64593,284],{"class":238},[228,64595,64596],{"class":343},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[228,64598,55362],{"class":2077},[228,64600,284],{"class":238},[228,64602,7767],{"class":343},[228,64604,64534],{"class":238},[228,64606,51726],{"class":51415},[228,64608,51422],{"class":238},[228,64610,64611,64613,64615,64617,64619,64621,64623,64625,64627,64629,64632,64634,64636,64638,64640,64642],{"class":230,"line":16970},[228,64612,55349],{"class":238},[228,64614,51726],{"class":51415},[228,64616,53601],{"class":2077},[228,64618,284],{"class":238},[228,64620,62738],{"class":343},[228,64622,61167],{"class":238},[228,64624,1576],{"class":51415},[228,64626,55354],{"class":2077},[228,64628,284],{"class":238},[228,64630,64631],{"class":343},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[228,64633,55362],{"class":2077},[228,64635,284],{"class":238},[228,64637,7767],{"class":343},[228,64639,64534],{"class":238},[228,64641,51726],{"class":51415},[228,64643,51422],{"class":238},[228,64645,64646,64648,64650,64652,64654,64656,64658,64660,64662,64664,64667,64669,64671,64673,64675,64677],{"class":230,"line":16984},[228,64647,55349],{"class":238},[228,64649,51726],{"class":51415},[228,64651,53601],{"class":2077},[228,64653,284],{"class":238},[228,64655,62738],{"class":343},[228,64657,61167],{"class":238},[228,64659,1576],{"class":51415},[228,64661,55354],{"class":2077},[228,64663,284],{"class":238},[228,64665,64666],{"class":343},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[228,64668,55362],{"class":2077},[228,64670,284],{"class":238},[228,64672,7767],{"class":343},[228,64674,64534],{"class":238},[228,64676,51726],{"class":51415},[228,64678,51422],{"class":238},[228,64680,64681,64683,64685],{"class":230,"line":16996},[228,64682,51891],{"class":238},[228,64684,51726],{"class":51415},[228,64686,51422],{"class":238},[228,64688,64689,64691,64693],{"class":230,"line":17001},[228,64690,52532],{"class":238},[228,64692,51726],{"class":51415},[228,64694,51422],{"class":238},[228,64696,64697,64699,64701],{"class":230,"line":17014},[228,64698,52259],{"class":238},[228,64700,51928],{"class":51415},[228,64702,51422],{"class":238},[228,64704,64705],{"class":230,"line":17019},[228,64706,64707],{"class":297},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[228,64709,64710],{"class":230,"line":17024},[228,64711,64712],{"class":297},"    \u002F\u002F 1.1 获取 a 元素 \n",[228,64714,64715,64717,64720,64722,64724,64726,64728,64731],{"class":230,"line":17029},[228,64716,11336],{"class":234},[228,64718,64719],{"class":287}," as",[228,64721,13679],{"class":234},[228,64723,54511],{"class":238},[228,64725,55796],{"class":2077},[228,64727,239],{"class":238},[228,64729,64730],{"class":343},"'.tab-nav a'",[228,64732,245],{"class":238},[228,64734,64735],{"class":230,"line":17042},[228,64736,64737],{"class":297},"    \u002F\u002F console.log(as) \n",[228,64739,64740,64742,64744,64746,64748,64750,64752,64754,64756,64759,64761,64763,64765],{"class":230,"line":17047},[228,64741,3315],{"class":234},[228,64743,1772],{"class":238},[228,64745,51962],{"class":234},[228,64747,9553],{"class":238},[228,64749,284],{"class":234},[228,64751,4207],{"class":287},[228,64753,9560],{"class":238},[228,64755,1148],{"class":234},[228,64757,64758],{"class":238}," as.",[228,64760,52083],{"class":287},[228,64762,3328],{"class":238},[228,64764,2406],{"class":234},[228,64766,12557],{"class":238},[228,64768,64769],{"class":230,"line":32748},[228,64770,64771],{"class":297},"      \u002F\u002F console.log(as[i])\n",[228,64773,64774],{"class":230,"line":32754},[228,64775,64776],{"class":297},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[228,64778,64779,64782,64784,64786,64789,64791,64793],{"class":230,"line":32760},[228,64780,64781],{"class":238},"      as[i].",[228,64783,57928],{"class":2077},[228,64785,239],{"class":238},[228,64787,64788],{"class":343},"'mouseenter'",[228,64790,12550],{"class":238},[228,64792,54564],{"class":234},[228,64794,54567],{"class":238},[228,64796,64797],{"class":230,"line":32766},[228,64798,64799],{"class":297},"        \u002F\u002F console.log('鼠标经过')\n",[228,64801,64802],{"class":230,"line":32772},[228,64803,64804],{"class":297},"        \u002F\u002F 排他思想  \n",[228,64806,64807],{"class":230,"line":32783},[228,64808,64809],{"class":297},"        \u002F\u002F 干掉别人 移除类active\n",[228,64811,64812,64814,64816,64818,64821,64823,64825,64827,64830],{"class":230,"line":32789},[228,64813,52040],{"class":238},[228,64815,54514],{"class":2077},[228,64817,239],{"class":238},[228,64819,64820],{"class":343},"'.tab-nav .active'",[228,64822,57118],{"class":238},[228,64824,57121],{"class":2077},[228,64826,239],{"class":238},[228,64828,64829],{"class":343},"'active'",[228,64831,245],{"class":238},[228,64833,64834],{"class":230,"line":32809},[228,64835,64836],{"class":297},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[228,64838,64839,64842,64845,64847,64849,64851],{"class":230,"line":32815},[228,64840,64841],{"class":287},"        this",[228,64843,64844],{"class":238},".classList.",[228,64846,5449],{"class":2077},[228,64848,239],{"class":238},[228,64850,64829],{"class":343},[228,64852,245],{"class":238},[228,64854,64855],{"class":230,"line":32826},[228,64856,2514],{"emptyLinePlaceholder":157},[228,64858,64859],{"class":230,"line":32832},[228,64860,64861],{"class":297},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[228,64863,64864],{"class":230,"line":32838},[228,64865,64866],{"class":297},"        \u002F\u002F 干掉别人\n",[228,64868,64869,64871,64873,64875,64878,64880,64882,64884,64886],{"class":230,"line":32844},[228,64870,52040],{"class":238},[228,64872,54514],{"class":2077},[228,64874,239],{"class":238},[228,64876,64877],{"class":343},"'.tab-content .active'",[228,64879,57118],{"class":238},[228,64881,57121],{"class":2077},[228,64883,239],{"class":238},[228,64885,64829],{"class":343},[228,64887,245],{"class":238},[228,64889,64890],{"class":230,"line":32850},[228,64891,64892],{"class":297},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[228,64894,64895,64897,64899,64901,64904,64906,64908,64910,64912,64914,64916,64918,64920],{"class":230,"line":32856},[228,64896,52040],{"class":238},[228,64898,54514],{"class":2077},[228,64900,239],{"class":238},[228,64902,64903],{"class":343},"`.tab-content .item:nth-child(${",[228,64905,679],{"class":238},[228,64907,45681],{"class":234},[228,64909,25234],{"class":287},[228,64911,57147],{"class":343},[228,64913,57118],{"class":238},[228,64915,5449],{"class":2077},[228,64917,239],{"class":238},[228,64919,64829],{"class":343},[228,64921,245],{"class":238},[228,64923,64924],{"class":230,"line":32862},[228,64925,2514],{"emptyLinePlaceholder":157},[228,64927,64928],{"class":230,"line":32868},[228,64929,64930],{"class":238},"      })\n",[228,64932,64933],{"class":230,"line":32888},[228,64934,2301],{"class":238},[228,64936,64937,64939,64941],{"class":230,"line":32894},[228,64938,52532],{"class":238},[228,64940,51928],{"class":51415},[228,64942,51422],{"class":238},[228,64944,64945,64947,64949],{"class":230,"line":32910},[228,64946,51900],{"class":238},[228,64948,51915],{"class":51415},[228,64950,51422],{"class":238},[228,64952,64953],{"class":230,"line":32916},[228,64954,2514],{"emptyLinePlaceholder":157},[228,64956,64957,64959,64961],{"class":230,"line":32930},[228,64958,51900],{"class":238},[228,64960,50750],{"class":51415},[228,64962,51422],{"class":238},[19,64964,64965],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,64967,64968],{},"在监听事件中，this指向的就是他的调用者",[19,64970,64971],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,64973,53835],{},[19,64975,64976],{},"(function () {",[19,64978,64979],{},"const list = document.querySelector('.xtx-elevator-list')",[19,64981,64982],{},"list.addEventListener('click', function (e) {",[19,64984,64985],{},"if (e.target.tagName === 'A') {",[19,64987,64988],{},"\u002F\u002F 排他思想",[19,64990,64991],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,64993,64994],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,64996,64997],{},"\u002F\u002F console.log(old);",[19,64999,65000],{},"\u002F\u002F 判断",[19,65002,65003],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,65005,65006],{},"if (old) old.classList.remove('active')",[19,65008,65009],{},"e.target.classList.add('active')",[19,65011,1184],{},[19,65013,52579],{},[19,65015,65016],{},"})();",[200,65018,65020],{"id":65019},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[220,65022,65024],{"className":50748,"code":65023,"language":50750,"meta":141,"style":141},"\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",[30,65025,65026,65036,65040,65048,65052,65066,65080,65092,65100,65106,65116,65126,65130,65134,65141,65153,65164,65181,65194,65208,65218,65222,65226,65233,65244,65262,65272,65284,65288,65292,65299,65316,65327,65339,65343,65347,65354,65366,65370,65378,65386,65390,65398,65406,65414,65429,65473,65481,65494,65507,65520,65528,65536,65544,65572,65580,65592,65605,65618,65626,65634,65642,65668,65676,65689,65701,65714,65722,65730,65738,65764,65772,65785,65797,65810,65818,65826,65834,65839,65859,65864,65884,65889,65906,65911,65919,65924,65953,65966,65970,65974,65979,65983,66011,66016,66033,66038,66043,66048,66053,66079,66083,66087,66095,66103,66107],{"__ignoreMap":141},[228,65027,65028,65030,65032,65034],{"class":230,"line":231},[228,65029,51412],{"class":238},[228,65031,51416],{"class":51415},[228,65033,51419],{"class":2077},[228,65035,51422],{"class":238},[228,65037,65038],{"class":230,"line":142},[228,65039,2514],{"emptyLinePlaceholder":157},[228,65041,65042,65044,65046],{"class":230,"line":1293},[228,65043,1148],{"class":238},[228,65045,50750],{"class":51415},[228,65047,51422],{"class":238},[228,65049,65050],{"class":230,"line":1308},[228,65051,2514],{"emptyLinePlaceholder":157},[228,65053,65054,65056,65058,65060,65062,65064],{"class":230,"line":1314},[228,65055,1148],{"class":238},[228,65057,51449],{"class":51415},[228,65059,51431],{"class":2077},[228,65061,284],{"class":238},[228,65063,51436],{"class":343},[228,65065,51422],{"class":238},[228,65067,65068,65070,65072,65074,65076,65078],{"class":230,"line":1328},[228,65069,52259],{"class":238},[228,65071,51459],{"class":51415},[228,65073,51462],{"class":2077},[228,65075,284],{"class":238},[228,65077,51467],{"class":343},[228,65079,51422],{"class":238},[228,65081,65082,65084,65086,65088,65090],{"class":230,"line":1334},[228,65083,52259],{"class":238},[228,65085,51522],{"class":51415},[228,65087,55429],{"class":238},[228,65089,51522],{"class":51415},[228,65091,51422],{"class":238},[228,65093,65094,65096,65098],{"class":230,"line":1425},[228,65095,52259],{"class":238},[228,65097,5241],{"class":51415},[228,65099,51422],{"class":238},[228,65101,65102,65104],{"class":230,"line":1431},[228,65103,6518],{"class":51415},[228,65105,15687],{"class":238},[228,65107,65108,65110,65112,65114],{"class":230,"line":1443},[228,65109,54821],{"class":287},[228,65111,51552],{"class":238},[228,65113,430],{"class":287},[228,65115,1404],{"class":238},[228,65117,65118,65120,65122,65124],{"class":230,"line":1726},[228,65119,54810],{"class":287},[228,65121,51552],{"class":238},[228,65123,430],{"class":287},[228,65125,1404],{"class":238},[228,65127,65128],{"class":230,"line":1731},[228,65129,2301],{"class":238},[228,65131,65132],{"class":230,"line":1737},[228,65133,2514],{"emptyLinePlaceholder":157},[228,65135,65136,65139],{"class":230,"line":1742},[228,65137,65138],{"class":51415},"    table",[228,65140,15687],{"class":238},[228,65142,65143,65146,65148,65151],{"class":230,"line":1756},[228,65144,65145],{"class":287},"      border-collapse",[228,65147,51552],{"class":238},[228,65149,65150],{"class":287},"collapse",[228,65152,1404],{"class":238},[228,65154,65155,65158,65160,65162],{"class":230,"line":1761},[228,65156,65157],{"class":287},"      border-spacing",[228,65159,51552],{"class":238},[228,65161,430],{"class":287},[228,65163,1404],{"class":238},[228,65165,65166,65168,65170,65172,65174,65176,65179],{"class":230,"line":1767},[228,65167,62092],{"class":287},[228,65169,51552],{"class":238},[228,65171,456],{"class":287},[228,65173,51607],{"class":234},[228,65175,51636],{"class":287},[228,65177,65178],{"class":287}," #c0c0c0",[228,65180,1404],{"class":238},[228,65182,65183,65185,65187,65190,65192],{"class":230,"line":1788},[228,65184,54886],{"class":287},[228,65186,51552],{"class":238},[228,65188,65189],{"class":287},"500",[228,65191,51607],{"class":234},[228,65193,1404],{"class":238},[228,65195,65196,65198,65200,65202,65204,65206],{"class":230,"line":1793},[228,65197,54821],{"class":287},[228,65199,51552],{"class":238},[228,65201,549],{"class":287},[228,65203,51607],{"class":234},[228,65205,51671],{"class":287},[228,65207,1404],{"class":238},[228,65209,65210,65212,65214,65216],{"class":230,"line":1807},[228,65211,57401],{"class":287},[228,65213,51552],{"class":238},[228,65215,51707],{"class":287},[228,65217,1404],{"class":238},[228,65219,65220],{"class":230,"line":1812},[228,65221,2301],{"class":238},[228,65223,65224],{"class":230,"line":1841},[228,65225,2514],{"emptyLinePlaceholder":157},[228,65227,65228,65231],{"class":230,"line":1846},[228,65229,65230],{"class":51415},"    th",[228,65232,15687],{"class":238},[228,65234,65235,65237,65239,65242],{"class":230,"line":1863},[228,65236,54999],{"class":287},[228,65238,51552],{"class":238},[228,65240,65241],{"class":287},"#09c",[228,65243,1404],{"class":238},[228,65245,65246,65249,65251,65253,65255,65257,65260],{"class":230,"line":1868},[228,65247,65248],{"class":287},"      font",[228,65250,51552],{"class":238},[228,65252,62454],{"class":287},[228,65254,64188],{"class":287},[228,65256,51607],{"class":234},[228,65258,65259],{"class":343}," \"微软雅黑\"",[228,65261,1404],{"class":238},[228,65263,65264,65266,65268,65270],{"class":230,"line":1873},[228,65265,57531],{"class":287},[228,65267,51552],{"class":238},[228,65269,60957],{"class":287},[228,65271,1404],{"class":238},[228,65273,65274,65276,65278,65280,65282],{"class":230,"line":1878},[228,65275,54900],{"class":287},[228,65277,51552],{"class":238},[228,65279,1038],{"class":287},[228,65281,51607],{"class":234},[228,65283,1404],{"class":238},[228,65285,65286],{"class":230,"line":1892},[228,65287,2301],{"class":238},[228,65289,65290],{"class":230,"line":1897},[228,65291,2514],{"emptyLinePlaceholder":157},[228,65293,65294,65297],{"class":230,"line":2691},[228,65295,65296],{"class":51415},"    td",[228,65298,15687],{"class":238},[228,65300,65301,65303,65305,65307,65309,65311,65314],{"class":230,"line":2705},[228,65302,62092],{"class":287},[228,65304,51552],{"class":238},[228,65306,456],{"class":287},[228,65308,51607],{"class":234},[228,65310,51636],{"class":287},[228,65312,65313],{"class":287}," #d0d0d0",[228,65315,1404],{"class":238},[228,65317,65318,65320,65322,65325],{"class":230,"line":2713},[228,65319,57531],{"class":287},[228,65321,51552],{"class":238},[228,65323,65324],{"class":287},"#404060",[228,65326,1404],{"class":238},[228,65328,65329,65331,65333,65335,65337],{"class":230,"line":2718},[228,65330,54810],{"class":287},[228,65332,51552],{"class":238},[228,65334,684],{"class":287},[228,65336,51607],{"class":234},[228,65338,1404],{"class":238},[228,65340,65341],{"class":230,"line":2724},[228,65342,2301],{"class":238},[228,65344,65345],{"class":230,"line":2730},[228,65346,2514],{"emptyLinePlaceholder":157},[228,65348,65349,65352],{"class":230,"line":2735},[228,65350,65351],{"class":2077},"    .allCheck",[228,65353,15687],{"class":238},[228,65355,65356,65358,65360,65362,65364],{"class":230,"line":8063},[228,65357,54886],{"class":287},[228,65359,51552],{"class":238},[228,65361,850],{"class":287},[228,65363,51607],{"class":234},[228,65365,1404],{"class":238},[228,65367,65368],{"class":230,"line":8087},[228,65369,2301],{"class":238},[228,65371,65372,65374,65376],{"class":230,"line":8092},[228,65373,52532],{"class":238},[228,65375,5241],{"class":51415},[228,65377,51422],{"class":238},[228,65379,65380,65382,65384],{"class":230,"line":8098},[228,65381,51900],{"class":238},[228,65383,51449],{"class":51415},[228,65385,51422],{"class":238},[228,65387,65388],{"class":230,"line":8125},[228,65389,2514],{"emptyLinePlaceholder":157},[228,65391,65392,65394,65396],{"class":230,"line":8130},[228,65393,1148],{"class":238},[228,65395,51915],{"class":51415},[228,65397,51422],{"class":238},[228,65399,65400,65402,65404],{"class":230,"line":8136},[228,65401,52259],{"class":238},[228,65403,376],{"class":51415},[228,65405,51422],{"class":238},[228,65407,65408,65410,65412],{"class":230,"line":8148},[228,65409,51456],{"class":238},[228,65411,382],{"class":51415},[228,65413,51422],{"class":238},[228,65415,65416,65418,65420,65422,65424,65427],{"class":230,"line":8160},[228,65417,55349],{"class":238},[228,65419,385],{"class":51415},[228,65421,53601],{"class":2077},[228,65423,284],{"class":238},[228,65425,65426],{"class":343},"\"allCheck\"",[228,65428,51422],{"class":238},[228,65430,65431,65433,65435,65437,65439,65441,65443,65445,65447,65449,65451,65454,65457,65459,65461,65463,65466,65469,65471],{"class":230,"line":8172},[228,65432,55417],{"class":238},[228,65434,53936],{"class":51415},[228,65436,53939],{"class":2077},[228,65438,284],{"class":238},[228,65440,53944],{"class":343},[228,65442,15035],{"class":2077},[228,65444,284],{"class":238},[228,65446,7767],{"class":343},[228,65448,15074],{"class":2077},[228,65450,284],{"class":238},[228,65452,65453],{"class":343},"\"checkAll\"",[228,65455,65456],{"class":238},"> \u003C",[228,65458,228],{"class":51415},[228,65460,53601],{"class":2077},[228,65462,284],{"class":238},[228,65464,65465],{"class":343},"\"all\"",[228,65467,65468],{"class":238},">全选\u003C\u002F",[228,65470,228],{"class":51415},[228,65472,51422],{"class":238},[228,65474,65475,65477,65479],{"class":230,"line":9831},[228,65476,55522],{"class":238},[228,65478,385],{"class":51415},[228,65480,51422],{"class":238},[228,65482,65483,65485,65487,65490,65492],{"class":230,"line":9856},[228,65484,55349],{"class":238},[228,65486,385],{"class":51415},[228,65488,65489],{"class":238},">商品\u003C\u002F",[228,65491,385],{"class":51415},[228,65493,51422],{"class":238},[228,65495,65496,65498,65500,65503,65505],{"class":230,"line":9879},[228,65497,55349],{"class":238},[228,65499,385],{"class":51415},[228,65501,65502],{"class":238},">商家\u003C\u002F",[228,65504,385],{"class":51415},[228,65506,51422],{"class":238},[228,65508,65509,65511,65513,65516,65518],{"class":230,"line":9903},[228,65510,55349],{"class":238},[228,65512,385],{"class":51415},[228,65514,65515],{"class":238},">价格\u003C\u002F",[228,65517,385],{"class":51415},[228,65519,51422],{"class":238},[228,65521,65522,65524,65526],{"class":230,"line":9908},[228,65523,51891],{"class":238},[228,65525,382],{"class":51415},[228,65527,51422],{"class":238},[228,65529,65530,65532,65534],{"class":230,"line":9913},[228,65531,51456],{"class":238},[228,65533,382],{"class":51415},[228,65535,51422],{"class":238},[228,65537,65538,65540,65542],{"class":230,"line":9918},[228,65539,55349],{"class":238},[228,65541,428],{"class":51415},[228,65543,51422],{"class":238},[228,65545,65546,65548,65550,65552,65554,65556,65558,65560,65563,65565,65567,65570],{"class":230,"line":9927},[228,65547,55417],{"class":238},[228,65549,53936],{"class":51415},[228,65551,53939],{"class":2077},[228,65553,284],{"class":238},[228,65555,53944],{"class":343},[228,65557,15035],{"class":2077},[228,65559,284],{"class":238},[228,65561,65562],{"class":343},"\"check\"",[228,65564,53601],{"class":2077},[228,65566,284],{"class":238},[228,65568,65569],{"class":343},"\"ck\"",[228,65571,51422],{"class":238},[228,65573,65574,65576,65578],{"class":230,"line":9932},[228,65575,55522],{"class":238},[228,65577,428],{"class":51415},[228,65579,51422],{"class":238},[228,65581,65582,65584,65586,65588,65590],{"class":230,"line":9938},[228,65583,55349],{"class":238},[228,65585,428],{"class":51415},[228,65587,61288],{"class":238},[228,65589,428],{"class":51415},[228,65591,51422],{"class":238},[228,65593,65594,65596,65598,65601,65603],{"class":230,"line":9959},[228,65595,55349],{"class":238},[228,65597,428],{"class":51415},[228,65599,65600],{"class":238},">小米\u003C\u002F",[228,65602,428],{"class":51415},[228,65604,51422],{"class":238},[228,65606,65607,65609,65611,65614,65616],{"class":230,"line":9965},[228,65608,55349],{"class":238},[228,65610,428],{"class":51415},[228,65612,65613],{"class":238},">￥1999\u003C\u002F",[228,65615,428],{"class":51415},[228,65617,51422],{"class":238},[228,65619,65620,65622,65624],{"class":230,"line":9979},[228,65621,51891],{"class":238},[228,65623,382],{"class":51415},[228,65625,51422],{"class":238},[228,65627,65628,65630,65632],{"class":230,"line":9985},[228,65629,51456],{"class":238},[228,65631,382],{"class":51415},[228,65633,51422],{"class":238},[228,65635,65636,65638,65640],{"class":230,"line":10012},[228,65637,55349],{"class":238},[228,65639,428],{"class":51415},[228,65641,51422],{"class":238},[228,65643,65644,65646,65648,65650,65652,65654,65656,65658,65660,65662,65664,65666],{"class":230,"line":10021},[228,65645,55417],{"class":238},[228,65647,53936],{"class":51415},[228,65649,53939],{"class":2077},[228,65651,284],{"class":238},[228,65653,53944],{"class":343},[228,65655,15035],{"class":2077},[228,65657,284],{"class":238},[228,65659,65562],{"class":343},[228,65661,53601],{"class":2077},[228,65663,284],{"class":238},[228,65665,65569],{"class":343},[228,65667,51422],{"class":238},[228,65669,65670,65672,65674],{"class":230,"line":10027},[228,65671,55522],{"class":238},[228,65673,428],{"class":51415},[228,65675,51422],{"class":238},[228,65677,65678,65680,65682,65685,65687],{"class":230,"line":10035},[228,65679,55349],{"class":238},[228,65681,428],{"class":51415},[228,65683,65684],{"class":238},">小米净水器\u003C\u002F",[228,65686,428],{"class":51415},[228,65688,51422],{"class":238},[228,65690,65691,65693,65695,65697,65699],{"class":230,"line":10040},[228,65692,55349],{"class":238},[228,65694,428],{"class":51415},[228,65696,65600],{"class":238},[228,65698,428],{"class":51415},[228,65700,51422],{"class":238},[228,65702,65703,65705,65707,65710,65712],{"class":230,"line":16719},[228,65704,55349],{"class":238},[228,65706,428],{"class":51415},[228,65708,65709],{"class":238},">￥4999\u003C\u002F",[228,65711,428],{"class":51415},[228,65713,51422],{"class":238},[228,65715,65716,65718,65720],{"class":230,"line":16725},[228,65717,51891],{"class":238},[228,65719,382],{"class":51415},[228,65721,51422],{"class":238},[228,65723,65724,65726,65728],{"class":230,"line":16748},[228,65725,51456],{"class":238},[228,65727,382],{"class":51415},[228,65729,51422],{"class":238},[228,65731,65732,65734,65736],{"class":230,"line":16754},[228,65733,55349],{"class":238},[228,65735,428],{"class":51415},[228,65737,51422],{"class":238},[228,65739,65740,65742,65744,65746,65748,65750,65752,65754,65756,65758,65760,65762],{"class":230,"line":16777},[228,65741,55417],{"class":238},[228,65743,53936],{"class":51415},[228,65745,53939],{"class":2077},[228,65747,284],{"class":238},[228,65749,53944],{"class":343},[228,65751,15035],{"class":2077},[228,65753,284],{"class":238},[228,65755,65562],{"class":343},[228,65757,53601],{"class":2077},[228,65759,284],{"class":238},[228,65761,65569],{"class":343},[228,65763,51422],{"class":238},[228,65765,65766,65768,65770],{"class":230,"line":16791},[228,65767,55522],{"class":238},[228,65769,428],{"class":51415},[228,65771,51422],{"class":238},[228,65773,65774,65776,65778,65781,65783],{"class":230,"line":16811},[228,65775,55349],{"class":238},[228,65777,428],{"class":51415},[228,65779,65780],{"class":238},">小米电视\u003C\u002F",[228,65782,428],{"class":51415},[228,65784,51422],{"class":238},[228,65786,65787,65789,65791,65793,65795],{"class":230,"line":16817},[228,65788,55349],{"class":238},[228,65790,428],{"class":51415},[228,65792,65600],{"class":238},[228,65794,428],{"class":51415},[228,65796,51422],{"class":238},[228,65798,65799,65801,65803,65806,65808],{"class":230,"line":16828},[228,65800,55349],{"class":238},[228,65802,428],{"class":51415},[228,65804,65805],{"class":238},">￥5999\u003C\u002F",[228,65807,428],{"class":51415},[228,65809,51422],{"class":238},[228,65811,65812,65814,65816],{"class":230,"line":16851},[228,65813,51891],{"class":238},[228,65815,382],{"class":51415},[228,65817,51422],{"class":238},[228,65819,65820,65822,65824],{"class":230,"line":16873},[228,65821,52532],{"class":238},[228,65823,376],{"class":51415},[228,65825,51422],{"class":238},[228,65827,65828,65830,65832],{"class":230,"line":16878},[228,65829,52259],{"class":238},[228,65831,51928],{"class":51415},[228,65833,51422],{"class":238},[228,65835,65836],{"class":230,"line":16884},[228,65837,65838],{"class":297},"    \u002F\u002F 1. 获取大复选框\n",[228,65840,65841,65843,65846,65848,65850,65852,65854,65857],{"class":230,"line":16898},[228,65842,11336],{"class":234},[228,65844,65845],{"class":287}," checkAll",[228,65847,13679],{"class":234},[228,65849,54511],{"class":238},[228,65851,54514],{"class":2077},[228,65853,239],{"class":238},[228,65855,65856],{"class":343},"'#checkAll'",[228,65858,245],{"class":238},[228,65860,65861],{"class":230,"line":16911},[228,65862,65863],{"class":297},"    \u002F\u002F 2. 获取所有的小复选框\n",[228,65865,65866,65868,65871,65873,65875,65877,65879,65882],{"class":230,"line":16916},[228,65867,11336],{"class":234},[228,65869,65870],{"class":287}," cks",[228,65872,13679],{"class":234},[228,65874,54511],{"class":238},[228,65876,55796],{"class":2077},[228,65878,239],{"class":238},[228,65880,65881],{"class":343},"'.ck'",[228,65883,245],{"class":238},[228,65885,65886],{"class":230,"line":16930},[228,65887,65888],{"class":297},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[228,65890,65891,65894,65896,65898,65900,65902,65904],{"class":230,"line":16935},[228,65892,65893],{"class":238},"    checkAll.",[228,65895,57928],{"class":2077},[228,65897,239],{"class":238},[228,65899,57933],{"class":343},[228,65901,12550],{"class":238},[228,65903,54564],{"class":234},[228,65905,54567],{"class":238},[228,65907,65908],{"class":230,"line":16941},[228,65909,65910],{"class":297},"      \u002F\u002F 得到当前大复选框的选中状态\n",[228,65912,65913,65916],{"class":230,"line":16946},[228,65914,65915],{"class":297},"      \u002F\u002F console.log(checkAll.checked)",[228,65917,65918],{"class":297},"  \u002F\u002F 得到 是 true 或者是 false\n",[228,65920,65921],{"class":230,"line":16960},[228,65922,65923],{"class":297},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[228,65925,65926,65928,65930,65932,65934,65936,65938,65940,65942,65945,65947,65949,65951],{"class":230,"line":16965},[228,65927,52399],{"class":234},[228,65929,1772],{"class":238},[228,65931,51962],{"class":234},[228,65933,9553],{"class":238},[228,65935,284],{"class":234},[228,65937,4207],{"class":287},[228,65939,9560],{"class":238},[228,65941,1148],{"class":234},[228,65943,65944],{"class":238}," cks.",[228,65946,52083],{"class":287},[228,65948,3328],{"class":238},[228,65950,2406],{"class":234},[228,65952,12557],{"class":238},[228,65954,65955,65958,65960,65963],{"class":230,"line":16970},[228,65956,65957],{"class":238},"        cks[i].checked ",[228,65959,284],{"class":234},[228,65961,65962],{"class":287}," this",[228,65964,65965],{"class":238},".checked\n",[228,65967,65968],{"class":230,"line":16984},[228,65969,52513],{"class":238},[228,65971,65972],{"class":230,"line":16996},[228,65973,33576],{"class":238},[228,65975,65976],{"class":230,"line":17001},[228,65977,65978],{"class":297},"    \u002F\u002F 5. 小复选框控制大复选框\n",[228,65980,65981],{"class":230,"line":17014},[228,65982,2514],{"emptyLinePlaceholder":157},[228,65984,65985,65987,65989,65991,65993,65995,65997,65999,66001,66003,66005,66007,66009],{"class":230,"line":17019},[228,65986,3315],{"class":234},[228,65988,1772],{"class":238},[228,65990,51962],{"class":234},[228,65992,9553],{"class":238},[228,65994,284],{"class":234},[228,65996,4207],{"class":287},[228,65998,9560],{"class":238},[228,66000,1148],{"class":234},[228,66002,65944],{"class":238},[228,66004,52083],{"class":287},[228,66006,3328],{"class":238},[228,66008,2406],{"class":234},[228,66010,12557],{"class":238},[228,66012,66013],{"class":230,"line":17024},[228,66014,66015],{"class":297},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[228,66017,66018,66021,66023,66025,66027,66029,66031],{"class":230,"line":17029},[228,66019,66020],{"class":238},"      cks[i].",[228,66022,57928],{"class":2077},[228,66024,239],{"class":238},[228,66026,57933],{"class":343},[228,66028,12550],{"class":238},[228,66030,54564],{"class":234},[228,66032,54567],{"class":238},[228,66034,66035],{"class":230,"line":17042},[228,66036,66037],{"class":297},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[228,66039,66040],{"class":230,"line":17047},[228,66041,66042],{"class":297},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[228,66044,66045],{"class":230,"line":32748},[228,66046,66047],{"class":297},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[228,66049,66050],{"class":230,"line":32754},[228,66051,66052],{"class":297},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[228,66054,66055,66058,66060,66062,66064,66066,66069,66071,66073,66075,66077],{"class":230,"line":32760},[228,66056,66057],{"class":238},"        checkAll.checked ",[228,66059,284],{"class":234},[228,66061,54511],{"class":238},[228,66063,55796],{"class":2077},[228,66065,239],{"class":238},[228,66067,66068],{"class":343},"'.ck:checked'",[228,66070,30941],{"class":238},[228,66072,52083],{"class":287},[228,66074,58021],{"class":234},[228,66076,65944],{"class":238},[228,66078,55946],{"class":287},[228,66080,66081],{"class":230,"line":32766},[228,66082,64930],{"class":238},[228,66084,66085],{"class":230,"line":32772},[228,66086,2301],{"class":238},[228,66088,66089,66091,66093],{"class":230,"line":32783},[228,66090,52532],{"class":238},[228,66092,51928],{"class":51415},[228,66094,51422],{"class":238},[228,66096,66097,66099,66101],{"class":230,"line":32789},[228,66098,51900],{"class":238},[228,66100,51915],{"class":51415},[228,66102,51422],{"class":238},[228,66104,66105],{"class":230,"line":32809},[228,66106,2514],{"emptyLinePlaceholder":157},[228,66108,66109,66111,66113],{"class":230,"line":32815},[228,66110,51900],{"class":238},[228,66112,50750],{"class":51415},[228,66114,51422],{"class":238},[19,66116,66117],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,66119,66120],{},"用好之间比较得到的布尔值！！！",[19,66122,66123,66124,66127,66128,1772,66131,822,66133,66136],{},"在 JS 里访问的时候，",[30,66125,66126],{},"checkbox.checked"," 是一个 ",[388,66129,66130],{},"布尔值",[30,66132,1476],{},[30,66134,66135],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,66138,66139,66140,66143,66144],{},"HTML 的 ",[30,66141,66142],{},"checked=\"checked\""," 只是 ",[388,66145,66146,66147,66150],{},"初始值；JS 的 ",[30,66148,66149],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,66152,66153],{},"：checked是一个伪类选择器",[19,66155,66156],{},[1576,66157],{"alt":141,"src":66158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,66160,66161,66164],{},[66162,66163],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,66166,66167],{},[1576,66168],{"alt":141,"src":66169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,66171,66173],{"id":66172},"_33-dom事件进阶","3.3 DOM事件进阶",[200,66175,66177],{"id":66176},"_331-事件流","3.3.1 事件流",[19,66179,66180],{},[1576,66181],{"alt":141,"src":66182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22113,66184,66186],{"id":66185},"_3311-事件捕获","3.3.1.1 事件捕获",[19,66188,66189],{},[1576,66190],{"alt":141,"src":66191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[220,66193,66195],{"className":50748,"code":66194,"language":50750,"meta":141,"style":141},"\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",[30,66196,66197,66207,66221,66225,66233,66247,66267,66279,66287,66294,66306,66318,66328,66332,66336,66343,66355,66367,66377,66381,66389,66397,66401,66409,66424,66443,66451,66459,66479,66499,66515,66526,66534,66551,66562,66570,66587,66598,66606,66614,66622,66626],{"__ignoreMap":141},[228,66198,66199,66201,66203,66205],{"class":230,"line":231},[228,66200,51412],{"class":238},[228,66202,51416],{"class":51415},[228,66204,51419],{"class":2077},[228,66206,51422],{"class":238},[228,66208,66209,66211,66213,66215,66217,66219],{"class":230,"line":142},[228,66210,1148],{"class":238},[228,66212,50750],{"class":51415},[228,66214,51431],{"class":2077},[228,66216,284],{"class":238},[228,66218,51436],{"class":343},[228,66220,51422],{"class":238},[228,66222,66223],{"class":230,"line":1293},[228,66224,2514],{"emptyLinePlaceholder":157},[228,66226,66227,66229,66231],{"class":230,"line":1308},[228,66228,1148],{"class":238},[228,66230,51449],{"class":51415},[228,66232,51422],{"class":238},[228,66234,66235,66237,66239,66241,66243,66245],{"class":230,"line":1314},[228,66236,52259],{"class":238},[228,66238,51459],{"class":51415},[228,66240,51462],{"class":2077},[228,66242,284],{"class":238},[228,66244,51467],{"class":343},[228,66246,51422],{"class":238},[228,66248,66249,66251,66253,66255,66257,66259,66261,66263,66265],{"class":230,"line":1328},[228,66250,52259],{"class":238},[228,66252,51459],{"class":51415},[228,66254,15035],{"class":2077},[228,66256,284],{"class":238},[228,66258,51506],{"class":343},[228,66260,51486],{"class":2077},[228,66262,284],{"class":238},[228,66264,51513],{"class":343},[228,66266,51422],{"class":238},[228,66268,66269,66271,66273,66275,66277],{"class":230,"line":1334},[228,66270,52259],{"class":238},[228,66272,51522],{"class":51415},[228,66274,51525],{"class":238},[228,66276,51522],{"class":51415},[228,66278,51422],{"class":238},[228,66280,66281,66283,66285],{"class":230,"line":1425},[228,66282,52259],{"class":238},[228,66284,5241],{"class":51415},[228,66286,51422],{"class":238},[228,66288,66289,66292],{"class":230,"line":1431},[228,66290,66291],{"class":2077},"    .father",[228,66293,15687],{"class":238},[228,66295,66296,66298,66300,66302,66304],{"class":230,"line":1443},[228,66297,54886],{"class":287},[228,66299,51552],{"class":238},[228,66301,65189],{"class":287},[228,66303,51607],{"class":234},[228,66305,1404],{"class":238},[228,66307,66308,66310,66312,66314,66316],{"class":230,"line":1726},[228,66309,54900],{"class":287},[228,66311,51552],{"class":238},[228,66313,65189],{"class":287},[228,66315,51607],{"class":234},[228,66317,1404],{"class":238},[228,66319,66320,66322,66324,66326],{"class":230,"line":1731},[228,66321,54999],{"class":287},[228,66323,51552],{"class":238},[228,66325,51760],{"class":287},[228,66327,1404],{"class":238},[228,66329,66330],{"class":230,"line":1737},[228,66331,2301],{"class":238},[228,66333,66334],{"class":230,"line":1742},[228,66335,2514],{"emptyLinePlaceholder":157},[228,66337,66338,66341],{"class":230,"line":1756},[228,66339,66340],{"class":2077},"    .son",[228,66342,15687],{"class":238},[228,66344,66345,66347,66349,66351,66353],{"class":230,"line":1761},[228,66346,54886],{"class":287},[228,66348,51552],{"class":238},[228,66350,1836],{"class":287},[228,66352,51607],{"class":234},[228,66354,1404],{"class":238},[228,66356,66357,66359,66361,66363,66365],{"class":230,"line":1767},[228,66358,54900],{"class":287},[228,66360,51552],{"class":238},[228,66362,1836],{"class":287},[228,66364,51607],{"class":234},[228,66366,1404],{"class":238},[228,66368,66369,66371,66373,66375],{"class":230,"line":1788},[228,66370,54999],{"class":287},[228,66372,51552],{"class":238},[228,66374,55004],{"class":287},[228,66376,1404],{"class":238},[228,66378,66379],{"class":230,"line":1793},[228,66380,2301],{"class":238},[228,66382,66383,66385,66387],{"class":230,"line":1807},[228,66384,52532],{"class":238},[228,66386,5241],{"class":51415},[228,66388,51422],{"class":238},[228,66390,66391,66393,66395],{"class":230,"line":1812},[228,66392,51900],{"class":238},[228,66394,51449],{"class":51415},[228,66396,51422],{"class":238},[228,66398,66399],{"class":230,"line":1841},[228,66400,2514],{"emptyLinePlaceholder":157},[228,66402,66403,66405,66407],{"class":230,"line":1846},[228,66404,1148],{"class":238},[228,66406,51915],{"class":51415},[228,66408,51422],{"class":238},[228,66410,66411,66413,66415,66417,66419,66422],{"class":230,"line":1863},[228,66412,52259],{"class":238},[228,66414,51726],{"class":51415},[228,66416,53601],{"class":2077},[228,66418,284],{"class":238},[228,66420,66421],{"class":343},"\"father\"",[228,66423,51422],{"class":238},[228,66425,66426,66428,66430,66432,66434,66437,66439,66441],{"class":230,"line":1868},[228,66427,51456],{"class":238},[228,66429,51726],{"class":51415},[228,66431,53601],{"class":2077},[228,66433,284],{"class":238},[228,66435,66436],{"class":343},"\"son\"",[228,66438,55429],{"class":238},[228,66440,51726],{"class":51415},[228,66442,51422],{"class":238},[228,66444,66445,66447,66449],{"class":230,"line":1873},[228,66446,52532],{"class":238},[228,66448,51726],{"class":51415},[228,66450,51422],{"class":238},[228,66452,66453,66455,66457],{"class":230,"line":1878},[228,66454,52259],{"class":238},[228,66456,51928],{"class":51415},[228,66458,51422],{"class":238},[228,66460,66461,66463,66466,66468,66470,66472,66474,66477],{"class":230,"line":1892},[228,66462,11336],{"class":234},[228,66464,66465],{"class":287}," fa",[228,66467,13679],{"class":234},[228,66469,54511],{"class":238},[228,66471,54514],{"class":2077},[228,66473,239],{"class":238},[228,66475,66476],{"class":343},"'.father'",[228,66478,245],{"class":238},[228,66480,66481,66483,66486,66488,66490,66492,66494,66497],{"class":230,"line":1897},[228,66482,11336],{"class":234},[228,66484,66485],{"class":287}," son",[228,66487,13679],{"class":234},[228,66489,54511],{"class":238},[228,66491,54514],{"class":2077},[228,66493,239],{"class":238},[228,66495,66496],{"class":343},"'.son'",[228,66498,245],{"class":238},[228,66500,66501,66503,66505,66507,66509,66511,66513],{"class":230,"line":2691},[228,66502,52522],{"class":238},[228,66504,57928],{"class":2077},[228,66506,239],{"class":238},[228,66508,57933],{"class":343},[228,66510,12550],{"class":238},[228,66512,54564],{"class":234},[228,66514,54567],{"class":238},[228,66516,66517,66519,66521,66524],{"class":230,"line":2705},[228,66518,59040],{"class":2077},[228,66520,239],{"class":238},[228,66522,66523],{"class":343},"'woshiu1'",[228,66525,245],{"class":238},[228,66527,66528,66530,66532],{"class":230,"line":2713},[228,66529,54650],{"class":238},[228,66531,1476],{"class":287},[228,66533,245],{"class":238},[228,66535,66536,66539,66541,66543,66545,66547,66549],{"class":230,"line":2718},[228,66537,66538],{"class":238},"    fa.",[228,66540,57928],{"class":2077},[228,66542,239],{"class":238},[228,66544,57933],{"class":343},[228,66546,12550],{"class":238},[228,66548,54564],{"class":234},[228,66550,54567],{"class":238},[228,66552,66553,66555,66557,66560],{"class":230,"line":2724},[228,66554,59040],{"class":2077},[228,66556,239],{"class":238},[228,66558,66559],{"class":343},"'1'",[228,66561,245],{"class":238},[228,66563,66564,66566,66568],{"class":230,"line":2730},[228,66565,54650],{"class":238},[228,66567,1476],{"class":287},[228,66569,245],{"class":238},[228,66571,66572,66575,66577,66579,66581,66583,66585],{"class":230,"line":2735},[228,66573,66574],{"class":238},"    son.",[228,66576,57928],{"class":2077},[228,66578,239],{"class":238},[228,66580,57933],{"class":343},[228,66582,12550],{"class":238},[228,66584,54564],{"class":234},[228,66586,54567],{"class":238},[228,66588,66589,66591,66593,66596],{"class":230,"line":8063},[228,66590,59040],{"class":2077},[228,66592,239],{"class":238},[228,66594,66595],{"class":343},"'2'",[228,66597,245],{"class":238},[228,66599,66600,66602,66604],{"class":230,"line":8087},[228,66601,54650],{"class":238},[228,66603,1476],{"class":287},[228,66605,245],{"class":238},[228,66607,66608,66610,66612],{"class":230,"line":8092},[228,66609,52532],{"class":238},[228,66611,51928],{"class":51415},[228,66613,51422],{"class":238},[228,66615,66616,66618,66620],{"class":230,"line":8098},[228,66617,51900],{"class":238},[228,66619,51915],{"class":51415},[228,66621,51422],{"class":238},[228,66623,66624],{"class":230,"line":8125},[228,66625,2514],{"emptyLinePlaceholder":157},[228,66627,66628,66630,66632],{"class":230,"line":8130},[228,66629,51900],{"class":238},[228,66631,50750],{"class":51415},[228,66633,51422],{"class":238},[19,66635,66636],{},[1576,66637],{"alt":141,"src":66638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,66640,66641],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22113,66643,66645],{"id":66644},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,66647,66648],{},[1576,66649],{"alt":141,"src":66650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,66652,66653],{},"反着来",[19,66655,66656],{},"注意是同名事件，比如都是‘click’",[22113,66658,66660],{"id":66659},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,66662,66663],{},[1576,66664],{"alt":141,"src":66665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22113,66667,66669],{"id":66668},"_3314-解绑事件","3.3.1.4 解绑事件",[19,66671,66672],{},[1576,66673],{"alt":141,"src":66674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,66676,66677],{},[1576,66678],{"alt":141,"src":66679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22113,66681,66683],{"id":66682},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[183,66685,66686],{},[186,66687,66688],{},"事件类型的区别",[19,66690,66691],{},[1576,66692],{"alt":141,"src":66693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,66695,66696],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[183,66698,66699],{"start":142},[186,66700,66701],{},"注册事件的区别",[19,66703,66704],{},[1576,66705],{"alt":141,"src":66706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22113,66708,66710],{"id":66709},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,66712,66713],{},[1576,66714],{"alt":141,"src":66715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,66717,66718],{},[1576,66719],{"alt":141,"src":66720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[220,66722,66724],{"className":53182,"code":66723,"language":53184,"meta":141,"style":141},"\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",[30,66725,66726,66734,66751,66774,66782,66787,66792,66797,66801,66809,66817],{"__ignoreMap":141},[228,66727,66728,66730,66732],{"class":230,"line":231},[228,66729,1148],{"class":238},[228,66731,51915],{"class":51415},[228,66733,51422],{"class":238},[228,66735,66736,66738,66741,66744,66746,66749],{"class":230,"line":142},[228,66737,52259],{"class":238},[228,66739,66740],{"class":51415},"form",[228,66742,66743],{"class":2077}," action",[228,66745,284],{"class":238},[228,66747,66748],{"class":343},"\"http:\u002F\u002Fwww.itcast.cn\"",[228,66750,51422],{"class":238},[228,66752,66753,66755,66757,66759,66761,66764,66767,66769,66772],{"class":230,"line":1293},[228,66754,51456],{"class":238},[228,66756,53936],{"class":51415},[228,66758,53939],{"class":2077},[228,66760,284],{"class":238},[228,66762,66763],{"class":343},"\"submit\"",[228,66765,66766],{"class":2077}," value",[228,66768,284],{"class":238},[228,66770,66771],{"class":343},"\"免费注册\"",[228,66773,51422],{"class":238},[228,66775,66776,66778,66780],{"class":230,"line":1308},[228,66777,51456],{"class":238},[228,66779,51928],{"class":51415},[228,66781,51422],{"class":238},[228,66783,66784],{"class":230,"line":1314},[228,66785,66786],{"class":238},"      const form = document.querySelector('form')\n",[228,66788,66789],{"class":230,"line":1328},[228,66790,66791],{"class":238},"      form.addEventListener('submit', function (e) {\n",[228,66793,66794],{"class":230,"line":1334},[228,66795,66796],{"class":238},"        e.preventDefault()\n",[228,66798,66799],{"class":230,"line":1425},[228,66800,64930],{"class":238},[228,66802,66803,66805,66807],{"class":230,"line":1431},[228,66804,51891],{"class":238},[228,66806,51928],{"class":51415},[228,66808,51422],{"class":238},[228,66810,66811,66813,66815],{"class":230,"line":1443},[228,66812,52532],{"class":238},[228,66814,66740],{"class":51415},[228,66816,51422],{"class":238},[228,66818,66819,66821,66823],{"class":230,"line":1726},[228,66820,51900],{"class":238},[228,66822,51915],{"class":51415},[228,66824,51422],{"class":238},[19,66826,66827],{},"点击不在跳转！！！",[200,66829,66831],{"id":66830},"_332-事件委托","3.3.2 事件委托",[19,66833,66834],{},[1576,66835],{"alt":141,"src":66836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[220,66838,66840],{"className":50748,"code":66839,"language":50750,"meta":141,"style":141},"\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",[30,66841,66842,66852,66866,66870,66878,66892,66912,66924,66932,66936,66944,66952,66964,66976,66988,67000,67012,67025,67033,67041,67046,67065,67086,67091,67096,67101,67106,67115,67119,67129,67133,67138,67143,67157,67167,67171,67175,67183,67191,67195],{"__ignoreMap":141},[228,66843,66844,66846,66848,66850],{"class":230,"line":231},[228,66845,51412],{"class":238},[228,66847,51416],{"class":51415},[228,66849,51419],{"class":2077},[228,66851,51422],{"class":238},[228,66853,66854,66856,66858,66860,66862,66864],{"class":230,"line":142},[228,66855,1148],{"class":238},[228,66857,50750],{"class":51415},[228,66859,51431],{"class":2077},[228,66861,284],{"class":238},[228,66863,51436],{"class":343},[228,66865,51422],{"class":238},[228,66867,66868],{"class":230,"line":1293},[228,66869,2514],{"emptyLinePlaceholder":157},[228,66871,66872,66874,66876],{"class":230,"line":1308},[228,66873,1148],{"class":238},[228,66875,51449],{"class":51415},[228,66877,51422],{"class":238},[228,66879,66880,66882,66884,66886,66888,66890],{"class":230,"line":1314},[228,66881,52259],{"class":238},[228,66883,51459],{"class":51415},[228,66885,51462],{"class":2077},[228,66887,284],{"class":238},[228,66889,51467],{"class":343},[228,66891,51422],{"class":238},[228,66893,66894,66896,66898,66900,66902,66904,66906,66908,66910],{"class":230,"line":1328},[228,66895,52259],{"class":238},[228,66897,51459],{"class":51415},[228,66899,15035],{"class":2077},[228,66901,284],{"class":238},[228,66903,51506],{"class":343},[228,66905,51486],{"class":2077},[228,66907,284],{"class":238},[228,66909,51513],{"class":343},[228,66911,51422],{"class":238},[228,66913,66914,66916,66918,66920,66922],{"class":230,"line":1334},[228,66915,52259],{"class":238},[228,66917,51522],{"class":51415},[228,66919,51525],{"class":238},[228,66921,51522],{"class":51415},[228,66923,51422],{"class":238},[228,66925,66926,66928,66930],{"class":230,"line":1425},[228,66927,51900],{"class":238},[228,66929,51449],{"class":51415},[228,66931,51422],{"class":238},[228,66933,66934],{"class":230,"line":1431},[228,66935,2514],{"emptyLinePlaceholder":157},[228,66937,66938,66940,66942],{"class":230,"line":1443},[228,66939,1148],{"class":238},[228,66941,51915],{"class":51415},[228,66943,51422],{"class":238},[228,66945,66946,66948,66950],{"class":230,"line":1726},[228,66947,52259],{"class":238},[228,66949,1245],{"class":51415},[228,66951,51422],{"class":238},[228,66953,66954,66956,66958,66960,66962],{"class":230,"line":1731},[228,66955,51456],{"class":238},[228,66957,186],{"class":51415},[228,66959,54081],{"class":238},[228,66961,186],{"class":51415},[228,66963,51422],{"class":238},[228,66965,66966,66968,66970,66972,66974],{"class":230,"line":1737},[228,66967,51456],{"class":238},[228,66969,186],{"class":51415},[228,66971,54100],{"class":238},[228,66973,186],{"class":51415},[228,66975,51422],{"class":238},[228,66977,66978,66980,66982,66984,66986],{"class":230,"line":1742},[228,66979,51456],{"class":238},[228,66981,186],{"class":51415},[228,66983,54119],{"class":238},[228,66985,186],{"class":51415},[228,66987,51422],{"class":238},[228,66989,66990,66992,66994,66996,66998],{"class":230,"line":1756},[228,66991,51456],{"class":238},[228,66993,186],{"class":51415},[228,66995,54138],{"class":238},[228,66997,186],{"class":51415},[228,66999,51422],{"class":238},[228,67001,67002,67004,67006,67008,67010],{"class":230,"line":1761},[228,67003,51456],{"class":238},[228,67005,186],{"class":51415},[228,67007,54157],{"class":238},[228,67009,186],{"class":51415},[228,67011,51422],{"class":238},[228,67013,67014,67016,67018,67021,67023],{"class":230,"line":1767},[228,67015,51456],{"class":238},[228,67017,19],{"class":51415},[228,67019,67020],{"class":238},">我不需要变色\u003C\u002F",[228,67022,19],{"class":51415},[228,67024,51422],{"class":238},[228,67026,67027,67029,67031],{"class":230,"line":1788},[228,67028,52532],{"class":238},[228,67030,1245],{"class":51415},[228,67032,51422],{"class":238},[228,67034,67035,67037,67039],{"class":230,"line":1793},[228,67036,52259],{"class":238},[228,67038,51928],{"class":51415},[228,67040,51422],{"class":238},[228,67042,67043],{"class":230,"line":1807},[228,67044,67045],{"class":297},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[228,67047,67048,67050,67052,67054,67056,67058,67060,67063],{"class":230,"line":1812},[228,67049,11336],{"class":234},[228,67051,61407],{"class":287},[228,67053,13679],{"class":234},[228,67055,54511],{"class":238},[228,67057,54514],{"class":2077},[228,67059,239],{"class":238},[228,67061,67062],{"class":343},"'ul'",[228,67064,245],{"class":238},[228,67066,67067,67070,67072,67074,67076,67078,67080,67082,67084],{"class":230,"line":1841},[228,67068,67069],{"class":238},"    ul.",[228,67071,57928],{"class":2077},[228,67073,239],{"class":238},[228,67075,57933],{"class":343},[228,67077,12550],{"class":238},[228,67079,54564],{"class":234},[228,67081,1772],{"class":238},[228,67083,313],{"class":5331},[228,67085,12557],{"class":238},[228,67087,67088],{"class":230,"line":1846},[228,67089,67090],{"class":297},"      \u002F\u002F alert(1)\n",[228,67092,67093],{"class":230,"line":1863},[228,67094,67095],{"class":297},"      \u002F\u002F e.target就是我们点击的对象\n",[228,67097,67098],{"class":230,"line":1868},[228,67099,67100],{"class":297},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[228,67102,67103],{"class":230,"line":1873},[228,67104,67105],{"class":297},"      \u002F\u002F e.target.style.color = 'red'\n",[228,67107,67108,67110,67112],{"class":230,"line":1878},[228,67109,58359],{"class":238},[228,67111,58362],{"class":2077},[228,67113,67114],{"class":238},"(e)\n",[228,67116,67117],{"class":230,"line":1892},[228,67118,2514],{"emptyLinePlaceholder":157},[228,67120,67121,67123,67126],{"class":230,"line":1897},[228,67122,58359],{"class":238},[228,67124,67125],{"class":2077},"dir",[228,67127,67128],{"class":238},"(e.target)\n",[228,67130,67131],{"class":230,"line":2691},[228,67132,2514],{"emptyLinePlaceholder":157},[228,67134,67135],{"class":230,"line":2705},[228,67136,67137],{"class":297},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[228,67139,67140],{"class":230,"line":2713},[228,67141,67142],{"class":297},"      \u002F\u002F 通过tagName来进行判断\n",[228,67144,67145,67147,67150,67152,67155],{"class":230,"line":2718},[228,67146,54595],{"class":234},[228,67148,67149],{"class":238}," (e.target.tagName ",[228,67151,54601],{"class":234},[228,67153,67154],{"class":343}," 'LI'",[228,67156,12557],{"class":238},[228,67158,67159,67162,67164],{"class":230,"line":2724},[228,67160,67161],{"class":238},"        e.target.style.color ",[228,67163,284],{"class":234},[228,67165,67166],{"class":343}," 'red'\n",[228,67168,67169],{"class":230,"line":2730},[228,67170,52513],{"class":238},[228,67172,67173],{"class":230,"line":2735},[228,67174,33576],{"class":238},[228,67176,67177,67179,67181],{"class":230,"line":8063},[228,67178,52532],{"class":238},[228,67180,51928],{"class":51415},[228,67182,51422],{"class":238},[228,67184,67185,67187,67189],{"class":230,"line":8087},[228,67186,51900],{"class":238},[228,67188,51915],{"class":51415},[228,67190,51422],{"class":238},[228,67192,67193],{"class":230,"line":8092},[228,67194,2514],{"emptyLinePlaceholder":157},[228,67196,67197,67199,67201],{"class":230,"line":8098},[228,67198,51900],{"class":238},[228,67200,50750],{"class":51415},[228,67202,51422],{"class":238},[19,67204,67205],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,67207,67208],{},"if(e.target.ragName==='P') {}",[19,67210,67211],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,67213,67214],{},"通过事件委托的方式实现tab栏切换改造：",[19,67216,67217],{},"一定要记住自定义属性！！！！！！",[19,67219,67220],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,67222,67223],{},"id是自定义的属性名",[19,67225,67226],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[220,67228,67230],{"className":50748,"code":67229,"language":50750,"meta":141,"style":141},"\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",[30,67231,67232,67242,67256,67260,67268,67282,67302,67322,67334,67342,67348,67358,67368,67372,67376,67382,67394,67406,67418,67434,67438,67442,67448,67460,67472,67484,67494,67504,67508,67512,67520,67532,67542,67554,67558,67562,67570,67580,67590,67600,67604,67608,67618,67632,67644,67648,67652,67664,67674,67690,67700,67704,67708,67722,67732,67742,67746,67750,67756,67770,67774,67778,67786,67796,67800,67804,67813,67823,67827,67835,67843,67847,67855,67869,67883,67895,67903,67942,67974,68006,68038,68070,68078,68086,68100,68134,68168,68202,68236,68270,68278,68286,68294,68299,68304,68323,68328,68348,68356,68361,68374,68395,68408,68412,68417,68422,68435,68455,68483,68487,68491,68495,68503,68511,68515],{"__ignoreMap":141},[228,67233,67234,67236,67238,67240],{"class":230,"line":231},[228,67235,51412],{"class":238},[228,67237,51416],{"class":51415},[228,67239,51419],{"class":2077},[228,67241,51422],{"class":238},[228,67243,67244,67246,67248,67250,67252,67254],{"class":230,"line":142},[228,67245,1148],{"class":238},[228,67247,50750],{"class":51415},[228,67249,51431],{"class":2077},[228,67251,284],{"class":238},[228,67253,51436],{"class":343},[228,67255,51422],{"class":238},[228,67257,67258],{"class":230,"line":1293},[228,67259,2514],{"emptyLinePlaceholder":157},[228,67261,67262,67264,67266],{"class":230,"line":1308},[228,67263,1148],{"class":238},[228,67265,51449],{"class":51415},[228,67267,51422],{"class":238},[228,67269,67270,67272,67274,67276,67278,67280],{"class":230,"line":1314},[228,67271,52259],{"class":238},[228,67273,51459],{"class":51415},[228,67275,51462],{"class":2077},[228,67277,284],{"class":238},[228,67279,51467],{"class":343},[228,67281,59242],{"class":238},[228,67283,67284,67286,67288,67290,67292,67294,67296,67298,67300],{"class":230,"line":1328},[228,67285,52259],{"class":238},[228,67287,51459],{"class":51415},[228,67289,51478],{"class":2077},[228,67291,284],{"class":238},[228,67293,51483],{"class":343},[228,67295,51486],{"class":2077},[228,67297,284],{"class":238},[228,67299,51491],{"class":343},[228,67301,59242],{"class":238},[228,67303,67304,67306,67308,67310,67312,67314,67316,67318,67320],{"class":230,"line":1334},[228,67305,52259],{"class":238},[228,67307,51459],{"class":51415},[228,67309,15035],{"class":2077},[228,67311,284],{"class":238},[228,67313,51506],{"class":343},[228,67315,51486],{"class":2077},[228,67317,284],{"class":238},[228,67319,51513],{"class":343},[228,67321,59242],{"class":238},[228,67323,67324,67326,67328,67330,67332],{"class":230,"line":1425},[228,67325,52259],{"class":238},[228,67327,51522],{"class":51415},[228,67329,63740],{"class":238},[228,67331,51522],{"class":51415},[228,67333,51422],{"class":238},[228,67335,67336,67338,67340],{"class":230,"line":1431},[228,67337,52259],{"class":238},[228,67339,5241],{"class":51415},[228,67341,51422],{"class":238},[228,67343,67344,67346],{"class":230,"line":1443},[228,67345,6518],{"class":51415},[228,67347,15687],{"class":238},[228,67349,67350,67352,67354,67356],{"class":230,"line":1726},[228,67351,54821],{"class":287},[228,67353,51552],{"class":238},[228,67355,430],{"class":287},[228,67357,1404],{"class":238},[228,67359,67360,67362,67364,67366],{"class":230,"line":1731},[228,67361,54810],{"class":287},[228,67363,51552],{"class":238},[228,67365,430],{"class":287},[228,67367,1404],{"class":238},[228,67369,67370],{"class":230,"line":1737},[228,67371,2301],{"class":238},[228,67373,67374],{"class":230,"line":1742},[228,67375,2514],{"emptyLinePlaceholder":157},[228,67377,67378,67380],{"class":230,"line":1756},[228,67379,63791],{"class":2077},[228,67381,15687],{"class":238},[228,67383,67384,67386,67388,67390,67392],{"class":230,"line":1761},[228,67385,54886],{"class":287},[228,67387,51552],{"class":238},[228,67389,63802],{"class":287},[228,67391,51607],{"class":234},[228,67393,1404],{"class":238},[228,67395,67396,67398,67400,67402,67404],{"class":230,"line":1767},[228,67397,54900],{"class":287},[228,67399,51552],{"class":238},[228,67401,63815],{"class":287},[228,67403,51607],{"class":234},[228,67405,1404],{"class":238},[228,67407,67408,67410,67412,67414,67416],{"class":230,"line":1788},[228,67409,54821],{"class":287},[228,67411,51552],{"class":238},[228,67413,938],{"class":287},[228,67415,51607],{"class":234},[228,67417,1404],{"class":238},[228,67419,67420,67422,67424,67426,67428,67430,67432],{"class":230,"line":1793},[228,67421,62092],{"class":287},[228,67423,51552],{"class":238},[228,67425,456],{"class":287},[228,67427,51607],{"class":234},[228,67429,51636],{"class":287},[228,67431,62359],{"class":287},[228,67433,1404],{"class":238},[228,67435,67436],{"class":230,"line":1807},[228,67437,2301],{"class":238},[228,67439,67440],{"class":230,"line":1812},[228,67441,2514],{"emptyLinePlaceholder":157},[228,67443,67444,67446],{"class":230,"line":1841},[228,67445,63860],{"class":2077},[228,67447,15687],{"class":238},[228,67449,67450,67452,67454,67456,67458],{"class":230,"line":1846},[228,67451,54886],{"class":287},[228,67453,51552],{"class":238},[228,67455,549],{"class":287},[228,67457,566],{"class":234},[228,67459,1404],{"class":238},[228,67461,67462,67464,67466,67468,67470],{"class":230,"line":1863},[228,67463,54900],{"class":287},[228,67465,51552],{"class":238},[228,67467,1145],{"class":287},[228,67469,51607],{"class":234},[228,67471,1404],{"class":238},[228,67473,67474,67476,67478,67480,67482],{"class":230,"line":1868},[228,67475,57474],{"class":287},[228,67477,51552],{"class":238},[228,67479,1145],{"class":287},[228,67481,51607],{"class":234},[228,67483,1404],{"class":238},[228,67485,67486,67488,67490,67492],{"class":230,"line":1873},[228,67487,55124],{"class":287},[228,67489,51552],{"class":238},[228,67491,51592],{"class":287},[228,67493,1404],{"class":238},[228,67495,67496,67498,67500,67502],{"class":230,"line":1878},[228,67497,55135],{"class":287},[228,67499,51552],{"class":238},[228,67501,51783],{"class":287},[228,67503,1404],{"class":238},[228,67505,67506],{"class":230,"line":1892},[228,67507,2301],{"class":238},[228,67509,67510],{"class":230,"line":1897},[228,67511,2514],{"emptyLinePlaceholder":157},[228,67513,67514,67516,67518],{"class":230,"line":2691},[228,67515,63860],{"class":2077},[228,67517,63933],{"class":51415},[228,67519,15687],{"class":238},[228,67521,67522,67524,67526,67528,67530],{"class":230,"line":2705},[228,67523,55037],{"class":287},[228,67525,51552],{"class":238},[228,67527,1038],{"class":287},[228,67529,51607],{"class":234},[228,67531,1404],{"class":238},[228,67533,67534,67536,67538,67540],{"class":230,"line":2713},[228,67535,62449],{"class":287},[228,67537,51552],{"class":238},[228,67539,63956],{"class":287},[228,67541,1404],{"class":238},[228,67543,67544,67546,67548,67550,67552],{"class":230,"line":2718},[228,67545,62115],{"class":287},[228,67547,51552],{"class":238},[228,67549,938],{"class":287},[228,67551,51607],{"class":234},[228,67553,1404],{"class":238},[228,67555,67556],{"class":230,"line":2724},[228,67557,2301],{"class":238},[228,67559,67560],{"class":230,"line":2730},[228,67561,2514],{"emptyLinePlaceholder":157},[228,67563,67564,67566,67568],{"class":230,"line":2735},[228,67565,63860],{"class":2077},[228,67567,61407],{"class":51415},[228,67569,15687],{"class":238},[228,67571,67572,67574,67576,67578],{"class":230,"line":8063},[228,67573,54847],{"class":287},[228,67575,51552],{"class":238},[228,67577,54852],{"class":287},[228,67579,1404],{"class":238},[228,67581,67582,67584,67586,67588],{"class":230,"line":8087},[228,67583,55124],{"class":287},[228,67585,51552],{"class":238},[228,67587,51592],{"class":287},[228,67589,1404],{"class":238},[228,67591,67592,67594,67596,67598],{"class":230,"line":8092},[228,67593,55135],{"class":287},[228,67595,51552],{"class":238},[228,67597,51695],{"class":287},[228,67599,1404],{"class":238},[228,67601,67602],{"class":230,"line":8098},[228,67603,2301],{"class":238},[228,67605,67606],{"class":230,"line":8125},[228,67607,2514],{"emptyLinePlaceholder":157},[228,67609,67610,67612,67614,67616],{"class":230,"line":8130},[228,67611,63860],{"class":2077},[228,67613,61407],{"class":51415},[228,67615,55190],{"class":51415},[228,67617,15687],{"class":238},[228,67619,67620,67622,67624,67626,67628,67630],{"class":230,"line":8136},[228,67621,54821],{"class":287},[228,67623,51552],{"class":238},[228,67625,430],{"class":287},[228,67627,9065],{"class":287},[228,67629,51607],{"class":234},[228,67631,1404],{"class":238},[228,67633,67634,67636,67638,67640,67642],{"class":230,"line":8148},[228,67635,55037],{"class":287},[228,67637,51552],{"class":238},[228,67639,787],{"class":287},[228,67641,51607],{"class":234},[228,67643,1404],{"class":238},[228,67645,67646],{"class":230,"line":8160},[228,67647,2301],{"class":238},[228,67649,67650],{"class":230,"line":8172},[228,67651,2514],{"emptyLinePlaceholder":157},[228,67653,67654,67656,67658,67660,67662],{"class":230,"line":9831},[228,67655,63860],{"class":2077},[228,67657,61407],{"class":51415},[228,67659,55190],{"class":51415},[228,67661,1512],{"class":51415},[228,67663,15687],{"class":238},[228,67665,67666,67668,67670,67672],{"class":230,"line":9856},[228,67667,64085],{"class":287},[228,67669,51552],{"class":238},[228,67671,54852],{"class":287},[228,67673,1404],{"class":238},[228,67675,67676,67678,67680,67682,67684,67686,67688],{"class":230,"line":9879},[228,67677,62347],{"class":287},[228,67679,51552],{"class":238},[228,67681,316],{"class":287},[228,67683,51607],{"class":234},[228,67685,51636],{"class":287},[228,67687,64106],{"class":287},[228,67689,1404],{"class":238},[228,67691,67692,67694,67696,67698],{"class":230,"line":9903},[228,67693,57531],{"class":287},[228,67695,51552],{"class":238},[228,67697,62484],{"class":287},[228,67699,1404],{"class":238},[228,67701,67702],{"class":230,"line":9908},[228,67703,2301],{"class":238},[228,67705,67706],{"class":230,"line":9913},[228,67707,2514],{"emptyLinePlaceholder":157},[228,67709,67710,67712,67714,67716,67718,67720],{"class":230,"line":9918},[228,67711,63860],{"class":2077},[228,67713,61407],{"class":51415},[228,67715,55190],{"class":51415},[228,67717,1512],{"class":51415},[228,67719,64139],{"class":2077},[228,67721,15687],{"class":238},[228,67723,67724,67726,67728,67730],{"class":230,"line":9927},[228,67725,61906],{"class":287},[228,67727,51552],{"class":238},[228,67729,64150],{"class":287},[228,67731,1404],{"class":238},[228,67733,67734,67736,67738,67740],{"class":230,"line":9932},[228,67735,57531],{"class":287},[228,67737,51552],{"class":238},[228,67739,64150],{"class":287},[228,67741,1404],{"class":238},[228,67743,67744],{"class":230,"line":9938},[228,67745,2301],{"class":238},[228,67747,67748],{"class":230,"line":9959},[228,67749,2514],{"emptyLinePlaceholder":157},[228,67751,67752,67754],{"class":230,"line":9965},[228,67753,64175],{"class":2077},[228,67755,15687],{"class":238},[228,67757,67758,67760,67762,67764,67766,67768],{"class":230,"line":9979},[228,67759,54810],{"class":287},[228,67761,51552],{"class":238},[228,67763,430],{"class":287},[228,67765,64188],{"class":287},[228,67767,51607],{"class":234},[228,67769,1404],{"class":238},[228,67771,67772],{"class":230,"line":9985},[228,67773,2301],{"class":238},[228,67775,67776],{"class":230,"line":10012},[228,67777,2514],{"emptyLinePlaceholder":157},[228,67779,67780,67782,67784],{"class":230,"line":10021},[228,67781,64175],{"class":2077},[228,67783,62289],{"class":2077},[228,67785,15687],{"class":238},[228,67787,67788,67790,67792,67794],{"class":230,"line":10027},[228,67789,55124],{"class":287},[228,67791,51552],{"class":238},[228,67793,54852],{"class":287},[228,67795,1404],{"class":238},[228,67797,67798],{"class":230,"line":10035},[228,67799,2301],{"class":238},[228,67801,67802],{"class":230,"line":10040},[228,67803,2514],{"emptyLinePlaceholder":157},[228,67805,67806,67808,67811],{"class":230,"line":16719},[228,67807,64175],{"class":2077},[228,67809,67810],{"class":2077}," .active",[228,67812,15687],{"class":238},[228,67814,67815,67817,67819,67821],{"class":230,"line":16725},[228,67816,55124],{"class":287},[228,67818,51552],{"class":238},[228,67820,60984],{"class":287},[228,67822,1404],{"class":238},[228,67824,67825],{"class":230,"line":16748},[228,67826,2301],{"class":238},[228,67828,67829,67831,67833],{"class":230,"line":16754},[228,67830,52532],{"class":238},[228,67832,5241],{"class":51415},[228,67834,51422],{"class":238},[228,67836,67837,67839,67841],{"class":230,"line":16777},[228,67838,51900],{"class":238},[228,67840,51449],{"class":51415},[228,67842,51422],{"class":238},[228,67844,67845],{"class":230,"line":16791},[228,67846,2514],{"emptyLinePlaceholder":157},[228,67848,67849,67851,67853],{"class":230,"line":16811},[228,67850,1148],{"class":238},[228,67852,51915],{"class":51415},[228,67854,51422],{"class":238},[228,67856,67857,67859,67861,67863,67865,67867],{"class":230,"line":16817},[228,67858,52259],{"class":238},[228,67860,51726],{"class":51415},[228,67862,53601],{"class":2077},[228,67864,284],{"class":238},[228,67866,64290],{"class":343},[228,67868,51422],{"class":238},[228,67870,67871,67873,67875,67877,67879,67881],{"class":230,"line":16828},[228,67872,51456],{"class":238},[228,67874,51726],{"class":51415},[228,67876,53601],{"class":2077},[228,67878,284],{"class":238},[228,67880,64305],{"class":343},[228,67882,51422],{"class":238},[228,67884,67885,67887,67889,67891,67893],{"class":230,"line":16851},[228,67886,55349],{"class":238},[228,67888,200],{"class":51415},[228,67890,64316],{"class":238},[228,67892,200],{"class":51415},[228,67894,51422],{"class":238},[228,67896,67897,67899,67901],{"class":230,"line":16873},[228,67898,55349],{"class":238},[228,67900,1245],{"class":51415},[228,67902,51422],{"class":238},[228,67904,67905,67907,67909,67911,67913,67915,67917,67919,67921,67923,67925,67927,67929,67932,67934,67936,67938,67940],{"class":230,"line":16878},[228,67906,55417],{"class":238},[228,67908,186],{"class":51415},[228,67910,61167],{"class":238},[228,67912,476],{"class":51415},[228,67914,53601],{"class":2077},[228,67916,284],{"class":238},[228,67918,59821],{"class":343},[228,67920,61172],{"class":2077},[228,67922,284],{"class":238},[228,67924,64351],{"class":343},[228,67926,54066],{"class":2077},[228,67928,284],{"class":238},[228,67930,67931],{"class":343},"\"0\"",[228,67933,64354],{"class":238},[228,67935,476],{"class":51415},[228,67937,55429],{"class":238},[228,67939,186],{"class":51415},[228,67941,51422],{"class":238},[228,67943,67944,67946,67948,67950,67952,67954,67956,67958,67960,67962,67964,67966,67968,67970,67972],{"class":230,"line":16884},[228,67945,55417],{"class":238},[228,67947,186],{"class":51415},[228,67949,61167],{"class":238},[228,67951,476],{"class":51415},[228,67953,61172],{"class":2077},[228,67955,284],{"class":238},[228,67957,64351],{"class":343},[228,67959,54066],{"class":2077},[228,67961,284],{"class":238},[228,67963,3792],{"class":343},[228,67965,64381],{"class":238},[228,67967,476],{"class":51415},[228,67969,55429],{"class":238},[228,67971,186],{"class":51415},[228,67973,51422],{"class":238},[228,67975,67976,67978,67980,67982,67984,67986,67988,67990,67992,67994,67996,67998,68000,68002,68004],{"class":230,"line":16898},[228,67977,55417],{"class":238},[228,67979,186],{"class":51415},[228,67981,61167],{"class":238},[228,67983,476],{"class":51415},[228,67985,61172],{"class":2077},[228,67987,284],{"class":238},[228,67989,64351],{"class":343},[228,67991,54066],{"class":2077},[228,67993,284],{"class":238},[228,67995,3815],{"class":343},[228,67997,64408],{"class":238},[228,67999,476],{"class":51415},[228,68001,55429],{"class":238},[228,68003,186],{"class":51415},[228,68005,51422],{"class":238},[228,68007,68008,68010,68012,68014,68016,68018,68020,68022,68024,68026,68028,68030,68032,68034,68036],{"class":230,"line":16911},[228,68009,55417],{"class":238},[228,68011,186],{"class":51415},[228,68013,61167],{"class":238},[228,68015,476],{"class":51415},[228,68017,61172],{"class":2077},[228,68019,284],{"class":238},[228,68021,64351],{"class":343},[228,68023,54066],{"class":2077},[228,68025,284],{"class":238},[228,68027,3828],{"class":343},[228,68029,64435],{"class":238},[228,68031,476],{"class":51415},[228,68033,55429],{"class":238},[228,68035,186],{"class":51415},[228,68037,51422],{"class":238},[228,68039,68040,68042,68044,68046,68048,68050,68052,68054,68056,68058,68060,68062,68064,68066,68068],{"class":230,"line":16916},[228,68041,55417],{"class":238},[228,68043,186],{"class":51415},[228,68045,61167],{"class":238},[228,68047,476],{"class":51415},[228,68049,61172],{"class":2077},[228,68051,284],{"class":238},[228,68053,64351],{"class":343},[228,68055,54066],{"class":2077},[228,68057,284],{"class":238},[228,68059,3841],{"class":343},[228,68061,64462],{"class":238},[228,68063,476],{"class":51415},[228,68065,55429],{"class":238},[228,68067,186],{"class":51415},[228,68069,51422],{"class":238},[228,68071,68072,68074,68076],{"class":230,"line":16930},[228,68073,55522],{"class":238},[228,68075,1245],{"class":51415},[228,68077,51422],{"class":238},[228,68079,68080,68082,68084],{"class":230,"line":16935},[228,68081,51891],{"class":238},[228,68083,51726],{"class":51415},[228,68085,51422],{"class":238},[228,68087,68088,68090,68092,68094,68096,68098],{"class":230,"line":16941},[228,68089,51456],{"class":238},[228,68091,51726],{"class":51415},[228,68093,53601],{"class":2077},[228,68095,284],{"class":238},[228,68097,64499],{"class":343},[228,68099,51422],{"class":238},[228,68101,68102,68104,68106,68108,68110,68112,68114,68116,68118,68120,68122,68124,68126,68128,68130,68132],{"class":230,"line":16946},[228,68103,55349],{"class":238},[228,68105,51726],{"class":51415},[228,68107,53601],{"class":2077},[228,68109,284],{"class":238},[228,68111,64514],{"class":343},[228,68113,61167],{"class":238},[228,68115,1576],{"class":51415},[228,68117,55354],{"class":2077},[228,68119,284],{"class":238},[228,68121,64525],{"class":343},[228,68123,55362],{"class":2077},[228,68125,284],{"class":238},[228,68127,7767],{"class":343},[228,68129,64534],{"class":238},[228,68131,51726],{"class":51415},[228,68133,51422],{"class":238},[228,68135,68136,68138,68140,68142,68144,68146,68148,68150,68152,68154,68156,68158,68160,68162,68164,68166],{"class":230,"line":16960},[228,68137,55349],{"class":238},[228,68139,51726],{"class":51415},[228,68141,53601],{"class":2077},[228,68143,284],{"class":238},[228,68145,62738],{"class":343},[228,68147,61167],{"class":238},[228,68149,1576],{"class":51415},[228,68151,55354],{"class":2077},[228,68153,284],{"class":238},[228,68155,64561],{"class":343},[228,68157,55362],{"class":2077},[228,68159,284],{"class":238},[228,68161,7767],{"class":343},[228,68163,64534],{"class":238},[228,68165,51726],{"class":51415},[228,68167,51422],{"class":238},[228,68169,68170,68172,68174,68176,68178,68180,68182,68184,68186,68188,68190,68192,68194,68196,68198,68200],{"class":230,"line":16965},[228,68171,55349],{"class":238},[228,68173,51726],{"class":51415},[228,68175,53601],{"class":2077},[228,68177,284],{"class":238},[228,68179,62738],{"class":343},[228,68181,61167],{"class":238},[228,68183,1576],{"class":51415},[228,68185,55354],{"class":2077},[228,68187,284],{"class":238},[228,68189,64596],{"class":343},[228,68191,55362],{"class":2077},[228,68193,284],{"class":238},[228,68195,7767],{"class":343},[228,68197,64534],{"class":238},[228,68199,51726],{"class":51415},[228,68201,51422],{"class":238},[228,68203,68204,68206,68208,68210,68212,68214,68216,68218,68220,68222,68224,68226,68228,68230,68232,68234],{"class":230,"line":16970},[228,68205,55349],{"class":238},[228,68207,51726],{"class":51415},[228,68209,53601],{"class":2077},[228,68211,284],{"class":238},[228,68213,62738],{"class":343},[228,68215,61167],{"class":238},[228,68217,1576],{"class":51415},[228,68219,55354],{"class":2077},[228,68221,284],{"class":238},[228,68223,64631],{"class":343},[228,68225,55362],{"class":2077},[228,68227,284],{"class":238},[228,68229,7767],{"class":343},[228,68231,64534],{"class":238},[228,68233,51726],{"class":51415},[228,68235,51422],{"class":238},[228,68237,68238,68240,68242,68244,68246,68248,68250,68252,68254,68256,68258,68260,68262,68264,68266,68268],{"class":230,"line":16984},[228,68239,55349],{"class":238},[228,68241,51726],{"class":51415},[228,68243,53601],{"class":2077},[228,68245,284],{"class":238},[228,68247,62738],{"class":343},[228,68249,61167],{"class":238},[228,68251,1576],{"class":51415},[228,68253,55354],{"class":2077},[228,68255,284],{"class":238},[228,68257,64666],{"class":343},[228,68259,55362],{"class":2077},[228,68261,284],{"class":238},[228,68263,7767],{"class":343},[228,68265,64534],{"class":238},[228,68267,51726],{"class":51415},[228,68269,51422],{"class":238},[228,68271,68272,68274,68276],{"class":230,"line":16996},[228,68273,51891],{"class":238},[228,68275,51726],{"class":51415},[228,68277,51422],{"class":238},[228,68279,68280,68282,68284],{"class":230,"line":17001},[228,68281,52532],{"class":238},[228,68283,51726],{"class":51415},[228,68285,51422],{"class":238},[228,68287,68288,68290,68292],{"class":230,"line":17014},[228,68289,52259],{"class":238},[228,68291,51928],{"class":51415},[228,68293,51422],{"class":238},[228,68295,68296],{"class":230,"line":17019},[228,68297,68298],{"class":297},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[228,68300,68301],{"class":230,"line":17024},[228,68302,68303],{"class":297},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[228,68305,68306,68308,68310,68312,68314,68316,68318,68321],{"class":230,"line":17029},[228,68307,11336],{"class":234},[228,68309,61407],{"class":287},[228,68311,13679],{"class":234},[228,68313,54511],{"class":238},[228,68315,54514],{"class":2077},[228,68317,239],{"class":238},[228,68319,68320],{"class":343},"'.tab-nav ul'",[228,68322,245],{"class":238},[228,68324,68325],{"class":230,"line":17042},[228,68326,68327],{"class":297},"    \u002F\u002F 2.添加事件\n",[228,68329,68330,68332,68334,68336,68338,68340,68342,68344,68346],{"class":230,"line":17047},[228,68331,67069],{"class":238},[228,68333,57928],{"class":2077},[228,68335,239],{"class":238},[228,68337,57933],{"class":343},[228,68339,12550],{"class":238},[228,68341,54564],{"class":234},[228,68343,1772],{"class":238},[228,68345,313],{"class":5331},[228,68347,12557],{"class":238},[228,68349,68350,68352,68354],{"class":230,"line":32748},[228,68351,58359],{"class":238},[228,68353,67125],{"class":2077},[228,68355,67128],{"class":238},[228,68357,68358],{"class":230,"line":32754},[228,68359,68360],{"class":297},"      \u002F\u002Fe.targer是我们点击的对象\n",[228,68362,68363,68365,68367,68369,68372],{"class":230,"line":32760},[228,68364,54595],{"class":234},[228,68366,67149],{"class":238},[228,68368,54601],{"class":234},[228,68370,68371],{"class":343}," 'A'",[228,68373,12557],{"class":238},[228,68375,68376,68378,68380,68382,68385,68387,68389,68391,68393],{"class":230,"line":32766},[228,68377,52040],{"class":238},[228,68379,54514],{"class":2077},[228,68381,239],{"class":238},[228,68383,68384],{"class":343},"'.active'",[228,68386,57118],{"class":238},[228,68388,57121],{"class":2077},[228,68390,239],{"class":238},[228,68392,64829],{"class":343},[228,68394,245],{"class":238},[228,68396,68397,68400,68402,68404,68406],{"class":230,"line":32772},[228,68398,68399],{"class":238},"        e.target.classList.",[228,68401,5449],{"class":2077},[228,68403,239],{"class":238},[228,68405,64829],{"class":343},[228,68407,245],{"class":238},[228,68409,68410],{"class":230,"line":32783},[228,68411,2514],{"emptyLinePlaceholder":157},[228,68413,68414],{"class":230,"line":32789},[228,68415,68416],{"class":297},"        \u002F\u002F 下面大盒子模块\n",[228,68418,68419],{"class":230,"line":32809},[228,68420,68421],{"class":297},"        \u002F\u002F console.log(e.target.dataset.id)\n",[228,68423,68424,68426,68428,68430,68432],{"class":230,"line":32815},[228,68425,61385],{"class":234},[228,68427,3146],{"class":287},[228,68429,13679],{"class":234},[228,68431,45681],{"class":234},[228,68433,68434],{"class":238},"e.target.dataset.id\n",[228,68436,68437,68439,68441,68443,68445,68447,68449,68451,68453],{"class":230,"line":32826},[228,68438,52040],{"class":238},[228,68440,54514],{"class":2077},[228,68442,239],{"class":238},[228,68444,64877],{"class":343},[228,68446,57118],{"class":238},[228,68448,57121],{"class":2077},[228,68450,239],{"class":238},[228,68452,64829],{"class":343},[228,68454,245],{"class":238},[228,68456,68457,68459,68461,68463,68465,68467,68469,68471,68473,68475,68477,68479,68481],{"class":230,"line":32832},[228,68458,52040],{"class":238},[228,68460,54514],{"class":2077},[228,68462,239],{"class":238},[228,68464,64903],{"class":343},[228,68466,679],{"class":238},[228,68468,45681],{"class":234},[228,68470,25234],{"class":287},[228,68472,57147],{"class":343},[228,68474,57118],{"class":238},[228,68476,5449],{"class":2077},[228,68478,239],{"class":238},[228,68480,64829],{"class":343},[228,68482,245],{"class":238},[228,68484,68485],{"class":230,"line":32838},[228,68486,2514],{"emptyLinePlaceholder":157},[228,68488,68489],{"class":230,"line":32844},[228,68490,52513],{"class":238},[228,68492,68493],{"class":230,"line":32850},[228,68494,33576],{"class":238},[228,68496,68497,68499,68501],{"class":230,"line":32856},[228,68498,52532],{"class":238},[228,68500,51928],{"class":51415},[228,68502,51422],{"class":238},[228,68504,68505,68507,68509],{"class":230,"line":32862},[228,68506,51900],{"class":238},[228,68508,51915],{"class":51415},[228,68510,51422],{"class":238},[228,68512,68513],{"class":230,"line":32868},[228,68514,2514],{"emptyLinePlaceholder":157},[228,68516,68517,68519,68521],{"class":230,"line":32888},[228,68518,51900],{"class":238},[228,68520,50750],{"class":51415},[228,68522,51422],{"class":238},[200,68524,68526],{"id":68525},"_333-页面加载事件","3.3.3 页面加载事件",[183,68528,68529],{},[186,68530,68531],{},"load",[19,68533,68534],{},[1576,68535],{"alt":141,"src":68536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,68538,68539],{},"window代表整个窗口，比document还要大",[19,68541,68542],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,68544,68545],{},"img.addEventListener('load', function () {",[19,68547,68548],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,68550,52579],{},[183,68552,68553],{"start":142},[186,68554,68555],{},"DOMContentLoaded",[19,68557,68558],{},[1576,68559],{"alt":141,"src":68560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,68562,68563],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[200,68565,68567],{"id":68566},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,68569,68570],{},[1576,68571],{"alt":141,"src":68572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,68574,68575],{},[1576,68576],{"alt":141,"src":68577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,68579,68580],{},[1576,68581],{"alt":141,"src":68582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,68584,68585],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,68587,68588],{},"获得的是数字型数据，不带单位",[19,68590,68591],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,68593,68594],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,68596,68597],{},"它是通过document.documentElement来获取",[19,68599,68600],{},[1576,68601],{"alt":141,"src":68602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,68604,68605],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[200,68607,68609],{"id":68608},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,68611,68612],{},[1576,68613],{"alt":141,"src":68614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,68616,68617],{},[1576,68618],{"alt":141,"src":68619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[200,68621,68623],{"id":68622},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,68625,68626],{},[1576,68627],{"alt":141,"src":68628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,68630,68631],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,68633,68634],{},[1576,68635],{"alt":141,"src":68636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,68638,68639],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,68641,68642],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,68644,68645],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,68647,68648],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,68650,68651],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,68653,68654],{},[1576,68655],{"alt":141,"src":68656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,68658,68659],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,68661,68662],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,68664,68665],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,68667,68668],{},"e.pageX-box.getBoundingClientRect()",[200,68670,68672],{"id":68671},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,68674,68675],{},[1576,68676],{"alt":141,"src":68677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,68679,68680],{},"这个是相对于视口来说的，它是个方法，不是属性值",[200,68682,68684],{"id":68683},"_338-总结","3.3.8 总结",[19,68686,68687],{},[1576,68688],{"alt":141,"src":68689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,68691,68692],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,68694,68695],{},"修改盒子的宽高只能通过width和height来实现",[200,68697,68699],{"id":68698},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[220,68701,68703],{"className":50748,"code":68702,"language":50750,"meta":141,"style":141},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[30,68704,68705,68710,68715,68720,68725],{"__ignoreMap":141},[228,68706,68707],{"class":230,"line":231},[228,68708,68709],{"class":238},"\u002F* 页面滑动 *\u002F\n",[228,68711,68712],{"class":230,"line":142},[228,68713,68714],{"class":238},"html {\n",[228,68716,68717],{"class":230,"line":1293},[228,68718,68719],{"class":238},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[228,68721,68722],{"class":230,"line":1308},[228,68723,68724],{"class":238},"  scroll-behavior: smooth;\n",[228,68726,68727],{"class":230,"line":1314},[228,68728,1679],{"class":238},[19,68730,68731],{},"默认是auto",[200,68733,68735],{"id":68734},"_3310-日期对象","3.3.10 日期对象",[22113,68737,68739],{"id":68738},"_33101-实例化","3.3.10.1 实例化",[19,68741,68742],{},[1576,68743],{"alt":141,"src":68744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22113,68746,68748],{"id":68747},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,68750,68751],{},[1576,68752],{"alt":141,"src":68753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,68755,68756],{},"月份+1",[19,68758,68759],{},"老外认为第一天为0，星期天",[19,68761,68762],{},"方法使用的时候必须要跟括号",[19,68764,68765],{},"快速获得日期",[19,68767,68768],{},"\u002F\u002F 得到年月日",[19,68770,68771],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,68773,68774],{},"\u002F\u002F 得到当地日期",[19,68776,68777],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,68779,68780],{},"\u002F\u002F 得到当地时间",[19,68782,68783],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,68785,68786],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,68788,68789],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51928,68791,68792],{},"\n\nconst div = document.querySelector('div')\n\nfunction getMyDate() {\n\nconst date = new Date()\n\nlet h = date.getHours()\n\nlet m = date.getMinutes()\n\nlet s = date.getSeconds()\n\nh = h \u003C 10 ? '0' + h : h\n\nm = m \u003C 10 ? '0' + m : m\n\ns = s \u003C 10 ? '0' + s : s\n\nreturn \\``今天是${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}号 ${h}:${m}:${s}`\\`\n\n}\n\n\u002F\u002F 外面还写一个这个时间是因为定时器需要经过1秒才调用一次函数，刚开始会有空白\n\ndiv.innerHTML = getMyDate()\n\nsetInterval(function () {\n\ndiv.innerHTML = getMyDate()\n\n}, 1000)\n\n",[19,68794,68795],{},"学会去封装函数！",[22113,68797,68799],{"id":68798},"_33103-时间戳","3.3.10.3 时间戳",[19,68801,68802],{},[1576,68803],{"alt":141,"src":68804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,68806,68807],{},[1576,68808],{"alt":141,"src":68809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,68811,68812],{},"三种方法记住一个就可以",[200,68814,68816],{"id":68815},"_3311-节点操作","3.3.11 节点操作",[22113,68818,68820],{"id":68819},"_33111-dom节点","3.3.11.1 DOM节点",[19,68822,68823],{},[1576,68824],{"alt":141,"src":68825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,68827,68828],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22113,68830,68832],{"id":68831},"_33112-查找节点","3.3.11.2 查找节点",[19,68834,68835],{},"前边的document.querySelector()是获取的元素",[19,68837,68838],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,68840,68841],{},[1576,68842],{"alt":141,"src":68843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[183,68845,68846],{},[186,68847,68848],{},"父节点",[19,68850,68851],{},[1576,68852],{"alt":141,"src":68853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[183,68855,68856],{"start":142},[186,68857,68858],{},"子节点",[19,68860,68861],{},[1576,68862],{"alt":141,"src":68863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,68865,68866],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,68868,68869],{},"children获得的是伪数组，是亲儿子",[183,68871,68872],{"start":1293},[186,68873,68874],{},"兄弟节点",[19,68876,68877],{},[1576,68878],{"alt":141,"src":68879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22113,68881,68883],{"id":68882},"_33113-增加节点","3.3.11.3 增加节点",[19,68885,68886],{},[1576,68887],{"alt":141,"src":68888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,68890,68891],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,68893,68894],{},[1576,68895],{"alt":141,"src":68896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,68898,68899],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,68901,68902],{},"下面是写法的部分展示，就按照下边的格式来写",[19,68904,68905],{},"例：",[51928,68907,68908],{},"\n\n\u002F\u002F 1. 重构 let data = \\[\n\n{\n\nsrc: 'images\u002Fcourse01.png',\n\ntitle: 'Think PHP 5.0 博客系统实战项目演练',\n\nnum: 1125\n\n},\n\n{\n\nsrc: 'images\u002Fcourse02.png',\n\ntitle: 'Android 网络动态图片加载实战',\n\nnum: 357\n\n},\n\n{\n\nsrc: 'images\u002Fcourse03.png',\n\ntitle: 'Angular2 大前端商城实战项目演练',\n\nnum: 22250\n\n},\n\n{\n\nsrc: 'images\u002Fcourse04.png',\n\ntitle: 'Android APP 实战项目演练',\n\nnum: 389\n\n},\n\n{\n\nsrc: 'images\u002Fcourse05.png',\n\ntitle: 'UGUI 源码深度分析案例',\n\nnum: 124\n\n},\n\n{\n\nsrc: 'images\u002Fcourse06.png',\n\ntitle: 'Kami2首页界面切换效果实战演练',\n\nnum: 432\n\n},\n\n{\n\nsrc: 'images\u002Fcourse07.png',\n\ntitle: 'UNITY 从入门到精通实战案例',\n\nnum: 888\n\n},\n\n{\n\nsrc: 'images\u002Fcourse08.png',\n\ntitle: 'Cocos 深度学习你不会错过的实战',\n\nnum: 590\n\n},\n\n\\]\n\n\u002F\u002F 1.根据数据的个数创建对应的li\n\nconst ul = document.querySelector('ul')\n\nfor (let i = 0; i \u003C data.length; i++) {\n\n\u002F\u002F 2.创建新的li\n\nconst li = document.createElement('li')\n\nul.appendChild(li)\n\n\u002F\u002F 把内容给li\n\nli.innerHTML = `\u003Ca href=\"#\">`\n\n   `\u003Cimg src=\"${data[i].src}\" alt=\"\">`\n\n   `\u003Ch4>${data[i].title}\u003C\u002Fh4>`\n\n   `\u003Cdiv class=\"info\">`\n\n   `\u003Cspan>高级\u003C\u002Fspan>·\u003Cspan>${data[i].num}\u003C\u002Fspan>人在学 \u003C\u002Fdiv>`\n\n   `\u003C\u002Fa>`\n\n}\n\n",[19,68910,68911],{},[1576,68912],{"alt":141,"src":68913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,68915,68916],{},"false只克隆标签，里边的内容不会克隆过来",[220,68918,68920],{"className":50748,"code":68919,"language":50750,"meta":141,"style":141},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[30,68921,68922],{"__ignoreMap":141},[228,68923,68924],{"class":230,"line":231},[228,68925,68919],{"class":238},[22113,68927,68929],{"id":68928},"_33114-删除节点","3.3.11.4 删除节点",[19,68931,68932],{},[1576,68933],{"alt":141,"src":68934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,68936,68937],{},"父亲删儿子",[19,68939,68940],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[200,68942,68944],{"id":68943},"_3312-m端事件","3.3.12 M端事件",[19,68946,68947],{},"M端就是移动端",[19,68949,68950],{},[1576,68951],{"alt":141,"src":68952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[200,68954,68956],{"id":68955},"_3313-插件","3.3.13 插件",[19,68958,68959],{},"要熟悉官网！！！",[19,68961,68962],{},[476,68963,68964],{"href":68964,"rel":68965},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[23980],[19,68967,68968],{},[476,68969,68970],{"href":68970,"rel":68971},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[23980],[200,68973,68975],{"id":68974},"_3314-学生信息表","3.3.14 学生信息表",[183,68977,68978,68981,68984,68987,68990,68993,68996,68999],{},[186,68979,68980],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[186,68982,68983],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[186,68985,68986],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[186,68988,68989],{},"用好表单元素自带的属性，value,name等",[186,68991,68992],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[186,68994,68995],{},"不要忘记事件对象",[186,68997,68998],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[186,69000,69001],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,69003,69004],{},"结构：",[220,69006,69008],{"className":50748,"code":69007,"language":50750,"meta":141,"style":141},"\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",[30,69009,69010,69020,69034,69038,69046,69060,69080,69101,69114,69138,69146,69150,69158,69171,69192,69220,69248,69253,69275,69295,69314,69322,69350,69372,69392,69412,69432,69452,69472,69480,69500,69508,69512,69525,69533,69541,69549,69562,69575,69588,69601,69614,69627,69640,69648,69656,69664,69669,69674,69679,69684,69689,69694,69699,69704,69709,69714,69719,69724,69729,69737,69745,69753,69757,69777,69796,69816,69836,69856,69876,69880,69885,69905,69910,69920,69925,69930,69950,69972,69977,69987,69991,69995,70000,70005,70034,70048,70063,70067,70071,70075,70080,70091,70104,70109,70114,70119,70124,70129,70133,70138,70143,70152,70157,70162,70174,70179,70186,70190,70195,70205,70210,70220,70225,70253,70274,70284,70304,70322,70339,70356,70373,70390,70394,70404,70409,70414,70419,70430,70434,70438,70442,70447,70452,70473,70485,70490,70495,70500,70514,70519,70526,70530,70534,70542,70546,70554,70558],{"__ignoreMap":141},[228,69011,69012,69014,69016,69018],{"class":230,"line":231},[228,69013,51412],{"class":238},[228,69015,51416],{"class":51415},[228,69017,51419],{"class":2077},[228,69019,51422],{"class":238},[228,69021,69022,69024,69026,69028,69030,69032],{"class":230,"line":142},[228,69023,1148],{"class":238},[228,69025,50750],{"class":51415},[228,69027,51431],{"class":2077},[228,69029,284],{"class":238},[228,69031,51436],{"class":343},[228,69033,51422],{"class":238},[228,69035,69036],{"class":230,"line":1293},[228,69037,2514],{"emptyLinePlaceholder":157},[228,69039,69040,69042,69044],{"class":230,"line":1308},[228,69041,1148],{"class":238},[228,69043,51449],{"class":51415},[228,69045,51422],{"class":238},[228,69047,69048,69050,69052,69054,69056,69058],{"class":230,"line":1314},[228,69049,52259],{"class":238},[228,69051,51459],{"class":51415},[228,69053,51462],{"class":2077},[228,69055,284],{"class":238},[228,69057,51467],{"class":343},[228,69059,59242],{"class":238},[228,69061,69062,69064,69066,69068,69070,69072,69074,69076,69078],{"class":230,"line":1328},[228,69063,52259],{"class":238},[228,69065,51459],{"class":51415},[228,69067,15035],{"class":2077},[228,69069,284],{"class":238},[228,69071,51506],{"class":343},[228,69073,51486],{"class":2077},[228,69075,284],{"class":238},[228,69077,51513],{"class":343},[228,69079,59242],{"class":238},[228,69081,69082,69084,69086,69088,69090,69092,69094,69096,69099],{"class":230,"line":1334},[228,69083,52259],{"class":238},[228,69085,51459],{"class":51415},[228,69087,51478],{"class":2077},[228,69089,284],{"class":238},[228,69091,51483],{"class":343},[228,69093,51486],{"class":2077},[228,69095,284],{"class":238},[228,69097,69098],{"class":343},"\"ie=edge\"",[228,69100,59242],{"class":238},[228,69102,69103,69105,69107,69110,69112],{"class":230,"line":1425},[228,69104,52259],{"class":238},[228,69106,51522],{"class":51415},[228,69108,69109],{"class":238},">学生信息管理\u003C\u002F",[228,69111,51522],{"class":51415},[228,69113,51422],{"class":238},[228,69115,69116,69118,69121,69124,69126,69129,69131,69133,69136],{"class":230,"line":1431},[228,69117,52259],{"class":238},[228,69119,69120],{"class":51415},"link",[228,69122,69123],{"class":2077}," rel",[228,69125,284],{"class":238},[228,69127,69128],{"class":343},"\"stylesheet\"",[228,69130,61172],{"class":2077},[228,69132,284],{"class":238},[228,69134,69135],{"class":343},"\"css\u002Findex.css\"",[228,69137,59242],{"class":238},[228,69139,69140,69142,69144],{"class":230,"line":1443},[228,69141,51900],{"class":238},[228,69143,51449],{"class":51415},[228,69145,51422],{"class":238},[228,69147,69148],{"class":230,"line":1726},[228,69149,2514],{"emptyLinePlaceholder":157},[228,69151,69152,69154,69156],{"class":230,"line":1731},[228,69153,1148],{"class":238},[228,69155,51915],{"class":51415},[228,69157,51422],{"class":238},[228,69159,69160,69162,69164,69167,69169],{"class":230,"line":1737},[228,69161,52259],{"class":238},[228,69163,10],{"class":51415},[228,69165,69166],{"class":238},">新增学员\u003C\u002F",[228,69168,10],{"class":51415},[228,69170,51422],{"class":238},[228,69172,69173,69175,69177,69179,69181,69183,69186,69188,69190],{"class":230,"line":1742},[228,69174,52259],{"class":238},[228,69176,66740],{"class":51415},[228,69178,53601],{"class":2077},[228,69180,284],{"class":238},[228,69182,62779],{"class":343},[228,69184,69185],{"class":2077}," autocomplete",[228,69187,284],{"class":238},[228,69189,31891],{"class":343},[228,69191,51422],{"class":238},[228,69193,69194,69197,69199,69201,69203,69205,69207,69209,69212,69214,69216,69218],{"class":230,"line":1756},[228,69195,69196],{"class":238},"    姓名：\u003C",[228,69198,53936],{"class":51415},[228,69200,53939],{"class":2077},[228,69202,284],{"class":238},[228,69204,62814],{"class":343},[228,69206,53601],{"class":2077},[228,69208,284],{"class":238},[228,69210,69211],{"class":343},"\"uname\"",[228,69213,15035],{"class":2077},[228,69215,284],{"class":238},[228,69217,69211],{"class":343},[228,69219,59242],{"class":238},[228,69221,69222,69225,69227,69229,69231,69233,69235,69237,69240,69242,69244,69246],{"class":230,"line":1761},[228,69223,69224],{"class":238},"    年龄：\u003C",[228,69226,53936],{"class":51415},[228,69228,53939],{"class":2077},[228,69230,284],{"class":238},[228,69232,62814],{"class":343},[228,69234,53601],{"class":2077},[228,69236,284],{"class":238},[228,69238,69239],{"class":343},"\"age\"",[228,69241,15035],{"class":2077},[228,69243,284],{"class":238},[228,69245,69239],{"class":343},[228,69247,59242],{"class":238},[228,69249,69250],{"class":230,"line":1767},[228,69251,69252],{"class":238},"    性别:\n",[228,69254,69255,69257,69260,69262,69264,69267,69269,69271,69273],{"class":230,"line":1788},[228,69256,51456],{"class":238},[228,69258,69259],{"class":51415},"select",[228,69261,15035],{"class":2077},[228,69263,284],{"class":238},[228,69265,69266],{"class":343},"\"gender\"",[228,69268,53601],{"class":2077},[228,69270,284],{"class":238},[228,69272,69266],{"class":343},[228,69274,51422],{"class":238},[228,69276,69277,69279,69282,69284,69286,69288,69291,69293],{"class":230,"line":1793},[228,69278,55349],{"class":238},[228,69280,69281],{"class":51415},"option",[228,69283,66766],{"class":2077},[228,69285,284],{"class":238},[228,69287,10076],{"class":343},[228,69289,69290],{"class":238},">男\u003C\u002F",[228,69292,69281],{"class":51415},[228,69294,51422],{"class":238},[228,69296,69297,69299,69301,69303,69305,69307,69310,69312],{"class":230,"line":1807},[228,69298,55349],{"class":238},[228,69300,69281],{"class":51415},[228,69302,66766],{"class":2077},[228,69304,284],{"class":238},[228,69306,10145],{"class":343},[228,69308,69309],{"class":238},">女\u003C\u002F",[228,69311,69281],{"class":51415},[228,69313,51422],{"class":238},[228,69315,69316,69318,69320],{"class":230,"line":1812},[228,69317,51891],{"class":238},[228,69319,69259],{"class":51415},[228,69321,51422],{"class":238},[228,69323,69324,69327,69329,69331,69333,69335,69337,69339,69342,69344,69346,69348],{"class":230,"line":1841},[228,69325,69326],{"class":238},"    薪资：\u003C",[228,69328,53936],{"class":51415},[228,69330,53939],{"class":2077},[228,69332,284],{"class":238},[228,69334,62814],{"class":343},[228,69336,53601],{"class":2077},[228,69338,284],{"class":238},[228,69340,69341],{"class":343},"\"salary\"",[228,69343,15035],{"class":2077},[228,69345,284],{"class":238},[228,69347,69341],{"class":343},[228,69349,59242],{"class":238},[228,69351,69352,69355,69357,69359,69361,69364,69366,69368,69370],{"class":230,"line":1846},[228,69353,69354],{"class":238},"    就业城市：\u003C",[228,69356,69259],{"class":51415},[228,69358,15035],{"class":2077},[228,69360,284],{"class":238},[228,69362,69363],{"class":343},"\"city\"",[228,69365,53601],{"class":2077},[228,69367,284],{"class":238},[228,69369,69363],{"class":343},[228,69371,51422],{"class":238},[228,69373,69374,69376,69378,69380,69382,69385,69388,69390],{"class":230,"line":1863},[228,69375,55349],{"class":238},[228,69377,69281],{"class":51415},[228,69379,66766],{"class":2077},[228,69381,284],{"class":238},[228,69383,69384],{"class":343},"\"北京\"",[228,69386,69387],{"class":238},">北京\u003C\u002F",[228,69389,69281],{"class":51415},[228,69391,51422],{"class":238},[228,69393,69394,69396,69398,69400,69402,69405,69408,69410],{"class":230,"line":1868},[228,69395,55349],{"class":238},[228,69397,69281],{"class":51415},[228,69399,66766],{"class":2077},[228,69401,284],{"class":238},[228,69403,69404],{"class":343},"\"上海\"",[228,69406,69407],{"class":238},">上海\u003C\u002F",[228,69409,69281],{"class":51415},[228,69411,51422],{"class":238},[228,69413,69414,69416,69418,69420,69422,69425,69428,69430],{"class":230,"line":1873},[228,69415,55349],{"class":238},[228,69417,69281],{"class":51415},[228,69419,66766],{"class":2077},[228,69421,284],{"class":238},[228,69423,69424],{"class":343},"\"广州\"",[228,69426,69427],{"class":238},">广州\u003C\u002F",[228,69429,69281],{"class":51415},[228,69431,51422],{"class":238},[228,69433,69434,69436,69438,69440,69442,69445,69448,69450],{"class":230,"line":1878},[228,69435,55349],{"class":238},[228,69437,69281],{"class":51415},[228,69439,66766],{"class":2077},[228,69441,284],{"class":238},[228,69443,69444],{"class":343},"\"深圳\"",[228,69446,69447],{"class":238},">深圳\u003C\u002F",[228,69449,69281],{"class":51415},[228,69451,51422],{"class":238},[228,69453,69454,69456,69458,69460,69462,69465,69468,69470],{"class":230,"line":1892},[228,69455,55349],{"class":238},[228,69457,69281],{"class":51415},[228,69459,66766],{"class":2077},[228,69461,284],{"class":238},[228,69463,69464],{"class":343},"\"曹县\"",[228,69466,69467],{"class":238},">曹县\u003C\u002F",[228,69469,69281],{"class":51415},[228,69471,51422],{"class":238},[228,69473,69474,69476,69478],{"class":230,"line":1897},[228,69475,51891],{"class":238},[228,69477,69259],{"class":51415},[228,69479,51422],{"class":238},[228,69481,69482,69484,69486,69488,69490,69493,69496,69498],{"class":230,"line":2691},[228,69483,51456],{"class":238},[228,69485,54002],{"class":51415},[228,69487,53601],{"class":2077},[228,69489,284],{"class":238},[228,69491,69492],{"class":343},"\"add\"",[228,69494,69495],{"class":238},">录入\u003C\u002F",[228,69497,54002],{"class":51415},[228,69499,51422],{"class":238},[228,69501,69502,69504,69506],{"class":230,"line":2705},[228,69503,52532],{"class":238},[228,69505,66740],{"class":51415},[228,69507,51422],{"class":238},[228,69509,69510],{"class":230,"line":2713},[228,69511,2514],{"emptyLinePlaceholder":157},[228,69513,69514,69516,69518,69521,69523],{"class":230,"line":2718},[228,69515,52259],{"class":238},[228,69517,10],{"class":51415},[228,69519,69520],{"class":238},">就业榜\u003C\u002F",[228,69522,10],{"class":51415},[228,69524,51422],{"class":238},[228,69526,69527,69529,69531],{"class":230,"line":2724},[228,69528,52259],{"class":238},[228,69530,376],{"class":51415},[228,69532,51422],{"class":238},[228,69534,69535,69537,69539],{"class":230,"line":2730},[228,69536,51456],{"class":238},[228,69538,379],{"class":51415},[228,69540,51422],{"class":238},[228,69542,69543,69545,69547],{"class":230,"line":2735},[228,69544,55349],{"class":238},[228,69546,382],{"class":51415},[228,69548,51422],{"class":238},[228,69550,69551,69553,69555,69558,69560],{"class":230,"line":8063},[228,69552,55417],{"class":238},[228,69554,385],{"class":51415},[228,69556,69557],{"class":238},">序号\u003C\u002F",[228,69559,385],{"class":51415},[228,69561,51422],{"class":238},[228,69563,69564,69566,69568,69571,69573],{"class":230,"line":8087},[228,69565,55417],{"class":238},[228,69567,385],{"class":51415},[228,69569,69570],{"class":238},">姓名\u003C\u002F",[228,69572,385],{"class":51415},[228,69574,51422],{"class":238},[228,69576,69577,69579,69581,69584,69586],{"class":230,"line":8092},[228,69578,55417],{"class":238},[228,69580,385],{"class":51415},[228,69582,69583],{"class":238},">年龄\u003C\u002F",[228,69585,385],{"class":51415},[228,69587,51422],{"class":238},[228,69589,69590,69592,69594,69597,69599],{"class":230,"line":8098},[228,69591,55417],{"class":238},[228,69593,385],{"class":51415},[228,69595,69596],{"class":238},">性别\u003C\u002F",[228,69598,385],{"class":51415},[228,69600,51422],{"class":238},[228,69602,69603,69605,69607,69610,69612],{"class":230,"line":8125},[228,69604,55417],{"class":238},[228,69606,385],{"class":51415},[228,69608,69609],{"class":238},">薪资\u003C\u002F",[228,69611,385],{"class":51415},[228,69613,51422],{"class":238},[228,69615,69616,69618,69620,69623,69625],{"class":230,"line":8130},[228,69617,55417],{"class":238},[228,69619,385],{"class":51415},[228,69621,69622],{"class":238},">就业城市\u003C\u002F",[228,69624,385],{"class":51415},[228,69626,51422],{"class":238},[228,69628,69629,69631,69633,69636,69638],{"class":230,"line":8136},[228,69630,55417],{"class":238},[228,69632,385],{"class":51415},[228,69634,69635],{"class":238},">操作\u003C\u002F",[228,69637,385],{"class":51415},[228,69639,51422],{"class":238},[228,69641,69642,69644,69646],{"class":230,"line":8148},[228,69643,55522],{"class":238},[228,69645,382],{"class":51415},[228,69647,51422],{"class":238},[228,69649,69650,69652,69654],{"class":230,"line":8160},[228,69651,51891],{"class":238},[228,69653,379],{"class":51415},[228,69655,51422],{"class":238},[228,69657,69658,69660,69662],{"class":230,"line":8172},[228,69659,51456],{"class":238},[228,69661,423],{"class":51415},[228,69663,51422],{"class":238},[228,69665,69666],{"class":230,"line":9831},[228,69667,69668],{"class":297},"      \u003C!-- \n",[228,69670,69671],{"class":230,"line":9856},[228,69672,69673],{"class":297},"        \u003Ctr>\n",[228,69675,69676],{"class":230,"line":9879},[228,69677,69678],{"class":297},"          \u003Ctd>1001\u003C\u002Ftd>\n",[228,69680,69681],{"class":230,"line":9903},[228,69682,69683],{"class":297},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[228,69685,69686],{"class":230,"line":9908},[228,69687,69688],{"class":297},"          \u003Ctd>19\u003C\u002Ftd>\n",[228,69690,69691],{"class":230,"line":9913},[228,69692,69693],{"class":297},"          \u003Ctd>男\u003C\u002Ftd>\n",[228,69695,69696],{"class":230,"line":9918},[228,69697,69698],{"class":297},"          \u003Ctd>15000\u003C\u002Ftd>\n",[228,69700,69701],{"class":230,"line":9927},[228,69702,69703],{"class":297},"          \u003Ctd>上海\u003C\u002Ftd>\n",[228,69705,69706],{"class":230,"line":9932},[228,69707,69708],{"class":297},"          \u003Ctd>\n",[228,69710,69711],{"class":230,"line":9938},[228,69712,69713],{"class":297},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[228,69715,69716],{"class":230,"line":9959},[228,69717,69718],{"class":297},"          \u003C\u002Ftd>\n",[228,69720,69721],{"class":230,"line":9965},[228,69722,69723],{"class":297},"        \u003C\u002Ftr> \n",[228,69725,69726],{"class":230,"line":9979},[228,69727,69728],{"class":297},"        -->\n",[228,69730,69731,69733,69735],{"class":230,"line":9985},[228,69732,51891],{"class":238},[228,69734,423],{"class":51415},[228,69736,51422],{"class":238},[228,69738,69739,69741,69743],{"class":230,"line":10012},[228,69740,52532],{"class":238},[228,69742,376],{"class":51415},[228,69744,51422],{"class":238},[228,69746,69747,69749,69751],{"class":230,"line":10021},[228,69748,52259],{"class":238},[228,69750,51928],{"class":51415},[228,69752,51422],{"class":238},[228,69754,69755],{"class":230,"line":10027},[228,69756,60073],{"class":297},[228,69758,69759,69761,69764,69766,69768,69770,69772,69775],{"class":230,"line":10035},[228,69760,11336],{"class":234},[228,69762,69763],{"class":287}," uname",[228,69765,13679],{"class":234},[228,69767,54511],{"class":238},[228,69769,54514],{"class":2077},[228,69771,239],{"class":238},[228,69773,69774],{"class":343},"'.uname'",[228,69776,245],{"class":238},[228,69778,69779,69781,69783,69785,69787,69789,69791,69794],{"class":230,"line":10040},[228,69780,11336],{"class":234},[228,69782,15804],{"class":287},[228,69784,13679],{"class":234},[228,69786,54511],{"class":238},[228,69788,54514],{"class":2077},[228,69790,239],{"class":238},[228,69792,69793],{"class":343},"'.age'",[228,69795,245],{"class":238},[228,69797,69798,69800,69803,69805,69807,69809,69811,69814],{"class":230,"line":16719},[228,69799,11336],{"class":234},[228,69801,69802],{"class":287}," gender",[228,69804,13679],{"class":234},[228,69806,54511],{"class":238},[228,69808,54514],{"class":2077},[228,69810,239],{"class":238},[228,69812,69813],{"class":343},"'.gender'",[228,69815,245],{"class":238},[228,69817,69818,69820,69823,69825,69827,69829,69831,69834],{"class":230,"line":16725},[228,69819,11336],{"class":234},[228,69821,69822],{"class":287}," salary",[228,69824,13679],{"class":234},[228,69826,54511],{"class":238},[228,69828,54514],{"class":2077},[228,69830,239],{"class":238},[228,69832,69833],{"class":343},"'.salary'",[228,69835,245],{"class":238},[228,69837,69838,69840,69843,69845,69847,69849,69851,69854],{"class":230,"line":16748},[228,69839,11336],{"class":234},[228,69841,69842],{"class":287}," city",[228,69844,13679],{"class":234},[228,69846,54511],{"class":238},[228,69848,54514],{"class":2077},[228,69850,239],{"class":238},[228,69852,69853],{"class":343},"'.city'",[228,69855,245],{"class":238},[228,69857,69858,69860,69863,69865,69867,69869,69871,69874],{"class":230,"line":16754},[228,69859,11336],{"class":234},[228,69861,69862],{"class":287}," tbody",[228,69864,13679],{"class":234},[228,69866,54511],{"class":238},[228,69868,54514],{"class":2077},[228,69870,239],{"class":238},[228,69872,69873],{"class":343},"'tbody'",[228,69875,245],{"class":238},[228,69877,69878],{"class":230,"line":16777},[228,69879,2514],{"emptyLinePlaceholder":157},[228,69881,69882],{"class":230,"line":16791},[228,69883,69884],{"class":297},"    \u002F\u002F 获取所有带有name属性的元素\n",[228,69886,69887,69889,69892,69894,69896,69898,69900,69903],{"class":230,"line":16811},[228,69888,11336],{"class":234},[228,69890,69891],{"class":287}," items",[228,69893,13679],{"class":234},[228,69895,54511],{"class":238},[228,69897,55796],{"class":2077},[228,69899,239],{"class":238},[228,69901,69902],{"class":343},"'[name]'",[228,69904,245],{"class":238},[228,69906,69907],{"class":230,"line":16817},[228,69908,69909],{"class":297},"    \u002F\u002F 声明一个空的数组\n",[228,69911,69912,69914,69916,69918],{"class":230,"line":16828},[228,69913,11336],{"class":234},[228,69915,57810],{"class":287},[228,69917,13679],{"class":234},[228,69919,51953],{"class":238},[228,69921,69922],{"class":230,"line":16851},[228,69923,69924],{"class":297},"    \u002F\u002F 1.录入模块\n",[228,69926,69927],{"class":230,"line":16873},[228,69928,69929],{"class":297},"    \u002F\u002F 1.1这是一个表单提交事件\n",[228,69931,69932,69934,69937,69939,69941,69943,69945,69948],{"class":230,"line":16878},[228,69933,11336],{"class":234},[228,69935,69936],{"class":287}," info",[228,69938,13679],{"class":234},[228,69940,54511],{"class":238},[228,69942,54514],{"class":2077},[228,69944,239],{"class":238},[228,69946,69947],{"class":343},"'.info'",[228,69949,245],{"class":238},[228,69951,69952,69955,69957,69959,69962,69964,69966,69968,69970],{"class":230,"line":16884},[228,69953,69954],{"class":238},"    info.",[228,69956,57928],{"class":2077},[228,69958,239],{"class":238},[228,69960,69961],{"class":343},"'submit'",[228,69963,12550],{"class":238},[228,69965,54564],{"class":234},[228,69967,1772],{"class":238},[228,69969,313],{"class":5331},[228,69971,12557],{"class":238},[228,69973,69974],{"class":230,"line":16898},[228,69975,69976],{"class":297},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[228,69978,69979,69982,69985],{"class":230,"line":16911},[228,69980,69981],{"class":238},"      e.",[228,69983,69984],{"class":2077},"preventDefault",[228,69986,2090],{"class":238},[228,69988,69989],{"class":230,"line":16916},[228,69990,60127],{"class":297},[228,69992,69993],{"class":230,"line":16930},[228,69994,2514],{"emptyLinePlaceholder":157},[228,69996,69997],{"class":230,"line":16935},[228,69998,69999],{"class":297},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[228,70001,70002],{"class":230,"line":16941},[228,70003,70004],{"class":297},"      \u002F\u002F 先遍历循环\n",[228,70006,70007,70009,70011,70013,70015,70017,70019,70021,70023,70026,70028,70030,70032],{"class":230,"line":16946},[228,70008,52399],{"class":234},[228,70010,1772],{"class":238},[228,70012,51962],{"class":234},[228,70014,9553],{"class":238},[228,70016,284],{"class":234},[228,70018,4207],{"class":287},[228,70020,9560],{"class":238},[228,70022,1148],{"class":234},[228,70024,70025],{"class":238}," items.",[228,70027,52083],{"class":287},[228,70029,3328],{"class":238},[228,70031,2406],{"class":234},[228,70033,12557],{"class":238},[228,70035,70036,70038,70041,70043,70046],{"class":230,"line":16960},[228,70037,2611],{"class":234},[228,70039,70040],{"class":238}," (items[i].value ",[228,70042,54601],{"class":234},[228,70044,70045],{"class":343}," ''",[228,70047,12557],{"class":238},[228,70049,70050,70053,70056,70058,70061],{"class":230,"line":16965},[228,70051,70052],{"class":234},"          return",[228,70054,70055],{"class":2077}," alert",[228,70057,239],{"class":238},[228,70059,70060],{"class":343},"'输入内容不能为空'",[228,70062,245],{"class":238},[228,70064,70065],{"class":230,"line":16970},[228,70066,2643],{"class":238},[228,70068,70069],{"class":230,"line":16984},[228,70070,52513],{"class":238},[228,70072,70073],{"class":230,"line":16996},[228,70074,2514],{"emptyLinePlaceholder":157},[228,70076,70077],{"class":230,"line":17001},[228,70078,70079],{"class":297},"      \u002F\u002F 创建新的对象\n",[228,70081,70082,70084,70087,70089],{"class":230,"line":17014},[228,70083,58343],{"class":234},[228,70085,70086],{"class":287}," obj",[228,70088,13679],{"class":234},[228,70090,15687],{"class":238},[228,70092,70093,70096,70098,70100,70102],{"class":230,"line":17019},[228,70094,70095],{"class":238},"        stuID: arr.",[228,70097,52083],{"class":287},[228,70099,45681],{"class":234},[228,70101,25234],{"class":287},[228,70103,31581],{"class":238},[228,70105,70106],{"class":230,"line":17024},[228,70107,70108],{"class":238},"        uname: uname.value,\n",[228,70110,70111],{"class":230,"line":17029},[228,70112,70113],{"class":238},"        age: age.value,\n",[228,70115,70116],{"class":230,"line":17042},[228,70117,70118],{"class":238},"        gender: gender.value,\n",[228,70120,70121],{"class":230,"line":17047},[228,70122,70123],{"class":238},"        salary: salary.value,\n",[228,70125,70126],{"class":230,"line":32748},[228,70127,70128],{"class":238},"        city: city.value\n",[228,70130,70131],{"class":230,"line":32754},[228,70132,52513],{"class":238},[228,70134,70135],{"class":230,"line":32760},[228,70136,70137],{"class":297},"      \u002F\u002F console.log(obj);\n",[228,70139,70140],{"class":230,"line":32766},[228,70141,70142],{"class":297},"      \u002F\u002F 追加到数组里面\n",[228,70144,70145,70147,70149],{"class":230,"line":32772},[228,70146,58122],{"class":238},[228,70148,51999],{"class":2077},[228,70150,70151],{"class":238},"(obj)\n",[228,70153,70154],{"class":230,"line":32783},[228,70155,70156],{"class":297},"      \u002F\u002F console.log(arr);\n",[228,70158,70159],{"class":230,"line":32789},[228,70160,70161],{"class":297},"      \u002F\u002F 清空表单  reset重置表单\n",[228,70163,70164,70167,70169,70172],{"class":230,"line":32809},[228,70165,70166],{"class":287},"      this",[228,70168,796],{"class":238},[228,70170,70171],{"class":2077},"reset",[228,70173,2090],{"class":238},[228,70175,70176],{"class":230,"line":32815},[228,70177,70178],{"class":297},"      \u002F\u002F 调用渲染函数\n",[228,70180,70181,70184],{"class":230,"line":32826},[228,70182,70183],{"class":2077},"      render",[228,70185,2090],{"class":238},[228,70187,70188],{"class":230,"line":32832},[228,70189,33576],{"class":238},[228,70191,70192],{"class":230,"line":32838},[228,70193,70194],{"class":297},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[228,70196,70197,70200,70203],{"class":230,"line":32844},[228,70198,70199],{"class":234},"    function",[228,70201,70202],{"class":2077}," render",[228,70204,10968],{"class":238},[228,70206,70207],{"class":230,"line":32850},[228,70208,70209],{"class":297},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[228,70211,70212,70215,70217],{"class":230,"line":32856},[228,70213,70214],{"class":238},"      tbody.innerHTML ",[228,70216,284],{"class":234},[228,70218,70219],{"class":343}," ''\n",[228,70221,70222],{"class":230,"line":32862},[228,70223,70224],{"class":297},"      \u002F\u002F 遍历数组\n",[228,70226,70227,70229,70231,70233,70235,70237,70239,70241,70243,70245,70247,70249,70251],{"class":230,"line":32868},[228,70228,52399],{"class":234},[228,70230,1772],{"class":238},[228,70232,51962],{"class":234},[228,70234,9553],{"class":238},[228,70236,284],{"class":234},[228,70238,4207],{"class":287},[228,70240,9560],{"class":238},[228,70242,1148],{"class":234},[228,70244,52080],{"class":238},[228,70246,52083],{"class":287},[228,70248,3328],{"class":238},[228,70250,2406],{"class":234},[228,70252,12557],{"class":238},[228,70254,70255,70257,70260,70262,70264,70267,70269,70272],{"class":230,"line":32888},[228,70256,61385],{"class":234},[228,70258,70259],{"class":287}," tr",[228,70261,13679],{"class":234},[228,70263,54511],{"class":238},[228,70265,70266],{"class":2077},"createElement",[228,70268,239],{"class":238},[228,70270,70271],{"class":343},"'tr'",[228,70273,245],{"class":238},[228,70275,70276,70279,70281],{"class":230,"line":32894},[228,70277,70278],{"class":238},"        tr.innerHTML ",[228,70280,284],{"class":234},[228,70282,70283],{"class":343}," `\n",[228,70285,70286,70289,70291,70293,70295,70298,70301],{"class":230,"line":32910},[228,70287,70288],{"class":343},"        \u003Ctd>${",[228,70290,3994],{"class":238},[228,70292,1128],{"class":343},[228,70294,679],{"class":238},[228,70296,70297],{"class":343},"].",[228,70299,70300],{"class":238},"stuID",[228,70302,70303],{"class":343},"}\u003C\u002Ftd>\n",[228,70305,70306,70309,70311,70313,70315,70317,70320],{"class":230,"line":32916},[228,70307,70308],{"class":343},"          \u003Ctd>${",[228,70310,3994],{"class":238},[228,70312,1128],{"class":343},[228,70314,679],{"class":238},[228,70316,70297],{"class":343},[228,70318,70319],{"class":238},"uname",[228,70321,70303],{"class":343},[228,70323,70324,70326,70328,70330,70332,70334,70337],{"class":230,"line":32930},[228,70325,70308],{"class":343},[228,70327,3994],{"class":238},[228,70329,1128],{"class":343},[228,70331,679],{"class":238},[228,70333,70297],{"class":343},[228,70335,70336],{"class":238},"age",[228,70338,70303],{"class":343},[228,70340,70341,70343,70345,70347,70349,70351,70354],{"class":230,"line":32936},[228,70342,70308],{"class":343},[228,70344,3994],{"class":238},[228,70346,1128],{"class":343},[228,70348,679],{"class":238},[228,70350,70297],{"class":343},[228,70352,70353],{"class":238},"gender",[228,70355,70303],{"class":343},[228,70357,70358,70360,70362,70364,70366,70368,70371],{"class":230,"line":32951},[228,70359,70308],{"class":343},[228,70361,3994],{"class":238},[228,70363,1128],{"class":343},[228,70365,679],{"class":238},[228,70367,70297],{"class":343},[228,70369,70370],{"class":238},"salary",[228,70372,70303],{"class":343},[228,70374,70375,70377,70379,70381,70383,70385,70388],{"class":230,"line":32957},[228,70376,70308],{"class":343},[228,70378,3994],{"class":238},[228,70380,1128],{"class":343},[228,70382,679],{"class":238},[228,70384,70297],{"class":343},[228,70386,70387],{"class":238},"city",[228,70389,70303],{"class":343},[228,70391,70392],{"class":230,"line":32966},[228,70393,69708],{"class":343},[228,70395,70396,70399,70401],{"class":230,"line":32972},[228,70397,70398],{"class":343},"            \u003Ca href=\"javascript:\" data-id=${",[228,70400,679],{"class":238},[228,70402,70403],{"class":343},"}>删除\u003C\u002Fa>\n",[228,70405,70406],{"class":230,"line":32981},[228,70407,70408],{"class":343},"          \u003C\u002Ftd> \n",[228,70410,70411],{"class":230,"line":32987},[228,70412,70413],{"class":343},"          `\n",[228,70415,70416],{"class":230,"line":32993},[228,70417,70418],{"class":297},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[228,70420,70421,70424,70427],{"class":230,"line":33002},[228,70422,70423],{"class":238},"        tbody.",[228,70425,70426],{"class":2077},"appendChild",[228,70428,70429],{"class":238},"(tr)\n",[228,70431,70432],{"class":230,"line":33008},[228,70433,52513],{"class":238},[228,70435,70436],{"class":230,"line":33019},[228,70437,2301],{"class":238},[228,70439,70440],{"class":230,"line":33025},[228,70441,2514],{"emptyLinePlaceholder":157},[228,70443,70444],{"class":230,"line":33044},[228,70445,70446],{"class":297},"    \u002F\u002F 3.删除委托\n",[228,70448,70449],{"class":230,"line":33050},[228,70450,70451],{"class":297},"    \u002F\u002F 3.1 事件委托 tbody\n",[228,70453,70454,70457,70459,70461,70463,70465,70467,70469,70471],{"class":230,"line":33061},[228,70455,70456],{"class":238},"    tbody.",[228,70458,57928],{"class":2077},[228,70460,239],{"class":238},[228,70462,57933],{"class":343},[228,70464,12550],{"class":238},[228,70466,54564],{"class":234},[228,70468,1772],{"class":238},[228,70470,313],{"class":5331},[228,70472,12557],{"class":238},[228,70474,70475,70477,70479,70481,70483],{"class":230,"line":33067},[228,70476,54595],{"class":234},[228,70478,67149],{"class":238},[228,70480,54601],{"class":234},[228,70482,68371],{"class":343},[228,70484,12557],{"class":238},[228,70486,70487],{"class":230,"line":33087},[228,70488,70489],{"class":297},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[228,70491,70492],{"class":230,"line":33103},[228,70493,70494],{"class":297},"        \u002F\u002F console.log(e.target.dataset.id);\n",[228,70496,70497],{"class":230,"line":33109},[228,70498,70499],{"class":297},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[228,70501,70502,70505,70507,70510,70512],{"class":230,"line":33123},[228,70503,70504],{"class":238},"        arr.",[228,70506,58125],{"class":2077},[228,70508,70509],{"class":238},"(e.target.dataset.id, ",[228,70511,456],{"class":287},[228,70513,245],{"class":238},[228,70515,70516],{"class":230,"line":33129},[228,70517,70518],{"class":297},"        \u002F\u002F 重新渲染一次\n",[228,70520,70521,70524],{"class":230,"line":33135},[228,70522,70523],{"class":2077},"        render",[228,70525,2090],{"class":238},[228,70527,70528],{"class":230,"line":33146},[228,70529,52513],{"class":238},[228,70531,70532],{"class":230,"line":33152},[228,70533,33576],{"class":238},[228,70535,70536,70538,70540],{"class":230,"line":33158},[228,70537,52532],{"class":238},[228,70539,51928],{"class":51415},[228,70541,51422],{"class":238},[228,70543,70544],{"class":230,"line":33168},[228,70545,2514],{"emptyLinePlaceholder":157},[228,70547,70548,70550,70552],{"class":230,"line":33174},[228,70549,51900],{"class":238},[228,70551,51915],{"class":51415},[228,70553,51422],{"class":238},[228,70555,70556],{"class":230,"line":33185},[228,70557,2514],{"emptyLinePlaceholder":157},[228,70559,70560,70562,70564],{"class":230,"line":33191},[228,70561,51900],{"class":238},[228,70563,50750],{"class":51415},[228,70565,51422],{"class":238},[19,70567,70568],{},"样式：",[220,70570,70574],{"className":70571,"code":70572,"language":70573,"meta":141,"style":141},"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",[30,70575,70576,70581,70591,70600,70604,70608,70613,70623,70628,70632,70637,70647,70652,70661,70665,70669,70674,70679,70689,70699,70704,70708,70713,70722,70732,70737,70747,70757,70761,70766,70774,70778,70783,70788,70793,70801,70810,70814,70819,70828,70832,70837,70846,70850,70855,70864,70873,70881,70885,70890,70899,70909,70918,70928,70934,70943,70953,70963,70967,70972,70981,70989,70999,71007,71016,71025,71035,71043,71047,71052,71061],{"__ignoreMap":141},[228,70577,70578],{"class":230,"line":231},[228,70579,70580],{"class":238},"* {\n",[228,70582,70583,70586,70588],{"class":230,"line":142},[228,70584,70585],{"class":51415},"  margin",[228,70587,51552],{"class":238},[228,70589,70590],{"class":343},"0;\n",[228,70592,70593,70596,70598],{"class":230,"line":1293},[228,70594,70595],{"class":343},"  padding",[228,70597,51552],{"class":238},[228,70599,70590],{"class":343},[228,70601,70602],{"class":230,"line":1308},[228,70603,1679],{"class":238},[228,70605,70606],{"class":230,"line":1314},[228,70607,2514],{"emptyLinePlaceholder":157},[228,70609,70610],{"class":230,"line":1328},[228,70611,70612],{"class":343},"a {\n",[228,70614,70615,70618,70620],{"class":230,"line":1334},[228,70616,70617],{"class":51415},"  text-decoration",[228,70619,51552],{"class":238},[228,70621,70622],{"class":343},"none;\n",[228,70624,70625],{"class":230,"line":1425},[228,70626,70627],{"class":343},"  color:#721c24;\n",[228,70629,70630],{"class":230,"line":1431},[228,70631,1679],{"class":238},[228,70633,70634],{"class":230,"line":1443},[228,70635,70636],{"class":343},"h1 {\n",[228,70638,70639,70642,70644],{"class":230,"line":1726},[228,70640,70641],{"class":51415},"  text-align",[228,70643,51552],{"class":238},[228,70645,70646],{"class":343},"center;\n",[228,70648,70649],{"class":230,"line":1731},[228,70650,70651],{"class":343},"  color:#333;\n",[228,70653,70654,70656,70658],{"class":230,"line":1737},[228,70655,70585],{"class":51415},[228,70657,51552],{"class":238},[228,70659,70660],{"class":343},"20px 0;\n",[228,70662,70663],{"class":230,"line":1742},[228,70664,2788],{"class":238},[228,70666,70667],{"class":230,"line":1756},[228,70668,1679],{"class":238},[228,70670,70671],{"class":230,"line":1761},[228,70672,70673],{"class":343},"table {\n",[228,70675,70676],{"class":230,"line":1767},[228,70677,70678],{"class":343},"  margin:0 auto;\n",[228,70680,70681,70684,70686],{"class":230,"line":1788},[228,70682,70683],{"class":51415},"  width",[228,70685,51552],{"class":238},[228,70687,70688],{"class":343},"800px;\n",[228,70690,70691,70694,70696],{"class":230,"line":1793},[228,70692,70693],{"class":51415},"  border-collapse",[228,70695,51552],{"class":238},[228,70697,70698],{"class":343},"collapse;\n",[228,70700,70701],{"class":230,"line":1807},[228,70702,70703],{"class":343},"  color:#004085;\n",[228,70705,70706],{"class":230,"line":1812},[228,70707,1679],{"class":238},[228,70709,70710],{"class":230,"line":1841},[228,70711,70712],{"class":343},"th {\n",[228,70714,70715,70717,70719],{"class":230,"line":1846},[228,70716,70595],{"class":51415},[228,70718,51552],{"class":238},[228,70720,70721],{"class":343},"10px;\n",[228,70723,70724,70727,70729],{"class":230,"line":1863},[228,70725,70726],{"class":51415},"  background",[228,70728,51552],{"class":238},[228,70730,70731],{"class":297},"#cfe5ff;\n",[228,70733,70734],{"class":230,"line":1868},[228,70735,70736],{"class":238},"  \n",[228,70738,70739,70742,70744],{"class":230,"line":1873},[228,70740,70741],{"class":51415},"  font-size",[228,70743,51552],{"class":238},[228,70745,70746],{"class":343},"20px;\n",[228,70748,70749,70752,70754],{"class":230,"line":1878},[228,70750,70751],{"class":51415},"  font-weight",[228,70753,51552],{"class":238},[228,70755,70756],{"class":343},"400;\n",[228,70758,70759],{"class":230,"line":1892},[228,70760,1679],{"class":238},[228,70762,70763],{"class":230,"line":1897},[228,70764,70765],{"class":343},"td,th {\n",[228,70767,70768,70771],{"class":230,"line":2691},[228,70769,70770],{"class":343},"  border:1px solid",[228,70772,70773],{"class":297}," #b8daff;\n",[228,70775,70776],{"class":230,"line":2705},[228,70777,1679],{"class":238},[228,70779,70780],{"class":230,"line":2713},[228,70781,70782],{"class":343},"td {\n",[228,70784,70785],{"class":230,"line":2718},[228,70786,70787],{"class":343},"  padding:10px;\n",[228,70789,70790],{"class":230,"line":2724},[228,70791,70792],{"class":343},"  color:#666;\n",[228,70794,70795,70797,70799],{"class":230,"line":2730},[228,70796,70641],{"class":51415},[228,70798,51552],{"class":238},[228,70800,70646],{"class":343},[228,70802,70803,70805,70807],{"class":230,"line":2735},[228,70804,70741],{"class":51415},[228,70806,51552],{"class":238},[228,70808,70809],{"class":343},"16px;\n",[228,70811,70812],{"class":230,"line":8063},[228,70813,1679],{"class":238},[228,70815,70816],{"class":230,"line":8087},[228,70817,70818],{"class":343},"tbody tr {\n",[228,70820,70821,70823,70825],{"class":230,"line":8092},[228,70822,70726],{"class":51415},[228,70824,51552],{"class":238},[228,70826,70827],{"class":297},"#fff;\n",[228,70829,70830],{"class":230,"line":8098},[228,70831,1679],{"class":238},[228,70833,70834],{"class":230,"line":8125},[228,70835,70836],{"class":343},"tbody tr:hover {\n",[228,70838,70839,70841,70843],{"class":230,"line":8130},[228,70840,70726],{"class":51415},[228,70842,51552],{"class":238},[228,70844,70845],{"class":297},"#e1ecf8;\n",[228,70847,70848],{"class":230,"line":8136},[228,70849,1679],{"class":238},[228,70851,70852],{"class":230,"line":8148},[228,70853,70854],{"class":343},".info {\n",[228,70856,70857,70859,70861],{"class":230,"line":8160},[228,70858,70683],{"class":51415},[228,70860,51552],{"class":238},[228,70862,70863],{"class":343},"900px;\n",[228,70865,70866,70868,70870],{"class":230,"line":8172},[228,70867,70585],{"class":51415},[228,70869,51552],{"class":238},[228,70871,70872],{"class":343},"50px auto;\n",[228,70874,70875,70877,70879],{"class":230,"line":9831},[228,70876,70641],{"class":51415},[228,70878,51552],{"class":238},[228,70880,70646],{"class":343},[228,70882,70883],{"class":230,"line":9856},[228,70884,1679],{"class":238},[228,70886,70887],{"class":230,"line":9879},[228,70888,70889],{"class":343},".info  input, .info select {\n",[228,70891,70892,70894,70896],{"class":230,"line":9903},[228,70893,70683],{"class":51415},[228,70895,51552],{"class":238},[228,70897,70898],{"class":343},"80px;\n",[228,70900,70901,70904,70906],{"class":230,"line":9908},[228,70902,70903],{"class":51415},"  height",[228,70905,51552],{"class":238},[228,70907,70908],{"class":343},"27px;\n",[228,70910,70911,70914,70916],{"class":230,"line":9913},[228,70912,70913],{"class":51415},"  outline",[228,70915,51552],{"class":238},[228,70917,70622],{"class":343},[228,70919,70920,70923,70925],{"class":230,"line":9918},[228,70921,70922],{"class":51415},"  border-radius",[228,70924,51552],{"class":238},[228,70926,70927],{"class":343},"5px;\n",[228,70929,70930,70932],{"class":230,"line":9927},[228,70931,70770],{"class":343},[228,70933,70773],{"class":297},[228,70935,70936,70939,70941],{"class":230,"line":9932},[228,70937,70938],{"class":51415},"  padding-left",[228,70940,51552],{"class":238},[228,70942,70927],{"class":343},[228,70944,70945,70948,70950],{"class":230,"line":9938},[228,70946,70947],{"class":51415},"  box-sizing",[228,70949,51552],{"class":238},[228,70951,70952],{"class":343},"border-box;\n",[228,70954,70955,70958,70960],{"class":230,"line":9959},[228,70956,70957],{"class":51415},"  margin-right",[228,70959,51552],{"class":238},[228,70961,70962],{"class":343},"15px;\n",[228,70964,70965],{"class":230,"line":9965},[228,70966,1679],{"class":238},[228,70968,70969],{"class":230,"line":9979},[228,70970,70971],{"class":343},".info button {\n",[228,70973,70974,70976,70978],{"class":230,"line":9985},[228,70975,70683],{"class":51415},[228,70977,51552],{"class":238},[228,70979,70980],{"class":343},"60px;\n",[228,70982,70983,70985,70987],{"class":230,"line":10012},[228,70984,70903],{"class":51415},[228,70986,51552],{"class":238},[228,70988,70908],{"class":343},[228,70990,70991,70994,70996],{"class":230,"line":10021},[228,70992,70993],{"class":51415},"  background-color",[228,70995,51552],{"class":238},[228,70997,70998],{"class":297},"#004085;\n",[228,71000,71001,71003,71005],{"class":230,"line":10027},[228,71002,70913],{"class":51415},[228,71004,51552],{"class":238},[228,71006,70622],{"class":343},[228,71008,71009,71012,71014],{"class":230,"line":10035},[228,71010,71011],{"class":51415},"  border",[228,71013,51552],{"class":238},[228,71015,70590],{"class":343},[228,71017,71018,71021,71023],{"class":230,"line":10040},[228,71019,71020],{"class":51415},"  color",[228,71022,51552],{"class":238},[228,71024,70827],{"class":297},[228,71026,71027,71030,71032],{"class":230,"line":16719},[228,71028,71029],{"class":51415},"  cursor",[228,71031,51552],{"class":238},[228,71033,71034],{"class":343},"pointer;\n",[228,71036,71037,71039,71041],{"class":230,"line":16725},[228,71038,70922],{"class":51415},[228,71040,51552],{"class":238},[228,71042,70927],{"class":343},[228,71044,71045],{"class":230,"line":16748},[228,71046,1679],{"class":238},[228,71048,71049],{"class":230,"line":16754},[228,71050,71051],{"class":343},".info .age {\n",[228,71053,71054,71056,71058],{"class":230,"line":16777},[228,71055,70683],{"class":51415},[228,71057,51552],{"class":238},[228,71059,71060],{"class":343},"50px;\n",[228,71062,71063],{"class":230,"line":16791},[228,71064,1679],{"class":238},[19,71066,71067],{},"思路：",[19,71069,71070],{},[1576,71071],{"alt":141,"src":71072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,71074,71075],{},[1576,71076],{"alt":141,"src":71077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,71079,71080],{},[1576,71081],{"alt":141,"src":71082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[200,71084,71086],{"id":71085},"_3315-重绘回流","3.3.15 重绘回流",[19,71088,71089],{},[1576,71090],{"alt":141,"src":71091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,71093,71094],{},[1576,71095],{"alt":141,"src":71096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,71098,71099],{},[1576,71100],{"alt":141,"src":71101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,71103,71105],{"id":71104},"_34-bom","3.4 BOM",[19,71107,71108],{},[1576,71109],{"alt":141,"src":71110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,71112,71113],{},"平时写的document省略了window而已，实际上是window.document",[19,71115,71116],{},"函数也是这样，调用的时候实际为window.fn()",[19,71118,71119],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,71121,71122],{},"window大部分情况下可以省略",[200,71124,71126],{"id":71125},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,71128,71129],{},"只执行一次",[19,71131,71132],{},[1576,71133],{"alt":141,"src":71134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,71136,71137],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,71139,71140],{},[1576,71141],{"alt":141,"src":71142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[200,71144,71146],{"id":71145},"_342-js执行机制","3.4.2 JS执行机制",[19,71148,71149],{},[1576,71150],{"alt":141,"src":71151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,71153,71154],{},"两个的结果都是1111 3333 2222",[19,71156,71157],{},[1576,71158],{"alt":141,"src":71159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,71161,71162],{},[1576,71163],{"alt":141,"src":71164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,71166,71167],{},[1576,71168],{"alt":141,"src":71169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,71171,71172],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,71174,71175],{},"工作流程：",[19,71177,71178],{},[1576,71179],{"alt":141,"src":71180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,71182,71183],{},[1576,71184],{"alt":141,"src":71185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,71187,71188],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,71190,71191],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[200,71193,71195],{"id":71194},"_343-location对象","3.4.3 location对象",[19,71197,71198],{},"location对象属于window这个全局对象下的，可以 省略window",[19,71200,71201],{},[1576,71202],{"alt":141,"src":71203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,71205,71206],{},"href可以跳转页面",[183,71208,71209],{},[186,71210,71211],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,71213,71214],{},"search得到提交信息之后网站后边的地址",[19,71216,71217],{},[1576,71218],{"alt":141,"src":71219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,71221,71222],{},[1576,71223],{"alt":141,"src":71224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[183,71226,71227],{"start":142},[186,71228,71229],{},"hash:这个获取单页面应用#后边的地址",[19,71231,71232],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,71234,71235],{},[1576,71236],{"alt":141,"src":71237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[220,71239,71241],{"className":53182,"code":71240,"language":53184,"meta":141,"style":141},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[30,71242,71243,71263,71283],{"__ignoreMap":141},[228,71244,71245,71247,71249,71251,71253,71256,71259,71261],{"class":230,"line":231},[228,71246,52259],{"class":238},[228,71248,476],{"class":51415},[228,71250,61172],{"class":2077},[228,71252,284],{"class":238},[228,71254,71255],{"class":343},"\"#\u002Fmy\"",[228,71257,71258],{"class":238},">我的\u003C\u002F",[228,71260,476],{"class":51415},[228,71262,51422],{"class":238},[228,71264,71265,71267,71269,71271,71273,71276,71279,71281],{"class":230,"line":142},[228,71266,52259],{"class":238},[228,71268,476],{"class":51415},[228,71270,61172],{"class":2077},[228,71272,284],{"class":238},[228,71274,71275],{"class":343},"\"#\u002Ffriend\"",[228,71277,71278],{"class":238},">关注\u003C\u002F",[228,71280,476],{"class":51415},[228,71282,51422],{"class":238},[228,71284,71285,71287,71289,71291,71293,71296,71299,71301],{"class":230,"line":1293},[228,71286,52259],{"class":238},[228,71288,476],{"class":51415},[228,71290,61172],{"class":2077},[228,71292,284],{"class":238},[228,71294,71295],{"class":343},"\"#\u002Fdownload\"",[228,71297,71298],{"class":238},">下载\u003C\u002F",[228,71300,476],{"class":51415},[228,71302,51422],{"class":238},[19,71304,71305],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[183,71307,71308],{"start":1293},[186,71309,71310,71311,71313,71314,71316],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53831,71312],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53831,71315],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[200,71318,71320],{"id":71319},"_345-navigator对象","3.4.5 navigator对象",[19,71322,71323],{},[1576,71324],{"alt":141,"src":71325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[220,71327,71331],{"className":71328,"code":71329,"language":71330,"meta":141,"style":141},"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",[30,71332,71333,71338,71349,71361,71366,71417,71458,71463,71476,71488,71493],{"__ignoreMap":141},[228,71334,71335],{"class":230,"line":231},[228,71336,71337],{"class":297},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[228,71339,71340,71342,71344,71346],{"class":230,"line":142},[228,71341,32],{"class":234},[228,71343,239],{"class":238},[228,71345,54564],{"class":234},[228,71347,71348],{"class":238}," () { \n",[228,71350,71351,71353,71356,71358],{"class":230,"line":1293},[228,71352,6907],{"class":234},[228,71354,71355],{"class":287}," userAgent",[228,71357,13679],{"class":234},[228,71359,71360],{"class":238}," navigator.userAgent \n",[228,71362,71363],{"class":230,"line":1308},[228,71364,71365],{"class":297},"\u002F\u002F 验证是否为Android或iPhone \n",[228,71367,71368,71370,71373,71375,71378,71381,71383,71385,71388,71390,71393,71397,71399,71401,71403,71406,71408,71410,71412,71414],{"class":230,"line":1314},[228,71369,6907],{"class":234},[228,71371,71372],{"class":287}," android",[228,71374,13679],{"class":234},[228,71376,71377],{"class":238}," userAgent.",[228,71379,71380],{"class":2077},"match",[228,71382,239],{"class":238},[228,71384,822],{"class":343},[228,71386,71387],{"class":48092},"(Android);",[228,71389,1224],{"class":234},[228,71391,71392],{"class":287},"[\\s",[228,71394,71396],{"class":71395},"snhLl","\\\u002F",[228,71398,1178],{"class":287},[228,71400,719],{"class":234},[228,71402,239],{"class":48092},[228,71404,71405],{"class":287},"[\\d.]",[228,71407,719],{"class":234},[228,71409,667],{"class":48092},[228,71411,1224],{"class":234},[228,71413,822],{"class":343},[228,71415,71416],{"class":238},") \n",[228,71418,71419,71421,71424,71426,71428,71430,71432,71434,71437,71440,71443,71445,71447,71450,71452,71454,71456],{"class":230,"line":1328},[228,71420,6907],{"class":234},[228,71422,71423],{"class":287}," iphone",[228,71425,13679],{"class":234},[228,71427,71377],{"class":238},[228,71429,71380],{"class":2077},[228,71431,239],{"class":238},[228,71433,822],{"class":343},[228,71435,71436],{"class":48092},"(iPhone",[228,71438,71439],{"class":287},"\\s",[228,71441,71442],{"class":48092},"OS)",[228,71444,71439],{"class":287},[228,71446,239],{"class":48092},[228,71448,71449],{"class":287},"[\\d_]",[228,71451,719],{"class":234},[228,71453,667],{"class":48092},[228,71455,822],{"class":343},[228,71457,71416],{"class":238},[228,71459,71460],{"class":230,"line":1334},[228,71461,71462],{"class":297},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[228,71464,71465,71467,71470,71473],{"class":230,"line":1425},[228,71466,1645],{"class":234},[228,71468,71469],{"class":238}," (android ",[228,71471,71472],{"class":234},"||",[228,71474,71475],{"class":238}," iphone) { \n",[228,71477,71478,71481,71483,71486],{"class":230,"line":1431},[228,71479,71480],{"class":238},"location.href ",[228,71482,284],{"class":234},[228,71484,71485],{"class":343}," 'http:\u002F\u002Fm.itcast.cn'",[228,71487,2788],{"class":238},[228,71489,71490],{"class":230,"line":1443},[228,71491,71492],{"class":238},"} \n",[228,71494,71495],{"class":230,"line":1726},[228,71496,71497],{"class":238},"})()\n",[200,71499,71501],{"id":71500},"_346-histroy对象","3.4.6 histroy对象",[19,71503,71504],{},[1576,71505],{"alt":141,"src":71506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,71508,71509],{},"浏览器地址的前进与后退!!!",[19,71511,71512],{},"history.back() 等效于 history.go(-1)",[19,71514,71515],{},"history.forward() 等效于 history.go(1)",[14,71517,71519],{"id":71518},"_35-本地存储","3.5 本地存储",[183,71521,71522,71525,71528],{},[186,71523,71524],{},"数据存储在用户浏览器中",[186,71526,71527],{},"设置、读取方便、甚至页面刷新不丢失数据",[186,71529,71530],{},"容量较大，sessionStorage和localStorage约 5M 左右",[200,71532,71534],{"id":71533},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,71536,71537],{},"只能存储字符串",[19,71539,71540],{},[1576,71541],{"alt":141,"src":71542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,71544,71545],{},[1576,71546],{"alt":141,"src":71547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,71549,71550],{},"键值对要加引号,不然就会当变量来看了",[19,71552,71553],{},"localStorage.setItem('uname', 'pink')",[19,71555,71556],{},"刷新之后信息不再丢失",[19,71558,71559],{},"操作key,value会跟着变",[19,71561,71562],{},"删除只删除键就可以,即名字",[19,71564,71553],{},[19,71566,71567],{},"改:",[19,71569,71570],{},"localStorage.setItem('uname','red')",[19,71572,71573],{},"有这个键就是改,没有这个键就是改",[19,71575,71576],{},[1576,71577],{"alt":141,"src":71578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,71580,71581],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,71583,71584],{},[1576,71585],{"alt":141,"src":71586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,71588,71589],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[200,71591,71593],{"id":71592},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,71595,71596],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,71598,71599],{},"特性:",[183,71601,71602,71605,71608,71611],{},[186,71603,71604],{},"生命周期为关闭浏览器窗口",[186,71606,71607],{},"在同一个窗口(页面)下数据可以共享",[186,71609,71610],{},"以键值对的形式存储使用",[186,71612,71613],{},"用法跟localStorage 基本相同",[200,71615,71617],{"id":71616},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,71619,71620],{},"本地只能存储字符串,无法直接存储复杂数据类型",[220,71622,71624],{"className":53182,"code":71623,"language":53184,"meta":141,"style":141},"\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",[30,71625,71626,71634,71639,71644,71649,71654,71658,71663,71668],{"__ignoreMap":141},[228,71627,71628,71630,71632],{"class":230,"line":231},[228,71629,1148],{"class":238},[228,71631,51928],{"class":51415},[228,71633,51422],{"class":238},[228,71635,71636],{"class":230,"line":142},[228,71637,71638],{"class":238},"    const obj = {\n",[228,71640,71641],{"class":230,"line":1293},[228,71642,71643],{"class":238},"      uname: 'pink老师',\n",[228,71645,71646],{"class":230,"line":1308},[228,71647,71648],{"class":238},"      age: 18,\n",[228,71650,71651],{"class":230,"line":1314},[228,71652,71653],{"class":238},"      gender: '女'\n",[228,71655,71656],{"class":230,"line":1328},[228,71657,2301],{"class":238},[228,71659,71660],{"class":230,"line":1334},[228,71661,71662],{"class":238},"    \u002F\u002F 存储复杂数据类型\n",[228,71664,71665],{"class":230,"line":1425},[228,71666,71667],{"class":238},"    localStorage.setItem('obj', obj)\n",[228,71669,71670,71672,71674],{"class":230,"line":1431},[228,71671,52532],{"class":238},[228,71673,51928],{"class":51415},[228,71675,51422],{"class":238},[19,71677,71678],{},[1576,71679],{"alt":141,"src":71680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,71682,71683],{},"如果获取一下数据:",[19,71685,71686],{},"log(localStorage.getItem('obj'))",[19,71688,71689],{},[1576,71690],{"alt":141,"src":71691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,71693,71694],{},"发现直接存对象是使用不了的!!!",[22113,71696,71698],{"id":71697},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,71700,71701],{},[1576,71702],{"alt":141,"src":71703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[220,71705,71707],{"className":50748,"code":71706,"language":50750,"meta":141,"style":141},"\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",[30,71708,71709,71717,71727,71737,71746,71754,71758,71762,71788,71807,71815,71819,71824,71829],{"__ignoreMap":141},[228,71710,71711,71713,71715],{"class":230,"line":231},[228,71712,1148],{"class":238},[228,71714,51928],{"class":51415},[228,71716,51422],{"class":238},[228,71718,71719,71721,71723,71725],{"class":230,"line":142},[228,71720,11336],{"class":234},[228,71722,70086],{"class":287},[228,71724,13679],{"class":234},[228,71726,15687],{"class":238},[228,71728,71729,71732,71735],{"class":230,"line":1293},[228,71730,71731],{"class":238},"      uname: ",[228,71733,71734],{"class":343},"'pink老师'",[228,71736,31581],{"class":238},[228,71738,71739,71742,71744],{"class":230,"line":1308},[228,71740,71741],{"class":238},"      age: ",[228,71743,888],{"class":287},[228,71745,31581],{"class":238},[228,71747,71748,71751],{"class":230,"line":1314},[228,71749,71750],{"class":238},"      gender: ",[228,71752,71753],{"class":343},"'女'\n",[228,71755,71756],{"class":230,"line":1328},[228,71757,2301],{"class":238},[228,71759,71760],{"class":230,"line":1334},[228,71761,71662],{"class":297},[228,71763,71764,71767,71770,71772,71775,71777,71780,71782,71785],{"class":230,"line":1425},[228,71765,71766],{"class":238},"  localStorage.",[228,71768,71769],{"class":2077},"setItem",[228,71771,239],{"class":238},[228,71773,71774],{"class":343},"'obj'",[228,71776,12550],{"class":238},[228,71778,71779],{"class":287},"JSON",[228,71781,796],{"class":238},[228,71783,71784],{"class":2077},"stringify",[228,71786,71787],{"class":238},"(obj))\n",[228,71789,71790,71793,71795,71798,71801,71803,71805],{"class":230,"line":1431},[228,71791,71792],{"class":238},"  console.",[228,71794,58362],{"class":2077},[228,71796,71797],{"class":238},"(localStorage.",[228,71799,71800],{"class":2077},"getItem",[228,71802,239],{"class":238},[228,71804,71774],{"class":343},[228,71806,30612],{"class":238},[228,71808,71809,71811,71813],{"class":230,"line":1443},[228,71810,52532],{"class":238},[228,71812,51928],{"class":51415},[228,71814,51422],{"class":238},[228,71816,71817],{"class":230,"line":1726},[228,71818,70736],{"class":238},[228,71820,71821],{"class":230,"line":1731},[228,71822,71823],{"class":238},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[228,71825,71826],{"class":230,"line":1737},[228,71827,71828],{"class":238},"  类型是字符串的\n",[228,71830,71831],{"class":230,"line":1742},[228,71832,71833],{"class":238},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22113,71835,71837],{"id":71836},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,71839,71840],{},[1576,71841],{"alt":141,"src":71842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,71844,71845],{},[1576,71846],{"alt":141,"src":71847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[220,71849,71851],{"className":53182,"code":71850,"language":53184,"meta":141,"style":141},"  \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",[30,71852,71853,71861,71865,71869,71873,71877,71881,71886,71891,71896,71901,71906,71911,71916,71921],{"__ignoreMap":141},[228,71854,71855,71857,71859],{"class":230,"line":231},[228,71856,52259],{"class":238},[228,71858,51928],{"class":51415},[228,71860,51422],{"class":238},[228,71862,71863],{"class":230,"line":142},[228,71864,71638],{"class":238},[228,71866,71867],{"class":230,"line":1293},[228,71868,71643],{"class":238},[228,71870,71871],{"class":230,"line":1308},[228,71872,71648],{"class":238},[228,71874,71875],{"class":230,"line":1314},[228,71876,71653],{"class":238},[228,71878,71879],{"class":230,"line":1328},[228,71880,2301],{"class":238},[228,71882,71883],{"class":230,"line":1334},[228,71884,71885],{"class":238},"    \u002F\u002F 1.存储复杂数据类型\n",[228,71887,71888],{"class":230,"line":1425},[228,71889,71890],{"class":238},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[228,71892,71893],{"class":230,"line":1431},[228,71894,71895],{"class":238},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[228,71897,71898],{"class":230,"line":1443},[228,71899,71900],{"class":238},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[228,71902,71903],{"class":230,"line":1726},[228,71904,71905],{"class":238},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[228,71907,71908],{"class":230,"line":1731},[228,71909,71910],{"class":238},"    \u002F\u002F 取\n",[228,71912,71913],{"class":230,"line":1737},[228,71914,71915],{"class":238},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[228,71917,71918],{"class":230,"line":1742},[228,71919,71920],{"class":238},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[228,71922,71923,71925,71927],{"class":230,"line":1756},[228,71924,52532],{"class":238},[228,71926,51928],{"class":51415},[228,71928,51422],{"class":238},[19,71930,71931],{},[1576,71932],{"alt":141,"src":71933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[200,71935,71937],{"id":71936},"_356-数组map方法","3.5.6 数组map方法",[19,71939,71940],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,71942,71943],{},[1576,71944],{"alt":141,"src":71945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,71947,71948],{},[1576,71949],{"alt":141,"src":71950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,71952,71953,71956],{},[388,71954,71955],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,71958,71959],{},"map有返回值，但是forEach没有返回值",[19,71961,71962],{},"map是个方法。用的时候要加 ()",[19,71964,71965],{},"map返回的是一个数组",[200,71967,71969],{"id":71968},"_357-数组中join方法","3.5.7 数组中join方法",[19,71971,71972],{},[1576,71973],{"alt":141,"src":71974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,71976,71977],{},"类似于python中拼接字符串一样！",[183,71979,71980,71983,71986],{},[186,71981,71982],{},"小括号为空则逗号分开",[186,71984,71985],{},"小括号为空字符串 ''，则元素之间没有分隔符",[186,71987,71988],{},"小括号用啥符号就用进行分割",[200,71990,71992],{"id":71991},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[183,71994,71995,71998,72001,72004,72007],{},[186,71996,71997],{},"记住本地时间获取快速方式：new Date().toDateString()",[186,71999,72000],{},"尽量减少DOM操作，用好map+join的渲染方式",[186,72002,72003],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[186,72005,72006],{},"return可以实现函数的结束",[186,72008,72009],{},"禁止跳转是 preventDefault() 不要忘记",[220,72011,72013],{"className":50748,"code":72012,"language":50750,"meta":141,"style":141},"\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",[30,72014,72015,72025,72039,72043,72051,72065,72085,72097,72105,72111,72121,72131,72135,72139,72145,72155,72167,72171,72175,72182,72194,72208,72218,72222,72226,72233,72240,72247,72259,72271,72281,72293,72297,72301,72308,72315,72327,72339,72349,72361,72391,72395,72399,72406,72418,72430,72454,72464,72474,72478,72482,72490,72501,72513,72525,72537,72554,72566,72578,72582,72586,72593,72605,72617,72629,72640,72658,72671,72683,72707,72718,72722,72726,72734,72744,72748,72752,72758,72770,72781,72791,72795,72799,72805,72827,72831,72835,72841,72847,72859,72869,72881,72911,72924,72941,72945,72949,72960,72982,72992,72996,73000,73013,73023,73035,73047,73059,73071,73081,73091,73101,73112,73125,73129,73137,73145,73149,73157,73170,73190,73223,73256,73289,73315,73333,73351,73359,73385,73403,73421,73439,73457,73475,73483,73491,73509,73517,73546,73554,73562,73570,73583,73595,73607,73619,73631,73643,73656,73668,73676,73684,73692,73697,73702,73706,73710,73714,73718,73722,73726,73731,73736,73741,73746,73754,73762,73770,73775,73780,73785,73790,73795,73800,73805,73810,73815,73820,73825,73830,73835,73840,73844,73849,73854,73864,73873,73877,73882,73891,73907,73949,73989,74028,74093,74101,74105,74110,74128,74136,74141,74146,74176,74182,74187,74200,74212,74224,74236,74248,74260,74272,74276,74286,74290,74295,74300,74304,74313,74317,74322,74327,74346,74351,74371,74375,74380,74384,74389,74407,74425,74443,74462,74481,74500,74505,74511,74532,74538,74547,74553,74559,74565,74592,74605,74610,74620,74626,74632,74638,74644,74649,74655,74661,74667,74673,74706,74711,74716,74721,74726,74732,74738,74744,74755,74760,74766,74773,74787,74793,74817,74822,74827,74833,74839,74860,74866,74879,74885,74891,74897,74903,74908,74914,74920,74926,74944,74958,74964,74972,74978,75000,75005,75010,75015,75020,75025,75034,75043,75048],{"__ignoreMap":141},[228,72016,72017,72019,72021,72023],{"class":230,"line":231},[228,72018,51412],{"class":238},[228,72020,51416],{"class":51415},[228,72022,51419],{"class":2077},[228,72024,51422],{"class":238},[228,72026,72027,72029,72031,72033,72035,72037],{"class":230,"line":142},[228,72028,1148],{"class":238},[228,72030,50750],{"class":51415},[228,72032,51431],{"class":2077},[228,72034,284],{"class":238},[228,72036,51436],{"class":343},[228,72038,51422],{"class":238},[228,72040,72041],{"class":230,"line":1293},[228,72042,2514],{"emptyLinePlaceholder":157},[228,72044,72045,72047,72049],{"class":230,"line":1308},[228,72046,1148],{"class":238},[228,72048,51449],{"class":51415},[228,72050,51422],{"class":238},[228,72052,72053,72055,72057,72059,72061,72063],{"class":230,"line":1314},[228,72054,52259],{"class":238},[228,72056,51459],{"class":51415},[228,72058,51462],{"class":2077},[228,72060,284],{"class":238},[228,72062,51467],{"class":343},[228,72064,51422],{"class":238},[228,72066,72067,72069,72071,72073,72075,72077,72079,72081,72083],{"class":230,"line":1328},[228,72068,52259],{"class":238},[228,72070,51459],{"class":51415},[228,72072,15035],{"class":2077},[228,72074,284],{"class":238},[228,72076,51506],{"class":343},[228,72078,51486],{"class":2077},[228,72080,284],{"class":238},[228,72082,51513],{"class":343},[228,72084,51422],{"class":238},[228,72086,72087,72089,72091,72093,72095],{"class":230,"line":1334},[228,72088,52259],{"class":238},[228,72090,51522],{"class":51415},[228,72092,51525],{"class":238},[228,72094,51522],{"class":51415},[228,72096,51422],{"class":238},[228,72098,72099,72101,72103],{"class":230,"line":1425},[228,72100,52259],{"class":238},[228,72102,5241],{"class":51415},[228,72104,51422],{"class":238},[228,72106,72107,72109],{"class":230,"line":1431},[228,72108,6518],{"class":51415},[228,72110,15687],{"class":238},[228,72112,72113,72115,72117,72119],{"class":230,"line":1443},[228,72114,54810],{"class":287},[228,72116,51552],{"class":238},[228,72118,430],{"class":287},[228,72120,1404],{"class":238},[228,72122,72123,72125,72127,72129],{"class":230,"line":1726},[228,72124,54821],{"class":287},[228,72126,51552],{"class":238},[228,72128,430],{"class":287},[228,72130,1404],{"class":238},[228,72132,72133],{"class":230,"line":1731},[228,72134,2301],{"class":238},[228,72136,72137],{"class":230,"line":1737},[228,72138,2514],{"emptyLinePlaceholder":157},[228,72140,72141,72143],{"class":230,"line":1742},[228,72142,57394],{"class":51415},[228,72144,15687],{"class":238},[228,72146,72147,72149,72151,72153],{"class":230,"line":1756},[228,72148,57401],{"class":287},[228,72150,51552],{"class":238},[228,72152,51707],{"class":287},[228,72154,1404],{"class":238},[228,72156,72157,72159,72161,72163,72165],{"class":230,"line":1761},[228,72158,62192],{"class":287},[228,72160,51552],{"class":238},[228,72162,938],{"class":287},[228,72164,51607],{"class":234},[228,72166,1404],{"class":238},[228,72168,72169],{"class":230,"line":1767},[228,72170,2301],{"class":238},[228,72172,72173],{"class":230,"line":1788},[228,72174,2514],{"emptyLinePlaceholder":157},[228,72176,72177,72180],{"class":230,"line":1793},[228,72178,72179],{"class":2077},"    .info",[228,72181,15687],{"class":238},[228,72183,72184,72186,72188,72190,72192],{"class":230,"line":1807},[228,72185,54886],{"class":287},[228,72187,51552],{"class":238},[228,72189,51604],{"class":287},[228,72191,51607],{"class":234},[228,72193,1404],{"class":238},[228,72195,72196,72198,72200,72202,72204,72206],{"class":230,"line":1812},[228,72197,54821],{"class":287},[228,72199,51552],{"class":238},[228,72201,684],{"class":287},[228,72203,51607],{"class":234},[228,72205,51671],{"class":287},[228,72207,1404],{"class":238},[228,72209,72210,72212,72214,72216],{"class":230,"line":1841},[228,72211,57401],{"class":287},[228,72213,51552],{"class":238},[228,72215,51707],{"class":287},[228,72217,1404],{"class":238},[228,72219,72220],{"class":230,"line":1846},[228,72221,2301],{"class":238},[228,72223,72224],{"class":230,"line":1863},[228,72225,2514],{"emptyLinePlaceholder":157},[228,72227,72228,72231],{"class":230,"line":1868},[228,72229,72230],{"class":2077},"    .uname",[228,72232,31581],{"class":238},[228,72234,72235,72238],{"class":230,"line":1873},[228,72236,72237],{"class":2077},"    .age",[228,72239,31581],{"class":238},[228,72241,72242,72245],{"class":230,"line":1878},[228,72243,72244],{"class":2077},"    .salary",[228,72246,15687],{"class":238},[228,72248,72249,72251,72253,72255,72257],{"class":230,"line":1892},[228,72250,54886],{"class":287},[228,72252,51552],{"class":238},[228,72254,549],{"class":287},[228,72256,51607],{"class":234},[228,72258,1404],{"class":238},[228,72260,72261,72263,72265,72267,72269],{"class":230,"line":1897},[228,72262,54900],{"class":287},[228,72264,51552],{"class":238},[228,72266,938],{"class":287},[228,72268,51607],{"class":234},[228,72270,1404],{"class":238},[228,72272,72273,72275,72277,72279],{"class":230,"line":2691},[228,72274,61895],{"class":287},[228,72276,51552],{"class":238},[228,72278,54852],{"class":287},[228,72280,1404],{"class":238},[228,72282,72283,72285,72287,72289,72291],{"class":230,"line":2705},[228,72284,61865],{"class":287},[228,72286,51552],{"class":238},[228,72288,813],{"class":287},[228,72290,51607],{"class":234},[228,72292,1404],{"class":238},[228,72294,72295],{"class":230,"line":2713},[228,72296,2301],{"class":238},[228,72298,72299],{"class":230,"line":2718},[228,72300,2514],{"emptyLinePlaceholder":157},[228,72302,72303,72306],{"class":230,"line":2724},[228,72304,72305],{"class":2077},"    .gender",[228,72307,31581],{"class":238},[228,72309,72310,72313],{"class":230,"line":2730},[228,72311,72312],{"class":2077},"    .city",[228,72314,15687],{"class":238},[228,72316,72317,72319,72321,72323,72325],{"class":230,"line":2735},[228,72318,54886],{"class":287},[228,72320,51552],{"class":238},[228,72322,549],{"class":287},[228,72324,51607],{"class":234},[228,72326,1404],{"class":238},[228,72328,72329,72331,72333,72335,72337],{"class":230,"line":8063},[228,72330,54900],{"class":287},[228,72332,51552],{"class":238},[228,72334,1063],{"class":287},[228,72336,51607],{"class":234},[228,72338,1404],{"class":238},[228,72340,72341,72343,72345,72347],{"class":230,"line":8087},[228,72342,61895],{"class":287},[228,72344,51552],{"class":238},[228,72346,54852],{"class":287},[228,72348,1404],{"class":238},[228,72350,72351,72353,72355,72357,72359],{"class":230,"line":8092},[228,72352,61865],{"class":287},[228,72354,51552],{"class":238},[228,72356,813],{"class":287},[228,72358,51607],{"class":234},[228,72360,1404],{"class":238},[228,72362,72363,72365,72367,72369,72371,72373,72376,72378,72380,72382,72385,72387,72389],{"class":230,"line":8098},[228,72364,62092],{"class":287},[228,72366,51552],{"class":238},[228,72368,456],{"class":287},[228,72370,51607],{"class":234},[228,72372,51636],{"class":287},[228,72374,72375],{"class":287}," rgb",[228,72377,239],{"class":238},[228,72379,1836],{"class":287},[228,72381,12550],{"class":238},[228,72383,72384],{"class":287},"197",[228,72386,12550],{"class":238},[228,72388,72384],{"class":287},[228,72390,2833],{"class":238},[228,72392,72393],{"class":230,"line":8125},[228,72394,2301],{"class":238},[228,72396,72397],{"class":230,"line":8130},[228,72398,2514],{"emptyLinePlaceholder":157},[228,72400,72401,72404],{"class":230,"line":8136},[228,72402,72403],{"class":51415},"    button",[228,72405,15687],{"class":238},[228,72407,72408,72410,72412,72414,72416],{"class":230,"line":8148},[228,72409,54900],{"class":287},[228,72411,51552],{"class":238},[228,72413,1063],{"class":287},[228,72415,51607],{"class":234},[228,72417,1404],{"class":238},[228,72419,72420,72422,72424,72426,72428],{"class":230,"line":8160},[228,72421,54886],{"class":287},[228,72423,51552],{"class":238},[228,72425,722],{"class":287},[228,72427,51607],{"class":234},[228,72429,1404],{"class":238},[228,72431,72432,72434,72436,72439,72441,72443,72445,72448,72450,72452],{"class":230,"line":8172},[228,72433,54999],{"class":287},[228,72435,51552],{"class":238},[228,72437,72438],{"class":287},"rgb",[228,72440,239],{"class":238},[228,72442,1207],{"class":287},[228,72444,12550],{"class":238},[228,72446,72447],{"class":287},"187",[228,72449,12550],{"class":238},[228,72451,537],{"class":287},[228,72453,2833],{"class":238},[228,72455,72456,72458,72460,72462],{"class":230,"line":9831},[228,72457,57531],{"class":287},[228,72459,51552],{"class":238},[228,72461,60957],{"class":287},[228,72463,1404],{"class":238},[228,72465,72466,72468,72470,72472],{"class":230,"line":9856},[228,72467,62092],{"class":287},[228,72469,51552],{"class":238},[228,72471,430],{"class":287},[228,72473,1404],{"class":238},[228,72475,72476],{"class":230,"line":9879},[228,72477,2301],{"class":238},[228,72479,72480],{"class":230,"line":9903},[228,72481,2514],{"emptyLinePlaceholder":157},[228,72483,72484,72486,72488],{"class":230,"line":9908},[228,72485,72403],{"class":51415},[228,72487,51803],{"class":51415},[228,72489,15687],{"class":238},[228,72491,72492,72494,72496,72499],{"class":230,"line":9913},[228,72493,55124],{"class":287},[228,72495,51552],{"class":238},[228,72497,72498],{"class":287},"inline-block",[228,72500,1404],{"class":238},[228,72502,72503,72505,72507,72509,72511],{"class":230,"line":9918},[228,72504,54886],{"class":287},[228,72506,51552],{"class":238},[228,72508,684],{"class":287},[228,72510,51607],{"class":234},[228,72512,1404],{"class":238},[228,72514,72515,72517,72519,72521,72523],{"class":230,"line":9927},[228,72516,54900],{"class":287},[228,72518,51552],{"class":238},[228,72520,684],{"class":287},[228,72522,51607],{"class":234},[228,72524,1404],{"class":238},[228,72526,72527,72529,72531,72533,72535],{"class":230,"line":9932},[228,72528,57474],{"class":287},[228,72530,51552],{"class":238},[228,72532,710],{"class":287},[228,72534,51607],{"class":234},[228,72536,1404],{"class":238},[228,72538,72539,72541,72543,72545,72547,72549,72552],{"class":230,"line":9938},[228,72540,62092],{"class":287},[228,72542,51552],{"class":238},[228,72544,456],{"class":287},[228,72546,51607],{"class":234},[228,72548,51636],{"class":287},[228,72550,72551],{"class":287}," #fff",[228,72553,1404],{"class":238},[228,72555,72556,72558,72560,72562,72564],{"class":230,"line":9959},[228,72557,55249],{"class":287},[228,72559,51552],{"class":238},[228,72561,557],{"class":287},[228,72563,51607],{"class":234},[228,72565,1404],{"class":238},[228,72567,72568,72570,72572,72574,72576],{"class":230,"line":9965},[228,72569,61865],{"class":287},[228,72571,51552],{"class":238},[228,72573,456],{"class":287},[228,72575,51607],{"class":234},[228,72577,1404],{"class":238},[228,72579,72580],{"class":230,"line":9979},[228,72581,2301],{"class":238},[228,72583,72584],{"class":230,"line":9985},[228,72585,2514],{"emptyLinePlaceholder":157},[228,72587,72588,72591],{"class":230,"line":10012},[228,72589,72590],{"class":2077},"    .total",[228,72592,15687],{"class":238},[228,72594,72595,72597,72599,72601,72603],{"class":230,"line":10021},[228,72596,54886],{"class":287},[228,72598,51552],{"class":238},[228,72600,61744],{"class":287},[228,72602,51607],{"class":234},[228,72604,1404],{"class":238},[228,72606,72607,72609,72611,72613,72615],{"class":230,"line":10027},[228,72608,54900],{"class":287},[228,72610,51552],{"class":238},[228,72612,639],{"class":287},[228,72614,51607],{"class":234},[228,72616,1404],{"class":238},[228,72618,72619,72621,72623,72625,72627],{"class":230,"line":10035},[228,72620,57474],{"class":287},[228,72622,51552],{"class":238},[228,72624,639],{"class":287},[228,72626,51607],{"class":234},[228,72628,1404],{"class":238},[228,72630,72631,72633,72635,72638],{"class":230,"line":10040},[228,72632,57401],{"class":287},[228,72634,51552],{"class":238},[228,72636,72637],{"class":287},"right",[228,72639,1404],{"class":238},[228,72641,72642,72644,72646,72648,72650,72652,72654,72656],{"class":230,"line":16719},[228,72643,54821],{"class":287},[228,72645,51552],{"class":238},[228,72647,639],{"class":287},[228,72649,51607],{"class":234},[228,72651,51671],{"class":287},[228,72653,2152],{"class":287},[228,72655,51607],{"class":234},[228,72657,1404],{"class":238},[228,72659,72660,72663,72665,72667,72669],{"class":230,"line":16725},[228,72661,72662],{"class":287},"      padding-right",[228,72664,51552],{"class":238},[228,72666,684],{"class":287},[228,72668,51607],{"class":234},[228,72670,1404],{"class":238},[228,72672,72673,72675,72677,72679,72681],{"class":230,"line":16748},[228,72674,55037],{"class":287},[228,72676,51552],{"class":238},[228,72678,761],{"class":287},[228,72680,51607],{"class":234},[228,72682,1404],{"class":238},[228,72684,72685,72687,72689,72691,72693,72696,72698,72701,72703,72705],{"class":230,"line":16754},[228,72686,54999],{"class":287},[228,72688,51552],{"class":238},[228,72690,72438],{"class":287},[228,72692,239],{"class":238},[228,72694,72695],{"class":287},"237",[228,72697,12550],{"class":238},[228,72699,72700],{"class":287},"235",[228,72702,12550],{"class":238},[228,72704,72700],{"class":287},[228,72706,2833],{"class":238},[228,72708,72709,72712,72714,72716],{"class":230,"line":16777},[228,72710,72711],{"class":287},"      box-sizing",[228,72713,51552],{"class":238},[228,72715,60620],{"class":287},[228,72717,1404],{"class":238},[228,72719,72720],{"class":230,"line":16791},[228,72721,2301],{"class":238},[228,72723,72724],{"class":230,"line":16811},[228,72725,2514],{"emptyLinePlaceholder":157},[228,72727,72728,72730,72732],{"class":230,"line":16817},[228,72729,72590],{"class":2077},[228,72731,51803],{"class":51415},[228,72733,15687],{"class":238},[228,72735,72736,72738,72740,72742],{"class":230,"line":16828},[228,72737,57531],{"class":287},[228,72739,51552],{"class":238},[228,72741,57536],{"class":287},[228,72743,1404],{"class":238},[228,72745,72746],{"class":230,"line":16851},[228,72747,2301],{"class":238},[228,72749,72750],{"class":230,"line":16873},[228,72751,2514],{"emptyLinePlaceholder":157},[228,72753,72754,72756],{"class":230,"line":16878},[228,72755,65138],{"class":51415},[228,72757,15687],{"class":238},[228,72759,72760,72762,72764,72766,72768],{"class":230,"line":16884},[228,72761,54886],{"class":287},[228,72763,51552],{"class":238},[228,72765,61744],{"class":287},[228,72767,51607],{"class":234},[228,72769,1404],{"class":238},[228,72771,72772,72774,72776,72779],{"class":230,"line":16898},[228,72773,54821],{"class":287},[228,72775,51552],{"class":238},[228,72777,72778],{"class":287},"auto",[228,72780,1404],{"class":238},[228,72782,72783,72785,72787,72789],{"class":230,"line":16911},[228,72784,65145],{"class":287},[228,72786,51552],{"class":238},[228,72788,65150],{"class":287},[228,72790,1404],{"class":238},[228,72792,72793],{"class":230,"line":16916},[228,72794,2301],{"class":238},[228,72796,72797],{"class":230,"line":16930},[228,72798,2514],{"emptyLinePlaceholder":157},[228,72800,72801,72803],{"class":230,"line":16935},[228,72802,65230],{"class":51415},[228,72804,15687],{"class":238},[228,72806,72807,72809,72811,72813,72815,72817,72819,72821,72823,72825],{"class":230,"line":16941},[228,72808,54999],{"class":287},[228,72810,51552],{"class":238},[228,72812,72438],{"class":287},[228,72814,239],{"class":238},[228,72816,72695],{"class":287},[228,72818,12550],{"class":238},[228,72820,72700],{"class":287},[228,72822,12550],{"class":238},[228,72824,72700],{"class":287},[228,72826,2833],{"class":238},[228,72828,72829],{"class":230,"line":16946},[228,72830,2301],{"class":238},[228,72832,72833],{"class":230,"line":16960},[228,72834,2514],{"emptyLinePlaceholder":157},[228,72836,72837,72839],{"class":230,"line":16965},[228,72838,65230],{"class":51415},[228,72840,31581],{"class":238},[228,72842,72843,72845],{"class":230,"line":16970},[228,72844,65296],{"class":51415},[228,72846,15687],{"class":238},[228,72848,72849,72851,72853,72855,72857],{"class":230,"line":16984},[228,72850,54900],{"class":287},[228,72852,51552],{"class":238},[228,72854,511],{"class":287},[228,72856,51607],{"class":234},[228,72858,1404],{"class":238},[228,72860,72861,72863,72865,72867],{"class":230,"line":16996},[228,72862,57401],{"class":287},[228,72864,51552],{"class":238},[228,72866,23851],{"class":287},[228,72868,1404],{"class":238},[228,72870,72871,72873,72875,72877,72879],{"class":230,"line":17001},[228,72872,55037],{"class":287},[228,72874,51552],{"class":238},[228,72876,787],{"class":287},[228,72878,51607],{"class":234},[228,72880,1404],{"class":238},[228,72882,72883,72885,72887,72889,72891,72893,72895,72897,72900,72902,72905,72907,72909],{"class":230,"line":17014},[228,72884,62092],{"class":287},[228,72886,51552],{"class":238},[228,72888,456],{"class":287},[228,72890,51607],{"class":234},[228,72892,51636],{"class":287},[228,72894,72375],{"class":287},[228,72896,239],{"class":238},[228,72898,72899],{"class":287},"228",[228,72901,12550],{"class":238},[228,72903,72904],{"class":287},"225",[228,72906,12550],{"class":238},[228,72908,72904],{"class":287},[228,72910,2833],{"class":238},[228,72912,72913,72916,72918,72920,72922],{"class":230,"line":17019},[228,72914,72915],{"class":287},"      padding-left",[228,72917,51552],{"class":238},[228,72919,557],{"class":287},[228,72921,51607],{"class":234},[228,72923,1404],{"class":238},[228,72925,72926,72928,72930,72932,72935,72937,72939],{"class":230,"line":17024},[228,72927,61975],{"class":287},[228,72929,51552],{"class":238},[228,72931,28237],{"class":287},[228,72933,72934],{"class":287}," linear",[228,72936,61982],{"class":287},[228,72938,933],{"class":234},[228,72940,1404],{"class":238},[228,72942,72943],{"class":230,"line":17029},[228,72944,2301],{"class":238},[228,72946,72947],{"class":230,"line":17042},[228,72948,2514],{"emptyLinePlaceholder":157},[228,72950,72951,72954,72956,72958],{"class":230,"line":17047},[228,72952,72953],{"class":51415},"    tbody",[228,72955,70259],{"class":51415},[228,72957,61055],{"class":2077},[228,72959,15687],{"class":238},[228,72961,72962,72964,72966,72968,72970,72972,72974,72976,72978,72980],{"class":230,"line":32748},[228,72963,54999],{"class":287},[228,72965,51552],{"class":238},[228,72967,72438],{"class":287},[228,72969,239],{"class":238},[228,72971,72695],{"class":287},[228,72973,12550],{"class":238},[228,72975,72700],{"class":287},[228,72977,12550],{"class":238},[228,72979,72700],{"class":287},[228,72981,2833],{"class":238},[228,72983,72984,72986,72988,72990],{"class":230,"line":32754},[228,72985,62140],{"class":287},[228,72987,51552],{"class":238},[228,72989,62145],{"class":287},[228,72991,1404],{"class":238},[228,72993,72994],{"class":230,"line":32760},[228,72995,2301],{"class":238},[228,72997,72998],{"class":230,"line":32766},[228,72999,2514],{"emptyLinePlaceholder":157},[228,73001,73002,73004,73006,73009,73011],{"class":230,"line":32772},[228,73003,72953],{"class":51415},[228,73005,70259],{"class":51415},[228,73007,73008],{"class":51415}," td",[228,73010,1512],{"class":51415},[228,73012,15687],{"class":238},[228,73014,73015,73017,73019,73021],{"class":230,"line":32783},[228,73016,55124],{"class":287},[228,73018,51552],{"class":238},[228,73020,60984],{"class":287},[228,73022,1404],{"class":238},[228,73024,73025,73027,73029,73031,73033],{"class":230,"line":32789},[228,73026,54886],{"class":287},[228,73028,51552],{"class":238},[228,73030,1145],{"class":287},[228,73032,51607],{"class":234},[228,73034,1404],{"class":238},[228,73036,73037,73039,73041,73043,73045],{"class":230,"line":32809},[228,73038,54900],{"class":287},[228,73040,51552],{"class":238},[228,73042,1063],{"class":287},[228,73044,51607],{"class":234},[228,73046,1404],{"class":238},[228,73048,73049,73051,73053,73055,73057],{"class":230,"line":32815},[228,73050,57474],{"class":287},[228,73052,51552],{"class":238},[228,73054,1063],{"class":287},[228,73056,51607],{"class":234},[228,73058,1404],{"class":238},[228,73060,73061,73063,73065,73067,73069],{"class":230,"line":32826},[228,73062,62192],{"class":287},[228,73064,51552],{"class":238},[228,73066,316],{"class":287},[228,73068,51607],{"class":234},[228,73070,1404],{"class":238},[228,73072,73073,73075,73077,73079],{"class":230,"line":32832},[228,73074,57531],{"class":287},[228,73076,51552],{"class":238},[228,73078,60957],{"class":287},[228,73080,1404],{"class":238},[228,73082,73083,73085,73087,73089],{"class":230,"line":32838},[228,73084,57401],{"class":287},[228,73086,51552],{"class":238},[228,73088,51707],{"class":287},[228,73090,1404],{"class":238},[228,73092,73093,73095,73097,73099],{"class":230,"line":32844},[228,73094,64085],{"class":287},[228,73096,51552],{"class":238},[228,73098,54852],{"class":287},[228,73100,1404],{"class":238},[228,73102,73103,73105,73107,73110],{"class":230,"line":32850},[228,73104,54999],{"class":287},[228,73106,51552],{"class":238},[228,73108,73109],{"class":287},"orange",[228,73111,1404],{"class":238},[228,73113,73114,73116,73118,73121,73123],{"class":230,"line":32856},[228,73115,55249],{"class":287},[228,73117,51552],{"class":238},[228,73119,73120],{"class":287},"12.5",[228,73122,51607],{"class":234},[228,73124,1404],{"class":238},[228,73126,73127],{"class":230,"line":32862},[228,73128,2301],{"class":238},[228,73130,73131,73133,73135],{"class":230,"line":32868},[228,73132,52532],{"class":238},[228,73134,5241],{"class":51415},[228,73136,51422],{"class":238},[228,73138,73139,73141,73143],{"class":230,"line":32888},[228,73140,51900],{"class":238},[228,73142,51449],{"class":51415},[228,73144,51422],{"class":238},[228,73146,73147],{"class":230,"line":32894},[228,73148,2514],{"emptyLinePlaceholder":157},[228,73150,73151,73153,73155],{"class":230,"line":32910},[228,73152,1148],{"class":238},[228,73154,51915],{"class":51415},[228,73156,51422],{"class":238},[228,73158,73159,73161,73163,73166,73168],{"class":230,"line":32916},[228,73160,52259],{"class":238},[228,73162,14],{"class":51415},[228,73164,73165],{"class":238},">学生就业统计表\u003C\u002F",[228,73167,14],{"class":51415},[228,73169,51422],{"class":238},[228,73171,73172,73174,73176,73178,73180,73182,73184,73186,73188],{"class":230,"line":32930},[228,73173,52259],{"class":238},[228,73175,66740],{"class":51415},[228,73177,53601],{"class":2077},[228,73179,284],{"class":238},[228,73181,62779],{"class":343},[228,73183,69185],{"class":2077},[228,73185,284],{"class":238},[228,73187,31891],{"class":343},[228,73189,51422],{"class":238},[228,73191,73192,73194,73196,73198,73200,73202,73204,73206,73208,73210,73212,73215,73217,73219,73221],{"class":230,"line":32936},[228,73193,51456],{"class":238},[228,73195,53936],{"class":51415},[228,73197,53939],{"class":2077},[228,73199,284],{"class":238},[228,73201,62814],{"class":343},[228,73203,15035],{"class":2077},[228,73205,284],{"class":238},[228,73207,69211],{"class":343},[228,73209,61135],{"class":2077},[228,73211,284],{"class":238},[228,73213,73214],{"class":343},"\"姓名\"",[228,73216,53601],{"class":2077},[228,73218,284],{"class":238},[228,73220,69211],{"class":343},[228,73222,51422],{"class":238},[228,73224,73225,73227,73229,73231,73233,73235,73237,73239,73241,73243,73245,73248,73250,73252,73254],{"class":230,"line":32951},[228,73226,51456],{"class":238},[228,73228,53936],{"class":51415},[228,73230,53939],{"class":2077},[228,73232,284],{"class":238},[228,73234,62814],{"class":343},[228,73236,15035],{"class":2077},[228,73238,284],{"class":238},[228,73240,69239],{"class":343},[228,73242,61135],{"class":2077},[228,73244,284],{"class":238},[228,73246,73247],{"class":343},"\"年龄\"",[228,73249,53601],{"class":2077},[228,73251,284],{"class":238},[228,73253,69239],{"class":343},[228,73255,51422],{"class":238},[228,73257,73258,73260,73262,73264,73266,73268,73270,73272,73274,73276,73278,73281,73283,73285,73287],{"class":230,"line":32957},[228,73259,51456],{"class":238},[228,73261,53936],{"class":51415},[228,73263,53939],{"class":2077},[228,73265,284],{"class":238},[228,73267,62814],{"class":343},[228,73269,15035],{"class":2077},[228,73271,284],{"class":238},[228,73273,69341],{"class":343},[228,73275,61135],{"class":2077},[228,73277,284],{"class":238},[228,73279,73280],{"class":343},"\"薪资\"",[228,73282,53601],{"class":2077},[228,73284,284],{"class":238},[228,73286,69341],{"class":343},[228,73288,51422],{"class":238},[228,73290,73291,73293,73295,73297,73299,73301,73303,73305,73307,73309,73311,73313],{"class":230,"line":32966},[228,73292,51456],{"class":238},[228,73294,69259],{"class":51415},[228,73296,15035],{"class":2077},[228,73298,284],{"class":238},[228,73300,69266],{"class":343},[228,73302,15074],{"class":2077},[228,73304,284],{"class":238},[228,73306,7767],{"class":343},[228,73308,53601],{"class":2077},[228,73310,284],{"class":238},[228,73312,69266],{"class":343},[228,73314,51422],{"class":238},[228,73316,73317,73319,73321,73323,73325,73327,73329,73331],{"class":230,"line":32972},[228,73318,55349],{"class":238},[228,73320,69281],{"class":51415},[228,73322,66766],{"class":2077},[228,73324,284],{"class":238},[228,73326,10076],{"class":343},[228,73328,69290],{"class":238},[228,73330,69281],{"class":51415},[228,73332,51422],{"class":238},[228,73334,73335,73337,73339,73341,73343,73345,73347,73349],{"class":230,"line":32981},[228,73336,55349],{"class":238},[228,73338,69281],{"class":51415},[228,73340,66766],{"class":2077},[228,73342,284],{"class":238},[228,73344,10145],{"class":343},[228,73346,69309],{"class":238},[228,73348,69281],{"class":51415},[228,73350,51422],{"class":238},[228,73352,73353,73355,73357],{"class":230,"line":32987},[228,73354,51891],{"class":238},[228,73356,69259],{"class":51415},[228,73358,51422],{"class":238},[228,73360,73361,73363,73365,73367,73369,73371,73373,73375,73377,73379,73381,73383],{"class":230,"line":32993},[228,73362,51456],{"class":238},[228,73364,69259],{"class":51415},[228,73366,15035],{"class":2077},[228,73368,284],{"class":238},[228,73370,69363],{"class":343},[228,73372,15074],{"class":2077},[228,73374,284],{"class":238},[228,73376,7767],{"class":343},[228,73378,53601],{"class":2077},[228,73380,284],{"class":238},[228,73382,69363],{"class":343},[228,73384,51422],{"class":238},[228,73386,73387,73389,73391,73393,73395,73397,73399,73401],{"class":230,"line":33002},[228,73388,55349],{"class":238},[228,73390,69281],{"class":51415},[228,73392,66766],{"class":2077},[228,73394,284],{"class":238},[228,73396,69384],{"class":343},[228,73398,69387],{"class":238},[228,73400,69281],{"class":51415},[228,73402,51422],{"class":238},[228,73404,73405,73407,73409,73411,73413,73415,73417,73419],{"class":230,"line":33008},[228,73406,55349],{"class":238},[228,73408,69281],{"class":51415},[228,73410,66766],{"class":2077},[228,73412,284],{"class":238},[228,73414,69404],{"class":343},[228,73416,69407],{"class":238},[228,73418,69281],{"class":51415},[228,73420,51422],{"class":238},[228,73422,73423,73425,73427,73429,73431,73433,73435,73437],{"class":230,"line":33019},[228,73424,55349],{"class":238},[228,73426,69281],{"class":51415},[228,73428,66766],{"class":2077},[228,73430,284],{"class":238},[228,73432,69424],{"class":343},[228,73434,69427],{"class":238},[228,73436,69281],{"class":51415},[228,73438,51422],{"class":238},[228,73440,73441,73443,73445,73447,73449,73451,73453,73455],{"class":230,"line":33025},[228,73442,55349],{"class":238},[228,73444,69281],{"class":51415},[228,73446,66766],{"class":2077},[228,73448,284],{"class":238},[228,73450,69444],{"class":343},[228,73452,69447],{"class":238},[228,73454,69281],{"class":51415},[228,73456,51422],{"class":238},[228,73458,73459,73461,73463,73465,73467,73469,73471,73473],{"class":230,"line":33044},[228,73460,55349],{"class":238},[228,73462,69281],{"class":51415},[228,73464,66766],{"class":2077},[228,73466,284],{"class":238},[228,73468,69464],{"class":343},[228,73470,69467],{"class":238},[228,73472,69281],{"class":51415},[228,73474,51422],{"class":238},[228,73476,73477,73479,73481],{"class":230,"line":33050},[228,73478,51891],{"class":238},[228,73480,69259],{"class":51415},[228,73482,51422],{"class":238},[228,73484,73485,73487,73489],{"class":230,"line":33061},[228,73486,51456],{"class":238},[228,73488,54002],{"class":51415},[228,73490,51422],{"class":238},[228,73492,73493,73495,73497,73500,73502,73505,73507],{"class":230,"line":33067},[228,73494,55349],{"class":238},[228,73496,228],{"class":51415},[228,73498,73499],{"class":238},">+\u003C\u002F",[228,73501,228],{"class":51415},[228,73503,73504],{"class":238},">添加\u003C\u002F",[228,73506,54002],{"class":51415},[228,73508,51422],{"class":238},[228,73510,73511,73513,73515],{"class":230,"line":33087},[228,73512,52532],{"class":238},[228,73514,66740],{"class":51415},[228,73516,51422],{"class":238},[228,73518,73519,73521,73523,73525,73527,73529,73532,73534,73537,73539,73542,73544],{"class":230,"line":33103},[228,73520,52259],{"class":238},[228,73522,51726],{"class":51415},[228,73524,53601],{"class":2077},[228,73526,284],{"class":238},[228,73528,62695],{"class":343},[228,73530,73531],{"class":238},">共有数据 \u003C",[228,73533,228],{"class":51415},[228,73535,73536],{"class":238},">0\u003C\u002F",[228,73538,228],{"class":51415},[228,73540,73541],{"class":238},"> 条\u003C\u002F",[228,73543,51726],{"class":51415},[228,73545,51422],{"class":238},[228,73547,73548,73550,73552],{"class":230,"line":33109},[228,73549,52259],{"class":238},[228,73551,376],{"class":51415},[228,73553,51422],{"class":238},[228,73555,73556,73558,73560],{"class":230,"line":33123},[228,73557,51456],{"class":238},[228,73559,379],{"class":51415},[228,73561,51422],{"class":238},[228,73563,73564,73566,73568],{"class":230,"line":33129},[228,73565,55349],{"class":238},[228,73567,382],{"class":51415},[228,73569,51422],{"class":238},[228,73571,73572,73574,73576,73579,73581],{"class":230,"line":33135},[228,73573,55417],{"class":238},[228,73575,385],{"class":51415},[228,73577,73578],{"class":238},">ID\u003C\u002F",[228,73580,385],{"class":51415},[228,73582,51422],{"class":238},[228,73584,73585,73587,73589,73591,73593],{"class":230,"line":33146},[228,73586,55417],{"class":238},[228,73588,385],{"class":51415},[228,73590,69570],{"class":238},[228,73592,385],{"class":51415},[228,73594,51422],{"class":238},[228,73596,73597,73599,73601,73603,73605],{"class":230,"line":33152},[228,73598,55417],{"class":238},[228,73600,385],{"class":51415},[228,73602,69583],{"class":238},[228,73604,385],{"class":51415},[228,73606,51422],{"class":238},[228,73608,73609,73611,73613,73615,73617],{"class":230,"line":33158},[228,73610,55417],{"class":238},[228,73612,385],{"class":51415},[228,73614,69596],{"class":238},[228,73616,385],{"class":51415},[228,73618,51422],{"class":238},[228,73620,73621,73623,73625,73627,73629],{"class":230,"line":33168},[228,73622,55417],{"class":238},[228,73624,385],{"class":51415},[228,73626,69609],{"class":238},[228,73628,385],{"class":51415},[228,73630,51422],{"class":238},[228,73632,73633,73635,73637,73639,73641],{"class":230,"line":33174},[228,73634,55417],{"class":238},[228,73636,385],{"class":51415},[228,73638,69622],{"class":238},[228,73640,385],{"class":51415},[228,73642,51422],{"class":238},[228,73644,73645,73647,73649,73652,73654],{"class":230,"line":33185},[228,73646,55417],{"class":238},[228,73648,385],{"class":51415},[228,73650,73651],{"class":238},">录入时间\u003C\u002F",[228,73653,385],{"class":51415},[228,73655,51422],{"class":238},[228,73657,73658,73660,73662,73664,73666],{"class":230,"line":33191},[228,73659,55417],{"class":238},[228,73661,385],{"class":51415},[228,73663,69635],{"class":238},[228,73665,385],{"class":51415},[228,73667,51422],{"class":238},[228,73669,73670,73672,73674],{"class":230,"line":33201},[228,73671,55522],{"class":238},[228,73673,382],{"class":51415},[228,73675,51422],{"class":238},[228,73677,73678,73680,73682],{"class":230,"line":33206},[228,73679,51891],{"class":238},[228,73681,379],{"class":51415},[228,73683,51422],{"class":238},[228,73685,73686,73688,73690],{"class":230,"line":33212},[228,73687,51456],{"class":238},[228,73689,423],{"class":51415},[228,73691,51422],{"class":238},[228,73693,73694],{"class":230,"line":33261},[228,73695,73696],{"class":297},"      \u003C!-- \u003Ctr>\n",[228,73698,73699],{"class":230,"line":33308},[228,73700,73701],{"class":297},"        \u003Ctd>1\u003C\u002Ftd>\n",[228,73703,73704],{"class":230,"line":33313},[228,73705,73701],{"class":297},[228,73707,73708],{"class":230,"line":33319},[228,73709,73701],{"class":297},[228,73711,73712],{"class":230,"line":33338},[228,73713,73701],{"class":297},[228,73715,73716],{"class":230,"line":33344},[228,73717,73701],{"class":297},[228,73719,73720],{"class":230,"line":33364},[228,73721,73701],{"class":297},[228,73723,73724],{"class":230,"line":33370},[228,73725,73701],{"class":297},[228,73727,73728],{"class":230,"line":33376},[228,73729,73730],{"class":297},"        \u003Ctd>\n",[228,73732,73733],{"class":230,"line":33386},[228,73734,73735],{"class":297},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[228,73737,73738],{"class":230,"line":33391},[228,73739,73740],{"class":297},"        \u003C\u002Ftd>\n",[228,73742,73743],{"class":230,"line":33397},[228,73744,73745],{"class":297},"      \u003C\u002Ftr> -->\n",[228,73747,73748,73750,73752],{"class":230,"line":33413},[228,73749,51891],{"class":238},[228,73751,423],{"class":51415},[228,73753,51422],{"class":238},[228,73755,73756,73758,73760],{"class":230,"line":33458},[228,73757,52532],{"class":238},[228,73759,376],{"class":51415},[228,73761,51422],{"class":238},[228,73763,73764,73766,73768],{"class":230,"line":33464},[228,73765,52259],{"class":238},[228,73767,51928],{"class":51415},[228,73769,51422],{"class":238},[228,73771,73772],{"class":230,"line":33470},[228,73773,73774],{"class":297},"    \u002F\u002F const initData = [{\n",[228,73776,73777],{"class":230,"line":33476},[228,73778,73779],{"class":297},"    \u002F\u002F   unameId: 1,\n",[228,73781,73782],{"class":230,"line":33487},[228,73783,73784],{"class":297},"    \u002F\u002F   uname: '华晨宇',\n",[228,73786,73787],{"class":230,"line":33493},[228,73788,73789],{"class":297},"    \u002F\u002F   age: 22,\n",[228,73791,73792],{"class":230,"line":33499},[228,73793,73794],{"class":297},"    \u002F\u002F   salary: 12000,\n",[228,73796,73797],{"class":230,"line":33505},[228,73798,73799],{"class":297},"    \u002F\u002F   gender: '男',\n",[228,73801,73802],{"class":230,"line":33523},[228,73803,73804],{"class":297},"    \u002F\u002F   city: '北京',\n",[228,73806,73807],{"class":230,"line":33537},[228,73808,73809],{"class":297},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[228,73811,73812],{"class":230,"line":33546},[228,73813,73814],{"class":297},"    \u002F\u002F }]\n",[228,73816,73817],{"class":230,"line":33555},[228,73818,73819],{"class":297},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[228,73821,73822],{"class":230,"line":33564},[228,73823,73824],{"class":297},"    \u002F\u002F 1.渲染业务\n",[228,73826,73827],{"class":230,"line":33573},[228,73828,73829],{"class":297},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[228,73831,73832],{"class":230,"line":33579},[228,73833,73834],{"class":297},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[228,73836,73837],{"class":230,"line":33585},[228,73838,73839],{"class":297},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[228,73841,73842],{"class":230,"line":33593},[228,73843,2514],{"emptyLinePlaceholder":157},[228,73845,73846],{"class":230,"line":33598},[228,73847,73848],{"class":297},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[228,73850,73851],{"class":230,"line":33604},[228,73852,73853],{"class":297},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[228,73855,73856,73858,73860,73862],{"class":230,"line":33615},[228,73857,11336],{"class":234},[228,73859,57810],{"class":287},[228,73861,13679],{"class":234},[228,73863,51953],{"class":238},[228,73865,73866,73869,73871],{"class":230,"line":33621},[228,73867,73868],{"class":238},"    console.",[228,73870,58362],{"class":2077},[228,73872,52527],{"class":238},[228,73874,73875],{"class":230,"line":33641},[228,73876,2514],{"emptyLinePlaceholder":157},[228,73878,73879],{"class":230,"line":33647},[228,73880,73881],{"class":297},"    \u002F\u002F 时间函数\n",[228,73883,73884,73886,73889],{"class":230,"line":33653},[228,73885,70199],{"class":234},[228,73887,73888],{"class":2077}," getTime",[228,73890,10968],{"class":238},[228,73892,73893,73895,73898,73900,73902,73905],{"class":230,"line":33659},[228,73894,58343],{"class":234},[228,73896,73897],{"class":287}," date",[228,73899,13679],{"class":234},[228,73901,11693],{"class":234},[228,73903,73904],{"class":2077}," Date",[228,73906,2090],{"class":238},[228,73908,73909,73911,73913,73915,73918,73921,73923,73925,73927,73930,73933,73935,73937,73939,73941,73943,73945,73947],{"class":230,"line":33676},[228,73910,58343],{"class":234},[228,73912,16206],{"class":287},[228,73914,13679],{"class":234},[228,73916,73917],{"class":238}," date.",[228,73919,73920],{"class":2077},"getHours",[228,73922,13165],{"class":238},[228,73924,1148],{"class":234},[228,73926,2152],{"class":287},[228,73928,73929],{"class":234}," ?",[228,73931,73932],{"class":343}," '0'",[228,73934,45681],{"class":234},[228,73936,73917],{"class":238},[228,73938,73920],{"class":2077},[228,73940,13165],{"class":238},[228,73942,1097],{"class":234},[228,73944,73917],{"class":238},[228,73946,73920],{"class":2077},[228,73948,2090],{"class":238},[228,73950,73951,73953,73956,73958,73960,73963,73965,73967,73969,73971,73973,73975,73977,73979,73981,73983,73985,73987],{"class":230,"line":33682},[228,73952,58343],{"class":234},[228,73954,73955],{"class":287}," m",[228,73957,13679],{"class":234},[228,73959,73917],{"class":238},[228,73961,73962],{"class":2077},"getMinutes",[228,73964,13165],{"class":238},[228,73966,1148],{"class":234},[228,73968,2152],{"class":287},[228,73970,73929],{"class":234},[228,73972,73932],{"class":343},[228,73974,45681],{"class":234},[228,73976,73917],{"class":238},[228,73978,73962],{"class":2077},[228,73980,13165],{"class":238},[228,73982,1097],{"class":234},[228,73984,73917],{"class":238},[228,73986,73962],{"class":2077},[228,73988,2090],{"class":238},[228,73990,73991,73993,73995,73997,73999,74002,74004,74006,74008,74010,74012,74014,74016,74018,74020,74022,74024,74026],{"class":230,"line":33688},[228,73992,58343],{"class":234},[228,73994,8543],{"class":287},[228,73996,13679],{"class":234},[228,73998,73917],{"class":238},[228,74000,74001],{"class":2077},"getSeconds",[228,74003,13165],{"class":238},[228,74005,1148],{"class":234},[228,74007,2152],{"class":287},[228,74009,73929],{"class":234},[228,74011,73932],{"class":343},[228,74013,45681],{"class":234},[228,74015,73917],{"class":238},[228,74017,74001],{"class":2077},[228,74019,13165],{"class":238},[228,74021,1097],{"class":234},[228,74023,73917],{"class":238},[228,74025,74001],{"class":2077},[228,74027,2090],{"class":238},[228,74029,74030,74032,74035,74037,74039,74042,74044,74047,74049,74052,74054,74056,74059,74061,74063,74065,74067,74069,74071,74074,74076,74079,74081,74084,74086,74088,74090],{"class":230,"line":33694},[228,74031,58343],{"class":234},[228,74033,74034],{"class":287}," str",[228,74036,13679],{"class":234},[228,74038,63018],{"class":343},[228,74040,74041],{"class":238},"date",[228,74043,796],{"class":343},[228,74045,74046],{"class":2077},"getFullYear",[228,74048,2541],{"class":343},[228,74050,74051],{"class":343},"}\u002F${",[228,74053,74041],{"class":238},[228,74055,796],{"class":343},[228,74057,74058],{"class":2077},"getMonth",[228,74060,13165],{"class":343},[228,74062,719],{"class":234},[228,74064,25234],{"class":287},[228,74066,74051],{"class":343},[228,74068,74041],{"class":238},[228,74070,796],{"class":343},[228,74072,74073],{"class":2077},"getDate",[228,74075,2541],{"class":343},[228,74077,74078],{"class":343},"} ${",[228,74080,653],{"class":238},[228,74082,74083],{"class":343},"}:${",[228,74085,782],{"class":238},[228,74087,74083],{"class":343},[228,74089,933],{"class":238},[228,74091,74092],{"class":343},"}`\n",[228,74094,74095,74098],{"class":230,"line":33700},[228,74096,74097],{"class":234},"      return",[228,74099,74100],{"class":238}," str\n",[228,74102,74103],{"class":230,"line":33706},[228,74104,2301],{"class":238},[228,74106,74107],{"class":230,"line":33733},[228,74108,74109],{"class":297},"    \u002F\u002F 渲染函数\n",[228,74111,74112,74114,74116,74118,74120,74122,74124,74126],{"class":230,"line":33757},[228,74113,11336],{"class":234},[228,74115,69862],{"class":287},[228,74117,13679],{"class":234},[228,74119,54511],{"class":238},[228,74121,54514],{"class":2077},[228,74123,239],{"class":238},[228,74125,69873],{"class":343},[228,74127,245],{"class":238},[228,74129,74130,74132,74134],{"class":230,"line":33763},[228,74131,70199],{"class":234},[228,74133,70202],{"class":2077},[228,74135,10968],{"class":238},[228,74137,74138],{"class":230,"line":33769},[228,74139,74140],{"class":297},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[228,74142,74143],{"class":230,"line":33775},[228,74144,74145],{"class":297},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[228,74147,74148,74150,74153,74155,74157,74160,74162,74164,74166,74169,74171,74174],{"class":230,"line":33786},[228,74149,58343],{"class":234},[228,74151,74152],{"class":287}," trArr",[228,74154,13679],{"class":234},[228,74156,52080],{"class":238},[228,74158,74159],{"class":2077},"map",[228,74161,239],{"class":238},[228,74163,54564],{"class":234},[228,74165,1772],{"class":238},[228,74167,74168],{"class":5331},"ele",[228,74170,12550],{"class":238},[228,74172,74173],{"class":5331},"index",[228,74175,12557],{"class":238},[228,74177,74178,74180],{"class":230,"line":33797},[228,74179,14867],{"class":234},[228,74181,70283],{"class":343},[228,74183,74184],{"class":230,"line":33803},[228,74185,74186],{"class":343},"      \u003Ctr>\n",[228,74188,74189,74191,74193,74195,74198],{"class":230,"line":33820},[228,74190,70288],{"class":343},[228,74192,74168],{"class":238},[228,74194,796],{"class":343},[228,74196,74197],{"class":238},"unameId",[228,74199,70303],{"class":343},[228,74201,74202,74204,74206,74208,74210],{"class":230,"line":33843},[228,74203,70288],{"class":343},[228,74205,74168],{"class":238},[228,74207,796],{"class":343},[228,74209,70319],{"class":238},[228,74211,70303],{"class":343},[228,74213,74214,74216,74218,74220,74222],{"class":230,"line":33866},[228,74215,70288],{"class":343},[228,74217,74168],{"class":238},[228,74219,796],{"class":343},[228,74221,70336],{"class":238},[228,74223,70303],{"class":343},[228,74225,74226,74228,74230,74232,74234],{"class":230,"line":33872},[228,74227,70288],{"class":343},[228,74229,74168],{"class":238},[228,74231,796],{"class":343},[228,74233,70353],{"class":238},[228,74235,70303],{"class":343},[228,74237,74238,74240,74242,74244,74246],{"class":230,"line":33877},[228,74239,70288],{"class":343},[228,74241,74168],{"class":238},[228,74243,796],{"class":343},[228,74245,70370],{"class":238},[228,74247,70303],{"class":343},[228,74249,74250,74252,74254,74256,74258],{"class":230,"line":33886},[228,74251,70288],{"class":343},[228,74253,74168],{"class":238},[228,74255,796],{"class":343},[228,74257,70387],{"class":238},[228,74259,70303],{"class":343},[228,74261,74262,74264,74266,74268,74270],{"class":230,"line":33896},[228,74263,70288],{"class":343},[228,74265,74168],{"class":238},[228,74267,796],{"class":343},[228,74269,2501],{"class":238},[228,74271,70303],{"class":343},[228,74273,74274],{"class":230,"line":33902},[228,74275,73730],{"class":343},[228,74277,74278,74281,74283],{"class":230,"line":33907},[228,74279,74280],{"class":343},"          \u003Ca href=\"#\" data-id=\"${",[228,74282,74173],{"class":238},[228,74284,74285],{"class":343},"}\">删除\u003C\u002Fa>\n",[228,74287,74288],{"class":230,"line":33913},[228,74289,73740],{"class":343},[228,74291,74292],{"class":230,"line":33926},[228,74293,74294],{"class":343},"      \u003C\u002Ftr>\n",[228,74296,74297],{"class":230,"line":33932},[228,74298,74299],{"class":343},"  `\n",[228,74301,74302],{"class":230,"line":33943},[228,74303,64930],{"class":238},[228,74305,74306,74308,74310],{"class":230,"line":33954},[228,74307,58359],{"class":238},[228,74309,58362],{"class":2077},[228,74311,74312],{"class":238},"(trArr)\n",[228,74314,74315],{"class":230,"line":33973},[228,74316,2514],{"emptyLinePlaceholder":157},[228,74318,74319],{"class":230,"line":49633},[228,74320,74321],{"class":297},"      \u002F\u002F (2) 把数组转换为字符串join\n",[228,74323,74324],{"class":230,"line":49638},[228,74325,74326],{"class":297},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[228,74328,74329,74331,74333,74336,74339,74341,74344],{"class":230,"line":49647},[228,74330,70214],{"class":238},[228,74332,284],{"class":234},[228,74334,74335],{"class":238}," trArr.",[228,74337,74338],{"class":2077},"join",[228,74340,239],{"class":238},[228,74342,74343],{"class":343},"''",[228,74345,245],{"class":238},[228,74347,74348],{"class":230,"line":49656},[228,74349,74350],{"class":297},"      \u002F\u002F 显示共有几条\n",[228,74352,74353,74355,74357,74359,74362,74365,74367,74369],{"class":230,"line":49661},[228,74354,55886],{"class":238},[228,74356,54514],{"class":2077},[228,74358,239],{"class":238},[228,74360,74361],{"class":343},"'.total span'",[228,74363,74364],{"class":238},").innerHTML ",[228,74366,284],{"class":234},[228,74368,52080],{"class":238},[228,74370,55946],{"class":287},[228,74372,74373],{"class":230,"line":49666},[228,74374,2301],{"class":238},[228,74376,74377],{"class":230,"line":49671},[228,74378,74379],{"class":297},"    \u002F\u002F render()\n",[228,74381,74382],{"class":230,"line":49684},[228,74383,2514],{"emptyLinePlaceholder":157},[228,74385,74386],{"class":230,"line":49689},[228,74387,74388],{"class":297},"    \u002F\u002F 获取DOM对象\n",[228,74390,74391,74393,74395,74397,74399,74401,74403,74405],{"class":230,"line":49698},[228,74392,11336],{"class":234},[228,74394,69936],{"class":287},[228,74396,13679],{"class":234},[228,74398,54511],{"class":238},[228,74400,54514],{"class":2077},[228,74402,239],{"class":238},[228,74404,69947],{"class":343},[228,74406,245],{"class":238},[228,74408,74409,74411,74413,74415,74417,74419,74421,74423],{"class":230,"line":49707},[228,74410,11336],{"class":234},[228,74412,69763],{"class":287},[228,74414,13679],{"class":234},[228,74416,54511],{"class":238},[228,74418,54514],{"class":2077},[228,74420,239],{"class":238},[228,74422,69774],{"class":343},[228,74424,245],{"class":238},[228,74426,74427,74429,74431,74433,74435,74437,74439,74441],{"class":230,"line":49724},[228,74428,11336],{"class":234},[228,74430,15804],{"class":287},[228,74432,13679],{"class":234},[228,74434,54511],{"class":238},[228,74436,54514],{"class":2077},[228,74438,239],{"class":238},[228,74440,69793],{"class":343},[228,74442,245],{"class":238},[228,74444,74446,74448,74450,74452,74454,74456,74458,74460],{"class":230,"line":74445},231,[228,74447,11336],{"class":234},[228,74449,69822],{"class":287},[228,74451,13679],{"class":234},[228,74453,54511],{"class":238},[228,74455,54514],{"class":2077},[228,74457,239],{"class":238},[228,74459,69833],{"class":343},[228,74461,245],{"class":238},[228,74463,74465,74467,74469,74471,74473,74475,74477,74479],{"class":230,"line":74464},232,[228,74466,11336],{"class":234},[228,74468,69802],{"class":287},[228,74470,13679],{"class":234},[228,74472,54511],{"class":238},[228,74474,54514],{"class":2077},[228,74476,239],{"class":238},[228,74478,69813],{"class":343},[228,74480,245],{"class":238},[228,74482,74484,74486,74488,74490,74492,74494,74496,74498],{"class":230,"line":74483},233,[228,74485,11336],{"class":234},[228,74487,69842],{"class":287},[228,74489,13679],{"class":234},[228,74491,54511],{"class":238},[228,74493,54514],{"class":2077},[228,74495,239],{"class":238},[228,74497,69853],{"class":343},[228,74499,245],{"class":238},[228,74501,74503],{"class":230,"line":74502},234,[228,74504,2514],{"emptyLinePlaceholder":157},[228,74506,74508],{"class":230,"line":74507},235,[228,74509,74510],{"class":297},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[228,74512,74514,74516,74518,74520,74522,74524,74526,74528,74530],{"class":230,"line":74513},236,[228,74515,69954],{"class":238},[228,74517,57928],{"class":2077},[228,74519,239],{"class":238},[228,74521,69961],{"class":343},[228,74523,12550],{"class":238},[228,74525,54564],{"class":234},[228,74527,1772],{"class":238},[228,74529,313],{"class":5331},[228,74531,12557],{"class":238},[228,74533,74535],{"class":230,"line":74534},237,[228,74536,74537],{"class":297},"      \u002F\u002F 禁止浏览器跳转\n",[228,74539,74541,74543,74545],{"class":230,"line":74540},238,[228,74542,69981],{"class":238},[228,74544,69984],{"class":2077},[228,74546,2090],{"class":238},[228,74548,74550],{"class":230,"line":74549},239,[228,74551,74552],{"class":297},"      \u002F\u002F 非空判断\n",[228,74554,74556],{"class":230,"line":74555},240,[228,74557,74558],{"class":297},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[228,74560,74562],{"class":230,"line":74561},241,[228,74563,74564],{"class":297},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[228,74566,74568,74570,74572,74574,74577,74579,74582,74585,74587,74589],{"class":230,"line":74567},242,[228,74569,54595],{"class":234},[228,74571,1772],{"class":238},[228,74573,32],{"class":234},[228,74575,74576],{"class":238},"uname.value ",[228,74578,71472],{"class":234},[228,74580,74581],{"class":234}," !",[228,74583,74584],{"class":238},"age.value ",[228,74586,71472],{"class":234},[228,74588,74581],{"class":234},[228,74590,74591],{"class":238},"salary.value) {\n",[228,74593,74595,74597,74599,74601,74603],{"class":230,"line":74594},243,[228,74596,14867],{"class":234},[228,74598,70055],{"class":2077},[228,74600,239],{"class":238},[228,74602,70060],{"class":343},[228,74604,245],{"class":238},[228,74606,74608],{"class":230,"line":74607},244,[228,74609,52513],{"class":238},[228,74611,74613,74615,74617],{"class":230,"line":74612},245,[228,74614,58122],{"class":238},[228,74616,51999],{"class":2077},[228,74618,74619],{"class":238},"({\n",[228,74621,74623],{"class":230,"line":74622},246,[228,74624,74625],{"class":297},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[228,74627,74629],{"class":230,"line":74628},247,[228,74630,74631],{"class":297},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[228,74633,74635],{"class":230,"line":74634},248,[228,74636,74637],{"class":297},"        \u002F\u002F 对象的序号应为数组长度+1\n",[228,74639,74641],{"class":230,"line":74640},249,[228,74642,74643],{"class":297},"        \u002F\u002F unameId: arr.length + 1,\n",[228,74645,74647],{"class":230,"line":74646},250,[228,74648,2514],{"emptyLinePlaceholder":157},[228,74650,74652],{"class":230,"line":74651},251,[228,74653,74654],{"class":297},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[228,74656,74658],{"class":230,"line":74657},252,[228,74659,74660],{"class":297},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[228,74662,74664],{"class":230,"line":74663},253,[228,74665,74666],{"class":297},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[228,74668,74670],{"class":230,"line":74669},254,[228,74671,74672],{"class":297},"        \u002F\u002F 0当假看\n",[228,74674,74676,74679,74681,74683,74686,74688,74690,74692,74695,74697,74699,74702,74704],{"class":230,"line":74675},255,[228,74677,74678],{"class":238},"        unameId: arr.",[228,74680,52083],{"class":287},[228,74682,73929],{"class":234},[228,74684,74685],{"class":238}," arr[arr.",[228,74687,52083],{"class":287},[228,74689,52386],{"class":234},[228,74691,25234],{"class":287},[228,74693,74694],{"class":238},"].unameId ",[228,74696,719],{"class":234},[228,74698,25234],{"class":287},[228,74700,74701],{"class":234}," :",[228,74703,25234],{"class":287},[228,74705,31581],{"class":238},[228,74707,74709],{"class":230,"line":74708},256,[228,74710,70108],{"class":238},[228,74712,74714],{"class":230,"line":74713},257,[228,74715,70113],{"class":238},[228,74717,74719],{"class":230,"line":74718},258,[228,74720,70123],{"class":238},[228,74722,74724],{"class":230,"line":74723},259,[228,74725,70118],{"class":238},[228,74727,74729],{"class":230,"line":74728},260,[228,74730,74731],{"class":238},"        city: city.value,\n",[228,74733,74735],{"class":230,"line":74734},261,[228,74736,74737],{"class":297},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[228,74739,74741],{"class":230,"line":74740},262,[228,74742,74743],{"class":297},"        \u002F\u002F time: new Date().toDateString()\n",[228,74745,74747,74750,74753],{"class":230,"line":74746},263,[228,74748,74749],{"class":238},"        time: ",[228,74751,74752],{"class":2077},"getTime",[228,74754,2090],{"class":238},[228,74756,74758],{"class":230,"line":74757},264,[228,74759,64930],{"class":238},[228,74761,74763],{"class":230,"line":74762},265,[228,74764,74765],{"class":297},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[228,74767,74769,74771],{"class":230,"line":74768},266,[228,74770,70183],{"class":2077},[228,74772,2090],{"class":238},[228,74774,74776,74778,74780,74782,74784],{"class":230,"line":74775},267,[228,74777,70166],{"class":287},[228,74779,796],{"class":238},[228,74781,70171],{"class":2077},[228,74783,13165],{"class":238},[228,74785,74786],{"class":297},"\u002F\u002F重置表单\n",[228,74788,74790],{"class":230,"line":74789},268,[228,74791,74792],{"class":297},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[228,74794,74796,74799,74801,74803,74806,74808,74810,74812,74814],{"class":230,"line":74795},269,[228,74797,74798],{"class":238},"      localStorage.",[228,74800,71769],{"class":2077},[228,74802,239],{"class":238},[228,74804,74805],{"class":343},"'data'",[228,74807,12550],{"class":238},[228,74809,71779],{"class":287},[228,74811,796],{"class":238},[228,74813,71784],{"class":2077},[228,74815,74816],{"class":238},"(arr))\n",[228,74818,74820],{"class":230,"line":74819},270,[228,74821,33576],{"class":238},[228,74823,74825],{"class":230,"line":74824},271,[228,74826,2514],{"emptyLinePlaceholder":157},[228,74828,74830],{"class":230,"line":74829},272,[228,74831,74832],{"class":297},"    \u002F\u002F 3.删除业务\n",[228,74834,74836],{"class":230,"line":74835},273,[228,74837,74838],{"class":297},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[228,74840,74842,74844,74846,74848,74850,74852,74854,74856,74858],{"class":230,"line":74841},274,[228,74843,70456],{"class":238},[228,74845,57928],{"class":2077},[228,74847,239],{"class":238},[228,74849,57933],{"class":343},[228,74851,12550],{"class":238},[228,74853,54564],{"class":234},[228,74855,1772],{"class":238},[228,74857,313],{"class":5331},[228,74859,12557],{"class":238},[228,74861,74863],{"class":230,"line":74862},275,[228,74864,74865],{"class":297},"      \u002F\u002F 判断是否点击的是删除按钮\n",[228,74867,74869,74871,74873,74875,74877],{"class":230,"line":74868},276,[228,74870,54595],{"class":234},[228,74872,67149],{"class":238},[228,74874,54601],{"class":234},[228,74876,68371],{"class":343},[228,74878,12557],{"class":238},[228,74880,74882],{"class":230,"line":74881},277,[228,74883,74884],{"class":297},"        \u002F\u002F alert(1)\n",[228,74886,74888],{"class":230,"line":74887},278,[228,74889,74890],{"class":297},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[228,74892,74894],{"class":230,"line":74893},279,[228,74895,74896],{"class":297},"        \u002F\u002F console.log(e.target)\n",[228,74898,74900],{"class":230,"line":74899},280,[228,74901,74902],{"class":297},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[228,74904,74906],{"class":230,"line":74905},281,[228,74907,2514],{"emptyLinePlaceholder":157},[228,74909,74911],{"class":230,"line":74910},282,[228,74912,74913],{"class":297},"        \u002F\u002F 确认框，确然是否真的要删除\n",[228,74915,74917],{"class":230,"line":74916},283,[228,74918,74919],{"class":297},"        \u002F\u002F confirm()为确认框\n",[228,74921,74923],{"class":230,"line":74922},284,[228,74924,74925],{"class":297},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[228,74927,74929,74931,74933,74936,74938,74941],{"class":230,"line":74928},285,[228,74930,2611],{"class":234},[228,74932,1772],{"class":238},[228,74934,74935],{"class":2077},"confirm",[228,74937,239],{"class":238},[228,74939,74940],{"class":343},"'您确定要删除这条数据吗？'",[228,74942,74943],{"class":238},")) {\n",[228,74945,74947,74950,74952,74954,74956],{"class":230,"line":74946},286,[228,74948,74949],{"class":238},"          arr.",[228,74951,58125],{"class":2077},[228,74953,70509],{"class":238},[228,74955,456],{"class":287},[228,74957,245],{"class":238},[228,74959,74961],{"class":230,"line":74960},287,[228,74962,74963],{"class":297},"          \u002F\u002F 3.4 重新渲染页面\n",[228,74965,74967,74970],{"class":230,"line":74966},288,[228,74968,74969],{"class":2077},"          render",[228,74971,2090],{"class":238},[228,74973,74975],{"class":230,"line":74974},289,[228,74976,74977],{"class":297},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[228,74979,74981,74984,74986,74988,74990,74992,74994,74996,74998],{"class":230,"line":74980},290,[228,74982,74983],{"class":238},"          localStorage.",[228,74985,71769],{"class":2077},[228,74987,239],{"class":238},[228,74989,74805],{"class":343},[228,74991,12550],{"class":238},[228,74993,71779],{"class":287},[228,74995,796],{"class":238},[228,74997,71784],{"class":2077},[228,74999,74816],{"class":238},[228,75001,75003],{"class":230,"line":75002},291,[228,75004,2643],{"class":238},[228,75006,75008],{"class":230,"line":75007},292,[228,75009,52513],{"class":238},[228,75011,75013],{"class":230,"line":75012},293,[228,75014,2514],{"emptyLinePlaceholder":157},[228,75016,75018],{"class":230,"line":75017},294,[228,75019,33576],{"class":238},[228,75021,75023],{"class":230,"line":75022},295,[228,75024,2514],{"emptyLinePlaceholder":157},[228,75026,75028,75030,75032],{"class":230,"line":75027},296,[228,75029,52532],{"class":238},[228,75031,51928],{"class":51415},[228,75033,51422],{"class":238},[228,75035,75037,75039,75041],{"class":230,"line":75036},297,[228,75038,51900],{"class":238},[228,75040,51915],{"class":51415},[228,75042,51422],{"class":238},[228,75044,75046],{"class":230,"line":75045},298,[228,75047,2514],{"emptyLinePlaceholder":157},[228,75049,75051,75053,75055],{"class":230,"line":75050},299,[228,75052,51900],{"class":238},[228,75054,50750],{"class":51415},[228,75056,51422],{"class":238},[14,75058,75060],{"id":75059},"_36-正则表达式","3.6 正则表达式",[19,75062,75063],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,75065,75066],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,75068,75069],{},"正则表达式的作用：",[1245,75071,75072,75079,75085],{},[186,75073,75074,75075,75078],{},"表单验证（ ",[388,75076,75077],{},"匹配"," ）",[186,75080,75081,75082,75078],{},"过滤敏感词（ ",[388,75083,75084],{},"替换",[186,75086,75087,75088,75078],{},"字符串中提取我们想要的部分（ ",[388,75089,75090],{},"提取",[200,75092,75094],{"id":75093},"_361-语法","3.6.1 语法",[19,75096,75097],{},"正则表达式使用步骤：",[183,75099,75100,75103],{},[186,75101,75102],{},"定义规则",[186,75104,75105],{},"查找是否匹配",[19,75107,75108],{},"正则表达式里边不需要写引号",[19,75110,75111],{},[1576,75112],{"alt":141,"src":75113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,75115,75116],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,75118,75119],{},"reg.test(str)",[19,75121,75122],{},[1576,75123],{"alt":141,"src":75124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,75126,75127],{},[1576,75128],{"alt":141,"src":75129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[200,75131,75133],{"id":75132},"_362-元字符","3.6.2 元字符",[183,75135,75136,75139,75142,75145,75152],{},[186,75137,75138],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[186,75140,75141],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[186,75143,75144],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[186,75146,75147,75148],{},"正则验证工具：",[476,75149,75150],{"href":75150,"rel":75151},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[23980],[186,75153,75154],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22113,75156,75158],{"id":75157},"_3621-边界符","3.6.2.1 边界符",[19,75160,75161],{},[1576,75162],{"alt":141,"src":75163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,75165,75166],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,75168,75169],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,75171,75172],{},"只匹配一次",[19,75174,75175],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22113,75177,75179],{"id":75178},"_3622-量词","3.6.2.2 量词",[19,75181,75182],{},[1576,75183],{"alt":141,"src":75184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,75186,75187],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22113,75189,75191],{"id":75190},"_3623-元字符","3.6.2.3 元字符",[19,75193,75194],{},[1576,75195],{"alt":141,"src":75196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,75198,75199],{},"匹配的是a或b或c []只选一个",[19,75201,75202],{},[1576,75203],{"alt":141,"src":75204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,75206,75207],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,75209,75210],{},[1576,75211],{"alt":141,"src":75212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,75214,75215],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,75217,75218],{},[1576,75219],{"alt":141,"src":75220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[220,75222,75224],{"className":50748,"code":75223,"language":50750,"meta":141,"style":141},"\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",[30,75225,75226,75236,75250,75254,75262,75276,75296,75308,75316,75320,75328,75336,75341,75372,75399,75427,75431,75436,75464,75495,75500,75505,75536,75568,75600,75604,75609,75640,75670,75700,75704,75709,75740,75771,75801,75831,75835,75840,75873,75877,75882,75913,75944,75948,75953,75984,76014,76045,76049,76054,76086,76117,76148,76175,76206,76238,76271,76302,76333,76365,76396,76404,76412,76416],{"__ignoreMap":141},[228,75227,75228,75230,75232,75234],{"class":230,"line":231},[228,75229,51412],{"class":238},[228,75231,51416],{"class":51415},[228,75233,51419],{"class":2077},[228,75235,51422],{"class":238},[228,75237,75238,75240,75242,75244,75246,75248],{"class":230,"line":142},[228,75239,1148],{"class":238},[228,75241,50750],{"class":51415},[228,75243,51431],{"class":2077},[228,75245,284],{"class":238},[228,75247,51436],{"class":343},[228,75249,51422],{"class":238},[228,75251,75252],{"class":230,"line":1293},[228,75253,2514],{"emptyLinePlaceholder":157},[228,75255,75256,75258,75260],{"class":230,"line":1308},[228,75257,1148],{"class":238},[228,75259,51449],{"class":51415},[228,75261,51422],{"class":238},[228,75263,75264,75266,75268,75270,75272,75274],{"class":230,"line":1314},[228,75265,52259],{"class":238},[228,75267,51459],{"class":51415},[228,75269,51462],{"class":2077},[228,75271,284],{"class":238},[228,75273,51467],{"class":343},[228,75275,51422],{"class":238},[228,75277,75278,75280,75282,75284,75286,75288,75290,75292,75294],{"class":230,"line":1328},[228,75279,52259],{"class":238},[228,75281,51459],{"class":51415},[228,75283,15035],{"class":2077},[228,75285,284],{"class":238},[228,75287,51506],{"class":343},[228,75289,51486],{"class":2077},[228,75291,284],{"class":238},[228,75293,51513],{"class":343},[228,75295,51422],{"class":238},[228,75297,75298,75300,75302,75304,75306],{"class":230,"line":1334},[228,75299,52259],{"class":238},[228,75301,51522],{"class":51415},[228,75303,51525],{"class":238},[228,75305,51522],{"class":51415},[228,75307,51422],{"class":238},[228,75309,75310,75312,75314],{"class":230,"line":1425},[228,75311,51900],{"class":238},[228,75313,51449],{"class":51415},[228,75315,51422],{"class":238},[228,75317,75318],{"class":230,"line":1431},[228,75319,2514],{"emptyLinePlaceholder":157},[228,75321,75322,75324,75326],{"class":230,"line":1443},[228,75323,1148],{"class":238},[228,75325,51915],{"class":51415},[228,75327,51422],{"class":238},[228,75329,75330,75332,75334],{"class":230,"line":1726},[228,75331,52259],{"class":238},[228,75333,51928],{"class":51415},[228,75335,51422],{"class":238},[228,75337,75338],{"class":230,"line":1731},[228,75339,75340],{"class":297},"    \u002F\u002F 元字符中\n",[228,75342,75343,75345,75347,75349,75351,75354,75356,75358,75361,75363,75366,75369],{"class":230,"line":1737},[228,75344,73868],{"class":238},[228,75346,58362],{"class":2077},[228,75348,239],{"class":238},[228,75350,822],{"class":343},[228,75352,75353],{"class":48092},"哈",[228,75355,822],{"class":343},[228,75357,796],{"class":238},[228,75359,75360],{"class":2077},"test",[228,75362,239],{"class":238},[228,75364,75365],{"class":343},"'哈'",[228,75367,75368],{"class":238},"))  ",[228,75370,75371],{"class":297},"\u002F\u002Ftrue\n",[228,75373,75374,75376,75378,75380,75382,75384,75386,75388,75390,75392,75395,75397],{"class":230,"line":1742},[228,75375,73868],{"class":238},[228,75377,58362],{"class":2077},[228,75379,239],{"class":238},[228,75381,822],{"class":343},[228,75383,75353],{"class":48092},[228,75385,822],{"class":343},[228,75387,796],{"class":238},[228,75389,75360],{"class":2077},[228,75391,239],{"class":238},[228,75393,75394],{"class":343},"'哈哈'",[228,75396,75368],{"class":238},[228,75398,75371],{"class":297},[228,75400,75401,75403,75405,75407,75409,75411,75413,75415,75417,75419,75422,75425],{"class":230,"line":1756},[228,75402,73868],{"class":238},[228,75404,58362],{"class":2077},[228,75406,239],{"class":238},[228,75408,822],{"class":343},[228,75410,75353],{"class":48092},[228,75412,822],{"class":343},[228,75414,796],{"class":238},[228,75416,75360],{"class":2077},[228,75418,239],{"class":238},[228,75420,75421],{"class":343},"'二哈'",[228,75423,75424],{"class":238},"))   ",[228,75426,75371],{"class":297},[228,75428,75429],{"class":230,"line":1761},[228,75430,2514],{"emptyLinePlaceholder":157},[228,75432,75433],{"class":230,"line":1767},[228,75434,75435],{"class":297},"    \u002F\u002F 1.边界符\n",[228,75437,75438,75440,75442,75444,75446,75448,75450,75452,75454,75456,75458,75460,75462],{"class":230,"line":1788},[228,75439,73868],{"class":238},[228,75441,58362],{"class":2077},[228,75443,239],{"class":238},[228,75445,822],{"class":343},[228,75447,1204],{"class":234},[228,75449,75353],{"class":48092},[228,75451,822],{"class":343},[228,75453,796],{"class":238},[228,75455,75360],{"class":2077},[228,75457,239],{"class":238},[228,75459,75365],{"class":343},[228,75461,75368],{"class":238},[228,75463,75371],{"class":297},[228,75465,75466,75468,75470,75472,75474,75476,75478,75480,75482,75484,75486,75488,75490,75492],{"class":230,"line":1793},[228,75467,73868],{"class":238},[228,75469,58362],{"class":2077},[228,75471,239],{"class":238},[228,75473,822],{"class":343},[228,75475,1204],{"class":234},[228,75477,75353],{"class":48092},[228,75479,540],{"class":234},[228,75481,822],{"class":343},[228,75483,796],{"class":238},[228,75485,75360],{"class":2077},[228,75487,239],{"class":238},[228,75489,75394],{"class":343},[228,75491,75368],{"class":238},[228,75493,75494],{"class":297},"\u002F\u002Ffalse\n",[228,75496,75497],{"class":230,"line":1807},[228,75498,75499],{"class":297},"    \u002F\u002F 2.量词\n",[228,75501,75502],{"class":230,"line":1812},[228,75503,75504],{"class":297},"    \u002F\u002F 量词 * 类似于 >= 0\n",[228,75506,75507,75509,75511,75513,75515,75517,75519,75522,75524,75526,75528,75530,75532,75534],{"class":230,"line":1841},[228,75508,73868],{"class":238},[228,75510,58362],{"class":2077},[228,75512,239],{"class":238},[228,75514,822],{"class":343},[228,75516,1204],{"class":234},[228,75518,75353],{"class":48092},[228,75520,75521],{"class":234},"*$",[228,75523,822],{"class":343},[228,75525,796],{"class":238},[228,75527,75360],{"class":2077},[228,75529,239],{"class":238},[228,75531,75394],{"class":343},[228,75533,75368],{"class":238},[228,75535,75371],{"class":297},[228,75537,75538,75540,75542,75544,75546,75548,75550,75552,75554,75556,75558,75560,75563,75565],{"class":230,"line":1846},[228,75539,73868],{"class":238},[228,75541,58362],{"class":2077},[228,75543,239],{"class":238},[228,75545,822],{"class":343},[228,75547,1204],{"class":234},[228,75549,75353],{"class":48092},[228,75551,75521],{"class":234},[228,75553,822],{"class":343},[228,75555,796],{"class":238},[228,75557,75360],{"class":2077},[228,75559,239],{"class":238},[228,75561,75562],{"class":343},"'二哈好傻'",[228,75564,75368],{"class":238},[228,75566,75567],{"class":297},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[228,75569,75570,75572,75574,75576,75578,75580,75582,75584,75586,75588,75590,75592,75595,75597],{"class":230,"line":1863},[228,75571,73868],{"class":238},[228,75573,58362],{"class":2077},[228,75575,239],{"class":238},[228,75577,822],{"class":343},[228,75579,1204],{"class":234},[228,75581,75353],{"class":48092},[228,75583,75521],{"class":234},[228,75585,822],{"class":343},[228,75587,796],{"class":238},[228,75589,75360],{"class":2077},[228,75591,239],{"class":238},[228,75593,75594],{"class":343},"'哈好哈'",[228,75596,75424],{"class":238},[228,75598,75599],{"class":297},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[228,75601,75602],{"class":230,"line":1868},[228,75603,2514],{"emptyLinePlaceholder":157},[228,75605,75606],{"class":230,"line":1873},[228,75607,75608],{"class":297},"    \u002F\u002F +类似于>=1\n",[228,75610,75611,75613,75615,75617,75619,75621,75623,75626,75628,75630,75632,75634,75636,75638],{"class":230,"line":1878},[228,75612,73868],{"class":238},[228,75614,58362],{"class":2077},[228,75616,239],{"class":238},[228,75618,822],{"class":343},[228,75620,1204],{"class":234},[228,75622,75353],{"class":48092},[228,75624,75625],{"class":234},"+$",[228,75627,822],{"class":343},[228,75629,796],{"class":238},[228,75631,75360],{"class":2077},[228,75633,239],{"class":238},[228,75635,75394],{"class":343},[228,75637,75368],{"class":238},[228,75639,75371],{"class":297},[228,75641,75642,75644,75646,75648,75650,75652,75654,75656,75658,75660,75662,75664,75666,75668],{"class":230,"line":1892},[228,75643,73868],{"class":238},[228,75645,58362],{"class":2077},[228,75647,239],{"class":238},[228,75649,822],{"class":343},[228,75651,1204],{"class":234},[228,75653,75353],{"class":48092},[228,75655,75625],{"class":234},[228,75657,822],{"class":343},[228,75659,796],{"class":238},[228,75661,75360],{"class":2077},[228,75663,239],{"class":238},[228,75665,75562],{"class":343},[228,75667,75368],{"class":238},[228,75669,75567],{"class":297},[228,75671,75672,75674,75676,75678,75680,75682,75684,75686,75688,75690,75692,75694,75696,75698],{"class":230,"line":1897},[228,75673,73868],{"class":238},[228,75675,58362],{"class":2077},[228,75677,239],{"class":238},[228,75679,822],{"class":343},[228,75681,1204],{"class":234},[228,75683,75353],{"class":48092},[228,75685,75625],{"class":234},[228,75687,822],{"class":343},[228,75689,796],{"class":238},[228,75691,75360],{"class":2077},[228,75693,239],{"class":238},[228,75695,75594],{"class":343},[228,75697,75424],{"class":238},[228,75699,75494],{"class":297},[228,75701,75702],{"class":230,"line":2691},[228,75703,2514],{"emptyLinePlaceholder":157},[228,75705,75706],{"class":230,"line":2705},[228,75707,75708],{"class":297},"    \u002F\u002F ?类似于0次或一次\n",[228,75710,75711,75713,75715,75717,75719,75721,75724,75726,75728,75730,75732,75734,75736,75738],{"class":230,"line":2713},[228,75712,73868],{"class":238},[228,75714,58362],{"class":2077},[228,75716,239],{"class":238},[228,75718,822],{"class":343},[228,75720,1204],{"class":234},[228,75722,75723],{"class":48092},"哈？",[228,75725,540],{"class":234},[228,75727,822],{"class":343},[228,75729,796],{"class":238},[228,75731,75360],{"class":2077},[228,75733,239],{"class":238},[228,75735,74343],{"class":343},[228,75737,75424],{"class":238},[228,75739,75371],{"class":297},[228,75741,75742,75744,75746,75748,75750,75752,75754,75757,75759,75761,75763,75765,75767,75769],{"class":230,"line":2718},[228,75743,73868],{"class":238},[228,75745,58362],{"class":2077},[228,75747,239],{"class":238},[228,75749,822],{"class":343},[228,75751,1204],{"class":234},[228,75753,75353],{"class":48092},[228,75755,75756],{"class":234},"?$",[228,75758,822],{"class":343},[228,75760,796],{"class":238},[228,75762,75360],{"class":2077},[228,75764,239],{"class":238},[228,75766,75394],{"class":343},[228,75768,75368],{"class":238},[228,75770,75494],{"class":297},[228,75772,75773,75775,75777,75779,75781,75783,75785,75787,75789,75791,75793,75795,75797,75799],{"class":230,"line":2724},[228,75774,73868],{"class":238},[228,75776,58362],{"class":2077},[228,75778,239],{"class":238},[228,75780,822],{"class":343},[228,75782,1204],{"class":234},[228,75784,75353],{"class":48092},[228,75786,75756],{"class":234},[228,75788,822],{"class":343},[228,75790,796],{"class":238},[228,75792,75360],{"class":2077},[228,75794,239],{"class":238},[228,75796,75562],{"class":343},[228,75798,75368],{"class":238},[228,75800,75567],{"class":297},[228,75802,75803,75805,75807,75809,75811,75813,75815,75817,75819,75821,75823,75825,75827,75829],{"class":230,"line":2730},[228,75804,73868],{"class":238},[228,75806,58362],{"class":2077},[228,75808,239],{"class":238},[228,75810,822],{"class":343},[228,75812,1204],{"class":234},[228,75814,75353],{"class":48092},[228,75816,75756],{"class":234},[228,75818,822],{"class":343},[228,75820,796],{"class":238},[228,75822,75360],{"class":2077},[228,75824,239],{"class":238},[228,75826,75594],{"class":343},[228,75828,75368],{"class":238},[228,75830,75494],{"class":297},[228,75832,75833],{"class":230,"line":2735},[228,75834,2514],{"emptyLinePlaceholder":157},[228,75836,75837],{"class":230,"line":8063},[228,75838,75839],{"class":297},"    \u002F\u002F {n}写几，就必须出现几次\n",[228,75841,75842,75844,75846,75848,75850,75852,75854,75857,75859,75861,75863,75865,75868,75871],{"class":230,"line":8087},[228,75843,73868],{"class":238},[228,75845,58362],{"class":2077},[228,75847,239],{"class":238},[228,75849,822],{"class":343},[228,75851,1204],{"class":234},[228,75853,75353],{"class":48092},[228,75855,75856],{"class":234},"{4}$",[228,75858,822],{"class":343},[228,75860,796],{"class":238},[228,75862,75360],{"class":2077},[228,75864,239],{"class":238},[228,75866,75867],{"class":343},"'哈哈哈哈'",[228,75869,75870],{"class":238},")) ",[228,75872,75371],{"class":297},[228,75874,75875],{"class":230,"line":8092},[228,75876,2514],{"emptyLinePlaceholder":157},[228,75878,75879],{"class":230,"line":8098},[228,75880,75881],{"class":297},"    \u002F\u002F {n,}大于等于n次\n",[228,75883,75884,75886,75888,75890,75892,75894,75896,75899,75901,75903,75905,75907,75909,75911],{"class":230,"line":8125},[228,75885,73868],{"class":238},[228,75887,58362],{"class":2077},[228,75889,239],{"class":238},[228,75891,822],{"class":343},[228,75893,1204],{"class":234},[228,75895,75353],{"class":48092},[228,75897,75898],{"class":234},"{4,}$",[228,75900,822],{"class":343},[228,75902,796],{"class":238},[228,75904,75360],{"class":2077},[228,75906,239],{"class":238},[228,75908,75867],{"class":343},[228,75910,75870],{"class":238},[228,75912,75371],{"class":297},[228,75914,75915,75917,75919,75921,75923,75925,75927,75929,75931,75933,75935,75937,75940,75942],{"class":230,"line":8130},[228,75916,73868],{"class":238},[228,75918,58362],{"class":2077},[228,75920,239],{"class":238},[228,75922,822],{"class":343},[228,75924,1204],{"class":234},[228,75926,75353],{"class":48092},[228,75928,75898],{"class":234},[228,75930,822],{"class":343},[228,75932,796],{"class":238},[228,75934,75360],{"class":2077},[228,75936,239],{"class":238},[228,75938,75939],{"class":343},"'哈哈哈哈哈'",[228,75941,75870],{"class":238},[228,75943,75371],{"class":297},[228,75945,75946],{"class":230,"line":8136},[228,75947,2514],{"emptyLinePlaceholder":157},[228,75949,75950],{"class":230,"line":8148},[228,75951,75952],{"class":297},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[228,75954,75955,75957,75959,75961,75963,75965,75967,75970,75972,75974,75976,75978,75980,75982],{"class":230,"line":8160},[228,75956,73868],{"class":238},[228,75958,58362],{"class":2077},[228,75960,239],{"class":238},[228,75962,822],{"class":343},[228,75964,1204],{"class":234},[228,75966,75353],{"class":48092},[228,75968,75969],{"class":234},"{4,6}$",[228,75971,822],{"class":343},[228,75973,796],{"class":238},[228,75975,75360],{"class":2077},[228,75977,239],{"class":238},[228,75979,75867],{"class":343},[228,75981,75870],{"class":238},[228,75983,75371],{"class":297},[228,75985,75986,75988,75990,75992,75994,75996,75998,76000,76002,76004,76006,76008,76010,76012],{"class":230,"line":8172},[228,75987,73868],{"class":238},[228,75989,58362],{"class":2077},[228,75991,239],{"class":238},[228,75993,822],{"class":343},[228,75995,1204],{"class":234},[228,75997,75353],{"class":48092},[228,75999,75969],{"class":234},[228,76001,822],{"class":343},[228,76003,796],{"class":238},[228,76005,75360],{"class":2077},[228,76007,239],{"class":238},[228,76009,75939],{"class":343},[228,76011,75870],{"class":238},[228,76013,75371],{"class":297},[228,76015,76016,76018,76020,76022,76024,76026,76028,76030,76032,76034,76036,76038,76041,76043],{"class":230,"line":9831},[228,76017,73868],{"class":238},[228,76019,58362],{"class":2077},[228,76021,239],{"class":238},[228,76023,822],{"class":343},[228,76025,1204],{"class":234},[228,76027,75353],{"class":48092},[228,76029,75969],{"class":234},[228,76031,822],{"class":343},[228,76033,796],{"class":238},[228,76035,75360],{"class":2077},[228,76037,239],{"class":238},[228,76039,76040],{"class":343},"'哈哈哈哈哈哈哈'",[228,76042,75870],{"class":238},[228,76044,75494],{"class":297},[228,76046,76047],{"class":230,"line":9856},[228,76048,2514],{"emptyLinePlaceholder":157},[228,76050,76051],{"class":230,"line":9879},[228,76052,76053],{"class":297},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[228,76055,76056,76058,76060,76062,76064,76066,76069,76071,76073,76075,76077,76079,76082,76084],{"class":230,"line":9903},[228,76057,73868],{"class":238},[228,76059,58362],{"class":2077},[228,76061,239],{"class":238},[228,76063,822],{"class":343},[228,76065,1204],{"class":234},[228,76067,76068],{"class":287},"[abc]",[228,76070,540],{"class":234},[228,76072,822],{"class":343},[228,76074,796],{"class":238},[228,76076,75360],{"class":2077},[228,76078,239],{"class":238},[228,76080,76081],{"class":343},"'a'",[228,76083,75368],{"class":238},[228,76085,75371],{"class":297},[228,76087,76088,76090,76092,76094,76096,76098,76100,76102,76104,76106,76108,76110,76113,76115],{"class":230,"line":9908},[228,76089,73868],{"class":238},[228,76091,58362],{"class":2077},[228,76093,239],{"class":238},[228,76095,822],{"class":343},[228,76097,1204],{"class":234},[228,76099,76068],{"class":287},[228,76101,540],{"class":234},[228,76103,822],{"class":343},[228,76105,796],{"class":238},[228,76107,75360],{"class":2077},[228,76109,239],{"class":238},[228,76111,76112],{"class":343},"'b'",[228,76114,75368],{"class":238},[228,76116,75371],{"class":297},[228,76118,76119,76121,76123,76125,76127,76129,76131,76133,76135,76137,76139,76141,76144,76146],{"class":230,"line":9913},[228,76120,73868],{"class":238},[228,76122,58362],{"class":2077},[228,76124,239],{"class":238},[228,76126,822],{"class":343},[228,76128,1204],{"class":234},[228,76130,76068],{"class":287},[228,76132,540],{"class":234},[228,76134,822],{"class":343},[228,76136,796],{"class":238},[228,76138,75360],{"class":2077},[228,76140,239],{"class":238},[228,76142,76143],{"class":343},"'c'",[228,76145,75368],{"class":238},[228,76147,75371],{"class":297},[228,76149,76150,76152,76154,76156,76158,76160,76162,76164,76166,76168,76171,76173],{"class":230,"line":9918},[228,76151,73868],{"class":238},[228,76153,58362],{"class":2077},[228,76155,239],{"class":238},[228,76157,822],{"class":343},[228,76159,76068],{"class":287},[228,76161,822],{"class":343},[228,76163,796],{"class":238},[228,76165,75360],{"class":2077},[228,76167,239],{"class":238},[228,76169,76170],{"class":343},"'ab'",[228,76172,75368],{"class":238},[228,76174,75371],{"class":297},[228,76176,76177,76179,76181,76183,76185,76187,76189,76191,76193,76195,76197,76199,76201,76203],{"class":230,"line":9927},[228,76178,73868],{"class":238},[228,76180,58362],{"class":2077},[228,76182,239],{"class":238},[228,76184,822],{"class":343},[228,76186,1204],{"class":234},[228,76188,76068],{"class":287},[228,76190,540],{"class":234},[228,76192,822],{"class":343},[228,76194,796],{"class":238},[228,76196,75360],{"class":2077},[228,76198,239],{"class":238},[228,76200,76170],{"class":343},[228,76202,75368],{"class":238},[228,76204,76205],{"class":297},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[228,76207,76208,76210,76212,76214,76216,76218,76220,76223,76225,76227,76229,76231,76233,76235],{"class":230,"line":9932},[228,76209,73868],{"class":238},[228,76211,58362],{"class":2077},[228,76213,239],{"class":238},[228,76215,822],{"class":343},[228,76217,1204],{"class":234},[228,76219,76068],{"class":287},[228,76221,76222],{"class":234},"{2}$",[228,76224,822],{"class":343},[228,76226,796],{"class":238},[228,76228,75360],{"class":2077},[228,76230,239],{"class":238},[228,76232,76170],{"class":343},[228,76234,75368],{"class":238},[228,76236,76237],{"class":297},"\u002F\u002Ftrue   可以选两个\n",[228,76239,76240,76242,76244,76246,76248,76250,76253,76255,76257,76259,76261,76263,76266,76268],{"class":230,"line":9938},[228,76241,73868],{"class":238},[228,76243,58362],{"class":2077},[228,76245,239],{"class":238},[228,76247,822],{"class":343},[228,76249,1204],{"class":234},[228,76251,76252],{"class":287},"[a-z]",[228,76254,540],{"class":234},[228,76256,822],{"class":343},[228,76258,796],{"class":238},[228,76260,75360],{"class":2077},[228,76262,239],{"class":238},[228,76264,76265],{"class":343},"'p'",[228,76267,75424],{"class":238},[228,76269,76270],{"class":297},"\u002F\u002Ftrue   依然只能选一个\n",[228,76272,76273,76275,76277,76279,76281,76283,76286,76288,76290,76292,76294,76296,76298,76300],{"class":230,"line":9959},[228,76274,73868],{"class":238},[228,76276,58362],{"class":2077},[228,76278,239],{"class":238},[228,76280,822],{"class":343},[228,76282,1204],{"class":234},[228,76284,76285],{"class":287},"[A-Z]",[228,76287,540],{"class":234},[228,76289,822],{"class":343},[228,76291,796],{"class":238},[228,76293,75360],{"class":2077},[228,76295,239],{"class":238},[228,76297,76265],{"class":343},[228,76299,75424],{"class":238},[228,76301,75494],{"class":297},[228,76303,76304,76306,76308,76310,76312,76314,76316,76318,76320,76322,76324,76326,76329,76331],{"class":230,"line":9965},[228,76305,73868],{"class":238},[228,76307,58362],{"class":2077},[228,76309,239],{"class":238},[228,76311,822],{"class":343},[228,76313,1204],{"class":234},[228,76315,76285],{"class":287},[228,76317,540],{"class":234},[228,76319,822],{"class":343},[228,76321,796],{"class":238},[228,76323,75360],{"class":2077},[228,76325,239],{"class":238},[228,76327,76328],{"class":343},"'P'",[228,76330,75424],{"class":238},[228,76332,75371],{"class":297},[228,76334,76335,76337,76339,76341,76343,76345,76348,76350,76352,76354,76356,76358,76361,76363],{"class":230,"line":9979},[228,76336,73868],{"class":238},[228,76338,58362],{"class":2077},[228,76340,239],{"class":238},[228,76342,822],{"class":343},[228,76344,1204],{"class":234},[228,76346,76347],{"class":287},"[0-9]",[228,76349,540],{"class":234},[228,76351,822],{"class":343},[228,76353,796],{"class":238},[228,76355,75360],{"class":2077},[228,76357,239],{"class":238},[228,76359,76360],{"class":343},"'0'",[228,76362,75424],{"class":238},[228,76364,75371],{"class":297},[228,76366,76367,76369,76371,76373,76375,76377,76380,76382,76384,76386,76388,76390,76392,76394],{"class":230,"line":9985},[228,76368,73868],{"class":238},[228,76370,58362],{"class":2077},[228,76372,239],{"class":238},[228,76374,822],{"class":343},[228,76376,1204],{"class":234},[228,76378,76379],{"class":287},"[a-zA-Z0-9]",[228,76381,540],{"class":234},[228,76383,822],{"class":343},[228,76385,796],{"class":238},[228,76387,75360],{"class":2077},[228,76389,239],{"class":238},[228,76391,76265],{"class":343},[228,76393,75368],{"class":238},[228,76395,75371],{"class":297},[228,76397,76398,76400,76402],{"class":230,"line":10012},[228,76399,52532],{"class":238},[228,76401,51928],{"class":51415},[228,76403,51422],{"class":238},[228,76405,76406,76408,76410],{"class":230,"line":10021},[228,76407,51900],{"class":238},[228,76409,51915],{"class":51415},[228,76411,51422],{"class":238},[228,76413,76414],{"class":230,"line":10027},[228,76415,2514],{"emptyLinePlaceholder":157},[228,76417,76418,76420,76422],{"class":230,"line":10035},[228,76419,51900],{"class":238},[228,76421,50750],{"class":51415},[228,76423,51422],{"class":238},[22113,76425,76427],{"id":76426},"_3624-修饰符","3.6.2.4 修饰符",[19,76429,76430],{},[1576,76431],{"alt":141,"src":76432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,76434,76435],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,76437,76438],{},[1576,76439],{"alt":141,"src":76440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[220,76442,76444],{"className":50748,"code":76443,"language":50750,"meta":141,"style":141},"\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",[30,76445,76446,76456,76470,76478,76492,76512,76524,76532,76540,76548,76580,76611,76616,76648,76659,76692,76701,76709,76717],{"__ignoreMap":141},[228,76447,76448,76450,76452,76454],{"class":230,"line":231},[228,76449,51412],{"class":238},[228,76451,51416],{"class":51415},[228,76453,51419],{"class":2077},[228,76455,51422],{"class":238},[228,76457,76458,76460,76462,76464,76466,76468],{"class":230,"line":142},[228,76459,1148],{"class":238},[228,76461,50750],{"class":51415},[228,76463,51431],{"class":2077},[228,76465,284],{"class":238},[228,76467,51436],{"class":343},[228,76469,51422],{"class":238},[228,76471,76472,76474,76476],{"class":230,"line":1293},[228,76473,1148],{"class":238},[228,76475,51449],{"class":51415},[228,76477,51422],{"class":238},[228,76479,76480,76482,76484,76486,76488,76490],{"class":230,"line":1308},[228,76481,52259],{"class":238},[228,76483,51459],{"class":51415},[228,76485,51462],{"class":2077},[228,76487,284],{"class":238},[228,76489,51467],{"class":343},[228,76491,51422],{"class":238},[228,76493,76494,76496,76498,76500,76502,76504,76506,76508,76510],{"class":230,"line":1314},[228,76495,52259],{"class":238},[228,76497,51459],{"class":51415},[228,76499,15035],{"class":2077},[228,76501,284],{"class":238},[228,76503,51506],{"class":343},[228,76505,51486],{"class":2077},[228,76507,284],{"class":238},[228,76509,51513],{"class":343},[228,76511,51422],{"class":238},[228,76513,76514,76516,76518,76520,76522],{"class":230,"line":1328},[228,76515,52259],{"class":238},[228,76517,51522],{"class":51415},[228,76519,51525],{"class":238},[228,76521,51522],{"class":51415},[228,76523,51422],{"class":238},[228,76525,76526,76528,76530],{"class":230,"line":1334},[228,76527,51900],{"class":238},[228,76529,51449],{"class":51415},[228,76531,51422],{"class":238},[228,76533,76534,76536,76538],{"class":230,"line":1425},[228,76535,1148],{"class":238},[228,76537,51915],{"class":51415},[228,76539,51422],{"class":238},[228,76541,76542,76544,76546],{"class":230,"line":1431},[228,76543,52259],{"class":238},[228,76545,51928],{"class":51415},[228,76547,51422],{"class":238},[228,76549,76550,76552,76554,76556,76558,76560,76563,76565,76567,76569,76571,76573,76576,76578],{"class":230,"line":1443},[228,76551,73868],{"class":238},[228,76553,58362],{"class":2077},[228,76555,239],{"class":238},[228,76557,822],{"class":343},[228,76559,1204],{"class":234},[228,76561,76562],{"class":48092},"java",[228,76564,540],{"class":234},[228,76566,822],{"class":343},[228,76568,796],{"class":238},[228,76570,75360],{"class":2077},[228,76572,239],{"class":238},[228,76574,76575],{"class":343},"'java'",[228,76577,75870],{"class":238},[228,76579,75371],{"class":297},[228,76581,76582,76584,76586,76588,76590,76592,76594,76596,76598,76600,76602,76604,76607,76609],{"class":230,"line":1726},[228,76583,73868],{"class":238},[228,76585,58362],{"class":2077},[228,76587,239],{"class":238},[228,76589,822],{"class":343},[228,76591,1204],{"class":234},[228,76593,76562],{"class":48092},[228,76595,540],{"class":234},[228,76597,822],{"class":343},[228,76599,796],{"class":238},[228,76601,75360],{"class":2077},[228,76603,239],{"class":238},[228,76605,76606],{"class":343},"'Java'",[228,76608,75870],{"class":238},[228,76610,75494],{"class":297},[228,76612,76613],{"class":230,"line":1731},[228,76614,76615],{"class":297},"    \u002F\u002F 不区分大小写、\n",[228,76617,76618,76620,76622,76624,76626,76628,76630,76632,76634,76636,76638,76640,76642,76644,76646],{"class":230,"line":1737},[228,76619,73868],{"class":238},[228,76621,58362],{"class":2077},[228,76623,239],{"class":238},[228,76625,822],{"class":343},[228,76627,1204],{"class":234},[228,76629,76562],{"class":48092},[228,76631,540],{"class":234},[228,76633,822],{"class":343},[228,76635,679],{"class":234},[228,76637,796],{"class":238},[228,76639,75360],{"class":2077},[228,76641,239],{"class":238},[228,76643,76606],{"class":343},[228,76645,75870],{"class":238},[228,76647,75371],{"class":297},[228,76649,76650,76652,76654,76656],{"class":230,"line":1742},[228,76651,11336],{"class":234},[228,76653,74034],{"class":287},[228,76655,13679],{"class":234},[228,76657,76658],{"class":343}," 'java是一门编程语言，学完java工资很高'\n",[228,76660,76661,76663,76666,76668,76671,76674,76676,76678,76680,76682,76685,76687,76690],{"class":230,"line":1756},[228,76662,11336],{"class":234},[228,76664,76665],{"class":287}," result",[228,76667,13679],{"class":234},[228,76669,76670],{"class":238}," str.",[228,76672,76673],{"class":2077},"replace",[228,76675,239],{"class":238},[228,76677,822],{"class":343},[228,76679,76562],{"class":48092},[228,76681,822],{"class":343},[228,76683,76684],{"class":234},"ig",[228,76686,12550],{"class":238},[228,76688,76689],{"class":343},"'前端'",[228,76691,245],{"class":238},[228,76693,76694,76696,76698],{"class":230,"line":1761},[228,76695,73868],{"class":238},[228,76697,58362],{"class":2077},[228,76699,76700],{"class":238},"(result)\n",[228,76702,76703,76705,76707],{"class":230,"line":1767},[228,76704,52532],{"class":238},[228,76706,51928],{"class":51415},[228,76708,51422],{"class":238},[228,76710,76711,76713,76715],{"class":230,"line":1788},[228,76712,51900],{"class":238},[228,76714,51915],{"class":51415},[228,76716,51422],{"class":238},[228,76718,76719,76721,76723],{"class":230,"line":1793},[228,76720,51900],{"class":238},[228,76722,50750],{"class":51415},[228,76724,51422],{"class":238},[5241,76726,76727],{},"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":141,"searchDepth":142,"depth":142,"links":76729},[76730,76740,76752,76769,76776,76784],{"id":53475,"depth":142,"text":53476,"children":76731},[76732,76733,76734,76735,76736,76737,76738,76739],{"id":53479,"depth":1293,"text":53480},{"id":53512,"depth":1293,"text":53513},{"id":53551,"depth":1293,"text":53552},{"id":53709,"depth":1293,"text":53710},{"id":53757,"depth":1293,"text":53758},{"id":53894,"depth":1293,"text":53895},{"id":54216,"depth":1293,"text":54217},{"id":57204,"depth":1293,"text":57205},{"id":57232,"depth":142,"text":57233,"children":76741},[76742,76743,76744,76745,76746,76747,76748,76749,76750,76751],{"id":57236,"depth":1293,"text":57237},{"id":57259,"depth":1293,"text":57260},{"id":58174,"depth":1293,"text":58175},{"id":58864,"depth":1293,"text":58865},{"id":59146,"depth":1293,"text":59147},{"id":63307,"depth":1293,"text":63308},{"id":63477,"depth":1293,"text":63478},{"id":63605,"depth":1293,"text":63606},{"id":63630,"depth":1293,"text":63631},{"id":65019,"depth":1293,"text":65020},{"id":66172,"depth":142,"text":66173,"children":76753},[76754,76755,76756,76757,76758,76759,76760,76761,76762,76763,76764,76765,76766,76767,76768],{"id":66176,"depth":1293,"text":66177},{"id":66830,"depth":1293,"text":66831},{"id":68525,"depth":1293,"text":68526},{"id":68566,"depth":1293,"text":68567},{"id":68608,"depth":1293,"text":68609},{"id":68622,"depth":1293,"text":68623},{"id":68671,"depth":1293,"text":68672},{"id":68683,"depth":1293,"text":68684},{"id":68698,"depth":1293,"text":68699},{"id":68734,"depth":1293,"text":68735},{"id":68815,"depth":1293,"text":68816},{"id":68943,"depth":1293,"text":68944},{"id":68955,"depth":1293,"text":68956},{"id":68974,"depth":1293,"text":68975},{"id":71085,"depth":1293,"text":71086},{"id":71104,"depth":142,"text":71105,"children":76770},[76771,76772,76773,76774,76775],{"id":71125,"depth":1293,"text":71126},{"id":71145,"depth":1293,"text":71146},{"id":71194,"depth":1293,"text":71195},{"id":71319,"depth":1293,"text":71320},{"id":71500,"depth":1293,"text":71501},{"id":71518,"depth":142,"text":71519,"children":76777},[76778,76779,76780,76781,76782,76783],{"id":71533,"depth":1293,"text":71534},{"id":71592,"depth":1293,"text":71593},{"id":71616,"depth":1293,"text":71617},{"id":71936,"depth":1293,"text":71937},{"id":71968,"depth":1293,"text":71969},{"id":71991,"depth":1293,"text":71992},{"id":75059,"depth":142,"text":75060,"children":76785},[76786,76787],{"id":75093,"depth":1293,"text":75094},{"id":75132,"depth":1293,"text":75133},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53447,"description":154},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76794,"title":76795,"body":76796,"description":154,"extension":155,"meta":92933,"navigation":157,"path":92934,"seo":92935,"stem":92936,"__hash__":92937},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76797,"toc":92869},[76798,76801,76804,76808,76812,76817,76822,76833,76837,76842,76845,76849,76852,76857,76861,76865,76868,76873,76876,76880,76883,76891,76894,76898,76903,76908,76911,76915,76920,76925,76928,76932,76937,76940,76945,76948,76953,76956,76961,76966,76969,76972,76976,76981,76986,76989,76993,76997,77000,77003,77006,77010,77014,77019,77024,77027,77031,77036,77041,77044,77047,77050,77053,77056,77059,77062,77065,77068,77073,77077,77082,77087,77090,77093,77096,77099,77102,77105,77108,77111,77115,77119,77122,77125,77128,77133,77135,77138,77141,77144,77147,77150,77153,77156,77159,77162,77165,77168,77171,77174,77179,77184,77189,77192,77196,77199,77204,77208,77210,77221,77226,77327,77330,77333,77336,77339,77342,77345,77348,77351,77353,77356,77359,77362,77365,77368,77370,77373,77376,77379,77382,77385,77388,77390,77393,77395,77397,77400,77404,77408,77411,77414,77417,77420,77423,77426,77429,77432,77435,77440,77560,77563,77566,77571,77574,77577,77580,77583,77588,77591,77594,77597,77600,77605,77608,77708,77773,77847,77851,77854,77857,77861,77864,77878,77907,77910,77913,77916,77919,77922,77925,77928,77930,77933,77936,77939,77942,77946,77951,77955,77960,78035,78038,78221,78224,78227,78230,78233,78236,78238,78241,78244,78247,78250,78253,78256,78258,78262,78265,78270,78273,78276,78279,78282,78284,78289,78292,78295,78298,78301,78303,78308,78311,78314,78316,78318,78321,78325,78328,78331,78336,78339,78342,78345,78395,78400,78404,78409,78412,78481,78484,78493,78497,78502,78505,78508,78516,78519,78536,80338,80342,80346,80351,80354,80358,80364,80370,80522,80527,80532,80535,80538,80541,80544,80547,80550,80553,80556,80559,80562,80565,80568,80573,80577,80580,80591,80595,80600,80603,80606,80609,80612,80615,80617,80620,80623,80626,80629,80631,80648,80651,80655,80658,80663,80668,80671,80674,80678,80681,80684,80693,80696,80700,80703,80708,80713,80780,80784,80787,80790,80795,80800,80886,80891,80895,80898,80901,80916,80919,80924,80928,80933,81042,81045,81056,81206,81210,81215,81324,81328,81333,81338,81343,81346,81353,81373,81409,81573,81578,81581,81586,81593,81596,81599,81602,81661,81717,81773,81777,81782,82097,82100,82104,82107,82112,82221,82226,82230,82235,82239,82310,82314,82316,82319,82322,82360,82636,82640,82657,82723,82757,82761,82764,82769,82798,82805,82814,82819,82834,82839,82848,82851,82988,82992,83054,83058,83063,83308,83312,83317,83320,83323,83326,83329,83333,83338,84919,84923,84927,84933,84936,84941,84945,84948,84953,84956,84967,84971,84976,84980,84985,84990,84993,84998,85002,85006,85009,85014,85019,85022,85025,85028,85150,85155,85257,85260,85263,85267,85272,85444,85449,85453,85456,85461,85527,85532,85535,85666,85669,85674,85677,85680,85771,85776,85779,85782,85785,85788,85793,85798,85801,85806,85811,85816,85820,85823,85826,85831,85836,85841,85846,85900,85903,85906,85911,85914,85917,85922,85927,85932,85936,85941,85955,85960,85963,85968,85972,85977,85982,85987,85992,85997,86002,86007,86012,86015,86019,86024,86027,86030,86033,86038,86043,86046,86049,86053,86056,86059,86064,86069,86074,86079,86082,86087,86092,86153,86158,86161,86166,87407,87412,87416,87420,87425,87428,87433,87438,87441,87446,87448,87453,87457,87460,87463,87474,87478,87483,87488,87543,87548,87553,87558,87769,87774,87778,87783,87786,87788,87791,87794,88241,88246,88253,88259,88262,88265,88529,88534,88538,88803,88808,88812,88817,88822,88827,88832,89163,89166,89171,89176,89179,89183,89187,89192,89197,89202,89207,89212,89217,89221,89224,89229,89234,89237,89311,89316,89321,89326,89328,89331,89701,89706,89711,89716,89719,89722,89824,89829,89834,89937,89941,89946,89950,89954,89959,89964,89967,89972,89975,89978,90371,90376,90379,90382,90385,90388,90908,90912,90917,90922,90927,90930,90935,90938,90941,91323,91328,91330,91332,91335,91338,91850,91854,91915,91918,91921,91924,91928,91931,91936,91941,92866],[10,76799,76795],{"id":76800},"_4js进阶",[19,76802,76803],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,76805,76807],{"id":76806},"_41-作用域","4.1 作用域",[200,76809,76811],{"id":76810},"_411-局部作用域","4.1.1 局部作用域",[19,76813,76814],{},[1576,76815],{"alt":141,"src":76816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,76818,76819],{},[1576,76820],{"alt":141,"src":76821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1245,76823,76824,76827,76830],{},[186,76825,76826],{},"函数作用域在函数内部",[186,76828,76829],{},"块级作用域在{}",[186,76831,76832],{},"对象的那个{}不是作用域，不是块作用域",[200,76834,76836],{"id":76835},"_412-全局作用域","4.1.2 全局作用域",[19,76838,76839],{},[1576,76840],{"alt":141,"src":76841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,76843,76844],{},"window.a=10不要这样写",[200,76846,76848],{"id":76847},"_413-作用域链","4.1.3 作用域链",[19,76850,76851],{},"变量查找机制",[19,76853,76854],{},[1576,76855],{"alt":141,"src":76856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,76858,76860],{"id":76859},"_42-垃圾回收机制","4.2 垃圾回收机制",[200,76862,76864],{"id":76863},"_421-大体介绍","4.2.1 大体介绍",[19,76866,76867],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,76869,76870],{},[1576,76871],{"alt":141,"src":76872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,76874,76875],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[200,76877,76879],{"id":76878},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,76881,76882],{},"堆栈空间分配区别：",[183,76884,76885,76888],{},[186,76886,76887],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[186,76889,76890],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,76892,76893],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22113,76895,76897],{"id":76896},"_4221-引用计数","4.2.2.1 引用计数",[19,76899,76900],{},[1576,76901],{"alt":141,"src":76902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,76904,76905],{},[1576,76906],{"alt":141,"src":76907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,76909,76910],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22113,76912,76914],{"id":76913},"_4222-标记清除法","4.2.2.2 标记清除法",[19,76916,76917],{},[1576,76918],{"alt":141,"src":76919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,76921,76922],{},[1576,76923],{"alt":141,"src":76924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,76926,76927],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,76929,76931],{"id":76930},"_43-闭包","4.3 闭包",[19,76933,76934],{},[1576,76935],{"alt":141,"src":76936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,76938,76939],{},"闭包：内层函数+外层函数的变量",[19,76941,76942],{},[1576,76943],{"alt":141,"src":76944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,76946,76947],{},"closure就是闭包",[19,76949,76950],{},[1576,76951],{"alt":141,"src":76952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,76954,76955],{},"内层函数必须包含外层函数的变量才是闭包",[19,76957,76958],{},[1576,76959],{"alt":141,"src":76960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,76962,76963],{},[1576,76964],{"alt":141,"src":76965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,76967,76968],{},"闭包可能会引起内存泄漏",[19,76970,76971],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,76973,76975],{"id":76974},"_44-变量提升","4.4 变量提升",[19,76977,76978],{},[1576,76979],{"alt":141,"src":76980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,76982,76983],{},[1576,76984],{"alt":141,"src":76985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,76987,76988],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,76990,76992],{"id":76991},"_45-函数进阶","4.5 函数进阶",[200,76994,76996],{"id":76995},"_451-函数提升","4.5.1 函数提升",[19,76998,76999],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,77001,77002],{},"只提升函数声明，不提升函数调用",[51928,77004,77005],{},"\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",[200,77007,77009],{"id":77008},"_452-函数参数","4.5.2 函数参数",[22113,77011,77013],{"id":77012},"_4521-动态参数","4.5.2.1 动态参数",[19,77015,77016],{},[1576,77017],{"alt":141,"src":77018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,77020,77021],{},[1576,77022],{"alt":141,"src":77023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,77025,77026],{},"箭头函数里边没有arguments",[22113,77028,77030],{"id":77029},"_4522-剩余参数","4.5.2.2 剩余参数",[19,77032,77033],{},[1576,77034],{"alt":141,"src":77035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,77037,77038],{},[1576,77039],{"alt":141,"src":77040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,77042,77043],{},"剩余参数使用的时候不需要写...",[19,77045,77046],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,77048,77049],{},"  function getSum(a,b,...arr) {",[19,77051,77052],{},"  console.log(11)",[19,77054,77055],{},"  }",[19,77057,77058],{},"  getSum(1,2,3,4)",[19,77060,77061],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,77063,77064],{},"  getSum(1,2)",[19,77066,77067],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,77069,77070],{},[1576,77071],{"alt":141,"src":77072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22113,77074,77076],{"id":77075},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,77078,77079],{},[1576,77080],{"alt":141,"src":77081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,77083,77084],{},[1576,77085],{"alt":141,"src":77086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,77088,77089],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,77091,77092],{},"展开运算符可以用于数组之间的合并：",[19,77094,77095],{},"const arr1 = [1, 2, 3]",[19,77097,77098],{},"const arr2 = [3, 4, 5]",[19,77100,77101],{},"const arr = [...arr1, ...arr2]",[19,77103,77104],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,77106,77107],{},"剩余参数：函数参数使用，得到真数组",[19,77109,77110],{},"展开运算符：数组中使用，数组展开",[200,77112,77114],{"id":77113},"_453-箭头函数","4.5.3 箭头函数",[22113,77116,77118],{"id":77117},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,77120,77121],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,77123,77124],{},"它不是万能的！！！",[19,77126,77127],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,77129,77130],{},[1576,77131],{"alt":141,"src":77132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,77134,268],{},[19,77136,77137],{},"① 只有一个形参的时候，可以省略小括号：",[19,77139,77140],{},"const fn=x=>{console.log(x)}",[19,77142,77143],{},"② 只有一行代码时可以省略大括号：",[19,77145,77146],{},"const fn=x=>console.log(11)",[19,77148,77149],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,77151,77152],{},"const fn=x=>x+x",[19,77154,77155],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,77157,77158],{},"⑤ 阻止表单默认提交：",[19,77160,77161],{},"const form = document.querySelector('form')",[19,77163,77164],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,77166,77167],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,77169,77170],{},"const fn=uname=>({uname:uname})",[19,77172,77173],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,77175,77176],{},[1576,77177],{"alt":141,"src":77178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,77180,77181],{},[1576,77182],{"alt":141,"src":77183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,77185,77186],{},[1576,77187],{"alt":141,"src":77188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,77190,77191],{},"一定不要忘记用()，有()就理解为自带return",[22113,77193,77195],{"id":77194},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,77197,77198],{},"箭头函数是没有动态参数的arguments",[19,77200,77201],{},[1576,77202],{"alt":141,"src":77203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22113,77205,77207],{"id":77206},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,77209,11447],{},[183,77211,77212,77215,77218],{},[186,77213,77214],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[186,77216,77217],{},"事件回调函数使用箭头函数时，this 为全局的 window",[186,77219,77220],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,77222,77223],{},[1576,77224],{"alt":141,"src":77225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[220,77227,77229],{"className":53182,"code":77228,"language":53184,"meta":141,"style":141},"  \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",[30,77230,77231,77239,77244,77249,77254,77259,77264,77268,77273,77277,77281,77286,77291,77296,77300,77304,77309,77314,77319],{"__ignoreMap":141},[228,77232,77233,77235,77237],{"class":230,"line":231},[228,77234,52259],{"class":238},[228,77236,51928],{"class":51415},[228,77238,51422],{"class":238},[228,77240,77241],{"class":230,"line":142},[228,77242,77243],{"class":238},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[228,77245,77246],{"class":230,"line":1293},[228,77247,77248],{"class":238},"    console.log(this) \u002F\u002F指向window\n",[228,77250,77251],{"class":230,"line":1308},[228,77252,77253],{"class":238},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[228,77255,77256],{"class":230,"line":1314},[228,77257,77258],{"class":238},"    function fn() {\n",[228,77260,77261],{"class":230,"line":1328},[228,77262,77263],{"class":238},"      console.log(this)  \u002F\u002F指向window\n",[228,77265,77266],{"class":230,"line":1334},[228,77267,2301],{"class":238},[228,77269,77270],{"class":230,"line":1425},[228,77271,77272],{"class":238},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[228,77274,77275],{"class":230,"line":1431},[228,77276,2514],{"emptyLinePlaceholder":157},[228,77278,77279],{"class":230,"line":1443},[228,77280,71638],{"class":238},[228,77282,77283],{"class":230,"line":1726},[228,77284,77285],{"class":238},"      name: 'andy',\n",[228,77287,77288],{"class":230,"line":1731},[228,77289,77290],{"class":238},"      sayHai: function () {\n",[228,77292,77293],{"class":230,"line":1737},[228,77294,77295],{"class":238},"        console.log(this)\n",[228,77297,77298],{"class":230,"line":1742},[228,77299,52513],{"class":238},[228,77301,77302],{"class":230,"line":1756},[228,77303,2301],{"class":238},[228,77305,77306],{"class":230,"line":1761},[228,77307,77308],{"class":238},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[228,77310,77311],{"class":230,"line":1767},[228,77312,77313],{"class":238},"    \u002F\u002F 2.箭头函数的this\n",[228,77315,77316],{"class":230,"line":1788},[228,77317,77318],{"class":238},"    const fn = () => console.log(this)\n",[228,77320,77321,77323,77325],{"class":230,"line":1793},[228,77322,52532],{"class":238},[228,77324,51928],{"class":51415},[228,77326,51422],{"class":238},[19,77328,77329],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,77331,77332],{},"const fn = () => console.log(this)",[19,77334,77335],{},"fn() \u002F\u002F指向window",[19,77337,77338],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,77340,77341],{},"①",[19,77343,77344],{},"const obj = {",[19,77346,77347],{},"uname: 'pink老师',",[19,77349,77350],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,77352,1184],{},[19,77354,77355],{},"调用对象里边的函数",[19,77357,77358],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,77360,77361],{},"obj.sayHai()",[19,77363,77364],{},"②",[19,77366,77367],{},"const obj1 = {",[19,77369,77347],{},[19,77371,77372],{},"sayHai: function () {",[19,77374,77375],{},"let i = 10",[19,77377,77378],{},"const count = () => {",[19,77380,77381],{},"console.log(this)",[19,77383,77384],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,77386,77387],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,77389,1184],{},[19,77391,77392],{},"count()",[19,77394,1184],{},[19,77396,1184],{},[19,77398,77399],{},"obj1.sayHai()",[14,77401,77403],{"id":77402},"_46-解构赋值","4.6 解构赋值",[200,77405,77407],{"id":77406},"_461-数组解构","4.6.1 数组解构",[19,77409,77410],{},"以前要是使用数组中的值的话：",[19,77412,77413],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,77415,77416],{},"const arr=[100,60,80]",[19,77418,77419],{},"const max=arr[0]",[19,77421,77422],{},"const min=arr[1]",[19,77424,77425],{},"const avg=arr[2]",[19,77427,77428],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,77430,77431],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,77433,77434],{},"这个写法就类似于上边的那种用很多const的方法",[19,77436,77437],{},[1576,77438],{"alt":141,"src":77439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[220,77441,77443],{"className":50748,"code":77442,"language":50750,"meta":141,"style":141},"①变量之间交换值:\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",[30,77444,77445,77450,77455,77460,77465,77470,77474,77478,77483,77487,77492,77497,77501,77506,77511,77522,77532,77537,77542,77547,77551,77555],{"__ignoreMap":141},[228,77446,77447],{"class":230,"line":231},[228,77448,77449],{"class":238},"①变量之间交换值:\n",[228,77451,77452],{"class":230,"line":142},[228,77453,77454],{"class":238},"let a=1\n",[228,77456,77457],{"class":230,"line":1293},[228,77458,77459],{"class":238},"let b=2;\n",[228,77461,77462],{"class":230,"line":1308},[228,77463,77464],{"class":238},"必须加这行代码，不然就会报错\n",[228,77466,77467],{"class":230,"line":1314},[228,77468,77469],{"class":238},"[b,a]=[a,b]\n",[228,77471,77472],{"class":230,"line":1328},[228,77473,2514],{"emptyLinePlaceholder":157},[228,77475,77476],{"class":230,"line":1334},[228,77477,2514],{"emptyLinePlaceholder":157},[228,77479,77480],{"class":230,"line":1425},[228,77481,77482],{"class":238},"可以写成下面的方式：\n",[228,77484,77485],{"class":230,"line":1431},[228,77486,77454],{"class":238},[228,77488,77489],{"class":230,"line":1443},[228,77490,77491],{"class":238},"let b=2\n",[228,77493,77494],{"class":230,"line":1726},[228,77495,77496],{"class":238},";[b,a]=[a,b]\n",[228,77498,77499],{"class":230,"line":1731},[228,77500,2514],{"emptyLinePlaceholder":157},[228,77502,77503],{"class":230,"line":1737},[228,77504,77505],{"class":238},"②排序\n",[228,77507,77508],{"class":230,"line":1742},[228,77509,77510],{"class":238},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[228,77512,77513,77516,77519],{"class":230,"line":1756},[228,77514,77515],{"class":238},"for (let i = 0; i ",[228,77517,1148],{"class":77518},"s7hpK",[228,77520,77521],{"class":238}," arr1.length; i++) {\n",[228,77523,77524,77527,77529],{"class":230,"line":1761},[228,77525,77526],{"class":238},"   for (let j = 0; j ",[228,77528,1148],{"class":77518},[228,77530,77531],{"class":238}," arr1.length - 1; j++) {\n",[228,77533,77534],{"class":230,"line":1767},[228,77535,77536],{"class":238},"      if (arr1[j] > arr1[j + 1]) {\n",[228,77538,77539],{"class":230,"line":1788},[228,77540,77541],{"class":238},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[228,77543,77544],{"class":230,"line":1793},[228,77545,77546],{"class":238},"       }\n",[228,77548,77549],{"class":230,"line":1807},[228,77550,4423],{"class":238},[228,77552,77553],{"class":230,"line":1812},[228,77554,1679],{"class":238},[228,77556,77557],{"class":230,"line":1841},[228,77558,77559],{"class":238},"console.log(arr1)\n",[19,77561,77562],{},"数组解构的细节：",[19,77564,77565],{},"①变量多，单元值少",[19,77567,77568],{},[1576,77569],{"alt":141,"src":77570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,77572,77573],{},"防止出现undefined的方法：",[19,77575,77576],{},"const [a=0,b=0] =[1]",[19,77578,77579],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,77581,77582],{},"②变量少，单元值多",[19,77584,77585],{},[1576,77586],{"alt":141,"src":77587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,77589,77590],{},"此时可以使用剩余参数来接收多余的值",[19,77592,77593],{},"const [a,b,...c]=[1,2,3,4]",[19,77595,77596],{},"console.log(c) 输出[3,4]",[19,77598,77599],{},"③可以按需导入，忽略某些返回值",[19,77601,77602],{},[1576,77603],{"alt":141,"src":77604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,77606,77607],{},"④支持多维数组的结构",[220,77609,77613],{"className":77610,"code":77611,"language":77612,"meta":141,"style":141},"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",[30,77614,77615,77643,77659,77674,77689],{"__ignoreMap":141},[228,77616,77617,77619,77621,77623,77625,77627,77629,77631,77634,77636,77638,77640],{"class":230,"line":231},[228,77618,6907],{"class":234},[228,77620,51948],{"class":238},[228,77622,284],{"class":234},[228,77624,52341],{"class":238},[228,77626,456],{"class":287},[228,77628,12550],{"class":238},[228,77630,316],{"class":287},[228,77632,77633],{"class":238},", [",[228,77635,310],{"class":287},[228,77637,12550],{"class":238},[228,77639,531],{"class":287},[228,77641,77642],{"class":238},"]]\n",[228,77644,77645,77648,77650,77652,77654,77656],{"class":230,"line":142},[228,77646,77647],{"class":238},"console.",[228,77649,58362],{"class":2077},[228,77651,3965],{"class":238},[228,77653,430],{"class":287},[228,77655,4330],{"class":238},[228,77657,77658],{"class":297},"  \u002F\u002F1\n",[228,77660,77661,77663,77665,77667,77669,77671],{"class":230,"line":1293},[228,77662,77647],{"class":238},[228,77664,58362],{"class":2077},[228,77666,3965],{"class":238},[228,77668,456],{"class":287},[228,77670,4330],{"class":238},[228,77672,77673],{"class":297},"  \u002F\u002F2\n",[228,77675,77676,77678,77680,77682,77684,77686],{"class":230,"line":1308},[228,77677,77647],{"class":238},[228,77679,58362],{"class":2077},[228,77681,3965],{"class":238},[228,77683,316],{"class":287},[228,77685,4330],{"class":238},[228,77687,77688],{"class":297},"  \u002F\u002F[3,4]\n",[228,77690,77691,77693,77695,77697,77699,77701,77703,77705],{"class":230,"line":1314},[228,77692,77647],{"class":238},[228,77694,58362],{"class":2077},[228,77696,3965],{"class":238},[228,77698,316],{"class":287},[228,77700,5015],{"class":238},[228,77702,430],{"class":287},[228,77704,4330],{"class":238},[228,77706,77707],{"class":297},"  \u002F\u002F3\n",[220,77709,77711],{"className":77610,"code":77710,"language":77612,"meta":141,"style":141},"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",[30,77712,77713,77740,77751,77762],{"__ignoreMap":141},[228,77714,77715,77717,77720,77722,77724,77726,77728,77730,77732,77734,77736,77738],{"class":230,"line":231},[228,77716,6907],{"class":234},[228,77718,77719],{"class":238}," [a, b, c] ",[228,77721,284],{"class":234},[228,77723,52341],{"class":238},[228,77725,456],{"class":287},[228,77727,12550],{"class":238},[228,77729,316],{"class":287},[228,77731,77633],{"class":238},[228,77733,310],{"class":287},[228,77735,12550],{"class":238},[228,77737,531],{"class":287},[228,77739,77642],{"class":238},[228,77741,77742,77744,77746,77749],{"class":230,"line":142},[228,77743,77647],{"class":238},[228,77745,58362],{"class":2077},[228,77747,77748],{"class":238},"(a)",[228,77750,77658],{"class":297},[228,77752,77753,77755,77757,77760],{"class":230,"line":1293},[228,77754,77647],{"class":238},[228,77756,58362],{"class":2077},[228,77758,77759],{"class":238},"(b)",[228,77761,77673],{"class":297},[228,77763,77764,77766,77768,77771],{"class":230,"line":1308},[228,77765,77647],{"class":238},[228,77767,58362],{"class":2077},[228,77769,77770],{"class":238},"(c)",[228,77772,77688],{"class":297},[220,77774,77776],{"className":77610,"code":77775,"language":77612,"meta":141,"style":141},"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",[30,77777,77778,77805,77815,77825,77835],{"__ignoreMap":141},[228,77779,77780,77782,77785,77787,77789,77791,77793,77795,77797,77799,77801,77803],{"class":230,"line":231},[228,77781,6907],{"class":234},[228,77783,77784],{"class":238}," [a, b, [c, d]] ",[228,77786,284],{"class":234},[228,77788,52341],{"class":238},[228,77790,456],{"class":287},[228,77792,12550],{"class":238},[228,77794,316],{"class":287},[228,77796,77633],{"class":238},[228,77798,310],{"class":287},[228,77800,12550],{"class":238},[228,77802,531],{"class":287},[228,77804,77642],{"class":238},[228,77806,77807,77809,77811,77813],{"class":230,"line":142},[228,77808,77647],{"class":238},[228,77810,58362],{"class":2077},[228,77812,77748],{"class":238},[228,77814,77658],{"class":297},[228,77816,77817,77819,77821,77823],{"class":230,"line":1293},[228,77818,77647],{"class":238},[228,77820,58362],{"class":2077},[228,77822,77759],{"class":238},[228,77824,77673],{"class":297},[228,77826,77827,77829,77831,77833],{"class":230,"line":1308},[228,77828,77647],{"class":238},[228,77830,58362],{"class":2077},[228,77832,77770],{"class":238},[228,77834,77707],{"class":297},[228,77836,77837,77839,77841,77844],{"class":230,"line":1314},[228,77838,77647],{"class":238},[228,77840,58362],{"class":2077},[228,77842,77843],{"class":238},"(d)",[228,77845,77846],{"class":297},"  \u002F\u002F4\n",[200,77848,77850],{"id":77849},"_462-对象解构","4.6.2 对象解构",[19,77852,77853],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,77855,77856],{},"用的非常非常多！！！！！！",[22113,77858,77860],{"id":77859},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,77862,77863],{},"基本语法：",[183,77865,77866,77869,77872,77875],{},[186,77867,77868],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[186,77870,77871],{},"对象属性的值将被赋值给与属性名相同的变量",[186,77873,77874],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[186,77876,77877],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[220,77879,77881],{"className":50748,"code":77880,"language":50750,"meta":141,"style":141},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[30,77882,77883,77888,77893,77898,77902],{"__ignoreMap":141},[228,77884,77885],{"class":230,"line":231},[228,77886,77887],{"class":238},"const obj = {\n",[228,77889,77890],{"class":230,"line":142},[228,77891,77892],{"class":238},"   uname: 'pink老师',\n",[228,77894,77895],{"class":230,"line":1293},[228,77896,77897],{"class":238},"   age: 18,\n",[228,77899,77900],{"class":230,"line":1308},[228,77901,1679],{"class":238},[228,77903,77904],{"class":230,"line":1314},[228,77905,77906],{"class":238},"const { uname, age } = obj\n",[19,77908,77909],{},"上方代码这样写等价于：",[19,77911,77912],{},"const uname等价于obj.uname",[19,77914,77915],{},"变量名可以重新改名：",[19,77917,77918],{},"const uname='red老师'",[19,77920,77921],{},"const user={",[19,77923,77924],{},"  uname:'pink老师',",[19,77926,77927],{},"  age:18",[19,77929,1184],{},[19,77931,77932],{},"const {uname,age}=user",[19,77934,77935],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,77937,77938],{},"const {旧变量名：新变量名}=对象",[19,77940,77941],{},"const {uname:username,age}=user",[22113,77943,77945],{"id":77944},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,77947,77948],{},[1576,77949],{"alt":141,"src":77950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22113,77952,77954],{"id":77953},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,77956,77957],{},[1576,77958],{"alt":141,"src":77959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[220,77961,77963],{"className":53182,"code":77962,"language":53184,"meta":141,"style":141},"  \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",[30,77964,77965,77973,77978,77983,77988,77993,77998,78003,78008,78013,78017,78022,78027],{"__ignoreMap":141},[228,77966,77967,77969,77971],{"class":230,"line":231},[228,77968,52259],{"class":238},[228,77970,51928],{"class":51415},[228,77972,51422],{"class":238},[228,77974,77975],{"class":230,"line":142},[228,77976,77977],{"class":238},"    const pig = {\n",[228,77979,77980],{"class":230,"line":1293},[228,77981,77982],{"class":238},"      name: '佩奇',\n",[228,77984,77985],{"class":230,"line":1308},[228,77986,77987],{"class":238},"      family: {\n",[228,77989,77990],{"class":230,"line":1314},[228,77991,77992],{"class":238},"        mother: '猪妈妈',\n",[228,77994,77995],{"class":230,"line":1328},[228,77996,77997],{"class":238},"        father: '猪爸爸',\n",[228,77999,78000],{"class":230,"line":1334},[228,78001,78002],{"class":238},"        sister: '乔治'\n",[228,78004,78005],{"class":230,"line":1425},[228,78006,78007],{"class":238},"      },\n",[228,78009,78010],{"class":230,"line":1431},[228,78011,78012],{"class":238},"      age: 6\n",[228,78014,78015],{"class":230,"line":1443},[228,78016,2301],{"class":238},[228,78018,78019],{"class":230,"line":1726},[228,78020,78021],{"class":238},"    \u002F\u002F 多级对象解构\n",[228,78023,78024],{"class":230,"line":1731},[228,78025,78026],{"class":238},"    const { name, family: { mother, father, sister }, age } = pig\n",[228,78028,78029,78031,78033],{"class":230,"line":1737},[228,78030,52532],{"class":238},[228,78032,51928],{"class":51415},[228,78034,51422],{"class":238},[19,78036,78037],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[220,78039,78042],{"className":78040,"code":78041,"language":76562,"meta":141,"style":141},"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",[30,78043,78044,78049,78060,78072,78084,78093,78097,78108,78120,78130,78135,78139,78149,78160,78169,78173,78177,78188,78199,78208,78212,78217],{"__ignoreMap":141},[228,78045,78046],{"class":230,"line":231},[228,78047,78048],{"class":297},"    \u002F\u002F 这是后台传递过来的数据\n",[228,78050,78051,78053,78056,78058],{"class":230,"line":142},[228,78052,11336],{"class":234},[228,78054,78055],{"class":238}," msg ",[228,78057,284],{"class":234},[228,78059,15687],{"class":238},[228,78061,78062,78065,78067,78070],{"class":230,"line":1293},[228,78063,78064],{"class":343},"      \"code\"",[228,78066,1097],{"class":234},[228,78068,78069],{"class":287}," 200",[228,78071,31581],{"class":238},[228,78073,78074,78077,78079,78082],{"class":230,"line":1308},[228,78075,78076],{"class":343},"      \"msg\"",[228,78078,1097],{"class":234},[228,78080,78081],{"class":343}," \"获取新闻列表成功\"",[228,78083,31581],{"class":238},[228,78085,78086,78089,78091],{"class":230,"line":1314},[228,78087,78088],{"class":343},"      \"data\"",[228,78090,1097],{"class":234},[228,78092,55562],{"class":238},[228,78094,78095],{"class":230,"line":1328},[228,78096,2624],{"class":238},[228,78098,78099,78102,78104,78106],{"class":230,"line":1334},[228,78100,78101],{"class":343},"          \"id\"",[228,78103,1097],{"class":234},[228,78105,25234],{"class":287},[228,78107,31581],{"class":238},[228,78109,78110,78113,78115,78118],{"class":230,"line":1425},[228,78111,78112],{"class":343},"          \"title\"",[228,78114,1097],{"class":234},[228,78116,78117],{"class":343}," \"5G商用自己，三大运用商收入下降\"",[228,78119,31581],{"class":238},[228,78121,78122,78125,78127],{"class":230,"line":1431},[228,78123,78124],{"class":343},"          \"count\"",[228,78126,1097],{"class":234},[228,78128,78129],{"class":287}," 58\n",[228,78131,78132],{"class":230,"line":1443},[228,78133,78134],{"class":238},"        },\n",[228,78136,78137],{"class":230,"line":1726},[228,78138,2624],{"class":238},[228,78140,78141,78143,78145,78147],{"class":230,"line":1731},[228,78142,78101],{"class":343},[228,78144,1097],{"class":234},[228,78146,14870],{"class":287},[228,78148,31581],{"class":238},[228,78150,78151,78153,78155,78158],{"class":230,"line":1737},[228,78152,78112],{"class":343},[228,78154,1097],{"class":234},[228,78156,78157],{"class":343}," \"国际媒体头条速览\"",[228,78159,31581],{"class":238},[228,78161,78162,78164,78166],{"class":230,"line":1742},[228,78163,78124],{"class":343},[228,78165,1097],{"class":234},[228,78167,78168],{"class":287}," 56\n",[228,78170,78171],{"class":230,"line":1756},[228,78172,78134],{"class":238},[228,78174,78175],{"class":230,"line":1761},[228,78176,2624],{"class":238},[228,78178,78179,78181,78183,78186],{"class":230,"line":1767},[228,78180,78101],{"class":343},[228,78182,1097],{"class":234},[228,78184,78185],{"class":287}," 3",[228,78187,31581],{"class":238},[228,78189,78190,78192,78194,78197],{"class":230,"line":1788},[228,78191,78112],{"class":343},[228,78193,1097],{"class":234},[228,78195,78196],{"class":343}," \"乌克兰和俄罗斯持续冲突\"",[228,78198,31581],{"class":238},[228,78200,78201,78203,78205],{"class":230,"line":1793},[228,78202,78124],{"class":343},[228,78204,1097],{"class":234},[228,78206,78207],{"class":287}," 1669\n",[228,78209,78210],{"class":230,"line":1807},[228,78211,78134],{"class":238},[228,78213,78214],{"class":230,"line":1812},[228,78215,78216],{"class":238},"      ]\n",[228,78218,78219],{"class":230,"line":1841},[228,78220,2301],{"class":238},[19,78222,78223],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,78225,78226],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,78228,78229],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[19,78231,78232],{},"function({data}) {",[19,78234,78235],{},"console.log(data)",[19,78237,1184],{},[19,78239,78240],{},"render(msg)",[19,78242,78243],{},"实参传递给形参的时候解构了",[19,78245,78246],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,78248,78249],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,78251,78252],{},"function render({data:mydata}) {",[19,78254,78255],{},"  console.log(data)",[19,78257,1184],{},[200,78259,78261],{"id":78260},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,78263,78264],{},"有两种情况：一个是数组结构，一个是立即执行函数",[183,78266,78267],{},[186,78268,78269],{},"如果对一个数组进行遍历，有两种方式：",[19,78271,78272],{},"①法1",[19,78274,78275],{},"const arr=[1,2,3]",[19,78277,78278],{},"arr.map(function(item,index) {",[19,78280,78281],{},"  console.log(item)",[19,78283,52579],{},[19,78285,78286],{},[1576,78287],{"alt":141,"src":78288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,78290,78291],{},"②法2",[19,78293,78294],{},"const str='pink'",[19,78296,78297],{},"[1,2,3].map(function(item,index) {",[19,78299,78300],{},"console.log(item)",[19,78302,52579],{},[19,78304,78305],{},[1576,78306],{"alt":141,"src":78307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,78309,78310],{},"此时会报错",[19,78312,78313],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,78315,78300],{},[19,78317,52579],{},[19,78319,78320],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,78322,78324],{"id":78323},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,78326,78327],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,78329,78330],{},"可以理解为加强版的for循环",[19,78332,78333],{},[1576,78334],{"alt":141,"src":78335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,78337,78338],{},"里边不写return，不返回数组，只遍历不返回",[19,78340,78341],{},"map是返回数组",[19,78343,78344],{},"forEach主要用于遍历数组对象",[220,78346,78348],{"className":53182,"code":78347,"language":53184,"meta":141,"style":141},"  \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",[30,78349,78350,78358,78363,78368,78373,78378,78382,78387],{"__ignoreMap":141},[228,78351,78352,78354,78356],{"class":230,"line":231},[228,78353,52259],{"class":238},[228,78355,51928],{"class":51415},[228,78357,51422],{"class":238},[228,78359,78360],{"class":230,"line":142},[228,78361,78362],{"class":238},"    const arr = ['red', 'green', 'pink']\n",[228,78364,78365],{"class":230,"line":1293},[228,78366,78367],{"class":238},"    const result = arr.forEach(function (item, index) {\n",[228,78369,78370],{"class":230,"line":1308},[228,78371,78372],{"class":238},"      console.log(item)\n",[228,78374,78375],{"class":230,"line":1314},[228,78376,78377],{"class":238},"      console.log(index)\n",[228,78379,78380],{"class":230,"line":1328},[228,78381,33576],{"class":238},[228,78383,78384],{"class":230,"line":1334},[228,78385,78386],{"class":238},"    console.log(result)\n",[228,78388,78389,78391,78393],{"class":230,"line":1425},[228,78390,52532],{"class":238},[228,78392,51928],{"class":51415},[228,78394,51422],{"class":238},[19,78396,78397],{},[1576,78398],{"alt":141,"src":78399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,78401,78403],{"id":78402},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,78405,78406],{},[1576,78407],{"alt":141,"src":78408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,78410,78411],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[220,78413,78415],{"className":53182,"code":78414,"language":53184,"meta":141,"style":141},"\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",[30,78416,78417,78425,78433,78438,78443,78447,78451,78456,78460,78465,78473],{"__ignoreMap":141},[228,78418,78419,78421,78423],{"class":230,"line":231},[228,78420,1148],{"class":238},[228,78422,51915],{"class":51415},[228,78424,51422],{"class":238},[228,78426,78427,78429,78431],{"class":230,"line":142},[228,78428,52259],{"class":238},[228,78430,51928],{"class":51415},[228,78432,51422],{"class":238},[228,78434,78435],{"class":230,"line":1293},[228,78436,78437],{"class":238},"    const arr = [10, 20, 30]\n",[228,78439,78440],{"class":230,"line":1308},[228,78441,78442],{"class":238},"    const newArr = arr.filter(function (item, index) {\n",[228,78444,78445],{"class":230,"line":1314},[228,78446,78372],{"class":238},[228,78448,78449],{"class":230,"line":1328},[228,78450,78377],{"class":238},[228,78452,78453],{"class":230,"line":1334},[228,78454,78455],{"class":238},"      return item >= 20\n",[228,78457,78458],{"class":230,"line":1425},[228,78459,33576],{"class":238},[228,78461,78462],{"class":230,"line":1431},[228,78463,78464],{"class":238},"    console.log(newArr)\n",[228,78466,78467,78469,78471],{"class":230,"line":1443},[228,78468,52532],{"class":238},[228,78470,51928],{"class":51415},[228,78472,51422],{"class":238},[228,78474,78475,78477,78479],{"class":230,"line":1726},[228,78476,51900],{"class":238},[228,78478,51915],{"class":51415},[228,78480,51422],{"class":238},[19,78482,78483],{},"这个也可以写成箭头函数：",[220,78485,78487],{"className":50748,"code":78486,"language":50750,"meta":141,"style":141},"const newArr = arr.filter(item => item >= 20)\n",[30,78488,78489],{"__ignoreMap":141},[228,78490,78491],{"class":230,"line":231},[228,78492,78486],{"class":238},[14,78494,78496],{"id":78495},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,78498,78499],{},[1576,78500],{"alt":141,"src":78501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,78503,78504],{},"步骤：",[19,78506,78507],{},"①：渲染页面模块",[1245,78509,78510,78513],{},[186,78511,78512],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[186,78514,78515],{},"用forEach+字符串的形式",[19,78517,78518],{},"②：点击不同需求，显示不同页面内容",[1245,78520,78521,78524,78527,78530,78533],{},[186,78522,78523],{},"点击采取事件委托方式 .filter",[186,78525,78526],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[186,78528,78529],{},"筛选条件是根据点击的 data-index 来判断",[186,78531,78532],{},"可以使用对象解构，把事件对象解构",[186,78534,78535],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[220,78537,78539],{"className":50748,"code":78538,"language":50750,"meta":141,"style":141},"\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",[30,78540,78541,78551,78565,78569,78577,78591,78611,78623,78631,78637,78647,78657,78667,78671,78675,78681,78694,78706,78716,78728,78732,78736,78743,78756,78768,78785,78803,78816,78820,78824,78836,78846,78850,78854,78861,78902,78929,78939,78943,78947,78955,78967,78971,78975,78983,78995,79007,79018,79022,79026,79035,79047,79058,79062,79066,79075,79087,79099,79103,79107,79114,79124,79136,79148,79163,79167,79171,79179,79195,79205,79215,79225,79237,79241,79245,79255,79266,79276,79280,79288,79296,79300,79308,79323,79349,79374,79399,79418,79426,79440,79445,79450,79455,79460,79465,79473,79481,79486,79497,79502,79512,79522,79532,79542,79546,79550,79559,79568,79577,79586,79590,79594,79603,79612,79621,79630,79634,79638,79647,79656,79665,79674,79678,79682,79691,79700,79709,79718,79722,79726,79735,79744,79753,79762,79766,79770,79779,79788,79797,79806,79810,79814,79823,79832,79840,79849,79853,79857,79861,79866,79878,79883,79895,79899,79916,79944,79953,79958,79968,79978,79987,79992,79997,80001,80006,80023,80027,80032,80040,80045,80072,80077,80097,80102,80114,80119,80124,80129,80140,80154,80191,80209,80242,80259,80283,80287,80292,80298,80302,80306,80310,80318,80326,80330],{"__ignoreMap":141},[228,78542,78543,78545,78547,78549],{"class":230,"line":231},[228,78544,51412],{"class":238},[228,78546,51416],{"class":51415},[228,78548,51419],{"class":2077},[228,78550,51422],{"class":238},[228,78552,78553,78555,78557,78559,78561,78563],{"class":230,"line":142},[228,78554,1148],{"class":238},[228,78556,50750],{"class":51415},[228,78558,51431],{"class":2077},[228,78560,284],{"class":238},[228,78562,51436],{"class":343},[228,78564,51422],{"class":238},[228,78566,78567],{"class":230,"line":1293},[228,78568,2514],{"emptyLinePlaceholder":157},[228,78570,78571,78573,78575],{"class":230,"line":1308},[228,78572,1148],{"class":238},[228,78574,51449],{"class":51415},[228,78576,51422],{"class":238},[228,78578,78579,78581,78583,78585,78587,78589],{"class":230,"line":1314},[228,78580,52259],{"class":238},[228,78582,51459],{"class":51415},[228,78584,51462],{"class":2077},[228,78586,284],{"class":238},[228,78588,51467],{"class":343},[228,78590,51422],{"class":238},[228,78592,78593,78595,78597,78599,78601,78603,78605,78607,78609],{"class":230,"line":1328},[228,78594,52259],{"class":238},[228,78596,51459],{"class":51415},[228,78598,15035],{"class":2077},[228,78600,284],{"class":238},[228,78602,51506],{"class":343},[228,78604,51486],{"class":2077},[228,78606,284],{"class":238},[228,78608,51513],{"class":343},[228,78610,51422],{"class":238},[228,78612,78613,78615,78617,78619,78621],{"class":230,"line":1334},[228,78614,52259],{"class":238},[228,78616,51522],{"class":51415},[228,78618,51525],{"class":238},[228,78620,51522],{"class":51415},[228,78622,51422],{"class":238},[228,78624,78625,78627,78629],{"class":230,"line":1425},[228,78626,52259],{"class":238},[228,78628,5241],{"class":51415},[228,78630,51422],{"class":238},[228,78632,78633,78635],{"class":230,"line":1431},[228,78634,6518],{"class":51415},[228,78636,15687],{"class":238},[228,78638,78639,78641,78643,78645],{"class":230,"line":1443},[228,78640,54810],{"class":287},[228,78642,51552],{"class":238},[228,78644,430],{"class":287},[228,78646,1404],{"class":238},[228,78648,78649,78651,78653,78655],{"class":230,"line":1726},[228,78650,54821],{"class":287},[228,78652,51552],{"class":238},[228,78654,430],{"class":287},[228,78656,1404],{"class":238},[228,78658,78659,78661,78663,78665],{"class":230,"line":1731},[228,78660,72711],{"class":287},[228,78662,51552],{"class":238},[228,78664,60620],{"class":287},[228,78666,1404],{"class":238},[228,78668,78669],{"class":230,"line":1737},[228,78670,2301],{"class":238},[228,78672,78673],{"class":230,"line":1742},[228,78674,2514],{"emptyLinePlaceholder":157},[228,78676,78677,78679],{"class":230,"line":1756},[228,78678,62238],{"class":2077},[228,78680,15687],{"class":238},[228,78682,78683,78685,78687,78690,78692],{"class":230,"line":1761},[228,78684,54886],{"class":287},[228,78686,51552],{"class":238},[228,78688,78689],{"class":287},"990",[228,78691,51607],{"class":234},[228,78693,1404],{"class":238},[228,78695,78696,78698,78700,78702,78704],{"class":230,"line":1767},[228,78697,54821],{"class":287},[228,78699,51552],{"class":238},[228,78701,430],{"class":287},[228,78703,51671],{"class":287},[228,78705,1404],{"class":238},[228,78707,78708,78710,78712,78714],{"class":230,"line":1788},[228,78709,55124],{"class":287},[228,78711,51552],{"class":238},[228,78713,51592],{"class":287},[228,78715,1404],{"class":238},[228,78717,78718,78721,78723,78726],{"class":230,"line":1793},[228,78719,78720],{"class":287},"      flex-wrap",[228,78722,51552],{"class":238},[228,78724,78725],{"class":287},"wrap",[228,78727,1404],{"class":238},[228,78729,78730],{"class":230,"line":1807},[228,78731,2301],{"class":238},[228,78733,78734],{"class":230,"line":1812},[228,78735,2514],{"emptyLinePlaceholder":157},[228,78737,78738,78741],{"class":230,"line":1841},[228,78739,78740],{"class":2077},"    .item",[228,78742,15687],{"class":238},[228,78744,78745,78747,78749,78752,78754],{"class":230,"line":1846},[228,78746,54886],{"class":287},[228,78748,51552],{"class":238},[228,78750,78751],{"class":287},"240",[228,78753,51607],{"class":234},[228,78755,1404],{"class":238},[228,78757,78758,78760,78762,78764,78766],{"class":230,"line":1863},[228,78759,62115],{"class":287},[228,78761,51552],{"class":238},[228,78763,684],{"class":287},[228,78765,51607],{"class":234},[228,78767,1404],{"class":238},[228,78769,78770,78772,78774,78776,78778,78781,78783],{"class":230,"line":1868},[228,78771,54810],{"class":287},[228,78773,51552],{"class":238},[228,78775,938],{"class":287},[228,78777,51607],{"class":234},[228,78779,78780],{"class":287}," 30",[228,78782,51607],{"class":234},[228,78784,1404],{"class":238},[228,78786,78787,78789,78791,78793,78796,78799,78801],{"class":230,"line":1873},[228,78788,61975],{"class":287},[228,78790,51552],{"class":238},[228,78792,28237],{"class":287},[228,78794,78795],{"class":287}," ease",[228,78797,78798],{"class":287}," .5",[228,78800,933],{"class":234},[228,78802,1404],{"class":238},[228,78804,78805,78808,78810,78812,78814],{"class":230,"line":1878},[228,78806,78807],{"class":287},"      margin-bottom",[228,78809,51552],{"class":238},[228,78811,938],{"class":287},[228,78813,51607],{"class":234},[228,78815,1404],{"class":238},[228,78817,78818],{"class":230,"line":1892},[228,78819,2301],{"class":238},[228,78821,78822],{"class":230,"line":1897},[228,78823,2514],{"emptyLinePlaceholder":157},[228,78825,78826,78829,78831,78834],{"class":230,"line":2691},[228,78827,78828],{"class":2077},"    .item:nth-child",[228,78830,239],{"class":238},[228,78832,78833],{"class":287},"4n",[228,78835,12557],{"class":238},[228,78837,78838,78840,78842,78844],{"class":230,"line":2705},[228,78839,62115],{"class":287},[228,78841,51552],{"class":238},[228,78843,430],{"class":287},[228,78845,1404],{"class":238},[228,78847,78848],{"class":230,"line":2713},[228,78849,2301],{"class":238},[228,78851,78852],{"class":230,"line":2718},[228,78853,2514],{"emptyLinePlaceholder":157},[228,78855,78856,78859],{"class":230,"line":2724},[228,78857,78858],{"class":2077},"    .item:hover",[228,78860,15687],{"class":238},[228,78862,78863,78866,78868,78870,78872,78874,78876,78878,78880,78883,78885,78887,78889,78891,78893,78895,78897,78900],{"class":230,"line":2730},[228,78864,78865],{"class":287},"      box-shadow",[228,78867,51552],{"class":238},[228,78869,430],{"class":287},[228,78871,51607],{"class":234},[228,78873,4207],{"class":287},[228,78875,51607],{"class":234},[228,78877,2262],{"class":287},[228,78879,51607],{"class":234},[228,78881,78882],{"class":287}," rgba",[228,78884,239],{"class":238},[228,78886,430],{"class":287},[228,78888,12550],{"class":238},[228,78890,430],{"class":287},[228,78892,12550],{"class":238},[228,78894,430],{"class":287},[228,78896,12550],{"class":238},[228,78898,78899],{"class":287},".2",[228,78901,2833],{"class":238},[228,78903,78904,78907,78909,78912,78914,78916,78918,78921,78923,78925,78927],{"class":230,"line":2735},[228,78905,78906],{"class":287},"      transform",[228,78908,51552],{"class":238},[228,78910,78911],{"class":287},"translate3d",[228,78913,239],{"class":238},[228,78915,430],{"class":287},[228,78917,12550],{"class":238},[228,78919,78920],{"class":287},"-4",[228,78922,51607],{"class":234},[228,78924,12550],{"class":238},[228,78926,430],{"class":287},[228,78928,2833],{"class":238},[228,78930,78931,78933,78935,78937],{"class":230,"line":8063},[228,78932,62140],{"class":287},[228,78934,51552],{"class":238},[228,78936,62145],{"class":287},[228,78938,1404],{"class":238},[228,78940,78941],{"class":230,"line":8087},[228,78942,2301],{"class":238},[228,78944,78945],{"class":230,"line":8092},[228,78946,2514],{"emptyLinePlaceholder":157},[228,78948,78949,78951,78953],{"class":230,"line":8098},[228,78950,78740],{"class":2077},[228,78952,55730],{"class":51415},[228,78954,15687],{"class":238},[228,78956,78957,78959,78961,78963,78965],{"class":230,"line":8125},[228,78958,54886],{"class":287},[228,78960,51552],{"class":238},[228,78962,549],{"class":287},[228,78964,566],{"class":234},[228,78966,1404],{"class":238},[228,78968,78969],{"class":230,"line":8130},[228,78970,2301],{"class":238},[228,78972,78973],{"class":230,"line":8136},[228,78974,2514],{"emptyLinePlaceholder":157},[228,78976,78977,78979,78981],{"class":230,"line":8148},[228,78978,78740],{"class":2077},[228,78980,62419],{"class":2077},[228,78982,15687],{"class":238},[228,78984,78985,78987,78989,78991,78993],{"class":230,"line":8160},[228,78986,55037],{"class":287},[228,78988,51552],{"class":238},[228,78990,888],{"class":287},[228,78992,51607],{"class":234},[228,78994,1404],{"class":238},[228,78996,78997,78999,79001,79003,79005],{"class":230,"line":8172},[228,78998,78807],{"class":287},[228,79000,51552],{"class":238},[228,79002,684],{"class":287},[228,79004,51607],{"class":234},[228,79006,1404],{"class":238},[228,79008,79009,79011,79013,79016],{"class":230,"line":9831},[228,79010,57531],{"class":287},[228,79012,51552],{"class":238},[228,79014,79015],{"class":287},"#666",[228,79017,1404],{"class":238},[228,79019,79020],{"class":230,"line":9856},[228,79021,2301],{"class":238},[228,79023,79024],{"class":230,"line":9879},[228,79025,2514],{"emptyLinePlaceholder":157},[228,79027,79028,79030,79033],{"class":230,"line":9903},[228,79029,78740],{"class":2077},[228,79031,79032],{"class":2077}," .price",[228,79034,15687],{"class":238},[228,79036,79037,79039,79041,79043,79045],{"class":230,"line":9908},[228,79038,55037],{"class":287},[228,79040,51552],{"class":238},[228,79042,988],{"class":287},[228,79044,51607],{"class":234},[228,79046,1404],{"class":238},[228,79048,79049,79051,79053,79056],{"class":230,"line":9913},[228,79050,57531],{"class":287},[228,79052,51552],{"class":238},[228,79054,79055],{"class":287},"firebrick",[228,79057,1404],{"class":238},[228,79059,79060],{"class":230,"line":9918},[228,79061,2301],{"class":238},[228,79063,79064],{"class":230,"line":9927},[228,79065,2514],{"emptyLinePlaceholder":157},[228,79067,79068,79070,79073],{"class":230,"line":9932},[228,79069,78740],{"class":2077},[228,79071,79072],{"class":2077}," .price::before",[228,79074,15687],{"class":238},[228,79076,79077,79080,79082,79085],{"class":230,"line":9938},[228,79078,79079],{"class":287},"      content",[228,79081,51552],{"class":238},[228,79083,79084],{"class":343},"'￥'",[228,79086,1404],{"class":238},[228,79088,79089,79091,79093,79095,79097],{"class":230,"line":9959},[228,79090,55037],{"class":287},[228,79092,51552],{"class":238},[228,79094,787],{"class":287},[228,79096,51607],{"class":234},[228,79098,1404],{"class":238},[228,79100,79101],{"class":230,"line":9965},[228,79102,2301],{"class":238},[228,79104,79105],{"class":230,"line":9979},[228,79106,2514],{"emptyLinePlaceholder":157},[228,79108,79109,79112],{"class":230,"line":9985},[228,79110,79111],{"class":2077},"    .filter",[228,79113,15687],{"class":238},[228,79115,79116,79118,79120,79122],{"class":230,"line":10012},[228,79117,55124],{"class":287},[228,79119,51552],{"class":238},[228,79121,51592],{"class":287},[228,79123,1404],{"class":238},[228,79125,79126,79128,79130,79132,79134],{"class":230,"line":10021},[228,79127,54886],{"class":287},[228,79129,51552],{"class":238},[228,79131,78689],{"class":287},[228,79133,51607],{"class":234},[228,79135,1404],{"class":238},[228,79137,79138,79140,79142,79144,79146],{"class":230,"line":10027},[228,79139,54821],{"class":287},[228,79141,51552],{"class":238},[228,79143,430],{"class":287},[228,79145,51671],{"class":287},[228,79147,1404],{"class":238},[228,79149,79150,79152,79154,79156,79158,79160],{"class":230,"line":10035},[228,79151,54810],{"class":287},[228,79153,51552],{"class":238},[228,79155,894],{"class":287},[228,79157,51607],{"class":234},[228,79159,78780],{"class":287},[228,79161,79162],{"class":234},"px\n",[228,79164,79165],{"class":230,"line":10040},[228,79166,2301],{"class":238},[228,79168,79169],{"class":230,"line":16719},[228,79170,2514],{"emptyLinePlaceholder":157},[228,79172,79173,79175,79177],{"class":230,"line":16725},[228,79174,79111],{"class":2077},[228,79176,1512],{"class":51415},[228,79178,15687],{"class":238},[228,79180,79181,79183,79185,79187,79189,79191,79193],{"class":230,"line":16748},[228,79182,54810],{"class":287},[228,79184,51552],{"class":238},[228,79186,684],{"class":287},[228,79188,51607],{"class":234},[228,79190,9065],{"class":287},[228,79192,51607],{"class":234},[228,79194,1404],{"class":238},[228,79196,79197,79199,79201,79203],{"class":230,"line":16754},[228,79198,61836],{"class":287},[228,79200,51552],{"class":238},[228,79202,61933],{"class":287},[228,79204,1404],{"class":238},[228,79206,79207,79209,79211,79213],{"class":230,"line":16777},[228,79208,57531],{"class":287},[228,79210,51552],{"class":238},[228,79212,79015],{"class":287},[228,79214,1404],{"class":238},[228,79216,79217,79219,79221,79223],{"class":230,"line":16791},[228,79218,64085],{"class":287},[228,79220,51552],{"class":238},[228,79222,54852],{"class":287},[228,79224,1404],{"class":238},[228,79226,79227,79229,79231,79233,79235],{"class":230,"line":16811},[228,79228,61865],{"class":287},[228,79230,51552],{"class":238},[228,79232,938],{"class":287},[228,79234,51607],{"class":234},[228,79236,1404],{"class":238},[228,79238,79239],{"class":230,"line":16817},[228,79240,2301],{"class":238},[228,79242,79243],{"class":230,"line":16828},[228,79244,2514],{"emptyLinePlaceholder":157},[228,79246,79247,79249,79251,79253],{"class":230,"line":16851},[228,79248,79111],{"class":2077},[228,79250,1512],{"class":51415},[228,79252,62015],{"class":2077},[228,79254,15687],{"class":238},[228,79256,79257,79259,79261,79264],{"class":230,"line":16873},[228,79258,54999],{"class":287},[228,79260,51552],{"class":238},[228,79262,79263],{"class":287},"#05943c",[228,79265,1404],{"class":238},[228,79267,79268,79270,79272,79274],{"class":230,"line":16878},[228,79269,57531],{"class":287},[228,79271,51552],{"class":238},[228,79273,60957],{"class":287},[228,79275,1404],{"class":238},[228,79277,79278],{"class":230,"line":16884},[228,79279,2301],{"class":238},[228,79281,79282,79284,79286],{"class":230,"line":16898},[228,79283,52532],{"class":238},[228,79285,5241],{"class":51415},[228,79287,51422],{"class":238},[228,79289,79290,79292,79294],{"class":230,"line":16911},[228,79291,51900],{"class":238},[228,79293,51449],{"class":51415},[228,79295,51422],{"class":238},[228,79297,79298],{"class":230,"line":16916},[228,79299,2514],{"emptyLinePlaceholder":157},[228,79301,79302,79304,79306],{"class":230,"line":16930},[228,79303,1148],{"class":238},[228,79305,51915],{"class":51415},[228,79307,51422],{"class":238},[228,79309,79310,79312,79314,79316,79318,79321],{"class":230,"line":16935},[228,79311,52259],{"class":238},[228,79313,51726],{"class":51415},[228,79315,53601],{"class":2077},[228,79317,284],{"class":238},[228,79319,79320],{"class":343},"\"filter\"",[228,79322,51422],{"class":238},[228,79324,79325,79327,79329,79331,79333,79335,79338,79340,79342,79345,79347],{"class":230,"line":16941},[228,79326,51456],{"class":238},[228,79328,476],{"class":51415},[228,79330,61172],{"class":2077},[228,79332,284],{"class":238},[228,79334,61177],{"class":343},[228,79336,79337],{"class":2077}," data-index",[228,79339,284],{"class":238},[228,79341,3792],{"class":343},[228,79343,79344],{"class":238},">0-100元\u003C\u002F",[228,79346,476],{"class":51415},[228,79348,51422],{"class":238},[228,79350,79351,79353,79355,79357,79359,79361,79363,79365,79367,79370,79372],{"class":230,"line":16946},[228,79352,51456],{"class":238},[228,79354,476],{"class":51415},[228,79356,61172],{"class":2077},[228,79358,284],{"class":238},[228,79360,61177],{"class":343},[228,79362,79337],{"class":2077},[228,79364,284],{"class":238},[228,79366,3815],{"class":343},[228,79368,79369],{"class":238},">100-300元\u003C\u002F",[228,79371,476],{"class":51415},[228,79373,51422],{"class":238},[228,79375,79376,79378,79380,79382,79384,79386,79388,79390,79392,79395,79397],{"class":230,"line":16960},[228,79377,51456],{"class":238},[228,79379,476],{"class":51415},[228,79381,61172],{"class":2077},[228,79383,284],{"class":238},[228,79385,61177],{"class":343},[228,79387,79337],{"class":2077},[228,79389,284],{"class":238},[228,79391,3828],{"class":343},[228,79393,79394],{"class":238},">300元以上\u003C\u002F",[228,79396,476],{"class":51415},[228,79398,51422],{"class":238},[228,79400,79401,79403,79405,79407,79409,79411,79414,79416],{"class":230,"line":16965},[228,79402,51456],{"class":238},[228,79404,476],{"class":51415},[228,79406,61172],{"class":2077},[228,79408,284],{"class":238},[228,79410,61177],{"class":343},[228,79412,79413],{"class":238},">全部区间\u003C\u002F",[228,79415,476],{"class":51415},[228,79417,51422],{"class":238},[228,79419,79420,79422,79424],{"class":230,"line":16970},[228,79421,52532],{"class":238},[228,79423,51726],{"class":51415},[228,79425,51422],{"class":238},[228,79427,79428,79430,79432,79434,79436,79438],{"class":230,"line":16984},[228,79429,52259],{"class":238},[228,79431,51726],{"class":51415},[228,79433,53601],{"class":2077},[228,79435,284],{"class":238},[228,79437,62723],{"class":343},[228,79439,51422],{"class":238},[228,79441,79442],{"class":230,"line":16996},[228,79443,79444],{"class":297},"    \u003C!-- \u003Cdiv class=\"item\">\n",[228,79446,79447],{"class":230,"line":17001},[228,79448,79449],{"class":297},"      \u003Cimg src=\"\" alt=\"\">\n",[228,79451,79452],{"class":230,"line":17014},[228,79453,79454],{"class":297},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[228,79456,79457],{"class":230,"line":17019},[228,79458,79459],{"class":297},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[228,79461,79462],{"class":230,"line":17024},[228,79463,79464],{"class":297},"    \u003C\u002Fdiv> -->\n",[228,79466,79467,79469,79471],{"class":230,"line":17029},[228,79468,52532],{"class":238},[228,79470,51726],{"class":51415},[228,79472,51422],{"class":238},[228,79474,79475,79477,79479],{"class":230,"line":17042},[228,79476,52259],{"class":238},[228,79478,51928],{"class":51415},[228,79480,51422],{"class":238},[228,79482,79483],{"class":230,"line":17047},[228,79484,79485],{"class":297},"    \u002F\u002F 2. 初始化数据\n",[228,79487,79488,79490,79493,79495],{"class":230,"line":32748},[228,79489,11336],{"class":234},[228,79491,79492],{"class":287}," goodsList",[228,79494,13679],{"class":234},[228,79496,55562],{"class":238},[228,79498,79499],{"class":230,"line":32754},[228,79500,79501],{"class":238},"      {\n",[228,79503,79504,79507,79510],{"class":230,"line":32760},[228,79505,79506],{"class":238},"        id: ",[228,79508,79509],{"class":343},"'4001172'",[228,79511,31581],{"class":238},[228,79513,79514,79517,79520],{"class":230,"line":32766},[228,79515,79516],{"class":238},"        name: ",[228,79518,79519],{"class":343},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[228,79521,31581],{"class":238},[228,79523,79524,79527,79530],{"class":230,"line":32772},[228,79525,79526],{"class":238},"        price: ",[228,79528,79529],{"class":343},"'289.00'",[228,79531,31581],{"class":238},[228,79533,79534,79537,79540],{"class":230,"line":32783},[228,79535,79536],{"class":238},"        picture: ",[228,79538,79539],{"class":343},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[228,79541,31581],{"class":238},[228,79543,79544],{"class":230,"line":32789},[228,79545,78007],{"class":238},[228,79547,79548],{"class":230,"line":32809},[228,79549,79501],{"class":238},[228,79551,79552,79554,79557],{"class":230,"line":32815},[228,79553,79506],{"class":238},[228,79555,79556],{"class":343},"'4001594'",[228,79558,31581],{"class":238},[228,79560,79561,79563,79566],{"class":230,"line":32826},[228,79562,79516],{"class":238},[228,79564,79565],{"class":343},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[228,79567,31581],{"class":238},[228,79569,79570,79572,79575],{"class":230,"line":32832},[228,79571,79526],{"class":238},[228,79573,79574],{"class":343},"'288.00'",[228,79576,31581],{"class":238},[228,79578,79579,79581,79584],{"class":230,"line":32838},[228,79580,79536],{"class":238},[228,79582,79583],{"class":343},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[228,79585,31581],{"class":238},[228,79587,79588],{"class":230,"line":32844},[228,79589,78007],{"class":238},[228,79591,79592],{"class":230,"line":32850},[228,79593,79501],{"class":238},[228,79595,79596,79598,79601],{"class":230,"line":32856},[228,79597,79506],{"class":238},[228,79599,79600],{"class":343},"'4001009'",[228,79602,31581],{"class":238},[228,79604,79605,79607,79610],{"class":230,"line":32862},[228,79606,79516],{"class":238},[228,79608,79609],{"class":343},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[228,79611,31581],{"class":238},[228,79613,79614,79616,79619],{"class":230,"line":32868},[228,79615,79526],{"class":238},[228,79617,79618],{"class":343},"'109.00'",[228,79620,31581],{"class":238},[228,79622,79623,79625,79628],{"class":230,"line":32888},[228,79624,79536],{"class":238},[228,79626,79627],{"class":343},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[228,79629,31581],{"class":238},[228,79631,79632],{"class":230,"line":32894},[228,79633,78007],{"class":238},[228,79635,79636],{"class":230,"line":32910},[228,79637,79501],{"class":238},[228,79639,79640,79642,79645],{"class":230,"line":32916},[228,79641,79506],{"class":238},[228,79643,79644],{"class":343},"'4001874'",[228,79646,31581],{"class":238},[228,79648,79649,79651,79654],{"class":230,"line":32930},[228,79650,79516],{"class":238},[228,79652,79653],{"class":343},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[228,79655,31581],{"class":238},[228,79657,79658,79660,79663],{"class":230,"line":32936},[228,79659,79526],{"class":238},[228,79661,79662],{"class":343},"'488.00'",[228,79664,31581],{"class":238},[228,79666,79667,79669,79672],{"class":230,"line":32951},[228,79668,79536],{"class":238},[228,79670,79671],{"class":343},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[228,79673,31581],{"class":238},[228,79675,79676],{"class":230,"line":32957},[228,79677,78007],{"class":238},[228,79679,79680],{"class":230,"line":32966},[228,79681,79501],{"class":238},[228,79683,79684,79686,79689],{"class":230,"line":32972},[228,79685,79506],{"class":238},[228,79687,79688],{"class":343},"'4001649'",[228,79690,31581],{"class":238},[228,79692,79693,79695,79698],{"class":230,"line":32981},[228,79694,79516],{"class":238},[228,79696,79697],{"class":343},"'大师监制龙泉青瓷茶叶罐'",[228,79699,31581],{"class":238},[228,79701,79702,79704,79707],{"class":230,"line":32987},[228,79703,79526],{"class":238},[228,79705,79706],{"class":343},"'139.00'",[228,79708,31581],{"class":238},[228,79710,79711,79713,79716],{"class":230,"line":32993},[228,79712,79536],{"class":238},[228,79714,79715],{"class":343},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[228,79717,31581],{"class":238},[228,79719,79720],{"class":230,"line":33002},[228,79721,78007],{"class":238},[228,79723,79724],{"class":230,"line":33008},[228,79725,79501],{"class":238},[228,79727,79728,79730,79733],{"class":230,"line":33019},[228,79729,79506],{"class":238},[228,79731,79732],{"class":343},"'3997185'",[228,79734,31581],{"class":238},[228,79736,79737,79739,79742],{"class":230,"line":33025},[228,79738,79516],{"class":238},[228,79740,79741],{"class":343},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[228,79743,31581],{"class":238},[228,79745,79746,79748,79751],{"class":230,"line":33044},[228,79747,79526],{"class":238},[228,79749,79750],{"class":343},"'108.00'",[228,79752,31581],{"class":238},[228,79754,79755,79757,79760],{"class":230,"line":33050},[228,79756,79536],{"class":238},[228,79758,79759],{"class":343},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[228,79761,31581],{"class":238},[228,79763,79764],{"class":230,"line":33061},[228,79765,78007],{"class":238},[228,79767,79768],{"class":230,"line":33067},[228,79769,79501],{"class":238},[228,79771,79772,79774,79777],{"class":230,"line":33087},[228,79773,79506],{"class":238},[228,79775,79776],{"class":343},"'3997403'",[228,79778,31581],{"class":238},[228,79780,79781,79783,79786],{"class":230,"line":33103},[228,79782,79516],{"class":238},[228,79784,79785],{"class":343},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[228,79787,31581],{"class":238},[228,79789,79790,79792,79795],{"class":230,"line":33109},[228,79791,79526],{"class":238},[228,79793,79794],{"class":343},"'100.00'",[228,79796,31581],{"class":238},[228,79798,79799,79801,79804],{"class":230,"line":33123},[228,79800,79536],{"class":238},[228,79802,79803],{"class":343},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[228,79805,31581],{"class":238},[228,79807,79808],{"class":230,"line":33129},[228,79809,78007],{"class":238},[228,79811,79812],{"class":230,"line":33135},[228,79813,79501],{"class":238},[228,79815,79816,79818,79821],{"class":230,"line":33146},[228,79817,79506],{"class":238},[228,79819,79820],{"class":343},"'3998274'",[228,79822,31581],{"class":238},[228,79824,79825,79827,79830],{"class":230,"line":33152},[228,79826,79516],{"class":238},[228,79828,79829],{"class":343},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[228,79831,31581],{"class":238},[228,79833,79834,79836,79838],{"class":230,"line":33158},[228,79835,79526],{"class":238},[228,79837,79706],{"class":343},[228,79839,31581],{"class":238},[228,79841,79842,79844,79847],{"class":230,"line":33168},[228,79843,79536],{"class":238},[228,79845,79846],{"class":343},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[228,79848,31581],{"class":238},[228,79850,79851],{"class":230,"line":33174},[228,79852,78007],{"class":238},[228,79854,79855],{"class":230,"line":33185},[228,79856,53224],{"class":238},[228,79858,79859],{"class":230,"line":33191},[228,79860,2514],{"emptyLinePlaceholder":157},[228,79862,79863],{"class":230,"line":33201},[228,79864,79865],{"class":297},"    \u002F\u002F 1.渲染函数\n",[228,79867,79868,79870,79872,79874,79876],{"class":230,"line":33206},[228,79869,70199],{"class":234},[228,79871,70202],{"class":2077},[228,79873,239],{"class":238},[228,79875,3994],{"class":5331},[228,79877,12557],{"class":238},[228,79879,79880],{"class":230,"line":33212},[228,79881,79882],{"class":297},"      \u002F\u002F 声明空字符串\n",[228,79884,79885,79888,79891,79893],{"class":230,"line":33261},[228,79886,79887],{"class":234},"      let",[228,79889,79890],{"class":238}," str ",[228,79892,284],{"class":234},[228,79894,70219],{"class":343},[228,79896,79897],{"class":230,"line":33308},[228,79898,70224],{"class":297},[228,79900,79901,79903,79906,79908,79911,79914],{"class":230,"line":33313},[228,79902,58122],{"class":238},[228,79904,79905],{"class":2077},"forEach",[228,79907,239],{"class":238},[228,79909,79910],{"class":5331},"item",[228,79912,79913],{"class":234}," =>",[228,79915,15687],{"class":238},[228,79917,79918,79920,79923,79926,79928,79931,79933,79936,79939,79941],{"class":230,"line":33319},[228,79919,61385],{"class":234},[228,79921,79922],{"class":238}," { ",[228,79924,79925],{"class":287},"name",[228,79927,12550],{"class":238},[228,79929,79930],{"class":287},"price",[228,79932,12550],{"class":238},[228,79934,79935],{"class":287},"picture",[228,79937,79938],{"class":238}," } ",[228,79940,284],{"class":234},[228,79942,79943],{"class":238}," item\n",[228,79945,79946,79949,79951],{"class":230,"line":33338},[228,79947,79948],{"class":238},"        str ",[228,79950,9592],{"class":234},[228,79952,70283],{"class":343},[228,79954,79955],{"class":230,"line":33344},[228,79956,79957],{"class":343},"          \u003Cdiv class=\"item\">\n",[228,79959,79960,79963,79965],{"class":230,"line":33364},[228,79961,79962],{"class":343},"            \u003Cimg src=\"${",[228,79964,79935],{"class":238},[228,79966,79967],{"class":343},"}\" alt=\"\">\n",[228,79969,79970,79973,79975],{"class":230,"line":33370},[228,79971,79972],{"class":343},"            \u003Cp class=\"name\">${",[228,79974,79925],{"class":238},[228,79976,79977],{"class":343},"}\u003C\u002Fp>\n",[228,79979,79980,79983,79985],{"class":230,"line":33376},[228,79981,79982],{"class":343},"            \u003Cp class=\"price\">${",[228,79984,79930],{"class":238},[228,79986,79977],{"class":343},[228,79988,79989],{"class":230,"line":33386},[228,79990,79991],{"class":343},"          \u003C\u002Fdiv>\n",[228,79993,79994],{"class":230,"line":33391},[228,79995,79996],{"class":343},"        `\n",[228,79998,79999],{"class":230,"line":33397},[228,80000,64930],{"class":238},[228,80002,80003],{"class":230,"line":33413},[228,80004,80005],{"class":297},"      \u002F\u002F 追加给List\n",[228,80007,80008,80010,80012,80014,80017,80019,80021],{"class":230,"line":33458},[228,80009,55886],{"class":238},[228,80011,54514],{"class":2077},[228,80013,239],{"class":238},[228,80015,80016],{"class":343},"'.list'",[228,80018,74364],{"class":238},[228,80020,284],{"class":234},[228,80022,74100],{"class":238},[228,80024,80025],{"class":230,"line":33464},[228,80026,2301],{"class":238},[228,80028,80029],{"class":230,"line":33470},[228,80030,80031],{"class":297},"    \u002F\u002F 页面一打开就需要渲染\n",[228,80033,80034,80037],{"class":230,"line":33476},[228,80035,80036],{"class":2077},"    render",[228,80038,80039],{"class":238},"(goodsList)\n",[228,80041,80042],{"class":230,"line":33487},[228,80043,80044],{"class":297},"    \u002F\u002F 2.过滤筛选\n",[228,80046,80047,80049,80051,80053,80056,80058,80060,80062,80064,80066,80068,80070],{"class":230,"line":33493},[228,80048,52522],{"class":238},[228,80050,54514],{"class":2077},[228,80052,239],{"class":238},[228,80054,80055],{"class":343},"'.filter'",[228,80057,30941],{"class":238},[228,80059,57928],{"class":2077},[228,80061,239],{"class":238},[228,80063,57933],{"class":343},[228,80065,12550],{"class":238},[228,80067,313],{"class":5331},[228,80069,79913],{"class":234},[228,80071,15687],{"class":238},[228,80073,80074],{"class":230,"line":33499},[228,80075,80076],{"class":297},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[228,80078,80079,80081,80083,80086,80088,80090,80092,80094],{"class":230,"line":33505},[228,80080,58343],{"class":234},[228,80082,79922],{"class":238},[228,80084,80085],{"class":287},"tagName",[228,80087,12550],{"class":238},[228,80089,31652],{"class":287},[228,80091,79938],{"class":238},[228,80093,284],{"class":234},[228,80095,80096],{"class":238}," e.target\n",[228,80098,80099],{"class":230,"line":33523},[228,80100,80101],{"class":297},"      \u002F\u002F 判断\n",[228,80103,80104,80106,80108,80110,80112],{"class":230,"line":33537},[228,80105,54595],{"class":234},[228,80107,67149],{"class":238},[228,80109,54601],{"class":234},[228,80111,68371],{"class":343},[228,80113,12557],{"class":238},[228,80115,80116],{"class":230,"line":33546},[228,80117,80118],{"class":297},"        \u002F\u002F console.log(11)\n",[228,80120,80121],{"class":230,"line":33555},[228,80122,80123],{"class":297},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[228,80125,80126],{"class":230,"line":33564},[228,80127,80128],{"class":297},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[228,80130,80131,80133,80135,80137],{"class":230,"line":33573},[228,80132,51945],{"class":234},[228,80134,51948],{"class":238},[228,80136,284],{"class":234},[228,80138,80139],{"class":238}," goodsList\n",[228,80141,80142,80144,80147,80149,80152],{"class":230,"line":33579},[228,80143,2611],{"class":234},[228,80145,80146],{"class":238}," (dataset.index ",[228,80148,54601],{"class":234},[228,80150,80151],{"class":343}," '1'",[228,80153,12557],{"class":238},[228,80155,80156,80159,80161,80164,80167,80169,80171,80173,80176,80178,80180,80183,80185,80187,80189],{"class":230,"line":33585},[228,80157,80158],{"class":238},"          arr ",[228,80160,284],{"class":234},[228,80162,80163],{"class":238}," goodsList.",[228,80165,80166],{"class":2077},"filter",[228,80168,239],{"class":238},[228,80170,79910],{"class":5331},[228,80172,79913],{"class":234},[228,80174,80175],{"class":238}," item.price ",[228,80177,1824],{"class":234},[228,80179,4207],{"class":287},[228,80181,80182],{"class":234}," &&",[228,80184,80175],{"class":238},[228,80186,1702],{"class":234},[228,80188,5869],{"class":287},[228,80190,245],{"class":238},[228,80192,80193,80196,80198,80200,80202,80204,80207],{"class":230,"line":33593},[228,80194,80195],{"class":238},"        } ",[228,80197,1815],{"class":234},[228,80199,1818],{"class":234},[228,80201,80146],{"class":238},[228,80203,54601],{"class":234},[228,80205,80206],{"class":343}," '2'",[228,80208,12557],{"class":238},[228,80210,80211,80213,80215,80217,80219,80221,80223,80225,80227,80229,80231,80233,80235,80237,80240],{"class":230,"line":33598},[228,80212,80158],{"class":238},[228,80214,284],{"class":234},[228,80216,80163],{"class":238},[228,80218,80166],{"class":2077},[228,80220,239],{"class":238},[228,80222,79910],{"class":5331},[228,80224,79913],{"class":234},[228,80226,80175],{"class":238},[228,80228,1824],{"class":234},[228,80230,5869],{"class":287},[228,80232,80182],{"class":234},[228,80234,80175],{"class":238},[228,80236,1702],{"class":234},[228,80238,80239],{"class":287}," 300",[228,80241,245],{"class":238},[228,80243,80244,80246,80248,80250,80252,80254,80257],{"class":230,"line":33604},[228,80245,80195],{"class":238},[228,80247,1815],{"class":234},[228,80249,1818],{"class":234},[228,80251,80146],{"class":238},[228,80253,54601],{"class":234},[228,80255,80256],{"class":343}," '3'",[228,80258,12557],{"class":238},[228,80260,80261,80263,80265,80267,80269,80271,80273,80275,80277,80279,80281],{"class":230,"line":33615},[228,80262,80158],{"class":238},[228,80264,284],{"class":234},[228,80266,80163],{"class":238},[228,80268,80166],{"class":2077},[228,80270,239],{"class":238},[228,80272,79910],{"class":5331},[228,80274,79913],{"class":234},[228,80276,80175],{"class":238},[228,80278,1824],{"class":234},[228,80280,80239],{"class":287},[228,80282,245],{"class":238},[228,80284,80285],{"class":230,"line":33621},[228,80286,2643],{"class":238},[228,80288,80289],{"class":230,"line":33641},[228,80290,80291],{"class":297},"        \u002F\u002F 渲染函数\n",[228,80293,80294,80296],{"class":230,"line":33647},[228,80295,70523],{"class":2077},[228,80297,52527],{"class":238},[228,80299,80300],{"class":230,"line":33653},[228,80301,52513],{"class":238},[228,80303,80304],{"class":230,"line":33659},[228,80305,2514],{"emptyLinePlaceholder":157},[228,80307,80308],{"class":230,"line":33676},[228,80309,33576],{"class":238},[228,80311,80312,80314,80316],{"class":230,"line":33682},[228,80313,52532],{"class":238},[228,80315,51928],{"class":51415},[228,80317,51422],{"class":238},[228,80319,80320,80322,80324],{"class":230,"line":33688},[228,80321,51900],{"class":238},[228,80323,51915],{"class":51415},[228,80325,51422],{"class":238},[228,80327,80328],{"class":230,"line":33694},[228,80329,2514],{"emptyLinePlaceholder":157},[228,80331,80332,80334,80336],{"class":230,"line":33700},[228,80333,51900],{"class":238},[228,80335,50750],{"class":51415},[228,80337,51422],{"class":238},[14,80339,80341],{"id":80340},"_410-深入了解对象","4.10 深入了解对象",[200,80343,80345],{"id":80344},"_4101-创建对象","4.10.1 创建对象",[19,80347,80348],{},[1576,80349],{"alt":141,"src":80350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,80352,80353],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[200,80355,80357],{"id":80356},"_4102-构造函数","4.10.2 构造函数",[19,80359,80360,80363],{},[388,80361,80362],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,80365,80366,80369],{},[388,80367,80368],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[220,80371,80373],{"className":50748,"code":80372,"language":50750,"meta":141,"style":141},"\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",[30,80374,80375,80383,80388,80409,80422,80434,80446,80450,80455,80482,80487,80514],{"__ignoreMap":141},[228,80376,80377,80379,80381],{"class":230,"line":231},[228,80378,1148],{"class":238},[228,80380,51928],{"class":51415},[228,80382,51422],{"class":238},[228,80384,80385],{"class":230,"line":142},[228,80386,80387],{"class":297},"\u002F\u002F例：\n",[228,80389,80390,80392,80395,80397,80399,80401,80403,80405,80407],{"class":230,"line":1293},[228,80391,54564],{"class":234},[228,80393,80394],{"class":2077}," Pig",[228,80396,239],{"class":238},[228,80398,79925],{"class":5331},[228,80400,616],{"class":238},[228,80402,70336],{"class":5331},[228,80404,616],{"class":238},[228,80406,70353],{"class":5331},[228,80408,12557],{"class":238},[228,80410,80411,80414,80417,80419],{"class":230,"line":1308},[228,80412,80413],{"class":287},"    this",[228,80415,80416],{"class":238},".name",[228,80418,284],{"class":234},[228,80420,80421],{"class":238},"name\n",[228,80423,80424,80426,80429,80431],{"class":230,"line":1314},[228,80425,80413],{"class":287},[228,80427,80428],{"class":238},".age",[228,80430,284],{"class":234},[228,80432,80433],{"class":238},"age\n",[228,80435,80436,80438,80441,80443],{"class":230,"line":1328},[228,80437,80413],{"class":287},[228,80439,80440],{"class":238},".gender",[228,80442,284],{"class":234},[228,80444,80445],{"class":238},"gender    \n",[228,80447,80448],{"class":230,"line":1334},[228,80449,1679],{"class":238},[228,80451,80452],{"class":230,"line":1425},[228,80453,80454],{"class":297},"\u002F\u002F创建佩奇对象\n",[228,80456,80457,80459,80462,80464,80466,80468,80471,80473,80475,80477,80480],{"class":230,"line":1431},[228,80458,6907],{"class":234},[228,80460,80461],{"class":287}," Peppa",[228,80463,11832],{"class":234},[228,80465,80394],{"class":2077},[228,80467,239],{"class":238},[228,80469,80470],{"class":343},"'佩奇'",[228,80472,616],{"class":238},[228,80474,582],{"class":287},[228,80476,616],{"class":238},[228,80478,80479],{"class":343},"'女'",[228,80481,245],{"class":238},[228,80483,80484],{"class":230,"line":1443},[228,80485,80486],{"class":297},"\u002F\u002F创建乔治对象\n",[228,80488,80489,80491,80494,80496,80498,80500,80503,80505,80507,80509,80512],{"class":230,"line":1726},[228,80490,6907],{"class":234},[228,80492,80493],{"class":287}," George",[228,80495,11832],{"class":234},[228,80497,80394],{"class":2077},[228,80499,239],{"class":238},[228,80501,80502],{"class":343},"'乔治'",[228,80504,616],{"class":238},[228,80506,310],{"class":287},[228,80508,616],{"class":238},[228,80510,80511],{"class":343},"'男'",[228,80513,245],{"class":238},[228,80515,80516,80518,80520],{"class":230,"line":1731},[228,80517,51900],{"class":238},[228,80519,51928],{"class":51415},[228,80521,51422],{"class":238},[19,80523,80524],{},[1576,80525],{"alt":141,"src":80526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,80528,80529],{},[1576,80530],{"alt":141,"src":80531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,80533,80534],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,80536,80537],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,80539,80540],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,80542,80543],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,80545,80546],{},"这里用等号是因为：对象.属性=值",[19,80548,80549],{},"①利用对象字面量创建对象",[19,80551,80552],{},"const o={",[19,80554,80555],{},"name:'pink'",[19,80557,80558],{},"} ②利用new Object创建对象",[19,80560,80561],{},"const o=new Object({name:'pink'})",[19,80563,80564],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,80566,80567],{},"构造函数创建对象的执行过程：",[19,80569,80570],{},[1576,80571],{"alt":141,"src":80572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[200,80574,80576],{"id":80575},"_4103-实例成员","4.10.3 实例成员",[19,80578,80579],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[183,80581,80582,80585,80588],{},[186,80583,80584],{},"实例对象的属性和方法即为实例成员",[186,80586,80587],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[186,80589,80590],{},"构造函数创建的实例对象彼此独立互不影响",[200,80592,80594],{"id":80593},"_4104-静态成员","4.10.4 静态成员",[19,80596,80597],{},[1576,80598],{"alt":141,"src":80599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,80601,80602],{},"静态成员有Date.now() Math.PI Math.random()",[19,80604,80605],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,80607,80608],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,80610,80611],{},"function Pig(name) n {",[19,80613,80614],{},"this.name=name",[19,80616,1184],{},[19,80618,80619],{},"Pig.eyes=2",[19,80621,80622],{},"Pig.sayHai=function () { console.log(this) }",[19,80624,80625],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,80627,80628],{},"console.log(Pig.eyes) \u002F\u002F2",[19,80630,11447],{},[183,80632,80633,80636,80639,80642,80645],{},[186,80634,80635],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[186,80637,80638],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[186,80640,80641],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[186,80643,80644],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[186,80646,80647],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,80649,80650],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[200,80652,80654],{"id":80653},"_4105-内置构造函数","4.10.5 内置构造函数",[19,80656,80657],{},"内置构造函数包含：",[19,80659,80660],{},[1576,80661],{"alt":141,"src":80662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,80664,80665],{},[1576,80666],{"alt":141,"src":80667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,80669,80670],{},"这些基本数据类型，js对他们进行了包装",[51928,80672,80673],{},"\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",[22113,80675,80677],{"id":80676},"_41051-object","4.10.5.1 Object",[19,80679,80680],{},"Object 是内置的构造函数，用于创建普通对象",[19,80682,80683],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[220,80685,80687],{"className":50748,"code":80686,"language":50750,"meta":141,"style":141},"const user=new Object({name:'小明',age:15})\n",[30,80688,80689],{"__ignoreMap":141},[228,80690,80691],{"class":230,"line":231},[228,80692,80686],{"class":238},[19,80694,80695],{},"三个常用的静态方法：",[23025,80697,80699],{"id":80698},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,80701,80702],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,80704,80705],{},[1576,80706],{"alt":141,"src":80707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,80709,80710],{},[1576,80711],{"alt":141,"src":80712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[220,80714,80716],{"className":53182,"code":80715,"language":53184,"meta":141,"style":141},"\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",[30,80717,80718,80726,80734,80739,80744,80749,80754,80759,80764,80772],{"__ignoreMap":141},[228,80719,80720,80722,80724],{"class":230,"line":231},[228,80721,1148],{"class":238},[228,80723,51915],{"class":51415},[228,80725,51422],{"class":238},[228,80727,80728,80730,80732],{"class":230,"line":142},[228,80729,52259],{"class":238},[228,80731,51928],{"class":51415},[228,80733,51422],{"class":238},[228,80735,80736],{"class":230,"line":1293},[228,80737,80738],{"class":238},"    const o = { name: 'pink', age: 6 }\n",[228,80740,80741],{"class":230,"line":1308},[228,80742,80743],{"class":238},"    \u002F\u002F 获得所有属性名\n",[228,80745,80746],{"class":230,"line":1314},[228,80747,80748],{"class":238},"    const arr = Object.keys(o)\n",[228,80750,80751],{"class":230,"line":1328},[228,80752,80753],{"class":238},"    console.log(arr)\n",[228,80755,80756],{"class":230,"line":1334},[228,80757,80758],{"class":238},"    \u002F\u002F 获得所有属性值\n",[228,80760,80761],{"class":230,"line":1425},[228,80762,80763],{"class":238},"    console.log(Object.values(o))\n",[228,80765,80766,80768,80770],{"class":230,"line":1431},[228,80767,52532],{"class":238},[228,80769,51928],{"class":51415},[228,80771,51422],{"class":238},[228,80773,80774,80776,80778],{"class":230,"line":1443},[228,80775,51900],{"class":238},[228,80777,51915],{"class":51415},[228,80779,51422],{"class":238},[23025,80781,80783],{"id":80782},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,80785,80786],{},"Object.assign(oo,o)",[19,80788,80789],{},"后的东西添加给前 是追加",[19,80791,80792],{},[1576,80793],{"alt":141,"src":80794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,80796,80797],{},[1576,80798],{"alt":141,"src":80799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[220,80801,80803],{"className":53182,"code":80802,"language":53184,"meta":141,"style":141},"\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",[30,80804,80805,80813,80821,80825,80829,80833,80837,80841,80845,80850,80855,80860,80865,80870,80878],{"__ignoreMap":141},[228,80806,80807,80809,80811],{"class":230,"line":231},[228,80808,1148],{"class":238},[228,80810,51915],{"class":51415},[228,80812,51422],{"class":238},[228,80814,80815,80817,80819],{"class":230,"line":142},[228,80816,52259],{"class":238},[228,80818,51928],{"class":51415},[228,80820,51422],{"class":238},[228,80822,80823],{"class":230,"line":1293},[228,80824,80738],{"class":238},[228,80826,80827],{"class":230,"line":1308},[228,80828,80743],{"class":238},[228,80830,80831],{"class":230,"line":1314},[228,80832,80748],{"class":238},[228,80834,80835],{"class":230,"line":1328},[228,80836,80753],{"class":238},[228,80838,80839],{"class":230,"line":1334},[228,80840,80758],{"class":238},[228,80842,80843],{"class":230,"line":1425},[228,80844,80763],{"class":238},[228,80846,80847],{"class":230,"line":1431},[228,80848,80849],{"class":238},"    const oo = {}\n",[228,80851,80852],{"class":230,"line":1443},[228,80853,80854],{"class":238},"    Object.assign(oo, o)\n",[228,80856,80857],{"class":230,"line":1726},[228,80858,80859],{"class":238},"    console.log(oo)\n",[228,80861,80862],{"class":230,"line":1731},[228,80863,80864],{"class":238},"    Object.assign(o, { gender: '女' })\n",[228,80866,80867],{"class":230,"line":1737},[228,80868,80869],{"class":238},"    console.log(o)\n",[228,80871,80872,80874,80876],{"class":230,"line":1742},[228,80873,52532],{"class":238},[228,80875,51928],{"class":51415},[228,80877,51422],{"class":238},[228,80879,80880,80882,80884],{"class":230,"line":1756},[228,80881,51900],{"class":238},[228,80883,51915],{"class":51415},[228,80885,51422],{"class":238},[19,80887,80888],{},[1576,80889],{"alt":141,"src":80890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22113,80892,80894],{"id":80893},"_41052-array","4.10.5.2 Array",[19,80896,80897],{},"Array 是内置的构造函数，用于创建数组",[19,80899,80900],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[220,80902,80904],{"className":50748,"code":80903,"language":50750,"meta":141,"style":141},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[30,80905,80906,80911],{"__ignoreMap":141},[228,80907,80908],{"class":230,"line":231},[228,80909,80910],{"class":238},"const arr=new Array(3,5)\n",[228,80912,80913],{"class":230,"line":142},[228,80914,80915],{"class":238},"console.log(arr)  \u002F\u002F[3,5]\n",[19,80917,80918],{},"Array的实例方法，这个方法是实例成员",[19,80920,80921],{},[1576,80922],{"alt":141,"src":80923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23025,80925,80927],{"id":80926},"_410521-reduce","4.10.5.2.1 reduce",[19,80929,80930],{},[1576,80931],{"alt":141,"src":80932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[220,80934,80936],{"className":53182,"code":80935,"language":53184,"meta":141,"style":141},"\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",[30,80937,80938,80946,80954,80959,80964,80969,80974,80978,80983,80988,80993,80997,81002,81007,81011,81016,81021,81026,81034],{"__ignoreMap":141},[228,80939,80940,80942,80944],{"class":230,"line":231},[228,80941,1148],{"class":238},[228,80943,51915],{"class":51415},[228,80945,51422],{"class":238},[228,80947,80948,80950,80952],{"class":230,"line":142},[228,80949,52259],{"class":238},[228,80951,51928],{"class":51415},[228,80953,51422],{"class":238},[228,80955,80956],{"class":230,"line":1293},[228,80957,80958],{"class":238},"    const arr = [1, 5, 8]\n",[228,80960,80961],{"class":230,"line":1308},[228,80962,80963],{"class":238},"    \u002F\u002F 1.没有初始值\n",[228,80965,80966],{"class":230,"line":1314},[228,80967,80968],{"class":238},"    const total = arr.reduce(function (prev, current) {\n",[228,80970,80971],{"class":230,"line":1328},[228,80972,80973],{"class":238},"      return prev + current\n",[228,80975,80976],{"class":230,"line":1334},[228,80977,33576],{"class":238},[228,80979,80980],{"class":230,"line":1425},[228,80981,80982],{"class":238},"    console.log(total)   \u002F\u002F14\n",[228,80984,80985],{"class":230,"line":1431},[228,80986,80987],{"class":238},"    \u002F\u002F 2.有初始值\n",[228,80989,80990],{"class":230,"line":1443},[228,80991,80992],{"class":238},"    const total1 = arr.reduce(function (prev, current) {\n",[228,80994,80995],{"class":230,"line":1726},[228,80996,80973],{"class":238},[228,80998,80999],{"class":230,"line":1731},[228,81000,81001],{"class":238},"    }, 10)\n",[228,81003,81004],{"class":230,"line":1737},[228,81005,81006],{"class":238},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[228,81008,81009],{"class":230,"line":1742},[228,81010,2514],{"emptyLinePlaceholder":157},[228,81012,81013],{"class":230,"line":1756},[228,81014,81015],{"class":238},"    \u002F\u002F 3.箭头函数写法\n",[228,81017,81018],{"class":230,"line":1761},[228,81019,81020],{"class":238},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[228,81022,81023],{"class":230,"line":1767},[228,81024,81025],{"class":238},"    console.log(total2)   \u002F\u002F24\n",[228,81027,81028,81030,81032],{"class":230,"line":1788},[228,81029,52532],{"class":238},[228,81031,51928],{"class":51415},[228,81033,51422],{"class":238},[228,81035,81036,81038,81040],{"class":230,"line":1793},[228,81037,51900],{"class":238},[228,81039,51915],{"class":51415},[228,81041,51422],{"class":238},[19,81043,81044],{},"执行过程：",[183,81046,81047,81050,81053],{},[186,81048,81049],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[186,81051,81052],{},"每一次循环，把返回值给作为下一次循环的上一次值",[186,81054,81055],{},"如果有起始值，则起始值作为上一次值",[220,81057,81059],{"className":53182,"code":81058,"language":53184,"meta":141,"style":141},"\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",[30,81060,81061,81069,81077,81081,81085,81089,81093,81097,81101,81106,81111,81116,81121,81126,81130,81134,81138,81142,81146,81150,81155,81159,81164,81168,81173,81178,81182,81186,81190,81198],{"__ignoreMap":141},[228,81062,81063,81065,81067],{"class":230,"line":231},[228,81064,1148],{"class":238},[228,81066,51915],{"class":51415},[228,81068,51422],{"class":238},[228,81070,81071,81073,81075],{"class":230,"line":142},[228,81072,52259],{"class":238},[228,81074,51928],{"class":51415},[228,81076,51422],{"class":238},[228,81078,81079],{"class":230,"line":1293},[228,81080,80958],{"class":238},[228,81082,81083],{"class":230,"line":1308},[228,81084,80963],{"class":238},[228,81086,81087],{"class":230,"line":1314},[228,81088,80968],{"class":238},[228,81090,81091],{"class":230,"line":1328},[228,81092,80973],{"class":238},[228,81094,81095],{"class":230,"line":1334},[228,81096,33576],{"class":238},[228,81098,81099],{"class":230,"line":1425},[228,81100,80982],{"class":238},[228,81102,81103],{"class":230,"line":1431},[228,81104,81105],{"class":238},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[228,81107,81108],{"class":230,"line":1443},[228,81109,81110],{"class":238},"    \u002F\u002F     1              5                    6\n",[228,81112,81113],{"class":230,"line":1726},[228,81114,81115],{"class":238},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[228,81117,81118],{"class":230,"line":1731},[228,81119,81120],{"class":238},"    \u002F\u002F     6              8                    14\n",[228,81122,81123],{"class":230,"line":1737},[228,81124,81125],{"class":238},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[228,81127,81128],{"class":230,"line":1742},[228,81129,80987],{"class":238},[228,81131,81132],{"class":230,"line":1756},[228,81133,80992],{"class":238},[228,81135,81136],{"class":230,"line":1761},[228,81137,80973],{"class":238},[228,81139,81140],{"class":230,"line":1767},[228,81141,81001],{"class":238},[228,81143,81144],{"class":230,"line":1788},[228,81145,81006],{"class":238},[228,81147,81148],{"class":230,"line":1793},[228,81149,81105],{"class":238},[228,81151,81152],{"class":230,"line":1807},[228,81153,81154],{"class":238},"    \u002F\u002F     10             1                     11\n",[228,81156,81157],{"class":230,"line":1812},[228,81158,81115],{"class":238},[228,81160,81161],{"class":230,"line":1841},[228,81162,81163],{"class":238},"    \u002F\u002F     11             5                    16\n",[228,81165,81166],{"class":230,"line":1846},[228,81167,81115],{"class":238},[228,81169,81170],{"class":230,"line":1863},[228,81171,81172],{"class":238},"    \u002F\u002F     16             8                    24\n",[228,81174,81175],{"class":230,"line":1868},[228,81176,81177],{"class":238},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[228,81179,81180],{"class":230,"line":1873},[228,81181,81015],{"class":238},[228,81183,81184],{"class":230,"line":1878},[228,81185,81020],{"class":238},[228,81187,81188],{"class":230,"line":1892},[228,81189,81025],{"class":238},[228,81191,81192,81194,81196],{"class":230,"line":1897},[228,81193,52532],{"class":238},[228,81195,51928],{"class":51415},[228,81197,51422],{"class":238},[228,81199,81200,81202,81204],{"class":230,"line":2691},[228,81201,51900],{"class":238},[228,81203,51915],{"class":51415},[228,81205,51422],{"class":238},[23025,81207,81209],{"id":81208},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,81211,81212],{},[1576,81213],{"alt":141,"src":81214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[220,81216,81218],{"className":53182,"code":81217,"language":53184,"meta":141,"style":141},"\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",[30,81219,81220,81228,81236,81241,81246,81251,81256,81260,81265,81270,81275,81280,81285,81290,81294,81299,81303,81308,81316],{"__ignoreMap":141},[228,81221,81222,81224,81226],{"class":230,"line":231},[228,81223,1148],{"class":238},[228,81225,51915],{"class":51415},[228,81227,51422],{"class":238},[228,81229,81230,81232,81234],{"class":230,"line":142},[228,81231,52259],{"class":238},[228,81233,51928],{"class":51415},[228,81235,51422],{"class":238},[228,81237,81238],{"class":230,"line":1293},[228,81239,81240],{"class":238},"    const arr = [\n",[228,81242,81243],{"class":230,"line":1308},[228,81244,81245],{"class":238},"      { name: '张三', salary: 10000 },\n",[228,81247,81248],{"class":230,"line":1314},[228,81249,81250],{"class":238},"      { name: '李四', salary: 10000 },\n",[228,81252,81253],{"class":230,"line":1328},[228,81254,81255],{"class":238},"      { name: '王五', salary: 10000 }\n",[228,81257,81258],{"class":230,"line":1334},[228,81259,53224],{"class":238},[228,81261,81262],{"class":230,"line":1425},[228,81263,81264],{"class":238},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[228,81266,81267],{"class":230,"line":1431},[228,81268,81269],{"class":238},"    \u002F\u002F prev是累计值\n",[228,81271,81272],{"class":230,"line":1443},[228,81273,81274],{"class":238},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[228,81276,81277],{"class":230,"line":1726},[228,81278,81279],{"class":238},"    console.log(total)\n",[228,81281,81282],{"class":230,"line":1731},[228,81283,81284],{"class":238},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[228,81286,81287],{"class":230,"line":1737},[228,81288,81289],{"class":238},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[228,81291,81292],{"class":230,"line":1742},[228,81293,81284],{"class":238},[228,81295,81296],{"class":230,"line":1756},[228,81297,81298],{"class":238},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[228,81300,81301],{"class":230,"line":1761},[228,81302,81284],{"class":238},[228,81304,81305],{"class":230,"line":1767},[228,81306,81307],{"class":238},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[228,81309,81310,81312,81314],{"class":230,"line":1788},[228,81311,52532],{"class":238},[228,81313,51928],{"class":51415},[228,81315,51422],{"class":238},[228,81317,81318,81320,81322],{"class":230,"line":1793},[228,81319,51900],{"class":238},[228,81321,51915],{"class":51415},[228,81323,51422],{"class":238},[23025,81325,81327],{"id":81326},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,81329,81330],{},[1576,81331],{"alt":141,"src":81332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,81334,81335],{},[1576,81336],{"alt":141,"src":81337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[183,81339,81340],{},[186,81341,81342],{},"find()",[19,81344,81345],{},"循环查找，找到第一个就ok",[19,81347,81348],{},[476,81349,81352],{"href":81350,"rel":81351},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[23980],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[220,81354,81356],{"className":50748,"code":81355,"language":50750,"meta":141,"style":141},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[30,81357,81358,81363,81368],{"__ignoreMap":141},[228,81359,81360],{"class":230,"line":231},[228,81361,81362],{"class":238},"const array1 = [5, 12, 8, 130, 44]\n",[228,81364,81365],{"class":230,"line":142},[228,81366,81367],{"class":238},"const found = array1.find((element) => element > 10)\n",[228,81369,81370],{"class":230,"line":1293},[228,81371,81372],{"class":238},"console.log(found)  \u002F\u002F12\n",[19,81374,81375,81377,81378,81383,81384,81387,81388,81390,81391,81396,81397,81399,81400,81402,81403,81405,81406],{},[30,81376,81342],{}," 方法是一个",[476,81379,81382],{"href":81380,"rel":81381},"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",[23980],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[30,81385,81386],{},"callbackFn"," 函数，直到 ",[30,81389,81386],{}," 返回一个",[476,81392,81395],{"href":81393,"rel":81394},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[23980],"真值","。然后 ",[30,81398,81342],{}," 返回该元素并停止迭代数组。如果 ",[30,81401,81386],{}," 从未返回真值，则 ",[30,81404,81342],{}," 返回 ",[30,81407,81408],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[220,81410,81412],{"className":53182,"code":81411,"language":53184,"meta":141,"style":141},"\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",[30,81413,81414,81422,81430,81435,81440,81445,81449,81454,81459,81463,81468,81473,81477,81481,81486,81491,81495,81499,81504,81509,81514,81519,81524,81528,81533,81538,81543,81548,81552,81557,81565],{"__ignoreMap":141},[228,81415,81416,81418,81420],{"class":230,"line":231},[228,81417,1148],{"class":238},[228,81419,51915],{"class":51415},[228,81421,51422],{"class":238},[228,81423,81424,81426,81428],{"class":230,"line":142},[228,81425,52259],{"class":238},[228,81427,51928],{"class":51415},[228,81429,51422],{"class":238},[228,81431,81432],{"class":230,"line":1293},[228,81433,81434],{"class":238},"    const arr = ['red', 'blue', 'green']\n",[228,81436,81437],{"class":230,"line":1308},[228,81438,81439],{"class":238},"    const found = arr.find(item => item === 'pink')\n",[228,81441,81442],{"class":230,"line":1314},[228,81443,81444],{"class":238},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[228,81446,81447],{"class":230,"line":1328},[228,81448,2514],{"emptyLinePlaceholder":157},[228,81450,81451],{"class":230,"line":1334},[228,81452,81453],{"class":238},"    \u002F\u002F 使用场景，用于查找数据\n",[228,81455,81456],{"class":230,"line":1425},[228,81457,81458],{"class":238},"    const arr1 = [\n",[228,81460,81461],{"class":230,"line":1431},[228,81462,79501],{"class":238},[228,81464,81465],{"class":230,"line":1443},[228,81466,81467],{"class":238},"        name: '小米',\n",[228,81469,81470],{"class":230,"line":1726},[228,81471,81472],{"class":238},"        price: 1999\n",[228,81474,81475],{"class":230,"line":1731},[228,81476,78007],{"class":238},[228,81478,81479],{"class":230,"line":1737},[228,81480,79501],{"class":238},[228,81482,81483],{"class":230,"line":1742},[228,81484,81485],{"class":238},"        name: '华为',\n",[228,81487,81488],{"class":230,"line":1756},[228,81489,81490],{"class":238},"        price: 3999\n",[228,81492,81493],{"class":230,"line":1761},[228,81494,52513],{"class":238},[228,81496,81497],{"class":230,"line":1767},[228,81498,53224],{"class":238},[228,81500,81501],{"class":230,"line":1788},[228,81502,81503],{"class":238},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[228,81505,81506],{"class":230,"line":1793},[228,81507,81508],{"class":238},"    \u002F\u002F const found1 = arr1.find(item => {\n",[228,81510,81511],{"class":230,"line":1807},[228,81512,81513],{"class":238},"    \u002F\u002F   if (item.name === '小米') {\n",[228,81515,81516],{"class":230,"line":1812},[228,81517,81518],{"class":238},"    \u002F\u002F     return item\n",[228,81520,81521],{"class":230,"line":1841},[228,81522,81523],{"class":238},"    \u002F\u002F   }\n",[228,81525,81526],{"class":230,"line":1846},[228,81527,63405],{"class":238},[228,81529,81530],{"class":230,"line":1863},[228,81531,81532],{"class":238},"    \u002F\u002F 另一种写法\n",[228,81534,81535],{"class":230,"line":1868},[228,81536,81537],{"class":238},"    const found1 = arr1.find(item => {\n",[228,81539,81540],{"class":230,"line":1873},[228,81541,81542],{"class":238},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[228,81544,81545],{"class":230,"line":1878},[228,81546,81547],{"class":238},"      return item.name = '小米'\n",[228,81549,81550],{"class":230,"line":1892},[228,81551,33576],{"class":238},[228,81553,81554],{"class":230,"line":1897},[228,81555,81556],{"class":238},"    console.log(found1)\n",[228,81558,81559,81561,81563],{"class":230,"line":2691},[228,81560,52532],{"class":238},[228,81562,51928],{"class":51415},[228,81564,51422],{"class":238},[228,81566,81567,81569,81571],{"class":230,"line":2705},[228,81568,51900],{"class":238},[228,81570,51915],{"class":51415},[228,81572,51422],{"class":238},[19,81574,81575],{},[1576,81576],{"alt":141,"src":81577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,81579,81580],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[183,81582,81583],{"start":142},[186,81584,81585],{},"every()返回的是布尔值",[19,81587,81588],{},[476,81589,81592],{"href":81590,"rel":81591},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[23980],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,81594,81595],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,81597,81598],{},"some是只有有一个就没问题",[19,81600,81601],{},"every是必须全是才行",[220,81603,81607],{"className":81604,"code":81605,"language":81606,"meta":141,"style":141},"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",[30,81608,81609,81625,81639,81643,81652],{"__ignoreMap":141},[228,81610,81611,81613,81616,81618,81620,81623],{"class":230,"line":231},[228,81612,54564],{"class":234},[228,81614,81615],{"class":238}," isBigEnough(element, ",[228,81617,74173],{"class":234},[228,81619,12550],{"class":238},[228,81621,81622],{"class":234},"array",[228,81624,12557],{"class":238},[228,81626,81627,81630,81633,81635,81637],{"class":230,"line":142},[228,81628,81629],{"class":234},"  return",[228,81631,81632],{"class":238}," element ",[228,81634,1824],{"class":234},[228,81636,2152],{"class":287},[228,81638,1404],{"class":238},[228,81640,81641],{"class":230,"line":1293},[228,81642,1679],{"class":238},[228,81644,81645,81648,81650],{"class":230,"line":1308},[228,81646,81647],{"class":238},"[12, 5, 8, 130, 44].every(isBigEnough); ",[228,81649,33444],{"class":234},[228,81651,54631],{"class":238},[228,81653,81654,81657,81659],{"class":230,"line":1314},[228,81655,81656],{"class":238},"[12, 54, 18, 130, 44].every(isBigEnough); ",[228,81658,33444],{"class":234},[228,81660,58055],{"class":238},[220,81662,81664],{"className":53182,"code":81663,"language":53184,"meta":141,"style":141},"\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",[30,81665,81666,81674,81682,81687,81691,81696,81701,81709],{"__ignoreMap":141},[228,81667,81668,81670,81672],{"class":230,"line":231},[228,81669,1148],{"class":238},[228,81671,51915],{"class":51415},[228,81673,51422],{"class":238},[228,81675,81676,81678,81680],{"class":230,"line":142},[228,81677,52259],{"class":238},[228,81679,51928],{"class":51415},[228,81681,51422],{"class":238},[228,81683,81684],{"class":230,"line":1293},[228,81685,81686],{"class":238},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[228,81688,81689],{"class":230,"line":1308},[228,81690,78437],{"class":238},[228,81692,81693],{"class":230,"line":1314},[228,81694,81695],{"class":238},"    const flag = arr.every(item => item >= 10)\n",[228,81697,81698],{"class":230,"line":1328},[228,81699,81700],{"class":238},"    console.log(flag)    \u002F\u002Ftrue\n",[228,81702,81703,81705,81707],{"class":230,"line":1334},[228,81704,52532],{"class":238},[228,81706,51928],{"class":51415},[228,81708,51422],{"class":238},[228,81710,81711,81713,81715],{"class":230,"line":1425},[228,81712,51900],{"class":238},[228,81714,51915],{"class":51415},[228,81716,51422],{"class":238},[220,81718,81720],{"className":53182,"code":81719,"language":53184,"meta":141,"style":141},"\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",[30,81721,81722,81730,81738,81742,81747,81752,81757,81765],{"__ignoreMap":141},[228,81723,81724,81726,81728],{"class":230,"line":231},[228,81725,1148],{"class":238},[228,81727,51915],{"class":51415},[228,81729,51422],{"class":238},[228,81731,81732,81734,81736],{"class":230,"line":142},[228,81733,52259],{"class":238},[228,81735,51928],{"class":51415},[228,81737,51422],{"class":238},[228,81739,81740],{"class":230,"line":1293},[228,81741,81686],{"class":238},[228,81743,81744],{"class":230,"line":1308},[228,81745,81746],{"class":238},"    const arr = [10, 0, 5]\n",[228,81748,81749],{"class":230,"line":1314},[228,81750,81751],{"class":238},"    const flag = arr.some(item => item >= 10)\n",[228,81753,81754],{"class":230,"line":1328},[228,81755,81756],{"class":238},"    console.log(flag)   \u002F\u002Ftrue\n",[228,81758,81759,81761,81763],{"class":230,"line":1334},[228,81760,52532],{"class":238},[228,81762,51928],{"class":51415},[228,81764,51422],{"class":238},[228,81766,81767,81769,81771],{"class":230,"line":1425},[228,81768,51900],{"class":238},[228,81770,51915],{"class":51415},[228,81772,51422],{"class":238},[23025,81774,81776],{"id":81775},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,81778,81779],{},[1576,81780],{"alt":141,"src":81781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[220,81783,81785],{"className":50748,"code":81784,"language":50750,"meta":141,"style":141},"\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",[30,81786,81787,81797,81811,81815,81823,81837,81857,81869,81877,81884,81896,81908,81920,81932,81942,81952,81956,81964,81972,81976,81984,81996,82004,82026,82031,82036,82069,82077,82085,82089],{"__ignoreMap":141},[228,81788,81789,81791,81793,81795],{"class":230,"line":231},[228,81790,51412],{"class":238},[228,81792,51416],{"class":51415},[228,81794,51419],{"class":2077},[228,81796,51422],{"class":238},[228,81798,81799,81801,81803,81805,81807,81809],{"class":230,"line":142},[228,81800,1148],{"class":238},[228,81802,50750],{"class":51415},[228,81804,51431],{"class":2077},[228,81806,284],{"class":238},[228,81808,51436],{"class":343},[228,81810,51422],{"class":238},[228,81812,81813],{"class":230,"line":1293},[228,81814,2514],{"emptyLinePlaceholder":157},[228,81816,81817,81819,81821],{"class":230,"line":1308},[228,81818,1148],{"class":238},[228,81820,51449],{"class":51415},[228,81822,51422],{"class":238},[228,81824,81825,81827,81829,81831,81833,81835],{"class":230,"line":1314},[228,81826,52259],{"class":238},[228,81828,51459],{"class":51415},[228,81830,51462],{"class":2077},[228,81832,284],{"class":238},[228,81834,51467],{"class":343},[228,81836,51422],{"class":238},[228,81838,81839,81841,81843,81845,81847,81849,81851,81853,81855],{"class":230,"line":1328},[228,81840,52259],{"class":238},[228,81842,51459],{"class":51415},[228,81844,15035],{"class":2077},[228,81846,284],{"class":238},[228,81848,51506],{"class":343},[228,81850,51486],{"class":2077},[228,81852,284],{"class":238},[228,81854,51513],{"class":343},[228,81856,51422],{"class":238},[228,81858,81859,81861,81863,81865,81867],{"class":230,"line":1334},[228,81860,52259],{"class":238},[228,81862,51522],{"class":51415},[228,81864,51525],{"class":238},[228,81866,51522],{"class":51415},[228,81868,51422],{"class":238},[228,81870,81871,81873,81875],{"class":230,"line":1425},[228,81872,52259],{"class":238},[228,81874,5241],{"class":51415},[228,81876,51422],{"class":238},[228,81878,81879,81882],{"class":230,"line":1431},[228,81880,81881],{"class":51415},"    div",[228,81883,15687],{"class":238},[228,81885,81886,81888,81890,81892,81894],{"class":230,"line":1443},[228,81887,54886],{"class":287},[228,81889,51552],{"class":238},[228,81891,1836],{"class":287},[228,81893,51607],{"class":234},[228,81895,1404],{"class":238},[228,81897,81898,81900,81902,81904,81906],{"class":230,"line":1726},[228,81899,54900],{"class":287},[228,81901,51552],{"class":238},[228,81903,639],{"class":287},[228,81905,51607],{"class":234},[228,81907,1404],{"class":238},[228,81909,81910,81912,81914,81916,81918],{"class":230,"line":1731},[228,81911,57474],{"class":287},[228,81913,51552],{"class":238},[228,81915,639],{"class":287},[228,81917,51607],{"class":234},[228,81919,1404],{"class":238},[228,81921,81922,81924,81926,81928,81930],{"class":230,"line":1737},[228,81923,65248],{"class":287},[228,81925,51552],{"class":238},[228,81927,736],{"class":287},[228,81929,51607],{"class":234},[228,81931,1404],{"class":238},[228,81933,81934,81936,81938,81940],{"class":230,"line":1742},[228,81935,57401],{"class":287},[228,81937,51552],{"class":238},[228,81939,51707],{"class":287},[228,81941,1404],{"class":238},[228,81943,81944,81946,81948,81950],{"class":230,"line":1756},[228,81945,54999],{"class":287},[228,81947,51552],{"class":238},[228,81949,51760],{"class":287},[228,81951,1404],{"class":238},[228,81953,81954],{"class":230,"line":1761},[228,81955,2301],{"class":238},[228,81957,81958,81960,81962],{"class":230,"line":1767},[228,81959,52532],{"class":238},[228,81961,5241],{"class":51415},[228,81963,51422],{"class":238},[228,81965,81966,81968,81970],{"class":230,"line":1788},[228,81967,51900],{"class":238},[228,81969,51449],{"class":51415},[228,81971,51422],{"class":238},[228,81973,81974],{"class":230,"line":1793},[228,81975,2514],{"emptyLinePlaceholder":157},[228,81977,81978,81980,81982],{"class":230,"line":1807},[228,81979,1148],{"class":238},[228,81981,51915],{"class":51415},[228,81983,51422],{"class":238},[228,81985,81986,81988,81990,81992,81994],{"class":230,"line":1812},[228,81987,52259],{"class":238},[228,81989,51726],{"class":51415},[228,81991,55429],{"class":238},[228,81993,51726],{"class":51415},[228,81995,51422],{"class":238},[228,81997,81998,82000,82002],{"class":230,"line":1841},[228,81999,52259],{"class":238},[228,82001,51928],{"class":51415},[228,82003,51422],{"class":238},[228,82005,82006,82008,82011,82013,82016,82019,82021,82024],{"class":230,"line":1846},[228,82007,11336],{"class":234},[228,82009,82010],{"class":287}," spec",[228,82012,13679],{"class":234},[228,82014,82015],{"class":238}," { size: ",[228,82017,82018],{"class":343},"'40cm*40cm'",[228,82020,55579],{"class":238},[228,82022,82023],{"class":343},"'黑色'",[228,82025,55719],{"class":238},[228,82027,82028],{"class":230,"line":1863},[228,82029,82030],{"class":297},"    \u002F\u002F const arr = Object.values(spec)\n",[228,82032,82033],{"class":230,"line":1868},[228,82034,82035],{"class":297},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[228,82037,82038,82040,82042,82044,82047,82049,82051,82054,82057,82060,82062,82064,82067],{"class":230,"line":1873},[228,82039,52522],{"class":238},[228,82041,54514],{"class":2077},[228,82043,239],{"class":238},[228,82045,82046],{"class":343},"'div'",[228,82048,74364],{"class":238},[228,82050,284],{"class":234},[228,82052,82053],{"class":238}," Object.",[228,82055,82056],{"class":2077},"values",[228,82058,82059],{"class":238},"(spec).",[228,82061,74338],{"class":2077},[228,82063,239],{"class":238},[228,82065,82066],{"class":343},"'\u002F'",[228,82068,245],{"class":238},[228,82070,82071,82073,82075],{"class":230,"line":1878},[228,82072,52532],{"class":238},[228,82074,51928],{"class":51415},[228,82076,51422],{"class":238},[228,82078,82079,82081,82083],{"class":230,"line":1892},[228,82080,51900],{"class":238},[228,82082,51915],{"class":51415},[228,82084,51422],{"class":238},[228,82086,82087],{"class":230,"line":1897},[228,82088,2514],{"emptyLinePlaceholder":157},[228,82090,82091,82093,82095],{"class":230,"line":2691},[228,82092,51900],{"class":238},[228,82094,50750],{"class":51415},[228,82096,51422],{"class":238},[19,82098,82099],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23025,82101,82103],{"id":82102},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,82105,82106],{},"静态方法，将伪数组转换为真数组",[19,82108,82109],{},[1576,82110],{"alt":141,"src":82111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[220,82113,82115],{"className":53182,"code":82114,"language":53184,"meta":141,"style":141},"\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",[30,82116,82117,82125,82133,82145,82157,82169,82177,82185,82190,82195,82200,82205,82213],{"__ignoreMap":141},[228,82118,82119,82121,82123],{"class":230,"line":231},[228,82120,1148],{"class":238},[228,82122,51915],{"class":51415},[228,82124,51422],{"class":238},[228,82126,82127,82129,82131],{"class":230,"line":142},[228,82128,52259],{"class":238},[228,82130,1245],{"class":51415},[228,82132,51422],{"class":238},[228,82134,82135,82137,82139,82141,82143],{"class":230,"line":1293},[228,82136,51456],{"class":238},[228,82138,186],{"class":51415},[228,82140,55429],{"class":238},[228,82142,186],{"class":51415},[228,82144,51422],{"class":238},[228,82146,82147,82149,82151,82153,82155],{"class":230,"line":1308},[228,82148,51456],{"class":238},[228,82150,186],{"class":51415},[228,82152,55429],{"class":238},[228,82154,186],{"class":51415},[228,82156,51422],{"class":238},[228,82158,82159,82161,82163,82165,82167],{"class":230,"line":1314},[228,82160,51456],{"class":238},[228,82162,186],{"class":51415},[228,82164,55429],{"class":238},[228,82166,186],{"class":51415},[228,82168,51422],{"class":238},[228,82170,82171,82173,82175],{"class":230,"line":1328},[228,82172,52532],{"class":238},[228,82174,1245],{"class":51415},[228,82176,51422],{"class":238},[228,82178,82179,82181,82183],{"class":230,"line":1334},[228,82180,52259],{"class":238},[228,82182,51928],{"class":51415},[228,82184,51422],{"class":238},[228,82186,82187],{"class":230,"line":1425},[228,82188,82189],{"class":238},"    const lis = document.querySelectorAll('li')\n",[228,82191,82192],{"class":230,"line":1431},[228,82193,82194],{"class":238},"    const liss = Array.from(lis)\n",[228,82196,82197],{"class":230,"line":1443},[228,82198,82199],{"class":238},"    liss.pop()\n",[228,82201,82202],{"class":230,"line":1726},[228,82203,82204],{"class":238},"    console.log(liss)\n",[228,82206,82207,82209,82211],{"class":230,"line":1731},[228,82208,52532],{"class":238},[228,82210,51928],{"class":51415},[228,82212,51422],{"class":238},[228,82214,82215,82217,82219],{"class":230,"line":1737},[228,82216,51900],{"class":238},[228,82218,51915],{"class":51415},[228,82220,51422],{"class":238},[19,82222,82223],{},[1576,82224],{"alt":141,"src":82225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22113,82227,82229],{"id":82228},"_41053-string","4.10.5.3 String",[19,82231,82232],{},[1576,82233],{"alt":141,"src":82234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23025,82236,82238],{"id":82237},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[220,82240,82242],{"className":53182,"code":82241,"language":53184,"meta":141,"style":141},"\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",[30,82243,82244,82252,82260,82265,82270,82275,82279,82284,82289,82294,82302],{"__ignoreMap":141},[228,82245,82246,82248,82250],{"class":230,"line":231},[228,82247,1148],{"class":238},[228,82249,51915],{"class":51415},[228,82251,51422],{"class":238},[228,82253,82254,82256,82258],{"class":230,"line":142},[228,82255,52259],{"class":238},[228,82257,51928],{"class":51415},[228,82259,51422],{"class":238},[228,82261,82262],{"class":230,"line":1293},[228,82263,82264],{"class":238},"    \u002F\u002F 把字符串转化为数组\n",[228,82266,82267],{"class":230,"line":1308},[228,82268,82269],{"class":238},"    const str = 'pink,red'\n",[228,82271,82272],{"class":230,"line":1314},[228,82273,82274],{"class":238},"    const arr = str.split(',')\n",[228,82276,82277],{"class":230,"line":1328},[228,82278,80753],{"class":238},[228,82280,82281],{"class":230,"line":1334},[228,82282,82283],{"class":238},"    const str1 = '2025-8-25'\n",[228,82285,82286],{"class":230,"line":1425},[228,82287,82288],{"class":238},"    const arr1 = str1.split('-')\n",[228,82290,82291],{"class":230,"line":1431},[228,82292,82293],{"class":238},"    console.log(arr1)\n",[228,82295,82296,82298,82300],{"class":230,"line":1443},[228,82297,52532],{"class":238},[228,82299,51928],{"class":51415},[228,82301,51422],{"class":238},[228,82303,82304,82306,82308],{"class":230,"line":1726},[228,82305,51900],{"class":238},[228,82307,51915],{"class":51415},[228,82309,51422],{"class":238},[23025,82311,82313],{"id":82312},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,82315,5296],{},[19,82317,82318],{},"substring(indexStart)",[19,82320,82321],{},"substring(indexStart, indexEnd)",[1245,82323,82324,82335,82347,82357],{},[186,82325,82326,82327,82330,82331,82334],{},"如果省略了 ",[30,82328,82329],{},"indexEnd","，则 ",[30,82332,82333],{},"substring()"," 提取字符直到字符串的末尾",[186,82336,82337,82338,82341,82342,82330,82344,82346],{},"如果 ",[30,82339,82340],{},"indexStart"," 等于 ",[30,82343,82329],{},[30,82345,82333],{}," 返回一个空字符串",[186,82348,82337,82349,82351,82352,82330,82354,82356],{},[30,82350,82340],{}," 大于 ",[30,82353,82329],{},[30,82355,82333],{}," 的效果就像交换了这两个参数一样",[186,82358,82359],{},"结束的索引号不包含想要截取的部分",[220,82361,82363],{"className":81604,"code":82362,"language":81606,"meta":141,"style":141},"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",[30,82364,82365,82377,82381,82415,82445,82449,82480,82484,82511,82541,82571,82575,82606],{"__ignoreMap":141},[228,82366,82367,82370,82372,82375],{"class":230,"line":231},[228,82368,82369],{"class":238},"const anyString ",[228,82371,284],{"class":234},[228,82373,82374],{"class":343}," \"Mozilla\"",[228,82376,1404],{"class":238},[228,82378,82379],{"class":230,"line":142},[228,82380,2514],{"emptyLinePlaceholder":157},[228,82382,82383,82386,82388,82390,82392,82395,82397,82400,82402,82404,82406,82408,82410,82412],{"class":230,"line":1293},[228,82384,82385],{"class":287},"console",[228,82387,796],{"class":238},[228,82389,58362],{"class":287},[228,82391,239],{"class":238},[228,82393,82394],{"class":287},"anyString",[228,82396,796],{"class":238},[228,82398,82399],{"class":287},"substring",[228,82401,239],{"class":238},[228,82403,430],{"class":287},[228,82405,12550],{"class":238},[228,82407,456],{"class":287},[228,82409,75368],{"class":238},[228,82411,33444],{"class":234},[228,82413,82414],{"class":343}," 'M'\n",[228,82416,82417,82419,82421,82423,82425,82427,82429,82431,82433,82435,82437,82439,82441,82443],{"class":230,"line":1308},[228,82418,82385],{"class":287},[228,82420,796],{"class":238},[228,82422,58362],{"class":287},[228,82424,239],{"class":238},[228,82426,82394],{"class":287},[228,82428,796],{"class":238},[228,82430,82399],{"class":287},[228,82432,239],{"class":238},[228,82434,456],{"class":287},[228,82436,12550],{"class":238},[228,82438,430],{"class":287},[228,82440,75368],{"class":238},[228,82442,33444],{"class":234},[228,82444,82414],{"class":343},[228,82446,82447],{"class":230,"line":1314},[228,82448,2514],{"emptyLinePlaceholder":157},[228,82450,82451,82453,82455,82457,82459,82461,82463,82465,82467,82469,82471,82473,82475,82477],{"class":230,"line":1328},[228,82452,82385],{"class":287},[228,82454,796],{"class":238},[228,82456,58362],{"class":287},[228,82458,239],{"class":238},[228,82460,82394],{"class":287},[228,82462,796],{"class":238},[228,82464,82399],{"class":287},[228,82466,239],{"class":238},[228,82468,430],{"class":287},[228,82470,12550],{"class":238},[228,82472,582],{"class":287},[228,82474,75368],{"class":238},[228,82476,33444],{"class":234},[228,82478,82479],{"class":343}," 'Mozill'\n",[228,82481,82482],{"class":230,"line":1334},[228,82483,2514],{"emptyLinePlaceholder":157},[228,82485,82486,82488,82490,82492,82494,82496,82498,82500,82502,82504,82506,82508],{"class":230,"line":1425},[228,82487,82385],{"class":287},[228,82489,796],{"class":238},[228,82491,58362],{"class":287},[228,82493,239],{"class":238},[228,82495,82394],{"class":287},[228,82497,796],{"class":238},[228,82499,82399],{"class":287},[228,82501,239],{"class":238},[228,82503,531],{"class":287},[228,82505,75368],{"class":238},[228,82507,33444],{"class":234},[228,82509,82510],{"class":343}," 'lla'\n",[228,82512,82513,82515,82517,82519,82521,82523,82525,82527,82529,82531,82533,82535,82537,82539],{"class":230,"line":1431},[228,82514,82385],{"class":287},[228,82516,796],{"class":238},[228,82518,58362],{"class":287},[228,82520,239],{"class":238},[228,82522,82394],{"class":287},[228,82524,796],{"class":238},[228,82526,82399],{"class":287},[228,82528,239],{"class":238},[228,82530,531],{"class":287},[228,82532,12550],{"class":238},[228,82534,607],{"class":287},[228,82536,75424],{"class":238},[228,82538,33444],{"class":234},[228,82540,82510],{"class":343},[228,82542,82543,82545,82547,82549,82551,82553,82555,82557,82559,82561,82563,82565,82567,82569],{"class":230,"line":1443},[228,82544,82385],{"class":287},[228,82546,796],{"class":238},[228,82548,58362],{"class":287},[228,82550,239],{"class":238},[228,82552,82394],{"class":287},[228,82554,796],{"class":238},[228,82556,82399],{"class":287},[228,82558,239],{"class":238},[228,82560,607],{"class":287},[228,82562,12550],{"class":238},[228,82564,531],{"class":287},[228,82566,75368],{"class":238},[228,82568,33444],{"class":234},[228,82570,82510],{"class":343},[228,82572,82573],{"class":230,"line":1726},[228,82574,2514],{"emptyLinePlaceholder":157},[228,82576,82577,82579,82581,82583,82585,82587,82589,82591,82593,82595,82597,82599,82601,82603],{"class":230,"line":1731},[228,82578,82385],{"class":287},[228,82580,796],{"class":238},[228,82582,58362],{"class":287},[228,82584,239],{"class":238},[228,82586,82394],{"class":287},[228,82588,796],{"class":238},[228,82590,82399],{"class":287},[228,82592,239],{"class":238},[228,82594,430],{"class":287},[228,82596,12550],{"class":238},[228,82598,607],{"class":287},[228,82600,75368],{"class":238},[228,82602,33444],{"class":234},[228,82604,82605],{"class":343}," 'Mozilla'\n",[228,82607,82608,82610,82612,82614,82616,82618,82620,82622,82624,82626,82628,82630,82632,82634],{"class":230,"line":1737},[228,82609,82385],{"class":287},[228,82611,796],{"class":238},[228,82613,58362],{"class":287},[228,82615,239],{"class":238},[228,82617,82394],{"class":287},[228,82619,796],{"class":238},[228,82621,82399],{"class":287},[228,82623,239],{"class":238},[228,82625,430],{"class":287},[228,82627,12550],{"class":238},[228,82629,684],{"class":287},[228,82631,75368],{"class":238},[228,82633,33444],{"class":234},[228,82635,82605],{"class":343},[23025,82637,82639],{"id":82638},"_410533-startswith","4.10.5.3.3 startsWith",[19,82641,82642,82645,82646,82651,82652,82654,82655],{},[30,82643,82644],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[388,82647,82648],{},[30,82649,82650],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[30,82653,1476],{}," 或 ",[30,82656,66135],{},[220,82658,82660],{"className":77610,"code":82659,"language":77612,"meta":141,"style":141},"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",[30,82661,82662,82674,82693,82698,82718],{"__ignoreMap":141},[228,82663,82664,82666,82669,82671],{"class":230,"line":231},[228,82665,6907],{"class":234},[228,82667,82668],{"class":238}," str1 ",[228,82670,284],{"class":234},[228,82672,82673],{"class":343}," \"Saturday night plans\"\n",[228,82675,82676,82678,82680,82683,82686,82688,82691],{"class":230,"line":142},[228,82677,77647],{"class":238},[228,82679,58362],{"class":2077},[228,82681,82682],{"class":238},"(str1.",[228,82684,82685],{"class":2077},"startsWith",[228,82687,239],{"class":238},[228,82689,82690],{"class":343},"\"Sat\"",[228,82692,30612],{"class":238},[228,82694,82695],{"class":230,"line":1293},[228,82696,82697],{"class":297},"\u002F\u002F Expected output: true\n",[228,82699,82700,82702,82704,82706,82708,82710,82712,82714,82716],{"class":230,"line":1308},[228,82701,77647],{"class":238},[228,82703,58362],{"class":2077},[228,82705,82682],{"class":238},[228,82707,82685],{"class":2077},[228,82709,239],{"class":238},[228,82711,82690],{"class":343},[228,82713,12550],{"class":238},[228,82715,310],{"class":287},[228,82717,30612],{"class":238},[228,82719,82720],{"class":230,"line":1314},[228,82721,82722],{"class":297},"\u002F\u002F Expected output: false\n",[220,82724,82726],{"className":50748,"code":82725,"language":50750,"meta":141,"style":141},"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",[30,82727,82728,82733,82738,82742,82747,82752],{"__ignoreMap":141},[228,82729,82730],{"class":230,"line":231},[228,82731,82732],{"class":238},"startsWith(searchString)\n",[228,82734,82735],{"class":230,"line":142},[228,82736,82737],{"class":238},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[228,82739,82740],{"class":230,"line":1293},[228,82741,2514],{"emptyLinePlaceholder":157},[228,82743,82744],{"class":230,"line":1308},[228,82745,82746],{"class":238},"const str3 = 'pink老师上课中'\n",[228,82748,82749],{"class":230,"line":1314},[228,82750,82751],{"class":238},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[228,82753,82754],{"class":230,"line":1328},[228,82755,82756],{"class":238},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23025,82758,82760],{"id":82759},"_410534-includes","4.10.5.3.4 includes",[19,82762,82763],{},"includes(searchString) includes(searchString, position)",[183,82765,82766],{},[186,82767,82768],{},"searchString:",[19,82770,82771,82772,82774,82775,82780,82781,82786,82787,21615,82790,82793,82794,82797],{},"一个要在 ",[30,82773,1413],{}," 中查找的字符串。",[476,82776,82779],{"href":82777,"rel":82778},"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",[23980],"不能是正则表达式","。所有非正则表达式的值都会被",[476,82782,82785],{"href":82783,"rel":82784},"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",[23980],"强制转换为字符串","，因此如果该参数被省略或传入 ",[30,82788,82789],{},"undefined",[30,82791,82792],{},"includes()"," 方法会在字符串中搜索 ",[30,82795,82796],{},"\"undefined\"","，这通常不是你想要的",[183,82799,82800],{"start":142},[186,82801,82802,1097],{},[30,82803,82804],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,82806,82807,82808,82811,82812],{},"在字符串中开始搜索 ",[30,82809,82810],{},"searchString"," 的位置。默认值为 ",[30,82813,430],{},[183,82815,82816],{"start":1293},[186,82817,82818],{},"返回值：",[19,82820,82821,82822,82824,82825,82829,82830],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[30,82823,82810],{}," 为空字符串的情况），则返回 ",[388,82826,82827],{},[30,82828,1476],{}," ，否则返回 ",[388,82831,82832],{},[30,82833,66135],{},[183,82835,82836],{"start":1308},[186,82837,82838],{},"异常：",[19,82840,82337,82841,13910,82843,82847],{},[30,82842,82810],{},[476,82844,82846],{"href":82777,"rel":82845},[23980],"是一个正则表达式","，则会抛出",[19,82849,82850],{},"只要是有就是true，不需要非得以谁开头结尾",[220,82852,82854],{"className":77610,"code":82853,"language":77612,"meta":141,"style":141},"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",[30,82855,82856,82867,82890,82909,82929,82951,82970],{"__ignoreMap":141},[228,82857,82858,82860,82862,82864],{"class":230,"line":231},[228,82859,6907],{"class":234},[228,82861,79890],{"class":238},[228,82863,284],{"class":234},[228,82865,82866],{"class":343}," \"To be, or not to be, that is the question.\"\n",[228,82868,82869,82871,82873,82876,82879,82881,82884,82887],{"class":230,"line":142},[228,82870,77647],{"class":238},[228,82872,58362],{"class":2077},[228,82874,82875],{"class":238},"(str.",[228,82877,82878],{"class":2077},"includes",[228,82880,239],{"class":238},[228,82882,82883],{"class":343},"\"To be\"",[228,82885,82886],{"class":238},"))",[228,82888,82889],{"class":297},"  \u002F\u002F true\n",[228,82891,82892,82894,82896,82898,82900,82902,82905,82907],{"class":230,"line":1293},[228,82893,77647],{"class":238},[228,82895,58362],{"class":2077},[228,82897,82875],{"class":238},[228,82899,82878],{"class":2077},[228,82901,239],{"class":238},[228,82903,82904],{"class":343},"\"question\"",[228,82906,82886],{"class":238},[228,82908,82889],{"class":297},[228,82910,82911,82913,82915,82917,82919,82921,82924,82926],{"class":230,"line":1308},[228,82912,77647],{"class":238},[228,82914,58362],{"class":2077},[228,82916,82875],{"class":238},[228,82918,82878],{"class":2077},[228,82920,239],{"class":238},[228,82922,82923],{"class":343},"\"nonexistent\"",[228,82925,82886],{"class":238},[228,82927,82928],{"class":297},"  \u002F\u002F false\n",[228,82930,82931,82933,82935,82937,82939,82941,82943,82945,82947,82949],{"class":230,"line":1314},[228,82932,77647],{"class":238},[228,82934,58362],{"class":2077},[228,82936,82875],{"class":238},[228,82938,82878],{"class":2077},[228,82940,239],{"class":238},[228,82942,82883],{"class":343},[228,82944,12550],{"class":238},[228,82946,456],{"class":287},[228,82948,82886],{"class":238},[228,82950,82928],{"class":297},[228,82952,82953,82955,82957,82959,82961,82963,82966,82968],{"class":230,"line":1328},[228,82954,77647],{"class":238},[228,82956,58362],{"class":2077},[228,82958,82875],{"class":238},[228,82960,82878],{"class":2077},[228,82962,239],{"class":238},[228,82964,82965],{"class":343},"\"TO BE\"",[228,82967,82886],{"class":238},[228,82969,82928],{"class":297},[228,82971,82972,82974,82976,82978,82980,82982,82984,82986],{"class":230,"line":1334},[228,82973,77647],{"class":238},[228,82975,58362],{"class":2077},[228,82977,82875],{"class":238},[228,82979,82878],{"class":2077},[228,82981,239],{"class":238},[228,82983,7767],{"class":343},[228,82985,82886],{"class":238},[228,82987,82889],{"class":297},[23025,82989,82991],{"id":82990},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[220,82993,82995],{"className":53182,"code":82994,"language":53184,"meta":141,"style":141},"\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",[30,82996,82997,83005,83013,83018,83023,83028,83033,83038,83046],{"__ignoreMap":141},[228,82998,82999,83001,83003],{"class":230,"line":231},[228,83000,1148],{"class":238},[228,83002,51915],{"class":51415},[228,83004,51422],{"class":238},[228,83006,83007,83009,83011],{"class":230,"line":142},[228,83008,52259],{"class":238},[228,83010,51928],{"class":51415},[228,83012,51422],{"class":238},[228,83014,83015],{"class":230,"line":1293},[228,83016,83017],{"class":238},"    const num = 10\n",[228,83019,83020],{"class":230,"line":1308},[228,83021,83022],{"class":238},"    \u002F\u002F 强制转换\n",[228,83024,83025],{"class":230,"line":1314},[228,83026,83027],{"class":238},"    console.log(String(num))\n",[228,83029,83030],{"class":230,"line":1328},[228,83031,83032],{"class":238},"    \u002F\u002F toString()方法转换\n",[228,83034,83035],{"class":230,"line":1334},[228,83036,83037],{"class":238},"    console.log(num.toString())\n",[228,83039,83040,83042,83044],{"class":230,"line":1425},[228,83041,52532],{"class":238},[228,83043,51928],{"class":51415},[228,83045,51422],{"class":238},[228,83047,83048,83050,83052],{"class":230,"line":1431},[228,83049,51900],{"class":238},[228,83051,51915],{"class":51415},[228,83053,51422],{"class":238},[23025,83055,83057],{"id":83056},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,83059,83060],{},[1576,83061],{"alt":141,"src":83062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[220,83064,83066],{"className":50748,"code":83065,"language":50750,"meta":141,"style":141},"\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",[30,83067,83068,83078,83092,83096,83104,83118,83138,83150,83158,83162,83170,83182,83190,83202,83207,83212,83217,83264,83280,83288,83296,83300],{"__ignoreMap":141},[228,83069,83070,83072,83074,83076],{"class":230,"line":231},[228,83071,51412],{"class":238},[228,83073,51416],{"class":51415},[228,83075,51419],{"class":2077},[228,83077,51422],{"class":238},[228,83079,83080,83082,83084,83086,83088,83090],{"class":230,"line":142},[228,83081,1148],{"class":238},[228,83083,50750],{"class":51415},[228,83085,51431],{"class":2077},[228,83087,284],{"class":238},[228,83089,51436],{"class":343},[228,83091,51422],{"class":238},[228,83093,83094],{"class":230,"line":1293},[228,83095,2514],{"emptyLinePlaceholder":157},[228,83097,83098,83100,83102],{"class":230,"line":1308},[228,83099,1148],{"class":238},[228,83101,51449],{"class":51415},[228,83103,51422],{"class":238},[228,83105,83106,83108,83110,83112,83114,83116],{"class":230,"line":1314},[228,83107,52259],{"class":238},[228,83109,51459],{"class":51415},[228,83111,51462],{"class":2077},[228,83113,284],{"class":238},[228,83115,51467],{"class":343},[228,83117,51422],{"class":238},[228,83119,83120,83122,83124,83126,83128,83130,83132,83134,83136],{"class":230,"line":1328},[228,83121,52259],{"class":238},[228,83123,51459],{"class":51415},[228,83125,15035],{"class":2077},[228,83127,284],{"class":238},[228,83129,51506],{"class":343},[228,83131,51486],{"class":2077},[228,83133,284],{"class":238},[228,83135,51513],{"class":343},[228,83137,51422],{"class":238},[228,83139,83140,83142,83144,83146,83148],{"class":230,"line":1334},[228,83141,52259],{"class":238},[228,83143,51522],{"class":51415},[228,83145,51525],{"class":238},[228,83147,51522],{"class":51415},[228,83149,51422],{"class":238},[228,83151,83152,83154,83156],{"class":230,"line":1425},[228,83153,51900],{"class":238},[228,83155,51449],{"class":51415},[228,83157,51422],{"class":238},[228,83159,83160],{"class":230,"line":1431},[228,83161,2514],{"emptyLinePlaceholder":157},[228,83163,83164,83166,83168],{"class":230,"line":1443},[228,83165,1148],{"class":238},[228,83167,51915],{"class":51415},[228,83169,51422],{"class":238},[228,83171,83172,83174,83176,83178,83180],{"class":230,"line":1726},[228,83173,52259],{"class":238},[228,83175,51726],{"class":51415},[228,83177,55429],{"class":238},[228,83179,51726],{"class":51415},[228,83181,51422],{"class":238},[228,83183,83184,83186,83188],{"class":230,"line":1731},[228,83185,52259],{"class":238},[228,83187,51928],{"class":51415},[228,83189,51422],{"class":238},[228,83191,83192,83194,83197,83199],{"class":230,"line":1737},[228,83193,11336],{"class":234},[228,83195,83196],{"class":287}," gift",[228,83198,13679],{"class":234},[228,83200,83201],{"class":343}," '50g的茶叶，清洗球'\n",[228,83203,83204],{"class":230,"line":1742},[228,83205,83206],{"class":297},"    \u002F\u002F 1.把字符串拆分为数组\n",[228,83208,83209],{"class":230,"line":1756},[228,83210,83211],{"class":297},"    \u002F\u002F console.log(gift.split(','))\n",[228,83213,83214],{"class":230,"line":1761},[228,83215,83216],{"class":297},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[228,83218,83219,83221,83223,83225,83228,83231,83233,83236,83238,83240,83242,83244,83246,83249,83251,83254,83256,83258,83260,83262],{"class":230,"line":1767},[228,83220,11336],{"class":234},[228,83222,74034],{"class":287},[228,83224,13679],{"class":234},[228,83226,83227],{"class":238}," gift.",[228,83229,83230],{"class":2077},"split",[228,83232,239],{"class":238},[228,83234,83235],{"class":343},"'，'",[228,83237,30941],{"class":238},[228,83239,74159],{"class":2077},[228,83241,239],{"class":238},[228,83243,79910],{"class":5331},[228,83245,79913],{"class":234},[228,83247,83248],{"class":343}," `\u003Cspan>【赠品】${",[228,83250,79910],{"class":238},[228,83252,83253],{"class":343},"}\u003C\u002Fspan>\u003Cbr>`",[228,83255,30941],{"class":238},[228,83257,74338],{"class":2077},[228,83259,239],{"class":238},[228,83261,74343],{"class":343},[228,83263,245],{"class":238},[228,83265,83266,83268,83270,83272,83274,83276,83278],{"class":230,"line":1788},[228,83267,52522],{"class":238},[228,83269,54514],{"class":2077},[228,83271,239],{"class":238},[228,83273,82046],{"class":343},[228,83275,74364],{"class":238},[228,83277,284],{"class":234},[228,83279,74100],{"class":238},[228,83281,83282,83284,83286],{"class":230,"line":1793},[228,83283,52532],{"class":238},[228,83285,51928],{"class":51415},[228,83287,51422],{"class":238},[228,83289,83290,83292,83294],{"class":230,"line":1807},[228,83291,51900],{"class":238},[228,83293,51915],{"class":51415},[228,83295,51422],{"class":238},[228,83297,83298],{"class":230,"line":1812},[228,83299,2514],{"emptyLinePlaceholder":157},[228,83301,83302,83304,83306],{"class":230,"line":1841},[228,83303,51900],{"class":238},[228,83305,50750],{"class":51415},[228,83307,51422],{"class":238},[22113,83309,83311],{"id":83310},"_41054-number","4.10.5.4 Number",[19,83313,83314],{},[1576,83315],{"alt":141,"src":83316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,83318,83319],{},"整数也可以进行toFixed来保留小数",[19,83321,83322],{},"比如：",[19,83324,83325],{},"const price=10",[19,83327,83328],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22113,83330,83332],{"id":83331},"_41055-购物车展示","4.10.5.5 购物车展示",[19,83334,83335],{},[1576,83336],{"alt":141,"src":83337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[220,83339,83341],{"className":50748,"code":83340,"language":50750,"meta":141,"style":141},"\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",[30,83342,83343,83353,83367,83371,83379,83393,83413,83425,83433,83439,83449,83459,83469,83473,83477,83483,83495,83509,83513,83517,83523,83535,83551,83561,83577,83581,83585,83591,83601,83611,83615,83619,83627,83639,83651,83663,83667,83671,83679,83691,83695,83699,83710,83720,83732,83744,83754,83758,83762,83770,83779,83791,83801,83811,83815,83819,83827,83836,83843,83853,83865,83869,83873,83882,83892,83903,83915,83927,83931,83935,83944,83954,83965,83969,83973,83979,83991,84003,84013,84023,84041,84053,84057,84061,84070,84082,84092,84102,84114,84118,84126,84134,84138,84146,84160,84168,84182,84210,84218,84226,84236,84240,84248,84256,84265,84273,84282,84292,84296,84300,84308,84316,84325,84333,84341,84354,84358,84362,84370,84378,84387,84395,84403,84418,84422,84426,84434,84442,84451,84459,84467,84481,84489,84493,84497,84502,84528,84533,84570,84575,84598,84603,84657,84662,84698,84702,84708,84713,84722,84736,84745,84764,84773,84783,84788,84793,84806,84811,84865,84891,84899,84907,84911],{"__ignoreMap":141},[228,83344,83345,83347,83349,83351],{"class":230,"line":231},[228,83346,51412],{"class":238},[228,83348,51416],{"class":51415},[228,83350,51419],{"class":2077},[228,83352,51422],{"class":238},[228,83354,83355,83357,83359,83361,83363,83365],{"class":230,"line":142},[228,83356,1148],{"class":238},[228,83358,50750],{"class":51415},[228,83360,51431],{"class":2077},[228,83362,284],{"class":238},[228,83364,51436],{"class":343},[228,83366,51422],{"class":238},[228,83368,83369],{"class":230,"line":1293},[228,83370,2514],{"emptyLinePlaceholder":157},[228,83372,83373,83375,83377],{"class":230,"line":1308},[228,83374,1148],{"class":238},[228,83376,51449],{"class":51415},[228,83378,51422],{"class":238},[228,83380,83381,83383,83385,83387,83389,83391],{"class":230,"line":1314},[228,83382,52259],{"class":238},[228,83384,51459],{"class":51415},[228,83386,51462],{"class":2077},[228,83388,284],{"class":238},[228,83390,51467],{"class":343},[228,83392,51422],{"class":238},[228,83394,83395,83397,83399,83401,83403,83405,83407,83409,83411],{"class":230,"line":1328},[228,83396,52259],{"class":238},[228,83398,51459],{"class":51415},[228,83400,15035],{"class":2077},[228,83402,284],{"class":238},[228,83404,51506],{"class":343},[228,83406,51486],{"class":2077},[228,83408,284],{"class":238},[228,83410,51513],{"class":343},[228,83412,51422],{"class":238},[228,83414,83415,83417,83419,83421,83423],{"class":230,"line":1334},[228,83416,52259],{"class":238},[228,83418,51522],{"class":51415},[228,83420,51525],{"class":238},[228,83422,51522],{"class":51415},[228,83424,51422],{"class":238},[228,83426,83427,83429,83431],{"class":230,"line":1425},[228,83428,52259],{"class":238},[228,83430,5241],{"class":51415},[228,83432,51422],{"class":238},[228,83434,83435,83437],{"class":230,"line":1431},[228,83436,6518],{"class":51415},[228,83438,15687],{"class":238},[228,83440,83441,83443,83445,83447],{"class":230,"line":1443},[228,83442,54810],{"class":287},[228,83444,51552],{"class":238},[228,83446,430],{"class":287},[228,83448,1404],{"class":238},[228,83450,83451,83453,83455,83457],{"class":230,"line":1726},[228,83452,54821],{"class":287},[228,83454,51552],{"class":238},[228,83456,430],{"class":287},[228,83458,1404],{"class":238},[228,83460,83461,83463,83465,83467],{"class":230,"line":1731},[228,83462,72711],{"class":287},[228,83464,51552],{"class":238},[228,83466,60620],{"class":287},[228,83468,1404],{"class":238},[228,83470,83471],{"class":230,"line":1737},[228,83472,2301],{"class":238},[228,83474,83475],{"class":230,"line":1742},[228,83476,2514],{"emptyLinePlaceholder":157},[228,83478,83479,83481],{"class":230,"line":1756},[228,83480,62238],{"class":2077},[228,83482,15687],{"class":238},[228,83484,83485,83487,83489,83491,83493],{"class":230,"line":1761},[228,83486,54886],{"class":287},[228,83488,51552],{"class":238},[228,83490,78689],{"class":287},[228,83492,51607],{"class":234},[228,83494,1404],{"class":238},[228,83496,83497,83499,83501,83503,83505,83507],{"class":230,"line":1767},[228,83498,54821],{"class":287},[228,83500,51552],{"class":238},[228,83502,549],{"class":287},[228,83504,51607],{"class":234},[228,83506,51671],{"class":287},[228,83508,1404],{"class":238},[228,83510,83511],{"class":230,"line":1788},[228,83512,2301],{"class":238},[228,83514,83515],{"class":230,"line":1793},[228,83516,2514],{"emptyLinePlaceholder":157},[228,83518,83519,83521],{"class":230,"line":1807},[228,83520,78740],{"class":2077},[228,83522,15687],{"class":238},[228,83524,83525,83527,83529,83531,83533],{"class":230,"line":1812},[228,83526,54810],{"class":287},[228,83528,51552],{"class":238},[228,83530,813],{"class":287},[228,83532,51607],{"class":234},[228,83534,1404],{"class":238},[228,83536,83537,83539,83541,83543,83545,83547,83549],{"class":230,"line":1841},[228,83538,61975],{"class":287},[228,83540,51552],{"class":238},[228,83542,28237],{"class":287},[228,83544,78795],{"class":287},[228,83546,78798],{"class":287},[228,83548,933],{"class":234},[228,83550,1404],{"class":238},[228,83552,83553,83555,83557,83559],{"class":230,"line":1846},[228,83554,55124],{"class":287},[228,83556,51552],{"class":238},[228,83558,51592],{"class":287},[228,83560,1404],{"class":238},[228,83562,83563,83565,83567,83569,83571,83573,83575],{"class":230,"line":1863},[228,83564,62092],{"class":287},[228,83566,51552],{"class":238},[228,83568,456],{"class":287},[228,83570,51607],{"class":234},[228,83572,51636],{"class":287},[228,83574,62359],{"class":287},[228,83576,1404],{"class":238},[228,83578,83579],{"class":230,"line":1868},[228,83580,2301],{"class":238},[228,83582,83583],{"class":230,"line":1873},[228,83584,2514],{"emptyLinePlaceholder":157},[228,83586,83587,83589],{"class":230,"line":1878},[228,83588,78858],{"class":2077},[228,83590,15687],{"class":238},[228,83592,83593,83595,83597,83599],{"class":230,"line":1892},[228,83594,62140],{"class":287},[228,83596,51552],{"class":238},[228,83598,62145],{"class":287},[228,83600,1404],{"class":238},[228,83602,83603,83605,83607,83609],{"class":230,"line":1897},[228,83604,54999],{"class":287},[228,83606,51552],{"class":238},[228,83608,61933],{"class":287},[228,83610,1404],{"class":238},[228,83612,83613],{"class":230,"line":2691},[228,83614,2301],{"class":238},[228,83616,83617],{"class":230,"line":2705},[228,83618,2514],{"emptyLinePlaceholder":157},[228,83620,83621,83623,83625],{"class":230,"line":2713},[228,83622,78740],{"class":2077},[228,83624,55730],{"class":51415},[228,83626,15687],{"class":238},[228,83628,83629,83631,83633,83635,83637],{"class":230,"line":2718},[228,83630,54886],{"class":287},[228,83632,51552],{"class":238},[228,83634,850],{"class":287},[228,83636,51607],{"class":234},[228,83638,1404],{"class":238},[228,83640,83641,83643,83645,83647,83649],{"class":230,"line":2724},[228,83642,54900],{"class":287},[228,83644,51552],{"class":238},[228,83646,850],{"class":287},[228,83648,51607],{"class":234},[228,83650,1404],{"class":238},[228,83652,83653,83655,83657,83659,83661],{"class":230,"line":2730},[228,83654,61865],{"class":287},[228,83656,51552],{"class":238},[228,83658,557],{"class":287},[228,83660,51607],{"class":234},[228,83662,1404],{"class":238},[228,83664,83665],{"class":230,"line":2735},[228,83666,2301],{"class":238},[228,83668,83669],{"class":230,"line":8063},[228,83670,2514],{"emptyLinePlaceholder":157},[228,83672,83673,83675,83677],{"class":230,"line":8087},[228,83674,78740],{"class":2077},[228,83676,62419],{"class":2077},[228,83678,15687],{"class":238},[228,83680,83681,83683,83685,83687,83689],{"class":230,"line":8092},[228,83682,54886],{"class":287},[228,83684,51552],{"class":238},[228,83686,1836],{"class":287},[228,83688,51607],{"class":234},[228,83690,1404],{"class":238},[228,83692,83693],{"class":230,"line":8098},[228,83694,2301],{"class":238},[228,83696,83697],{"class":230,"line":8125},[228,83698,2514],{"emptyLinePlaceholder":157},[228,83700,83701,83703,83705,83708],{"class":230,"line":8130},[228,83702,78740],{"class":2077},[228,83704,62419],{"class":2077},[228,83706,83707],{"class":2077}," .tag",[228,83709,15687],{"class":238},[228,83711,83712,83714,83716,83718],{"class":230,"line":8136},[228,83713,55124],{"class":287},[228,83715,51552],{"class":238},[228,83717,60984],{"class":287},[228,83719,1404],{"class":238},[228,83721,83722,83724,83726,83728,83730],{"class":230,"line":8148},[228,83723,54810],{"class":287},[228,83725,51552],{"class":238},[228,83727,316],{"class":287},[228,83729,51607],{"class":234},[228,83731,1404],{"class":238},[228,83733,83734,83736,83738,83740,83742],{"class":230,"line":8160},[228,83735,55037],{"class":287},[228,83737,51552],{"class":238},[228,83739,736],{"class":287},[228,83741,51607],{"class":234},[228,83743,1404],{"class":238},[228,83745,83746,83748,83750,83752],{"class":230,"line":8172},[228,83747,57531],{"class":287},[228,83749,51552],{"class":238},[228,83751,62185],{"class":287},[228,83753,1404],{"class":238},[228,83755,83756],{"class":230,"line":9831},[228,83757,2301],{"class":238},[228,83759,83760],{"class":230,"line":9856},[228,83761,2514],{"emptyLinePlaceholder":157},[228,83763,83764,83766,83768],{"class":230,"line":9879},[228,83765,78740],{"class":2077},[228,83767,79032],{"class":2077},[228,83769,31581],{"class":238},[228,83771,83772,83774,83777],{"class":230,"line":9903},[228,83773,78740],{"class":2077},[228,83775,83776],{"class":2077}," .sub-total",[228,83778,15687],{"class":238},[228,83780,83781,83783,83785,83787,83789],{"class":230,"line":9908},[228,83782,55037],{"class":287},[228,83784,51552],{"class":238},[228,83786,888],{"class":287},[228,83788,51607],{"class":234},[228,83790,1404],{"class":238},[228,83792,83793,83795,83797,83799],{"class":230,"line":9913},[228,83794,57531],{"class":287},[228,83796,51552],{"class":238},[228,83798,79055],{"class":287},[228,83800,1404],{"class":238},[228,83802,83803,83805,83807,83809],{"class":230,"line":9918},[228,83804,61952],{"class":287},[228,83806,51552],{"class":238},[228,83808,456],{"class":287},[228,83810,1404],{"class":238},[228,83812,83813],{"class":230,"line":9927},[228,83814,2301],{"class":238},[228,83816,83817],{"class":230,"line":9932},[228,83818,2514],{"emptyLinePlaceholder":157},[228,83820,83821,83823,83825],{"class":230,"line":9938},[228,83822,78740],{"class":2077},[228,83824,79072],{"class":2077},[228,83826,31581],{"class":238},[228,83828,83829,83831,83834],{"class":230,"line":9959},[228,83830,78740],{"class":2077},[228,83832,83833],{"class":2077}," .sub-total::before",[228,83835,31581],{"class":238},[228,83837,83838,83841],{"class":230,"line":9965},[228,83839,83840],{"class":2077},"    .amount::before",[228,83842,15687],{"class":238},[228,83844,83845,83847,83849,83851],{"class":230,"line":9979},[228,83846,79079],{"class":287},[228,83848,51552],{"class":238},[228,83850,79084],{"class":343},[228,83852,1404],{"class":238},[228,83854,83855,83857,83859,83861,83863],{"class":230,"line":9985},[228,83856,55037],{"class":287},[228,83858,51552],{"class":238},[228,83860,736],{"class":287},[228,83862,51607],{"class":234},[228,83864,1404],{"class":238},[228,83866,83867],{"class":230,"line":10012},[228,83868,2301],{"class":238},[228,83870,83871],{"class":230,"line":10021},[228,83872,2514],{"emptyLinePlaceholder":157},[228,83874,83875,83877,83880],{"class":230,"line":10027},[228,83876,78740],{"class":2077},[228,83878,83879],{"class":2077}," .spec",[228,83881,15687],{"class":238},[228,83883,83884,83886,83888,83890],{"class":230,"line":10035},[228,83885,61952],{"class":287},[228,83887,51552],{"class":238},[228,83889,316],{"class":287},[228,83891,1404],{"class":238},[228,83893,83894,83896,83898,83901],{"class":230,"line":10040},[228,83895,57531],{"class":287},[228,83897,51552],{"class":238},[228,83899,83900],{"class":287},"#888",[228,83902,1404],{"class":238},[228,83904,83905,83907,83909,83911,83913],{"class":230,"line":16719},[228,83906,55037],{"class":287},[228,83908,51552],{"class":238},[228,83910,787],{"class":287},[228,83912,51607],{"class":234},[228,83914,1404],{"class":238},[228,83916,83917,83919,83921,83923,83925],{"class":230,"line":16725},[228,83918,62115],{"class":287},[228,83920,51552],{"class":238},[228,83922,938],{"class":287},[228,83924,51607],{"class":234},[228,83926,1404],{"class":238},[228,83928,83929],{"class":230,"line":16748},[228,83930,2301],{"class":238},[228,83932,83933],{"class":230,"line":16754},[228,83934,2514],{"emptyLinePlaceholder":157},[228,83936,83937,83939,83942],{"class":230,"line":16777},[228,83938,78740],{"class":2077},[228,83940,83941],{"class":2077}," .count",[228,83943,15687],{"class":238},[228,83945,83946,83948,83950,83952],{"class":230,"line":16791},[228,83947,61952],{"class":287},[228,83949,51552],{"class":238},[228,83951,456],{"class":287},[228,83953,1404],{"class":238},[228,83955,83956,83958,83960,83963],{"class":230,"line":16811},[228,83957,57531],{"class":287},[228,83959,51552],{"class":238},[228,83961,83962],{"class":287},"#aaa",[228,83964,1404],{"class":238},[228,83966,83967],{"class":230,"line":16817},[228,83968,2301],{"class":238},[228,83970,83971],{"class":230,"line":16828},[228,83972,2514],{"emptyLinePlaceholder":157},[228,83974,83975,83977],{"class":230,"line":16851},[228,83976,72590],{"class":2077},[228,83978,15687],{"class":238},[228,83980,83981,83983,83985,83987,83989],{"class":230,"line":16873},[228,83982,54886],{"class":287},[228,83984,51552],{"class":238},[228,83986,78689],{"class":287},[228,83988,51607],{"class":234},[228,83990,1404],{"class":238},[228,83992,83993,83995,83997,83999,84001],{"class":230,"line":16878},[228,83994,54821],{"class":287},[228,83996,51552],{"class":238},[228,83998,430],{"class":287},[228,84000,51671],{"class":287},[228,84002,1404],{"class":238},[228,84004,84005,84007,84009,84011],{"class":230,"line":16884},[228,84006,55124],{"class":287},[228,84008,51552],{"class":238},[228,84010,51592],{"class":287},[228,84012,1404],{"class":238},[228,84014,84015,84017,84019,84021],{"class":230,"line":16898},[228,84016,55135],{"class":287},[228,84018,51552],{"class":238},[228,84020,51695],{"class":287},[228,84022,1404],{"class":238},[228,84024,84025,84028,84030,84032,84034,84036,84039],{"class":230,"line":16911},[228,84026,84027],{"class":287},"      border-top",[228,84029,51552],{"class":238},[228,84031,456],{"class":287},[228,84033,51607],{"class":234},[228,84035,51636],{"class":287},[228,84037,84038],{"class":287}," #4e4e4e",[228,84040,1404],{"class":238},[228,84042,84043,84045,84047,84049,84051],{"class":230,"line":16916},[228,84044,54810],{"class":287},[228,84046,51552],{"class":238},[228,84048,938],{"class":287},[228,84050,51607],{"class":234},[228,84052,1404],{"class":238},[228,84054,84055],{"class":230,"line":16930},[228,84056,2301],{"class":238},[228,84058,84059],{"class":230,"line":16935},[228,84060,2514],{"emptyLinePlaceholder":157},[228,84062,84063,84065,84068],{"class":230,"line":16941},[228,84064,72590],{"class":2077},[228,84066,84067],{"class":2077}," .amount",[228,84069,15687],{"class":238},[228,84071,84072,84074,84076,84078,84080],{"class":230,"line":16946},[228,84073,55037],{"class":287},[228,84075,51552],{"class":238},[228,84077,888],{"class":287},[228,84079,51607],{"class":234},[228,84081,1404],{"class":238},[228,84083,84084,84086,84088,84090],{"class":230,"line":16960},[228,84085,57531],{"class":287},[228,84087,51552],{"class":238},[228,84089,79055],{"class":287},[228,84091,1404],{"class":238},[228,84093,84094,84096,84098,84100],{"class":230,"line":16965},[228,84095,62449],{"class":287},[228,84097,51552],{"class":238},[228,84099,51604],{"class":287},[228,84101,1404],{"class":238},[228,84103,84104,84106,84108,84110,84112],{"class":230,"line":16970},[228,84105,61865],{"class":287},[228,84107,51552],{"class":238},[228,84109,894],{"class":287},[228,84111,51607],{"class":234},[228,84113,1404],{"class":238},[228,84115,84116],{"class":230,"line":16984},[228,84117,2301],{"class":238},[228,84119,84120,84122,84124],{"class":230,"line":16996},[228,84121,52532],{"class":238},[228,84123,5241],{"class":51415},[228,84125,51422],{"class":238},[228,84127,84128,84130,84132],{"class":230,"line":17001},[228,84129,51900],{"class":238},[228,84131,51449],{"class":51415},[228,84133,51422],{"class":238},[228,84135,84136],{"class":230,"line":17014},[228,84137,2514],{"emptyLinePlaceholder":157},[228,84139,84140,84142,84144],{"class":230,"line":17019},[228,84141,1148],{"class":238},[228,84143,51915],{"class":51415},[228,84145,51422],{"class":238},[228,84147,84148,84150,84152,84154,84156,84158],{"class":230,"line":17024},[228,84149,52259],{"class":238},[228,84151,51726],{"class":51415},[228,84153,53601],{"class":2077},[228,84155,284],{"class":238},[228,84157,62723],{"class":343},[228,84159,51422],{"class":238},[228,84161,84162,84164,84166],{"class":230,"line":17029},[228,84163,52532],{"class":238},[228,84165,51726],{"class":51415},[228,84167,51422],{"class":238},[228,84169,84170,84172,84174,84176,84178,84180],{"class":230,"line":17042},[228,84171,52259],{"class":238},[228,84173,51726],{"class":51415},[228,84175,53601],{"class":2077},[228,84177,284],{"class":238},[228,84179,62695],{"class":343},[228,84181,51422],{"class":238},[228,84183,84184,84186,84188,84191,84193,84195,84197,84200,84202,84204,84206,84208],{"class":230,"line":17047},[228,84185,51456],{"class":238},[228,84187,51726],{"class":51415},[228,84189,84190],{"class":238},">合计：\u003C",[228,84192,228],{"class":51415},[228,84194,53601],{"class":2077},[228,84196,284],{"class":238},[228,84198,84199],{"class":343},"\"amount\"",[228,84201,55429],{"class":238},[228,84203,228],{"class":51415},[228,84205,55429],{"class":238},[228,84207,51726],{"class":51415},[228,84209,51422],{"class":238},[228,84211,84212,84214,84216],{"class":230,"line":32748},[228,84213,52532],{"class":238},[228,84215,51726],{"class":51415},[228,84217,51422],{"class":238},[228,84219,84220,84222,84224],{"class":230,"line":32754},[228,84221,52259],{"class":238},[228,84223,51928],{"class":51415},[228,84225,51422],{"class":238},[228,84227,84228,84230,84232,84234],{"class":230,"line":32760},[228,84229,11336],{"class":234},[228,84231,79492],{"class":287},[228,84233,13679],{"class":234},[228,84235,55562],{"class":238},[228,84237,84238],{"class":230,"line":32766},[228,84239,79501],{"class":238},[228,84241,84242,84244,84246],{"class":230,"line":32772},[228,84243,79506],{"class":238},[228,84245,79509],{"class":343},[228,84247,31581],{"class":238},[228,84249,84250,84252,84254],{"class":230,"line":32783},[228,84251,79516],{"class":238},[228,84253,79519],{"class":343},[228,84255,31581],{"class":238},[228,84257,84258,84260,84263],{"class":230,"line":32789},[228,84259,79526],{"class":238},[228,84261,84262],{"class":287},"289.9",[228,84264,31581],{"class":238},[228,84266,84267,84269,84271],{"class":230,"line":32809},[228,84268,79536],{"class":238},[228,84270,79539],{"class":343},[228,84272,31581],{"class":238},[228,84274,84275,84278,84280],{"class":230,"line":32815},[228,84276,84277],{"class":238},"        count: ",[228,84279,316],{"class":287},[228,84281,31581],{"class":238},[228,84283,84284,84287,84290],{"class":230,"line":32826},[228,84285,84286],{"class":238},"        spec: { color: ",[228,84288,84289],{"class":343},"'白色'",[228,84291,55719],{"class":238},[228,84293,84294],{"class":230,"line":32832},[228,84295,78007],{"class":238},[228,84297,84298],{"class":230,"line":32838},[228,84299,79501],{"class":238},[228,84301,84302,84304,84306],{"class":230,"line":32844},[228,84303,79506],{"class":238},[228,84305,79600],{"class":343},[228,84307,31581],{"class":238},[228,84309,84310,84312,84314],{"class":230,"line":32850},[228,84311,79516],{"class":238},[228,84313,79609],{"class":343},[228,84315,31581],{"class":238},[228,84317,84318,84320,84323],{"class":230,"line":32856},[228,84319,79526],{"class":238},[228,84321,84322],{"class":287},"109.8",[228,84324,31581],{"class":238},[228,84326,84327,84329,84331],{"class":230,"line":32862},[228,84328,79536],{"class":238},[228,84330,79627],{"class":343},[228,84332,31581],{"class":238},[228,84334,84335,84337,84339],{"class":230,"line":32868},[228,84336,84277],{"class":238},[228,84338,310],{"class":287},[228,84340,31581],{"class":238},[228,84342,84343,84346,84348,84350,84352],{"class":230,"line":32888},[228,84344,84345],{"class":238},"        spec: { size: ",[228,84347,82018],{"class":343},[228,84349,55579],{"class":238},[228,84351,82023],{"class":343},[228,84353,55719],{"class":238},[228,84355,84356],{"class":230,"line":32894},[228,84357,78007],{"class":238},[228,84359,84360],{"class":230,"line":32910},[228,84361,79501],{"class":238},[228,84363,84364,84366,84368],{"class":230,"line":32916},[228,84365,79506],{"class":238},[228,84367,79644],{"class":343},[228,84369,31581],{"class":238},[228,84371,84372,84374,84376],{"class":230,"line":32930},[228,84373,79516],{"class":238},[228,84375,79653],{"class":343},[228,84377,31581],{"class":238},[228,84379,84380,84382,84385],{"class":230,"line":32936},[228,84381,79526],{"class":238},[228,84383,84384],{"class":287},"488",[228,84386,31581],{"class":238},[228,84388,84389,84391,84393],{"class":230,"line":32951},[228,84390,79536],{"class":238},[228,84392,79671],{"class":343},[228,84394,31581],{"class":238},[228,84396,84397,84399,84401],{"class":230,"line":32957},[228,84398,84277],{"class":238},[228,84400,456],{"class":287},[228,84402,31581],{"class":238},[228,84404,84405,84407,84410,84413,84416],{"class":230,"line":32966},[228,84406,84286],{"class":238},[228,84408,84409],{"class":343},"'青色'",[228,84411,84412],{"class":238},", sum: ",[228,84414,84415],{"class":343},"'一大四小'",[228,84417,55719],{"class":238},[228,84419,84420],{"class":230,"line":32972},[228,84421,78007],{"class":238},[228,84423,84424],{"class":230,"line":32981},[228,84425,79501],{"class":238},[228,84427,84428,84430,84432],{"class":230,"line":32987},[228,84429,79506],{"class":238},[228,84431,79688],{"class":343},[228,84433,31581],{"class":238},[228,84435,84436,84438,84440],{"class":230,"line":32993},[228,84437,79516],{"class":238},[228,84439,79697],{"class":343},[228,84441,31581],{"class":238},[228,84443,84444,84446,84449],{"class":230,"line":33002},[228,84445,79526],{"class":238},[228,84447,84448],{"class":287},"139",[228,84450,31581],{"class":238},[228,84452,84453,84455,84457],{"class":230,"line":33008},[228,84454,79536],{"class":238},[228,84456,79715],{"class":343},[228,84458,31581],{"class":238},[228,84460,84461,84463,84465],{"class":230,"line":33019},[228,84462,84277],{"class":238},[228,84464,456],{"class":287},[228,84466,31581],{"class":238},[228,84468,84469,84471,84474,84476,84479],{"class":230,"line":33025},[228,84470,84345],{"class":238},[228,84472,84473],{"class":343},"'小号'",[228,84475,55579],{"class":238},[228,84477,84478],{"class":343},"'紫色'",[228,84480,55585],{"class":238},[228,84482,84483,84486],{"class":230,"line":33044},[228,84484,84485],{"class":238},"        gift: ",[228,84487,84488],{"class":343},"'50g茶叶,清洗球'\n",[228,84490,84491],{"class":230,"line":33050},[228,84492,52513],{"class":238},[228,84494,84495],{"class":230,"line":33061},[228,84496,53224],{"class":238},[228,84498,84499],{"class":230,"line":33067},[228,84500,84501],{"class":297},"    \u002F\u002F  1.根据数据渲染页面\n",[228,84503,84504,84506,84508,84510,84512,84514,84516,84518,84520,84522,84524,84526],{"class":230,"line":33087},[228,84505,52522],{"class":238},[228,84507,54514],{"class":2077},[228,84509,239],{"class":238},[228,84511,80016],{"class":343},[228,84513,74364],{"class":238},[228,84515,284],{"class":234},[228,84517,80163],{"class":238},[228,84519,74159],{"class":2077},[228,84521,239],{"class":238},[228,84523,79910],{"class":5331},[228,84525,79913],{"class":234},[228,84527,15687],{"class":238},[228,84529,84530],{"class":230,"line":33103},[228,84531,84532],{"class":297},"      \u002F\u002F 对象解构\n",[228,84534,84535,84537,84539,84541,84543,84545,84547,84550,84552,84554,84556,84559,84561,84564,84566,84568],{"class":230,"line":33109},[228,84536,58343],{"class":234},[228,84538,79922],{"class":238},[228,84540,79935],{"class":287},[228,84542,12550],{"class":238},[228,84544,79925],{"class":287},[228,84546,12550],{"class":238},[228,84548,84549],{"class":287},"count",[228,84551,12550],{"class":238},[228,84553,79930],{"class":287},[228,84555,12550],{"class":238},[228,84557,84558],{"class":287},"spec",[228,84560,12550],{"class":238},[228,84562,84563],{"class":287},"gift",[228,84565,79938],{"class":238},[228,84567,284],{"class":234},[228,84569,79943],{"class":238},[228,84571,84572],{"class":230,"line":33123},[228,84573,84574],{"class":297},"      \u002F\u002F 规格文字模块处理\n",[228,84576,84577,84579,84582,84584,84586,84588,84590,84592,84594,84596],{"class":230,"line":33129},[228,84578,58343],{"class":234},[228,84580,84581],{"class":287}," text",[228,84583,13679],{"class":234},[228,84585,82053],{"class":238},[228,84587,82056],{"class":2077},[228,84589,82059],{"class":238},[228,84591,74338],{"class":2077},[228,84593,239],{"class":238},[228,84595,82066],{"class":343},[228,84597,245],{"class":238},[228,84599,84600],{"class":230,"line":33135},[228,84601,84602],{"class":297},"      \u002F\u002F 处理赠品模块\n",[228,84604,84605,84607,84609,84611,84614,84616,84618,84620,84622,84625,84627,84629,84631,84633,84635,84638,84640,84643,84645,84647,84649,84651,84653,84655],{"class":230,"line":33146},[228,84606,58343],{"class":234},[228,84608,74034],{"class":287},[228,84610,13679],{"class":234},[228,84612,84613],{"class":238}," gift ",[228,84615,1224],{"class":234},[228,84617,83227],{"class":238},[228,84619,83230],{"class":2077},[228,84621,239],{"class":238},[228,84623,84624],{"class":343},"','",[228,84626,30941],{"class":238},[228,84628,74159],{"class":2077},[228,84630,239],{"class":238},[228,84632,79910],{"class":5331},[228,84634,79913],{"class":234},[228,84636,84637],{"class":343}," `\u003Cspan class=\"tag\">【赠品】${",[228,84639,79910],{"class":238},[228,84641,84642],{"class":343},"}\u003C\u002Fspan>`",[228,84644,30941],{"class":238},[228,84646,74338],{"class":2077},[228,84648,239],{"class":238},[228,84650,74343],{"class":343},[228,84652,13829],{"class":238},[228,84654,1097],{"class":234},[228,84656,70219],{"class":343},[228,84658,84659],{"class":230,"line":33152},[228,84660,84661],{"class":297},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[228,84663,84664,84666,84669,84671,84674,84676,84678,84680,84683,84685,84687,84689,84692,84694,84696],{"class":230,"line":33158},[228,84665,58343],{"class":234},[228,84667,84668],{"class":287}," subtotal",[228,84670,13679],{"class":234},[228,84672,84673],{"class":238}," ((price ",[228,84675,693],{"class":234},[228,84677,5869],{"class":287},[228,84679,6633],{"class":234},[228,84681,84682],{"class":238}," count) ",[228,84684,822],{"class":234},[228,84686,5869],{"class":287},[228,84688,30941],{"class":238},[228,84690,84691],{"class":2077},"toFixed",[228,84693,239],{"class":238},[228,84695,316],{"class":287},[228,84697,245],{"class":238},[228,84699,84700],{"class":230,"line":33168},[228,84701,2514],{"emptyLinePlaceholder":157},[228,84703,84704,84706],{"class":230,"line":33174},[228,84705,74097],{"class":234},[228,84707,70283],{"class":343},[228,84709,84710],{"class":230,"line":33185},[228,84711,84712],{"class":343},"        \u003Cdiv class=\"item\">\n",[228,84714,84715,84718,84720],{"class":230,"line":33191},[228,84716,84717],{"class":343},"          \u003Cimg src=\"${",[228,84719,79935],{"class":238},[228,84721,79967],{"class":343},[228,84723,84724,84727,84729,84732,84734],{"class":230,"line":33201},[228,84725,84726],{"class":343},"          \u003Cp class=\"name\">${",[228,84728,79925],{"class":238},[228,84730,84731],{"class":343},"}${",[228,84733,1413],{"class":238},[228,84735,79977],{"class":343},[228,84737,84738,84741,84743],{"class":230,"line":33206},[228,84739,84740],{"class":343},"          \u003Cp class=\"spec\">${",[228,84742,5302],{"class":238},[228,84744,79977],{"class":343},[228,84746,84747,84750,84752,84754,84756,84758,84760,84762],{"class":230,"line":33212},[228,84748,84749],{"class":343},"          \u003Cp class=\"price\">${",[228,84751,79930],{"class":238},[228,84753,796],{"class":343},[228,84755,84691],{"class":2077},[228,84757,239],{"class":343},[228,84759,316],{"class":287},[228,84761,667],{"class":343},[228,84763,79977],{"class":343},[228,84765,84766,84769,84771],{"class":230,"line":33261},[228,84767,84768],{"class":343},"          \u003Cp class=\"count\">x${",[228,84770,84549],{"class":238},[228,84772,79977],{"class":343},[228,84774,84775,84778,84781],{"class":230,"line":33308},[228,84776,84777],{"class":343},"          \u003Cp class=\"sub-total\">${",[228,84779,84780],{"class":238},"subtotal",[228,84782,79977],{"class":343},[228,84784,84785],{"class":230,"line":33313},[228,84786,84787],{"class":343},"        \u003C\u002Fdiv> \n",[228,84789,84790],{"class":230,"line":33319},[228,84791,84792],{"class":343},"             `\n",[228,84794,84795,84798,84800,84802,84804],{"class":230,"line":33338},[228,84796,84797],{"class":238},"    }).",[228,84799,74338],{"class":2077},[228,84801,239],{"class":238},[228,84803,74343],{"class":343},[228,84805,245],{"class":238},[228,84807,84808],{"class":230,"line":33344},[228,84809,84810],{"class":297},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[228,84812,84813,84815,84817,84819,84821,84824,84826,84829,84831,84833,84835,84838,84841,84843,84846,84848,84850,84852,84855,84857,84859,84861,84863],{"class":230,"line":33364},[228,84814,11336],{"class":234},[228,84816,62900],{"class":287},[228,84818,13679],{"class":234},[228,84820,80163],{"class":238},[228,84822,84823],{"class":2077},"reduce",[228,84825,2490],{"class":238},[228,84827,84828],{"class":5331},"prev",[228,84830,12550],{"class":238},[228,84832,79910],{"class":5331},[228,84834,13829],{"class":238},[228,84836,84837],{"class":234},"=>",[228,84839,84840],{"class":238}," prev ",[228,84842,719],{"class":234},[228,84844,84845],{"class":238}," (item.price ",[228,84847,693],{"class":234},[228,84849,5869],{"class":287},[228,84851,6633],{"class":234},[228,84853,84854],{"class":238}," item.count) ",[228,84856,822],{"class":234},[228,84858,5869],{"class":287},[228,84860,12550],{"class":238},[228,84862,430],{"class":287},[228,84864,245],{"class":238},[228,84866,84867,84869,84871,84873,84876,84878,84880,84883,84885,84887,84889],{"class":230,"line":33370},[228,84868,52522],{"class":238},[228,84870,54514],{"class":2077},[228,84872,239],{"class":238},[228,84874,84875],{"class":343},"'.amount'",[228,84877,74364],{"class":238},[228,84879,284],{"class":234},[228,84881,84882],{"class":238}," total.",[228,84884,84691],{"class":2077},[228,84886,239],{"class":238},[228,84888,316],{"class":287},[228,84890,245],{"class":238},[228,84892,84893,84895,84897],{"class":230,"line":33376},[228,84894,52532],{"class":238},[228,84896,51928],{"class":51415},[228,84898,51422],{"class":238},[228,84900,84901,84903,84905],{"class":230,"line":33386},[228,84902,51900],{"class":238},[228,84904,51915],{"class":51415},[228,84906,51422],{"class":238},[228,84908,84909],{"class":230,"line":33391},[228,84910,2514],{"emptyLinePlaceholder":157},[228,84912,84913,84915,84917],{"class":230,"line":33397},[228,84914,51900],{"class":238},[228,84916,50750],{"class":51415},[228,84918,51422],{"class":238},[14,84920,84922],{"id":84921},"_411-编程思想","4.11 编程思想",[200,84924,84926],{"id":84925},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,84928,84929,84932],{},[388,84930,84931],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,84934,84935],{},"调用就可以了",[19,84937,84938],{},[1576,84939],{"alt":141,"src":84940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[200,84942,84944],{"id":84943},"_4112-面向对象","4.11.2 面向对象",[19,84946,84947],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,84949,84950],{},[1576,84951],{"alt":141,"src":84952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,84954,84955],{},"面向对象的特性：",[1245,84957,84958,84961,84964],{},[186,84959,84960],{},"封装性",[186,84962,84963],{},"继承性",[186,84965,84966],{},"多态性",[200,84968,84970],{"id":84969},"_4113-两者比较","4.11.3 两者比较",[19,84972,84973],{},[1576,84974],{"alt":141,"src":84975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,84977,84979],{"id":84978},"_412-构造函数回顾","4.12 构造函数回顾",[19,84981,84982],{},[1576,84983],{"alt":141,"src":84984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,84986,84987],{},[1576,84988],{"alt":141,"src":84989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,84991,84992],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,84994,84995],{},[1576,84996],{"alt":141,"src":84997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,84999,85001],{"id":85000},"_413-原型","4.13 原型",[200,85003,85005],{"id":85004},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,85007,85008],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,85010,85011],{},[1576,85012],{"alt":141,"src":85013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,85015,85016],{},[1576,85017],{"alt":141,"src":85018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,85020,85021],{},"原型是构造函数的属性，它也是一个对象",[19,85023,85024],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,85026,85027],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[220,85029,85031],{"className":53182,"code":85030,"language":53184,"meta":141,"style":141},"\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",[30,85032,85033,85041,85046,85054,85059,85064,85069,85074,85079,85083,85087,85091,85096,85101,85105,85110,85115,85120,85125,85130,85134,85142],{"__ignoreMap":141},[228,85034,85035,85037,85039],{"class":230,"line":231},[228,85036,1148],{"class":238},[228,85038,51915],{"class":51415},[228,85040,51422],{"class":238},[228,85042,85043],{"class":230,"line":142},[228,85044,85045],{"class":297},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[228,85047,85048,85050,85052],{"class":230,"line":1293},[228,85049,52259],{"class":238},[228,85051,51928],{"class":51415},[228,85053,51422],{"class":238},[228,85055,85056],{"class":230,"line":1308},[228,85057,85058],{"class":238},"    function Star(uname, age) {\n",[228,85060,85061],{"class":230,"line":1314},[228,85062,85063],{"class":238},"      this.uname = uname,\n",[228,85065,85066],{"class":230,"line":1328},[228,85067,85068],{"class":238},"        this.age = age\n",[228,85070,85071],{"class":230,"line":1334},[228,85072,85073],{"class":238},"      \u002F\u002F this.sing = function () {\n",[228,85075,85076],{"class":230,"line":1425},[228,85077,85078],{"class":238},"      \u002F\u002F   console.log('唱歌')\n",[228,85080,85081],{"class":230,"line":1431},[228,85082,2514],{"emptyLinePlaceholder":157},[228,85084,85085],{"class":230,"line":1443},[228,85086,60152],{"class":238},[228,85088,85089],{"class":230,"line":1726},[228,85090,2301],{"class":238},[228,85092,85093],{"class":230,"line":1731},[228,85094,85095],{"class":238},"    Star.prototype.sing = function () {\n",[228,85097,85098],{"class":230,"line":1737},[228,85099,85100],{"class":238},"      console.log('唱歌')\n",[228,85102,85103],{"class":230,"line":1742},[228,85104,2301],{"class":238},[228,85106,85107],{"class":230,"line":1756},[228,85108,85109],{"class":238},"    \u002F\u002F console.dir(Star.prototype)\n",[228,85111,85112],{"class":230,"line":1761},[228,85113,85114],{"class":238},"    const pink = new Star('pink', 18)\n",[228,85116,85117],{"class":230,"line":1767},[228,85118,85119],{"class":238},"    const red = new Star('red', 20)\n",[228,85121,85122],{"class":230,"line":1788},[228,85123,85124],{"class":238},"    pink.sing()\n",[228,85126,85127],{"class":230,"line":1793},[228,85128,85129],{"class":238},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[228,85131,85132],{"class":230,"line":1807},[228,85133,2514],{"emptyLinePlaceholder":157},[228,85135,85136,85138,85140],{"class":230,"line":1812},[228,85137,52532],{"class":238},[228,85139,51928],{"class":51415},[228,85141,51422],{"class":238},[228,85143,85144,85146,85148],{"class":230,"line":1841},[228,85145,51900],{"class":238},[228,85147,51915],{"class":51415},[228,85149,51422],{"class":238},[19,85151,85152],{},[1576,85153],{"alt":141,"src":85154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[220,85156,85158],{"className":53182,"code":85157,"language":53184,"meta":141,"style":141},"\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",[30,85159,85160,85168,85176,85181,85186,85191,85196,85200,85205,85210,85215,85219,85224,85228,85232,85237,85241,85249],{"__ignoreMap":141},[228,85161,85162,85164,85166],{"class":230,"line":231},[228,85163,1148],{"class":238},[228,85165,51915],{"class":51415},[228,85167,51422],{"class":238},[228,85169,85170,85172,85174],{"class":230,"line":142},[228,85171,52259],{"class":238},[228,85173,51928],{"class":51415},[228,85175,51422],{"class":238},[228,85177,85178],{"class":230,"line":1293},[228,85179,85180],{"class":238},"    let that\n",[228,85182,85183],{"class":230,"line":1308},[228,85184,85185],{"class":238},"    function Star(uname) {\n",[228,85187,85188],{"class":230,"line":1314},[228,85189,85190],{"class":238},"      this.uname = uname\n",[228,85192,85193],{"class":230,"line":1328},[228,85194,85195],{"class":238},"      that = this\n",[228,85197,85198],{"class":230,"line":1334},[228,85199,2301],{"class":238},[228,85201,85202],{"class":230,"line":1425},[228,85203,85204],{"class":238},"    \u002F\u002F 实例对象是 ldh\n",[228,85206,85207],{"class":230,"line":1431},[228,85208,85209],{"class":238},"    const ldh = new Star('刘德华')\n",[228,85211,85212],{"class":230,"line":1443},[228,85213,85214],{"class":238},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[228,85216,85217],{"class":230,"line":1726},[228,85218,2514],{"emptyLinePlaceholder":157},[228,85220,85221],{"class":230,"line":1731},[228,85222,85223],{"class":238},"    Star.sing = function () {\n",[228,85225,85226],{"class":230,"line":1737},[228,85227,85100],{"class":238},[228,85229,85230],{"class":230,"line":1742},[228,85231,2301],{"class":238},[228,85233,85234],{"class":230,"line":1756},[228,85235,85236],{"class":238},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[228,85238,85239],{"class":230,"line":1761},[228,85240,2514],{"emptyLinePlaceholder":157},[228,85242,85243,85245,85247],{"class":230,"line":1767},[228,85244,52532],{"class":238},[228,85246,51928],{"class":51415},[228,85248,51422],{"class":238},[228,85250,85251,85253,85255],{"class":230,"line":1788},[228,85252,51900],{"class":238},[228,85254,51915],{"class":51415},[228,85256,51422],{"class":238},[19,85258,85259],{},"构造函数的this指向的是实例对象；",[19,85261,85262],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[200,85264,85266],{"id":85265},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,85268,85269],{},[1576,85270],{"alt":141,"src":85271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[220,85273,85275],{"className":53182,"code":85274,"language":53184,"meta":141,"style":141},"\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",[30,85276,85277,85285,85293,85298,85303,85308,85313,85318,85323,85328,85333,85338,85343,85347,85352,85357,85362,85367,85371,85376,85381,85386,85391,85395,85400,85405,85410,85415,85419,85424,85428,85436],{"__ignoreMap":141},[228,85278,85279,85281,85283],{"class":230,"line":231},[228,85280,1148],{"class":238},[228,85282,51915],{"class":51415},[228,85284,51422],{"class":238},[228,85286,85287,85289,85291],{"class":230,"line":142},[228,85288,52259],{"class":238},[228,85290,51928],{"class":51415},[228,85292,51422],{"class":238},[228,85294,85295],{"class":230,"line":1293},[228,85296,85297],{"class":238},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[228,85299,85300],{"class":230,"line":1308},[228,85301,85302],{"class":238},"    const arr = [1, 2, 3]\n",[228,85304,85305],{"class":230,"line":1314},[228,85306,85307],{"class":238},"    \u002F\u002F 自己定义数组的扩展方法\n",[228,85309,85310],{"class":230,"line":1328},[228,85311,85312],{"class":238},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[228,85314,85315],{"class":230,"line":1334},[228,85316,85317],{"class":238},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[228,85319,85320],{"class":230,"line":1425},[228,85321,85322],{"class":238},"    \u002F\u002F ①.最大值\n",[228,85324,85325],{"class":230,"line":1431},[228,85326,85327],{"class":238},"    Array.prototype.max = function () {\n",[228,85329,85330],{"class":230,"line":1443},[228,85331,85332],{"class":238},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[228,85334,85335],{"class":230,"line":1726},[228,85336,85337],{"class":238},"      return Math.max(...this)\n",[228,85339,85340],{"class":230,"line":1731},[228,85341,85342],{"class":238},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[228,85344,85345],{"class":230,"line":1737},[228,85346,2301],{"class":238},[228,85348,85349],{"class":230,"line":1742},[228,85350,85351],{"class":238},"    console.log(arr.max())\n",[228,85353,85354],{"class":230,"line":1756},[228,85355,85356],{"class":238},"    \u002F\u002F ②最小值\n",[228,85358,85359],{"class":230,"line":1761},[228,85360,85361],{"class":238},"    Array.prototype.min = function () {\n",[228,85363,85364],{"class":230,"line":1767},[228,85365,85366],{"class":238},"      return Math.min(...this)\n",[228,85368,85369],{"class":230,"line":1788},[228,85370,2301],{"class":238},[228,85372,85373],{"class":230,"line":1793},[228,85374,85375],{"class":238},"    console.log(arr.min())\n",[228,85377,85378],{"class":230,"line":1807},[228,85379,85380],{"class":238},"    \u002F\u002F③求和\n",[228,85382,85383],{"class":230,"line":1812},[228,85384,85385],{"class":238},"    Array.prototype.sum = function () {\n",[228,85387,85388],{"class":230,"line":1841},[228,85389,85390],{"class":238},"      return this.reduce((prev, current) => prev + current, 0)\n",[228,85392,85393],{"class":230,"line":1846},[228,85394,2301],{"class":238},[228,85396,85397],{"class":230,"line":1863},[228,85398,85399],{"class":238},"    console.log(arr.sum())\n",[228,85401,85402],{"class":230,"line":1868},[228,85403,85404],{"class":238},"    \u002F\u002F ③排序\n",[228,85406,85407],{"class":230,"line":1873},[228,85408,85409],{"class":238},"    Array.prototype.rever = function () {\n",[228,85411,85412],{"class":230,"line":1878},[228,85413,85414],{"class":238},"      return this.reverse()\n",[228,85416,85417],{"class":230,"line":1892},[228,85418,2301],{"class":238},[228,85420,85421],{"class":230,"line":1897},[228,85422,85423],{"class":238},"    console.log(arr.rever())\n",[228,85425,85426],{"class":230,"line":2691},[228,85427,2514],{"emptyLinePlaceholder":157},[228,85429,85430,85432,85434],{"class":230,"line":2705},[228,85431,52532],{"class":238},[228,85433,51928],{"class":51415},[228,85435,51422],{"class":238},[228,85437,85438,85440,85442],{"class":230,"line":2713},[228,85439,51900],{"class":238},[228,85441,51915],{"class":51415},[228,85443,51422],{"class":238},[19,85445,85446],{},[1576,85447],{"alt":141,"src":85448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[200,85450,85452],{"id":85451},"_4133-constructor-属性","4.13.3 constructor 属性",[19,85454,85455],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,85457,85458],{},[1576,85459],{"alt":141,"src":85460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[220,85462,85464],{"className":53182,"code":85463,"language":53184,"meta":141,"style":141},"\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",[30,85465,85466,85474,85482,85487,85492,85496,85501,85506,85511,85519],{"__ignoreMap":141},[228,85467,85468,85470,85472],{"class":230,"line":231},[228,85469,1148],{"class":238},[228,85471,51915],{"class":51415},[228,85473,51422],{"class":238},[228,85475,85476,85478,85480],{"class":230,"line":142},[228,85477,52259],{"class":238},[228,85479,51928],{"class":51415},[228,85481,51422],{"class":238},[228,85483,85484],{"class":230,"line":1293},[228,85485,85486],{"class":238},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[228,85488,85489],{"class":230,"line":1308},[228,85490,85491],{"class":238},"    function Star() {\n",[228,85493,85494],{"class":230,"line":1314},[228,85495,2301],{"class":238},[228,85497,85498],{"class":230,"line":1328},[228,85499,85500],{"class":238},"    const ldh = new Star()\n",[228,85502,85503],{"class":230,"line":1334},[228,85504,85505],{"class":238},"    console.log(Star.prototype)\n",[228,85507,85508],{"class":230,"line":1425},[228,85509,85510],{"class":238},"    console.log(Star.prototype.constructor === Star)\n",[228,85512,85513,85515,85517],{"class":230,"line":1431},[228,85514,52532],{"class":238},[228,85516,51928],{"class":51415},[228,85518,51422],{"class":238},[228,85520,85521,85523,85525],{"class":230,"line":1443},[228,85522,51900],{"class":238},[228,85524,51915],{"class":51415},[228,85526,51422],{"class":238},[19,85528,85529],{},[1576,85530],{"alt":141,"src":85531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,85533,85534],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[220,85536,85538],{"className":53182,"code":85537,"language":53184,"meta":141,"style":141},"  \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",[30,85539,85540,85548,85552,85556,85560,85565,85570,85575,85579,85584,85589,85594,85599,85604,85609,85613,85617,85622,85627,85632,85636,85641,85646,85650,85654,85658],{"__ignoreMap":141},[228,85541,85542,85544,85546],{"class":230,"line":231},[228,85543,52259],{"class":238},[228,85545,51928],{"class":51415},[228,85547,51422],{"class":238},[228,85549,85550],{"class":230,"line":142},[228,85551,85486],{"class":238},[228,85553,85554],{"class":230,"line":1293},[228,85555,85491],{"class":238},[228,85557,85558],{"class":230,"line":1308},[228,85559,2301],{"class":238},[228,85561,85562],{"class":230,"line":1314},[228,85563,85564],{"class":238},"    \u002F\u002F const ldh = new Star()\n",[228,85566,85567],{"class":230,"line":1328},[228,85568,85569],{"class":238},"    \u002F\u002F console.log(Star.prototype)\n",[228,85571,85572],{"class":230,"line":1334},[228,85573,85574],{"class":238},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[228,85576,85577],{"class":230,"line":1425},[228,85578,2514],{"emptyLinePlaceholder":157},[228,85580,85581],{"class":230,"line":1431},[228,85582,85583],{"class":238},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[228,85585,85586],{"class":230,"line":1443},[228,85587,85588],{"class":238},"    \u002F\u002F Star.prototype.sing = function () {\n",[228,85590,85591],{"class":230,"line":1726},[228,85592,85593],{"class":238},"    \u002F\u002F   console.log('唱歌')\n",[228,85595,85596],{"class":230,"line":1731},[228,85597,85598],{"class":238},"    \u002F\u002F }\n",[228,85600,85601],{"class":230,"line":1737},[228,85602,85603],{"class":238},"    \u002F\u002F Star.prototype.dance = function () {\n",[228,85605,85606],{"class":230,"line":1742},[228,85607,85608],{"class":238},"    \u002F\u002F   console.log('跳舞')\n",[228,85610,85611],{"class":230,"line":1756},[228,85612,85598],{"class":238},[228,85614,85615],{"class":230,"line":1761},[228,85616,85505],{"class":238},[228,85618,85619],{"class":230,"line":1767},[228,85620,85621],{"class":238},"    Star.prototype = {\n",[228,85623,85624],{"class":230,"line":1788},[228,85625,85626],{"class":238},"      sing: function () {\n",[228,85628,85629],{"class":230,"line":1793},[228,85630,85631],{"class":238},"        console.log('唱歌')\n",[228,85633,85634],{"class":230,"line":1807},[228,85635,78007],{"class":238},[228,85637,85638],{"class":230,"line":1812},[228,85639,85640],{"class":238},"      dance: function () {\n",[228,85642,85643],{"class":230,"line":1841},[228,85644,85645],{"class":238},"        console.log('跳舞')\n",[228,85647,85648],{"class":230,"line":1846},[228,85649,52513],{"class":238},[228,85651,85652],{"class":230,"line":1863},[228,85653,2301],{"class":238},[228,85655,85656],{"class":230,"line":1868},[228,85657,85505],{"class":238},[228,85659,85660,85662,85664],{"class":230,"line":1873},[228,85661,52532],{"class":238},[228,85663,51928],{"class":51415},[228,85665,51422],{"class":238},[19,85667,85668],{},"进行输出结果后会发现：",[19,85670,85671],{},[1576,85672],{"alt":141,"src":85673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,85675,85676],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,85678,85679],{},"所以，要重新指回创造这个原型对象的构造函数",[220,85681,85683],{"className":71328,"code":85682,"language":71330,"meta":141,"style":141},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[30,85684,85685,85699,85704,85709,85720,85733,85738,85749,85763,85767],{"__ignoreMap":141},[228,85686,85687,85690,85692,85695,85697],{"class":230,"line":231},[228,85688,85689],{"class":287},"Star",[228,85691,796],{"class":238},[228,85693,85694],{"class":287},"prototype",[228,85696,13679],{"class":234},[228,85698,15687],{"class":238},[228,85700,85701],{"class":230,"line":142},[228,85702,85703],{"class":297},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[228,85705,85706],{"class":230,"line":1293},[228,85707,85708],{"class":238},"  constructor: Star,\n",[228,85710,85711,85714,85716,85718],{"class":230,"line":1308},[228,85712,85713],{"class":2077},"  sing",[228,85715,51552],{"class":238},[228,85717,54564],{"class":234},[228,85719,54567],{"class":238},[228,85721,85722,85724,85726,85728,85731],{"class":230,"line":1314},[228,85723,73868],{"class":238},[228,85725,58362],{"class":2077},[228,85727,239],{"class":238},[228,85729,85730],{"class":343},"'唱歌'",[228,85732,245],{"class":238},[228,85734,85735],{"class":230,"line":1328},[228,85736,85737],{"class":238},"   },\n",[228,85739,85740,85743,85745,85747],{"class":230,"line":1334},[228,85741,85742],{"class":2077},"   dance",[228,85744,51552],{"class":238},[228,85746,54564],{"class":234},[228,85748,54567],{"class":238},[228,85750,85751,85754,85756,85758,85761],{"class":230,"line":1425},[228,85752,85753],{"class":238},"     console.",[228,85755,58362],{"class":2077},[228,85757,239],{"class":238},[228,85759,85760],{"class":343},"'跳舞'",[228,85762,245],{"class":238},[228,85764,85765],{"class":230,"line":1431},[228,85766,4423],{"class":238},[228,85768,85769],{"class":230,"line":1443},[228,85770,1679],{"class":238},[19,85772,85773],{},[1576,85774],{"alt":141,"src":85775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,85777,85778],{},"总结1：",[19,85780,85781],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,85783,85784],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,85786,85787],{},"constructor指的是他的来源",[19,85789,85790],{},[1576,85791],{"alt":141,"src":85792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,85794,85795],{},[1576,85796],{"alt":141,"src":85797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,85799,85800],{},"总结2：",[19,85802,85803],{},[1576,85804],{"alt":141,"src":85805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,85807,85808],{},[1576,85809],{"alt":141,"src":85810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,85812,85813],{},[1576,85814],{"alt":141,"src":85815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[200,85817,85819],{"id":85818},"_4134-对象原型","4.13.4 对象原型",[19,85821,85822],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,85824,85825],{},"对象原型就是__proto__这个属性",[19,85827,85828],{},[1576,85829],{"alt":141,"src":85830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,85832,85833],{},[1576,85834],{"alt":141,"src":85835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,85837,85838],{},[1576,85839],{"alt":141,"src":85840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,85842,85843],{},[1576,85844],{"alt":141,"src":85845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[220,85847,85849],{"className":53182,"code":85848,"language":53184,"meta":141,"style":141},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[30,85850,85851,85859,85867,85871,85875,85879,85884,85892],{"__ignoreMap":141},[228,85852,85853,85855,85857],{"class":230,"line":231},[228,85854,1148],{"class":238},[228,85856,51915],{"class":51415},[228,85858,51422],{"class":238},[228,85860,85861,85863,85865],{"class":230,"line":142},[228,85862,52259],{"class":238},[228,85864,51928],{"class":51415},[228,85866,51422],{"class":238},[228,85868,85869],{"class":230,"line":1293},[228,85870,85491],{"class":238},[228,85872,85873],{"class":230,"line":1308},[228,85874,2301],{"class":238},[228,85876,85877],{"class":230,"line":1314},[228,85878,85500],{"class":238},[228,85880,85881],{"class":230,"line":1328},[228,85882,85883],{"class":238},"    console.log(ldh)\n",[228,85885,85886,85888,85890],{"class":230,"line":1334},[228,85887,52532],{"class":238},[228,85889,51928],{"class":51415},[228,85891,51422],{"class":238},[228,85893,85894,85896,85898],{"class":230,"line":1425},[228,85895,51900],{"class":238},[228,85897,51915],{"class":51415},[228,85899,51422],{"class":238},[19,85901,85902],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,85904,85905],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,85907,85908],{},[1576,85909],{"alt":141,"src":85910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,85912,85913],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,85915,85916],{},"对象原型指向原型对象",[19,85918,85919],{},[1576,85920],{"alt":141,"src":85921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,85923,85924],{},[1576,85925],{"alt":141,"src":85926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,85928,85929],{},[1576,85930],{"alt":141,"src":85931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[200,85933,85935],{"id":85934},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,85937,85938],{},[1576,85939],{"alt":141,"src":85940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[183,85942,85943,85946,85949,85952],{},[186,85944,85945],{},"构造函数通过new的形式实例化得到实例对象",[186,85947,85948],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[186,85950,85951],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[186,85953,85954],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,85956,85957],{},[1576,85958],{"alt":141,"src":85959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,85961,85962],{},"题目梳理：",[19,85964,85965],{},[1576,85966],{"alt":141,"src":85967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[200,85969,85971],{"id":85970},"_4136-原型继承","4.13.6 原型继承",[19,85973,85974],{},[1576,85975],{"alt":141,"src":85976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,85978,85979],{},[1576,85980],{"alt":141,"src":85981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,85983,85984],{},[1576,85985],{"alt":141,"src":85986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,85988,85989],{},[1576,85990],{"alt":141,"src":85991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,85993,85994],{},[1576,85995],{"alt":141,"src":85996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,85998,85999],{},[1576,86000],{"alt":141,"src":86001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,86003,86004],{},[1576,86005],{"alt":141,"src":86006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,86008,86009],{},[1576,86010],{"alt":141,"src":86011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,86013,86014],{},"回顾：构造函数每次new得到对象都是不同的",[200,86016,86018],{"id":86017},"_4137-原型链","4.13.7 原型链",[19,86020,86021],{},[1576,86022],{"alt":141,"src":86023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,86025,86026],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,86028,86029],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,86031,86032],{},"大哥是Object",[19,86034,86035],{},[1576,86036],{"alt":141,"src":86037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,86039,86040],{},[1576,86041],{"alt":141,"src":86042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,86044,86045],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,86047,86048],{},"万物皆对象",[200,86050,86052],{"id":86051},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,86054,86055],{},"模态框",[19,86057,86058],{},"以后遇见这个效果直接使用这个就行",[19,86060,86061],{},[1576,86062],{"alt":141,"src":86063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,86065,86066],{},[1576,86067],{"alt":141,"src":86068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,86070,86071],{},[1576,86072],{"alt":141,"src":86073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,86075,86076],{},[1576,86077],{"alt":141,"src":86078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,86080,86081],{},"补充知识点：",[183,86083,86084],{},[186,86085,86086],{},"append()",[19,86088,86089],{},[1576,86090],{"alt":141,"src":86091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[220,86093,86095],{"className":50748,"code":86094,"language":50750,"meta":141,"style":141},"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",[30,86096,86097,86102,86107,86112,86116,86120,86124,86129,86134,86139,86143],{"__ignoreMap":141},[228,86098,86099],{"class":230,"line":231},[228,86100,86101],{"class":238},"append(param1)\n",[228,86103,86104],{"class":230,"line":142},[228,86105,86106],{"class":238},"append(param1, param2)\n",[228,86108,86109],{"class":230,"line":1293},[228,86110,86111],{"class":238},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[228,86113,86114],{"class":230,"line":1308},[228,86115,2514],{"emptyLinePlaceholder":157},[228,86117,86118],{"class":230,"line":1314},[228,86119,2514],{"emptyLinePlaceholder":157},[228,86121,86122],{"class":230,"line":1328},[228,86123,2514],{"emptyLinePlaceholder":157},[228,86125,86126],{"class":230,"line":1334},[228,86127,86128],{"class":238},"let div = document.createElement(\"div\");\n",[228,86130,86131],{"class":230,"line":1425},[228,86132,86133],{"class":238},"let p = document.createElement(\"p\");\n",[228,86135,86136],{"class":230,"line":1431},[228,86137,86138],{"class":238},"div.append(p);\n",[228,86140,86141],{"class":230,"line":1443},[228,86142,2514],{"emptyLinePlaceholder":157},[228,86144,86145,86148,86150],{"class":230,"line":1726},[228,86146,86147],{"class":238},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[228,86149,19],{"class":51415},[228,86151,86152],{"class":238},"> ]\n",[183,86154,86155],{"start":142},[186,86156,86157],{},"remove()",[19,86159,86160],{},"自己删自己",[19,86162,86163],{},[1576,86164],{"alt":141,"src":86165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[220,86167,86169],{"className":50748,"code":86168,"language":50750,"meta":141,"style":141},"\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",[30,86170,86171,86181,86195,86199,86207,86221,86241,86253,86261,86268,86280,86293,86328,86340,86351,86363,86375,86387,86414,86424,86428,86432,86441,86453,86467,86477,86489,86493,86497,86507,86518,86528,86538,86551,86564,86574,86578,86582,86591,86601,86613,86617,86621,86630,86640,86650,86662,86666,86670,86680,86696,86707,86717,86727,86739,86751,86763,86767,86771,86784,86795,86799,86807,86815,86819,86827,86847,86867,86875,86880,86906,86911,86916,86935,86940,86952,86957,86968,86978,86988,86993,86998,87002,87007,87012,87017,87037,87042,87062,87067,87081,87086,87091,87096,87112,87116,87121,87150,87155,87160,87165,87176,87180,87184,87188,87193,87218,87223,87248,87253,87262,87266,87271,87296,87300,87325,87329,87338,87342,87347,87365,87375,87379,87387,87395,87399],{"__ignoreMap":141},[228,86172,86173,86175,86177,86179],{"class":230,"line":231},[228,86174,51412],{"class":238},[228,86176,51416],{"class":51415},[228,86178,51419],{"class":2077},[228,86180,51422],{"class":238},[228,86182,86183,86185,86187,86189,86191,86193],{"class":230,"line":142},[228,86184,1148],{"class":238},[228,86186,50750],{"class":51415},[228,86188,51431],{"class":2077},[228,86190,284],{"class":238},[228,86192,51436],{"class":343},[228,86194,51422],{"class":238},[228,86196,86197],{"class":230,"line":1293},[228,86198,2514],{"emptyLinePlaceholder":157},[228,86200,86201,86203,86205],{"class":230,"line":1308},[228,86202,1148],{"class":238},[228,86204,51449],{"class":51415},[228,86206,51422],{"class":238},[228,86208,86209,86211,86213,86215,86217,86219],{"class":230,"line":1314},[228,86210,52259],{"class":238},[228,86212,51459],{"class":51415},[228,86214,51462],{"class":2077},[228,86216,284],{"class":238},[228,86218,51467],{"class":343},[228,86220,51422],{"class":238},[228,86222,86223,86225,86227,86229,86231,86233,86235,86237,86239],{"class":230,"line":1328},[228,86224,52259],{"class":238},[228,86226,51459],{"class":51415},[228,86228,15035],{"class":2077},[228,86230,284],{"class":238},[228,86232,51506],{"class":343},[228,86234,51486],{"class":2077},[228,86236,284],{"class":238},[228,86238,51513],{"class":343},[228,86240,51422],{"class":238},[228,86242,86243,86245,86247,86249,86251],{"class":230,"line":1334},[228,86244,52259],{"class":238},[228,86246,51522],{"class":51415},[228,86248,51525],{"class":238},[228,86250,51522],{"class":51415},[228,86252,51422],{"class":238},[228,86254,86255,86257,86259],{"class":230,"line":1425},[228,86256,52259],{"class":238},[228,86258,5241],{"class":51415},[228,86260,51422],{"class":238},[228,86262,86263,86266],{"class":230,"line":1431},[228,86264,86265],{"class":2077},"    .modal",[228,86267,15687],{"class":238},[228,86269,86270,86272,86274,86276,86278],{"class":230,"line":1443},[228,86271,54886],{"class":287},[228,86273,51552],{"class":238},[228,86275,4087],{"class":287},[228,86277,51607],{"class":234},[228,86279,1404],{"class":238},[228,86281,86282,86285,86287,86289,86291],{"class":230,"line":1726},[228,86283,86284],{"class":287},"      min-height",[228,86286,51552],{"class":238},[228,86288,549],{"class":287},[228,86290,51607],{"class":234},[228,86292,1404],{"class":238},[228,86294,86295,86297,86299,86301,86303,86305,86307,86309,86311,86313,86315,86317,86319,86321,86323,86326],{"class":230,"line":1731},[228,86296,78865],{"class":287},[228,86298,51552],{"class":238},[228,86300,430],{"class":287},[228,86302,4207],{"class":287},[228,86304,2152],{"class":287},[228,86306,51607],{"class":234},[228,86308,78882],{"class":287},[228,86310,239],{"class":238},[228,86312,430],{"class":287},[228,86314,12550],{"class":238},[228,86316,430],{"class":287},[228,86318,12550],{"class":238},[228,86320,430],{"class":287},[228,86322,12550],{"class":238},[228,86324,86325],{"class":287},"0.1",[228,86327,2833],{"class":238},[228,86329,86330,86332,86334,86336,86338],{"class":230,"line":1737},[228,86331,55249],{"class":287},[228,86333,51552],{"class":238},[228,86335,531],{"class":287},[228,86337,51607],{"class":234},[228,86339,1404],{"class":238},[228,86341,86342,86344,86346,86349],{"class":230,"line":1742},[228,86343,54874],{"class":287},[228,86345,51552],{"class":238},[228,86347,86348],{"class":287},"fixed",[228,86350,1404],{"class":238},[228,86352,86353,86356,86358,86361],{"class":230,"line":1756},[228,86354,86355],{"class":287},"      z-index",[228,86357,51552],{"class":238},[228,86359,86360],{"class":287},"999",[228,86362,1404],{"class":238},[228,86364,86365,86367,86369,86371,86373],{"class":230,"line":1761},[228,86366,54953],{"class":287},[228,86368,51552],{"class":238},[228,86370,894],{"class":287},[228,86372,566],{"class":234},[228,86374,1404],{"class":238},[228,86376,86377,86379,86381,86383,86385],{"class":230,"line":1767},[228,86378,55062],{"class":287},[228,86380,51552],{"class":238},[228,86382,894],{"class":287},[228,86384,566],{"class":234},[228,86386,1404],{"class":238},[228,86388,86389,86391,86393,86395,86397,86400,86402,86404,86406,86408,86410,86412],{"class":230,"line":1788},[228,86390,78906],{"class":287},[228,86392,51552],{"class":238},[228,86394,78911],{"class":287},[228,86396,239],{"class":238},[228,86398,86399],{"class":287},"-50",[228,86401,566],{"class":234},[228,86403,12550],{"class":238},[228,86405,86399],{"class":287},[228,86407,566],{"class":234},[228,86409,12550],{"class":238},[228,86411,430],{"class":287},[228,86413,2833],{"class":238},[228,86415,86416,86418,86420,86422],{"class":230,"line":1793},[228,86417,54999],{"class":287},[228,86419,51552],{"class":238},[228,86421,60957],{"class":287},[228,86423,1404],{"class":238},[228,86425,86426],{"class":230,"line":1807},[228,86427,2301],{"class":238},[228,86429,86430],{"class":230,"line":1812},[228,86431,2514],{"emptyLinePlaceholder":157},[228,86433,86434,86436,86439],{"class":230,"line":1841},[228,86435,86265],{"class":2077},[228,86437,86438],{"class":2077}," .header",[228,86440,15687],{"class":238},[228,86442,86443,86445,86447,86449,86451],{"class":230,"line":1846},[228,86444,57474],{"class":287},[228,86446,51552],{"class":238},[228,86448,639],{"class":287},[228,86450,51607],{"class":234},[228,86452,1404],{"class":238},[228,86454,86455,86457,86459,86461,86463,86465],{"class":230,"line":1863},[228,86456,54810],{"class":287},[228,86458,51552],{"class":238},[228,86460,430],{"class":287},[228,86462,2152],{"class":287},[228,86464,51607],{"class":234},[228,86466,1404],{"class":238},[228,86468,86469,86471,86473,86475],{"class":230,"line":1868},[228,86470,54874],{"class":287},[228,86472,51552],{"class":238},[228,86474,54879],{"class":287},[228,86476,1404],{"class":238},[228,86478,86479,86481,86483,86485,86487],{"class":230,"line":1873},[228,86480,55037],{"class":287},[228,86482,51552],{"class":238},[228,86484,938],{"class":287},[228,86486,51607],{"class":234},[228,86488,1404],{"class":238},[228,86490,86491],{"class":230,"line":1878},[228,86492,2301],{"class":238},[228,86494,86495],{"class":230,"line":1892},[228,86496,2514],{"emptyLinePlaceholder":157},[228,86498,86499,86501,86503,86505],{"class":230,"line":1897},[228,86500,86265],{"class":2077},[228,86502,86438],{"class":2077},[228,86504,3146],{"class":51415},[228,86506,15687],{"class":238},[228,86508,86509,86512,86514,86516],{"class":230,"line":2691},[228,86510,86511],{"class":287},"      font-style",[228,86513,51552],{"class":238},[228,86515,63956],{"class":287},[228,86517,1404],{"class":238},[228,86519,86520,86522,86524,86526],{"class":230,"line":2705},[228,86521,57531],{"class":287},[228,86523,51552],{"class":238},[228,86525,62185],{"class":287},[228,86527,1404],{"class":238},[228,86529,86530,86532,86534,86536],{"class":230,"line":2713},[228,86531,54874],{"class":287},[228,86533,51552],{"class":238},[228,86535,54946],{"class":287},[228,86537,1404],{"class":238},[228,86539,86540,86543,86545,86547,86549],{"class":230,"line":2718},[228,86541,86542],{"class":287},"      right",[228,86544,51552],{"class":238},[228,86546,813],{"class":287},[228,86548,51607],{"class":234},[228,86550,1404],{"class":238},[228,86552,86553,86555,86557,86560,86562],{"class":230,"line":2724},[228,86554,55062],{"class":287},[228,86556,51552],{"class":238},[228,86558,86559],{"class":287},"-2",[228,86561,51607],{"class":234},[228,86563,1404],{"class":238},[228,86565,86566,86568,86570,86572],{"class":230,"line":2730},[228,86567,62140],{"class":287},[228,86569,51552],{"class":238},[228,86571,62145],{"class":287},[228,86573,1404],{"class":238},[228,86575,86576],{"class":230,"line":2735},[228,86577,2301],{"class":238},[228,86579,86580],{"class":230,"line":8063},[228,86581,2514],{"emptyLinePlaceholder":157},[228,86583,86584,86586,86589],{"class":230,"line":8087},[228,86585,86265],{"class":2077},[228,86587,86588],{"class":2077}," .body",[228,86590,15687],{"class":238},[228,86592,86593,86595,86597,86599],{"class":230,"line":8092},[228,86594,57401],{"class":287},[228,86596,51552],{"class":238},[228,86598,51707],{"class":287},[228,86600,1404],{"class":238},[228,86602,86603,86605,86607,86609,86611],{"class":230,"line":8098},[228,86604,54810],{"class":287},[228,86606,51552],{"class":238},[228,86608,684],{"class":287},[228,86610,51607],{"class":234},[228,86612,1404],{"class":238},[228,86614,86615],{"class":230,"line":8125},[228,86616,2301],{"class":238},[228,86618,86619],{"class":230,"line":8130},[228,86620,2514],{"emptyLinePlaceholder":157},[228,86622,86623,86625,86628],{"class":230,"line":8136},[228,86624,86265],{"class":2077},[228,86626,86627],{"class":2077}," .footer",[228,86629,15687],{"class":238},[228,86631,86632,86634,86636,86638],{"class":230,"line":8148},[228,86633,55124],{"class":287},[228,86635,51552],{"class":238},[228,86637,51592],{"class":287},[228,86639,1404],{"class":238},[228,86641,86642,86644,86646,86648],{"class":230,"line":8160},[228,86643,55135],{"class":287},[228,86645,51552],{"class":238},[228,86647,51695],{"class":287},[228,86649,1404],{"class":238},[228,86651,86652,86654,86656,86658,86660],{"class":230,"line":8172},[228,86653,54810],{"class":287},[228,86655,51552],{"class":238},[228,86657,684],{"class":287},[228,86659,51607],{"class":234},[228,86661,1404],{"class":238},[228,86663,86664],{"class":230,"line":9831},[228,86665,2301],{"class":238},[228,86667,86668],{"class":230,"line":9856},[228,86669,2514],{"emptyLinePlaceholder":157},[228,86671,86672,86674,86676,86678],{"class":230,"line":9879},[228,86673,86265],{"class":2077},[228,86675,86627],{"class":2077},[228,86677,1512],{"class":51415},[228,86679,15687],{"class":238},[228,86681,86682,86684,86686,86688,86690,86692,86694],{"class":230,"line":9903},[228,86683,54810],{"class":287},[228,86685,51552],{"class":238},[228,86687,310],{"class":287},[228,86689,51607],{"class":234},[228,86691,2197],{"class":287},[228,86693,51607],{"class":234},[228,86695,1404],{"class":238},[228,86697,86698,86700,86702,86705],{"class":230,"line":9908},[228,86699,61836],{"class":287},[228,86701,51552],{"class":238},[228,86703,86704],{"class":287},"#ccc",[228,86706,1404],{"class":238},[228,86708,86709,86711,86713,86715],{"class":230,"line":9913},[228,86710,64085],{"class":287},[228,86712,51552],{"class":238},[228,86714,54852],{"class":287},[228,86716,1404],{"class":238},[228,86718,86719,86721,86723,86725],{"class":230,"line":9918},[228,86720,57531],{"class":287},[228,86722,51552],{"class":238},[228,86724,60957],{"class":287},[228,86726,1404],{"class":238},[228,86728,86729,86731,86733,86735,86737],{"class":230,"line":9927},[228,86730,55249],{"class":287},[228,86732,51552],{"class":238},[228,86734,316],{"class":287},[228,86736,51607],{"class":234},[228,86738,1404],{"class":238},[228,86740,86741,86743,86745,86747,86749],{"class":230,"line":9932},[228,86742,61865],{"class":287},[228,86744,51552],{"class":238},[228,86746,684],{"class":287},[228,86748,51607],{"class":234},[228,86750,1404],{"class":238},[228,86752,86753,86755,86757,86759,86761],{"class":230,"line":9938},[228,86754,55037],{"class":287},[228,86756,51552],{"class":238},[228,86758,787],{"class":287},[228,86760,51607],{"class":234},[228,86762,1404],{"class":238},[228,86764,86765],{"class":230,"line":9959},[228,86766,2301],{"class":238},[228,86768,86769],{"class":230,"line":9965},[228,86770,2514],{"emptyLinePlaceholder":157},[228,86772,86773,86775,86777,86779,86782],{"class":230,"line":9979},[228,86774,86265],{"class":2077},[228,86776,86627],{"class":2077},[228,86778,1512],{"class":51415},[228,86780,86781],{"class":2077},".submit",[228,86783,15687],{"class":238},[228,86785,86786,86788,86790,86793],{"class":230,"line":9985},[228,86787,54999],{"class":287},[228,86789,51552],{"class":238},[228,86791,86792],{"class":287},"#369",[228,86794,1404],{"class":238},[228,86796,86797],{"class":230,"line":10012},[228,86798,2301],{"class":238},[228,86800,86801,86803,86805],{"class":230,"line":10021},[228,86802,52532],{"class":238},[228,86804,5241],{"class":51415},[228,86806,51422],{"class":238},[228,86808,86809,86811,86813],{"class":230,"line":10027},[228,86810,51900],{"class":238},[228,86812,51449],{"class":51415},[228,86814,51422],{"class":238},[228,86816,86817],{"class":230,"line":10035},[228,86818,2514],{"emptyLinePlaceholder":157},[228,86820,86821,86823,86825],{"class":230,"line":10040},[228,86822,1148],{"class":238},[228,86824,51915],{"class":51415},[228,86826,51422],{"class":238},[228,86828,86829,86831,86833,86835,86837,86840,86843,86845],{"class":230,"line":16719},[228,86830,52259],{"class":238},[228,86832,54002],{"class":51415},[228,86834,15074],{"class":2077},[228,86836,284],{"class":238},[228,86838,86839],{"class":343},"\"delete\"",[228,86841,86842],{"class":238},">删除\u003C\u002F",[228,86844,54002],{"class":51415},[228,86846,51422],{"class":238},[228,86848,86849,86851,86853,86855,86857,86860,86863,86865],{"class":230,"line":16725},[228,86850,52259],{"class":238},[228,86852,54002],{"class":51415},[228,86854,15074],{"class":2077},[228,86856,284],{"class":238},[228,86858,86859],{"class":343},"\"login\"",[228,86861,86862],{"class":238},">登录\u003C\u002F",[228,86864,54002],{"class":51415},[228,86866,51422],{"class":238},[228,86868,86869,86871,86873],{"class":230,"line":16748},[228,86870,52259],{"class":238},[228,86872,51928],{"class":51415},[228,86874,51422],{"class":238},[228,86876,86877],{"class":230,"line":16754},[228,86878,86879],{"class":297},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[228,86881,86882,86884,86887,86889,86891,86893,86895,86897,86900,86902,86904],{"class":230,"line":16777},[228,86883,70199],{"class":234},[228,86885,86886],{"class":2077}," Modal",[228,86888,239],{"class":238},[228,86890,51522],{"class":5331},[228,86892,13679],{"class":234},[228,86894,70045],{"class":343},[228,86896,12550],{"class":238},[228,86898,86899],{"class":5331},"message",[228,86901,13679],{"class":234},[228,86903,70045],{"class":343},[228,86905,12557],{"class":238},[228,86907,86908],{"class":230,"line":16791},[228,86909,86910],{"class":297},"      \u002F\u002F 创建Model 模态框盒子\n",[228,86912,86913],{"class":230,"line":16811},[228,86914,86915],{"class":297},"      \u002F\u002F 1.1 创建div标签\n",[228,86917,86918,86920,86923,86925,86927,86929,86931,86933],{"class":230,"line":16817},[228,86919,70166],{"class":287},[228,86921,86922],{"class":238},".modalBox ",[228,86924,284],{"class":234},[228,86926,54511],{"class":238},[228,86928,70266],{"class":2077},[228,86930,239],{"class":238},[228,86932,82046],{"class":343},[228,86934,245],{"class":238},[228,86936,86937],{"class":230,"line":16828},[228,86938,86939],{"class":297},"      \u002F\u002F 1.2 给div 添加类名为model\n",[228,86941,86942,86944,86947,86949],{"class":230,"line":16851},[228,86943,70166],{"class":287},[228,86945,86946],{"class":238},".modalBox.className ",[228,86948,284],{"class":234},[228,86950,86951],{"class":343}," 'modal'\n",[228,86953,86954],{"class":230,"line":16873},[228,86955,86956],{"class":297},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[228,86958,86959,86961,86964,86966],{"class":230,"line":16878},[228,86960,70166],{"class":287},[228,86962,86963],{"class":238},".modalBox.innerHTML ",[228,86965,284],{"class":234},[228,86967,70283],{"class":343},[228,86969,86970,86973,86975],{"class":230,"line":16884},[228,86971,86972],{"class":343},"        \u003Cdiv class=\"header\">${",[228,86974,51522],{"class":238},[228,86976,86977],{"class":343},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[228,86979,86980,86983,86985],{"class":230,"line":16898},[228,86981,86982],{"class":343},"        \u003Cdiv class=\"body\">${",[228,86984,86899],{"class":238},[228,86986,86987],{"class":343},"}\u003C\u002Fdiv>\n",[228,86989,86990],{"class":230,"line":16911},[228,86991,86992],{"class":343},"      `\n",[228,86994,86995],{"class":230,"line":16916},[228,86996,86997],{"class":297},"      \u002F\u002F console.log(this.modalBox)\n",[228,86999,87000],{"class":230,"line":16930},[228,87001,2301],{"class":238},[228,87003,87004],{"class":230,"line":16935},[228,87005,87006],{"class":297},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[228,87008,87009],{"class":230,"line":16941},[228,87010,87011],{"class":297},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[228,87013,87014],{"class":230,"line":16946},[228,87015,87016],{"class":297},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[228,87018,87019,87022,87024,87026,87028,87031,87033,87035],{"class":230,"line":16960},[228,87020,87021],{"class":287},"    Modal",[228,87023,796],{"class":238},[228,87025,85694],{"class":287},[228,87027,796],{"class":238},[228,87029,87030],{"class":2077},"open",[228,87032,13679],{"class":234},[228,87034,59033],{"class":234},[228,87036,54567],{"class":238},[228,87038,87039],{"class":230,"line":16965},[228,87040,87041],{"class":297},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[228,87043,87044,87046,87049,87051,87053,87055,87057,87060],{"class":230,"line":16970},[228,87045,58343],{"class":234},[228,87047,87048],{"class":287}," box",[228,87050,13679],{"class":234},[228,87052,54511],{"class":238},[228,87054,54514],{"class":2077},[228,87056,239],{"class":238},[228,87058,87059],{"class":343},"'.modal'",[228,87061,245],{"class":238},[228,87063,87064],{"class":230,"line":16984},[228,87065,87066],{"class":297},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[228,87068,87069,87072,87074,87077,87079],{"class":230,"line":16996},[228,87070,87071],{"class":238},"      box ",[228,87073,1829],{"class":234},[228,87075,87076],{"class":238}," box.",[228,87078,57121],{"class":2077},[228,87080,2090],{"class":238},[228,87082,87083],{"class":230,"line":17001},[228,87084,87085],{"class":297},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[228,87087,87088],{"class":230,"line":17014},[228,87089,87090],{"class":297},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[228,87092,87093],{"class":230,"line":17019},[228,87094,87095],{"class":297},"      \u002F\u002F append可以增加对象\n",[228,87097,87098,87101,87104,87106,87109],{"class":230,"line":17024},[228,87099,87100],{"class":238},"      document.body.",[228,87102,87103],{"class":2077},"append",[228,87105,239],{"class":238},[228,87107,87108],{"class":287},"this",[228,87110,87111],{"class":238},".modalBox)\n",[228,87113,87114],{"class":230,"line":17029},[228,87115,2514],{"emptyLinePlaceholder":157},[228,87117,87118],{"class":230,"line":17042},[228,87119,87120],{"class":297},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[228,87122,87123,87125,87128,87130,87132,87135,87137,87139,87141,87143,87146,87148],{"class":230,"line":17047},[228,87124,70166],{"class":287},[228,87126,87127],{"class":238},".modalBox.",[228,87129,54514],{"class":2077},[228,87131,239],{"class":238},[228,87133,87134],{"class":343},"'i'",[228,87136,30941],{"class":238},[228,87138,57928],{"class":2077},[228,87140,239],{"class":238},[228,87142,57933],{"class":343},[228,87144,87145],{"class":238},", () ",[228,87147,84837],{"class":234},[228,87149,15687],{"class":238},[228,87151,87152],{"class":230,"line":32748},[228,87153,87154],{"class":297},"        \u002F\u002F 这个地方需要用到箭头函数\n",[228,87156,87157],{"class":230,"line":32754},[228,87158,87159],{"class":297},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[228,87161,87162],{"class":230,"line":32760},[228,87163,87164],{"class":297},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[228,87166,87167,87169,87171,87174],{"class":230,"line":32766},[228,87168,64841],{"class":287},[228,87170,796],{"class":238},[228,87172,87173],{"class":2077},"close",[228,87175,2090],{"class":238},[228,87177,87178],{"class":230,"line":32772},[228,87179,64930],{"class":238},[228,87181,87182],{"class":230,"line":32783},[228,87183,2301],{"class":238},[228,87185,87186],{"class":230,"line":32789},[228,87187,2514],{"emptyLinePlaceholder":157},[228,87189,87190],{"class":230,"line":32809},[228,87191,87192],{"class":297},"    \u002F\u002F 测试一下 点击 删除按钮\n",[228,87194,87195,87197,87199,87201,87204,87206,87208,87210,87212,87214,87216],{"class":230,"line":32815},[228,87196,52522],{"class":238},[228,87198,54514],{"class":2077},[228,87200,239],{"class":238},[228,87202,87203],{"class":343},"'#delete'",[228,87205,30941],{"class":238},[228,87207,57928],{"class":2077},[228,87209,239],{"class":238},[228,87211,57933],{"class":343},[228,87213,87145],{"class":238},[228,87215,84837],{"class":234},[228,87217,15687],{"class":238},[228,87219,87220],{"class":230,"line":32826},[228,87221,87222],{"class":297},"      \u002F\u002F 先调用Model构造函数\n",[228,87224,87225,87227,87230,87232,87234,87236,87238,87241,87243,87246],{"class":230,"line":32832},[228,87226,58343],{"class":234},[228,87228,87229],{"class":287}," del",[228,87231,13679],{"class":234},[228,87233,11693],{"class":234},[228,87235,86886],{"class":2077},[228,87237,239],{"class":238},[228,87239,87240],{"class":343},"'温馨的提示'",[228,87242,12550],{"class":238},[228,87244,87245],{"class":343},"'您没有删除权限操作'",[228,87247,245],{"class":238},[228,87249,87250],{"class":230,"line":32838},[228,87251,87252],{"class":297},"      \u002F\u002F 实例对象调用open方法\n",[228,87254,87255,87258,87260],{"class":230,"line":32844},[228,87256,87257],{"class":238},"      del.",[228,87259,87030],{"class":2077},[228,87261,2090],{"class":238},[228,87263,87264],{"class":230,"line":32850},[228,87265,33576],{"class":238},[228,87267,87268],{"class":230,"line":32856},[228,87269,87270],{"class":297},"    \u002F\u002F 测试一下 点击 登录按钮\n",[228,87272,87273,87275,87277,87279,87282,87284,87286,87288,87290,87292,87294],{"class":230,"line":32862},[228,87274,52522],{"class":238},[228,87276,54514],{"class":2077},[228,87278,239],{"class":238},[228,87280,87281],{"class":343},"'#login'",[228,87283,30941],{"class":238},[228,87285,57928],{"class":2077},[228,87287,239],{"class":238},[228,87289,57933],{"class":343},[228,87291,87145],{"class":238},[228,87293,84837],{"class":234},[228,87295,15687],{"class":238},[228,87297,87298],{"class":230,"line":32868},[228,87299,87222],{"class":297},[228,87301,87302,87304,87307,87309,87311,87313,87315,87318,87320,87323],{"class":230,"line":32888},[228,87303,58343],{"class":234},[228,87305,87306],{"class":287}," log",[228,87308,13679],{"class":234},[228,87310,11693],{"class":234},[228,87312,86886],{"class":2077},[228,87314,239],{"class":238},[228,87316,87317],{"class":343},"'友情提示'",[228,87319,12550],{"class":238},[228,87321,87322],{"class":343},"'您还没有登录呢'",[228,87324,245],{"class":238},[228,87326,87327],{"class":230,"line":32894},[228,87328,87252],{"class":297},[228,87330,87331,87334,87336],{"class":230,"line":32910},[228,87332,87333],{"class":238},"      log.",[228,87335,87030],{"class":2077},[228,87337,2090],{"class":238},[228,87339,87340],{"class":230,"line":32916},[228,87341,33576],{"class":238},[228,87343,87344],{"class":230,"line":32930},[228,87345,87346],{"class":297},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[228,87348,87349,87351,87353,87355,87357,87359,87361,87363],{"class":230,"line":32936},[228,87350,87021],{"class":287},[228,87352,796],{"class":238},[228,87354,85694],{"class":287},[228,87356,796],{"class":238},[228,87358,87173],{"class":2077},[228,87360,13679],{"class":234},[228,87362,59033],{"class":234},[228,87364,54567],{"class":238},[228,87366,87367,87369,87371,87373],{"class":230,"line":32951},[228,87368,70166],{"class":287},[228,87370,87127],{"class":238},[228,87372,57121],{"class":2077},[228,87374,2090],{"class":238},[228,87376,87377],{"class":230,"line":32957},[228,87378,2301],{"class":238},[228,87380,87381,87383,87385],{"class":230,"line":32966},[228,87382,52532],{"class":238},[228,87384,51928],{"class":51415},[228,87386,51422],{"class":238},[228,87388,87389,87391,87393],{"class":230,"line":32972},[228,87390,51900],{"class":238},[228,87392,51915],{"class":51415},[228,87394,51422],{"class":238},[228,87396,87397],{"class":230,"line":32981},[228,87398,2514],{"emptyLinePlaceholder":157},[228,87400,87401,87403,87405],{"class":230,"line":32987},[228,87402,51900],{"class":238},[228,87404,50750],{"class":51415},[228,87406,51422],{"class":238},[19,87408,87409],{},[1576,87410],{"alt":141,"src":87411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,87413,87415],{"id":87414},"_414-深浅拷贝","4.14 深浅拷贝",[200,87417,87419],{"id":87418},"_4141-浅拷贝","4.14.1 浅拷贝",[19,87421,87422],{},[1576,87423],{"alt":141,"src":87424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,87426,87427],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,87429,87430],{},[1576,87431],{"alt":141,"src":87432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,87434,87435],{},[1576,87436],{"alt":141,"src":87437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,87439,87440],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,87442,87443],{},[1576,87444],{"alt":141,"src":87445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,87447,11447],{},[19,87449,87450],{},[1576,87451],{"alt":141,"src":87452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[200,87454,87456],{"id":87455},"_4142-深拷贝","4.14.2 深拷贝",[19,87458,87459],{},"深拷贝：拷贝的是对象，不是地址",[19,87461,87462],{},"常用的三种方法：",[183,87464,87465,87468,87471],{},[186,87466,87467],{},"通过递归实现深拷贝",[186,87469,87470],{},"lodash\u002FcloneDeep",[186,87472,87473],{},"通过JSON.stringify()实现",[22113,87475,87477],{"id":87476},"_41421-递归函数","4.14.2.1 递归函数",[19,87479,87480],{},[1576,87481],{"alt":141,"src":87482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[183,87484,87485],{},[186,87486,87487],{},"死递归占溢出：",[220,87489,87491],{"className":53182,"code":87490,"language":53184,"meta":141,"style":141},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[30,87492,87493,87501,87509,87513,87518,87522,87527,87535],{"__ignoreMap":141},[228,87494,87495,87497,87499],{"class":230,"line":231},[228,87496,1148],{"class":238},[228,87498,51915],{"class":51415},[228,87500,51422],{"class":238},[228,87502,87503,87505,87507],{"class":230,"line":142},[228,87504,52259],{"class":238},[228,87506,51928],{"class":51415},[228,87508,51422],{"class":238},[228,87510,87511],{"class":230,"line":1293},[228,87512,77258],{"class":238},[228,87514,87515],{"class":230,"line":1308},[228,87516,87517],{"class":238},"      fn()\n",[228,87519,87520],{"class":230,"line":1314},[228,87521,2301],{"class":238},[228,87523,87524],{"class":230,"line":1328},[228,87525,87526],{"class":238},"    fn()\n",[228,87528,87529,87531,87533],{"class":230,"line":1334},[228,87530,52532],{"class":238},[228,87532,51928],{"class":51415},[228,87534,51422],{"class":238},[228,87536,87537,87539,87541],{"class":230,"line":1425},[228,87538,51900],{"class":238},[228,87540,51915],{"class":51415},[228,87542,51422],{"class":238},[183,87544,87545],{"start":142},[186,87546,87547],{},"递归函数要加判断条件：",[19,87549,87550],{},[1576,87551],{"alt":141,"src":87552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[183,87554,87555],{"start":1293},[186,87556,87557],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[220,87559,87561],{"className":50748,"code":87560,"language":50750,"meta":141,"style":141},"\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",[30,87562,87563,87573,87587,87591,87599,87613,87633,87645,87653,87657,87665,87677,87685,87693,87718,87730,87734,87741,87749,87757,87761],{"__ignoreMap":141},[228,87564,87565,87567,87569,87571],{"class":230,"line":231},[228,87566,51412],{"class":238},[228,87568,51416],{"class":51415},[228,87570,51419],{"class":2077},[228,87572,51422],{"class":238},[228,87574,87575,87577,87579,87581,87583,87585],{"class":230,"line":142},[228,87576,1148],{"class":238},[228,87578,50750],{"class":51415},[228,87580,51431],{"class":2077},[228,87582,284],{"class":238},[228,87584,51436],{"class":343},[228,87586,51422],{"class":238},[228,87588,87589],{"class":230,"line":1293},[228,87590,2514],{"emptyLinePlaceholder":157},[228,87592,87593,87595,87597],{"class":230,"line":1308},[228,87594,1148],{"class":238},[228,87596,51449],{"class":51415},[228,87598,51422],{"class":238},[228,87600,87601,87603,87605,87607,87609,87611],{"class":230,"line":1314},[228,87602,52259],{"class":238},[228,87604,51459],{"class":51415},[228,87606,51462],{"class":2077},[228,87608,284],{"class":238},[228,87610,51467],{"class":343},[228,87612,51422],{"class":238},[228,87614,87615,87617,87619,87621,87623,87625,87627,87629,87631],{"class":230,"line":1328},[228,87616,52259],{"class":238},[228,87618,51459],{"class":51415},[228,87620,15035],{"class":2077},[228,87622,284],{"class":238},[228,87624,51506],{"class":343},[228,87626,51486],{"class":2077},[228,87628,284],{"class":238},[228,87630,51513],{"class":343},[228,87632,51422],{"class":238},[228,87634,87635,87637,87639,87641,87643],{"class":230,"line":1334},[228,87636,52259],{"class":238},[228,87638,51522],{"class":51415},[228,87640,51525],{"class":238},[228,87642,51522],{"class":51415},[228,87644,51422],{"class":238},[228,87646,87647,87649,87651],{"class":230,"line":1425},[228,87648,51900],{"class":238},[228,87650,51449],{"class":51415},[228,87652,51422],{"class":238},[228,87654,87655],{"class":230,"line":1431},[228,87656,2514],{"emptyLinePlaceholder":157},[228,87658,87659,87661,87663],{"class":230,"line":1443},[228,87660,1148],{"class":238},[228,87662,51915],{"class":51415},[228,87664,51422],{"class":238},[228,87666,87667,87669,87671,87673,87675],{"class":230,"line":1726},[228,87668,52259],{"class":238},[228,87670,51726],{"class":51415},[228,87672,55429],{"class":238},[228,87674,51726],{"class":51415},[228,87676,51422],{"class":238},[228,87678,87679,87681,87683],{"class":230,"line":1731},[228,87680,52259],{"class":238},[228,87682,51928],{"class":51415},[228,87684,51422],{"class":238},[228,87686,87687,87689,87691],{"class":230,"line":1737},[228,87688,70199],{"class":234},[228,87690,73888],{"class":2077},[228,87692,10968],{"class":238},[228,87694,87695,87697,87699,87701,87703,87705,87707,87709,87711,87713,87716],{"class":230,"line":1742},[228,87696,55886],{"class":238},[228,87698,54514],{"class":2077},[228,87700,239],{"class":238},[228,87702,82046],{"class":343},[228,87704,74364],{"class":238},[228,87706,284],{"class":234},[228,87708,11693],{"class":234},[228,87710,73904],{"class":2077},[228,87712,17376],{"class":238},[228,87714,87715],{"class":2077},"toLocaleString",[228,87717,2090],{"class":238},[228,87719,87720,87723,87726,87728],{"class":230,"line":1756},[228,87721,87722],{"class":2077},"      setTimeout",[228,87724,87725],{"class":238},"(getTime, ",[228,87727,6525],{"class":287},[228,87729,245],{"class":238},[228,87731,87732],{"class":230,"line":1761},[228,87733,2301],{"class":238},[228,87735,87736,87739],{"class":230,"line":1767},[228,87737,87738],{"class":2077},"    getTime",[228,87740,2090],{"class":238},[228,87742,87743,87745,87747],{"class":230,"line":1788},[228,87744,52532],{"class":238},[228,87746,51928],{"class":51415},[228,87748,51422],{"class":238},[228,87750,87751,87753,87755],{"class":230,"line":1793},[228,87752,51900],{"class":238},[228,87754,51915],{"class":51415},[228,87756,51422],{"class":238},[228,87758,87759],{"class":230,"line":1807},[228,87760,2514],{"emptyLinePlaceholder":157},[228,87762,87763,87765,87767],{"class":230,"line":1812},[228,87764,51900],{"class":238},[228,87766,50750],{"class":51415},[228,87768,51422],{"class":238},[19,87770,87771],{},[1576,87772],{"alt":141,"src":87773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[183,87775,87776],{"start":1308},[186,87777,87467],{},[19,87779,87780],{},[1576,87781],{"alt":141,"src":87782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,87784,87785],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,87787,39304],{},[19,87789,87790],{},"这个是简易版的递归函数深拷贝",[19,87792,87793],{},"一定要注意先数组再对象，因为万物皆可对象",[220,87795,87797],{"className":50748,"code":87796,"language":50750,"meta":141,"style":141},"\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",[30,87798,87799,87809,87823,87827,87835,87849,87869,87881,87889,87893,87901,87909,87919,87928,87936,87952,87956,87964,87968,87972,87984,87989,88008,88024,88029,88034,88039,88054,88059,88064,88073,88081,88098,88106,88112,88120,88125,88130,88139,88143,88147,88151,88162,88171,88181,88195,88205,88213,88221,88229,88233],{"__ignoreMap":141},[228,87800,87801,87803,87805,87807],{"class":230,"line":231},[228,87802,51412],{"class":238},[228,87804,51416],{"class":51415},[228,87806,51419],{"class":2077},[228,87808,51422],{"class":238},[228,87810,87811,87813,87815,87817,87819,87821],{"class":230,"line":142},[228,87812,1148],{"class":238},[228,87814,50750],{"class":51415},[228,87816,51431],{"class":2077},[228,87818,284],{"class":238},[228,87820,51436],{"class":343},[228,87822,51422],{"class":238},[228,87824,87825],{"class":230,"line":1293},[228,87826,2514],{"emptyLinePlaceholder":157},[228,87828,87829,87831,87833],{"class":230,"line":1308},[228,87830,1148],{"class":238},[228,87832,51449],{"class":51415},[228,87834,51422],{"class":238},[228,87836,87837,87839,87841,87843,87845,87847],{"class":230,"line":1314},[228,87838,52259],{"class":238},[228,87840,51459],{"class":51415},[228,87842,51462],{"class":2077},[228,87844,284],{"class":238},[228,87846,51467],{"class":343},[228,87848,51422],{"class":238},[228,87850,87851,87853,87855,87857,87859,87861,87863,87865,87867],{"class":230,"line":1328},[228,87852,52259],{"class":238},[228,87854,51459],{"class":51415},[228,87856,15035],{"class":2077},[228,87858,284],{"class":238},[228,87860,51506],{"class":343},[228,87862,51486],{"class":2077},[228,87864,284],{"class":238},[228,87866,51513],{"class":343},[228,87868,51422],{"class":238},[228,87870,87871,87873,87875,87877,87879],{"class":230,"line":1334},[228,87872,52259],{"class":238},[228,87874,51522],{"class":51415},[228,87876,51525],{"class":238},[228,87878,51522],{"class":51415},[228,87880,51422],{"class":238},[228,87882,87883,87885,87887],{"class":230,"line":1425},[228,87884,51900],{"class":238},[228,87886,51449],{"class":51415},[228,87888,51422],{"class":238},[228,87890,87891],{"class":230,"line":1431},[228,87892,2514],{"emptyLinePlaceholder":157},[228,87894,87895,87897,87899],{"class":230,"line":1443},[228,87896,1148],{"class":238},[228,87898,51915],{"class":51415},[228,87900,51422],{"class":238},[228,87902,87903,87905,87907],{"class":230,"line":1726},[228,87904,52259],{"class":238},[228,87906,51928],{"class":51415},[228,87908,51422],{"class":238},[228,87910,87911,87913,87915,87917],{"class":230,"line":1731},[228,87912,11336],{"class":234},[228,87914,70086],{"class":287},[228,87916,13679],{"class":234},[228,87918,15687],{"class":238},[228,87920,87921,87923,87926],{"class":230,"line":1737},[228,87922,71731],{"class":238},[228,87924,87925],{"class":343},"'pink'",[228,87927,31581],{"class":238},[228,87929,87930,87932,87934],{"class":230,"line":1742},[228,87931,71741],{"class":238},[228,87933,888],{"class":287},[228,87935,31581],{"class":238},[228,87937,87938,87941,87944,87946,87949],{"class":230,"line":1756},[228,87939,87940],{"class":238},"      hobby: [",[228,87942,87943],{"class":343},"'乒乓球'",[228,87945,12550],{"class":238},[228,87947,87948],{"class":343},"'足球'",[228,87950,87951],{"class":238},"],\n",[228,87953,87954],{"class":230,"line":1761},[228,87955,77987],{"class":238},[228,87957,87958,87961],{"class":230,"line":1767},[228,87959,87960],{"class":238},"        baby: ",[228,87962,87963],{"class":343},"'小pink'\n",[228,87965,87966],{"class":230,"line":1788},[228,87967,52513],{"class":238},[228,87969,87970],{"class":230,"line":1793},[228,87971,2301],{"class":238},[228,87973,87974,87976,87979,87981],{"class":230,"line":1807},[228,87975,11336],{"class":234},[228,87977,87978],{"class":287}," o",[228,87980,13679],{"class":234},[228,87982,87983],{"class":238}," {}\n",[228,87985,87986],{"class":230,"line":1812},[228,87987,87988],{"class":297},"    \u002F\u002F 拷贝函数\n",[228,87990,87991,87993,87996,87998,88001,88003,88006],{"class":230,"line":1841},[228,87992,70199],{"class":234},[228,87994,87995],{"class":2077}," deepCopy",[228,87997,239],{"class":238},[228,87999,88000],{"class":5331},"newObj",[228,88002,12550],{"class":238},[228,88004,88005],{"class":5331},"oldObj",[228,88007,12557],{"class":238},[228,88009,88010,88012,88014,88016,88019,88021],{"class":230,"line":1846},[228,88011,52399],{"class":234},[228,88013,1772],{"class":238},[228,88015,51962],{"class":234},[228,88017,88018],{"class":238}," k ",[228,88020,26159],{"class":234},[228,88022,88023],{"class":238}," oldObj) {\n",[228,88025,88026],{"class":230,"line":1863},[228,88027,88028],{"class":297},"        \u002F\u002F 处理数组的问题\n",[228,88030,88031],{"class":230,"line":1868},[228,88032,88033],{"class":297},"        \u002F\u002F 判断是否属于数组\n",[228,88035,88036],{"class":230,"line":1873},[228,88037,88038],{"class":297},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[228,88040,88041,88043,88046,88049,88052],{"class":230,"line":1878},[228,88042,2611],{"class":234},[228,88044,88045],{"class":238}," (oldObj[k] ",[228,88047,88048],{"class":234},"instanceof",[228,88050,88051],{"class":2077}," Array",[228,88053,12557],{"class":238},[228,88055,88056],{"class":230,"line":1892},[228,88057,88058],{"class":297},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[228,88060,88061],{"class":230,"line":1897},[228,88062,88063],{"class":297},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[228,88065,88066,88069,88071],{"class":230,"line":2691},[228,88067,88068],{"class":238},"          newObj[k] ",[228,88070,284],{"class":234},[228,88072,51953],{"class":238},[228,88074,88075,88078],{"class":230,"line":2705},[228,88076,88077],{"class":2077},"          deepCopy",[228,88079,88080],{"class":238},"(newObj[k], oldObj[k])\n",[228,88082,88083,88085,88087,88089,88091,88093,88096],{"class":230,"line":2713},[228,88084,80195],{"class":238},[228,88086,1815],{"class":234},[228,88088,1818],{"class":234},[228,88090,88045],{"class":238},[228,88092,88048],{"class":234},[228,88094,88095],{"class":2077}," Object",[228,88097,12557],{"class":238},[228,88099,88100,88102,88104],{"class":230,"line":2718},[228,88101,88068],{"class":238},[228,88103,284],{"class":234},[228,88105,87983],{"class":238},[228,88107,88108,88110],{"class":230,"line":2724},[228,88109,88077],{"class":2077},[228,88111,88080],{"class":238},[228,88113,88114,88116,88118],{"class":230,"line":2730},[228,88115,80195],{"class":238},[228,88117,1815],{"class":234},[228,88119,15687],{"class":238},[228,88121,88122],{"class":230,"line":2735},[228,88123,88124],{"class":297},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[228,88126,88127],{"class":230,"line":8063},[228,88128,88129],{"class":297},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[228,88131,88132,88134,88136],{"class":230,"line":8087},[228,88133,88068],{"class":238},[228,88135,284],{"class":234},[228,88137,88138],{"class":238}," oldObj[k]\n",[228,88140,88141],{"class":230,"line":8092},[228,88142,2643],{"class":238},[228,88144,88145],{"class":230,"line":8098},[228,88146,52513],{"class":238},[228,88148,88149],{"class":230,"line":8125},[228,88150,2301],{"class":238},[228,88152,88153,88156,88159],{"class":230,"line":8130},[228,88154,88155],{"class":2077},"    deepCopy",[228,88157,88158],{"class":238},"(o, obj) ",[228,88160,88161],{"class":297},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[228,88163,88164,88166,88168],{"class":230,"line":8136},[228,88165,73868],{"class":238},[228,88167,58362],{"class":2077},[228,88169,88170],{"class":238},"(o)\n",[228,88172,88173,88176,88178],{"class":230,"line":8148},[228,88174,88175],{"class":238},"    o.age ",[228,88177,284],{"class":234},[228,88179,88180],{"class":287}," 20\n",[228,88182,88183,88186,88188,88190,88192],{"class":230,"line":8160},[228,88184,88185],{"class":238},"    o.hobby[",[228,88187,430],{"class":287},[228,88189,4557],{"class":238},[228,88191,284],{"class":234},[228,88193,88194],{"class":343}," '篮球'\n",[228,88196,88197,88200,88202],{"class":230,"line":8172},[228,88198,88199],{"class":238},"    o.family ",[228,88201,284],{"class":234},[228,88203,88204],{"class":343}," '老pink'\n",[228,88206,88207,88209,88211],{"class":230,"line":9831},[228,88208,73868],{"class":238},[228,88210,58362],{"class":2077},[228,88212,70151],{"class":238},[228,88214,88215,88217,88219],{"class":230,"line":9856},[228,88216,52532],{"class":238},[228,88218,51928],{"class":51415},[228,88220,51422],{"class":238},[228,88222,88223,88225,88227],{"class":230,"line":9879},[228,88224,51900],{"class":238},[228,88226,51915],{"class":51415},[228,88228,51422],{"class":238},[228,88230,88231],{"class":230,"line":9903},[228,88232,2514],{"emptyLinePlaceholder":157},[228,88234,88235,88237,88239],{"class":230,"line":9908},[228,88236,51900],{"class":238},[228,88238,50750],{"class":51415},[228,88240,51422],{"class":238},[19,88242,88243],{},[1576,88244],{"alt":141,"src":88245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22113,88247,88249,88250],{"id":88248},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[388,88251,88252],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,88254,88255],{},[476,88256,88257],{"href":88257,"rel":88258},"https:\u002F\u002Fwww.lodashjs.com\u002F",[23980],[19,88260,88261],{},"lodash里边的方法都要加上一个下划线_",[19,88263,88264],{},"_.cloneDeep()",[220,88266,88268],{"className":50748,"code":88267,"language":50750,"meta":141,"style":141},"\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",[30,88269,88270,88280,88294,88298,88306,88320,88340,88352,88360,88364,88372,88377,88396,88404,88414,88422,88430,88442,88446,88452,88456,88460,88476,88484,88493,88501,88509,88517,88521],{"__ignoreMap":141},[228,88271,88272,88274,88276,88278],{"class":230,"line":231},[228,88273,51412],{"class":238},[228,88275,51416],{"class":51415},[228,88277,51419],{"class":2077},[228,88279,51422],{"class":238},[228,88281,88282,88284,88286,88288,88290,88292],{"class":230,"line":142},[228,88283,1148],{"class":238},[228,88285,50750],{"class":51415},[228,88287,51431],{"class":2077},[228,88289,284],{"class":238},[228,88291,51436],{"class":343},[228,88293,51422],{"class":238},[228,88295,88296],{"class":230,"line":1293},[228,88297,2514],{"emptyLinePlaceholder":157},[228,88299,88300,88302,88304],{"class":230,"line":1308},[228,88301,1148],{"class":238},[228,88303,51449],{"class":51415},[228,88305,51422],{"class":238},[228,88307,88308,88310,88312,88314,88316,88318],{"class":230,"line":1314},[228,88309,52259],{"class":238},[228,88311,51459],{"class":51415},[228,88313,51462],{"class":2077},[228,88315,284],{"class":238},[228,88317,51467],{"class":343},[228,88319,51422],{"class":238},[228,88321,88322,88324,88326,88328,88330,88332,88334,88336,88338],{"class":230,"line":1328},[228,88323,52259],{"class":238},[228,88325,51459],{"class":51415},[228,88327,15035],{"class":2077},[228,88329,284],{"class":238},[228,88331,51506],{"class":343},[228,88333,51486],{"class":2077},[228,88335,284],{"class":238},[228,88337,51513],{"class":343},[228,88339,51422],{"class":238},[228,88341,88342,88344,88346,88348,88350],{"class":230,"line":1334},[228,88343,52259],{"class":238},[228,88345,51522],{"class":51415},[228,88347,51525],{"class":238},[228,88349,51522],{"class":51415},[228,88351,51422],{"class":238},[228,88353,88354,88356,88358],{"class":230,"line":1425},[228,88355,51900],{"class":238},[228,88357,51449],{"class":51415},[228,88359,51422],{"class":238},[228,88361,88362],{"class":230,"line":1431},[228,88363,2514],{"emptyLinePlaceholder":157},[228,88365,88366,88368,88370],{"class":230,"line":1443},[228,88367,1148],{"class":238},[228,88369,51915],{"class":51415},[228,88371,51422],{"class":238},[228,88373,88374],{"class":230,"line":1726},[228,88375,88376],{"class":297},"  \u003C!-- 先引用这个库 -->\n",[228,88378,88379,88381,88383,88385,88387,88390,88392,88394],{"class":230,"line":1731},[228,88380,52259],{"class":238},[228,88382,51928],{"class":51415},[228,88384,55354],{"class":2077},[228,88386,284],{"class":238},[228,88388,88389],{"class":343},"\"lodash.min.js\"",[228,88391,55429],{"class":238},[228,88393,51928],{"class":51415},[228,88395,51422],{"class":238},[228,88397,88398,88400,88402],{"class":230,"line":1737},[228,88399,52259],{"class":238},[228,88401,51928],{"class":51415},[228,88403,51422],{"class":238},[228,88405,88406,88408,88410,88412],{"class":230,"line":1742},[228,88407,11336],{"class":234},[228,88409,70086],{"class":287},[228,88411,13679],{"class":234},[228,88413,15687],{"class":238},[228,88415,88416,88418,88420],{"class":230,"line":1756},[228,88417,71731],{"class":238},[228,88419,87925],{"class":343},[228,88421,31581],{"class":238},[228,88423,88424,88426,88428],{"class":230,"line":1761},[228,88425,71741],{"class":238},[228,88427,888],{"class":287},[228,88429,31581],{"class":238},[228,88431,88432,88434,88436,88438,88440],{"class":230,"line":1767},[228,88433,87940],{"class":238},[228,88435,87943],{"class":343},[228,88437,12550],{"class":238},[228,88439,87948],{"class":343},[228,88441,87951],{"class":238},[228,88443,88444],{"class":230,"line":1788},[228,88445,77987],{"class":238},[228,88447,88448,88450],{"class":230,"line":1793},[228,88449,87960],{"class":238},[228,88451,87963],{"class":343},[228,88453,88454],{"class":230,"line":1807},[228,88455,52513],{"class":238},[228,88457,88458],{"class":230,"line":1812},[228,88459,2301],{"class":238},[228,88461,88462,88464,88466,88468,88471,88474],{"class":230,"line":1841},[228,88463,11336],{"class":234},[228,88465,87978],{"class":287},[228,88467,13679],{"class":234},[228,88469,88470],{"class":238}," _.",[228,88472,88473],{"class":2077},"cloneDeep",[228,88475,70151],{"class":238},[228,88477,88478,88480,88482],{"class":230,"line":1846},[228,88479,73868],{"class":238},[228,88481,58362],{"class":2077},[228,88483,88170],{"class":238},[228,88485,88486,88489,88491],{"class":230,"line":1863},[228,88487,88488],{"class":238},"    o.family.baby ",[228,88490,284],{"class":234},[228,88492,88204],{"class":343},[228,88494,88495,88497,88499],{"class":230,"line":1868},[228,88496,73868],{"class":238},[228,88498,58362],{"class":2077},[228,88500,70151],{"class":238},[228,88502,88503,88505,88507],{"class":230,"line":1873},[228,88504,52532],{"class":238},[228,88506,51928],{"class":51415},[228,88508,51422],{"class":238},[228,88510,88511,88513,88515],{"class":230,"line":1878},[228,88512,51900],{"class":238},[228,88514,51915],{"class":51415},[228,88516,51422],{"class":238},[228,88518,88519],{"class":230,"line":1892},[228,88520,2514],{"emptyLinePlaceholder":157},[228,88522,88523,88525,88527],{"class":230,"line":1897},[228,88524,51900],{"class":238},[228,88526,50750],{"class":51415},[228,88528,51422],{"class":238},[19,88530,88531],{},[1576,88532],{"alt":141,"src":88533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22113,88535,88537],{"id":88536},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[220,88539,88541],{"className":50748,"code":88540,"language":50750,"meta":141,"style":141},"\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",[30,88542,88543,88553,88567,88571,88579,88593,88613,88625,88633,88637,88645,88653,88663,88671,88679,88691,88695,88701,88705,88709,88714,88719,88724,88750,88758,88767,88775,88783,88791,88795],{"__ignoreMap":141},[228,88544,88545,88547,88549,88551],{"class":230,"line":231},[228,88546,51412],{"class":238},[228,88548,51416],{"class":51415},[228,88550,51419],{"class":2077},[228,88552,51422],{"class":238},[228,88554,88555,88557,88559,88561,88563,88565],{"class":230,"line":142},[228,88556,1148],{"class":238},[228,88558,50750],{"class":51415},[228,88560,51431],{"class":2077},[228,88562,284],{"class":238},[228,88564,51436],{"class":343},[228,88566,51422],{"class":238},[228,88568,88569],{"class":230,"line":1293},[228,88570,2514],{"emptyLinePlaceholder":157},[228,88572,88573,88575,88577],{"class":230,"line":1308},[228,88574,1148],{"class":238},[228,88576,51449],{"class":51415},[228,88578,51422],{"class":238},[228,88580,88581,88583,88585,88587,88589,88591],{"class":230,"line":1314},[228,88582,52259],{"class":238},[228,88584,51459],{"class":51415},[228,88586,51462],{"class":2077},[228,88588,284],{"class":238},[228,88590,51467],{"class":343},[228,88592,51422],{"class":238},[228,88594,88595,88597,88599,88601,88603,88605,88607,88609,88611],{"class":230,"line":1328},[228,88596,52259],{"class":238},[228,88598,51459],{"class":51415},[228,88600,15035],{"class":2077},[228,88602,284],{"class":238},[228,88604,51506],{"class":343},[228,88606,51486],{"class":2077},[228,88608,284],{"class":238},[228,88610,51513],{"class":343},[228,88612,51422],{"class":238},[228,88614,88615,88617,88619,88621,88623],{"class":230,"line":1334},[228,88616,52259],{"class":238},[228,88618,51522],{"class":51415},[228,88620,51525],{"class":238},[228,88622,51522],{"class":51415},[228,88624,51422],{"class":238},[228,88626,88627,88629,88631],{"class":230,"line":1425},[228,88628,51900],{"class":238},[228,88630,51449],{"class":51415},[228,88632,51422],{"class":238},[228,88634,88635],{"class":230,"line":1431},[228,88636,2514],{"emptyLinePlaceholder":157},[228,88638,88639,88641,88643],{"class":230,"line":1443},[228,88640,1148],{"class":238},[228,88642,51915],{"class":51415},[228,88644,51422],{"class":238},[228,88646,88647,88649,88651],{"class":230,"line":1726},[228,88648,52259],{"class":238},[228,88650,51928],{"class":51415},[228,88652,51422],{"class":238},[228,88654,88655,88657,88659,88661],{"class":230,"line":1731},[228,88656,11336],{"class":234},[228,88658,70086],{"class":287},[228,88660,13679],{"class":234},[228,88662,15687],{"class":238},[228,88664,88665,88667,88669],{"class":230,"line":1737},[228,88666,71731],{"class":238},[228,88668,87925],{"class":343},[228,88670,31581],{"class":238},[228,88672,88673,88675,88677],{"class":230,"line":1742},[228,88674,71741],{"class":238},[228,88676,888],{"class":287},[228,88678,31581],{"class":238},[228,88680,88681,88683,88685,88687,88689],{"class":230,"line":1756},[228,88682,87940],{"class":238},[228,88684,87943],{"class":343},[228,88686,12550],{"class":238},[228,88688,87948],{"class":343},[228,88690,87951],{"class":238},[228,88692,88693],{"class":230,"line":1761},[228,88694,77987],{"class":238},[228,88696,88697,88699],{"class":230,"line":1767},[228,88698,87960],{"class":238},[228,88700,87963],{"class":343},[228,88702,88703],{"class":230,"line":1788},[228,88704,52513],{"class":238},[228,88706,88707],{"class":230,"line":1793},[228,88708,2301],{"class":238},[228,88710,88711],{"class":230,"line":1807},[228,88712,88713],{"class":297},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[228,88715,88716],{"class":230,"line":1812},[228,88717,88718],{"class":297},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[228,88720,88721],{"class":230,"line":1841},[228,88722,88723],{"class":297},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[228,88725,88726,88728,88730,88732,88735,88737,88740,88742,88744,88746,88748],{"class":230,"line":1846},[228,88727,11336],{"class":234},[228,88729,87978],{"class":287},[228,88731,13679],{"class":234},[228,88733,88734],{"class":287}," JSON",[228,88736,796],{"class":238},[228,88738,88739],{"class":2077},"parse",[228,88741,239],{"class":238},[228,88743,71779],{"class":287},[228,88745,796],{"class":238},[228,88747,71784],{"class":2077},[228,88749,71787],{"class":238},[228,88751,88752,88754,88756],{"class":230,"line":1863},[228,88753,73868],{"class":238},[228,88755,58362],{"class":2077},[228,88757,88170],{"class":238},[228,88759,88760,88762,88764],{"class":230,"line":1868},[228,88761,88488],{"class":238},[228,88763,284],{"class":234},[228,88765,88766],{"class":343}," '123'\n",[228,88768,88769,88771,88773],{"class":230,"line":1873},[228,88770,73868],{"class":238},[228,88772,58362],{"class":2077},[228,88774,70151],{"class":238},[228,88776,88777,88779,88781],{"class":230,"line":1878},[228,88778,52532],{"class":238},[228,88780,51928],{"class":51415},[228,88782,51422],{"class":238},[228,88784,88785,88787,88789],{"class":230,"line":1892},[228,88786,51900],{"class":238},[228,88788,51915],{"class":51415},[228,88790,51422],{"class":238},[228,88792,88793],{"class":230,"line":1897},[228,88794,2514],{"emptyLinePlaceholder":157},[228,88796,88797,88799,88801],{"class":230,"line":2691},[228,88798,51900],{"class":238},[228,88800,50750],{"class":51415},[228,88802,51422],{"class":238},[19,88804,88805],{},[1576,88806],{"alt":141,"src":88807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,88809,88811],{"id":88810},"_415-异常处理","4.15 异常处理",[183,88813,88814],{},[186,88815,88816],{},"throw抛异常",[19,88818,88819],{},[1576,88820],{"alt":141,"src":88821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[183,88823,88824],{"start":142},[186,88825,88826],{},"try\u002Fcatch 捕获错误信息",[19,88828,88829],{},[1576,88830],{"alt":141,"src":88831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[220,88833,88835],{"className":50748,"code":88834,"language":50750,"meta":141,"style":141},"\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",[30,88836,88837,88847,88861,88865,88873,88887,88907,88919,88927,88931,88939,88951,88959,88968,88975,88980,88999,89008,89019,89024,89034,89039,89044,89049,89066,89070,89075,89082,89094,89098,89110,89114,89118,89123,89128,89135,89143,89151,89155],{"__ignoreMap":141},[228,88838,88839,88841,88843,88845],{"class":230,"line":231},[228,88840,51412],{"class":238},[228,88842,51416],{"class":51415},[228,88844,51419],{"class":2077},[228,88846,51422],{"class":238},[228,88848,88849,88851,88853,88855,88857,88859],{"class":230,"line":142},[228,88850,1148],{"class":238},[228,88852,50750],{"class":51415},[228,88854,51431],{"class":2077},[228,88856,284],{"class":238},[228,88858,51436],{"class":343},[228,88860,51422],{"class":238},[228,88862,88863],{"class":230,"line":1293},[228,88864,2514],{"emptyLinePlaceholder":157},[228,88866,88867,88869,88871],{"class":230,"line":1308},[228,88868,1148],{"class":238},[228,88870,51449],{"class":51415},[228,88872,51422],{"class":238},[228,88874,88875,88877,88879,88881,88883,88885],{"class":230,"line":1314},[228,88876,52259],{"class":238},[228,88878,51459],{"class":51415},[228,88880,51462],{"class":2077},[228,88882,284],{"class":238},[228,88884,51467],{"class":343},[228,88886,51422],{"class":238},[228,88888,88889,88891,88893,88895,88897,88899,88901,88903,88905],{"class":230,"line":1328},[228,88890,52259],{"class":238},[228,88892,51459],{"class":51415},[228,88894,15035],{"class":2077},[228,88896,284],{"class":238},[228,88898,51506],{"class":343},[228,88900,51486],{"class":2077},[228,88902,284],{"class":238},[228,88904,51513],{"class":343},[228,88906,51422],{"class":238},[228,88908,88909,88911,88913,88915,88917],{"class":230,"line":1334},[228,88910,52259],{"class":238},[228,88912,51522],{"class":51415},[228,88914,51525],{"class":238},[228,88916,51522],{"class":51415},[228,88918,51422],{"class":238},[228,88920,88921,88923,88925],{"class":230,"line":1425},[228,88922,51900],{"class":238},[228,88924,51449],{"class":51415},[228,88926,51422],{"class":238},[228,88928,88929],{"class":230,"line":1431},[228,88930,2514],{"emptyLinePlaceholder":157},[228,88932,88933,88935,88937],{"class":230,"line":1443},[228,88934,1148],{"class":238},[228,88936,51915],{"class":51415},[228,88938,51422],{"class":238},[228,88940,88941,88943,88945,88947,88949],{"class":230,"line":1726},[228,88942,52259],{"class":238},[228,88944,19],{"class":51415},[228,88946,53609],{"class":238},[228,88948,19],{"class":51415},[228,88950,51422],{"class":238},[228,88952,88953,88955,88957],{"class":230,"line":1731},[228,88954,52259],{"class":238},[228,88956,51928],{"class":51415},[228,88958,51422],{"class":238},[228,88960,88961,88963,88966],{"class":230,"line":1737},[228,88962,70199],{"class":234},[228,88964,88965],{"class":2077}," fn",[228,88967,10968],{"class":238},[228,88969,88970,88973],{"class":230,"line":1742},[228,88971,88972],{"class":234},"      try",[228,88974,15687],{"class":238},[228,88976,88977],{"class":230,"line":1756},[228,88978,88979],{"class":297},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[228,88981,88982,88984,88986,88988,88990,88992,88994,88997],{"class":230,"line":1761},[228,88983,61385],{"class":234},[228,88985,6940],{"class":287},[228,88987,13679],{"class":234},[228,88989,54511],{"class":238},[228,88991,54514],{"class":2077},[228,88993,239],{"class":238},[228,88995,88996],{"class":343},"'.p'",[228,88998,245],{"class":238},[228,89000,89001,89004,89006],{"class":230,"line":1767},[228,89002,89003],{"class":238},"        p.style.color ",[228,89005,284],{"class":234},[228,89007,67166],{"class":343},[228,89009,89010,89013,89016],{"class":230,"line":1788},[228,89011,89012],{"class":238},"      } ",[228,89014,89015],{"class":234},"catch",[228,89017,89018],{"class":238}," (err) {\n",[228,89020,89021],{"class":230,"line":1793},[228,89022,89023],{"class":297},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[228,89025,89026,89029,89031],{"class":230,"line":1807},[228,89027,89028],{"class":238},"        console.",[228,89030,58362],{"class":2077},[228,89032,89033],{"class":238},"(err.message)\n",[228,89035,89036],{"class":230,"line":1812},[228,89037,89038],{"class":297},"        \u002F\u002F 想要中断程序，需要加return\n",[228,89040,89041],{"class":230,"line":1841},[228,89042,89043],{"class":297},"        \u002F\u002F return\n",[228,89045,89046],{"class":230,"line":1846},[228,89047,89048],{"class":297},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[228,89050,89051,89054,89056,89059,89061,89064],{"class":230,"line":1863},[228,89052,89053],{"class":234},"        throw",[228,89055,11693],{"class":234},[228,89057,89058],{"class":2077}," Error",[228,89060,239],{"class":238},[228,89062,89063],{"class":343},"'你看看，选择器错误了吧'",[228,89065,245],{"class":238},[228,89067,89068],{"class":230,"line":1868},[228,89069,52513],{"class":238},[228,89071,89072],{"class":230,"line":1873},[228,89073,89074],{"class":297},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[228,89076,89077,89080],{"class":230,"line":1878},[228,89078,89079],{"class":234},"      finally",[228,89081,15687],{"class":238},[228,89083,89084,89087,89089,89092],{"class":230,"line":1892},[228,89085,89086],{"class":2077},"        alert",[228,89088,239],{"class":238},[228,89090,89091],{"class":343},"'弹出对话框'",[228,89093,245],{"class":238},[228,89095,89096],{"class":230,"line":1897},[228,89097,52513],{"class":238},[228,89099,89100,89102,89104,89106,89108],{"class":230,"line":2691},[228,89101,58359],{"class":238},[228,89103,58362],{"class":2077},[228,89105,239],{"class":238},[228,89107,710],{"class":287},[228,89109,245],{"class":238},[228,89111,89112],{"class":230,"line":2705},[228,89113,2514],{"emptyLinePlaceholder":157},[228,89115,89116],{"class":230,"line":2713},[228,89117,2301],{"class":238},[228,89119,89120],{"class":230,"line":2718},[228,89121,89122],{"class":297},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[228,89124,89125],{"class":230,"line":2724},[228,89126,89127],{"class":297},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[228,89129,89130,89133],{"class":230,"line":2730},[228,89131,89132],{"class":2077},"    fn",[228,89134,2090],{"class":238},[228,89136,89137,89139,89141],{"class":230,"line":2735},[228,89138,52532],{"class":238},[228,89140,51928],{"class":51415},[228,89142,51422],{"class":238},[228,89144,89145,89147,89149],{"class":230,"line":8063},[228,89146,51900],{"class":238},[228,89148,51915],{"class":51415},[228,89150,51422],{"class":238},[228,89152,89153],{"class":230,"line":8087},[228,89154,2514],{"emptyLinePlaceholder":157},[228,89156,89157,89159,89161],{"class":230,"line":8092},[228,89158,51900],{"class":238},[228,89160,50750],{"class":51415},[228,89162,51422],{"class":238},[19,89164,89165],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[183,89167,89168],{"start":1293},[186,89169,89170],{},"debugger",[19,89172,89173],{},[1576,89174],{"alt":141,"src":89175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,89177,89178],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,89180,89182],{"id":89181},"_416-处理this","4.16 处理this",[200,89184,89186],{"id":89185},"_4161-this的指向","4.16.1 this的指向",[183,89188,89189],{},[186,89190,89191],{},"普通函数的this",[19,89193,89194],{},[1576,89195],{"alt":141,"src":89196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[183,89198,89199],{"start":142},[186,89200,89201],{},"箭头函数的this",[19,89203,89204],{},[1576,89205],{"alt":141,"src":89206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,89208,89209],{},[1576,89210],{"alt":141,"src":89211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,89213,89214],{},[1576,89215],{"alt":141,"src":89216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[200,89218,89220],{"id":89219},"_4162-this的改变","4.16.2 this的改变",[19,89222,89223],{},"call() apply() bind()",[183,89225,89226],{},[186,89227,89228],{},"call()",[19,89230,89231],{},[1576,89232],{"alt":141,"src":89233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,89235,89236],{},"两个作用：①调用函数；②改变this指向",[220,89238,89240],{"className":53182,"code":89239,"language":53184,"meta":141,"style":141},"\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",[30,89241,89242,89250,89258,89262,89267,89271,89276,89281,89286,89290,89295,89303],{"__ignoreMap":141},[228,89243,89244,89246,89248],{"class":230,"line":231},[228,89245,1148],{"class":238},[228,89247,51915],{"class":51415},[228,89249,51422],{"class":238},[228,89251,89252,89254,89256],{"class":230,"line":142},[228,89253,52259],{"class":238},[228,89255,51928],{"class":51415},[228,89257,51422],{"class":238},[228,89259,89260],{"class":230,"line":1293},[228,89261,71638],{"class":238},[228,89263,89264],{"class":230,"line":1308},[228,89265,89266],{"class":238},"      uname: 'pink'\n",[228,89268,89269],{"class":230,"line":1314},[228,89270,2301],{"class":238},[228,89272,89273],{"class":230,"line":1328},[228,89274,89275],{"class":238},"    function fn(x, y) {\n",[228,89277,89278],{"class":230,"line":1334},[228,89279,89280],{"class":238},"      console.log(this)  \u002F\u002Fwindow\n",[228,89282,89283],{"class":230,"line":1425},[228,89284,89285],{"class":238},"      console.log(x + y)\n",[228,89287,89288],{"class":230,"line":1431},[228,89289,2301],{"class":238},[228,89291,89292],{"class":230,"line":1443},[228,89293,89294],{"class":238},"    fn.call(obj, 1, 2)\n",[228,89296,89297,89299,89301],{"class":230,"line":1726},[228,89298,52532],{"class":238},[228,89300,51928],{"class":51415},[228,89302,51422],{"class":238},[228,89304,89305,89307,89309],{"class":230,"line":1731},[228,89306,51900],{"class":238},[228,89308,51915],{"class":51415},[228,89310,51422],{"class":238},[19,89312,89313],{},[1576,89314],{"alt":141,"src":89315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[183,89317,89318],{"start":142},[186,89319,89320],{},"apply()",[19,89322,89323],{},[1576,89324],{"alt":141,"src":89325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,89327,89236],{},[19,89329,89330],{},"call传递的是普通参数，而apply必须传递的是数组",[220,89332,89334],{"className":50748,"code":89333,"language":50750,"meta":141,"style":141},"\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",[30,89335,89336,89346,89360,89364,89372,89386,89406,89418,89426,89430,89438,89446,89456,89463,89467,89472,89488,89500,89514,89518,89523,89542,89547,89551,89556,89561,89569,89574,89596,89601,89617,89633,89645,89649,89654,89673,89681,89689,89693],{"__ignoreMap":141},[228,89337,89338,89340,89342,89344],{"class":230,"line":231},[228,89339,51412],{"class":238},[228,89341,51416],{"class":51415},[228,89343,51419],{"class":2077},[228,89345,51422],{"class":238},[228,89347,89348,89350,89352,89354,89356,89358],{"class":230,"line":142},[228,89349,1148],{"class":238},[228,89351,50750],{"class":51415},[228,89353,51431],{"class":2077},[228,89355,284],{"class":238},[228,89357,51436],{"class":343},[228,89359,51422],{"class":238},[228,89361,89362],{"class":230,"line":1293},[228,89363,2514],{"emptyLinePlaceholder":157},[228,89365,89366,89368,89370],{"class":230,"line":1308},[228,89367,1148],{"class":238},[228,89369,51449],{"class":51415},[228,89371,51422],{"class":238},[228,89373,89374,89376,89378,89380,89382,89384],{"class":230,"line":1314},[228,89375,52259],{"class":238},[228,89377,51459],{"class":51415},[228,89379,51462],{"class":2077},[228,89381,284],{"class":238},[228,89383,51467],{"class":343},[228,89385,51422],{"class":238},[228,89387,89388,89390,89392,89394,89396,89398,89400,89402,89404],{"class":230,"line":1328},[228,89389,52259],{"class":238},[228,89391,51459],{"class":51415},[228,89393,15035],{"class":2077},[228,89395,284],{"class":238},[228,89397,51506],{"class":343},[228,89399,51486],{"class":2077},[228,89401,284],{"class":238},[228,89403,51513],{"class":343},[228,89405,51422],{"class":238},[228,89407,89408,89410,89412,89414,89416],{"class":230,"line":1334},[228,89409,52259],{"class":238},[228,89411,51522],{"class":51415},[228,89413,51525],{"class":238},[228,89415,51522],{"class":51415},[228,89417,51422],{"class":238},[228,89419,89420,89422,89424],{"class":230,"line":1425},[228,89421,51900],{"class":238},[228,89423,51449],{"class":51415},[228,89425,51422],{"class":238},[228,89427,89428],{"class":230,"line":1431},[228,89429,2514],{"emptyLinePlaceholder":157},[228,89431,89432,89434,89436],{"class":230,"line":1443},[228,89433,1148],{"class":238},[228,89435,51915],{"class":51415},[228,89437,51422],{"class":238},[228,89439,89440,89442,89444],{"class":230,"line":1726},[228,89441,52259],{"class":238},[228,89443,51928],{"class":51415},[228,89445,51422],{"class":238},[228,89447,89448,89450,89452,89454],{"class":230,"line":1731},[228,89449,11336],{"class":234},[228,89451,70086],{"class":287},[228,89453,13679],{"class":234},[228,89455,15687],{"class":238},[228,89457,89458,89460],{"class":230,"line":1737},[228,89459,71741],{"class":238},[228,89461,89462],{"class":287},"18\n",[228,89464,89465],{"class":230,"line":1742},[228,89466,2301],{"class":238},[228,89468,89469],{"class":230,"line":1756},[228,89470,89471],{"class":297},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[228,89473,89474,89476,89478,89480,89482,89484,89486],{"class":230,"line":1761},[228,89475,70199],{"class":234},[228,89477,88965],{"class":2077},[228,89479,239],{"class":238},[228,89481,1058],{"class":5331},[228,89483,12550],{"class":238},[228,89485,1083],{"class":5331},[228,89487,12557],{"class":238},[228,89489,89490,89492,89494,89496,89498],{"class":230,"line":1767},[228,89491,58359],{"class":238},[228,89493,58362],{"class":2077},[228,89495,239],{"class":238},[228,89497,87108],{"class":287},[228,89499,245],{"class":238},[228,89501,89502,89504,89506,89509,89511],{"class":230,"line":1788},[228,89503,58359],{"class":238},[228,89505,58362],{"class":2077},[228,89507,89508],{"class":238},"(x ",[228,89510,719],{"class":234},[228,89512,89513],{"class":238}," y)\n",[228,89515,89516],{"class":230,"line":1793},[228,89517,2301],{"class":238},[228,89519,89520],{"class":230,"line":1807},[228,89521,89522],{"class":297},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[228,89524,89525,89528,89531,89534,89536,89538,89540],{"class":230,"line":1812},[228,89526,89527],{"class":238},"    fn.",[228,89529,89530],{"class":2077},"apply",[228,89532,89533],{"class":238},"(obj, [",[228,89535,456],{"class":287},[228,89537,12550],{"class":238},[228,89539,316],{"class":287},[228,89541,4771],{"class":238},[228,89543,89544],{"class":230,"line":1841},[228,89545,89546],{"class":297},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[228,89548,89549],{"class":230,"line":1846},[228,89550,2514],{"emptyLinePlaceholder":157},[228,89552,89553],{"class":230,"line":1863},[228,89554,89555],{"class":297},"    \u002F\u002F 使用场景：求数组最大值\n",[228,89557,89558],{"class":230,"line":1868},[228,89559,89560],{"class":297},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[228,89562,89563,89566],{"class":230,"line":1873},[228,89564,89565],{"class":297},"    \u002F\u002F console.log(max)",[228,89567,89568],{"class":297},"   \u002F\u002F3\n",[228,89570,89571],{"class":230,"line":1878},[228,89572,89573],{"class":297},"    \u002F\u002F 指向空或者Math都是可以的\n",[228,89575,89576,89578,89580,89582,89584,89586,89588,89590,89592,89594],{"class":230,"line":1892},[228,89577,11336],{"class":234},[228,89579,57810],{"class":287},[228,89581,13679],{"class":234},[228,89583,52341],{"class":238},[228,89585,549],{"class":287},[228,89587,12550],{"class":238},[228,89589,742],{"class":287},[228,89591,12550],{"class":238},[228,89593,773],{"class":287},[228,89595,33361],{"class":238},[228,89597,89598],{"class":230,"line":1897},[228,89599,89600],{"class":297},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[228,89602,89603,89605,89607,89609,89612,89614],{"class":230,"line":2691},[228,89604,11336],{"class":234},[228,89606,6066],{"class":287},[228,89608,13679],{"class":234},[228,89610,89611],{"class":238}," Math.max.",[228,89613,89530],{"class":2077},[228,89615,89616],{"class":238},"(Math, arr)\n",[228,89618,89619,89621,89624,89626,89629,89631],{"class":230,"line":2705},[228,89620,11336],{"class":234},[228,89622,89623],{"class":287}," min",[228,89625,13679],{"class":234},[228,89627,89628],{"class":238}," Math.min.",[228,89630,89530],{"class":2077},[228,89632,89616],{"class":238},[228,89634,89635,89637,89639,89642],{"class":230,"line":2713},[228,89636,73868],{"class":238},[228,89638,58362],{"class":2077},[228,89640,89641],{"class":238},"(max, min)     ",[228,89643,89644],{"class":297},"\u002F\u002F100,4\n",[228,89646,89647],{"class":230,"line":2718},[228,89648,2514],{"emptyLinePlaceholder":157},[228,89650,89651],{"class":230,"line":2724},[228,89652,89653],{"class":297},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[228,89655,89656,89658,89660,89663,89665,89667,89670],{"class":230,"line":2730},[228,89657,73868],{"class":238},[228,89659,58362],{"class":2077},[228,89661,89662],{"class":238},"(Max.",[228,89664,6130],{"class":2077},[228,89666,239],{"class":238},[228,89668,89669],{"class":234},"...",[228,89671,89672],{"class":238},"arr))\n",[228,89674,89675,89677,89679],{"class":230,"line":2735},[228,89676,52532],{"class":238},[228,89678,51928],{"class":51415},[228,89680,51422],{"class":238},[228,89682,89683,89685,89687],{"class":230,"line":8063},[228,89684,51900],{"class":238},[228,89686,51915],{"class":51415},[228,89688,51422],{"class":238},[228,89690,89691],{"class":230,"line":8087},[228,89692,2514],{"emptyLinePlaceholder":157},[228,89694,89695,89697,89699],{"class":230,"line":8092},[228,89696,51900],{"class":238},[228,89698,50750],{"class":51415},[228,89700,51422],{"class":238},[19,89702,89703],{},[1576,89704],{"alt":141,"src":89705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[183,89707,89708],{"start":1293},[186,89709,89710],{},"bind()",[19,89712,89713],{},[1576,89714],{"alt":141,"src":89715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,89717,89718],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,89720,89721],{},"bind的语法跟call很相似",[220,89723,89725],{"className":53182,"code":89724,"language":53184,"meta":141,"style":141},"\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",[30,89726,89727,89735,89743,89747,89752,89756,89760,89765,89769,89774,89779,89784,89789,89794,89799,89804,89808,89816],{"__ignoreMap":141},[228,89728,89729,89731,89733],{"class":230,"line":231},[228,89730,1148],{"class":238},[228,89732,51915],{"class":51415},[228,89734,51422],{"class":238},[228,89736,89737,89739,89741],{"class":230,"line":142},[228,89738,52259],{"class":238},[228,89740,51928],{"class":51415},[228,89742,51422],{"class":238},[228,89744,89745],{"class":230,"line":1293},[228,89746,71638],{"class":238},[228,89748,89749],{"class":230,"line":1308},[228,89750,89751],{"class":238},"      age: 18\n",[228,89753,89754],{"class":230,"line":1314},[228,89755,2301],{"class":238},[228,89757,89758],{"class":230,"line":1328},[228,89759,77258],{"class":238},[228,89761,89762],{"class":230,"line":1334},[228,89763,89764],{"class":238},"      console.log(this)\n",[228,89766,89767],{"class":230,"line":1425},[228,89768,2301],{"class":238},[228,89770,89771],{"class":230,"line":1431},[228,89772,89773],{"class":238},"    \u002F\u002F 1.bind 不会调用函数\n",[228,89775,89776],{"class":230,"line":1443},[228,89777,89778],{"class":238},"    \u002F\u002F 2.bind能改变this的指向\n",[228,89780,89781],{"class":230,"line":1726},[228,89782,89783],{"class":238},"    fn.bind()\n",[228,89785,89786],{"class":230,"line":1731},[228,89787,89788],{"class":238},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[228,89790,89791],{"class":230,"line":1737},[228,89792,89793],{"class":238},"    const fun = fn.bind(obj)\n",[228,89795,89796],{"class":230,"line":1742},[228,89797,89798],{"class":238},"    \u002F\u002F console.log(fun)\n",[228,89800,89801],{"class":230,"line":1756},[228,89802,89803],{"class":238},"    \u002F\u002F 调用,查看this的指向\n",[228,89805,89806],{"class":230,"line":1761},[228,89807,52766],{"class":238},[228,89809,89810,89812,89814],{"class":230,"line":1767},[228,89811,52532],{"class":238},[228,89813,51928],{"class":51415},[228,89815,51422],{"class":238},[228,89817,89818,89820,89822],{"class":230,"line":1788},[228,89819,51900],{"class":238},[228,89821,51915],{"class":51415},[228,89823,51422],{"class":238},[19,89825,89826],{},[1576,89827],{"alt":141,"src":89828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[183,89830,89831],{"start":1308},[186,89832,89833],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[220,89835,89837],{"className":53182,"code":89836,"language":53184,"meta":141,"style":141},"\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",[30,89838,89839,89847,89860,89868,89873,89877,89882,89887,89892,89897,89902,89907,89912,89917,89921,89929],{"__ignoreMap":141},[228,89840,89841,89843,89845],{"class":230,"line":231},[228,89842,1148],{"class":238},[228,89844,51915],{"class":51415},[228,89846,51422],{"class":238},[228,89848,89849,89851,89853,89856,89858],{"class":230,"line":142},[228,89850,52259],{"class":238},[228,89852,54002],{"class":51415},[228,89854,89855],{"class":238},">禁用\u003C\u002F",[228,89857,54002],{"class":51415},[228,89859,51422],{"class":238},[228,89861,89862,89864,89866],{"class":230,"line":1293},[228,89863,52259],{"class":238},[228,89865,51928],{"class":51415},[228,89867,51422],{"class":238},[228,89869,89870],{"class":230,"line":1308},[228,89871,89872],{"class":238},"    const btn = document.querySelector('button')\n",[228,89874,89875],{"class":230,"line":1314},[228,89876,59131],{"class":238},[228,89878,89879],{"class":230,"line":1328},[228,89880,89881],{"class":238},"      this.disabled = true\n",[228,89883,89884],{"class":230,"line":1334},[228,89885,89886],{"class":238},"      \u002F\u002F 定时器是window进行调用的\n",[228,89888,89889],{"class":230,"line":1425},[228,89890,89891],{"class":238},"      setTimeout(function () {\n",[228,89893,89894],{"class":230,"line":1431},[228,89895,89896],{"class":238},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[228,89898,89899],{"class":230,"line":1443},[228,89900,89901],{"class":238},"        this.disabled = false\n",[228,89903,89904],{"class":230,"line":1726},[228,89905,89906],{"class":238},"      }.bind(this), 2000)\n",[228,89908,89909],{"class":230,"line":1731},[228,89910,89911],{"class":238},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[228,89913,89914],{"class":230,"line":1737},[228,89915,89916],{"class":238},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[228,89918,89919],{"class":230,"line":1742},[228,89920,33576],{"class":238},[228,89922,89923,89925,89927],{"class":230,"line":1756},[228,89924,52532],{"class":238},[228,89926,51928],{"class":51415},[228,89928,51422],{"class":238},[228,89930,89931,89933,89935],{"class":230,"line":1761},[228,89932,51900],{"class":238},[228,89934,51915],{"class":51415},[228,89936,51422],{"class":238},[183,89938,89939],{"start":1314},[186,89940,22068],{},[19,89942,89943],{},[1576,89944],{"alt":141,"src":89945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,89947,89949],{"id":89948},"_417-性能优化","4.17 性能优化",[200,89951,89953],{"id":89952},"_4171-防抖","4.17.1 防抖",[19,89955,89956],{},[1576,89957],{"alt":141,"src":89958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,89960,89961],{},[388,89962,89963],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,89965,89966],{},"防抖实现方式：",[1245,89968,89969],{},[186,89970,89971],{},"lodash 提供了防抖处理",[19,89973,89974],{},"_.debounce(func,[wait=0],[options={}])",[19,89976,89977],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[220,89979,89981],{"className":50748,"code":89980,"language":50750,"meta":141,"style":141},"\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",[30,89982,89983,89993,90007,90011,90019,90033,90053,90065,90073,90079,90089,90101,90113,90124,90136,90146,90156,90169,90173,90181,90189,90193,90201,90219,90237,90245,90264,90274,90283,90294,90299,90303,90308,90313,90318,90343,90351,90359,90363],{"__ignoreMap":141},[228,89984,89985,89987,89989,89991],{"class":230,"line":231},[228,89986,51412],{"class":238},[228,89988,51416],{"class":51415},[228,89990,51419],{"class":2077},[228,89992,51422],{"class":238},[228,89994,89995,89997,89999,90001,90003,90005],{"class":230,"line":142},[228,89996,1148],{"class":238},[228,89998,50750],{"class":51415},[228,90000,51431],{"class":2077},[228,90002,284],{"class":238},[228,90004,51436],{"class":343},[228,90006,51422],{"class":238},[228,90008,90009],{"class":230,"line":1293},[228,90010,2514],{"emptyLinePlaceholder":157},[228,90012,90013,90015,90017],{"class":230,"line":1308},[228,90014,1148],{"class":238},[228,90016,51449],{"class":51415},[228,90018,51422],{"class":238},[228,90020,90021,90023,90025,90027,90029,90031],{"class":230,"line":1314},[228,90022,52259],{"class":238},[228,90024,51459],{"class":51415},[228,90026,51462],{"class":2077},[228,90028,284],{"class":238},[228,90030,51467],{"class":343},[228,90032,51422],{"class":238},[228,90034,90035,90037,90039,90041,90043,90045,90047,90049,90051],{"class":230,"line":1328},[228,90036,52259],{"class":238},[228,90038,51459],{"class":51415},[228,90040,15035],{"class":2077},[228,90042,284],{"class":238},[228,90044,51506],{"class":343},[228,90046,51486],{"class":2077},[228,90048,284],{"class":238},[228,90050,51513],{"class":343},[228,90052,51422],{"class":238},[228,90054,90055,90057,90059,90061,90063],{"class":230,"line":1334},[228,90056,52259],{"class":238},[228,90058,51522],{"class":51415},[228,90060,51525],{"class":238},[228,90062,51522],{"class":51415},[228,90064,51422],{"class":238},[228,90066,90067,90069,90071],{"class":230,"line":1425},[228,90068,52259],{"class":238},[228,90070,5241],{"class":51415},[228,90072,51422],{"class":238},[228,90074,90075,90077],{"class":230,"line":1431},[228,90076,54867],{"class":2077},[228,90078,15687],{"class":238},[228,90080,90081,90083,90085,90087],{"class":230,"line":1443},[228,90082,72711],{"class":287},[228,90084,51552],{"class":238},[228,90086,60620],{"class":287},[228,90088,1404],{"class":238},[228,90090,90091,90093,90095,90097,90099],{"class":230,"line":1726},[228,90092,54886],{"class":287},[228,90094,51552],{"class":238},[228,90096,1836],{"class":287},[228,90098,51607],{"class":234},[228,90100,1404],{"class":238},[228,90102,90103,90105,90107,90109,90111],{"class":230,"line":1731},[228,90104,54900],{"class":287},[228,90106,51552],{"class":238},[228,90108,1836],{"class":287},[228,90110,51607],{"class":234},[228,90112,1404],{"class":238},[228,90114,90115,90117,90119,90122],{"class":230,"line":1737},[228,90116,54999],{"class":287},[228,90118,51552],{"class":238},[228,90120,90121],{"class":287},"gray",[228,90123,1404],{"class":238},[228,90125,90126,90128,90130,90132,90134],{"class":230,"line":1742},[228,90127,55037],{"class":287},[228,90129,51552],{"class":238},[228,90131,1063],{"class":287},[228,90133,51607],{"class":234},[228,90135,1404],{"class":238},[228,90137,90138,90140,90142,90144],{"class":230,"line":1756},[228,90139,57531],{"class":287},[228,90141,51552],{"class":238},[228,90143,60957],{"class":287},[228,90145,1404],{"class":238},[228,90147,90148,90150,90152,90154],{"class":230,"line":1761},[228,90149,57401],{"class":287},[228,90151,51552],{"class":238},[228,90153,51707],{"class":287},[228,90155,1404],{"class":238},[228,90157,90158,90161,90163,90165,90167],{"class":230,"line":1767},[228,90159,90160],{"class":287},"      padding-top",[228,90162,51552],{"class":238},[228,90164,557],{"class":287},[228,90166,51607],{"class":234},[228,90168,1404],{"class":238},[228,90170,90171],{"class":230,"line":1788},[228,90172,2301],{"class":238},[228,90174,90175,90177,90179],{"class":230,"line":1793},[228,90176,52532],{"class":238},[228,90178,5241],{"class":51415},[228,90180,51422],{"class":238},[228,90182,90183,90185,90187],{"class":230,"line":1807},[228,90184,51900],{"class":238},[228,90186,51449],{"class":51415},[228,90188,51422],{"class":238},[228,90190,90191],{"class":230,"line":1812},[228,90192,2514],{"emptyLinePlaceholder":157},[228,90194,90195,90197,90199],{"class":230,"line":1841},[228,90196,1148],{"class":238},[228,90198,51915],{"class":51415},[228,90200,51422],{"class":238},[228,90202,90203,90205,90207,90209,90211,90213,90215,90217],{"class":230,"line":1846},[228,90204,52259],{"class":238},[228,90206,51726],{"class":51415},[228,90208,53601],{"class":2077},[228,90210,284],{"class":238},[228,90212,53606],{"class":343},[228,90214,55429],{"class":238},[228,90216,51726],{"class":51415},[228,90218,51422],{"class":238},[228,90220,90221,90223,90225,90227,90229,90231,90233,90235],{"class":230,"line":1863},[228,90222,52259],{"class":238},[228,90224,51928],{"class":51415},[228,90226,55354],{"class":2077},[228,90228,284],{"class":238},[228,90230,88389],{"class":343},[228,90232,55429],{"class":238},[228,90234,51928],{"class":51415},[228,90236,51422],{"class":238},[228,90238,90239,90241,90243],{"class":230,"line":1868},[228,90240,52259],{"class":238},[228,90242,51928],{"class":51415},[228,90244,51422],{"class":238},[228,90246,90247,90249,90251,90253,90255,90257,90259,90262],{"class":230,"line":1873},[228,90248,11336],{"class":234},[228,90250,87048],{"class":287},[228,90252,13679],{"class":234},[228,90254,54511],{"class":238},[228,90256,54514],{"class":2077},[228,90258,239],{"class":238},[228,90260,90261],{"class":343},"'.box'",[228,90263,245],{"class":238},[228,90265,90266,90268,90270,90272],{"class":230,"line":1878},[228,90267,52334],{"class":234},[228,90269,9553],{"class":238},[228,90271,284],{"class":234},[228,90273,47448],{"class":287},[228,90275,90276,90278,90281],{"class":230,"line":1892},[228,90277,70199],{"class":234},[228,90279,90280],{"class":2077}," mouseMove",[228,90282,10968],{"class":238},[228,90284,90285,90288,90290,90292],{"class":230,"line":1897},[228,90286,90287],{"class":238},"      box.innerHTML ",[228,90289,284],{"class":234},[228,90291,3146],{"class":238},[228,90293,2816],{"class":234},[228,90295,90296],{"class":230,"line":2691},[228,90297,90298],{"class":297},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[228,90300,90301],{"class":230,"line":2705},[228,90302,2301],{"class":238},[228,90304,90305],{"class":230,"line":2713},[228,90306,90307],{"class":297},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[228,90309,90310],{"class":230,"line":2718},[228,90311,90312],{"class":297},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[228,90314,90315],{"class":230,"line":2724},[228,90316,90317],{"class":297},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[228,90319,90320,90323,90325,90327,90330,90333,90336,90339,90341],{"class":230,"line":2730},[228,90321,90322],{"class":238},"    box.",[228,90324,57928],{"class":2077},[228,90326,239],{"class":238},[228,90328,90329],{"class":343},"'mousemove'",[228,90331,90332],{"class":238},", _.",[228,90334,90335],{"class":2077},"debounce",[228,90337,90338],{"class":238},"(mouseMove, ",[228,90340,65189],{"class":287},[228,90342,30612],{"class":238},[228,90344,90345,90347,90349],{"class":230,"line":2735},[228,90346,52532],{"class":238},[228,90348,51928],{"class":51415},[228,90350,51422],{"class":238},[228,90352,90353,90355,90357],{"class":230,"line":8063},[228,90354,51900],{"class":238},[228,90356,51915],{"class":51415},[228,90358,51422],{"class":238},[228,90360,90361],{"class":230,"line":8087},[228,90362,2514],{"emptyLinePlaceholder":157},[228,90364,90365,90367,90369],{"class":230,"line":8092},[228,90366,51900],{"class":238},[228,90368,50750],{"class":51415},[228,90370,51422],{"class":238},[1245,90372,90373],{},[186,90374,90375],{},"手写一个防抖函数来处理",[19,90377,90378],{},"防抖的核心就是利用定时器来实现的：",[19,90380,90381],{},"①声明一个定时器变量",[19,90383,90384],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,90386,90387],{},"③如果没有定时器则开启定时器，记得存到变量里面",[220,90389,90391],{"className":50748,"code":90390,"language":50750,"meta":141,"style":141},"\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",[30,90392,90393,90403,90417,90421,90429,90443,90463,90475,90483,90489,90499,90511,90523,90533,90545,90555,90565,90577,90581,90589,90597,90601,90609,90627,90645,90653,90671,90681,90689,90699,90703,90707,90711,90716,90721,90726,90731,90736,90741,90759,90766,90771,90779,90784,90797,90813,90823,90828,90832,90836,90856,90860,90865,90870,90875,90880,90888,90896,90900],{"__ignoreMap":141},[228,90394,90395,90397,90399,90401],{"class":230,"line":231},[228,90396,51412],{"class":238},[228,90398,51416],{"class":51415},[228,90400,51419],{"class":2077},[228,90402,51422],{"class":238},[228,90404,90405,90407,90409,90411,90413,90415],{"class":230,"line":142},[228,90406,1148],{"class":238},[228,90408,50750],{"class":51415},[228,90410,51431],{"class":2077},[228,90412,284],{"class":238},[228,90414,51436],{"class":343},[228,90416,51422],{"class":238},[228,90418,90419],{"class":230,"line":1293},[228,90420,2514],{"emptyLinePlaceholder":157},[228,90422,90423,90425,90427],{"class":230,"line":1308},[228,90424,1148],{"class":238},[228,90426,51449],{"class":51415},[228,90428,51422],{"class":238},[228,90430,90431,90433,90435,90437,90439,90441],{"class":230,"line":1314},[228,90432,52259],{"class":238},[228,90434,51459],{"class":51415},[228,90436,51462],{"class":2077},[228,90438,284],{"class":238},[228,90440,51467],{"class":343},[228,90442,51422],{"class":238},[228,90444,90445,90447,90449,90451,90453,90455,90457,90459,90461],{"class":230,"line":1328},[228,90446,52259],{"class":238},[228,90448,51459],{"class":51415},[228,90450,15035],{"class":2077},[228,90452,284],{"class":238},[228,90454,51506],{"class":343},[228,90456,51486],{"class":2077},[228,90458,284],{"class":238},[228,90460,51513],{"class":343},[228,90462,51422],{"class":238},[228,90464,90465,90467,90469,90471,90473],{"class":230,"line":1334},[228,90466,52259],{"class":238},[228,90468,51522],{"class":51415},[228,90470,51525],{"class":238},[228,90472,51522],{"class":51415},[228,90474,51422],{"class":238},[228,90476,90477,90479,90481],{"class":230,"line":1425},[228,90478,52259],{"class":238},[228,90480,5241],{"class":51415},[228,90482,51422],{"class":238},[228,90484,90485,90487],{"class":230,"line":1431},[228,90486,54867],{"class":2077},[228,90488,15687],{"class":238},[228,90490,90491,90493,90495,90497],{"class":230,"line":1443},[228,90492,72711],{"class":287},[228,90494,51552],{"class":238},[228,90496,60620],{"class":287},[228,90498,1404],{"class":238},[228,90500,90501,90503,90505,90507,90509],{"class":230,"line":1726},[228,90502,54886],{"class":287},[228,90504,51552],{"class":238},[228,90506,1836],{"class":287},[228,90508,51607],{"class":234},[228,90510,1404],{"class":238},[228,90512,90513,90515,90517,90519,90521],{"class":230,"line":1731},[228,90514,54900],{"class":287},[228,90516,51552],{"class":238},[228,90518,1836],{"class":287},[228,90520,51607],{"class":234},[228,90522,1404],{"class":238},[228,90524,90525,90527,90529,90531],{"class":230,"line":1737},[228,90526,54999],{"class":287},[228,90528,51552],{"class":238},[228,90530,90121],{"class":287},[228,90532,1404],{"class":238},[228,90534,90535,90537,90539,90541,90543],{"class":230,"line":1742},[228,90536,55037],{"class":287},[228,90538,51552],{"class":238},[228,90540,1063],{"class":287},[228,90542,51607],{"class":234},[228,90544,1404],{"class":238},[228,90546,90547,90549,90551,90553],{"class":230,"line":1756},[228,90548,57531],{"class":287},[228,90550,51552],{"class":238},[228,90552,60957],{"class":287},[228,90554,1404],{"class":238},[228,90556,90557,90559,90561,90563],{"class":230,"line":1761},[228,90558,57401],{"class":287},[228,90560,51552],{"class":238},[228,90562,51707],{"class":287},[228,90564,1404],{"class":238},[228,90566,90567,90569,90571,90573,90575],{"class":230,"line":1767},[228,90568,90160],{"class":287},[228,90570,51552],{"class":238},[228,90572,557],{"class":287},[228,90574,51607],{"class":234},[228,90576,1404],{"class":238},[228,90578,90579],{"class":230,"line":1788},[228,90580,2301],{"class":238},[228,90582,90583,90585,90587],{"class":230,"line":1793},[228,90584,52532],{"class":238},[228,90586,5241],{"class":51415},[228,90588,51422],{"class":238},[228,90590,90591,90593,90595],{"class":230,"line":1807},[228,90592,51900],{"class":238},[228,90594,51449],{"class":51415},[228,90596,51422],{"class":238},[228,90598,90599],{"class":230,"line":1812},[228,90600,2514],{"emptyLinePlaceholder":157},[228,90602,90603,90605,90607],{"class":230,"line":1841},[228,90604,1148],{"class":238},[228,90606,51915],{"class":51415},[228,90608,51422],{"class":238},[228,90610,90611,90613,90615,90617,90619,90621,90623,90625],{"class":230,"line":1846},[228,90612,52259],{"class":238},[228,90614,51726],{"class":51415},[228,90616,53601],{"class":2077},[228,90618,284],{"class":238},[228,90620,53606],{"class":343},[228,90622,55429],{"class":238},[228,90624,51726],{"class":51415},[228,90626,51422],{"class":238},[228,90628,90629,90631,90633,90635,90637,90639,90641,90643],{"class":230,"line":1863},[228,90630,52259],{"class":238},[228,90632,51928],{"class":51415},[228,90634,55354],{"class":2077},[228,90636,284],{"class":238},[228,90638,88389],{"class":343},[228,90640,55429],{"class":238},[228,90642,51928],{"class":51415},[228,90644,51422],{"class":238},[228,90646,90647,90649,90651],{"class":230,"line":1868},[228,90648,52259],{"class":238},[228,90650,51928],{"class":51415},[228,90652,51422],{"class":238},[228,90654,90655,90657,90659,90661,90663,90665,90667,90669],{"class":230,"line":1873},[228,90656,11336],{"class":234},[228,90658,87048],{"class":287},[228,90660,13679],{"class":234},[228,90662,54511],{"class":238},[228,90664,54514],{"class":2077},[228,90666,239],{"class":238},[228,90668,90261],{"class":343},[228,90670,245],{"class":238},[228,90672,90673,90675,90677,90679],{"class":230,"line":1878},[228,90674,52334],{"class":234},[228,90676,9553],{"class":238},[228,90678,284],{"class":234},[228,90680,47448],{"class":287},[228,90682,90683,90685,90687],{"class":230,"line":1892},[228,90684,70199],{"class":234},[228,90686,90280],{"class":2077},[228,90688,10968],{"class":238},[228,90690,90691,90693,90695,90697],{"class":230,"line":1897},[228,90692,90287],{"class":238},[228,90694,284],{"class":234},[228,90696,3146],{"class":238},[228,90698,2816],{"class":234},[228,90700,90701],{"class":230,"line":2691},[228,90702,90298],{"class":297},[228,90704,90705],{"class":230,"line":2705},[228,90706,2301],{"class":238},[228,90708,90709],{"class":230,"line":2713},[228,90710,90307],{"class":297},[228,90712,90713],{"class":230,"line":2718},[228,90714,90715],{"class":297},"    \u002F\u002F 手写防抖函数\n",[228,90717,90718],{"class":230,"line":2724},[228,90719,90720],{"class":297},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[228,90722,90723],{"class":230,"line":2730},[228,90724,90725],{"class":297},"    \u002F\u002F 1.声明定时器变量\n",[228,90727,90728],{"class":230,"line":2735},[228,90729,90730],{"class":297},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[228,90732,90733],{"class":230,"line":8063},[228,90734,90735],{"class":297},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[228,90737,90738],{"class":230,"line":8087},[228,90739,90740],{"class":297},"    \u002F\u002F 4.定时器里面写函数调用\n",[228,90742,90743,90745,90748,90750,90753,90755,90757],{"class":230,"line":8092},[228,90744,70199],{"class":234},[228,90746,90747],{"class":2077}," debounce",[228,90749,239],{"class":238},[228,90751,90752],{"class":5331},"fn",[228,90754,12550],{"class":238},[228,90756,958],{"class":5331},[228,90758,12557],{"class":238},[228,90760,90761,90763],{"class":230,"line":8098},[228,90762,79887],{"class":234},[228,90764,90765],{"class":238}," timer\n",[228,90767,90768],{"class":230,"line":8125},[228,90769,90770],{"class":297},"      \u002F\u002F return 返回一个匿名函数\n",[228,90772,90773,90775,90777],{"class":230,"line":8130},[228,90774,74097],{"class":234},[228,90776,59033],{"class":234},[228,90778,54567],{"class":238},[228,90780,90781],{"class":230,"line":8136},[228,90782,90783],{"class":297},"        \u002F\u002F 这里边写第二三四步\n",[228,90785,90786,90788,90791,90794],{"class":230,"line":8148},[228,90787,2611],{"class":234},[228,90789,90790],{"class":238}," (timer) ",[228,90792,90793],{"class":2077},"clearTimeout",[228,90795,90796],{"class":238},"(timer)\n",[228,90798,90799,90802,90804,90807,90809,90811],{"class":230,"line":8160},[228,90800,90801],{"class":238},"        timer ",[228,90803,284],{"class":234},[228,90805,90806],{"class":2077}," setTimeout",[228,90808,239],{"class":238},[228,90810,54564],{"class":234},[228,90812,54567],{"class":238},[228,90814,90815,90818,90820],{"class":230,"line":8172},[228,90816,90817],{"class":2077},"          fn",[228,90819,13165],{"class":238},[228,90821,90822],{"class":297},"\u002F\u002F加小括号调用fn }, t)\n",[228,90824,90825],{"class":230,"line":9831},[228,90826,90827],{"class":238},"        }, t)\n",[228,90829,90830],{"class":230,"line":9856},[228,90831,52513],{"class":238},[228,90833,90834],{"class":230,"line":9879},[228,90835,2301],{"class":238},[228,90837,90838,90840,90842,90844,90846,90848,90850,90852,90854],{"class":230,"line":9903},[228,90839,90322],{"class":238},[228,90841,57928],{"class":2077},[228,90843,239],{"class":238},[228,90845,90329],{"class":343},[228,90847,12550],{"class":238},[228,90849,90335],{"class":2077},[228,90851,90338],{"class":238},[228,90853,65189],{"class":287},[228,90855,30612],{"class":238},[228,90857,90858],{"class":230,"line":9908},[228,90859,2514],{"emptyLinePlaceholder":157},[228,90861,90862],{"class":230,"line":9913},[228,90863,90864],{"class":297},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[228,90866,90867],{"class":230,"line":9918},[228,90868,90869],{"class":297},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[228,90871,90872],{"class":230,"line":9927},[228,90873,90874],{"class":297},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[228,90876,90877],{"class":230,"line":9932},[228,90878,90879],{"class":297},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[228,90881,90882,90884,90886],{"class":230,"line":9938},[228,90883,52532],{"class":238},[228,90885,51928],{"class":51415},[228,90887,51422],{"class":238},[228,90889,90890,90892,90894],{"class":230,"line":9959},[228,90891,51900],{"class":238},[228,90893,51915],{"class":51415},[228,90895,51422],{"class":238},[228,90897,90898],{"class":230,"line":9965},[228,90899,2514],{"emptyLinePlaceholder":157},[228,90901,90902,90904,90906],{"class":230,"line":9979},[228,90903,51900],{"class":238},[228,90905,50750],{"class":51415},[228,90907,51422],{"class":238},[200,90909,90911],{"id":90910},"_4172-节流","4.17.2 节流",[19,90913,90914],{},[1576,90915],{"alt":141,"src":90916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,90918,90919],{},[1576,90920],{"alt":141,"src":90921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,90923,90924],{},[388,90925,90926],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,90928,90929],{},"实现方式：",[1245,90931,90932],{},[186,90933,90934],{},"lodash 提供的节流函数来处理",[19,90936,90937],{},"_.throttle(func,[wait=0],[options=])",[19,90939,90940],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[220,90942,90944],{"className":50748,"code":90943,"language":50750,"meta":141,"style":141},"\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",[30,90945,90946,90956,90970,90974,90982,90996,91016,91028,91036,91042,91052,91064,91076,91086,91098,91108,91118,91130,91134,91142,91150,91154,91162,91180,91198,91206,91224,91234,91242,91252,91256,91260,91264,91269,91274,91295,91303,91311,91315],{"__ignoreMap":141},[228,90947,90948,90950,90952,90954],{"class":230,"line":231},[228,90949,51412],{"class":238},[228,90951,51416],{"class":51415},[228,90953,51419],{"class":2077},[228,90955,51422],{"class":238},[228,90957,90958,90960,90962,90964,90966,90968],{"class":230,"line":142},[228,90959,1148],{"class":238},[228,90961,50750],{"class":51415},[228,90963,51431],{"class":2077},[228,90965,284],{"class":238},[228,90967,51436],{"class":343},[228,90969,51422],{"class":238},[228,90971,90972],{"class":230,"line":1293},[228,90973,2514],{"emptyLinePlaceholder":157},[228,90975,90976,90978,90980],{"class":230,"line":1308},[228,90977,1148],{"class":238},[228,90979,51449],{"class":51415},[228,90981,51422],{"class":238},[228,90983,90984,90986,90988,90990,90992,90994],{"class":230,"line":1314},[228,90985,52259],{"class":238},[228,90987,51459],{"class":51415},[228,90989,51462],{"class":2077},[228,90991,284],{"class":238},[228,90993,51467],{"class":343},[228,90995,51422],{"class":238},[228,90997,90998,91000,91002,91004,91006,91008,91010,91012,91014],{"class":230,"line":1328},[228,90999,52259],{"class":238},[228,91001,51459],{"class":51415},[228,91003,15035],{"class":2077},[228,91005,284],{"class":238},[228,91007,51506],{"class":343},[228,91009,51486],{"class":2077},[228,91011,284],{"class":238},[228,91013,51513],{"class":343},[228,91015,51422],{"class":238},[228,91017,91018,91020,91022,91024,91026],{"class":230,"line":1334},[228,91019,52259],{"class":238},[228,91021,51522],{"class":51415},[228,91023,51525],{"class":238},[228,91025,51522],{"class":51415},[228,91027,51422],{"class":238},[228,91029,91030,91032,91034],{"class":230,"line":1425},[228,91031,52259],{"class":238},[228,91033,5241],{"class":51415},[228,91035,51422],{"class":238},[228,91037,91038,91040],{"class":230,"line":1431},[228,91039,54867],{"class":2077},[228,91041,15687],{"class":238},[228,91043,91044,91046,91048,91050],{"class":230,"line":1443},[228,91045,72711],{"class":287},[228,91047,51552],{"class":238},[228,91049,60620],{"class":287},[228,91051,1404],{"class":238},[228,91053,91054,91056,91058,91060,91062],{"class":230,"line":1726},[228,91055,54886],{"class":287},[228,91057,51552],{"class":238},[228,91059,1836],{"class":287},[228,91061,51607],{"class":234},[228,91063,1404],{"class":238},[228,91065,91066,91068,91070,91072,91074],{"class":230,"line":1731},[228,91067,54900],{"class":287},[228,91069,51552],{"class":238},[228,91071,1836],{"class":287},[228,91073,51607],{"class":234},[228,91075,1404],{"class":238},[228,91077,91078,91080,91082,91084],{"class":230,"line":1737},[228,91079,54999],{"class":287},[228,91081,51552],{"class":238},[228,91083,90121],{"class":287},[228,91085,1404],{"class":238},[228,91087,91088,91090,91092,91094,91096],{"class":230,"line":1742},[228,91089,55037],{"class":287},[228,91091,51552],{"class":238},[228,91093,1063],{"class":287},[228,91095,51607],{"class":234},[228,91097,1404],{"class":238},[228,91099,91100,91102,91104,91106],{"class":230,"line":1756},[228,91101,57531],{"class":287},[228,91103,51552],{"class":238},[228,91105,60957],{"class":287},[228,91107,1404],{"class":238},[228,91109,91110,91112,91114,91116],{"class":230,"line":1761},[228,91111,57401],{"class":287},[228,91113,51552],{"class":238},[228,91115,51707],{"class":287},[228,91117,1404],{"class":238},[228,91119,91120,91122,91124,91126,91128],{"class":230,"line":1767},[228,91121,90160],{"class":287},[228,91123,51552],{"class":238},[228,91125,557],{"class":287},[228,91127,51607],{"class":234},[228,91129,1404],{"class":238},[228,91131,91132],{"class":230,"line":1788},[228,91133,2301],{"class":238},[228,91135,91136,91138,91140],{"class":230,"line":1793},[228,91137,52532],{"class":238},[228,91139,5241],{"class":51415},[228,91141,51422],{"class":238},[228,91143,91144,91146,91148],{"class":230,"line":1807},[228,91145,51900],{"class":238},[228,91147,51449],{"class":51415},[228,91149,51422],{"class":238},[228,91151,91152],{"class":230,"line":1812},[228,91153,2514],{"emptyLinePlaceholder":157},[228,91155,91156,91158,91160],{"class":230,"line":1841},[228,91157,1148],{"class":238},[228,91159,51915],{"class":51415},[228,91161,51422],{"class":238},[228,91163,91164,91166,91168,91170,91172,91174,91176,91178],{"class":230,"line":1846},[228,91165,52259],{"class":238},[228,91167,51726],{"class":51415},[228,91169,53601],{"class":2077},[228,91171,284],{"class":238},[228,91173,53606],{"class":343},[228,91175,55429],{"class":238},[228,91177,51726],{"class":51415},[228,91179,51422],{"class":238},[228,91181,91182,91184,91186,91188,91190,91192,91194,91196],{"class":230,"line":1863},[228,91183,52259],{"class":238},[228,91185,51928],{"class":51415},[228,91187,55354],{"class":2077},[228,91189,284],{"class":238},[228,91191,88389],{"class":343},[228,91193,55429],{"class":238},[228,91195,51928],{"class":51415},[228,91197,51422],{"class":238},[228,91199,91200,91202,91204],{"class":230,"line":1868},[228,91201,52259],{"class":238},[228,91203,51928],{"class":51415},[228,91205,51422],{"class":238},[228,91207,91208,91210,91212,91214,91216,91218,91220,91222],{"class":230,"line":1873},[228,91209,11336],{"class":234},[228,91211,87048],{"class":287},[228,91213,13679],{"class":234},[228,91215,54511],{"class":238},[228,91217,54514],{"class":2077},[228,91219,239],{"class":238},[228,91221,90261],{"class":343},[228,91223,245],{"class":238},[228,91225,91226,91228,91230,91232],{"class":230,"line":1878},[228,91227,52334],{"class":234},[228,91229,9553],{"class":238},[228,91231,284],{"class":234},[228,91233,47448],{"class":287},[228,91235,91236,91238,91240],{"class":230,"line":1892},[228,91237,70199],{"class":234},[228,91239,90280],{"class":2077},[228,91241,10968],{"class":238},[228,91243,91244,91246,91248,91250],{"class":230,"line":1897},[228,91245,90287],{"class":238},[228,91247,284],{"class":234},[228,91249,3146],{"class":238},[228,91251,2816],{"class":234},[228,91253,91254],{"class":230,"line":2691},[228,91255,90298],{"class":297},[228,91257,91258],{"class":230,"line":2705},[228,91259,2301],{"class":238},[228,91261,91262],{"class":230,"line":2713},[228,91263,90307],{"class":297},[228,91265,91266],{"class":230,"line":2718},[228,91267,91268],{"class":297},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[228,91270,91271],{"class":230,"line":2724},[228,91272,91273],{"class":297},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[228,91275,91276,91278,91280,91282,91284,91286,91289,91291,91293],{"class":230,"line":2730},[228,91277,90322],{"class":238},[228,91279,57928],{"class":2077},[228,91281,239],{"class":238},[228,91283,90329],{"class":343},[228,91285,90332],{"class":238},[228,91287,91288],{"class":2077},"throttle",[228,91290,90338],{"class":238},[228,91292,65189],{"class":287},[228,91294,30612],{"class":238},[228,91296,91297,91299,91301],{"class":230,"line":2735},[228,91298,52532],{"class":238},[228,91300,51928],{"class":51415},[228,91302,51422],{"class":238},[228,91304,91305,91307,91309],{"class":230,"line":8063},[228,91306,51900],{"class":238},[228,91308,51915],{"class":51415},[228,91310,51422],{"class":238},[228,91312,91313],{"class":230,"line":8087},[228,91314,2514],{"emptyLinePlaceholder":157},[228,91316,91317,91319,91321],{"class":230,"line":8092},[228,91318,51900],{"class":238},[228,91320,50750],{"class":51415},[228,91322,51422],{"class":238},[1245,91324,91325],{},[186,91326,91327],{},"手写一个节流函数来处理",[19,91329,71067],{},[19,91331,90381],{},[19,91333,91334],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,91336,91337],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[220,91339,91341],{"className":50748,"code":91340,"language":50750,"meta":141,"style":141},"\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",[30,91342,91343,91353,91367,91371,91379,91393,91413,91425,91433,91439,91449,91461,91473,91483,91495,91505,91515,91527,91531,91539,91547,91551,91559,91577,91595,91603,91621,91631,91639,91649,91653,91657,91661,91666,91671,91676,91681,91686,91691,91708,91714,91722,91733,91748,91755,91760,91765,91775,91780,91785,91790,91794,91798,91802,91822,91830,91838,91842],{"__ignoreMap":141},[228,91344,91345,91347,91349,91351],{"class":230,"line":231},[228,91346,51412],{"class":238},[228,91348,51416],{"class":51415},[228,91350,51419],{"class":2077},[228,91352,51422],{"class":238},[228,91354,91355,91357,91359,91361,91363,91365],{"class":230,"line":142},[228,91356,1148],{"class":238},[228,91358,50750],{"class":51415},[228,91360,51431],{"class":2077},[228,91362,284],{"class":238},[228,91364,51436],{"class":343},[228,91366,51422],{"class":238},[228,91368,91369],{"class":230,"line":1293},[228,91370,2514],{"emptyLinePlaceholder":157},[228,91372,91373,91375,91377],{"class":230,"line":1308},[228,91374,1148],{"class":238},[228,91376,51449],{"class":51415},[228,91378,51422],{"class":238},[228,91380,91381,91383,91385,91387,91389,91391],{"class":230,"line":1314},[228,91382,52259],{"class":238},[228,91384,51459],{"class":51415},[228,91386,51462],{"class":2077},[228,91388,284],{"class":238},[228,91390,51467],{"class":343},[228,91392,51422],{"class":238},[228,91394,91395,91397,91399,91401,91403,91405,91407,91409,91411],{"class":230,"line":1328},[228,91396,52259],{"class":238},[228,91398,51459],{"class":51415},[228,91400,15035],{"class":2077},[228,91402,284],{"class":238},[228,91404,51506],{"class":343},[228,91406,51486],{"class":2077},[228,91408,284],{"class":238},[228,91410,51513],{"class":343},[228,91412,51422],{"class":238},[228,91414,91415,91417,91419,91421,91423],{"class":230,"line":1334},[228,91416,52259],{"class":238},[228,91418,51522],{"class":51415},[228,91420,51525],{"class":238},[228,91422,51522],{"class":51415},[228,91424,51422],{"class":238},[228,91426,91427,91429,91431],{"class":230,"line":1425},[228,91428,52259],{"class":238},[228,91430,5241],{"class":51415},[228,91432,51422],{"class":238},[228,91434,91435,91437],{"class":230,"line":1431},[228,91436,54867],{"class":2077},[228,91438,15687],{"class":238},[228,91440,91441,91443,91445,91447],{"class":230,"line":1443},[228,91442,72711],{"class":287},[228,91444,51552],{"class":238},[228,91446,60620],{"class":287},[228,91448,1404],{"class":238},[228,91450,91451,91453,91455,91457,91459],{"class":230,"line":1726},[228,91452,54886],{"class":287},[228,91454,51552],{"class":238},[228,91456,1836],{"class":287},[228,91458,51607],{"class":234},[228,91460,1404],{"class":238},[228,91462,91463,91465,91467,91469,91471],{"class":230,"line":1731},[228,91464,54900],{"class":287},[228,91466,51552],{"class":238},[228,91468,1836],{"class":287},[228,91470,51607],{"class":234},[228,91472,1404],{"class":238},[228,91474,91475,91477,91479,91481],{"class":230,"line":1737},[228,91476,54999],{"class":287},[228,91478,51552],{"class":238},[228,91480,90121],{"class":287},[228,91482,1404],{"class":238},[228,91484,91485,91487,91489,91491,91493],{"class":230,"line":1742},[228,91486,55037],{"class":287},[228,91488,51552],{"class":238},[228,91490,1063],{"class":287},[228,91492,51607],{"class":234},[228,91494,1404],{"class":238},[228,91496,91497,91499,91501,91503],{"class":230,"line":1756},[228,91498,57531],{"class":287},[228,91500,51552],{"class":238},[228,91502,60957],{"class":287},[228,91504,1404],{"class":238},[228,91506,91507,91509,91511,91513],{"class":230,"line":1761},[228,91508,57401],{"class":287},[228,91510,51552],{"class":238},[228,91512,51707],{"class":287},[228,91514,1404],{"class":238},[228,91516,91517,91519,91521,91523,91525],{"class":230,"line":1767},[228,91518,90160],{"class":287},[228,91520,51552],{"class":238},[228,91522,557],{"class":287},[228,91524,51607],{"class":234},[228,91526,1404],{"class":238},[228,91528,91529],{"class":230,"line":1788},[228,91530,2301],{"class":238},[228,91532,91533,91535,91537],{"class":230,"line":1793},[228,91534,52532],{"class":238},[228,91536,5241],{"class":51415},[228,91538,51422],{"class":238},[228,91540,91541,91543,91545],{"class":230,"line":1807},[228,91542,51900],{"class":238},[228,91544,51449],{"class":51415},[228,91546,51422],{"class":238},[228,91548,91549],{"class":230,"line":1812},[228,91550,2514],{"emptyLinePlaceholder":157},[228,91552,91553,91555,91557],{"class":230,"line":1841},[228,91554,1148],{"class":238},[228,91556,51915],{"class":51415},[228,91558,51422],{"class":238},[228,91560,91561,91563,91565,91567,91569,91571,91573,91575],{"class":230,"line":1846},[228,91562,52259],{"class":238},[228,91564,51726],{"class":51415},[228,91566,53601],{"class":2077},[228,91568,284],{"class":238},[228,91570,53606],{"class":343},[228,91572,55429],{"class":238},[228,91574,51726],{"class":51415},[228,91576,51422],{"class":238},[228,91578,91579,91581,91583,91585,91587,91589,91591,91593],{"class":230,"line":1863},[228,91580,52259],{"class":238},[228,91582,51928],{"class":51415},[228,91584,55354],{"class":2077},[228,91586,284],{"class":238},[228,91588,88389],{"class":343},[228,91590,55429],{"class":238},[228,91592,51928],{"class":51415},[228,91594,51422],{"class":238},[228,91596,91597,91599,91601],{"class":230,"line":1868},[228,91598,52259],{"class":238},[228,91600,51928],{"class":51415},[228,91602,51422],{"class":238},[228,91604,91605,91607,91609,91611,91613,91615,91617,91619],{"class":230,"line":1873},[228,91606,11336],{"class":234},[228,91608,87048],{"class":287},[228,91610,13679],{"class":234},[228,91612,54511],{"class":238},[228,91614,54514],{"class":2077},[228,91616,239],{"class":238},[228,91618,90261],{"class":343},[228,91620,245],{"class":238},[228,91622,91623,91625,91627,91629],{"class":230,"line":1878},[228,91624,52334],{"class":234},[228,91626,9553],{"class":238},[228,91628,284],{"class":234},[228,91630,47448],{"class":287},[228,91632,91633,91635,91637],{"class":230,"line":1892},[228,91634,70199],{"class":234},[228,91636,90280],{"class":2077},[228,91638,10968],{"class":238},[228,91640,91641,91643,91645,91647],{"class":230,"line":1897},[228,91642,90287],{"class":238},[228,91644,284],{"class":234},[228,91646,3146],{"class":238},[228,91648,2816],{"class":234},[228,91650,91651],{"class":230,"line":2691},[228,91652,90298],{"class":297},[228,91654,91655],{"class":230,"line":2705},[228,91656,2301],{"class":238},[228,91658,91659],{"class":230,"line":2713},[228,91660,90307],{"class":297},[228,91662,91663],{"class":230,"line":2718},[228,91664,91665],{"class":297},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[228,91667,91668],{"class":230,"line":2724},[228,91669,91670],{"class":297},"    \u002F\u002F 1.声明一个定时器变量\n",[228,91672,91673],{"class":230,"line":2730},[228,91674,91675],{"class":297},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[228,91677,91678],{"class":230,"line":2735},[228,91679,91680],{"class":297},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[228,91682,91683],{"class":230,"line":8063},[228,91684,91685],{"class":297},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[228,91687,91688],{"class":230,"line":8087},[228,91689,91690],{"class":297},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[228,91692,91693,91695,91698,91700,91702,91704,91706],{"class":230,"line":8092},[228,91694,70199],{"class":234},[228,91696,91697],{"class":2077}," throttle",[228,91699,239],{"class":238},[228,91701,90752],{"class":5331},[228,91703,12550],{"class":238},[228,91705,958],{"class":5331},[228,91707,12557],{"class":238},[228,91709,91710,91712],{"class":230,"line":8098},[228,91711,79887],{"class":234},[228,91713,90765],{"class":238},[228,91715,91716,91718,91720],{"class":230,"line":8125},[228,91717,74097],{"class":234},[228,91719,59033],{"class":234},[228,91721,54567],{"class":238},[228,91723,91724,91726,91728,91730],{"class":230,"line":8130},[228,91725,2611],{"class":234},[228,91727,1772],{"class":238},[228,91729,32],{"class":234},[228,91731,91732],{"class":238},"timer) {\n",[228,91734,91735,91738,91740,91742,91744,91746],{"class":230,"line":8136},[228,91736,91737],{"class":238},"          timer ",[228,91739,284],{"class":234},[228,91741,90806],{"class":2077},[228,91743,239],{"class":238},[228,91745,54564],{"class":234},[228,91747,54567],{"class":238},[228,91749,91750,91753],{"class":230,"line":8148},[228,91751,91752],{"class":2077},"            fn",[228,91754,2090],{"class":238},[228,91756,91757],{"class":230,"line":8160},[228,91758,91759],{"class":297},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[228,91761,91762],{"class":230,"line":8172},[228,91763,91764],{"class":297},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[228,91766,91767,91770,91772],{"class":230,"line":9831},[228,91768,91769],{"class":238},"            timer ",[228,91771,284],{"class":234},[228,91773,91774],{"class":287}," null\n",[228,91776,91777],{"class":230,"line":9856},[228,91778,91779],{"class":297},"            \u002F\u002F 不能用clearTimeout(timer)\n",[228,91781,91782],{"class":230,"line":9879},[228,91783,91784],{"class":297},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[228,91786,91787],{"class":230,"line":9903},[228,91788,91789],{"class":238},"          }, t)\n",[228,91791,91792],{"class":230,"line":9908},[228,91793,2643],{"class":238},[228,91795,91796],{"class":230,"line":9913},[228,91797,52513],{"class":238},[228,91799,91800],{"class":230,"line":9918},[228,91801,2301],{"class":238},[228,91803,91804,91806,91808,91810,91812,91814,91816,91818,91820],{"class":230,"line":9927},[228,91805,90322],{"class":238},[228,91807,57928],{"class":2077},[228,91809,239],{"class":238},[228,91811,90329],{"class":343},[228,91813,12550],{"class":238},[228,91815,91288],{"class":2077},[228,91817,90338],{"class":238},[228,91819,65189],{"class":287},[228,91821,30612],{"class":238},[228,91823,91824,91826,91828],{"class":230,"line":9932},[228,91825,52532],{"class":238},[228,91827,51928],{"class":51415},[228,91829,51422],{"class":238},[228,91831,91832,91834,91836],{"class":230,"line":9938},[228,91833,51900],{"class":238},[228,91835,51915],{"class":51415},[228,91837,51422],{"class":238},[228,91839,91840],{"class":230,"line":9959},[228,91841,2514],{"emptyLinePlaceholder":157},[228,91843,91844,91846,91848],{"class":230,"line":9965},[228,91845,51900],{"class":238},[228,91847,50750],{"class":51415},[228,91849,51422],{"class":238},[200,91851,91853],{"id":91852},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[220,91855,91857],{"className":53182,"code":91856,"language":53184,"meta":141,"style":141},"\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",[30,91858,91859,91867,91875,91880,91885,91890,91895,91899,91907],{"__ignoreMap":141},[228,91860,91861,91863,91865],{"class":230,"line":231},[228,91862,1148],{"class":238},[228,91864,51915],{"class":51415},[228,91866,51422],{"class":238},[228,91868,91869,91871,91873],{"class":230,"line":142},[228,91870,52259],{"class":238},[228,91872,51928],{"class":51415},[228,91874,51422],{"class":238},[228,91876,91877],{"class":230,"line":1293},[228,91878,91879],{"class":238},"    let timer = null\n",[228,91881,91882],{"class":230,"line":1308},[228,91883,91884],{"class":238},"    timer = setTimeout(() => {\n",[228,91886,91887],{"class":230,"line":1314},[228,91888,91889],{"class":238},"      clearTimeout(timer)\n",[228,91891,91892],{"class":230,"line":1328},[228,91893,91894],{"class":238},"      console.log(timer)\n",[228,91896,91897],{"class":230,"line":1334},[228,91898,60340],{"class":238},[228,91900,91901,91903,91905],{"class":230,"line":1425},[228,91902,52532],{"class":238},[228,91904,51928],{"class":51415},[228,91906,51422],{"class":238},[228,91908,91909,91911,91913],{"class":230,"line":1431},[228,91910,51900],{"class":238},[228,91912,51915],{"class":51415},[228,91914,51422],{"class":238},[19,91916,91917],{},"输出为1",[19,91919,91920],{},"在开启的定时器里边写清除定时器",[19,91922,91923],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[200,91925,91927],{"id":91926},"_4174-节流综合案例","4.17.4 节流综合案例",[19,91929,91930],{},"页面打开，可以记录上一次的视频播放位置",[19,91932,91933],{},[1576,91934],{"alt":141,"src":91935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,91937,91938],{},[1576,91939],{"alt":141,"src":91940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[220,91942,91944],{"className":50748,"code":91943,"language":50750,"meta":141,"style":141},"\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",[30,91945,91946,91956,91970,91974,91982,91996,92016,92036,92058,92071,92079,92085,92095,92105,92115,92119,92123,92130,92143,92155,92159,92163,92173,92185,92199,92203,92207,92214,92224,92237,92249,92259,92269,92285,92297,92301,92305,92313,92323,92335,92345,92355,92365,92369,92373,92383,92394,92398,92406,92414,92418,92426,92441,92456,92471,92492,92500,92508,92523,92545,92553,92568,92594,92620,92646,92654,92662,92681,92689,92694,92713,92718,92736,92741,92746,92754,92759,92773,92781,92786,92803,92807,92812,92834,92838,92846,92854,92858],{"__ignoreMap":141},[228,91947,91948,91950,91952,91954],{"class":230,"line":231},[228,91949,51412],{"class":238},[228,91951,51416],{"class":51415},[228,91953,51419],{"class":2077},[228,91955,51422],{"class":238},[228,91957,91958,91960,91962,91964,91966,91968],{"class":230,"line":142},[228,91959,1148],{"class":238},[228,91961,50750],{"class":51415},[228,91963,51431],{"class":2077},[228,91965,284],{"class":238},[228,91967,51436],{"class":343},[228,91969,51422],{"class":238},[228,91971,91972],{"class":230,"line":1293},[228,91973,2514],{"emptyLinePlaceholder":157},[228,91975,91976,91978,91980],{"class":230,"line":1308},[228,91977,1148],{"class":238},[228,91979,51449],{"class":51415},[228,91981,51422],{"class":238},[228,91983,91984,91986,91988,91990,91992,91994],{"class":230,"line":1314},[228,91985,52259],{"class":238},[228,91987,51459],{"class":51415},[228,91989,51462],{"class":2077},[228,91991,284],{"class":238},[228,91993,51467],{"class":343},[228,91995,59242],{"class":238},[228,91997,91998,92000,92002,92004,92006,92008,92010,92012,92014],{"class":230,"line":1328},[228,91999,52259],{"class":238},[228,92001,51459],{"class":51415},[228,92003,51478],{"class":2077},[228,92005,284],{"class":238},[228,92007,51483],{"class":343},[228,92009,51486],{"class":2077},[228,92011,284],{"class":238},[228,92013,51491],{"class":343},[228,92015,59242],{"class":238},[228,92017,92018,92020,92022,92024,92026,92028,92030,92032,92034],{"class":230,"line":1334},[228,92019,52259],{"class":238},[228,92021,51459],{"class":51415},[228,92023,15035],{"class":2077},[228,92025,284],{"class":238},[228,92027,51506],{"class":343},[228,92029,51486],{"class":2077},[228,92031,284],{"class":238},[228,92033,51513],{"class":343},[228,92035,59242],{"class":238},[228,92037,92038,92040,92042,92044,92046,92049,92051,92053,92056],{"class":230,"line":1425},[228,92039,52259],{"class":238},[228,92041,51459],{"class":51415},[228,92043,15035],{"class":2077},[228,92045,284],{"class":238},[228,92047,92048],{"class":343},"\"referrer\"",[228,92050,51486],{"class":2077},[228,92052,284],{"class":238},[228,92054,92055],{"class":343},"\"never\"",[228,92057,59242],{"class":238},[228,92059,92060,92062,92064,92067,92069],{"class":230,"line":1431},[228,92061,52259],{"class":238},[228,92063,51522],{"class":51415},[228,92065,92066],{"class":238},">综合案例\u003C\u002F",[228,92068,51522],{"class":51415},[228,92070,51422],{"class":238},[228,92072,92073,92075,92077],{"class":230,"line":1443},[228,92074,52259],{"class":238},[228,92076,5241],{"class":51415},[228,92078,51422],{"class":238},[228,92080,92081,92083],{"class":230,"line":1726},[228,92082,6518],{"class":51415},[228,92084,15687],{"class":238},[228,92086,92087,92089,92091,92093],{"class":230,"line":1731},[228,92088,54810],{"class":287},[228,92090,51552],{"class":238},[228,92092,430],{"class":287},[228,92094,1404],{"class":238},[228,92096,92097,92099,92101,92103],{"class":230,"line":1737},[228,92098,54821],{"class":287},[228,92100,51552],{"class":238},[228,92102,430],{"class":287},[228,92104,1404],{"class":238},[228,92106,92107,92109,92111,92113],{"class":230,"line":1742},[228,92108,72711],{"class":287},[228,92110,51552],{"class":238},[228,92112,60620],{"class":287},[228,92114,1404],{"class":238},[228,92116,92117],{"class":230,"line":1756},[228,92118,2301],{"class":238},[228,92120,92121],{"class":230,"line":1761},[228,92122,2514],{"emptyLinePlaceholder":157},[228,92124,92125,92128],{"class":230,"line":1767},[228,92126,92127],{"class":2077},"    .container",[228,92129,15687],{"class":238},[228,92131,92132,92134,92136,92139,92141],{"class":230,"line":1788},[228,92133,54886],{"class":287},[228,92135,51552],{"class":238},[228,92137,92138],{"class":287},"1200",[228,92140,51607],{"class":234},[228,92142,1404],{"class":238},[228,92144,92145,92147,92149,92151,92153],{"class":230,"line":1793},[228,92146,54821],{"class":287},[228,92148,51552],{"class":238},[228,92150,430],{"class":287},[228,92152,51671],{"class":287},[228,92154,1404],{"class":238},[228,92156,92157],{"class":230,"line":1807},[228,92158,2301],{"class":238},[228,92160,92161],{"class":230,"line":1812},[228,92162,2514],{"emptyLinePlaceholder":157},[228,92164,92165,92168,92171],{"class":230,"line":1841},[228,92166,92167],{"class":2077},"    .video",[228,92169,92170],{"class":51415}," video",[228,92172,15687],{"class":238},[228,92174,92175,92177,92179,92181,92183],{"class":230,"line":1846},[228,92176,54886],{"class":287},[228,92178,51552],{"class":238},[228,92180,549],{"class":287},[228,92182,566],{"class":234},[228,92184,1404],{"class":238},[228,92186,92187,92189,92191,92193,92195,92197],{"class":230,"line":1863},[228,92188,54810],{"class":287},[228,92190,51552],{"class":238},[228,92192,938],{"class":287},[228,92194,51607],{"class":234},[228,92196,4207],{"class":287},[228,92198,1404],{"class":238},[228,92200,92201],{"class":230,"line":1868},[228,92202,2301],{"class":238},[228,92204,92205],{"class":230,"line":1873},[228,92206,2514],{"emptyLinePlaceholder":157},[228,92208,92209,92212],{"class":230,"line":1878},[228,92210,92211],{"class":2077},"    .elevator",[228,92213,15687],{"class":238},[228,92215,92216,92218,92220,92222],{"class":230,"line":1892},[228,92217,54874],{"class":287},[228,92219,51552],{"class":238},[228,92221,86348],{"class":287},[228,92223,1404],{"class":238},[228,92225,92226,92228,92230,92233,92235],{"class":230,"line":1897},[228,92227,55062],{"class":287},[228,92229,51552],{"class":238},[228,92231,92232],{"class":287},"280",[228,92234,51607],{"class":234},[228,92236,1404],{"class":238},[228,92238,92239,92241,92243,92245,92247],{"class":230,"line":2691},[228,92240,86542],{"class":287},[228,92242,51552],{"class":238},[228,92244,938],{"class":287},[228,92246,51607],{"class":234},[228,92248,1404],{"class":238},[228,92250,92251,92253,92255,92257],{"class":230,"line":2705},[228,92252,86355],{"class":287},[228,92254,51552],{"class":238},[228,92256,86360],{"class":287},[228,92258,1404],{"class":238},[228,92260,92261,92263,92265,92267],{"class":230,"line":2713},[228,92262,61836],{"class":287},[228,92264,51552],{"class":238},[228,92266,60957],{"class":287},[228,92268,1404],{"class":238},[228,92270,92271,92273,92275,92277,92279,92281,92283],{"class":230,"line":2718},[228,92272,62092],{"class":287},[228,92274,51552],{"class":238},[228,92276,456],{"class":287},[228,92278,51607],{"class":234},[228,92280,51636],{"class":287},[228,92282,62359],{"class":287},[228,92284,1404],{"class":238},[228,92286,92287,92289,92291,92293,92295],{"class":230,"line":2724},[228,92288,54886],{"class":287},[228,92290,51552],{"class":238},[228,92292,1145],{"class":287},[228,92294,51607],{"class":234},[228,92296,1404],{"class":238},[228,92298,92299],{"class":230,"line":2730},[228,92300,2301],{"class":238},[228,92302,92303],{"class":230,"line":2735},[228,92304,2514],{"emptyLinePlaceholder":157},[228,92306,92307,92309,92311],{"class":230,"line":8063},[228,92308,92211],{"class":2077},[228,92310,1512],{"class":51415},[228,92312,15687],{"class":238},[228,92314,92315,92317,92319,92321],{"class":230,"line":8087},[228,92316,55124],{"class":287},[228,92318,51552],{"class":238},[228,92320,60984],{"class":287},[228,92322,1404],{"class":238},[228,92324,92325,92327,92329,92331,92333],{"class":230,"line":8092},[228,92326,54810],{"class":287},[228,92328,51552],{"class":238},[228,92330,684],{"class":287},[228,92332,51607],{"class":234},[228,92334,1404],{"class":238},[228,92336,92337,92339,92341,92343],{"class":230,"line":8098},[228,92338,64085],{"class":287},[228,92340,51552],{"class":238},[228,92342,54852],{"class":287},[228,92344,1404],{"class":238},[228,92346,92347,92349,92351,92353],{"class":230,"line":8125},[228,92348,57401],{"class":287},[228,92350,51552],{"class":238},[228,92352,51707],{"class":287},[228,92354,1404],{"class":238},[228,92356,92357,92359,92361,92363],{"class":230,"line":8130},[228,92358,57531],{"class":287},[228,92360,51552],{"class":238},[228,92362,62185],{"class":287},[228,92364,1404],{"class":238},[228,92366,92367],{"class":230,"line":8136},[228,92368,2301],{"class":238},[228,92370,92371],{"class":230,"line":8148},[228,92372,2514],{"emptyLinePlaceholder":157},[228,92374,92375,92377,92379,92381],{"class":230,"line":8160},[228,92376,92211],{"class":2077},[228,92378,1512],{"class":51415},[228,92380,64139],{"class":2077},[228,92382,15687],{"class":238},[228,92384,92385,92387,92389,92392],{"class":230,"line":8172},[228,92386,57531],{"class":287},[228,92388,51552],{"class":238},[228,92390,92391],{"class":287},"#1286ff",[228,92393,1404],{"class":238},[228,92395,92396],{"class":230,"line":9831},[228,92397,2301],{"class":238},[228,92399,92400,92402,92404],{"class":230,"line":9856},[228,92401,52532],{"class":238},[228,92403,5241],{"class":51415},[228,92405,51422],{"class":238},[228,92407,92408,92410,92412],{"class":230,"line":9879},[228,92409,51900],{"class":238},[228,92411,51449],{"class":51415},[228,92413,51422],{"class":238},[228,92415,92416],{"class":230,"line":9903},[228,92417,2514],{"emptyLinePlaceholder":157},[228,92419,92420,92422,92424],{"class":230,"line":9908},[228,92421,1148],{"class":238},[228,92423,51915],{"class":51415},[228,92425,51422],{"class":238},[228,92427,92428,92430,92432,92434,92436,92439],{"class":230,"line":9913},[228,92429,52259],{"class":238},[228,92431,51726],{"class":51415},[228,92433,53601],{"class":2077},[228,92435,284],{"class":238},[228,92437,92438],{"class":343},"\"container\"",[228,92440,51422],{"class":238},[228,92442,92443,92445,92447,92449,92451,92454],{"class":230,"line":9918},[228,92444,51456],{"class":238},[228,92446,51726],{"class":51415},[228,92448,53601],{"class":2077},[228,92450,284],{"class":238},[228,92452,92453],{"class":343},"\"header\"",[228,92455,51422],{"class":238},[228,92457,92458,92460,92462,92464,92466,92469],{"class":230,"line":9927},[228,92459,55349],{"class":238},[228,92461,476],{"class":51415},[228,92463,61172],{"class":2077},[228,92465,284],{"class":238},[228,92467,92468],{"class":343},"\"http:\u002F\u002Fpip.itcast.cn\"",[228,92470,51422],{"class":238},[228,92472,92473,92475,92477,92479,92481,92484,92486,92488,92490],{"class":230,"line":9932},[228,92474,55417],{"class":238},[228,92476,1576],{"class":51415},[228,92478,55354],{"class":2077},[228,92480,284],{"class":238},[228,92482,92483],{"class":343},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[228,92485,55362],{"class":2077},[228,92487,284],{"class":238},[228,92489,7767],{"class":343},[228,92491,59242],{"class":238},[228,92493,92494,92496,92498],{"class":230,"line":9938},[228,92495,55522],{"class":238},[228,92497,476],{"class":51415},[228,92499,51422],{"class":238},[228,92501,92502,92504,92506],{"class":230,"line":9959},[228,92503,51891],{"class":238},[228,92505,51726],{"class":51415},[228,92507,51422],{"class":238},[228,92509,92510,92512,92514,92516,92518,92521],{"class":230,"line":9965},[228,92511,51456],{"class":238},[228,92513,51726],{"class":51415},[228,92515,53601],{"class":2077},[228,92517,284],{"class":238},[228,92519,92520],{"class":343},"\"video\"",[228,92522,51422],{"class":238},[228,92524,92525,92527,92529,92531,92533,92536,92539,92541,92543],{"class":230,"line":9979},[228,92526,55349],{"class":238},[228,92528,28299],{"class":51415},[228,92530,55354],{"class":2077},[228,92532,284],{"class":238},[228,92534,92535],{"class":343},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[228,92537,92538],{"class":2077}," controls",[228,92540,55429],{"class":238},[228,92542,28299],{"class":51415},[228,92544,51422],{"class":238},[228,92546,92547,92549,92551],{"class":230,"line":9985},[228,92548,51891],{"class":238},[228,92550,51726],{"class":51415},[228,92552,51422],{"class":238},[228,92554,92555,92557,92559,92561,92563,92566],{"class":230,"line":10012},[228,92556,51456],{"class":238},[228,92558,51726],{"class":51415},[228,92560,53601],{"class":2077},[228,92562,284],{"class":238},[228,92564,92565],{"class":343},"\"elevator\"",[228,92567,51422],{"class":238},[228,92569,92570,92572,92574,92576,92578,92580,92583,92585,92587,92590,92592],{"class":230,"line":10021},[228,92571,55349],{"class":238},[228,92573,476],{"class":51415},[228,92575,61172],{"class":2077},[228,92577,284],{"class":238},[228,92579,64351],{"class":343},[228,92581,92582],{"class":2077}," data-ref",[228,92584,284],{"class":238},[228,92586,92520],{"class":343},[228,92588,92589],{"class":238},">视频介绍\u003C\u002F",[228,92591,476],{"class":51415},[228,92593,51422],{"class":238},[228,92595,92596,92598,92600,92602,92604,92606,92608,92610,92613,92616,92618],{"class":230,"line":10027},[228,92597,55349],{"class":238},[228,92599,476],{"class":51415},[228,92601,61172],{"class":2077},[228,92603,284],{"class":238},[228,92605,64351],{"class":343},[228,92607,92582],{"class":2077},[228,92609,284],{"class":238},[228,92611,92612],{"class":343},"\"intro\"",[228,92614,92615],{"class":238},">课程简介\u003C\u002F",[228,92617,476],{"class":51415},[228,92619,51422],{"class":238},[228,92621,92622,92624,92626,92628,92630,92632,92634,92636,92639,92642,92644],{"class":230,"line":10035},[228,92623,55349],{"class":238},[228,92625,476],{"class":51415},[228,92627,61172],{"class":2077},[228,92629,284],{"class":238},[228,92631,64351],{"class":343},[228,92633,92582],{"class":2077},[228,92635,284],{"class":238},[228,92637,92638],{"class":343},"\"outline\"",[228,92640,92641],{"class":238},">评论列表\u003C\u002F",[228,92643,476],{"class":51415},[228,92645,51422],{"class":238},[228,92647,92648,92650,92652],{"class":230,"line":10040},[228,92649,51891],{"class":238},[228,92651,51726],{"class":51415},[228,92653,51422],{"class":238},[228,92655,92656,92658,92660],{"class":230,"line":16719},[228,92657,52532],{"class":238},[228,92659,51726],{"class":51415},[228,92661,51422],{"class":238},[228,92663,92664,92666,92668,92670,92672,92675,92677,92679],{"class":230,"line":16725},[228,92665,52259],{"class":238},[228,92667,51928],{"class":51415},[228,92669,55354],{"class":2077},[228,92671,284],{"class":238},[228,92673,92674],{"class":343},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[228,92676,55429],{"class":238},[228,92678,51928],{"class":51415},[228,92680,51422],{"class":238},[228,92682,92683,92685,92687],{"class":230,"line":16748},[228,92684,52259],{"class":238},[228,92686,51928],{"class":51415},[228,92688,51422],{"class":238},[228,92690,92691],{"class":230,"line":16754},[228,92692,92693],{"class":297},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[228,92695,92696,92698,92700,92702,92704,92706,92708,92711],{"class":230,"line":16777},[228,92697,11336],{"class":234},[228,92699,92170],{"class":287},[228,92701,13679],{"class":234},[228,92703,54511],{"class":238},[228,92705,54514],{"class":2077},[228,92707,239],{"class":238},[228,92709,92710],{"class":343},"'video'",[228,92712,245],{"class":238},[228,92714,92715],{"class":230,"line":16791},[228,92716,92717],{"class":297},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[228,92719,92720,92723,92725,92727,92729,92732,92734],{"class":230,"line":16811},[228,92721,92722],{"class":238},"    video.ontimeupdate ",[228,92724,284],{"class":234},[228,92726,88470],{"class":238},[228,92728,91288],{"class":2077},[228,92730,92731],{"class":238},"(() ",[228,92733,84837],{"class":234},[228,92735,15687],{"class":238},[228,92737,92738],{"class":230,"line":16817},[228,92739,92740],{"class":297},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[228,92742,92743],{"class":230,"line":16828},[228,92744,92745],{"class":297},"      \u002F\u002F 控制台输出当前的时间\n",[228,92747,92748,92751],{"class":230,"line":16851},[228,92749,92750],{"class":297},"      \u002F\u002F console.log(video.currentTime)",[228,92752,92753],{"class":297},"  \u002F\u002F获得当前的视频时间\n",[228,92755,92756],{"class":230,"line":16873},[228,92757,92758],{"class":297},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[228,92760,92761,92763,92765,92767,92770],{"class":230,"line":16878},[228,92762,74798],{"class":238},[228,92764,71769],{"class":2077},[228,92766,239],{"class":238},[228,92768,92769],{"class":343},"'currentTime'",[228,92771,92772],{"class":238},", video.currentTime)\n",[228,92774,92775,92777,92779],{"class":230,"line":16884},[228,92776,54650],{"class":238},[228,92778,6525],{"class":287},[228,92780,245],{"class":238},[228,92782,92783],{"class":230,"line":16898},[228,92784,92785],{"class":297},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[228,92787,92788,92791,92794,92796,92799,92801],{"class":230,"line":16911},[228,92789,92790],{"class":238},"    video.",[228,92792,92793],{"class":2077},"onloadeddata",[228,92795,13679],{"class":234},[228,92797,92798],{"class":238}," () ",[228,92800,84837],{"class":234},[228,92802,15687],{"class":238},[228,92804,92805],{"class":230,"line":16916},[228,92806,60127],{"class":297},[228,92808,92809],{"class":230,"line":16930},[228,92810,92811],{"class":297},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[228,92813,92814,92817,92819,92822,92824,92826,92828,92830,92832],{"class":230,"line":16935},[228,92815,92816],{"class":238},"      video.currentTime ",[228,92818,284],{"class":234},[228,92820,92821],{"class":238}," localStorage.",[228,92823,71800],{"class":2077},[228,92825,239],{"class":238},[228,92827,92769],{"class":343},[228,92829,13829],{"class":238},[228,92831,71472],{"class":234},[228,92833,47448],{"class":287},[228,92835,92836],{"class":230,"line":16941},[228,92837,2301],{"class":238},[228,92839,92840,92842,92844],{"class":230,"line":16946},[228,92841,52532],{"class":238},[228,92843,51928],{"class":51415},[228,92845,51422],{"class":238},[228,92847,92848,92850,92852],{"class":230,"line":16960},[228,92849,51900],{"class":238},[228,92851,51915],{"class":51415},[228,92853,51422],{"class":238},[228,92855,92856],{"class":230,"line":16965},[228,92857,2514],{"emptyLinePlaceholder":157},[228,92859,92860,92862,92864],{"class":230,"line":16970},[228,92861,51900],{"class":238},[228,92863,50750],{"class":51415},[228,92865,51422],{"class":238},[5241,92867,92868],{},"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":141,"searchDepth":142,"depth":142,"links":92870},[92871,92876,92880,92881,92882,92887,92892,92893,92894,92895,92902,92907,92908,92918,92922,92923,92927],{"id":76806,"depth":142,"text":76807,"children":92872},[92873,92874,92875],{"id":76810,"depth":1293,"text":76811},{"id":76835,"depth":1293,"text":76836},{"id":76847,"depth":1293,"text":76848},{"id":76859,"depth":142,"text":76860,"children":92877},[92878,92879],{"id":76863,"depth":1293,"text":76864},{"id":76878,"depth":1293,"text":76879},{"id":76930,"depth":142,"text":76931},{"id":76974,"depth":142,"text":76975},{"id":76991,"depth":142,"text":76992,"children":92883},[92884,92885,92886],{"id":76995,"depth":1293,"text":76996},{"id":77008,"depth":1293,"text":77009},{"id":77113,"depth":1293,"text":77114},{"id":77402,"depth":142,"text":77403,"children":92888},[92889,92890,92891],{"id":77406,"depth":1293,"text":77407},{"id":77849,"depth":1293,"text":77850},{"id":78260,"depth":1293,"text":78261},{"id":78323,"depth":142,"text":78324},{"id":78402,"depth":142,"text":78403},{"id":78495,"depth":142,"text":78496},{"id":80340,"depth":142,"text":80341,"children":92896},[92897,92898,92899,92900,92901],{"id":80344,"depth":1293,"text":80345},{"id":80356,"depth":1293,"text":80357},{"id":80575,"depth":1293,"text":80576},{"id":80593,"depth":1293,"text":80594},{"id":80653,"depth":1293,"text":80654},{"id":84921,"depth":142,"text":84922,"children":92903},[92904,92905,92906],{"id":84925,"depth":1293,"text":84926},{"id":84943,"depth":1293,"text":84944},{"id":84969,"depth":1293,"text":84970},{"id":84978,"depth":142,"text":84979},{"id":85000,"depth":142,"text":85001,"children":92909},[92910,92911,92912,92913,92914,92915,92916,92917],{"id":85004,"depth":1293,"text":85005},{"id":85265,"depth":1293,"text":85266},{"id":85451,"depth":1293,"text":85452},{"id":85818,"depth":1293,"text":85819},{"id":85934,"depth":1293,"text":85935},{"id":85970,"depth":1293,"text":85971},{"id":86017,"depth":1293,"text":86018},{"id":86051,"depth":1293,"text":86052},{"id":87414,"depth":142,"text":87415,"children":92919},[92920,92921],{"id":87418,"depth":1293,"text":87419},{"id":87455,"depth":1293,"text":87456},{"id":88810,"depth":142,"text":88811},{"id":89181,"depth":142,"text":89182,"children":92924},[92925,92926],{"id":89185,"depth":1293,"text":89186},{"id":89219,"depth":1293,"text":89220},{"id":89948,"depth":142,"text":89949,"children":92928},[92929,92930,92931,92932],{"id":89952,"depth":1293,"text":89953},{"id":90910,"depth":1293,"text":90911},{"id":91852,"depth":1293,"text":91853},{"id":91926,"depth":1293,"text":91927},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76795,"description":154},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":92939,"title":92940,"body":92941,"description":92952,"extension":155,"meta":92953,"navigation":157,"path":92955,"seo":92956,"stem":92957,"__hash__":92958},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":92942,"toc":92950},[92943],[19,92944,92945,92946],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[476,92947,92948],{"href":92948,"rel":92949},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[23980],{"title":141,"searchDepth":142,"depth":142,"links":92951},[],"三件套第三套学习",{"category":92954},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":92940,"description":92952},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":92960,"title":92961,"body":92962,"description":154,"extension":155,"meta":93067,"navigation":157,"path":93068,"seo":93069,"stem":93070,"__hash__":93071},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":92963,"toc":93062},[92964,92971,92974,92977,92980,92984,92993,92996,92999,93003,93012,93015,93019,93022,93042,93045,93059],[19,92965,92966],{},[476,92967,92970],{"href":92968,"rel":92969},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[23980],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,92972,92961],{"id":92973},"_1安装",[19,92975,92976],{},"numpy是科学计算基础库,底层是C语言",[19,92978,92979],{},"三种方式：",[14,92981,92983],{"id":92982},"_11-通过pip安装","1.1 通过pip安装",[220,92985,92987],{"className":30493,"code":92986,"language":30495,"meta":141,"style":141},"pip install numpy\n",[30,92988,92989],{"__ignoreMap":141},[228,92990,92991],{"class":230,"line":231},[228,92992,92986],{"class":238},[19,92994,92995],{},"首选方式，自动处理依赖项",[19,92997,92998],{},"在提示系统命令符中使用cmd",[14,93000,93002],{"id":93001},"_12-通过anaconda安装","1.2 通过Anaconda安装",[220,93004,93006],{"className":30493,"code":93005,"language":30495,"meta":141,"style":141},"conda install numpy\n",[30,93007,93008],{"__ignoreMap":141},[228,93009,93010],{"class":230,"line":231},[228,93011,93005],{"class":238},[19,93013,93014],{},"自动解决环境依赖",[14,93016,93018],{"id":93017},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,93020,93021],{},"对于Debian\u002FUbuntu",[220,93023,93025],{"className":30493,"code":93024,"language":30495,"meta":141,"style":141},"sudo apt-get install python3-numpy\n",[30,93026,93027],{"__ignoreMap":141},[228,93028,93029,93032,93034,93037,93039],{"class":230,"line":231},[228,93030,93031],{"class":238},"sudo apt",[228,93033,770],{"class":234},[228,93035,93036],{"class":238},"get install python3",[228,93038,770],{"class":234},[228,93040,93041],{"class":238},"numpy\n",[19,93043,93044],{},"对于Fedora:",[220,93046,93048],{"className":30493,"code":93047,"language":30495,"meta":141,"style":141},"sudo dnf install python3-numpy\n",[30,93049,93050],{"__ignoreMap":141},[228,93051,93052,93055,93057],{"class":230,"line":231},[228,93053,93054],{"class":238},"sudo dnf install python3",[228,93056,770],{"class":234},[228,93058,93041],{"class":238},[5241,93060,93061],{},"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":141,"searchDepth":142,"depth":142,"links":93063},[93064,93065,93066],{"id":92982,"depth":142,"text":92983},{"id":93001,"depth":142,"text":93002},{"id":93017,"depth":142,"text":93018},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":92961,"description":154},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93073,"title":93074,"body":93075,"description":154,"extension":155,"meta":93188,"navigation":157,"path":93189,"seo":93190,"stem":93191,"__hash__":93192},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93076,"toc":93186},[93077,93080,93083,93086,93089,93092,93095,93098,93101,93104,93180,93183],[10,93078,93074],{"id":93079},"_10算数函数",[19,93081,93082],{},"加减乘除运算跟python基础语法没区别",[19,93084,93085],{},"除了python那种方法外还可以使用函数",[19,93087,93088],{},"加：np.add(a,b)",[19,93090,93091],{},"减：np.subtract(a,b)",[19,93093,93094],{},"乘：np.multiply(a,b)",[19,93096,93097],{},"除：np.divide(a,b) == a\u002Fb",[19,93099,93100],{},"取余：np.mod(a,b) == a%b",[19,93102,93103],{},"必须会的用法：",[220,93105,93107],{"className":30493,"code":93106,"language":30495,"meta":141,"style":141},"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",[30,93108,93109,93131,93152,93162,93175],{"__ignoreMap":141},[228,93110,93111,93113,93115,93118,93120,93123,93125,93127,93129],{"class":230,"line":231},[228,93112,476],{"class":238},[228,93114,284],{"class":234},[228,93116,93117],{"class":238},"np.arange(",[228,93119,658],{"class":287},[228,93121,93122],{"class":238},").reshape(",[228,93124,310],{"class":287},[228,93126,616],{"class":238},[228,93128,310],{"class":287},[228,93130,245],{"class":238},[228,93132,93133,93135,93137,93140,93142,93144,93146,93148,93150],{"class":230,"line":142},[228,93134,501],{"class":238},[228,93136,284],{"class":234},[228,93138,93139],{"class":238},"np.array([",[228,93141,684],{"class":287},[228,93143,616],{"class":238},[228,93145,684],{"class":287},[228,93147,616],{"class":238},[228,93149,684],{"class":287},[228,93151,4771],{"class":238},[228,93153,93154,93157,93159],{"class":230,"line":1293},[228,93155,93156],{"class":238},"result",[228,93158,284],{"class":234},[228,93160,93161],{"class":238},"np.empty_like(a)\n",[228,93163,93164,93167,93170,93172],{"class":230,"line":1308},[228,93165,93166],{"class":238},"np.add(a,b,",[228,93168,93169],{"class":5331},"out",[228,93171,284],{"class":234},[228,93173,93174],{"class":238},"result)\n",[228,93176,93177],{"class":230,"line":1314},[228,93178,93179],{"class":238},"result\n",[19,93181,93182],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[5241,93184,93185],{},"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":141,"searchDepth":142,"depth":142,"links":93187},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93074,"description":154},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93194,"title":93195,"body":93196,"description":154,"extension":155,"meta":93958,"navigation":157,"path":93959,"seo":93960,"stem":93961,"__hash__":93962},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93197,"toc":93945},[93198,93201,93204,93207,93211,93250,93254,93298,93358,93362,93365,93404,93407,93452,93456,93492,93496,93565,93569,93633,93637,93640,93643,93646,93649,93685,93689,93729,93733,93805,93808,93812,93875,93879,93942],[10,93199,93195],{"id":93200},"_11统计函数",[19,93202,93203],{},"sum max min mean",[19,93205,93206],{},"这些有axis参数，可以指定方向",[14,93208,93210],{"id":93209},"_111-sum求和函数","11.1 sum()求和函数",[220,93212,93214],{"className":30493,"code":93213,"language":30495,"meta":141,"style":141},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[30,93215,93216,93221,93242],{"__ignoreMap":141},[228,93217,93218],{"class":230,"line":231},[228,93219,93220],{"class":297},"#创建一维数组\n",[228,93222,93223,93225,93227,93230,93232,93234,93236,93238,93240],{"class":230,"line":142},[228,93224,476],{"class":238},[228,93226,284],{"class":234},[228,93228,93229],{"class":238},"np.random.randint(",[228,93231,456],{"class":287},[228,93233,616],{"class":238},[228,93235,549],{"class":287},[228,93237,616],{"class":238},[228,93239,938],{"class":287},[228,93241,245],{"class":238},[228,93243,93244,93247],{"class":230,"line":1293},[228,93245,93246],{"class":238},"np.sum(a)",[228,93248,93249],{"class":297},"#求和\n",[14,93251,93253],{"id":93252},"_112-max求最大值函数","11.2 max()求最大值函数",[220,93255,93257],{"className":30493,"code":93256,"language":30495,"meta":141,"style":141},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[30,93258,93259,93263,93283,93288,93293],{"__ignoreMap":141},[228,93260,93261],{"class":230,"line":231},[228,93262,93220],{"class":297},[228,93264,93265,93267,93269,93271,93273,93275,93277,93279,93281],{"class":230,"line":142},[228,93266,476],{"class":238},[228,93268,284],{"class":234},[228,93270,93229],{"class":238},[228,93272,456],{"class":287},[228,93274,616],{"class":238},[228,93276,549],{"class":287},[228,93278,616],{"class":238},[228,93280,938],{"class":287},[228,93282,245],{"class":238},[228,93284,93285],{"class":230,"line":1293},[228,93286,93287],{"class":238},"np.max(a)\n",[228,93289,93290],{"class":230,"line":1308},[228,93291,93292],{"class":297},"#最大索引(求最大元素的索引)arg\n",[228,93294,93295],{"class":230,"line":1314},[228,93296,93297],{"class":238},"np.argmax(a)\n",[220,93299,93301],{"className":30493,"code":93300,"language":30495,"meta":141,"style":141},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[30,93302,93303,93324,93344,93348],{"__ignoreMap":141},[228,93304,93305,93307,93309,93312,93314,93316,93318,93320,93322],{"class":230,"line":231},[228,93306,11034],{"class":238},[228,93308,284],{"class":234},[228,93310,93311],{"class":238}," np.array([",[228,93313,456],{"class":287},[228,93315,12550],{"class":238},[228,93317,557],{"class":287},[228,93319,12550],{"class":238},[228,93321,310],{"class":287},[228,93323,4771],{"class":238},[228,93325,93326,93328,93330,93332,93334,93336,93338,93340,93342],{"class":230,"line":142},[228,93327,11060],{"class":238},[228,93329,284],{"class":234},[228,93331,93311],{"class":238},[228,93333,310],{"class":287},[228,93335,12550],{"class":238},[228,93337,316],{"class":287},[228,93339,12550],{"class":238},[228,93341,531],{"class":287},[228,93343,4771],{"class":238},[228,93345,93346],{"class":230,"line":1293},[228,93347,2514],{"emptyLinePlaceholder":157},[228,93349,93350,93352,93355],{"class":230,"line":1308},[228,93351,30530],{"class":287},[228,93353,93354],{"class":238},"(np.maximum(a, b))   ",[228,93356,93357],{"class":297},"# [3 5 4]，每个位置上取较大值\n",[14,93359,93361],{"id":93360},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,93363,93364],{},"①一维数组：",[220,93366,93368],{"className":30493,"code":93367,"language":30495,"meta":141,"style":141},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[30,93369,93370,93374,93394,93399],{"__ignoreMap":141},[228,93371,93372],{"class":230,"line":231},[228,93373,93220],{"class":297},[228,93375,93376,93378,93380,93382,93384,93386,93388,93390,93392],{"class":230,"line":142},[228,93377,476],{"class":238},[228,93379,284],{"class":234},[228,93381,93229],{"class":238},[228,93383,456],{"class":287},[228,93385,616],{"class":238},[228,93387,549],{"class":287},[228,93389,616],{"class":238},[228,93391,938],{"class":287},[228,93393,245],{"class":238},[228,93395,93396],{"class":230,"line":1293},[228,93397,93398],{"class":297},"#求平均值\n",[228,93400,93401],{"class":230,"line":1308},[228,93402,93403],{"class":238},"np.mean(a)\n",[19,93405,93406],{},"②二维数组",[220,93408,93410],{"className":30493,"code":93409,"language":30495,"meta":141,"style":141},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[30,93411,93412,93417,93442,93447],{"__ignoreMap":141},[228,93413,93414],{"class":230,"line":231},[228,93415,93416],{"class":297},"#二维数组\n",[228,93418,93419,93422,93424,93426,93428,93430,93432,93434,93436,93438,93440],{"class":230,"line":142},[228,93420,93421],{"class":238},"aa",[228,93423,284],{"class":234},[228,93425,93117],{"class":238},[228,93427,456],{"class":287},[228,93429,616],{"class":238},[228,93431,761],{"class":287},[228,93433,93122],{"class":238},[228,93435,310],{"class":287},[228,93437,616],{"class":238},[228,93439,531],{"class":287},[228,93441,245],{"class":238},[228,93443,93444],{"class":230,"line":1293},[228,93445,93446],{"class":297},"#对数组中的所有数求平均\n",[228,93448,93449],{"class":230,"line":1308},[228,93450,93451],{"class":238},"np.mean(aa)\n",[14,93453,93455],{"id":93454},"_114-median求中位数函数","11.4 median()求中位数函数",[220,93457,93459],{"className":30493,"code":93458,"language":30495,"meta":141,"style":141},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[30,93460,93461,93466,93482,93487],{"__ignoreMap":141},[228,93462,93463],{"class":230,"line":231},[228,93464,93465],{"class":297},"#求中位数\n",[228,93467,93468,93470,93472,93474,93476,93478,93480],{"class":230,"line":142},[228,93469,501],{"class":238},[228,93471,284],{"class":234},[228,93473,93117],{"class":238},[228,93475,456],{"class":287},[228,93477,616],{"class":238},[228,93479,684],{"class":287},[228,93481,245],{"class":238},[228,93483,93484],{"class":230,"line":1293},[228,93485,93486],{"class":238},"np.median(b)\n",[228,93488,93489],{"class":230,"line":1308},[228,93490,93491],{"class":297},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,93493,93495],{"id":93494},"_115-power求幂运算函数","11.5 power()求幂运算函数",[220,93497,93499],{"className":30493,"code":93498,"language":30495,"meta":141,"style":141},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[30,93500,93501,93517,93522,93527,93536,93541,93550],{"__ignoreMap":141},[228,93502,93503,93505,93507,93509,93511,93513,93515],{"class":230,"line":231},[228,93504,501],{"class":238},[228,93506,284],{"class":234},[228,93508,93117],{"class":238},[228,93510,456],{"class":287},[228,93512,616],{"class":238},[228,93514,684],{"class":287},[228,93516,245],{"class":238},[228,93518,93519],{"class":230,"line":142},[228,93520,93521],{"class":297},"#幂运算\n",[228,93523,93524],{"class":230,"line":1293},[228,93525,93526],{"class":297},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[228,93528,93529,93532,93534],{"class":230,"line":1308},[228,93530,93531],{"class":238},"np.power(b,",[228,93533,316],{"class":287},[228,93535,245],{"class":238},[228,93537,93538],{"class":230,"line":1314},[228,93539,93540],{"class":297},"#或者以下代码，将数据存储起来\n",[228,93542,93543,93545,93547],{"class":230,"line":1328},[228,93544,1083],{"class":238},[228,93546,284],{"class":234},[228,93548,93549],{"class":238},"np.empty_like(b)\n",[228,93551,93552,93554,93556,93558,93560,93562],{"class":230,"line":1334},[228,93553,93531],{"class":238},[228,93555,316],{"class":287},[228,93557,616],{"class":238},[228,93559,93169],{"class":5331},[228,93561,284],{"class":234},[228,93563,93564],{"class":238},"y)\n",[14,93566,93568],{"id":93567},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[220,93570,93572],{"className":30493,"code":93571,"language":30495,"meta":141,"style":141},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[30,93573,93574,93590,93595,93600,93604,93622],{"__ignoreMap":141},[228,93575,93576,93578,93580,93582,93584,93586,93588],{"class":230,"line":231},[228,93577,501],{"class":238},[228,93579,284],{"class":234},[228,93581,93117],{"class":238},[228,93583,456],{"class":287},[228,93585,616],{"class":238},[228,93587,684],{"class":287},[228,93589,245],{"class":238},[228,93591,93592],{"class":230,"line":142},[228,93593,93594],{"class":297},"#开方\n",[228,93596,93597],{"class":230,"line":1293},[228,93598,93599],{"class":238},"np.sqrt(b)\n",[228,93601,93602],{"class":230,"line":1308},[228,93603,93540],{"class":297},[228,93605,93606,93608,93610,93613,93616,93618,93620],{"class":230,"line":1314},[228,93607,1083],{"class":238},[228,93609,284],{"class":234},[228,93611,93612],{"class":238},"np.empty_like(b,",[228,93614,93615],{"class":5331},"dtype",[228,93617,284],{"class":234},[228,93619,278],{"class":287},[228,93621,245],{"class":238},[228,93623,93624,93627,93629,93631],{"class":230,"line":1328},[228,93625,93626],{"class":238},"np.sqrt(b,",[228,93628,93169],{"class":5331},[228,93630,284],{"class":234},[228,93632,93564],{"class":238},[14,93634,93636],{"id":93635},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,93638,93639],{},"对数组中的元素累计求和，可指定轴",[19,93641,93642],{},"#累计求和的意思是：",[19,93644,93645],{},"a = np.array([1, 2, 3, 4])",[19,93647,93648],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[220,93650,93652],{"className":30493,"code":93651,"language":30495,"meta":141,"style":141},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[30,93653,93654,93670,93675,93680],{"__ignoreMap":141},[228,93655,93656,93658,93660,93662,93664,93666,93668],{"class":230,"line":231},[228,93657,501],{"class":238},[228,93659,284],{"class":234},[228,93661,93117],{"class":238},[228,93663,456],{"class":287},[228,93665,616],{"class":238},[228,93667,684],{"class":287},[228,93669,245],{"class":238},[228,93671,93672],{"class":230,"line":142},[228,93673,93674],{"class":238},"np.cumsum(b)\n",[228,93676,93677],{"class":230,"line":1293},[228,93678,93679],{"class":297},"#结果：\n",[228,93681,93682],{"class":230,"line":1308},[228,93683,93684],{"class":297},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,93686,93688],{"id":93687},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[220,93690,93692],{"className":30493,"code":93691,"language":30495,"meta":141,"style":141},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[30,93693,93694,93710,93715,93720,93724],{"__ignoreMap":141},[228,93695,93696,93698,93700,93702,93704,93706,93708],{"class":230,"line":231},[228,93697,501],{"class":238},[228,93699,284],{"class":234},[228,93701,93117],{"class":238},[228,93703,456],{"class":287},[228,93705,616],{"class":238},[228,93707,684],{"class":287},[228,93709,245],{"class":238},[228,93711,93712],{"class":230,"line":142},[228,93713,93714],{"class":297},"#对数组中的元素累计求积，可指定轴\n",[228,93716,93717],{"class":230,"line":1293},[228,93718,93719],{"class":238},"np.cumprod(b)\n",[228,93721,93722],{"class":230,"line":1308},[228,93723,93679],{"class":297},[228,93725,93726],{"class":230,"line":1314},[228,93727,93728],{"class":297},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,93730,93732],{"id":93731},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[220,93734,93736],{"className":30493,"code":93735,"language":30495,"meta":141,"style":141},"#删除数组中的重复数据，并对数据进行排序\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",[30,93737,93738,93743,93791,93796,93800],{"__ignoreMap":141},[228,93739,93740],{"class":230,"line":231},[228,93741,93742],{"class":297},"#删除数组中的重复数据，并对数据进行排序\n",[228,93744,93745,93747,93749,93751,93753,93755,93757,93759,93761,93763,93765,93767,93769,93771,93773,93775,93777,93779,93781,93783,93785,93787,93789],{"class":230,"line":142},[228,93746,476],{"class":238},[228,93748,284],{"class":234},[228,93750,93139],{"class":238},[228,93752,456],{"class":287},[228,93754,616],{"class":238},[228,93756,316],{"class":287},[228,93758,616],{"class":238},[228,93760,310],{"class":287},[228,93762,616],{"class":238},[228,93764,736],{"class":287},[228,93766,616],{"class":238},[228,93768,310],{"class":287},[228,93770,616],{"class":238},[228,93772,684],{"class":287},[228,93774,616],{"class":238},[228,93776,436],{"class":287},[228,93778,616],{"class":238},[228,93780,430],{"class":287},[228,93782,616],{"class":238},[228,93784,1013],{"class":287},[228,93786,616],{"class":238},[228,93788,531],{"class":287},[228,93790,4771],{"class":238},[228,93792,93793],{"class":230,"line":1293},[228,93794,93795],{"class":238},"np.unique(a)\n",[228,93797,93798],{"class":230,"line":1308},[228,93799,93679],{"class":297},[228,93801,93802],{"class":230,"line":1314},[228,93803,93804],{"class":297},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,93806,93807],{},"升序形式排序",[14,93809,93811],{"id":93810},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[220,93813,93815],{"className":30493,"code":93814,"language":30495,"meta":141,"style":141},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[30,93816,93817,93865,93870],{"__ignoreMap":141},[228,93818,93819,93821,93823,93825,93827,93829,93831,93833,93835,93837,93839,93841,93843,93845,93847,93849,93851,93853,93855,93857,93859,93861,93863],{"class":230,"line":231},[228,93820,476],{"class":238},[228,93822,284],{"class":234},[228,93824,93139],{"class":238},[228,93826,456],{"class":287},[228,93828,616],{"class":238},[228,93830,316],{"class":287},[228,93832,616],{"class":238},[228,93834,310],{"class":287},[228,93836,616],{"class":238},[228,93838,736],{"class":287},[228,93840,616],{"class":238},[228,93842,310],{"class":287},[228,93844,616],{"class":238},[228,93846,684],{"class":287},[228,93848,616],{"class":238},[228,93850,436],{"class":287},[228,93852,616],{"class":238},[228,93854,430],{"class":287},[228,93856,616],{"class":238},[228,93858,1013],{"class":287},[228,93860,616],{"class":238},[228,93862,531],{"class":287},[228,93864,4771],{"class":238},[228,93866,93867],{"class":230,"line":142},[228,93868,93869],{"class":297},"#返回数组中非零元素的索引\n",[228,93871,93872],{"class":230,"line":1293},[228,93873,93874],{"class":238},"np.nonzero(a)\n",[14,93876,93878],{"id":93877},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[220,93880,93882],{"className":30493,"code":93881,"language":30495,"meta":141,"style":141},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[30,93883,93884,93932,93937],{"__ignoreMap":141},[228,93885,93886,93888,93890,93892,93894,93896,93898,93900,93902,93904,93906,93908,93910,93912,93914,93916,93918,93920,93922,93924,93926,93928,93930],{"class":230,"line":231},[228,93887,476],{"class":238},[228,93889,284],{"class":234},[228,93891,93139],{"class":238},[228,93893,456],{"class":287},[228,93895,616],{"class":238},[228,93897,316],{"class":287},[228,93899,616],{"class":238},[228,93901,310],{"class":287},[228,93903,616],{"class":238},[228,93905,736],{"class":287},[228,93907,616],{"class":238},[228,93909,310],{"class":287},[228,93911,616],{"class":238},[228,93913,684],{"class":287},[228,93915,616],{"class":238},[228,93917,436],{"class":287},[228,93919,616],{"class":238},[228,93921,430],{"class":287},[228,93923,616],{"class":238},[228,93925,1013],{"class":287},[228,93927,616],{"class":238},[228,93929,531],{"class":287},[228,93931,4771],{"class":238},[228,93933,93934],{"class":230,"line":142},[228,93935,93936],{"class":297},"#计算一组数中最大值与最小值的差，可指定轴\n",[228,93938,93939],{"class":230,"line":1293},[228,93940,93941],{"class":238},"np.ptp(a)\n",[5241,93943,93944],{},"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":141,"searchDepth":142,"depth":142,"links":93946},[93947,93948,93949,93950,93951,93952,93953,93954,93955,93956,93957],{"id":93209,"depth":142,"text":93210},{"id":93252,"depth":142,"text":93253},{"id":93360,"depth":142,"text":93361},{"id":93454,"depth":142,"text":93455},{"id":93494,"depth":142,"text":93495},{"id":93567,"depth":142,"text":93568},{"id":93635,"depth":142,"text":93636},{"id":93687,"depth":142,"text":93688},{"id":93731,"depth":142,"text":93732},{"id":93810,"depth":142,"text":93811},{"id":93877,"depth":142,"text":93878},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93195,"description":154},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":93964,"title":93965,"body":93966,"description":154,"extension":155,"meta":94621,"navigation":157,"path":94622,"seo":94623,"stem":94624,"__hash__":94625},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":93967,"toc":94609},[93968,93971,93975,93978,94194,94198,94201,94410,94414,94480,94485,94489,94492,94495,94533,94537,94540,94545,94549,94552,94555,94560,94564,94567,94571,94574,94577,94582,94586,94589,94592,94597,94601,94606],[10,93969,93965],{"id":93970},"_12其他常用函数",[14,93972,93974],{"id":93973},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,93976,93977],{},"将数组的数据按照行列复制扩展",[220,93979,93981],{"className":30493,"code":93980,"language":30495,"meta":141,"style":141},"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",[30,93982,93983,93999,94008,94012,94017,94022,94035,94039,94044,94049,94054,94058,94063,94087,94099,94103,94107,94112,94117,94122,94127,94131,94144,94148,94152,94157,94162,94167,94172,94177,94181,94185,94190],{"__ignoreMap":141},[228,93984,93985,93987,93989,93991,93993,93995,93997],{"class":230,"line":231},[228,93986,476],{"class":238},[228,93988,284],{"class":234},[228,93990,93117],{"class":238},[228,93992,456],{"class":287},[228,93994,616],{"class":238},[228,93996,557],{"class":287},[228,93998,245],{"class":238},[228,94000,94001,94004,94006],{"class":230,"line":142},[228,94002,94003],{"class":238},"np.tile(a,",[228,94005,316],{"class":287},[228,94007,245],{"class":238},[228,94009,94010],{"class":230,"line":1293},[228,94011,93679],{"class":297},[228,94013,94014],{"class":230,"line":1308},[228,94015,94016],{"class":297},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[228,94018,94019],{"class":230,"line":1314},[228,94020,94021],{"class":297},"#行复制两次，列复制三次\n",[228,94023,94024,94027,94029,94031,94033],{"class":230,"line":1328},[228,94025,94026],{"class":238},"np.tile(a,(",[228,94028,316],{"class":287},[228,94030,616],{"class":238},[228,94032,310],{"class":287},[228,94034,30612],{"class":238},[228,94036,94037],{"class":230,"line":1334},[228,94038,93679],{"class":297},[228,94040,94041],{"class":230,"line":1425},[228,94042,94043],{"class":343},"'''\n",[228,94045,94046],{"class":230,"line":1431},[228,94047,94048],{"class":343},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[228,94050,94051],{"class":230,"line":1443},[228,94052,94053],{"class":343},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[228,94055,94056],{"class":230,"line":1726},[228,94057,94043],{"class":343},[228,94059,94060],{"class":230,"line":1731},[228,94061,94062],{"class":297},"#创建二维数组\n",[228,94064,94065,94067,94069,94071,94073,94075,94077,94079,94081,94083,94085],{"class":230,"line":1737},[228,94066,93421],{"class":238},[228,94068,284],{"class":234},[228,94070,93117],{"class":238},[228,94072,456],{"class":287},[228,94074,616],{"class":238},[228,94076,761],{"class":287},[228,94078,93122],{"class":238},[228,94080,531],{"class":287},[228,94082,616],{"class":238},[228,94084,310],{"class":287},[228,94086,245],{"class":238},[228,94088,94089,94092,94094,94096],{"class":230,"line":1742},[228,94090,94091],{"class":238},"np.tile(aa,",[228,94093,316],{"class":287},[228,94095,667],{"class":238},[228,94097,94098],{"class":297},"#一个数的时候就是行\n",[228,94100,94101],{"class":230,"line":1756},[228,94102,93679],{"class":297},[228,94104,94105],{"class":230,"line":1761},[228,94106,94043],{"class":343},[228,94108,94109],{"class":230,"line":1767},[228,94110,94111],{"class":343},"array([[ 1,  2,  3,  1,  2,  3],\n",[228,94113,94114],{"class":230,"line":1788},[228,94115,94116],{"class":343},"       [ 4,  5,  6,  4,  5,  6],\n",[228,94118,94119],{"class":230,"line":1793},[228,94120,94121],{"class":343},"       [ 7,  8,  9,  7,  8,  9],\n",[228,94123,94124],{"class":230,"line":1807},[228,94125,94126],{"class":343},"       [10, 11, 12, 10, 11, 12]])\n",[228,94128,94129],{"class":230,"line":1812},[228,94130,94043],{"class":343},[228,94132,94133,94136,94138,94140,94142],{"class":230,"line":1841},[228,94134,94135],{"class":238},"np.tile(aa,(",[228,94137,316],{"class":287},[228,94139,616],{"class":238},[228,94141,310],{"class":287},[228,94143,30612],{"class":238},[228,94145,94146],{"class":230,"line":1846},[228,94147,93679],{"class":297},[228,94149,94150],{"class":230,"line":1863},[228,94151,94043],{"class":343},[228,94153,94154],{"class":230,"line":1868},[228,94155,94156],{"class":343},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[228,94158,94159],{"class":230,"line":1873},[228,94160,94161],{"class":343},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[228,94163,94164],{"class":230,"line":1878},[228,94165,94166],{"class":343},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[228,94168,94169],{"class":230,"line":1892},[228,94170,94171],{"class":343},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[228,94173,94174],{"class":230,"line":1897},[228,94175,94176],{"class":343},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[228,94178,94179],{"class":230,"line":2691},[228,94180,94161],{"class":343},[228,94182,94183],{"class":230,"line":2705},[228,94184,94166],{"class":343},[228,94186,94187],{"class":230,"line":2713},[228,94188,94189],{"class":343},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[228,94191,94192],{"class":230,"line":2718},[228,94193,94043],{"class":343},[14,94195,94197],{"id":94196},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,94199,94200],{},"repeat()将数组中的每个元素重复若干次",[220,94202,94204],{"className":30493,"code":94203,"language":30495,"meta":141,"style":141},"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",[30,94205,94206,94222,94231,94235,94240,94264,94269,94278,94282,94287,94291,94296,94312,94316,94320,94325,94330,94335,94339,94344,94348,94353,94358,94362,94378,94382,94386,94391,94396,94401,94406],{"__ignoreMap":141},[228,94207,94208,94210,94212,94214,94216,94218,94220],{"class":230,"line":231},[228,94209,476],{"class":238},[228,94211,284],{"class":234},[228,94213,93117],{"class":238},[228,94215,456],{"class":287},[228,94217,616],{"class":238},[228,94219,557],{"class":287},[228,94221,245],{"class":238},[228,94223,94224,94227,94229],{"class":230,"line":142},[228,94225,94226],{"class":238},"np.repeat(a,",[228,94228,310],{"class":287},[228,94230,245],{"class":238},[228,94232,94233],{"class":230,"line":1293},[228,94234,93679],{"class":297},[228,94236,94237],{"class":230,"line":1308},[228,94238,94239],{"class":297},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[228,94241,94242,94244,94246,94248,94250,94252,94254,94256,94258,94260,94262],{"class":230,"line":1314},[228,94243,93421],{"class":238},[228,94245,284],{"class":234},[228,94247,93117],{"class":238},[228,94249,456],{"class":287},[228,94251,616],{"class":238},[228,94253,761],{"class":287},[228,94255,93122],{"class":238},[228,94257,531],{"class":287},[228,94259,616],{"class":238},[228,94261,310],{"class":287},[228,94263,245],{"class":238},[228,94265,94266],{"class":230,"line":1328},[228,94267,94268],{"class":297},"#这个重复之后二维变成一维\n",[228,94270,94271,94274,94276],{"class":230,"line":1334},[228,94272,94273],{"class":238},"np.repeat(aa,",[228,94275,316],{"class":287},[228,94277,245],{"class":238},[228,94279,94280],{"class":230,"line":1425},[228,94281,94043],{"class":343},[228,94283,94284],{"class":230,"line":1431},[228,94285,94286],{"class":343},"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",[228,94288,94289],{"class":230,"line":1443},[228,94290,94043],{"class":343},[228,94292,94293],{"class":230,"line":1726},[228,94294,94295],{"class":297},"#指定axis\n",[228,94297,94298,94300,94302,94304,94306,94308,94310],{"class":230,"line":1731},[228,94299,94273],{"class":238},[228,94301,316],{"class":287},[228,94303,616],{"class":238},[228,94305,47629],{"class":5331},[228,94307,284],{"class":234},[228,94309,430],{"class":287},[228,94311,245],{"class":238},[228,94313,94314],{"class":230,"line":1737},[228,94315,93679],{"class":297},[228,94317,94318],{"class":230,"line":1742},[228,94319,94043],{"class":343},[228,94321,94322],{"class":230,"line":1756},[228,94323,94324],{"class":343},"array([[ 1,  2,  3],\n",[228,94326,94327],{"class":230,"line":1761},[228,94328,94329],{"class":343},"       [ 1,  2,  3],\n",[228,94331,94332],{"class":230,"line":1767},[228,94333,94334],{"class":343},"       [ 4,  5,  6],\n",[228,94336,94337],{"class":230,"line":1788},[228,94338,94334],{"class":343},[228,94340,94341],{"class":230,"line":1793},[228,94342,94343],{"class":343},"       [ 7,  8,  9],\n",[228,94345,94346],{"class":230,"line":1807},[228,94347,94343],{"class":343},[228,94349,94350],{"class":230,"line":1812},[228,94351,94352],{"class":343},"       [10, 11, 12],\n",[228,94354,94355],{"class":230,"line":1841},[228,94356,94357],{"class":343},"       [10, 11, 12]])\n",[228,94359,94360],{"class":230,"line":1846},[228,94361,94043],{"class":343},[228,94363,94364,94366,94368,94370,94372,94374,94376],{"class":230,"line":1863},[228,94365,94273],{"class":238},[228,94367,316],{"class":287},[228,94369,616],{"class":238},[228,94371,47629],{"class":5331},[228,94373,284],{"class":234},[228,94375,456],{"class":287},[228,94377,245],{"class":238},[228,94379,94380],{"class":230,"line":1868},[228,94381,93679],{"class":297},[228,94383,94384],{"class":230,"line":1873},[228,94385,94043],{"class":343},[228,94387,94388],{"class":230,"line":1878},[228,94389,94390],{"class":343},"array([[ 1,  1,  2,  2,  3,  3],\n",[228,94392,94393],{"class":230,"line":1892},[228,94394,94395],{"class":343},"       [ 4,  4,  5,  5,  6,  6],\n",[228,94397,94398],{"class":230,"line":1897},[228,94399,94400],{"class":343},"       [ 7,  7,  8,  8,  9,  9],\n",[228,94402,94403],{"class":230,"line":2691},[228,94404,94405],{"class":343},"       [10, 10, 11, 11, 12, 12]])\n",[228,94407,94408],{"class":230,"line":2705},[228,94409,94043],{"class":343},[14,94411,94413],{"id":94412},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[220,94415,94417],{"className":30493,"code":94416,"language":30495,"meta":141,"style":141},"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",[30,94418,94419,94435,94440,94452,94456,94461,94471,94475],{"__ignoreMap":141},[228,94420,94421,94423,94425,94427,94429,94431,94433],{"class":230,"line":231},[228,94422,476],{"class":238},[228,94424,284],{"class":234},[228,94426,93117],{"class":238},[228,94428,456],{"class":287},[228,94430,616],{"class":238},[228,94432,557],{"class":287},[228,94434,245],{"class":238},[228,94436,94437],{"class":230,"line":142},[228,94438,94439],{"class":297},"#array([，2，3，4])\n",[228,94441,94442,94445,94447,94449],{"class":230,"line":1293},[228,94443,94444],{"class":238},"np.roll(a,",[228,94446,316],{"class":287},[228,94448,667],{"class":238},[228,94450,94451],{"class":297},"#传正数向后调多少位，传负数向前调多少位\n",[228,94453,94454],{"class":230,"line":1308},[228,94455,93679],{"class":297},[228,94457,94458],{"class":230,"line":1314},[228,94459,94460],{"class":297},"#array([3, 4, 1, 2])\n",[228,94462,94463,94465,94467,94469],{"class":230,"line":1328},[228,94464,94444],{"class":238},[228,94466,770],{"class":234},[228,94468,456],{"class":287},[228,94470,245],{"class":238},[228,94472,94473],{"class":230,"line":1334},[228,94474,93679],{"class":297},[228,94476,94477],{"class":230,"line":1425},[228,94478,94479],{"class":297},"#array([2, 3, 4, 1])\n",[19,94481,94482],{},[1576,94483],{"alt":141,"src":94484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,94486,94488],{"id":94487},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,94490,94491],{},"resize()重新调整数组的大小",[19,94493,94494],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[220,94496,94498],{"className":30493,"code":94497,"language":30495,"meta":141,"style":141},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[30,94499,94500,94505,94518],{"__ignoreMap":141},[228,94501,94502],{"class":230,"line":231},[228,94503,94504],{"class":297},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[228,94506,94507,94510,94512,94514,94516],{"class":230,"line":142},[228,94508,94509],{"class":238},"np.resize(aa,(",[228,94511,316],{"class":287},[228,94513,616],{"class":238},[228,94515,582],{"class":287},[228,94517,30612],{"class":238},[228,94519,94520,94522,94524,94526,94528,94530],{"class":230,"line":1293},[228,94521,94509],{"class":238},[228,94523,316],{"class":287},[228,94525,616],{"class":238},[228,94527,658],{"class":287},[228,94529,82886],{"class":238},[228,94531,94532],{"class":297},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,94534,94536],{"id":94535},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,94538,94539],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,94541,94542],{},[1576,94543],{"alt":141,"src":94544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,94546,94548],{"id":94547},"_126-保存加载文件","12.6 保存加载文件",[19,94550,94551],{},"savetxt():将数据保存到txt文件中",[19,94553,94554],{},"loadtxt():从文件加载数据",[19,94556,94557],{},[1576,94558],{"alt":141,"src":94559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,94561,94563],{"id":94562},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,94565,94566],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,94568,94570],{"id":94569},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,94572,94573],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,94575,94576],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,94578,94579],{},[1576,94580],{"alt":141,"src":94581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,94583,94585],{"id":94584},"_129-where语句","12.9 where语句",[19,94587,94588],{},"np.where(条件,x,y)",[19,94590,94591],{},"如果条件为True,对应值为x,否则对应值为y",[19,94593,94594],{},[1576,94595],{"alt":141,"src":94596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,94598,94600],{"id":94599},"_1210-dot矩阵","12.10 dot()矩阵",[19,94602,94603],{},[1576,94604],{"alt":141,"src":94605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[5241,94607,94608],{},"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":141,"searchDepth":142,"depth":142,"links":94610},[94611,94612,94613,94614,94615,94616,94617,94618,94619,94620],{"id":93973,"depth":142,"text":93974},{"id":94196,"depth":142,"text":94197},{"id":94412,"depth":142,"text":94413},{"id":94487,"depth":142,"text":94488},{"id":94535,"depth":142,"text":94536},{"id":94547,"depth":142,"text":94548},{"id":94562,"depth":142,"text":94563},{"id":94569,"depth":142,"text":94570},{"id":94584,"depth":142,"text":94585},{"id":94599,"depth":142,"text":94600},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":93965,"description":154},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94627,"title":94628,"body":94629,"description":154,"extension":155,"meta":94982,"navigation":157,"path":94983,"seo":94984,"stem":94985,"__hash__":94986},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94630,"toc":94980},[94631,94634,94637,94640,94643,94646,94711,94713,94977],[10,94632,94628],{"id":94633},"_13数组排序",[19,94635,94636],{},"排序主要用到的方法是np.sort和np.argsort",[19,94638,94639],{},"其中np.sort()对数组直接排序",[19,94641,94642],{},"而np.argsort()是返回排序后的原始索引",[19,94644,94645],{},"①一维数组",[220,94647,94649],{"className":30493,"code":94648,"language":30495,"meta":141,"style":141},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[30,94650,94651,94655,94695,94703],{"__ignoreMap":141},[228,94652,94653],{"class":230,"line":231},[228,94654,93220],{"class":297},[228,94656,94657,94659,94661,94663,94665,94667,94669,94671,94673,94675,94677,94679,94681,94683,94685,94687,94689,94691,94693],{"class":230,"line":142},[228,94658,476],{"class":238},[228,94660,284],{"class":234},[228,94662,93139],{"class":238},[228,94664,310],{"class":287},[228,94666,616],{"class":238},[228,94668,736],{"class":287},[228,94670,616],{"class":238},[228,94672,633],{"class":287},[228,94674,616],{"class":238},[228,94676,1013],{"class":287},[228,94678,616],{"class":238},[228,94680,517],{"class":287},[228,94682,616],{"class":238},[228,94684,1131],{"class":287},[228,94686,616],{"class":238},[228,94688,582],{"class":287},[228,94690,616],{"class":238},[228,94692,684],{"class":287},[228,94694,4771],{"class":238},[228,94696,94697,94700],{"class":230,"line":1293},[228,94698,94699],{"class":238},"np.sort(a)",[228,94701,94702],{"class":297},"#升序排序\n",[228,94704,94705,94708],{"class":230,"line":1308},[228,94706,94707],{"class":238},"np.argsort(a)",[228,94709,94710],{"class":297},"#按照元素大小来索引排序\n",[19,94712,93406],{},[220,94714,94716],{"className":30493,"code":94715,"language":30495,"meta":141,"style":141},"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",[30,94717,94718,94730,94756,94761,94765,94770,94775,94780,94785,94789,94797,94801,94806,94811,94816,94821,94825,94830,94843,94847,94852,94857,94862,94867,94871,94876,94888,94892,94896,94900,94904,94908,94912,94917,94932,94937,94946,94951,94955,94959,94964,94968,94973],{"__ignoreMap":141},[228,94719,94720,94723,94725,94727],{"class":230,"line":231},[228,94721,94722],{"class":238},"np.random.seed(",[228,94724,430],{"class":287},[228,94726,667],{"class":238},[228,94728,94729],{"class":297},"#保证每次值一样\n",[228,94731,94732,94734,94736,94738,94740,94742,94744,94746,94748,94750,94752,94754],{"class":230,"line":142},[228,94733,93421],{"class":238},[228,94735,284],{"class":234},[228,94737,93229],{"class":238},[228,94739,549],{"class":287},[228,94741,616],{"class":238},[228,94743,31611],{"class":5331},[228,94745,284],{"class":234},[228,94747,239],{"class":238},[228,94749,531],{"class":287},[228,94751,616],{"class":238},[228,94753,582],{"class":287},[228,94755,30612],{"class":238},[228,94757,94758],{"class":230,"line":1293},[228,94759,94760],{"class":297},"#原数组：\n",[228,94762,94763],{"class":230,"line":1308},[228,94764,94043],{"class":343},[228,94766,94767],{"class":230,"line":1314},[228,94768,94769],{"class":343},"array([[44, 47, 64, 67, 67,  9],\n",[228,94771,94772],{"class":230,"line":1328},[228,94773,94774],{"class":343},"       [83, 21, 36, 87, 70, 88],\n",[228,94776,94777],{"class":230,"line":1334},[228,94778,94779],{"class":343},"       [88, 12, 58, 65, 39, 87],\n",[228,94781,94782],{"class":230,"line":1425},[228,94783,94784],{"class":343},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[228,94786,94787],{"class":230,"line":1431},[228,94788,94043],{"class":343},[228,94790,94791,94794],{"class":230,"line":1443},[228,94792,94793],{"class":238},"np.sort(aa)",[228,94795,94796],{"class":297},"#每行进行了排序\n",[228,94798,94799],{"class":230,"line":1726},[228,94800,94043],{"class":343},[228,94802,94803],{"class":230,"line":1731},[228,94804,94805],{"class":343},"array([[ 9, 44, 47, 64, 67, 67],\n",[228,94807,94808],{"class":230,"line":1737},[228,94809,94810],{"class":343},"       [21, 36, 70, 83, 87, 88],\n",[228,94812,94813],{"class":230,"line":1742},[228,94814,94815],{"class":343},"       [12, 39, 58, 65, 87, 88],\n",[228,94817,94818],{"class":230,"line":1756},[228,94819,94820],{"class":343},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[228,94822,94823],{"class":230,"line":1761},[228,94824,94043],{"class":343},[228,94826,94827],{"class":230,"line":1767},[228,94828,94829],{"class":297},"#axis=0时\n",[228,94831,94832,94835,94837,94839,94841],{"class":230,"line":1788},[228,94833,94834],{"class":238},"np.sort(aa,",[228,94836,47629],{"class":5331},[228,94838,284],{"class":234},[228,94840,430],{"class":287},[228,94842,245],{"class":238},[228,94844,94845],{"class":230,"line":1793},[228,94846,94043],{"class":343},[228,94848,94849],{"class":230,"line":1807},[228,94850,94851],{"class":343},"array([[44, 12, 36, 37, 25,  9],\n",[228,94853,94854],{"class":230,"line":1812},[228,94855,94856],{"class":343},"       [46, 21, 58, 65, 39, 77],\n",[228,94858,94859],{"class":230,"line":1841},[228,94860,94861],{"class":343},"       [83, 47, 64, 67, 67, 87],\n",[228,94863,94864],{"class":230,"line":1846},[228,94865,94866],{"class":343},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[228,94868,94869],{"class":230,"line":1863},[228,94870,94043],{"class":343},[228,94872,94873],{"class":230,"line":1868},[228,94874,94875],{"class":297},"#axis=1时,为默认值\n",[228,94877,94878,94880,94882,94884,94886],{"class":230,"line":1873},[228,94879,94834],{"class":238},[228,94881,47629],{"class":5331},[228,94883,284],{"class":234},[228,94885,456],{"class":287},[228,94887,245],{"class":238},[228,94889,94890],{"class":230,"line":1878},[228,94891,94043],{"class":343},[228,94893,94894],{"class":230,"line":1892},[228,94895,94805],{"class":343},[228,94897,94898],{"class":230,"line":1897},[228,94899,94810],{"class":343},[228,94901,94902],{"class":230,"line":2691},[228,94903,94815],{"class":343},[228,94905,94906],{"class":230,"line":2705},[228,94907,94820],{"class":343},[228,94909,94910],{"class":230,"line":2713},[228,94911,94043],{"class":343},[228,94913,94914],{"class":230,"line":2718},[228,94915,94916],{"class":297},"#按最后一列排序\n",[228,94918,94919,94921,94923,94926,94928,94930],{"class":230,"line":2724},[228,94920,501],{"class":238},[228,94922,284],{"class":234},[228,94924,94925],{"class":238},"aa[:,",[228,94927,770],{"class":234},[228,94929,456],{"class":287},[228,94931,33361],{"class":238},[228,94933,94934],{"class":230,"line":2730},[228,94935,94936],{"class":297},"#获取最后一列排好序的索引\n",[228,94938,94939,94941,94943],{"class":230,"line":2735},[228,94940,74173],{"class":238},[228,94942,284],{"class":234},[228,94944,94945],{"class":238},"np.argsort(b)\n",[228,94947,94948],{"class":230,"line":8063},[228,94949,94950],{"class":238},"aa[index]\n",[228,94952,94953],{"class":230,"line":8087},[228,94954,94043],{"class":343},[228,94956,94957],{"class":230,"line":8092},[228,94958,94769],{"class":343},[228,94960,94961],{"class":230,"line":8098},[228,94962,94963],{"class":343},"       [46, 88, 81, 37, 25, 77],\n",[228,94965,94966],{"class":230,"line":8125},[228,94967,94779],{"class":343},[228,94969,94970],{"class":230,"line":8130},[228,94971,94972],{"class":343},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[228,94974,94975],{"class":230,"line":8136},[228,94976,94043],{"class":343},[5241,94978,94979],{},"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":141,"searchDepth":142,"depth":142,"links":94981},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94628,"description":154},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":94988,"title":94989,"body":94990,"description":154,"extension":155,"meta":95020,"navigation":157,"path":95021,"seo":95022,"stem":95023,"__hash__":95024},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":94991,"toc":95018},[94992,94995,94998,95001,95004,95007,95010,95013],[10,94993,94989],{"id":94994},"_14广播机制",[19,94996,94997],{},"广播的规则：",[19,94999,95000],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,95002,95003],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,95005,95006],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,95008,95009],{},"3.如果没有维度形状为1，则会引发异常",[19,95011,95012],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,95014,95015],{},[1576,95016],{"alt":141,"src":95017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":141,"searchDepth":142,"depth":142,"links":95019},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":94989,"description":154},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95026,"title":95027,"body":95028,"description":154,"extension":155,"meta":95126,"navigation":157,"path":95127,"seo":95128,"stem":95129,"__hash__":95130},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95029,"toc":95124},[95030,95033,95036,95121],[10,95031,95027],{"id":95032},"_15比较掩码",[19,95034,95035],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[220,95037,95039],{"className":30493,"code":95038,"language":30495,"meta":141,"style":141},"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",[30,95040,95041,95087,95098,95112,95116],{"__ignoreMap":141},[228,95042,95043,95045,95047,95050,95052,95054,95056,95058,95060,95062,95064,95066,95068,95070,95072,95074,95076,95078,95080,95082,95084],{"class":230,"line":231},[228,95044,476],{"class":238},[228,95046,284],{"class":234},[228,95048,95049],{"class":238},"np.array([[",[228,95051,456],{"class":287},[228,95053,616],{"class":238},[228,95055,316],{"class":287},[228,95057,616],{"class":238},[228,95059,310],{"class":287},[228,95061,48145],{"class":238},[228,95063,710],{"class":287},[228,95065,616],{"class":238},[228,95067,736],{"class":287},[228,95069,616],{"class":238},[228,95071,761],{"class":287},[228,95073,48145],{"class":238},[228,95075,963],{"class":287},[228,95077,616],{"class":238},[228,95079,988],{"class":287},[228,95081,616],{"class":238},[228,95083,1013],{"class":287},[228,95085,95086],{"class":238},"]])\n",[228,95088,95089,95091,95093,95095],{"class":230,"line":142},[228,95090,476],{"class":238},[228,95092,1148],{"class":234},[228,95094,938],{"class":287},[228,95096,95097],{"class":297},"#结果是一个由True,False组成的数组\n",[228,95099,95100,95103,95105,95107,95109],{"class":230,"line":1293},[228,95101,95102],{"class":238},"a[a",[228,95104,1148],{"class":234},[228,95106,938],{"class":287},[228,95108,1178],{"class":238},[228,95110,95111],{"class":297},"#小于20的元素会存到这个数组中\n",[228,95113,95114],{"class":230,"line":1308},[228,95115,93679],{"class":297},[228,95117,95118],{"class":230,"line":1314},[228,95119,95120],{"class":297},"#array([ 1,  2,  3, 11, 12, 13])\n",[5241,95122,95123],{},"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":141,"searchDepth":142,"depth":142,"links":95125},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95027,"description":154},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95132,"title":95133,"body":95134,"description":154,"extension":155,"meta":95226,"navigation":157,"path":95227,"seo":95228,"stem":95229,"__hash__":95230},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95135,"toc":95224},[95136,95139,95142,95145,95148,95151,95216,95221],[10,95137,95133],{"id":95138},"_16魔法命令time",[19,95140,95141],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,95143,95144],{},"%:行模式",[19,95146,95147],{},"%%:单元格模式",[19,95149,95150],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[220,95152,95154],{"className":30493,"code":95153,"language":30495,"meta":141,"style":141},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[30,95155,95156,95161,95168,95173,95182,95195,95199,95207],{"__ignoreMap":141},[228,95157,95158],{"class":230,"line":231},[228,95159,95160],{"class":297},"#程序执行时间\n",[228,95162,95163,95165],{"class":230,"line":142},[228,95164,30507],{"class":234},[228,95166,95167],{"class":238}," time \n",[228,95169,95170],{"class":230,"line":1293},[228,95171,95172],{"class":297},"#获取时间\n",[228,95174,95175,95178,95180],{"class":230,"line":1308},[228,95176,95177],{"class":238},"start",[228,95179,284],{"class":234},[228,95181,32533],{"class":238},[228,95183,95184,95187,95190,95192],{"class":230,"line":1314},[228,95185,95186],{"class":238},"time.sleep(",[228,95188,95189],{"class":287},"0.4",[228,95191,667],{"class":238},[228,95193,95194],{"class":297},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[228,95196,95197],{"class":230,"line":1328},[228,95198,95172],{"class":297},[228,95200,95201,95203,95205],{"class":230,"line":1334},[228,95202,45916],{"class":238},[228,95204,284],{"class":234},[228,95206,32533],{"class":238},[228,95208,95209,95211,95213],{"class":230,"line":1425},[228,95210,45916],{"class":238},[228,95212,770],{"class":234},[228,95214,95215],{"class":238},"start\n",[19,95217,95218],{},[1576,95219],{"alt":141,"src":95220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[5241,95222,95223],{},"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":141,"searchDepth":142,"depth":142,"links":95225},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95133,"description":154},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95232,"title":95233,"body":95234,"description":154,"extension":155,"meta":95269,"navigation":157,"path":95270,"seo":95271,"stem":95272,"__hash__":95273},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95235,"toc":95267},[95236,95239,95242,95245,95248,95251,95254,95257,95262],[10,95237,95233],{"id":95238},"_17魔法命令timeit",[19,95240,95241],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,95243,95244],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,95246,95247],{},"单元格模式：",[19,95249,95250],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,95252,95253],{},"初始化语句执行次数由轮数来决定",[19,95255,95256],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,95258,95259],{},[1576,95260],{"alt":141,"src":95261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,95263,95264],{},[1576,95265],{"alt":141,"src":95266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":141,"searchDepth":142,"depth":142,"links":95268},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95233,"description":154},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95275,"title":95276,"body":95277,"description":154,"extension":155,"meta":95295,"navigation":157,"path":95296,"seo":95297,"stem":95298,"__hash__":95299},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95278,"toc":95293},[95279,95282,95285,95288],[10,95280,95276],{"id":95281},"_18魔法命令writefile和run",[19,95283,95284],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,95286,95287],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,95289,95290],{},[1576,95291],{"alt":141,"src":95292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":141,"searchDepth":142,"depth":142,"links":95294},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95276,"description":154},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95301,"title":95302,"body":95303,"description":154,"extension":155,"meta":95356,"navigation":157,"path":95357,"seo":95358,"stem":95359,"__hash__":95360},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95304,"toc":95354},[95305,95308,95311,95313,95316,95319,95324,95327,95330,95333,95336,95339,95342,95345,95348,95351],[10,95306,95302],{"id":95307},"_19魔法命令memit",[19,95309,95310],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,95312,24715],{},[19,95314,95315],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,95317,95318],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,95320,95321],{},[1576,95322],{"alt":141,"src":95323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,95325,95326],{},"补充：",[19,95328,95329],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,95331,95332],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,95334,95335],{},"解决方法：",[19,95337,95338],{},"1.cmd",[19,95340,95341],{},"2.依次输入以下代码：",[19,95343,95344],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,95346,95347],{},"pip install --upgrade ipython",[19,95349,95350],{},"#升级 memory_profiler 和 setuptools",[19,95352,95353],{},"pip install --upgrade memory_profiler setuptools",{"title":141,"searchDepth":142,"depth":142,"links":95355},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95302,"description":154},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95362,"title":95363,"body":95364,"description":154,"extension":155,"meta":97010,"navigation":157,"path":97011,"seo":97012,"stem":97013,"__hash__":97014},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95365,"toc":96980},[95366,95369,95373,95377,95438,95441,95446,95450,95455,95460,95465,95470,95473,95478,95482,95486,95519,95522,95525,95528,95580,95583,95619,95622,95664,95668,95689,95691,95728,95730,95735,95737,95742,95746,95749,95777,95781,95785,95838,95842,95934,95938,95942,95945,95950,95954,95979,95984,95988,95991,95994,95997,96000,96003,96006,96009,96021,96025,96029,96032,96064,96067,96090,96093,96119,96122,96148,96151,96185,96188,96250,96254,96257,96261,96264,96290,96293,96296,96301,96304,96373,96375,96380,96441,96444,96455,96461,96466,96470,96473,96486,96490,96505,96507,96530,96532,96558,96561,96564,96567,96615,96617,96622,96626,96630,96657,96661,96688,96691,96696,96701,96791,96795,96853,96858,96861,96864,96906,96910,96966,96971,96974,96977],[10,95367,95363],{"id":95368},"_2创建数组",[14,95370,95372],{"id":95371},"_21-array函数创建数组","2.1 array()函数创建数组",[200,95374,95376],{"id":95375},"_221-函数语句","2.2.1 函数语句",[220,95378,95380],{"className":30493,"code":95379,"language":30495,"meta":141,"style":141},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[30,95381,95382],{"__ignoreMap":141},[228,95383,95384,95387,95390,95392,95394,95396,95398,95400,95403,95405,95408,95410,95413,95415,95417,95419,95422,95424,95427,95429,95432,95434,95436],{"class":230,"line":231},[228,95385,95386],{"class":238},"numpy.array(",[228,95388,95389],{"class":287},"object",[228,95391,12550],{"class":238},[228,95393,93615],{"class":5331},[228,95395,13679],{"class":234},[228,95397,39048],{"class":287},[228,95399,12550],{"class":238},[228,95401,95402],{"class":5331},"copy",[228,95404,13679],{"class":234},[228,95406,95407],{"class":287}," True",[228,95409,12550],{"class":238},[228,95411,95412],{"class":5331},"order",[228,95414,13679],{"class":234},[228,95416,39048],{"class":287},[228,95418,12550],{"class":238},[228,95420,95421],{"class":5331},"subok",[228,95423,13679],{"class":234},[228,95425,95426],{"class":287}," False",[228,95428,12550],{"class":238},[228,95430,95431],{"class":5331},"ndmin",[228,95433,13679],{"class":234},[228,95435,4207],{"class":287},[228,95437,245],{"class":238},[19,95439,95440],{},"参数：",[19,95442,95443],{},[1576,95444],{"alt":141,"src":95445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[200,95447,95449],{"id":95448},"_222-实例","2.2.2 实例",[19,95451,95452],{},[1576,95453],{"alt":141,"src":95454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,95456,95457],{},[1576,95458],{"alt":141,"src":95459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,95461,95462],{},[1576,95463],{"alt":141,"src":95464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,95466,95467],{},[1576,95468],{"alt":141,"src":95469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,95471,95472],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,95474,95475],{},[1576,95476],{"alt":141,"src":95477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,95479,95481],{"id":95480},"_22-随机数创建数组","2.2 随机数创建数组",[200,95483,95485],{"id":95484},"_221-random语句","2.2.1 random语句",[220,95487,95489],{"className":30493,"code":95488,"language":30495,"meta":141,"style":141},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[30,95490,95491,95496,95501,95509,95514],{"__ignoreMap":141},[228,95492,95493],{"class":230,"line":231},[228,95494,95495],{"class":297},"#random.random()\n",[228,95497,95498],{"class":230,"line":142},[228,95499,95500],{"class":297},"#确定随机种子,就是每次运行结果是相同的\n",[228,95502,95503,95505,95507],{"class":230,"line":1293},[228,95504,94722],{"class":238},[228,95506,430],{"class":287},[228,95508,245],{"class":238},[228,95510,95511],{"class":230,"line":1308},[228,95512,95513],{"class":238},"np.random.random()\n",[228,95515,95516],{"class":230,"line":1314},[228,95517,95518],{"class":297},"#生成一个随机的数目\n",[19,95520,95521],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,95523,95524],{},"可以指定数组形状 size",[19,95526,95527],{},"①生成一维数组",[220,95529,95531],{"className":30493,"code":95530,"language":30495,"meta":141,"style":141},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[30,95532,95533,95538,95551,95556,95572],{"__ignoreMap":141},[228,95534,95535],{"class":230,"line":231},[228,95536,95537],{"class":297},"#random.random(size())\n",[228,95539,95540,95543,95545,95547,95549],{"class":230,"line":142},[228,95541,95542],{"class":238},"np.random.random(",[228,95544,31611],{"class":5331},[228,95546,284],{"class":234},[228,95548,557],{"class":287},[228,95550,245],{"class":238},[228,95552,95553],{"class":230,"line":1293},[228,95554,95555],{"class":297},"#生成一位的五个元素\n",[228,95557,95558,95560,95562,95564,95566,95568,95570],{"class":230,"line":1308},[228,95559,476],{"class":238},[228,95561,284],{"class":234},[228,95563,95542],{"class":238},[228,95565,31611],{"class":5331},[228,95567,284],{"class":234},[228,95569,531],{"class":287},[228,95571,245],{"class":238},[228,95573,95574,95577],{"class":230,"line":1314},[228,95575,95576],{"class":238},"a.shape ",[228,95578,95579],{"class":297},"#输出数组形状\n",[19,95581,95582],{},"②生成二维数组",[220,95584,95586],{"className":30493,"code":95585,"language":30495,"meta":141,"style":141},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[30,95587,95588,95592,95614],{"__ignoreMap":141},[228,95589,95590],{"class":230,"line":231},[228,95591,93416],{"class":297},[228,95593,95594,95596,95598,95600,95602,95604,95606,95608,95610,95612],{"class":230,"line":142},[228,95595,93421],{"class":238},[228,95597,284],{"class":234},[228,95599,95542],{"class":238},[228,95601,31611],{"class":5331},[228,95603,284],{"class":234},[228,95605,239],{"class":238},[228,95607,531],{"class":287},[228,95609,616],{"class":238},[228,95611,557],{"class":287},[228,95613,30612],{"class":238},[228,95615,95616],{"class":230,"line":1293},[228,95617,95618],{"class":297},"#生成四行五列的数组\n",[19,95620,95621],{},"③生成三维数组",[220,95623,95625],{"className":30493,"code":95624,"language":30495,"meta":141,"style":141},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[30,95626,95627,95632,95659],{"__ignoreMap":141},[228,95628,95629],{"class":230,"line":231},[228,95630,95631],{"class":297},"#三维数组\n",[228,95633,95634,95637,95639,95641,95643,95645,95647,95649,95651,95653,95655,95657],{"class":230,"line":142},[228,95635,95636],{"class":238},"aaa",[228,95638,284],{"class":234},[228,95640,95542],{"class":238},[228,95642,31611],{"class":5331},[228,95644,284],{"class":234},[228,95646,239],{"class":238},[228,95648,316],{"class":287},[228,95650,616],{"class":238},[228,95652,310],{"class":287},[228,95654,616],{"class":238},[228,95656,531],{"class":287},[228,95658,30612],{"class":238},[228,95660,95661],{"class":230,"line":1293},[228,95662,95663],{"class":238},"aaa.shape\n",[200,95665,95667],{"id":95666},"_222-randint语句","2.2.2 randint语句",[220,95669,95671],{"className":30493,"code":95670,"language":30495,"meta":141,"style":141},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[30,95672,95673,95678],{"__ignoreMap":141},[228,95674,95675],{"class":230,"line":231},[228,95676,95677],{"class":297},"#生成随机的整数 random.randint(low,high,size)\n",[228,95679,95680,95682,95684,95686],{"class":230,"line":142},[228,95681,93229],{"class":238},[228,95683,557],{"class":287},[228,95685,13829],{"class":238},[228,95687,95688],{"class":297},"#0~5中的随机一个数\n",[19,95690,95527],{},[220,95692,95694],{"className":30493,"code":95693,"language":30495,"meta":141,"style":141},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[30,95695,95696,95701,95723],{"__ignoreMap":141},[228,95697,95698],{"class":230,"line":231},[228,95699,95700],{"class":297},"#一维\n",[228,95702,95703,95705,95707,95709,95711,95713,95715,95717,95719,95721],{"class":230,"line":142},[228,95704,93229],{"class":238},[228,95706,456],{"class":287},[228,95708,616],{"class":238},[228,95710,710],{"class":287},[228,95712,616],{"class":238},[228,95714,31611],{"class":5331},[228,95716,284],{"class":234},[228,95718,239],{"class":238},[228,95720,684],{"class":287},[228,95722,30612],{"class":238},[228,95724,95725],{"class":230,"line":1293},[228,95726,95727],{"class":297},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,95729,95582],{},[19,95731,95732],{},[1576,95733],{"alt":141,"src":95734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,95736,95621],{},[19,95738,95739],{},[1576,95740],{"alt":141,"src":95741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[200,95743,95745],{"id":95744},"_222-rand语句","2.2.2 rand语句",[19,95747,95748],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[220,95750,95752],{"className":30493,"code":95751,"language":30495,"meta":141,"style":141},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[30,95753,95754,95767,95772],{"__ignoreMap":141},[228,95755,95756,95759,95761,95763,95765],{"class":230,"line":231},[228,95757,95758],{"class":238},"np.random.rand(",[228,95760,549],{"class":287},[228,95762,616],{"class":238},[228,95764,684],{"class":287},[228,95766,245],{"class":238},[228,95768,95769],{"class":230,"line":142},[228,95770,95771],{"class":297},"#第一个参数100：行数，表示有100个样本\n",[228,95773,95774],{"class":230,"line":1293},[228,95775,95776],{"class":297},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,95778,95780],{"id":95779},"_23-arange创建数组","2.3 arange()创建数组",[200,95782,95784],{"id":95783},"_231-函数语句","2.3.1 函数语句",[220,95786,95788],{"className":30493,"code":95787,"language":30495,"meta":141,"style":141},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[30,95789,95790,95804,95809,95814,95819,95824,95829,95834],{"__ignoreMap":141},[228,95791,95792,95795,95797,95799,95802],{"class":230,"line":231},[228,95793,95794],{"class":238},"numpy.arange([start,] stop[, step], ",[228,95796,93615],{"class":5331},[228,95798,284],{"class":234},[228,95800,95801],{"class":287},"None",[228,95803,245],{"class":238},[228,95805,95806],{"class":230,"line":142},[228,95807,95808],{"class":297},"#参数\n",[228,95810,95811],{"class":230,"line":1293},[228,95812,95813],{"class":343},"\"\"\"\n",[228,95815,95816],{"class":230,"line":1308},[228,95817,95818],{"class":343},"start:起始值，可选，默认从 0 开始。\n",[228,95820,95821],{"class":230,"line":1314},[228,95822,95823],{"class":343},"stop:结束值（不包含该值）。\n",[228,95825,95826],{"class":230,"line":1328},[228,95827,95828],{"class":343},"step:步长，可选，默认是 1。可以为浮点数。\n",[228,95830,95831],{"class":230,"line":1334},[228,95832,95833],{"class":343},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[228,95835,95836],{"class":230,"line":1425},[228,95837,95813],{"class":343},[200,95839,95841],{"id":95840},"_232-实例","2.3.2 实例",[220,95843,95845],{"className":30493,"code":95844,"language":30495,"meta":141,"style":141},"#创建一维数组\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",[30,95846,95847,95851,95875,95880,95885,95889,95912,95916,95920,95925,95930],{"__ignoreMap":141},[228,95848,95849],{"class":230,"line":231},[228,95850,93220],{"class":297},[228,95852,95853,95855,95857,95859,95861,95863,95865,95867,95869,95871,95873],{"class":230,"line":142},[228,95854,93117],{"class":238},[228,95856,456],{"class":287},[228,95858,616],{"class":238},[228,95860,963],{"class":287},[228,95862,616],{"class":238},[228,95864,456],{"class":287},[228,95866,616],{"class":238},[228,95868,93615],{"class":5331},[228,95870,284],{"class":234},[228,95872,242],{"class":287},[228,95874,245],{"class":238},[228,95876,95877],{"class":230,"line":1293},[228,95878,95879],{"class":297},"#输出结果：\n",[228,95881,95882],{"class":230,"line":1308},[228,95883,95884],{"class":297},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[228,95886,95887],{"class":230,"line":1314},[228,95888,94062],{"class":297},[228,95890,95891,95894,95896,95898,95900,95903,95905,95907,95909],{"class":230,"line":1328},[228,95892,95893],{"class":238},"np.array([np.arange(",[228,95895,456],{"class":287},[228,95897,616],{"class":238},[228,95899,531],{"class":287},[228,95901,95902],{"class":238},"),np.arange(",[228,95904,531],{"class":287},[228,95906,616],{"class":238},[228,95908,607],{"class":287},[228,95910,95911],{"class":238},")])\n",[228,95913,95914],{"class":230,"line":1334},[228,95915,93679],{"class":297},[228,95917,95918],{"class":230,"line":1425},[228,95919,95813],{"class":343},[228,95921,95922],{"class":230,"line":1431},[228,95923,95924],{"class":343},"array([[1, 2, 3],\n",[228,95926,95927],{"class":230,"line":1443},[228,95928,95929],{"class":343},"       [4, 5, 6]])\n",[228,95931,95932],{"class":230,"line":1726},[228,95933,95813],{"class":343},[14,95935,95937],{"id":95936},"_24-生态分布","2.4 生态分布",[200,95939,95941],{"id":95940},"_241-标准正态分布","2.4.1 标准正态分布",[19,95943,95944],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,95946,95947],{},[1576,95948],{"alt":141,"src":95949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[200,95951,95953],{"id":95952},"_242-常规正态分布","2.4.2 常规正态分布",[220,95955,95957],{"className":30493,"code":95956,"language":30495,"meta":141,"style":141},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[30,95958,95959,95964,95969,95974],{"__ignoreMap":141},[228,95960,95961],{"class":230,"line":231},[228,95962,95963],{"class":238},"random.normal(loc,scale,size)也可以生成正态分布\n",[228,95965,95966],{"class":230,"line":142},[228,95967,95968],{"class":297},"#loc:期望\n",[228,95970,95971],{"class":230,"line":1293},[228,95972,95973],{"class":297},"#scale:方差\n",[228,95975,95976],{"class":230,"line":1308},[228,95977,95978],{"class":297},"#size:用于确定是几维的数列\n",[19,95980,95981],{},[1576,95982],{"alt":141,"src":95983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,95985,95987],{"id":95986},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,95989,95990],{},"ndim:秩，维度个数",[19,95992,95993],{},"size:数组元素的个数",[19,95995,95996],{},"shape:数组的形状",[19,95998,95999],{},"dtype:数组元素的类型",[19,96001,96002],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,96004,96005],{},"他们都是属性，通过数组.属性的形式来确定",[19,96007,96008],{},"如果需要输出多个可以通过以下方式：",[220,96010,96012],{"className":30493,"code":96011,"language":30495,"meta":141,"style":141},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[30,96013,96014],{"__ignoreMap":141},[228,96015,96016,96018],{"class":230,"line":231},[228,96017,30530],{"class":287},[228,96019,96020],{"class":238},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,96022,96024],{"id":96023},"_26-其他方式创建数组","2.6 其他方式创建数组",[200,96026,96028],{"id":96027},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,96030,96031],{},"①创建一维数组",[220,96033,96035],{"className":30493,"code":96034,"language":30495,"meta":141,"style":141},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[30,96036,96037,96046,96050,96055,96060],{"__ignoreMap":141},[228,96038,96039,96042,96044],{"class":230,"line":231},[228,96040,96041],{"class":238},"np.zeros(",[228,96043,684],{"class":287},[228,96045,245],{"class":238},[228,96047,96048],{"class":230,"line":142},[228,96049,95813],{"class":343},[228,96051,96052],{"class":230,"line":1293},[228,96053,96054],{"class":343},"输出结果：\n",[228,96056,96057],{"class":230,"line":1308},[228,96058,96059],{"class":343},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[228,96061,96062],{"class":230,"line":1314},[228,96063,95813],{"class":343},[19,96065,96066],{},"上方代码等价于：",[220,96068,96070],{"className":30493,"code":96069,"language":30495,"meta":141,"style":141},"np.zeros(shape=(10))#创建10个元素的0数组\n",[30,96071,96072],{"__ignoreMap":141},[228,96073,96074,96076,96079,96081,96083,96085,96087],{"class":230,"line":231},[228,96075,96041],{"class":238},[228,96077,96078],{"class":5331},"shape",[228,96080,284],{"class":234},[228,96082,239],{"class":238},[228,96084,684],{"class":287},[228,96086,82886],{"class":238},[228,96088,96089],{"class":297},"#创建10个元素的0数组\n",[19,96091,96092],{},"也可以指定类型",[220,96094,96096],{"className":30493,"code":96095,"language":30495,"meta":141,"style":141},"#指定类型\nnp.zeros(5,dtype=int)\n",[30,96097,96098,96103],{"__ignoreMap":141},[228,96099,96100],{"class":230,"line":231},[228,96101,96102],{"class":297},"#指定类型\n",[228,96104,96105,96107,96109,96111,96113,96115,96117],{"class":230,"line":142},[228,96106,96041],{"class":238},[228,96108,557],{"class":287},[228,96110,616],{"class":238},[228,96112,93615],{"class":5331},[228,96114,284],{"class":234},[228,96116,242],{"class":287},[228,96118,245],{"class":238},[19,96120,96121],{},"②创建二维数组",[220,96123,96125],{"className":30493,"code":96124,"language":30495,"meta":141,"style":141},"np.zeros((3,4),dtype=int)\n",[30,96126,96127],{"__ignoreMap":141},[228,96128,96129,96132,96134,96136,96138,96140,96142,96144,96146],{"class":230,"line":231},[228,96130,96131],{"class":238},"np.zeros((",[228,96133,310],{"class":287},[228,96135,616],{"class":238},[228,96137,531],{"class":287},[228,96139,42371],{"class":238},[228,96141,93615],{"class":5331},[228,96143,284],{"class":234},[228,96145,242],{"class":287},[228,96147,245],{"class":238},[19,96149,96150],{},"③创建三维数组",[220,96152,96154],{"className":30493,"code":96153,"language":30495,"meta":141,"style":141},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[30,96155,96156,96161],{"__ignoreMap":141},[228,96157,96158],{"class":230,"line":231},[228,96159,96160],{"class":297},"#创建三维数组\n",[228,96162,96163,96165,96167,96169,96171,96173,96175,96177,96179,96181,96183],{"class":230,"line":142},[228,96164,96131],{"class":238},[228,96166,310],{"class":287},[228,96168,616],{"class":238},[228,96170,531],{"class":287},[228,96172,616],{"class":238},[228,96174,557],{"class":287},[228,96176,42371],{"class":238},[228,96178,93615],{"class":5331},[228,96180,284],{"class":234},[228,96182,242],{"class":287},[228,96184,245],{"class":238},[19,96186,96187],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[220,96189,96191],{"className":30493,"code":96190,"language":30495,"meta":141,"style":141},"#使用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",[30,96192,96193,96198,96213,96218,96223,96245],{"__ignoreMap":141},[228,96194,96195],{"class":230,"line":231},[228,96196,96197],{"class":297},"#使用zeros_like将创建的一维数组变成全0的数组\n",[228,96199,96200,96202,96204,96206,96208,96210],{"class":230,"line":142},[228,96201,476],{"class":238},[228,96203,284],{"class":234},[228,96205,93117],{"class":238},[228,96207,531],{"class":287},[228,96209,667],{"class":238},[228,96211,96212],{"class":297},"#这个得到的结果：一维数组0，1，2，3\n",[228,96214,96215],{"class":230,"line":1293},[228,96216,96217],{"class":238},"np.zeros_like(a)\n",[228,96219,96220],{"class":230,"line":1308},[228,96221,96222],{"class":297},"#使用zeros_like将创建的二维数组变成全0的数组\n",[228,96224,96225,96227,96229,96231,96233,96235,96237,96239,96241,96243],{"class":230,"line":1314},[228,96226,93421],{"class":238},[228,96228,284],{"class":234},[228,96230,95542],{"class":238},[228,96232,31611],{"class":5331},[228,96234,284],{"class":234},[228,96236,239],{"class":238},[228,96238,531],{"class":287},[228,96240,616],{"class":238},[228,96242,557],{"class":287},[228,96244,30612],{"class":238},[228,96246,96247],{"class":230,"line":1328},[228,96248,96249],{"class":238},"np.zeros_like(aa)\n",[200,96251,96253],{"id":96252},"_262-ones创建数组","2.6.2 ones()创建数组",[19,96255,96256],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[200,96258,96260],{"id":96259},"_263-empty创建数组","2.6.3 empty()创建数组",[19,96262,96263],{},"①empty()用法",[220,96265,96267],{"className":30493,"code":96266,"language":30495,"meta":141,"style":141},"numpy.empty(shape,dtype=float,order='c')\n",[30,96268,96269],{"__ignoreMap":141},[228,96270,96271,96274,96276,96278,96280,96282,96284,96286,96288],{"class":230,"line":231},[228,96272,96273],{"class":238},"numpy.empty(shape,",[228,96275,93615],{"class":5331},[228,96277,284],{"class":234},[228,96279,278],{"class":287},[228,96281,616],{"class":238},[228,96283,95412],{"class":5331},[228,96285,284],{"class":234},[228,96287,76143],{"class":343},[228,96289,245],{"class":238},[19,96291,96292],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,96294,96295],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,96297,96298],{},[1576,96299],{"alt":141,"src":96300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,96302,96303],{},"②empty()用法",[220,96305,96307],{"className":30493,"code":96306,"language":30495,"meta":141,"style":141},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[30,96308,96309,96330,96342,96363,96368],{"__ignoreMap":141},[228,96310,96311,96313,96315,96318,96320,96322,96324,96326,96328],{"class":230,"line":231},[228,96312,1083],{"class":238},[228,96314,284],{"class":234},[228,96316,96317],{"class":238},"np.empty(",[228,96319,684],{"class":287},[228,96321,616],{"class":238},[228,96323,93615],{"class":5331},[228,96325,284],{"class":234},[228,96327,242],{"class":287},[228,96329,245],{"class":238},[228,96331,96332,96334,96336,96338,96340],{"class":230,"line":142},[228,96333,1058],{"class":238},[228,96335,284],{"class":234},[228,96337,93117],{"class":238},[228,96339,557],{"class":287},[228,96341,245],{"class":238},[228,96343,96344,96347,96349,96352,96354,96356,96359,96361],{"class":230,"line":1293},[228,96345,96346],{"class":238},"np.add(",[228,96348,316],{"class":287},[228,96350,96351],{"class":238},",x,",[228,96353,93169],{"class":5331},[228,96355,284],{"class":234},[228,96357,96358],{"class":238},"y[:",[228,96360,557],{"class":287},[228,96362,4771],{"class":238},[228,96364,96365],{"class":230,"line":1308},[228,96366,96367],{"class":297},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[228,96369,96370],{"class":230,"line":1314},[228,96371,96372],{"class":238},"y\n",[19,96374,11629],{},[19,96376,96377],{},[1576,96378],{"alt":141,"src":96379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[220,96381,96383],{"className":30493,"code":96382,"language":30495,"meta":141,"style":141},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[30,96384,96385,96401,96421,96436],{"__ignoreMap":141},[228,96386,96387,96389,96391,96393,96395,96397,96399],{"class":230,"line":231},[228,96388,1058],{"class":238},[228,96390,284],{"class":234},[228,96392,93117],{"class":238},[228,96394,456],{"class":287},[228,96396,616],{"class":238},[228,96398,582],{"class":287},[228,96400,245],{"class":238},[228,96402,96403,96405,96407,96409,96411,96413,96415,96417,96419],{"class":230,"line":142},[228,96404,1083],{"class":238},[228,96406,284],{"class":234},[228,96408,96317],{"class":238},[228,96410,557],{"class":287},[228,96412,616],{"class":238},[228,96414,93615],{"class":5331},[228,96416,284],{"class":234},[228,96418,242],{"class":287},[228,96420,245],{"class":238},[228,96422,96423,96426,96428,96430,96432,96434],{"class":230,"line":1293},[228,96424,96425],{"class":238},"np.add(x,",[228,96427,316],{"class":287},[228,96429,616],{"class":238},[228,96431,93169],{"class":5331},[228,96433,284],{"class":234},[228,96435,93564],{"class":238},[228,96437,96438],{"class":230,"line":1308},[228,96439,96440],{"class":297},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,96442,96443],{},"③empty_like()",[19,96445,96446],{},[388,96447,96448,96449,96454],{},"创建一个",[388,96450,96451],{},[388,96452,96453],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,96456,96457,96460],{},[30,96458,96459],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,96462,96463],{},[1576,96464],{"alt":141,"src":96465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[200,96467,96469],{"id":96468},"_264-用法","2.6.4 ？？用法",[19,96471,96472],{},"当想查看一个函数的参数时，可以通过？？来实现",[220,96474,96476],{"className":30493,"code":96475,"language":30495,"meta":141,"style":141},"np.full??\n",[30,96477,96478],{"__ignoreMap":141},[228,96479,96480,96483],{"class":230,"line":231},[228,96481,96482],{"class":238},"np.full",[228,96484,96485],{"class":77518},"??\n",[200,96487,96489],{"id":96488},"_265-full创建数组","2.6.5 full()创建数组",[220,96491,96493],{"className":30493,"code":96492,"language":30495,"meta":141,"style":141},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[30,96494,96495,96500],{"__ignoreMap":141},[228,96496,96497],{"class":230,"line":231},[228,96498,96499],{"class":238},"full(shape,fill_value)\n",[228,96501,96502],{"class":230,"line":142},[228,96503,96504],{"class":238},"创建全为某个指定值的数组\n",[19,96506,94645],{},[220,96508,96510],{"className":30493,"code":96509,"language":30495,"meta":141,"style":141},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[30,96511,96512,96517],{"__ignoreMap":141},[228,96513,96514],{"class":230,"line":231},[228,96515,96516],{"class":297},"#创建一个一维数组,以20进行填充\n",[228,96518,96519,96522,96524,96526,96528],{"class":230,"line":142},[228,96520,96521],{"class":238},"np.full(",[228,96523,684],{"class":287},[228,96525,616],{"class":238},[228,96527,938],{"class":287},[228,96529,245],{"class":238},[19,96531,93406],{},[220,96533,96535],{"className":30493,"code":96534,"language":30495,"meta":141,"style":141},"#创建二维数组\nnp.full((3,5),11)\n",[30,96536,96537,96541],{"__ignoreMap":141},[228,96538,96539],{"class":230,"line":231},[228,96540,94062],{"class":297},[228,96542,96543,96546,96548,96550,96552,96554,96556],{"class":230,"line":142},[228,96544,96545],{"class":238},"np.full((",[228,96547,310],{"class":287},[228,96549,616],{"class":238},[228,96551,557],{"class":287},[228,96553,42371],{"class":238},[228,96555,710],{"class":287},[228,96557,245],{"class":238},[19,96559,96560],{},"③full_like用法",[19,96562,96563],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,96565,96566],{},"这里是指定填充而已",[220,96568,96570],{"className":30493,"code":96569,"language":30495,"meta":141,"style":141},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[30,96571,96572,96577,96601,96606],{"__ignoreMap":141},[228,96573,96574],{"class":230,"line":231},[228,96575,96576],{"class":297},"#创建一个指定形状数组\n",[228,96578,96579,96581,96583,96585,96587,96589,96591,96593,96595,96597,96599],{"class":230,"line":142},[228,96580,476],{"class":238},[228,96582,284],{"class":234},[228,96584,93117],{"class":238},[228,96586,456],{"class":287},[228,96588,616],{"class":238},[228,96590,563],{"class":287},[228,96592,93122],{"class":238},[228,96594,531],{"class":287},[228,96596,616],{"class":238},[228,96598,658],{"class":287},[228,96600,245],{"class":238},[228,96602,96603],{"class":230,"line":1293},[228,96604,96605],{"class":297},"#进行指定填充\n",[228,96607,96608,96611,96613],{"class":230,"line":1308},[228,96609,96610],{"class":238},"np.full_like(a,",[228,96612,684],{"class":287},[228,96614,245],{"class":238},[19,96616,11629],{},[19,96618,96619],{},[1576,96620],{"alt":141,"src":96621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[200,96623,96625],{"id":96624},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22113,96627,96629],{"id":96628},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[220,96631,96633],{"className":30493,"code":96632,"language":30495,"meta":141,"style":141},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[30,96634,96635,96652],{"__ignoreMap":141},[228,96636,96637,96640,96642,96644,96646,96648,96650],{"class":230,"line":231},[228,96638,96639],{"class":238},"np.eye(",[228,96641,531],{"class":287},[228,96643,616],{"class":238},[228,96645,93615],{"class":5331},[228,96647,284],{"class":234},[228,96649,242],{"class":287},[228,96651,245],{"class":238},[228,96653,96654],{"class":230,"line":142},[228,96655,96656],{"class":297},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22113,96658,96660],{"id":96659},"_2662-法2identity","2.6.6.2 法2：identity()",[220,96662,96664],{"className":30493,"code":96663,"language":30495,"meta":141,"style":141},"#identity()\nnp.identity(5,dtype=int)\n",[30,96665,96666,96671],{"__ignoreMap":141},[228,96667,96668],{"class":230,"line":231},[228,96669,96670],{"class":297},"#identity()\n",[228,96672,96673,96676,96678,96680,96682,96684,96686],{"class":230,"line":142},[228,96674,96675],{"class":238},"np.identity(",[228,96677,557],{"class":287},[228,96679,616],{"class":238},[228,96681,93615],{"class":5331},[228,96683,284],{"class":234},[228,96685,242],{"class":287},[228,96687,245],{"class":238},[19,96689,96690],{},"两个函数是有区别的",[19,96692,96693],{},[1576,96694],{"alt":141,"src":96695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,96697,96698],{},[1576,96699],{"alt":141,"src":96700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[220,96702,96704],{"className":30493,"code":96703,"language":30495,"meta":141,"style":141},"# 创建一个 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",[30,96705,96706,96711,96723,96728,96733,96738,96743,96747,96752,96772,96776,96781,96786],{"__ignoreMap":141},[228,96707,96708],{"class":230,"line":231},[228,96709,96710],{"class":297},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[228,96712,96713,96715,96717,96719,96721],{"class":230,"line":142},[228,96714,96639],{"class":238},[228,96716,310],{"class":287},[228,96718,12550],{"class":238},[228,96720,531],{"class":287},[228,96722,245],{"class":238},[228,96724,96725],{"class":230,"line":1293},[228,96726,96727],{"class":297},"# 输出:\n",[228,96729,96730],{"class":230,"line":1308},[228,96731,96732],{"class":297},"# [[1. 0. 0. 0.]\n",[228,96734,96735],{"class":230,"line":1314},[228,96736,96737],{"class":297},"#  [0. 1. 0. 0.]\n",[228,96739,96740],{"class":230,"line":1328},[228,96741,96742],{"class":297},"#  [0. 0. 1. 0.]]\n",[228,96744,96745],{"class":230,"line":1334},[228,96746,2514],{"emptyLinePlaceholder":157},[228,96748,96749],{"class":230,"line":1425},[228,96750,96751],{"class":297},"# 对角线向上偏移1\n",[228,96753,96754,96756,96758,96760,96762,96764,96766,96768,96770],{"class":230,"line":1431},[228,96755,96639],{"class":238},[228,96757,310],{"class":287},[228,96759,12550],{"class":238},[228,96761,531],{"class":287},[228,96763,12550],{"class":238},[228,96765,731],{"class":5331},[228,96767,284],{"class":234},[228,96769,456],{"class":287},[228,96771,245],{"class":238},[228,96773,96774],{"class":230,"line":1443},[228,96775,96727],{"class":297},[228,96777,96778],{"class":230,"line":1726},[228,96779,96780],{"class":297},"# [[0. 1. 0. 0.]\n",[228,96782,96783],{"class":230,"line":1731},[228,96784,96785],{"class":297},"#  [0. 0. 1. 0.]\n",[228,96787,96788],{"class":230,"line":1737},[228,96789,96790],{"class":297},"#  [0. 0. 0. 1.]]\n",[200,96792,96794],{"id":96793},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[220,96796,96798],{"className":30493,"code":96797,"language":30495,"meta":141,"style":141},"#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",[30,96799,96800,96805,96809,96814,96819,96824,96829,96834,96839,96844,96849],{"__ignoreMap":141},[228,96801,96802],{"class":230,"line":231},[228,96803,96804],{"class":297},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[228,96806,96807],{"class":230,"line":142},[228,96808,95813],{"class":343},[228,96810,96811],{"class":230,"line":1293},[228,96812,96813],{"class":343},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[228,96815,96816],{"class":230,"line":1308},[228,96817,96818],{"class":343},"参数介绍：\n",[228,96820,96821],{"class":230,"line":1314},[228,96822,96823],{"class":343},"start：序列的起始值\n",[228,96825,96826],{"class":230,"line":1328},[228,96827,96828],{"class":343},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[228,96830,96831],{"class":230,"line":1334},[228,96832,96833],{"class":343},"num：要生长的等步长的样本数量，默认为50\n",[228,96835,96836],{"class":230,"line":1425},[228,96837,96838],{"class":343},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[228,96840,96841],{"class":230,"line":1431},[228,96842,96843],{"class":343},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[228,96845,96846],{"class":230,"line":1443},[228,96847,96848],{"class":343},"dtype：ndarry的数据类型\n",[228,96850,96851],{"class":230,"line":1726},[228,96852,95813],{"class":343},[19,96854,96855],{},[1576,96856],{"alt":141,"src":96857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,96859,96860],{},"这里num=是可以省略的",[19,96862,96863],{},"也就是下方两行代码结果是一模一样的",[220,96865,96867],{"className":30493,"code":96866,"language":30495,"meta":141,"style":141},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[30,96868,96869,96886],{"__ignoreMap":141},[228,96870,96871,96874,96876,96878,96880,96882,96884],{"class":230,"line":231},[228,96872,96873],{"class":238},"np.linspace(",[228,96875,456],{"class":287},[228,96877,616],{"class":238},[228,96879,557],{"class":287},[228,96881,616],{"class":238},[228,96883,557],{"class":287},[228,96885,245],{"class":238},[228,96887,96888,96890,96892,96894,96896,96898,96900,96902,96904],{"class":230,"line":142},[228,96889,96873],{"class":238},[228,96891,456],{"class":287},[228,96893,616],{"class":238},[228,96895,557],{"class":287},[228,96897,616],{"class":238},[228,96899,1779],{"class":5331},[228,96901,284],{"class":234},[228,96903,557],{"class":287},[228,96905,245],{"class":238},[200,96907,96909],{"id":96908},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[220,96911,96913],{"className":30493,"code":96912,"language":30495,"meta":141,"style":141},"#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",[30,96914,96915,96920,96924,96929,96934,96939,96944,96948,96953,96958,96962],{"__ignoreMap":141},[228,96916,96917],{"class":230,"line":231},[228,96918,96919],{"class":297},"#logspace函数用于创建一个等比数列，格式如下：\n",[228,96921,96922],{"class":230,"line":142},[228,96923,95813],{"class":343},[228,96925,96926],{"class":230,"line":1293},[228,96927,96928],{"class":343},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[228,96930,96931],{"class":230,"line":1308},[228,96932,96933],{"class":343},"参数为：\n",[228,96935,96936],{"class":230,"line":1314},[228,96937,96938],{"class":343},"start:序列的起始位置为：base**start\n",[228,96940,96941],{"class":230,"line":1328},[228,96942,96943],{"class":343},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[228,96945,96946],{"class":230,"line":1334},[228,96947,96833],{"class":343},[228,96949,96950],{"class":230,"line":1425},[228,96951,96952],{"class":343},"endpoint：是否包含 stop 这个值，默认是 True\n",[228,96954,96955],{"class":230,"line":1431},[228,96956,96957],{"class":343},"base：对数的底数，默认是 10（常见对数）\n",[228,96959,96960],{"class":230,"line":1443},[228,96961,96848],{"class":343},[228,96963,96964],{"class":230,"line":1726},[228,96965,95813],{"class":343},[19,96967,96968],{},[1576,96969],{"alt":141,"src":96970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,96972,96973],{},"logspace()函数中的num参数也是可以不写num=的",[19,96975,96976],{},"endpoint是不可以省略的",[5241,96978,96979],{},"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":141,"searchDepth":142,"depth":142,"links":96981},[96982,96986,96991,96995,96999,97000],{"id":95371,"depth":142,"text":95372,"children":96983},[96984,96985],{"id":95375,"depth":1293,"text":95376},{"id":95448,"depth":1293,"text":95449},{"id":95480,"depth":142,"text":95481,"children":96987},[96988,96989,96990],{"id":95484,"depth":1293,"text":95485},{"id":95666,"depth":1293,"text":95667},{"id":95744,"depth":1293,"text":95745},{"id":95779,"depth":142,"text":95780,"children":96992},[96993,96994],{"id":95783,"depth":1293,"text":95784},{"id":95840,"depth":1293,"text":95841},{"id":95936,"depth":142,"text":95937,"children":96996},[96997,96998],{"id":95940,"depth":1293,"text":95941},{"id":95952,"depth":1293,"text":95953},{"id":95986,"depth":142,"text":95987},{"id":96023,"depth":142,"text":96024,"children":97001},[97002,97003,97004,97005,97006,97007,97008,97009],{"id":96027,"depth":1293,"text":96028},{"id":96252,"depth":1293,"text":96253},{"id":96259,"depth":1293,"text":96260},{"id":96468,"depth":1293,"text":96469},{"id":96488,"depth":1293,"text":96489},{"id":96624,"depth":1293,"text":96625},{"id":96793,"depth":1293,"text":96794},{"id":96908,"depth":1293,"text":96909},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95363,"description":154},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97016,"title":97017,"body":97018,"description":154,"extension":155,"meta":97111,"navigation":157,"path":97112,"seo":97113,"stem":97114,"__hash__":97115},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97019,"toc":97109},[97020,97023,97026,97029,97032,97035,97038,97041,97044,97047,97050,97053,97055,97058,97061,97066,97069,97072,97106],[10,97021,97017],{"id":97022},"_20魔法命令mprun",[19,97024,97025],{},"逐行分析数据内存的使用情况",[19,97027,97028],{},"语法格式：",[19,97030,97031],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,97033,97034],{},"分析结果列如下：",[19,97036,97037],{},"Line行号",[19,97039,97040],{},"Mem usage内存使用大小",[19,97042,97043],{},"increment内存增量",[19,97045,97046],{},"Line content代码内容",[19,97048,97049],{},"补充说明：",[19,97051,97052],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,97054,95318],{},[19,97056,97057],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,97059,97060],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,97062,97063],{},[1576,97064],{"alt":141,"src":97065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,97067,97068],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,97070,97071],{},"这时候需要重新加载模块",[220,97073,97075],{"className":30493,"code":97074,"language":30495,"meta":141,"style":141},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[30,97076,97077,97082,97089,97094],{"__ignoreMap":141},[228,97078,97079],{"class":230,"line":231},[228,97080,97081],{"class":297},"#重新加载模块\n",[228,97083,97084,97086],{"class":230,"line":142},[228,97085,30507],{"class":234},[228,97087,97088],{"class":238}," importlib\n",[228,97090,97091],{"class":230,"line":1293},[228,97092,97093],{"class":238},"importlib.reload(mprun_test)\n",[228,97095,97096,97098,97101,97103],{"class":230,"line":1308},[228,97097,566],{"class":234},[228,97099,97100],{"class":238},"mprun ",[228,97102,770],{"class":234},[228,97104,97105],{"class":238},"f mprun_test.fun_test mprun_test.fun_test()\n",[5241,97107,97108],{},"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":141,"searchDepth":142,"depth":142,"links":97110},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97017,"description":154},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97117,"title":97118,"body":97119,"description":154,"extension":155,"meta":97136,"navigation":157,"path":97137,"seo":97138,"stem":97139,"__hash__":97140},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97120,"toc":97134},[97121,97124,97129],[10,97122,97118],{"id":97123},"_3一维数组的索引和切片",[19,97125,97126],{},[1576,97127],{"alt":141,"src":97128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,97130,97131],{},[1576,97132],{"alt":141,"src":97133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":141,"searchDepth":142,"depth":142,"links":97135},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97118,"description":154},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97142,"title":97143,"body":97144,"description":154,"extension":155,"meta":97627,"navigation":157,"path":97628,"seo":97629,"stem":97630,"__hash__":97631},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97145,"toc":97625},[97146,97149,97152,97157,97190,97193,97231,97234,97268,97271,97376,97379,97416,97419,97520,97523,97574,97577,97619,97622],[10,97147,97143],{"id":97148},"_4二维数组的索引与切片",[19,97150,97151],{},"①获取指定单个元素",[19,97153,97154],{},[1576,97155],{"alt":141,"src":97156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[220,97158,97160],{"className":30493,"code":97159,"language":30495,"meta":141,"style":141},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[30,97161,97162,97167,97172,97177],{"__ignoreMap":141},[228,97163,97164],{"class":230,"line":231},[228,97165,97166],{"class":297},"#获取元素9\n",[228,97168,97169],{"class":230,"line":142},[228,97170,97171],{"class":297},"#先获取所在行，再获取所在列\n",[228,97173,97174],{"class":230,"line":1293},[228,97175,97176],{"class":297},"#数组[行索引号，列索引号]\n",[228,97178,97179,97182,97184,97186,97188],{"class":230,"line":1308},[228,97180,97181],{"class":238},"a[",[228,97183,456],{"class":287},[228,97185,616],{"class":238},[228,97187,316],{"class":287},[228,97189,33361],{"class":238},[19,97191,97192],{},"②获取整行元素",[220,97194,97196],{"className":30493,"code":97195,"language":30495,"meta":141,"style":141},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[30,97197,97198,97203,97208,97216,97221],{"__ignoreMap":141},[228,97199,97200],{"class":230,"line":231},[228,97201,97202],{"class":297},"#获取整行 数组[行索引号]\n",[228,97204,97205],{"class":230,"line":142},[228,97206,97207],{"class":297},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[228,97209,97210,97212,97214],{"class":230,"line":1293},[228,97211,97181],{"class":238},[228,97213,316],{"class":287},[228,97215,33361],{"class":238},[228,97217,97218],{"class":230,"line":1308},[228,97219,97220],{"class":297},"#也可以负索引获取一行\n",[228,97222,97223,97225,97227,97229],{"class":230,"line":1314},[228,97224,97181],{"class":238},[228,97226,770],{"class":234},[228,97228,456],{"class":287},[228,97230,33361],{"class":238},[19,97232,97233],{},"③获取整列元素",[220,97235,97237],{"className":30493,"code":97236,"language":30495,"meta":141,"style":141},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[30,97238,97239,97244,97253,97258],{"__ignoreMap":141},[228,97240,97241],{"class":230,"line":231},[228,97242,97243],{"class":297},"#获取整列 数组名[:,列索引]\n",[228,97245,97246,97249,97251],{"class":230,"line":142},[228,97247,97248],{"class":238},"a[:,",[228,97250,316],{"class":287},[228,97252,33361],{"class":238},[228,97254,97255],{"class":230,"line":1293},[228,97256,97257],{"class":297},"#也可以负索引获取一列\n",[228,97259,97260,97262,97264,97266],{"class":230,"line":1308},[228,97261,97248],{"class":238},[228,97263,770],{"class":234},[228,97265,456],{"class":287},[228,97267,33361],{"class":238},[19,97269,97270],{},"④部分行部分列的元素",[220,97272,97274],{"className":30493,"code":97273,"language":30495,"meta":141,"style":141},"#部分行部分列 数组名[行切片，列切片]\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",[30,97275,97276,97281,97291,97295,97299,97304,97309,97313,97325,97329,97333,97338,97343,97348,97353,97357,97362],{"__ignoreMap":141},[228,97277,97278],{"class":230,"line":231},[228,97279,97280],{"class":297},"#部分行部分列 数组名[行切片，列切片]\n",[228,97282,97283,97286,97288],{"class":230,"line":142},[228,97284,97285],{"class":238},"a[:",[228,97287,316],{"class":287},[228,97289,97290],{"class":238},",:]\n",[228,97292,97293],{"class":230,"line":1293},[228,97294,93679],{"class":297},[228,97296,97297],{"class":230,"line":1308},[228,97298,94043],{"class":343},[228,97300,97301],{"class":230,"line":1314},[228,97302,97303],{"class":343},"array([[ 1,  2,  3,  4,  5,  6],\n",[228,97305,97306],{"class":230,"line":1328},[228,97307,97308],{"class":343},"       [ 7,  8,  9, 10, 11, 12]])\n",[228,97310,97311],{"class":230,"line":1334},[228,97312,94043],{"class":343},[228,97314,97315,97317,97319,97321,97323],{"class":230,"line":1425},[228,97316,97248],{"class":238},[228,97318,456],{"class":287},[228,97320,1097],{"class":238},[228,97322,531],{"class":287},[228,97324,33361],{"class":238},[228,97326,97327],{"class":230,"line":1431},[228,97328,93679],{"class":297},[228,97330,97331],{"class":230,"line":1443},[228,97332,94043],{"class":343},[228,97334,97335],{"class":230,"line":1726},[228,97336,97337],{"class":343},"array([[ 2,  3,  4],\n",[228,97339,97340],{"class":230,"line":1731},[228,97341,97342],{"class":343},"       [ 8,  9, 10],\n",[228,97344,97345],{"class":230,"line":1737},[228,97346,97347],{"class":343},"       [14, 15, 16],\n",[228,97349,97350],{"class":230,"line":1742},[228,97351,97352],{"class":343},"       [20, 21, 22]])\n",[228,97354,97355],{"class":230,"line":1756},[228,97356,94043],{"class":343},[228,97358,97359],{"class":230,"line":1761},[228,97360,97361],{"class":297},"#对列行同时进行切片，使用了step参数\n",[228,97363,97364,97367,97369,97372,97374],{"class":230,"line":1767},[228,97365,97366],{"class":238},"a[::",[228,97368,316],{"class":287},[228,97370,97371],{"class":238},",::",[228,97373,316],{"class":287},[228,97375,33361],{"class":238},[19,97377,97378],{},"⑤同时获取两个元素",[220,97380,97382],{"className":30493,"code":97381,"language":30495,"meta":141,"style":141},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[30,97383,97384,97389,97394],{"__ignoreMap":141},[228,97385,97386],{"class":230,"line":231},[228,97387,97388],{"class":297},"#同时获取第三行第二列，第四行第一列\n",[228,97390,97391],{"class":230,"line":142},[228,97392,97393],{"class":297},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[228,97395,97396,97399,97401,97403,97405,97407,97409,97411,97413],{"class":230,"line":1293},[228,97397,97398],{"class":238},"a[(",[228,97400,316],{"class":287},[228,97402,616],{"class":238},[228,97404,310],{"class":287},[228,97406,42362],{"class":238},[228,97408,456],{"class":287},[228,97410,616],{"class":238},[228,97412,430],{"class":287},[228,97414,97415],{"class":238},")]\n",[19,97417,97418],{},"⑥切片，对行进行反向获取",[220,97420,97422],{"className":30493,"code":97421,"language":30495,"meta":141,"style":141},"#切片 对所有行进行反向获取\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",[30,97423,97424,97429,97439,97443,97447,97452,97457,97462,97467,97471,97476,97492,97496,97501,97506,97511,97516],{"__ignoreMap":141},[228,97425,97426],{"class":230,"line":231},[228,97427,97428],{"class":297},"#切片 对所有行进行反向获取\n",[228,97430,97431,97433,97435,97437],{"class":230,"line":142},[228,97432,97366],{"class":238},[228,97434,770],{"class":234},[228,97436,456],{"class":287},[228,97438,33361],{"class":238},[228,97440,97441],{"class":230,"line":1293},[228,97442,93679],{"class":297},[228,97444,97445],{"class":230,"line":1308},[228,97446,94043],{"class":343},[228,97448,97449],{"class":230,"line":1314},[228,97450,97451],{"class":343},"array([[19, 20, 21, 22, 23, 24],\n",[228,97453,97454],{"class":230,"line":1328},[228,97455,97456],{"class":343},"       [13, 14, 15, 16, 17, 18],\n",[228,97458,97459],{"class":230,"line":1334},[228,97460,97461],{"class":343},"       [ 7,  8,  9, 10, 11, 12],\n",[228,97463,97464],{"class":230,"line":1425},[228,97465,97466],{"class":343},"       [ 1,  2,  3,  4,  5,  6]])\n",[228,97468,97469],{"class":230,"line":1431},[228,97470,94043],{"class":343},[228,97472,97473],{"class":230,"line":1443},[228,97474,97475],{"class":297},"#对行列都进行反向切片获取\n",[228,97477,97478,97480,97482,97484,97486,97488,97490],{"class":230,"line":1726},[228,97479,97366],{"class":238},[228,97481,770],{"class":234},[228,97483,456],{"class":287},[228,97485,97371],{"class":238},[228,97487,770],{"class":234},[228,97489,456],{"class":287},[228,97491,33361],{"class":238},[228,97493,97494],{"class":230,"line":1731},[228,97495,94043],{"class":343},[228,97497,97498],{"class":230,"line":1737},[228,97499,97500],{"class":343},"array([[24, 23, 22, 21, 20, 19],\n",[228,97502,97503],{"class":230,"line":1742},[228,97504,97505],{"class":343},"       [18, 17, 16, 15, 14, 13],\n",[228,97507,97508],{"class":230,"line":1756},[228,97509,97510],{"class":343},"       [12, 11, 10,  9,  8,  7],\n",[228,97512,97513],{"class":230,"line":1761},[228,97514,97515],{"class":343},"       [ 6,  5,  4,  3,  2,  1]])\n",[228,97517,97518],{"class":230,"line":1767},[228,97519,94043],{"class":343},[19,97521,97522],{},"⑦修改元素",[220,97524,97526],{"className":30493,"code":97525,"language":30495,"meta":141,"style":141},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[30,97527,97528,97533,97551,97556],{"__ignoreMap":141},[228,97529,97530],{"class":230,"line":231},[228,97531,97532],{"class":297},"#获取前两行和前两列\n",[228,97534,97535,97538,97540,97542,97544,97547,97549],{"class":230,"line":142},[228,97536,97537],{"class":238},"sub_a",[228,97539,284],{"class":234},[228,97541,97285],{"class":238},[228,97543,316],{"class":287},[228,97545,97546],{"class":238},",:",[228,97548,316],{"class":287},[228,97550,33361],{"class":238},[228,97552,97553],{"class":230,"line":1293},[228,97554,97555],{"class":297},"#修改sub_a第一个元素的值\n",[228,97557,97558,97561,97563,97565,97567,97569,97571],{"class":230,"line":1308},[228,97559,97560],{"class":238},"sub_a[",[228,97562,430],{"class":287},[228,97564,616],{"class":238},[228,97566,430],{"class":287},[228,97568,1178],{"class":238},[228,97570,284],{"class":234},[228,97572,97573],{"class":287},"100\n",[19,97575,97576],{},"⑧数组复制copy()",[220,97578,97580],{"className":30493,"code":97579,"language":30495,"meta":141,"style":141},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[30,97581,97582,97587,97597,97602],{"__ignoreMap":141},[228,97583,97584],{"class":230,"line":231},[228,97585,97586],{"class":297},"#数组复制\n",[228,97588,97589,97592,97594],{"class":230,"line":142},[228,97590,97591],{"class":238},"copy_a",[228,97593,284],{"class":234},[228,97595,97596],{"class":238},"np.copy(sub_a)\n",[228,97598,97599],{"class":230,"line":1293},[228,97600,97601],{"class":297},"#修改copy_a后不影响原数组\n",[228,97603,97604,97607,97609,97611,97613,97615,97617],{"class":230,"line":1308},[228,97605,97606],{"class":238},"copy_a[",[228,97608,430],{"class":287},[228,97610,616],{"class":238},[228,97612,430],{"class":287},[228,97614,1178],{"class":238},[228,97616,284],{"class":234},[228,97618,97573],{"class":287},[19,97620,97621],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[5241,97623,97624],{},"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":141,"searchDepth":142,"depth":142,"links":97626},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97143,"description":154},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97633,"title":97634,"body":97635,"description":154,"extension":155,"meta":98127,"navigation":157,"path":98128,"seo":98129,"stem":98130,"__hash__":98131},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97636,"toc":98119},[97637,97640,97644,97647,97650,97703,97706,97731,97734,97753,97773,97776,97792,97796,97842,97846,97888,97892,97895,97898,97901,97904,97907,97969,98029,98033,98036,98093,98097,98102,98111,98116],[10,97638,97634],{"id":97639},"_5改变数组的维度",[14,97641,97643],{"id":97642},"_51-使用reshape","5.1 使用reshape()",[19,97645,97646],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,97648,97649],{},"①一维数组转换为二维数组",[220,97651,97653],{"className":30493,"code":97652,"language":30495,"meta":141,"style":141},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[30,97654,97655,97671,97676,97681,97686],{"__ignoreMap":141},[228,97656,97657,97659,97661,97663,97665,97667,97669],{"class":230,"line":231},[228,97658,476],{"class":238},[228,97660,284],{"class":234},[228,97662,93117],{"class":238},[228,97664,456],{"class":287},[228,97666,616],{"class":238},[228,97668,761],{"class":287},[228,97670,245],{"class":238},[228,97672,97673],{"class":230,"line":142},[228,97674,97675],{"class":297},"#将一维数组进行转换\n",[228,97677,97678],{"class":230,"line":1293},[228,97679,97680],{"class":297},"#注意点：元素个数不可以变\n",[228,97682,97683],{"class":230,"line":1308},[228,97684,97685],{"class":297},"#转换维度要保持一致，不一致就异常！！！\n",[228,97687,97688,97690,97692,97695,97697,97699,97701],{"class":230,"line":1314},[228,97689,93421],{"class":238},[228,97691,284],{"class":234},[228,97693,97694],{"class":238},"a.reshape(",[228,97696,316],{"class":287},[228,97698,616],{"class":238},[228,97700,582],{"class":287},[228,97702,245],{"class":238},[19,97704,97705],{},"②一维数组转换为三维数组",[220,97707,97709],{"className":30493,"code":97708,"language":30495,"meta":141,"style":141},"aaa=a.reshape(2,3,2)\n",[30,97710,97711],{"__ignoreMap":141},[228,97712,97713,97715,97717,97719,97721,97723,97725,97727,97729],{"class":230,"line":231},[228,97714,95636],{"class":238},[228,97716,284],{"class":234},[228,97718,97694],{"class":238},[228,97720,316],{"class":287},[228,97722,616],{"class":238},[228,97724,310],{"class":287},[228,97726,616],{"class":238},[228,97728,316],{"class":287},[228,97730,245],{"class":238},[19,97732,97733],{},"③二维数组转化为一维数组",[220,97735,97737],{"className":30493,"code":97736,"language":30495,"meta":141,"style":141},"#知道元素个数：\naa.reshape(12)\n",[30,97738,97739,97744],{"__ignoreMap":141},[228,97740,97741],{"class":230,"line":231},[228,97742,97743],{"class":297},"#知道元素个数：\n",[228,97745,97746,97749,97751],{"class":230,"line":142},[228,97747,97748],{"class":238},"aa.reshape(",[228,97750,736],{"class":287},[228,97752,245],{"class":238},[220,97754,97756],{"className":30493,"code":97755,"language":30495,"meta":141,"style":141},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[30,97757,97758,97763],{"__ignoreMap":141},[228,97759,97760],{"class":230,"line":231},[228,97761,97762],{"class":297},"#不知道元素个数，参数传递-1\n",[228,97764,97765,97767,97769,97771],{"class":230,"line":142},[228,97766,97748],{"class":238},[228,97768,770],{"class":234},[228,97770,456],{"class":287},[228,97772,245],{"class":238},[19,97774,97775],{},"④三维数组转换为一维数组",[220,97777,97779],{"className":30493,"code":97778,"language":30495,"meta":141,"style":141},"aaa.reshape(-1)\n",[30,97780,97781],{"__ignoreMap":141},[228,97782,97783,97786,97788,97790],{"class":230,"line":231},[228,97784,97785],{"class":238},"aaa.reshape(",[228,97787,770],{"class":234},[228,97789,456],{"class":287},[228,97791,245],{"class":238},[14,97793,97795],{"id":97794},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[220,97797,97799],{"className":30493,"code":97798,"language":30495,"meta":141,"style":141},"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",[30,97800,97801,97828,97833,97837],{"__ignoreMap":141},[228,97802,97803,97805,97807,97809,97811,97813,97815,97817,97819,97821,97823,97825],{"class":230,"line":231},[228,97804,93421],{"class":238},[228,97806,284],{"class":234},[228,97808,93117],{"class":238},[228,97810,456],{"class":287},[228,97812,616],{"class":238},[228,97814,761],{"class":287},[228,97816,93122],{"class":238},[228,97818,316],{"class":287},[228,97820,616],{"class":238},[228,97822,582],{"class":287},[228,97824,667],{"class":238},[228,97826,97827],{"class":297},"#转换为2行6列的数组\n",[228,97829,97830],{"class":230,"line":142},[228,97831,97832],{"class":238},"aa.revel()\n",[228,97834,97835],{"class":230,"line":1293},[228,97836,93679],{"class":297},[228,97838,97839],{"class":230,"line":1308},[228,97840,97841],{"class":297},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,97843,97845],{"id":97844},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[220,97847,97849],{"className":30493,"code":97848,"language":30495,"meta":141,"style":141},"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",[30,97850,97851,97875,97880,97884],{"__ignoreMap":141},[228,97852,97853,97855,97857,97859,97861,97863,97865,97867,97869,97871,97873],{"class":230,"line":231},[228,97854,93421],{"class":238},[228,97856,284],{"class":234},[228,97858,93117],{"class":238},[228,97860,456],{"class":287},[228,97862,616],{"class":238},[228,97864,761],{"class":287},[228,97866,93122],{"class":238},[228,97868,316],{"class":287},[228,97870,616],{"class":238},[228,97872,582],{"class":287},[228,97874,245],{"class":238},[228,97876,97877],{"class":230,"line":142},[228,97878,97879],{"class":238},"aa.flatten()\n",[228,97881,97882],{"class":230,"line":1293},[228,97883,93679],{"class":297},[228,97885,97886],{"class":230,"line":1308},[228,97887,97841],{"class":297},[14,97889,97891],{"id":97890},"_54-使用resize","5.4 使用resize()",[19,97893,97894],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,97896,97897],{},"通过resize方法可以改变数组的维度",[19,97899,97900],{},"#resize修改数组维度",[19,97902,97903],{},"#以元组的形式指定形状",[19,97905,97906],{},"#改变的是原数组",[220,97908,97910],{"className":30493,"code":97909,"language":30495,"meta":141,"style":141},"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",[30,97911,97912,97928,97948,97961,97965],{"__ignoreMap":141},[228,97913,97914,97916,97918,97920,97922,97924,97926],{"class":230,"line":231},[228,97915,476],{"class":238},[228,97917,284],{"class":234},[228,97919,93117],{"class":238},[228,97921,456],{"class":287},[228,97923,616],{"class":238},[228,97925,761],{"class":287},[228,97927,245],{"class":238},[228,97929,97930,97933,97935,97937,97939,97941,97943,97945],{"class":230,"line":142},[228,97931,97932],{"class":238},"a.shape",[228,97934,284],{"class":234},[228,97936,239],{"class":238},[228,97938,316],{"class":287},[228,97940,616],{"class":238},[228,97942,582],{"class":287},[228,97944,667],{"class":238},[228,97946,97947],{"class":297},"#改变了原数组\n",[228,97949,97950,97952,97954,97957,97959],{"class":230,"line":1293},[228,97951,476],{"class":238},[228,97953,284],{"class":234},[228,97955,97956],{"class":238},"resize((",[228,97958,736],{"class":287},[228,97960,30612],{"class":238},[228,97962,97963],{"class":230,"line":1308},[228,97964,93679],{"class":297},[228,97966,97967],{"class":230,"line":1314},[228,97968,97841],{"class":297},[220,97970,97972],{"className":30493,"code":97971,"language":30495,"meta":141,"style":141},"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",[30,97973,97974,97987,97991,97995,98000,98005,98010,98015,98020,98025],{"__ignoreMap":141},[228,97975,97976,97979,97981,97983,97985],{"class":230,"line":231},[228,97977,97978],{"class":238},"a.resize((",[228,97980,582],{"class":287},[228,97982,616],{"class":238},[228,97984,316],{"class":287},[228,97986,30612],{"class":238},[228,97988,97989],{"class":230,"line":142},[228,97990,93679],{"class":297},[228,97992,97993],{"class":230,"line":1293},[228,97994,94043],{"class":343},[228,97996,97997],{"class":230,"line":1308},[228,97998,97999],{"class":343},"array([[ 1,  2],\n",[228,98001,98002],{"class":230,"line":1314},[228,98003,98004],{"class":343},"       [ 3,  4],\n",[228,98006,98007],{"class":230,"line":1328},[228,98008,98009],{"class":343},"       [ 5,  6],\n",[228,98011,98012],{"class":230,"line":1334},[228,98013,98014],{"class":343},"       [ 7,  8],\n",[228,98016,98017],{"class":230,"line":1425},[228,98018,98019],{"class":343},"       [ 9, 10],\n",[228,98021,98022],{"class":230,"line":1431},[228,98023,98024],{"class":343},"       [11, 12]])\n",[228,98026,98027],{"class":230,"line":1443},[228,98028,94043],{"class":343},[14,98030,98032],{"id":98031},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,98034,98035],{},"改变了原数组",[220,98037,98039],{"className":30493,"code":98038,"language":30495,"meta":141,"style":141},"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",[30,98040,98041,98057,98073,98077,98081,98085,98089],{"__ignoreMap":141},[228,98042,98043,98045,98047,98049,98051,98053,98055],{"class":230,"line":231},[228,98044,476],{"class":238},[228,98046,284],{"class":234},[228,98048,93117],{"class":238},[228,98050,456],{"class":287},[228,98052,616],{"class":238},[228,98054,761],{"class":287},[228,98056,245],{"class":238},[228,98058,98059,98061,98063,98065,98067,98069,98071],{"class":230,"line":142},[228,98060,97932],{"class":238},[228,98062,284],{"class":234},[228,98064,239],{"class":238},[228,98066,316],{"class":287},[228,98068,616],{"class":238},[228,98070,582],{"class":287},[228,98072,245],{"class":238},[228,98074,98075],{"class":230,"line":1293},[228,98076,93679],{"class":297},[228,98078,98079],{"class":230,"line":1308},[228,98080,94043],{"class":343},[228,98082,98083],{"class":230,"line":1314},[228,98084,97303],{"class":343},[228,98086,98087],{"class":230,"line":1328},[228,98088,97308],{"class":343},[228,98090,98091],{"class":230,"line":1334},[228,98092,94043],{"class":343},[14,98094,98096],{"id":98095},"_56-重要比较","5.6 重要比较：",[19,98098,98099],{},[1576,98100],{"alt":141,"src":98101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,98103,98104,98105,98107,98108,98110],{},"口诀：NumPy 函数要么用 ",[30,98106,96078],{},"，要么用 ",[30,98109,31611],{},"，创建结构用 shape，造数据用 size",[19,98112,98113],{},[1576,98114],{"alt":141,"src":98115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[5241,98117,98118],{},"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":141,"searchDepth":142,"depth":142,"links":98120},[98121,98122,98123,98124,98125,98126],{"id":97642,"depth":142,"text":97643},{"id":97794,"depth":142,"text":97795},{"id":97844,"depth":142,"text":97845},{"id":97890,"depth":142,"text":97891},{"id":98031,"depth":142,"text":98032},{"id":98095,"depth":142,"text":98096},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97634,"description":154},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98133,"title":98134,"body":98135,"description":154,"extension":155,"meta":99207,"navigation":157,"path":99208,"seo":99209,"stem":99210,"__hash__":99211},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98136,"toc":99201},[98137,98140,98144,98147,98150,98153,98218,98221,98261,98264,98346,98349,98354,98376,98378,98383,98388,98391,98394,98549,98552,98754,98758,98761,98764,98832,98834,98839,98842,98845,98925,98929,98932,98934,99007,99009,99014,99016,99096,99100,99103,99106,99109,99112,99115,99118,99198],[10,98138,98134],{"id":98139},"_6数组的拼接",[14,98141,98143],{"id":98142},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,98145,98146],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,98148,98149],{},"函数内部传两个数列构成的数列或者元组",[19,98151,98152],{},"①一维数组的拼接",[220,98154,98156],{"className":30493,"code":98155,"language":30495,"meta":141,"style":141},"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",[30,98157,98158,98178,98198,98203,98208,98213],{"__ignoreMap":141},[228,98159,98160,98162,98164,98166,98168,98170,98172,98174,98176],{"class":230,"line":231},[228,98161,476],{"class":238},[228,98163,284],{"class":234},[228,98165,93139],{"class":238},[228,98167,456],{"class":287},[228,98169,616],{"class":238},[228,98171,316],{"class":287},[228,98173,616],{"class":238},[228,98175,310],{"class":287},[228,98177,4771],{"class":238},[228,98179,98180,98182,98184,98186,98188,98190,98192,98194,98196],{"class":230,"line":142},[228,98181,501],{"class":238},[228,98183,284],{"class":234},[228,98185,93139],{"class":238},[228,98187,531],{"class":287},[228,98189,616],{"class":238},[228,98191,557],{"class":287},[228,98193,616],{"class":238},[228,98195,582],{"class":287},[228,98197,4771],{"class":238},[228,98199,98200],{"class":230,"line":1293},[228,98201,98202],{"class":297},"#调用concatenate进行数组拼接\n",[228,98204,98205],{"class":230,"line":1308},[228,98206,98207],{"class":238},"np.concatenate((a,b))\n",[228,98209,98210],{"class":230,"line":1314},[228,98211,98212],{"class":297},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[228,98214,98215],{"class":230,"line":1328},[228,98216,98217],{"class":297},"#np.concatenate([a,b])\n",[19,98219,98220],{},"②一维多个数组拼接",[220,98222,98224],{"className":30493,"code":98223,"language":30495,"meta":141,"style":141},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[30,98225,98226,98231,98251,98256],{"__ignoreMap":141},[228,98227,98228],{"class":230,"line":231},[228,98229,98230],{"class":297},"#也可以多个数组进行拼接\n",[228,98232,98233,98235,98237,98239,98241,98243,98245,98247,98249],{"class":230,"line":142},[228,98234,526],{"class":238},[228,98236,284],{"class":234},[228,98238,93139],{"class":238},[228,98240,684],{"class":287},[228,98242,616],{"class":238},[228,98244,710],{"class":287},[228,98246,616],{"class":238},[228,98248,761],{"class":287},[228,98250,4771],{"class":238},[228,98252,98253],{"class":230,"line":1293},[228,98254,98255],{"class":238},"c\n",[228,98257,98258],{"class":230,"line":1308},[228,98259,98260],{"class":238},"np.concatenate((a,b,c))\n",[19,98262,98263],{},"③二维数组拼接",[220,98265,98267],{"className":30493,"code":98266,"language":30495,"meta":141,"style":141},"#二维数组使用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",[30,98268,98269,98274,98298,98323,98328,98333],{"__ignoreMap":141},[228,98270,98271],{"class":230,"line":231},[228,98272,98273],{"class":297},"#二维数组使用concatenate进行拼接\n",[228,98275,98276,98278,98280,98282,98284,98286,98288,98290,98292,98294,98296],{"class":230,"line":142},[228,98277,93421],{"class":238},[228,98279,284],{"class":234},[228,98281,93117],{"class":238},[228,98283,456],{"class":287},[228,98285,616],{"class":238},[228,98287,761],{"class":287},[228,98289,93122],{"class":238},[228,98291,310],{"class":287},[228,98293,616],{"class":238},[228,98295,531],{"class":287},[228,98297,245],{"class":238},[228,98299,98300,98303,98305,98307,98309,98311,98313,98315,98317,98319,98321],{"class":230,"line":1293},[228,98301,98302],{"class":238},"bb",[228,98304,284],{"class":234},[228,98306,93117],{"class":238},[228,98308,575],{"class":287},[228,98310,616],{"class":238},[228,98312,880],{"class":287},[228,98314,93122],{"class":238},[228,98316,310],{"class":287},[228,98318,616],{"class":238},[228,98320,531],{"class":287},[228,98322,245],{"class":238},[228,98324,98325],{"class":230,"line":1308},[228,98326,98327],{"class":297},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[228,98329,98330],{"class":230,"line":1314},[228,98331,98332],{"class":297},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[228,98334,98335,98338,98340,98342,98344],{"class":230,"line":1328},[228,98336,98337],{"class":238},"np.concatenate((aa,bb),",[228,98339,47629],{"class":5331},[228,98341,284],{"class":234},[228,98343,430],{"class":287},[228,98345,245],{"class":238},[19,98347,98348],{},"结果：",[19,98350,98351],{},[1576,98352],{"alt":141,"src":98353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[220,98355,98357],{"className":30493,"code":98356,"language":30495,"meta":141,"style":141},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[30,98358,98359,98364],{"__ignoreMap":141},[228,98360,98361],{"class":230,"line":231},[228,98362,98363],{"class":297},"#指定axis为1进行拼接\n",[228,98365,98366,98368,98370,98372,98374],{"class":230,"line":142},[228,98367,98337],{"class":238},[228,98369,47629],{"class":5331},[228,98371,284],{"class":234},[228,98373,456],{"class":287},[228,98375,245],{"class":238},[19,98377,98348],{},[19,98379,98380],{},[1576,98381],{"alt":141,"src":98382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,98384,98385],{},[388,98386,98387],{},"二维数组总结：0竖着方向，1横着方向",[19,98389,98390],{},"④三维数组拼接",[19,98392,98393],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[220,98395,98397],{"className":30493,"code":98396,"language":30495,"meta":141,"style":141},"#两个三行六列\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",[30,98398,98399,98404,98432,98462,98467,98484,98489,98494,98499,98516,98521,98526,98531,98544],{"__ignoreMap":141},[228,98400,98401],{"class":230,"line":231},[228,98402,98403],{"class":297},"#两个三行六列\n",[228,98405,98406,98408,98410,98412,98414,98416,98418,98420,98422,98424,98426,98428,98430],{"class":230,"line":142},[228,98407,95636],{"class":238},[228,98409,284],{"class":234},[228,98411,93117],{"class":238},[228,98413,456],{"class":287},[228,98415,616],{"class":238},[228,98417,563],{"class":287},[228,98419,93122],{"class":238},[228,98421,316],{"class":287},[228,98423,616],{"class":238},[228,98425,310],{"class":287},[228,98427,616],{"class":238},[228,98429,582],{"class":287},[228,98431,245],{"class":238},[228,98433,98434,98437,98439,98441,98443,98445,98448,98450,98452,98454,98456,98458,98460],{"class":230,"line":1293},[228,98435,98436],{"class":238},"bbb",[228,98438,284],{"class":234},[228,98440,93117],{"class":238},[228,98442,575],{"class":287},[228,98444,616],{"class":238},[228,98446,98447],{"class":287},"137",[228,98449,93122],{"class":238},[228,98451,316],{"class":287},[228,98453,616],{"class":238},[228,98455,310],{"class":287},[228,98457,616],{"class":238},[228,98459,582],{"class":287},[228,98461,245],{"class":238},[228,98463,98464],{"class":230,"line":1308},[228,98465,98466],{"class":297},"#axis=0\n",[228,98468,98469,98471,98473,98476,98478,98480,98482],{"class":230,"line":1314},[228,98470,933],{"class":238},[228,98472,284],{"class":234},[228,98474,98475],{"class":238},"np.concatenate((aaa,bbb),",[228,98477,47629],{"class":5331},[228,98479,284],{"class":234},[228,98481,430],{"class":287},[228,98483,245],{"class":238},[228,98485,98486],{"class":230,"line":1328},[228,98487,98488],{"class":238},"s.shape\n",[228,98490,98491],{"class":230,"line":1334},[228,98492,98493],{"class":297},"#输出：(4,3,6)\n",[228,98495,98496],{"class":230,"line":1425},[228,98497,98498],{"class":297},"#axis=1\n",[228,98500,98501,98504,98506,98508,98510,98512,98514],{"class":230,"line":1431},[228,98502,98503],{"class":238},"ss",[228,98505,284],{"class":234},[228,98507,98475],{"class":238},[228,98509,47629],{"class":5331},[228,98511,284],{"class":234},[228,98513,456],{"class":287},[228,98515,245],{"class":238},[228,98517,98518],{"class":230,"line":1443},[228,98519,98520],{"class":238},"ss.shape\n",[228,98522,98523],{"class":230,"line":1726},[228,98524,98525],{"class":297},"#输出：(2,6,6)\n",[228,98527,98528],{"class":230,"line":1731},[228,98529,98530],{"class":297},"#axis=2\n",[228,98532,98533,98535,98537,98539,98541],{"class":230,"line":1737},[228,98534,98475],{"class":238},[228,98536,47629],{"class":5331},[228,98538,284],{"class":234},[228,98540,316],{"class":287},[228,98542,98543],{"class":238},").shape\n",[228,98545,98546],{"class":230,"line":1742},[228,98547,98548],{"class":297},"#输出：（2，3，12）\n",[19,98550,98551],{},"⑤四维数组拼接",[220,98553,98555],{"className":30493,"code":98554,"language":30495,"meta":141,"style":141},"#两个三行六列\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",[30,98556,98557,98561,98589,98617,98642,98668,98672,98685,98690,98694,98706,98711,98715,98727,98732,98737,98749],{"__ignoreMap":141},[228,98558,98559],{"class":230,"line":231},[228,98560,98403],{"class":297},[228,98562,98563,98565,98567,98569,98571,98573,98575,98577,98579,98581,98583,98585,98587],{"class":230,"line":142},[228,98564,95636],{"class":238},[228,98566,284],{"class":234},[228,98568,93117],{"class":238},[228,98570,456],{"class":287},[228,98572,616],{"class":238},[228,98574,563],{"class":287},[228,98576,93122],{"class":238},[228,98578,316],{"class":287},[228,98580,616],{"class":238},[228,98582,310],{"class":287},[228,98584,616],{"class":238},[228,98586,582],{"class":287},[228,98588,245],{"class":238},[228,98590,98591,98593,98595,98597,98599,98601,98603,98605,98607,98609,98611,98613,98615],{"class":230,"line":1293},[228,98592,98436],{"class":238},[228,98594,284],{"class":234},[228,98596,93117],{"class":238},[228,98598,575],{"class":287},[228,98600,616],{"class":238},[228,98602,98447],{"class":287},[228,98604,93122],{"class":238},[228,98606,316],{"class":287},[228,98608,616],{"class":238},[228,98610,310],{"class":287},[228,98612,616],{"class":238},[228,98614,582],{"class":287},[228,98616,245],{"class":238},[228,98618,98619,98622,98624,98626,98628,98630,98632,98634,98636,98638,98640],{"class":230,"line":1308},[228,98620,98621],{"class":238},"aaaa",[228,98623,284],{"class":234},[228,98625,97785],{"class":238},[228,98627,316],{"class":287},[228,98629,616],{"class":238},[228,98631,310],{"class":287},[228,98633,616],{"class":238},[228,98635,310],{"class":287},[228,98637,616],{"class":238},[228,98639,316],{"class":287},[228,98641,245],{"class":238},[228,98643,98644,98647,98649,98652,98654,98656,98658,98660,98662,98664,98666],{"class":230,"line":1314},[228,98645,98646],{"class":238},"bbbb",[228,98648,284],{"class":234},[228,98650,98651],{"class":238},"bbb.reshape(",[228,98653,316],{"class":287},[228,98655,616],{"class":238},[228,98657,310],{"class":287},[228,98659,616],{"class":238},[228,98661,310],{"class":287},[228,98663,616],{"class":238},[228,98665,316],{"class":287},[228,98667,245],{"class":238},[228,98669,98670],{"class":230,"line":1328},[228,98671,98466],{"class":297},[228,98673,98674,98677,98679,98681,98683],{"class":230,"line":1334},[228,98675,98676],{"class":238},"np.concatenate((aaaa,bbbb),",[228,98678,47629],{"class":5331},[228,98680,284],{"class":234},[228,98682,430],{"class":287},[228,98684,98543],{"class":238},[228,98686,98687],{"class":230,"line":1425},[228,98688,98689],{"class":297},"#结果：（4，3，3，2）\n",[228,98691,98692],{"class":230,"line":1431},[228,98693,98498],{"class":297},[228,98695,98696,98698,98700,98702,98704],{"class":230,"line":1443},[228,98697,98676],{"class":238},[228,98699,47629],{"class":5331},[228,98701,284],{"class":234},[228,98703,456],{"class":287},[228,98705,98543],{"class":238},[228,98707,98708],{"class":230,"line":1726},[228,98709,98710],{"class":297},"#结果：（2，6，3，2）\n",[228,98712,98713],{"class":230,"line":1731},[228,98714,98530],{"class":297},[228,98716,98717,98719,98721,98723,98725],{"class":230,"line":1737},[228,98718,98676],{"class":238},[228,98720,47629],{"class":5331},[228,98722,284],{"class":234},[228,98724,316],{"class":287},[228,98726,98543],{"class":238},[228,98728,98729],{"class":230,"line":1742},[228,98730,98731],{"class":297},"#结果：（2，3，6，2）\n",[228,98733,98734],{"class":230,"line":1756},[228,98735,98736],{"class":297},"#axis=3\n",[228,98738,98739,98741,98743,98745,98747],{"class":230,"line":1761},[228,98740,98676],{"class":238},[228,98742,47629],{"class":5331},[228,98744,284],{"class":234},[228,98746,310],{"class":287},[228,98748,98543],{"class":238},[228,98750,98751],{"class":230,"line":1767},[228,98752,98753],{"class":297},"#结果：（2，3，3，4）\n",[14,98755,98757],{"id":98756},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,98759,98760],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,98762,98763],{},"①二维数组",[220,98765,98767],{"className":30493,"code":98766,"language":30495,"meta":141,"style":141},"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",[30,98768,98769,98793,98817,98822,98827],{"__ignoreMap":141},[228,98770,98771,98773,98775,98777,98779,98781,98783,98785,98787,98789,98791],{"class":230,"line":231},[228,98772,93421],{"class":238},[228,98774,284],{"class":234},[228,98776,93117],{"class":238},[228,98778,456],{"class":287},[228,98780,616],{"class":238},[228,98782,761],{"class":287},[228,98784,93122],{"class":238},[228,98786,310],{"class":287},[228,98788,616],{"class":238},[228,98790,531],{"class":287},[228,98792,245],{"class":238},[228,98794,98795,98797,98799,98801,98803,98805,98807,98809,98811,98813,98815],{"class":230,"line":142},[228,98796,98302],{"class":238},[228,98798,284],{"class":234},[228,98800,93117],{"class":238},[228,98802,575],{"class":287},[228,98804,616],{"class":238},[228,98806,880],{"class":287},[228,98808,93122],{"class":238},[228,98810,310],{"class":287},[228,98812,616],{"class":238},[228,98814,531],{"class":287},[228,98816,245],{"class":238},[228,98818,98819],{"class":230,"line":1293},[228,98820,98821],{"class":238},"np.hstack((aa,bb))\n",[228,98823,98824],{"class":230,"line":1308},[228,98825,98826],{"class":297},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[228,98828,98829],{"class":230,"line":1314},[228,98830,98831],{"class":297},"#np.hstack([aa,bb])\n",[19,98833,98348],{},[19,98835,98836],{},[1576,98837],{"alt":141,"src":98838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,98840,98841],{},"等效于concatenate()函数中axis=1时的情况",[19,98843,98844],{},"②三维数组",[220,98846,98848],{"className":30493,"code":98847,"language":30495,"meta":141,"style":141},"#两个三行六列\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",[30,98849,98850,98854,98882,98910,98915,98920],{"__ignoreMap":141},[228,98851,98852],{"class":230,"line":231},[228,98853,98403],{"class":297},[228,98855,98856,98858,98860,98862,98864,98866,98868,98870,98872,98874,98876,98878,98880],{"class":230,"line":142},[228,98857,95636],{"class":238},[228,98859,284],{"class":234},[228,98861,93117],{"class":238},[228,98863,456],{"class":287},[228,98865,616],{"class":238},[228,98867,563],{"class":287},[228,98869,93122],{"class":238},[228,98871,316],{"class":287},[228,98873,616],{"class":238},[228,98875,310],{"class":287},[228,98877,616],{"class":238},[228,98879,582],{"class":287},[228,98881,245],{"class":238},[228,98883,98884,98886,98888,98890,98892,98894,98896,98898,98900,98902,98904,98906,98908],{"class":230,"line":1293},[228,98885,98436],{"class":238},[228,98887,284],{"class":234},[228,98889,93117],{"class":238},[228,98891,575],{"class":287},[228,98893,616],{"class":238},[228,98895,98447],{"class":287},[228,98897,93122],{"class":238},[228,98899,316],{"class":287},[228,98901,616],{"class":238},[228,98903,310],{"class":287},[228,98905,616],{"class":238},[228,98907,582],{"class":287},[228,98909,245],{"class":238},[228,98911,98912],{"class":230,"line":1308},[228,98913,98914],{"class":297},"#使用hstack\n",[228,98916,98917],{"class":230,"line":1314},[228,98918,98919],{"class":238},"np.hstack((aaa,bbb)).shape\n",[228,98921,98922],{"class":230,"line":1328},[228,98923,98924],{"class":297},"#输出：（2，6，6）\n",[14,98926,98928],{"id":98927},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,98930,98931],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,98933,98763],{},[220,98935,98937],{"className":30493,"code":98936,"language":30495,"meta":141,"style":141},"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",[30,98938,98939,98963,98987,98992,98997,99002],{"__ignoreMap":141},[228,98940,98941,98943,98945,98947,98949,98951,98953,98955,98957,98959,98961],{"class":230,"line":231},[228,98942,93421],{"class":238},[228,98944,284],{"class":234},[228,98946,93117],{"class":238},[228,98948,456],{"class":287},[228,98950,616],{"class":238},[228,98952,761],{"class":287},[228,98954,93122],{"class":238},[228,98956,310],{"class":287},[228,98958,616],{"class":238},[228,98960,531],{"class":287},[228,98962,245],{"class":238},[228,98964,98965,98967,98969,98971,98973,98975,98977,98979,98981,98983,98985],{"class":230,"line":142},[228,98966,98302],{"class":238},[228,98968,284],{"class":234},[228,98970,93117],{"class":238},[228,98972,575],{"class":287},[228,98974,616],{"class":238},[228,98976,880],{"class":287},[228,98978,93122],{"class":238},[228,98980,310],{"class":287},[228,98982,616],{"class":238},[228,98984,531],{"class":287},[228,98986,245],{"class":238},[228,98988,98989],{"class":230,"line":1293},[228,98990,98991],{"class":297},"#vstack 垂直方向进行堆叠\n",[228,98993,98994],{"class":230,"line":1308},[228,98995,98996],{"class":238},"np.vstack((aa,bb))\n",[228,98998,98999],{"class":230,"line":1314},[228,99000,99001],{"class":297},"#与hstack传的参数类似，等价于：\n",[228,99003,99004],{"class":230,"line":1328},[228,99005,99006],{"class":238},"np.vstack([aa,bb])\n",[19,99008,98348],{},[19,99010,99011],{},[1576,99012],{"alt":141,"src":99013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,99015,98844],{},[220,99017,99019],{"className":30493,"code":99018,"language":30495,"meta":141,"style":141},"#两个三行六列\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",[30,99020,99021,99025,99053,99081,99086,99091],{"__ignoreMap":141},[228,99022,99023],{"class":230,"line":231},[228,99024,98403],{"class":297},[228,99026,99027,99029,99031,99033,99035,99037,99039,99041,99043,99045,99047,99049,99051],{"class":230,"line":142},[228,99028,95636],{"class":238},[228,99030,284],{"class":234},[228,99032,93117],{"class":238},[228,99034,456],{"class":287},[228,99036,616],{"class":238},[228,99038,563],{"class":287},[228,99040,93122],{"class":238},[228,99042,316],{"class":287},[228,99044,616],{"class":238},[228,99046,310],{"class":287},[228,99048,616],{"class":238},[228,99050,582],{"class":287},[228,99052,245],{"class":238},[228,99054,99055,99057,99059,99061,99063,99065,99067,99069,99071,99073,99075,99077,99079],{"class":230,"line":1293},[228,99056,98436],{"class":238},[228,99058,284],{"class":234},[228,99060,93117],{"class":238},[228,99062,575],{"class":287},[228,99064,616],{"class":238},[228,99066,98447],{"class":287},[228,99068,93122],{"class":238},[228,99070,316],{"class":287},[228,99072,616],{"class":238},[228,99074,310],{"class":287},[228,99076,616],{"class":238},[228,99078,582],{"class":287},[228,99080,245],{"class":238},[228,99082,99083],{"class":230,"line":1308},[228,99084,99085],{"class":297},"#使用vstack\n",[228,99087,99088],{"class":230,"line":1314},[228,99089,99090],{"class":238},"np.vstack((aaa,bbb)).shape\n",[228,99092,99093],{"class":230,"line":1328},[228,99094,99095],{"class":297},"#输出：（4，3，6）\n",[14,99097,99099],{"id":99098},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,99101,99102],{},"该方法是三维数组特有的方法",[19,99104,99105],{},"也就是说",[19,99107,99108],{},"一维数组拼接方法用：concatenate()",[19,99110,99111],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,99113,99114],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,99116,99117],{},"四维数组及多维数组只能用concatenate进行拼接",[220,99119,99121],{"className":30493,"code":99120,"language":30495,"meta":141,"style":141},"#两个三行六列\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",[30,99122,99123,99127,99155,99183,99188,99193],{"__ignoreMap":141},[228,99124,99125],{"class":230,"line":231},[228,99126,98403],{"class":297},[228,99128,99129,99131,99133,99135,99137,99139,99141,99143,99145,99147,99149,99151,99153],{"class":230,"line":142},[228,99130,95636],{"class":238},[228,99132,284],{"class":234},[228,99134,93117],{"class":238},[228,99136,456],{"class":287},[228,99138,616],{"class":238},[228,99140,563],{"class":287},[228,99142,93122],{"class":238},[228,99144,316],{"class":287},[228,99146,616],{"class":238},[228,99148,310],{"class":287},[228,99150,616],{"class":238},[228,99152,582],{"class":287},[228,99154,245],{"class":238},[228,99156,99157,99159,99161,99163,99165,99167,99169,99171,99173,99175,99177,99179,99181],{"class":230,"line":1293},[228,99158,98436],{"class":238},[228,99160,284],{"class":234},[228,99162,93117],{"class":238},[228,99164,575],{"class":287},[228,99166,616],{"class":238},[228,99168,98447],{"class":287},[228,99170,93122],{"class":238},[228,99172,316],{"class":287},[228,99174,616],{"class":238},[228,99176,310],{"class":287},[228,99178,616],{"class":238},[228,99180,582],{"class":287},[228,99182,245],{"class":238},[228,99184,99185],{"class":230,"line":1308},[228,99186,99187],{"class":297},"#使用dstack\n",[228,99189,99190],{"class":230,"line":1314},[228,99191,99192],{"class":238},"np.dstack((aaa,bbb)).shape\n",[228,99194,99195],{"class":230,"line":1328},[228,99196,99197],{"class":297},"#结果：（2，3，12）\n",[5241,99199,99200],{},"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":141,"searchDepth":142,"depth":142,"links":99202},[99203,99204,99205,99206],{"id":98142,"depth":142,"text":98143},{"id":98756,"depth":142,"text":98757},{"id":98927,"depth":142,"text":98928},{"id":99098,"depth":142,"text":99099},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98134,"description":154},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99213,"title":99214,"body":99215,"description":154,"extension":155,"meta":99490,"navigation":157,"path":99491,"seo":99492,"stem":99493,"__hash__":99494},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99216,"toc":99488},[99217,99220,99223,99317,99320,99323,99326,99329,99332,99335,99338,99341,99485],[10,99218,99214],{"id":99219},"_7数组转置",[19,99221,99222],{},"使用transpose()函数",[220,99224,99226],{"className":30493,"code":99225,"language":30495,"meta":141,"style":141},"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",[30,99227,99228,99238,99262,99267,99272,99277,99282,99290,99294,99298,99303,99308,99313],{"__ignoreMap":141},[228,99229,99230,99232,99234,99236],{"class":230,"line":231},[228,99231,30507],{"class":234},[228,99233,31495],{"class":238},[228,99235,31498],{"class":234},[228,99237,31501],{"class":238},[228,99239,99240,99242,99244,99246,99248,99250,99252,99254,99256,99258,99260],{"class":230,"line":142},[228,99241,476],{"class":238},[228,99243,284],{"class":234},[228,99245,31832],{"class":238},[228,99247,456],{"class":287},[228,99249,616],{"class":238},[228,99251,761],{"class":287},[228,99253,93122],{"class":238},[228,99255,531],{"class":287},[228,99257,616],{"class":238},[228,99259,310],{"class":287},[228,99261,245],{"class":238},[228,99263,99264],{"class":230,"line":1293},[228,99265,99266],{"class":297},"#二维数组转置\n",[228,99268,99269],{"class":230,"line":1308},[228,99270,99271],{"class":297},"#调用transpose()函数\n",[228,99273,99274],{"class":230,"line":1314},[228,99275,99276],{"class":238},"a.transpose()\n",[228,99278,99279],{"class":230,"line":1328},[228,99280,99281],{"class":297},"#对于二维数组也可以采用.T来实现\n",[228,99283,99284,99287],{"class":230,"line":1334},[228,99285,99286],{"class":238},"a.T",[228,99288,99289],{"class":297},"#与上述代码一样\n",[228,99291,99292],{"class":230,"line":1425},[228,99293,93679],{"class":297},[228,99295,99296],{"class":230,"line":1431},[228,99297,94043],{"class":343},[228,99299,99300],{"class":230,"line":1443},[228,99301,99302],{"class":343},"array([[ 1,  4,  7, 10],\n",[228,99304,99305],{"class":230,"line":1726},[228,99306,99307],{"class":343},"       [ 2,  5,  8, 11],\n",[228,99309,99310],{"class":230,"line":1731},[228,99311,99312],{"class":343},"       [ 3,  6,  9, 12]])\n",[228,99314,99315],{"class":230,"line":1737},[228,99316,94043],{"class":343},[19,99318,99319],{},"也可以使用np.transpose()的形式",[19,99321,99322],{},"#多维数组进行转置 np.transpose()",[19,99324,99325],{},"#对二维数组也可以使用np.transpose()进行转置",[19,99327,99328],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,99330,99331],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,99333,99334],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,99336,99337],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,99339,99340],{},"四维及以上的数组也是一样的道理",[220,99342,99344],{"className":30493,"code":99343,"language":30495,"meta":141,"style":141},"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",[30,99345,99346,99374,99379,99384,99389,99407,99412,99444,99449,99454,99459,99480],{"__ignoreMap":141},[228,99347,99348,99350,99352,99354,99356,99358,99360,99362,99364,99366,99368,99370,99372],{"class":230,"line":231},[228,99349,1058],{"class":238},[228,99351,284],{"class":234},[228,99353,93117],{"class":238},[228,99355,456],{"class":287},[228,99357,616],{"class":238},[228,99359,563],{"class":287},[228,99361,93122],{"class":238},[228,99363,310],{"class":287},[228,99365,616],{"class":238},[228,99367,582],{"class":287},[228,99369,616],{"class":238},[228,99371,316],{"class":287},[228,99373,245],{"class":238},[228,99375,99376],{"class":230,"line":142},[228,99377,99378],{"class":238},"x.shape\n",[228,99380,99381],{"class":230,"line":1293},[228,99382,99383],{"class":297},"#结果：（3,6,2）\n",[228,99385,99386],{"class":230,"line":1308},[228,99387,99388],{"class":297},"#使用np.transpose()进行转置 变为(2,6,3)\n",[228,99390,99391,99394,99396,99398,99400,99402,99404],{"class":230,"line":1314},[228,99392,99393],{"class":238},"np.transpose(x,(",[228,99395,316],{"class":287},[228,99397,616],{"class":238},[228,99399,456],{"class":287},[228,99401,616],{"class":238},[228,99403,430],{"class":287},[228,99405,99406],{"class":238},")).shape\n",[228,99408,99409],{"class":230,"line":1328},[228,99410,99411],{"class":297},"#结果：(2,6,3)\n",[228,99413,99414,99416,99418,99420,99422,99424,99426,99428,99430,99432,99434,99436,99438,99440,99442],{"class":230,"line":1334},[228,99415,98621],{"class":238},[228,99417,284],{"class":234},[228,99419,93117],{"class":238},[228,99421,456],{"class":287},[228,99423,616],{"class":238},[228,99425,563],{"class":287},[228,99427,93122],{"class":238},[228,99429,310],{"class":287},[228,99431,616],{"class":238},[228,99433,316],{"class":287},[228,99435,616],{"class":238},[228,99437,456],{"class":287},[228,99439,616],{"class":238},[228,99441,582],{"class":287},[228,99443,245],{"class":238},[228,99445,99446],{"class":230,"line":1425},[228,99447,99448],{"class":238},"aaaa.shape\n",[228,99450,99451],{"class":230,"line":1431},[228,99452,99453],{"class":297},"#结果：（3，2，1，6）\n",[228,99455,99456],{"class":230,"line":1443},[228,99457,99458],{"class":297},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[228,99460,99461,99464,99466,99468,99470,99472,99474,99476,99478],{"class":230,"line":1726},[228,99462,99463],{"class":238},"np.transpose(aaaa,(",[228,99465,456],{"class":287},[228,99467,616],{"class":238},[228,99469,316],{"class":287},[228,99471,616],{"class":238},[228,99473,430],{"class":287},[228,99475,616],{"class":238},[228,99477,310],{"class":287},[228,99479,99406],{"class":238},[228,99481,99482],{"class":230,"line":1731},[228,99483,99484],{"class":297},"#结果：(2,1,3,6)\n",[5241,99486,99487],{},"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":141,"searchDepth":142,"depth":142,"links":99489},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99214,"description":154},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99496,"title":99497,"body":99498,"description":154,"extension":155,"meta":100232,"navigation":157,"path":100233,"seo":100234,"stem":100235,"__hash__":100236},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99499,"toc":100230},[99500,99503,99506,99509,99512,99515,99518,99521,99524,99633,99636,99639,100227],[10,99501,99497],{"id":99502},"_8数组分割",[19,99504,99505],{},"split分割",[19,99507,99508],{},"numpy.split(ary,indics_or_sections,axis)",[19,99510,99511],{},"解释：",[19,99513,99514],{},"ary:被分割的数组",[19,99516,99517],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,99519,99520],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,99522,99523],{},"①一维数组的分割",[220,99525,99527],{"className":30493,"code":99526,"language":30495,"meta":141,"style":141},"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",[30,99528,99529,99545,99550,99559,99563,99568,99576,99580,99585,99590,99603,99607,99612,99624,99628],{"__ignoreMap":141},[228,99530,99531,99533,99535,99537,99539,99541,99543],{"class":230,"line":231},[228,99532,476],{"class":238},[228,99534,284],{"class":234},[228,99536,93117],{"class":238},[228,99538,456],{"class":287},[228,99540,616],{"class":238},[228,99542,658],{"class":287},[228,99544,245],{"class":238},[228,99546,99547],{"class":230,"line":142},[228,99548,99549],{"class":297},"#如果传入整数，必须能够平分，否则会报错\n",[228,99551,99552,99555,99557],{"class":230,"line":1293},[228,99553,99554],{"class":238},"np.split(a,",[228,99556,316],{"class":287},[228,99558,245],{"class":238},[228,99560,99561],{"class":230,"line":1308},[228,99562,93679],{"class":297},[228,99564,99565],{"class":230,"line":1314},[228,99566,99567],{"class":297},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[228,99569,99570,99572,99574],{"class":230,"line":1328},[228,99571,99554],{"class":238},[228,99573,531],{"class":287},[228,99575,245],{"class":238},[228,99577,99578],{"class":230,"line":1334},[228,99579,93679],{"class":297},[228,99581,99582],{"class":230,"line":1425},[228,99583,99584],{"class":297},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[228,99586,99587],{"class":230,"line":1431},[228,99588,99589],{"class":297},"#传入数组\n",[228,99591,99592,99595,99597,99599,99601],{"class":230,"line":1443},[228,99593,99594],{"class":238},"np.split(a,[",[228,99596,310],{"class":287},[228,99598,616],{"class":238},[228,99600,557],{"class":287},[228,99602,4771],{"class":238},[228,99604,99605],{"class":230,"line":1726},[228,99606,93679],{"class":297},[228,99608,99609],{"class":230,"line":1731},[228,99610,99611],{"class":297},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[228,99613,99614,99616,99618,99620,99622],{"class":230,"line":1737},[228,99615,99594],{"class":238},[228,99617,557],{"class":287},[228,99619,616],{"class":238},[228,99621,607],{"class":287},[228,99623,4771],{"class":238},[228,99625,99626],{"class":230,"line":1742},[228,99627,93679],{"class":297},[228,99629,99630],{"class":230,"line":1756},[228,99631,99632],{"class":297},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,99634,99635],{},"②二维数组的分割",[19,99637,99638],{},"使用split()",[220,99640,99642],{"className":30493,"code":99641,"language":30495,"meta":141,"style":141},"#二维数组分割\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",[30,99643,99644,99649,99673,99678,99687,99691,99695,99700,99705,99710,99715,99720,99725,99730,99734,99747,99751,99755,99759,99763,99767,99772,99777,99782,99786,99791,99807,99811,99815,99820,99825,99830,99835,99840,99845,99850,99855,99860,99865,99870,99875,99880,99885,99890,99895,99900,99905,99909,99913,99933,99937,99941,99946,99951,99956,99961,99966,99971,99976,99981,99986,99991,99996,100001,100006,100011,100016,100021,100026,100031,100035,100040,100049,100053,100057,100061,100065,100069,100073,100077,100081,100085,100094,100098,100102,100106,100110,100114,100118,100122,100126,100130,100134,100138,100142,100146,100150,100154,100158,100162,100166,100170,100174,100178,100191,100195,100199,100203,100207,100211,100215,100219,100223],{"__ignoreMap":141},[228,99645,99646],{"class":230,"line":231},[228,99647,99648],{"class":297},"#二维数组分割\n",[228,99650,99651,99653,99655,99657,99659,99661,99663,99665,99667,99669,99671],{"class":230,"line":142},[228,99652,93421],{"class":238},[228,99654,284],{"class":234},[228,99656,93117],{"class":238},[228,99658,456],{"class":287},[228,99660,616],{"class":238},[228,99662,563],{"class":287},[228,99664,93122],{"class":238},[228,99666,582],{"class":287},[228,99668,616],{"class":238},[228,99670,582],{"class":287},[228,99672,245],{"class":238},[228,99674,99675],{"class":230,"line":1293},[228,99676,99677],{"class":297},"#默认axis=0  传入整数平均分,按行来的\n",[228,99679,99680,99683,99685],{"class":230,"line":1308},[228,99681,99682],{"class":238},"np.split(aa,",[228,99684,310],{"class":287},[228,99686,245],{"class":238},[228,99688,99689],{"class":230,"line":1314},[228,99690,95879],{"class":297},[228,99692,99693],{"class":230,"line":1328},[228,99694,94043],{"class":343},[228,99696,99697],{"class":230,"line":1334},[228,99698,99699],{"class":343},"[array([[ 1,  2,  3,  4,  5,  6],\n",[228,99701,99702],{"class":230,"line":1425},[228,99703,99704],{"class":343},"        [ 7,  8,  9, 10, 11, 12]]),\n",[228,99706,99707],{"class":230,"line":1431},[228,99708,99709],{"class":343}," array([[13, 14, 15, 16, 17, 18],\n",[228,99711,99712],{"class":230,"line":1443},[228,99713,99714],{"class":343},"        [19, 20, 21, 22, 23, 24]]),\n",[228,99716,99717],{"class":230,"line":1726},[228,99718,99719],{"class":343}," array([[25, 26, 27, 28, 29, 30],\n",[228,99721,99722],{"class":230,"line":1731},[228,99723,99724],{"class":343},"        [31, 32, 33, 34, 35, 36]])]\n",[228,99726,99727],{"class":230,"line":1737},[228,99728,99729],{"class":343}," '''\n",[228,99731,99732],{"class":230,"line":1742},[228,99733,99589],{"class":297},[228,99735,99736,99739,99741,99743,99745],{"class":230,"line":1756},[228,99737,99738],{"class":238},"np.split(aa,[",[228,99740,316],{"class":287},[228,99742,616],{"class":238},[228,99744,557],{"class":287},[228,99746,4771],{"class":238},[228,99748,99749],{"class":230,"line":1761},[228,99750,95879],{"class":297},[228,99752,99753],{"class":230,"line":1767},[228,99754,94043],{"class":343},[228,99756,99757],{"class":230,"line":1788},[228,99758,99699],{"class":343},[228,99760,99761],{"class":230,"line":1793},[228,99762,99704],{"class":343},[228,99764,99765],{"class":230,"line":1807},[228,99766,99709],{"class":343},[228,99768,99769],{"class":230,"line":1812},[228,99770,99771],{"class":343},"        [19, 20, 21, 22, 23, 24],\n",[228,99773,99774],{"class":230,"line":1841},[228,99775,99776],{"class":343},"        [25, 26, 27, 28, 29, 30]]),\n",[228,99778,99779],{"class":230,"line":1846},[228,99780,99781],{"class":343}," array([[31, 32, 33, 34, 35, 36]])]\n",[228,99783,99784],{"class":230,"line":1863},[228,99785,94043],{"class":343},[228,99787,99788],{"class":230,"line":1868},[228,99789,99790],{"class":297},"#axis=1 按照列来分\n",[228,99792,99793,99795,99797,99799,99801,99803,99805],{"class":230,"line":1873},[228,99794,99682],{"class":238},[228,99796,310],{"class":287},[228,99798,616],{"class":238},[228,99800,47629],{"class":5331},[228,99802,284],{"class":234},[228,99804,456],{"class":287},[228,99806,245],{"class":238},[228,99808,99809],{"class":230,"line":1878},[228,99810,95879],{"class":297},[228,99812,99813],{"class":230,"line":1892},[228,99814,94043],{"class":343},[228,99816,99817],{"class":230,"line":1897},[228,99818,99819],{"class":343},"[array([[ 1,  2],\n",[228,99821,99822],{"class":230,"line":2691},[228,99823,99824],{"class":343},"        [ 7,  8],\n",[228,99826,99827],{"class":230,"line":2705},[228,99828,99829],{"class":343},"        [13, 14],\n",[228,99831,99832],{"class":230,"line":2713},[228,99833,99834],{"class":343},"        [19, 20],\n",[228,99836,99837],{"class":230,"line":2718},[228,99838,99839],{"class":343},"        [25, 26],\n",[228,99841,99842],{"class":230,"line":2724},[228,99843,99844],{"class":343},"        [31, 32]]),\n",[228,99846,99847],{"class":230,"line":2730},[228,99848,99849],{"class":343}," array([[ 3,  4],\n",[228,99851,99852],{"class":230,"line":2735},[228,99853,99854],{"class":343},"        [ 9, 10],\n",[228,99856,99857],{"class":230,"line":8063},[228,99858,99859],{"class":343},"        [15, 16],\n",[228,99861,99862],{"class":230,"line":8087},[228,99863,99864],{"class":343},"        [21, 22],\n",[228,99866,99867],{"class":230,"line":8092},[228,99868,99869],{"class":343},"        [27, 28],\n",[228,99871,99872],{"class":230,"line":8098},[228,99873,99874],{"class":343},"        [33, 34]]),\n",[228,99876,99877],{"class":230,"line":8125},[228,99878,99879],{"class":343}," array([[ 5,  6],\n",[228,99881,99882],{"class":230,"line":8130},[228,99883,99884],{"class":343},"        [11, 12],\n",[228,99886,99887],{"class":230,"line":8136},[228,99888,99889],{"class":343},"        [17, 18],\n",[228,99891,99892],{"class":230,"line":8148},[228,99893,99894],{"class":343},"        [23, 24],\n",[228,99896,99897],{"class":230,"line":8160},[228,99898,99899],{"class":343},"        [29, 30],\n",[228,99901,99902],{"class":230,"line":8172},[228,99903,99904],{"class":343},"        [35, 36]])]\n",[228,99906,99907],{"class":230,"line":9831},[228,99908,99729],{"class":343},[228,99910,99911],{"class":230,"line":9856},[228,99912,99589],{"class":297},[228,99914,99915,99917,99919,99921,99923,99925,99927,99929,99931],{"class":230,"line":9879},[228,99916,99738],{"class":238},[228,99918,456],{"class":287},[228,99920,616],{"class":238},[228,99922,316],{"class":287},[228,99924,41724],{"class":238},[228,99926,47629],{"class":5331},[228,99928,284],{"class":234},[228,99930,456],{"class":287},[228,99932,245],{"class":238},[228,99934,99935],{"class":230,"line":9903},[228,99936,93679],{"class":297},[228,99938,99939],{"class":230,"line":9908},[228,99940,94043],{"class":343},[228,99942,99943],{"class":230,"line":9913},[228,99944,99945],{"class":343},"[array([[ 1],\n",[228,99947,99948],{"class":230,"line":9918},[228,99949,99950],{"class":343},"        [ 7],\n",[228,99952,99953],{"class":230,"line":9927},[228,99954,99955],{"class":343},"        [13],\n",[228,99957,99958],{"class":230,"line":9932},[228,99959,99960],{"class":343},"        [19],\n",[228,99962,99963],{"class":230,"line":9938},[228,99964,99965],{"class":343},"        [25],\n",[228,99967,99968],{"class":230,"line":9959},[228,99969,99970],{"class":343},"        [31]]),\n",[228,99972,99973],{"class":230,"line":9965},[228,99974,99975],{"class":343}," array([[ 2],\n",[228,99977,99978],{"class":230,"line":9979},[228,99979,99980],{"class":343},"        [ 8],\n",[228,99982,99983],{"class":230,"line":9985},[228,99984,99985],{"class":343},"        [14],\n",[228,99987,99988],{"class":230,"line":10012},[228,99989,99990],{"class":343},"        [20],\n",[228,99992,99993],{"class":230,"line":10021},[228,99994,99995],{"class":343},"        [26],\n",[228,99997,99998],{"class":230,"line":10027},[228,99999,100000],{"class":343},"        [32]]),\n",[228,100002,100003],{"class":230,"line":10035},[228,100004,100005],{"class":343}," array([[ 3,  4,  5,  6],\n",[228,100007,100008],{"class":230,"line":10040},[228,100009,100010],{"class":343},"        [ 9, 10, 11, 12],\n",[228,100012,100013],{"class":230,"line":16719},[228,100014,100015],{"class":343},"        [15, 16, 17, 18],\n",[228,100017,100018],{"class":230,"line":16725},[228,100019,100020],{"class":343},"        [21, 22, 23, 24],\n",[228,100022,100023],{"class":230,"line":16748},[228,100024,100025],{"class":343},"        [27, 28, 29, 30],\n",[228,100027,100028],{"class":230,"line":16754},[228,100029,100030],{"class":343},"        [33, 34, 35, 36]])]\n",[228,100032,100033],{"class":230,"line":16777},[228,100034,94043],{"class":343},[228,100036,100037],{"class":230,"line":16791},[228,100038,100039],{"class":297},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[228,100041,100042,100045,100047],{"class":230,"line":16811},[228,100043,100044],{"class":238},"np.vsplit(aa,",[228,100046,310],{"class":287},[228,100048,245],{"class":238},[228,100050,100051],{"class":230,"line":16817},[228,100052,93679],{"class":297},[228,100054,100055],{"class":230,"line":16828},[228,100056,94043],{"class":343},[228,100058,100059],{"class":230,"line":16851},[228,100060,99699],{"class":343},[228,100062,100063],{"class":230,"line":16873},[228,100064,99704],{"class":343},[228,100066,100067],{"class":230,"line":16878},[228,100068,99709],{"class":343},[228,100070,100071],{"class":230,"line":16884},[228,100072,99714],{"class":343},[228,100074,100075],{"class":230,"line":16898},[228,100076,99719],{"class":343},[228,100078,100079],{"class":230,"line":16911},[228,100080,99724],{"class":343},[228,100082,100083],{"class":230,"line":16916},[228,100084,94043],{"class":343},[228,100086,100087,100090,100092],{"class":230,"line":16930},[228,100088,100089],{"class":238},"np.hsplit(aa,",[228,100091,310],{"class":287},[228,100093,245],{"class":238},[228,100095,100096],{"class":230,"line":16935},[228,100097,93679],{"class":297},[228,100099,100100],{"class":230,"line":16941},[228,100101,94043],{"class":343},[228,100103,100104],{"class":230,"line":16946},[228,100105,99819],{"class":343},[228,100107,100108],{"class":230,"line":16960},[228,100109,99824],{"class":343},[228,100111,100112],{"class":230,"line":16965},[228,100113,99829],{"class":343},[228,100115,100116],{"class":230,"line":16970},[228,100117,99834],{"class":343},[228,100119,100120],{"class":230,"line":16984},[228,100121,99839],{"class":343},[228,100123,100124],{"class":230,"line":16996},[228,100125,99844],{"class":343},[228,100127,100128],{"class":230,"line":17001},[228,100129,99849],{"class":343},[228,100131,100132],{"class":230,"line":17014},[228,100133,99854],{"class":343},[228,100135,100136],{"class":230,"line":17019},[228,100137,99859],{"class":343},[228,100139,100140],{"class":230,"line":17024},[228,100141,99864],{"class":343},[228,100143,100144],{"class":230,"line":17029},[228,100145,99869],{"class":343},[228,100147,100148],{"class":230,"line":17042},[228,100149,99874],{"class":343},[228,100151,100152],{"class":230,"line":17047},[228,100153,99879],{"class":343},[228,100155,100156],{"class":230,"line":32748},[228,100157,99884],{"class":343},[228,100159,100160],{"class":230,"line":32754},[228,100161,99889],{"class":343},[228,100163,100164],{"class":230,"line":32760},[228,100165,99894],{"class":343},[228,100167,100168],{"class":230,"line":32766},[228,100169,99899],{"class":343},[228,100171,100172],{"class":230,"line":32772},[228,100173,99904],{"class":343},[228,100175,100176],{"class":230,"line":32783},[228,100177,94043],{"class":343},[228,100179,100180,100183,100185,100187,100189],{"class":230,"line":32789},[228,100181,100182],{"class":238},"np.vsplit(aa,[",[228,100184,316],{"class":287},[228,100186,616],{"class":238},[228,100188,557],{"class":287},[228,100190,4771],{"class":238},[228,100192,100193],{"class":230,"line":32809},[228,100194,93679],{"class":297},[228,100196,100197],{"class":230,"line":32815},[228,100198,94043],{"class":343},[228,100200,100201],{"class":230,"line":32826},[228,100202,99699],{"class":343},[228,100204,100205],{"class":230,"line":32832},[228,100206,99704],{"class":343},[228,100208,100209],{"class":230,"line":32838},[228,100210,99709],{"class":343},[228,100212,100213],{"class":230,"line":32844},[228,100214,99771],{"class":343},[228,100216,100217],{"class":230,"line":32850},[228,100218,99776],{"class":343},[228,100220,100221],{"class":230,"line":32856},[228,100222,99781],{"class":343},[228,100224,100225],{"class":230,"line":32862},[228,100226,99729],{"class":343},[5241,100228,100229],{},"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":141,"searchDepth":142,"depth":142,"links":100231},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99497,"description":154},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100238,"title":100239,"body":100240,"description":154,"extension":155,"meta":100734,"navigation":157,"path":100735,"seo":100736,"stem":100737,"__hash__":100738},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100241,"toc":100725},[100242,100245,100248,100273,100277,100336,100388,100392,100394,100430,100484,100486,100524,100595,100599,100604,100608,100611,100644,100647,100651,100654,100657,100660,100663,100668,100672,100675,100678,100681,100684,100689,100693,100698,100701,100722],[10,100243,100239],{"id":100244},"_9数学函数",[19,100246,100247],{},"补充回顾：python的列表推导式",[220,100249,100251],{"className":30493,"code":100250,"language":30495,"meta":141,"style":141},"[1\u002Fi for i in a]\n",[30,100252,100253],{"__ignoreMap":141},[228,100254,100255,100257,100259,100261,100264,100266,100268,100270],{"class":230,"line":231},[228,100256,1128],{"class":238},[228,100258,456],{"class":287},[228,100260,822],{"class":234},[228,100262,100263],{"class":238},"i ",[228,100265,3139],{"class":234},[228,100267,9553],{"class":238},[228,100269,26159],{"class":234},[228,100271,100272],{"class":238}," a]\n",[14,100274,100276],{"id":100275},"_91-求倒数","9.1 求倒数",[220,100278,100280],{"className":30493,"code":100279,"language":30495,"meta":141,"style":141},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[30,100281,100282,100287,100315,100327],{"__ignoreMap":141},[228,100283,100284],{"class":230,"line":231},[228,100285,100286],{"class":297},"#数组求倒数\n",[228,100288,100289,100291,100293,100295,100297,100299,100301,100303,100305,100307,100309,100311,100313],{"class":230,"line":142},[228,100290,476],{"class":238},[228,100292,284],{"class":234},[228,100294,1128],{"class":238},[228,100296,456],{"class":287},[228,100298,616],{"class":238},[228,100300,316],{"class":287},[228,100302,616],{"class":238},[228,100304,310],{"class":287},[228,100306,616],{"class":238},[228,100308,531],{"class":287},[228,100310,616],{"class":238},[228,100312,557],{"class":287},[228,100314,33361],{"class":238},[228,100316,100317,100319,100321,100324],{"class":230,"line":1293},[228,100318,501],{"class":238},[228,100320,284],{"class":234},[228,100322,100323],{"class":238},"np.array(a)",[228,100325,100326],{"class":297},"#将列表转换为数组\n",[228,100328,100329,100331,100333],{"class":230,"line":1308},[228,100330,456],{"class":287},[228,100332,822],{"class":234},[228,100334,100335],{"class":238},"b\n",[220,100337,100339],{"className":30493,"code":100338,"language":30495,"meta":141,"style":141},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[30,100340,100341,100369,100378,100383],{"__ignoreMap":141},[228,100342,100343,100345,100347,100349,100351,100353,100355,100357,100359,100361,100363,100365,100367],{"class":230,"line":231},[228,100344,476],{"class":238},[228,100346,284],{"class":234},[228,100348,1128],{"class":238},[228,100350,456],{"class":287},[228,100352,616],{"class":238},[228,100354,316],{"class":287},[228,100356,616],{"class":238},[228,100358,310],{"class":287},[228,100360,616],{"class":238},[228,100362,531],{"class":287},[228,100364,616],{"class":238},[228,100366,557],{"class":287},[228,100368,33361],{"class":238},[228,100370,100371,100373,100375],{"class":230,"line":142},[228,100372,501],{"class":238},[228,100374,284],{"class":234},[228,100376,100377],{"class":238},"np.array(a)\n",[228,100379,100380],{"class":230,"line":1293},[228,100381,100382],{"class":297},"#调用numpy中的函数reciprocal()\n",[228,100384,100385],{"class":230,"line":1308},[228,100386,100387],{"class":238},"np.reciprocal(b)\n",[14,100389,100391],{"id":100390},"_92-求平方","9.2 求平方",[19,100393,94645],{},[220,100395,100397],{"className":30493,"code":100396,"language":30495,"meta":141,"style":141},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[30,100398,100399,100404,100409,100425],{"__ignoreMap":141},[228,100400,100401],{"class":230,"line":231},[228,100402,100403],{"class":297},"#square()，求平方\n",[228,100405,100406],{"class":230,"line":142},[228,100407,100408],{"class":297},"#一维数组\n",[228,100410,100411,100413,100415,100417,100419,100421,100423],{"class":230,"line":1293},[228,100412,476],{"class":238},[228,100414,284],{"class":234},[228,100416,93117],{"class":238},[228,100418,456],{"class":287},[228,100420,616],{"class":238},[228,100422,684],{"class":287},[228,100424,245],{"class":238},[228,100426,100427],{"class":230,"line":1308},[228,100428,100429],{"class":238},"np.square(a)\n",[220,100431,100433],{"className":30493,"code":100432,"language":30495,"meta":141,"style":141},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[30,100434,100435,100440,100445,100466],{"__ignoreMap":141},[228,100436,100437],{"class":230,"line":231},[228,100438,100439],{"class":297},"#或者通过循环遍历的形式来计算\n",[228,100441,100442],{"class":230,"line":142},[228,100443,100444],{"class":297},"#这是一个列表\n",[228,100446,100447,100450,100452,100454,100456,100458,100460,100463],{"class":230,"line":1293},[228,100448,100449],{"class":238},"[i",[228,100451,693],{"class":234},[228,100453,100263],{"class":238},[228,100455,3139],{"class":234},[228,100457,9553],{"class":238},[228,100459,26159],{"class":234},[228,100461,100462],{"class":238}," a]",[228,100464,100465],{"class":297},"#这个求完之后在数列当中\n",[228,100467,100468,100471,100473,100475,100477,100479,100481],{"class":230,"line":1308},[228,100469,100470],{"class":238},"np.array([i",[228,100472,693],{"class":234},[228,100474,100263],{"class":238},[228,100476,3139],{"class":234},[228,100478,9553],{"class":238},[228,100480,26159],{"class":234},[228,100482,100483],{"class":238}," a])\n",[19,100485,93406],{},[220,100487,100489],{"className":30493,"code":100488,"language":30495,"meta":141,"style":141},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[30,100490,100491,100495,100519],{"__ignoreMap":141},[228,100492,100493],{"class":230,"line":231},[228,100494,93416],{"class":297},[228,100496,100497,100499,100501,100503,100505,100507,100509,100511,100513,100515,100517],{"class":230,"line":142},[228,100498,93421],{"class":238},[228,100500,284],{"class":234},[228,100502,93117],{"class":238},[228,100504,456],{"class":287},[228,100506,616],{"class":238},[228,100508,761],{"class":287},[228,100510,93122],{"class":238},[228,100512,531],{"class":287},[228,100514,616],{"class":238},[228,100516,310],{"class":287},[228,100518,245],{"class":238},[228,100520,100521],{"class":230,"line":1293},[228,100522,100523],{"class":238},"np.square(aa)\n",[220,100525,100527],{"className":30493,"code":100526,"language":30495,"meta":141,"style":141},"#传统的方式\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",[30,100528,100529,100534,100543,100559,100575,100590],{"__ignoreMap":141},[228,100530,100531],{"class":230,"line":231},[228,100532,100533],{"class":297},"#传统的方式\n",[228,100535,100536,100538,100540],{"class":230,"line":142},[228,100537,98302],{"class":238},[228,100539,284],{"class":234},[228,100541,100542],{"class":238},"np.empty_like(aa)\n",[228,100544,100545,100547,100549,100551,100553,100555,100557],{"class":230,"line":1293},[228,100546,3139],{"class":234},[228,100548,9553],{"class":238},[228,100550,26159],{"class":234},[228,100552,32558],{"class":287},[228,100554,239],{"class":238},[228,100556,531],{"class":287},[228,100558,30901],{"class":238},[228,100560,100561,100563,100565,100567,100569,100571,100573],{"class":230,"line":1308},[228,100562,3315],{"class":234},[228,100564,9615],{"class":238},[228,100566,26159],{"class":234},[228,100568,32558],{"class":287},[228,100570,239],{"class":238},[228,100572,310],{"class":287},[228,100574,30901],{"class":238},[228,100576,100577,100580,100582,100585,100587],{"class":230,"line":1314},[228,100578,100579],{"class":238},"        bb[i,j]",[228,100581,284],{"class":234},[228,100583,100584],{"class":238},"aa[i,j]",[228,100586,693],{"class":234},[228,100588,100589],{"class":238},"aa[i,j]\n",[228,100591,100592],{"class":230,"line":1328},[228,100593,100594],{"class":238},"bb\n",[14,100596,100598],{"id":100597},"_93-求各元素的符号","9.3 求各元素的符号",[19,100600,100601],{},[1576,100602],{"alt":141,"src":100603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,100605,100607],{"id":100606},"_94-modf函数","9.4 modf函数",[19,100609,100610],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[220,100612,100614],{"className":30493,"code":100613,"language":30495,"meta":141,"style":141},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[30,100615,100616,100639],{"__ignoreMap":141},[228,100617,100618,100620,100622,100624,100626,100628,100630,100632,100634,100637],{"class":230,"line":231},[228,100619,476],{"class":238},[228,100621,284],{"class":234},[228,100623,93117],{"class":238},[228,100625,770],{"class":234},[228,100627,684],{"class":287},[228,100629,616],{"class":238},[228,100631,684],{"class":287},[228,100633,616],{"class":238},[228,100635,100636],{"class":287},"0.3",[228,100638,245],{"class":238},[228,100640,100641],{"class":230,"line":142},[228,100642,100643],{"class":238},"np.modf(a)\n",[19,100645,100646],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,100648,100650],{"id":100649},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,100652,100653],{},"np.cell()",[19,100655,100656],{},"np.floor()",[19,100658,100659],{},"np.rint()",[19,100661,100662],{},"对各元素分别向上取整、向下取整、四舍五入",[19,100664,100665],{},[1576,100666],{"alt":141,"src":100667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,100669,100671],{"id":100670},"_96-around函数","9.6 around()函数",[19,100673,100674],{},"around()函数也可以实现对数的小数位数进行操作",[19,100676,100677],{},"其中的参数：",[19,100679,100680],{},"1.要传的数组",[19,100682,100683],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,100685,100686],{},[1576,100687],{"alt":141,"src":100688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,100690,100692],{"id":100691},"_97-三角函数","9.7 三角函数",[19,100694,100695],{},[1576,100696],{"alt":141,"src":100697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,100699,100700],{},"引入图像模块非常重要",[220,100702,100704],{"className":30493,"code":100703,"language":30495,"meta":141,"style":141},"from matplotlib import pyplot as plt\n",[30,100705,100706],{"__ignoreMap":141},[228,100707,100708,100710,100713,100715,100718,100720],{"class":230,"line":231},[228,100709,30852],{"class":234},[228,100711,100712],{"class":238}," matplotlib ",[228,100714,30507],{"class":234},[228,100716,100717],{"class":238}," pyplot ",[228,100719,31498],{"class":234},[228,100721,31552],{"class":238},[5241,100723,100724],{},"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":141,"searchDepth":142,"depth":142,"links":100726},[100727,100728,100729,100730,100731,100732,100733],{"id":100275,"depth":142,"text":100276},{"id":100390,"depth":142,"text":100391},{"id":100597,"depth":142,"text":100598},{"id":100606,"depth":142,"text":100607},{"id":100649,"depth":142,"text":100650},{"id":100670,"depth":142,"text":100671},{"id":100691,"depth":142,"text":100692},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100239,"description":154},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100740,"title":100741,"body":100742,"description":154,"extension":155,"meta":100746,"navigation":157,"path":100747,"seo":100748,"stem":100749,"__hash__":100750},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100743,"toc":100744},[],{"title":141,"searchDepth":142,"depth":142,"links":100745},[],{"category":50535},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100741,"description":154},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100752,"title":100753,"body":100754,"description":141,"extension":155,"meta":102762,"navigation":157,"path":102763,"seo":102764,"stem":102765,"__hash__":102766},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100755,"toc":102738},[100756,100759,100763,100766,100769,100775,100778,100801,100804,100838,100841,100882,100886,100889,100982,100985,101029,101032,101049,101052,101066,101069,101072,101117,101120,101157,101161,101164,101170,101175,101195,101199,101202,101268,101271,101289,101293,101296,101325,101335,101341,101345,101348,101354,101365,101369,101372,101402,101405,101685,101688,101691,101702,101705,101708,101730,101737,101740,101758,101761,101764,101778,101786,101789,101815,101821,101824,101827,101837,101849,101869,101878,101898,101908,101932,101945,101959,101964,102005,102022,102047,102059,102079,102085,102130,102149,102166,102179,102195,102202,102214,102223,102258,102279,102304,102317,102341,102356,102381,102384,102405,102414,102417,102428,102432,102435,102441,102453,102460,102464,102467,102479,102482,102496,102499,102509,102519,102522,102562,102565,102569,102575,102578,102592,102596,102599,102632,102636,102639,102662,102670,102673,102679,102685,102688,102691,102719,102723,102726,102732,102735],[10,100757,100753],{"id":100758},"_1环境安装与第一个-mujoco-程序",[14,100760,100762],{"id":100761},"_1目标说明","1.目标说明",[19,100764,100765],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,100767,100768],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[220,100770,100773],{"className":100771,"code":100772,"language":5302,"meta":141},[5300],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[30,100774,100772],{"__ignoreMap":141},[19,100776,100777],{},"需要掌握:",[183,100779,100780,100783,100786,100791,100796],{},[186,100781,100782],{},"Fedora 44 下 MuJoCo 的系统依赖",[186,100784,100785],{},"Python 虚拟环境创建",[186,100787,100788],{},[30,100789,100790],{},"mujoco.MjModel",[186,100792,100793],{},[30,100794,100795],{},"mujoco.MjData",[186,100797,100798],{},[30,100799,100800],{},"mujoco.mj_step(model, data)",[19,100802,100803],{},"MuJoCo 中最重要的两个对象:",[376,100805,100806,100816],{},[379,100807,100808],{},[382,100809,100810,100813],{},[385,100811,100812],{"align":23851},"对象",[385,100814,100815],{"align":23851},"含义",[423,100817,100818,100828],{},[382,100819,100820,100825],{},[428,100821,100822],{"align":23851},[30,100823,100824],{},"MjModel",[428,100826,100827],{"align":23851},"模型结构，来自 XML，基本不随时间变化",[382,100829,100830,100835],{},[428,100831,100832],{"align":23851},[30,100833,100834],{},"MjData",[428,100836,100837],{"align":23851},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,100839,100840],{},"可以先用一个类比理解：",[376,100842,100843,100853],{},[379,100844,100845],{},[382,100846,100847,100850],{},[385,100848,100849],{"align":23851},"类比",[385,100851,100852],{"align":23851},"MuJoCo 对象",[423,100854,100855,100864,100873],{},[382,100856,100857,100860],{},[428,100858,100859],{"align":23851},"游戏地图和角色配置",[428,100861,100862],{"align":23851},[30,100863,100824],{},[382,100865,100866,100869],{},[428,100867,100868],{"align":23851},"游戏运行到当前帧的状态",[428,100870,100871],{"align":23851},[30,100872,100834],{},[382,100874,100875,100878],{},[428,100876,100877],{"align":23851},"前进一帧",[428,100879,100880],{"align":23851},[30,100881,100800],{},[14,100883,100885],{"id":100884},"_2环境与依赖安装","2.环境与依赖安装",[19,100887,100888],{},"Fedora 44 系统依赖:",[220,100890,100892],{"className":23937,"code":100891,"language":23939,"meta":141,"style":141},"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",[30,100893,100894,100906,100919,100932,100942,100952,100971],{"__ignoreMap":141},[228,100895,100896,100898,100900,100902,100904],{"class":230,"line":231},[228,100897,24692],{"class":2077},[228,100899,26431],{"class":343},[228,100901,23949],{"class":343},[228,100903,26516],{"class":287},[228,100905,24794],{"class":287},[228,100907,100908,100911,100914,100917],{"class":230,"line":142},[228,100909,100910],{"class":343},"  python3",[228,100912,100913],{"class":343}," python3-pip",[228,100915,100916],{"class":343}," python3-virtualenv",[228,100918,24794],{"class":287},[228,100920,100921,100924,100927,100930],{"class":230,"line":1293},[228,100922,100923],{"class":343},"  mesa-libGL",[228,100925,100926],{"class":343}," mesa-libGLU",[228,100928,100929],{"class":343}," mesa-dri-drivers",[228,100931,24794],{"class":287},[228,100933,100934,100937,100940],{"class":230,"line":1308},[228,100935,100936],{"class":343},"  libglvnd-glx",[228,100938,100939],{"class":343}," libglvnd-opengl",[228,100941,24794],{"class":287},[228,100943,100944,100947,100950],{"class":230,"line":1314},[228,100945,100946],{"class":343},"  glfw",[228,100948,100949],{"class":343}," glfw-devel",[228,100951,24794],{"class":287},[228,100953,100954,100957,100960,100963,100966,100969],{"class":230,"line":1328},[228,100955,100956],{"class":343},"  libX11",[228,100958,100959],{"class":343}," libXcursor",[228,100961,100962],{"class":343}," libXi",[228,100964,100965],{"class":343}," libXinerama",[228,100967,100968],{"class":343}," libXrandr",[228,100970,24794],{"class":287},[228,100972,100973,100976,100979],{"class":230,"line":1334},[228,100974,100975],{"class":343},"  gcc",[228,100977,100978],{"class":343}," gcc-c++",[228,100980,100981],{"class":343}," make\n",[19,100983,100984],{},"创建 Python 环境:",[220,100986,100988],{"className":23937,"code":100987,"language":23939,"meta":141,"style":141},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[30,100989,100990,101004,101012],{"__ignoreMap":141},[228,100991,100992,100995,100998,101001],{"class":230,"line":231},[228,100993,100994],{"class":2077},"python3",[228,100996,100997],{"class":287}," -m",[228,100999,101000],{"class":343}," venv",[228,101002,101003],{"class":343}," .venv\n",[228,101005,101006,101009],{"class":230,"line":142},[228,101007,101008],{"class":287},"source",[228,101010,101011],{"class":343}," .venv\u002Fbin\u002Factivate\n",[228,101013,101014,101016,101018,101021,101023,101026],{"class":230,"line":1293},[228,101015,30495],{"class":2077},[228,101017,100997],{"class":287},[228,101019,101020],{"class":343}," pip",[228,101022,23949],{"class":343},[228,101024,101025],{"class":287}," --upgrade",[228,101027,101028],{"class":343}," pip\n",[19,101030,101031],{},"pip 安装:",[220,101033,101035],{"className":23937,"code":101034,"language":23939,"meta":141,"style":141},"pip install \"mujoco>=2.3\" numpy\n",[30,101036,101037],{"__ignoreMap":141},[228,101038,101039,101041,101043,101046],{"class":230,"line":231},[228,101040,23946],{"class":2077},[228,101042,23949],{"class":343},[228,101044,101045],{"class":343}," \"mujoco>=2.3\"",[228,101047,101048],{"class":343}," numpy\n",[19,101050,101051],{},"安装完成后，先做最小检查：",[220,101053,101055],{"className":23937,"code":101054,"language":23939,"meta":141,"style":141},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[30,101056,101057],{"__ignoreMap":141},[228,101058,101059,101061,101063],{"class":230,"line":231},[228,101060,30495],{"class":2077},[228,101062,30473],{"class":287},[228,101064,101065],{"class":343}," \"import mujoco; print(mujoco.__version__)\"\n",[19,101067,101068],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,101070,101071],{},"conda 安装:",[220,101073,101075],{"className":23937,"code":101074,"language":23939,"meta":141,"style":141},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[30,101076,101077,101097,101107],{"__ignoreMap":141},[228,101078,101079,101081,101083,101085,101088,101091,101094],{"class":230,"line":231},[228,101080,30445],{"class":2077},[228,101082,29291],{"class":343},[228,101084,25231],{"class":287},[228,101086,101087],{"class":343}," mujoco-study",[228,101089,101090],{"class":343}," python=",[228,101092,101093],{"class":287},"3.10",[228,101095,101096],{"class":287}," -y\n",[228,101098,101099,101101,101104],{"class":230,"line":142},[228,101100,30445],{"class":2077},[228,101102,101103],{"class":343}," activate",[228,101105,101106],{"class":343}," mujoco-study\n",[228,101108,101109,101111,101113,101115],{"class":230,"line":1293},[228,101110,23946],{"class":2077},[228,101112,23949],{"class":343},[228,101114,101045],{"class":343},[228,101116,101048],{"class":343},[19,101118,101119],{},"版本冲突说明:",[183,101121,101122,101128,101138,101147],{},[186,101123,101124,101125,78],{},"不要安装 ",[30,101126,101127],{},"mujoco-py",[186,101129,101130,101131,101133,101134,101137],{},"如果旧项目里同时安装了 ",[30,101132,101127],{}," 和 ",[30,101135,101136],{},"mujoco","，建议新建干净虚拟环境。",[186,101139,101140,101143,101144,78],{},[30,101141,101142],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[30,101145,101146],{},"~\u002F.mujoco\u002Fmujoco210",[186,101148,101149,101150,82654,101153,101156],{},"离屏渲染可能涉及 OpenGL 后端，",[30,101151,101152],{},"MUJOCO_GL=egl",[30,101154,101155],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,101158,101160],{"id":101159},"_3核心概念解释","3.核心概念解释",[19,101162,101163],{},"MuJoCo 的基本执行流程:",[220,101165,101168],{"className":101166,"code":101167,"language":5302,"meta":141},[5300],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[30,101169,101167],{"__ignoreMap":141},[19,101171,101172,101174],{},[30,101173,100824],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,101176,101177,101179,101180,451,101183,451,101186,451,101189,451,101192,78],{},[30,101178,100834],{}," 存放仿真运行时状态，例如 ",[30,101181,101182],{},"data.time",[30,101184,101185],{},"data.qpos",[30,101187,101188],{},"data.qvel",[30,101190,101191],{},"data.ctrl",[30,101193,101194],{},"data.xpos",[200,101196,101198],{"id":101197},"xml-是什么","XML 是什么",[19,101200,101201],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[220,101203,101205],{"className":53182,"code":101204,"language":53184,"meta":141,"style":141},"\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",[30,101206,101207,101229,101260],{"__ignoreMap":141},[228,101208,101209,101211,101213,101215,101217,101219,101222,101224,101227],{"class":230,"line":231},[228,101210,1148],{"class":238},[228,101212,51915],{"class":51415},[228,101214,15035],{"class":2077},[228,101216,284],{"class":238},[228,101218,53606],{"class":343},[228,101220,101221],{"class":2077}," pos",[228,101223,284],{"class":238},[228,101225,101226],{"class":343},"\"0 0 1\"",[228,101228,51422],{"class":238},[228,101230,101231,101233,101236,101238,101240,101243,101245,101247,101249,101252,101254,101257],{"class":230,"line":142},[228,101232,52259],{"class":238},[228,101234,101235],{"class":51415},"geom",[228,101237,15035],{"class":2077},[228,101239,284],{"class":238},[228,101241,101242],{"class":343},"\"box_geom\"",[228,101244,53939],{"class":2077},[228,101246,284],{"class":238},[228,101248,53606],{"class":343},[228,101250,101251],{"class":2077}," size",[228,101253,284],{"class":238},[228,101255,101256],{"class":343},"\"0.1 0.1 0.1\"",[228,101258,101259],{"class":238},"\u002F>\n",[228,101261,101262,101264,101266],{"class":230,"line":1293},[228,101263,51900],{"class":238},[228,101265,51915],{"class":51415},[228,101267,51422],{"class":238},[19,101269,101270],{},"这段意思是：",[183,101272,101273,101279,101286],{},[186,101274,101275,101276,101278],{},"创建一个叫 ",[30,101277,53829],{}," 的刚体。",[186,101280,101281,101282,101285],{},"它初始放在 ",[30,101283,101284],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[186,101287,101288],{},"它里面有一个盒子形状的几何体。",[200,101290,101292],{"id":101291},"timestep-是什么","timestep 是什么",[19,101294,101295],{},"XML 里的：",[220,101297,101299],{"className":53182,"code":101298,"language":53184,"meta":141,"style":141},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[30,101300,101301],{"__ignoreMap":141},[228,101302,101303,101305,101307,101310,101312,101315,101318,101320,101323],{"class":230,"line":231},[228,101304,1148],{"class":238},[228,101306,69281],{"class":51415},[228,101308,101309],{"class":2077}," timestep",[228,101311,284],{"class":238},[228,101313,101314],{"class":343},"\"0.01\"",[228,101316,101317],{"class":2077}," gravity",[228,101319,284],{"class":238},[228,101321,101322],{"class":343},"\"0 0 -9.81\"",[228,101324,101259],{"class":238},[19,101326,101327,101328,101331,101332,101334],{},"表示每调用一次 ",[30,101329,101330],{},"mj_step","，仿真时间前进 ",[30,101333,39101],{}," 秒。循环 100 次，大约就是 1 秒：",[220,101336,101339],{"className":101337,"code":101338,"language":5302,"meta":141},[5300],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[30,101340,101338],{"__ignoreMap":141},[200,101342,101344],{"id":101343},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,101346,101347],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[220,101349,101352],{"className":101350,"code":101351,"language":5302,"meta":141},[5300],"x y z qw qx qy qz\n",[30,101353,101351],{"__ignoreMap":141},[19,101355,101356,101357,101360,101361,101364],{},"表示一个自由刚体的位置和姿态。其中 ",[30,101358,101359],{},"x y z"," 是位置，",[30,101362,101363],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,101366,101368],{"id":101367},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,101370,101371],{},"新建文件:",[220,101373,101375],{"className":23937,"code":101374,"language":23939,"meta":141,"style":141},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[30,101376,101377,101387,101394],{"__ignoreMap":141},[228,101378,101379,101382,101384],{"class":230,"line":231},[228,101380,101381],{"class":2077},"mkdir",[228,101383,29331],{"class":287},[228,101385,101386],{"class":343}," mujoco_tutorial\n",[228,101388,101389,101392],{"class":230,"line":142},[228,101390,101391],{"class":287},"cd",[228,101393,101386],{"class":343},[228,101395,101396,101399],{"class":230,"line":1293},[228,101397,101398],{"class":2077},"touch",[228,101400,101401],{"class":343}," ch1_first_sim.py\n",[19,101403,101404],{},"写入:",[220,101406,101408],{"className":30493,"code":101407,"language":30495,"meta":141,"style":141},"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",[30,101409,101410,101417,101421,101425,101435,101440,101445,101449,101454,101459,101463,101468,101473,101478,101483,101488,101493,101497,101501,101505,101518,101532,101542,101546,101558,101570,101582,101594,101606,101610,101627,101632,101636,101647,101658,101662,101666,101680],{"__ignoreMap":141},[228,101411,101412,101414],{"class":230,"line":231},[228,101413,30507],{"class":234},[228,101415,101416],{"class":238}," mujoco\n",[228,101418,101419],{"class":230,"line":142},[228,101420,2514],{"emptyLinePlaceholder":157},[228,101422,101423],{"class":230,"line":1293},[228,101424,2514],{"emptyLinePlaceholder":157},[228,101426,101427,101430,101432],{"class":230,"line":1308},[228,101428,101429],{"class":287},"XML",[228,101431,13679],{"class":234},[228,101433,101434],{"class":343}," \"\"\"\n",[228,101436,101437],{"class":230,"line":1314},[228,101438,101439],{"class":343},"\u003Cmujoco model=\"first_sim\">\n",[228,101441,101442],{"class":230,"line":1328},[228,101443,101444],{"class":343},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[228,101446,101447],{"class":230,"line":1334},[228,101448,2514],{"emptyLinePlaceholder":157},[228,101450,101451],{"class":230,"line":1425},[228,101452,101453],{"class":343},"  \u003Cworldbody>\n",[228,101455,101456],{"class":230,"line":1431},[228,101457,101458],{"class":343},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[228,101460,101461],{"class":230,"line":1443},[228,101462,2514],{"emptyLinePlaceholder":157},[228,101464,101465],{"class":230,"line":1726},[228,101466,101467],{"class":343},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[228,101469,101470],{"class":230,"line":1731},[228,101471,101472],{"class":343},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[228,101474,101475],{"class":230,"line":1737},[228,101476,101477],{"class":343},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[228,101479,101480],{"class":230,"line":1742},[228,101481,101482],{"class":343},"    \u003C\u002Fbody>\n",[228,101484,101485],{"class":230,"line":1756},[228,101486,101487],{"class":343},"  \u003C\u002Fworldbody>\n",[228,101489,101490],{"class":230,"line":1761},[228,101491,101492],{"class":343},"\u003C\u002Fmujoco>\n",[228,101494,101495],{"class":230,"line":1767},[228,101496,95813],{"class":343},[228,101498,101499],{"class":230,"line":1788},[228,101500,2514],{"emptyLinePlaceholder":157},[228,101502,101503],{"class":230,"line":1793},[228,101504,2514],{"emptyLinePlaceholder":157},[228,101506,101507,101509,101511,101514,101516],{"class":230,"line":1807},[228,101508,32062],{"class":234},[228,101510,2087],{"class":2077},[228,101512,101513],{"class":238},"() -> ",[228,101515,95801],{"class":287},[228,101517,3853],{"class":238},[228,101519,101520,101523,101525,101528,101530],{"class":230,"line":1812},[228,101521,101522],{"class":238},"    model ",[228,101524,284],{"class":234},[228,101526,101527],{"class":238}," mujoco.MjModel.from_xml_string(",[228,101529,101429],{"class":287},[228,101531,245],{"class":238},[228,101533,101534,101537,101539],{"class":230,"line":1841},[228,101535,101536],{"class":238},"    data ",[228,101538,284],{"class":234},[228,101540,101541],{"class":238}," mujoco.MjData(model)\n",[228,101543,101544],{"class":230,"line":1846},[228,101545,2514],{"emptyLinePlaceholder":157},[228,101547,101548,101550,101552,101555],{"class":230,"line":1863},[228,101549,31414],{"class":287},[228,101551,239],{"class":238},[228,101553,101554],{"class":343},"\"nq:\"",[228,101556,101557],{"class":238},", model.nq)\n",[228,101559,101560,101562,101564,101567],{"class":230,"line":1868},[228,101561,31414],{"class":287},[228,101563,239],{"class":238},[228,101565,101566],{"class":343},"\"nv:\"",[228,101568,101569],{"class":238},", model.nv)\n",[228,101571,101572,101574,101576,101579],{"class":230,"line":1873},[228,101573,31414],{"class":287},[228,101575,239],{"class":238},[228,101577,101578],{"class":343},"\"nu:\"",[228,101580,101581],{"class":238},", model.nu)\n",[228,101583,101584,101586,101588,101591],{"class":230,"line":1878},[228,101585,31414],{"class":287},[228,101587,239],{"class":238},[228,101589,101590],{"class":343},"\"initial time:\"",[228,101592,101593],{"class":238},", data.time)\n",[228,101595,101596,101598,101600,101603],{"class":230,"line":1892},[228,101597,31414],{"class":287},[228,101599,239],{"class":238},[228,101601,101602],{"class":343},"\"initial qpos:\"",[228,101604,101605],{"class":238},", data.qpos.copy())\n",[228,101607,101608],{"class":230,"line":1897},[228,101609,2514],{"emptyLinePlaceholder":157},[228,101611,101612,101614,101617,101619,101621,101623,101625],{"class":230,"line":2691},[228,101613,3315],{"class":234},[228,101615,101616],{"class":238}," _ ",[228,101618,26159],{"class":234},[228,101620,32558],{"class":287},[228,101622,239],{"class":238},[228,101624,549],{"class":287},[228,101626,30901],{"class":238},[228,101628,101629],{"class":230,"line":2705},[228,101630,101631],{"class":238},"        mujoco.mj_step(model, data)\n",[228,101633,101634],{"class":230,"line":2713},[228,101635,2514],{"emptyLinePlaceholder":157},[228,101637,101638,101640,101642,101645],{"class":230,"line":2718},[228,101639,31414],{"class":287},[228,101641,239],{"class":238},[228,101643,101644],{"class":343},"\"final time:\"",[228,101646,101593],{"class":238},[228,101648,101649,101651,101653,101656],{"class":230,"line":2724},[228,101650,31414],{"class":287},[228,101652,239],{"class":238},[228,101654,101655],{"class":343},"\"final qpos:\"",[228,101657,101605],{"class":238},[228,101659,101660],{"class":230,"line":2730},[228,101661,2514],{"emptyLinePlaceholder":157},[228,101663,101664],{"class":230,"line":2735},[228,101665,2514],{"emptyLinePlaceholder":157},[228,101667,101668,101670,101672,101675,101678],{"class":230,"line":8063},[228,101669,1645],{"class":234},[228,101671,31335],{"class":287},[228,101673,101674],{"class":234}," ==",[228,101676,101677],{"class":343}," \"__main__\"",[228,101679,3853],{"class":238},[228,101681,101682],{"class":230,"line":8087},[228,101683,101684],{"class":238},"    main()\n",[200,101686,101687],{"id":101687},"代码逐段解释",[19,101689,101690],{},"导入库：",[220,101692,101694],{"className":30493,"code":101693,"language":30495,"meta":141,"style":141},"import mujoco\n",[30,101695,101696],{"__ignoreMap":141},[228,101697,101698,101700],{"class":230,"line":231},[228,101699,30507],{"class":234},[228,101701,101416],{"class":238},[19,101703,101704],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,101706,101707],{},"定义 XML：",[220,101709,101711],{"className":30493,"code":101710,"language":30495,"meta":141,"style":141},"XML = \"\"\"\n...\n\"\"\"\n",[30,101712,101713,101721,101726],{"__ignoreMap":141},[228,101714,101715,101717,101719],{"class":230,"line":231},[228,101716,101429],{"class":287},[228,101718,13679],{"class":234},[228,101720,101434],{"class":343},[228,101722,101723],{"class":230,"line":142},[228,101724,101725],{"class":343},"...\n",[228,101727,101728],{"class":230,"line":1293},[228,101729,95813],{"class":343},[19,101731,101732,101733,101736],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[30,101734,101735],{},"freejoint"," 的方块。",[19,101738,101739],{},"编译模型：",[220,101741,101743],{"className":30493,"code":101742,"language":30495,"meta":141,"style":141},"model = mujoco.MjModel.from_xml_string(XML)\n",[30,101744,101745],{"__ignoreMap":141},[228,101746,101747,101750,101752,101754,101756],{"class":230,"line":231},[228,101748,101749],{"class":238},"model ",[228,101751,284],{"class":234},[228,101753,101527],{"class":238},[228,101755,101429],{"class":287},[228,101757,245],{"class":238},[19,101759,101760],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,101762,101763],{},"创建数据：",[220,101765,101767],{"className":30493,"code":101766,"language":30495,"meta":141,"style":141},"data = mujoco.MjData(model)\n",[30,101768,101769],{"__ignoreMap":141},[228,101770,101771,101774,101776],{"class":230,"line":231},[228,101772,101773],{"class":238},"data ",[228,101775,284],{"class":234},[228,101777,101541],{"class":238},[19,101779,101780,101782,101783,101785],{},[30,101781,33516],{}," 会保存仿真当前状态。刚创建时，时间是 ",[30,101784,430],{},"，方块还在初始位置。",[19,101787,101788],{},"推进仿真：",[220,101790,101792],{"className":30493,"code":101791,"language":30495,"meta":141,"style":141},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[30,101793,101794,101810],{"__ignoreMap":141},[228,101795,101796,101798,101800,101802,101804,101806,101808],{"class":230,"line":231},[228,101797,3139],{"class":234},[228,101799,101616],{"class":238},[228,101801,26159],{"class":234},[228,101803,32558],{"class":287},[228,101805,239],{"class":238},[228,101807,549],{"class":287},[228,101809,30901],{"class":238},[228,101811,101812],{"class":230,"line":142},[228,101813,101814],{"class":238},"    mujoco.mj_step(model, data)\n",[19,101816,101817,101818,101820],{},"每次 ",[30,101819,101330],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[200,101822,101823],{"id":101823},"代码逐行细讲",[19,101825,101826],{},"下面把完整代码按新手视角拆开讲。",[220,101828,101829],{"className":30493,"code":101693,"language":30495,"meta":141,"style":141},[30,101830,101831],{"__ignoreMap":141},[228,101832,101833,101835],{"class":230,"line":231},[228,101834,30507],{"class":234},[228,101836,101416],{"class":238},[19,101838,101839,101841,101842,451,101844,451,101846,78],{},[30,101840,30507],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[30,101843,100790],{},[30,101845,100795],{},[30,101847,101848],{},"mujoco.mj_step",[220,101850,101851],{"className":30493,"code":101710,"language":30495,"meta":141,"style":141},[30,101852,101853,101861,101865],{"__ignoreMap":141},[228,101854,101855,101857,101859],{"class":230,"line":231},[228,101856,101429],{"class":287},[228,101858,13679],{"class":234},[228,101860,101434],{"class":343},[228,101862,101863],{"class":230,"line":142},[228,101864,101725],{"class":343},[228,101866,101867],{"class":230,"line":1293},[228,101868,95813],{"class":343},[19,101870,101871,101873,101874,101877],{},[30,101872,101429],{}," 是一个变量名。右边的三引号 ",[30,101875,101876],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[220,101879,101880],{"className":53182,"code":101439,"language":53184,"meta":141,"style":141},[30,101881,101882],{"__ignoreMap":141},[228,101883,101884,101886,101888,101891,101893,101896],{"class":230,"line":231},[228,101885,1148],{"class":238},[228,101887,101136],{"class":51415},[228,101889,101890],{"class":2077}," model",[228,101892,284],{"class":238},[228,101894,101895],{"class":343},"\"first_sim\"",[228,101897,51422],{"class":238},[19,101899,101900,101901,101904,101905,78],{},"这是 XML 的根标签。",[30,101902,101903],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[30,101906,101907],{},"first_sim",[220,101909,101910],{"className":53182,"code":101298,"language":53184,"meta":141,"style":141},[30,101911,101912],{"__ignoreMap":141},[228,101913,101914,101916,101918,101920,101922,101924,101926,101928,101930],{"class":230,"line":231},[228,101915,1148],{"class":238},[228,101917,69281],{"class":51415},[228,101919,101309],{"class":2077},[228,101921,284],{"class":238},[228,101923,101314],{"class":343},[228,101925,101317],{"class":2077},[228,101927,284],{"class":238},[228,101929,101322],{"class":343},[228,101931,101259],{"class":238},[19,101933,101934,101936,101937,101940,101941,101944],{},[30,101935,69281],{}," 用来设置仿真参数。",[30,101938,101939],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[30,101942,101943],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[220,101946,101948],{"className":53182,"code":101947,"language":53184,"meta":141,"style":141},"\u003Cworldbody>\n",[30,101949,101950],{"__ignoreMap":141},[228,101951,101952,101954,101957],{"class":230,"line":231},[228,101953,1148],{"class":238},[228,101955,101956],{"class":51415},"worldbody",[228,101958,51422],{"class":238},[19,101960,101961,101963],{},[30,101962,101956],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[220,101965,101967],{"className":53182,"code":101966,"language":53184,"meta":141,"style":141},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[30,101968,101969],{"__ignoreMap":141},[228,101970,101971,101973,101975,101977,101979,101982,101984,101986,101989,101991,101993,101996,101998,102000,102003],{"class":230,"line":231},[228,101972,1148],{"class":238},[228,101974,101235],{"class":51415},[228,101976,15035],{"class":2077},[228,101978,284],{"class":238},[228,101980,101981],{"class":343},"\"floor\"",[228,101983,53939],{"class":2077},[228,101985,284],{"class":238},[228,101987,101988],{"class":343},"\"plane\"",[228,101990,101251],{"class":2077},[228,101992,284],{"class":238},[228,101994,101995],{"class":343},"\"2 2 0.1\"",[228,101997,78882],{"class":2077},[228,101999,284],{"class":238},[228,102001,102002],{"class":343},"\"0.8 0.8 0.8 1\"",[228,102004,101259],{"class":238},[19,102006,102007,102008,102010,102011,102014,102015,102018,102019,102021],{},"这行创建地面。",[30,102009,101235],{}," 是几何体。",[30,102012,102013],{},"name=\"floor\""," 是名字。",[30,102016,102017],{},"type=\"plane\""," 表示平面。",[30,102020,55225],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[220,102023,102025],{"className":53182,"code":102024,"language":53184,"meta":141,"style":141},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[30,102026,102027],{"__ignoreMap":141},[228,102028,102029,102031,102033,102035,102037,102039,102041,102043,102045],{"class":230,"line":231},[228,102030,1148],{"class":238},[228,102032,51915],{"class":51415},[228,102034,15035],{"class":2077},[228,102036,284],{"class":238},[228,102038,53606],{"class":343},[228,102040,101221],{"class":2077},[228,102042,284],{"class":238},[228,102044,101226],{"class":343},[228,102046,51422],{"class":238},[19,102048,102049,102050,78,102052,102055,102056,102058],{},"这行创建一个刚体，名字叫 ",[30,102051,53829],{},[30,102053,102054],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[30,102057,101284],{},"，也就是离地面 1 米高。",[220,102060,102062],{"className":53182,"code":102061,"language":53184,"meta":141,"style":141},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[30,102063,102064],{"__ignoreMap":141},[228,102065,102066,102068,102070,102072,102074,102077],{"class":230,"line":231},[228,102067,1148],{"class":238},[228,102069,101735],{"class":51415},[228,102071,15035],{"class":2077},[228,102073,284],{"class":238},[228,102075,102076],{"class":343},"\"box_free\"",[228,102078,101259],{"class":238},[19,102080,102081,102082,102084],{},"这行很重要。",[30,102083,101735],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[220,102086,102088],{"className":53182,"code":102087,"language":53184,"meta":141,"style":141},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[30,102089,102090],{"__ignoreMap":141},[228,102091,102092,102094,102096,102098,102100,102102,102104,102106,102108,102110,102112,102114,102117,102119,102121,102123,102125,102128],{"class":230,"line":231},[228,102093,1148],{"class":238},[228,102095,101235],{"class":51415},[228,102097,15035],{"class":2077},[228,102099,284],{"class":238},[228,102101,101242],{"class":343},[228,102103,53939],{"class":2077},[228,102105,284],{"class":238},[228,102107,53606],{"class":343},[228,102109,101251],{"class":2077},[228,102111,284],{"class":238},[228,102113,101256],{"class":343},[228,102115,102116],{"class":2077}," mass",[228,102118,284],{"class":238},[228,102120,3792],{"class":343},[228,102122,78882],{"class":2077},[228,102124,284],{"class":238},[228,102126,102127],{"class":343},"\"1 0 0 1\"",[228,102129,101259],{"class":238},[19,102131,102132,102133,102136,102137,102140,102141,102144,102145,102148],{},"这行给 box body 添加一个盒子形状。",[30,102134,102135],{},"type=\"box\""," 表示形状是盒子。",[30,102138,102139],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[30,102142,102143],{},"mass=\"1\""," 表示质量是 1。",[30,102146,102147],{},"rgba=\"1 0 0 1\""," 表示红色。",[220,102150,102152],{"className":30493,"code":102151,"language":30495,"meta":141,"style":141},"def main() -> None:\n",[30,102153,102154],{"__ignoreMap":141},[228,102155,102156,102158,102160,102162,102164],{"class":230,"line":231},[228,102157,32062],{"class":234},[228,102159,2087],{"class":2077},[228,102161,101513],{"class":238},[228,102163,95801],{"class":287},[228,102165,3853],{"class":238},[19,102167,102168,102170,102171,102174,102175,102178],{},[30,102169,32062],{}," 用来定义函数。这里定义了一个叫 ",[30,102172,102173],{},"main"," 的函数。",[30,102176,102177],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[220,102180,102181],{"className":30493,"code":101742,"language":30495,"meta":141,"style":141},[30,102182,102183],{"__ignoreMap":141},[228,102184,102185,102187,102189,102191,102193],{"class":230,"line":231},[228,102186,101749],{"class":238},[228,102188,284],{"class":234},[228,102190,101527],{"class":238},[228,102192,101429],{"class":287},[228,102194,245],{"class":238},[19,102196,102197,102198,102201],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[30,102199,102200],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[220,102203,102204],{"className":30493,"code":101766,"language":30495,"meta":141,"style":141},[30,102205,102206],{"__ignoreMap":141},[228,102207,102208,102210,102212],{"class":230,"line":231},[228,102209,101773],{"class":238},[228,102211,284],{"class":234},[228,102213,101541],{"class":238},[19,102215,102216,102217,102219,102220,102222],{},"这行创建仿真数据。",[30,102218,33516],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[30,102221,33516],{}," 都会变化。",[220,102224,102226],{"className":30493,"code":102225,"language":30495,"meta":141,"style":141},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[30,102227,102228,102238,102248],{"__ignoreMap":141},[228,102229,102230,102232,102234,102236],{"class":230,"line":231},[228,102231,30530],{"class":287},[228,102233,239],{"class":238},[228,102235,101554],{"class":343},[228,102237,101557],{"class":238},[228,102239,102240,102242,102244,102246],{"class":230,"line":142},[228,102241,30530],{"class":287},[228,102243,239],{"class":238},[228,102245,101566],{"class":343},[228,102247,101569],{"class":238},[228,102249,102250,102252,102254,102256],{"class":230,"line":1293},[228,102251,30530],{"class":287},[228,102253,239],{"class":238},[228,102255,101578],{"class":343},[228,102257,101581],{"class":238},[19,102259,102260,102262,102263,102266,102267,102270,102271,102274,102275,102278],{},[30,102261,30530],{}," 用来输出信息。",[30,102264,102265],{},"model.nq"," 是位置变量数量，",[30,102268,102269],{},"model.nv"," 是速度变量数量，",[30,102272,102273],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[30,102276,102277],{},"nu"," 是 0。",[220,102280,102282],{"className":30493,"code":102281,"language":30495,"meta":141,"style":141},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[30,102283,102284,102294],{"__ignoreMap":141},[228,102285,102286,102288,102290,102292],{"class":230,"line":231},[228,102287,30530],{"class":287},[228,102289,239],{"class":238},[228,102291,101590],{"class":343},[228,102293,101593],{"class":238},[228,102295,102296,102298,102300,102302],{"class":230,"line":142},[228,102297,30530],{"class":287},[228,102299,239],{"class":238},[228,102301,101602],{"class":343},[228,102303,101605],{"class":238},[19,102305,102306,102307,102309,102310,102312,102313,102316],{},"这里打印初始时间和初始位置。",[30,102308,101182],{}," 一开始是 0。",[30,102311,101185],{}," 是位置数组。",[30,102314,102315],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[220,102318,102319],{"className":30493,"code":101791,"language":30495,"meta":141,"style":141},[30,102320,102321,102337],{"__ignoreMap":141},[228,102322,102323,102325,102327,102329,102331,102333,102335],{"class":230,"line":231},[228,102324,3139],{"class":234},[228,102326,101616],{"class":238},[228,102328,26159],{"class":234},[228,102330,32558],{"class":287},[228,102332,239],{"class":238},[228,102334,549],{"class":287},[228,102336,30901],{"class":238},[228,102338,102339],{"class":230,"line":142},[228,102340,101814],{"class":238},[19,102342,102343,102345,102346,102349,102350,102352,102353,102355],{},[30,102344,3139],{}," 是循环。",[30,102347,102348],{},"range(100)"," 表示循环 100 次。",[30,102351,1230],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[30,102354,101330],{},"，仿真就前进一步。",[220,102357,102359],{"className":30493,"code":102358,"language":30495,"meta":141,"style":141},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[30,102360,102361,102371],{"__ignoreMap":141},[228,102362,102363,102365,102367,102369],{"class":230,"line":231},[228,102364,30530],{"class":287},[228,102366,239],{"class":238},[228,102368,101644],{"class":343},[228,102370,101593],{"class":238},[228,102372,102373,102375,102377,102379],{"class":230,"line":142},[228,102374,30530],{"class":287},[228,102376,239],{"class":238},[228,102378,101655],{"class":343},[228,102380,101605],{"class":238},[19,102382,102383],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[220,102385,102387],{"className":30493,"code":102386,"language":30495,"meta":141,"style":141},"if __name__ == \"__main__\":\n    main()\n",[30,102388,102389,102401],{"__ignoreMap":141},[228,102390,102391,102393,102395,102397,102399],{"class":230,"line":231},[228,102392,1645],{"class":234},[228,102394,31335],{"class":287},[228,102396,101674],{"class":234},[228,102398,101677],{"class":343},[228,102400,3853],{"class":238},[228,102402,102403],{"class":230,"line":142},[228,102404,101684],{"class":238},[19,102406,102407,102408,102411,102412,78],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[30,102409,102410],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[30,102413,102410],{},[19,102415,102416],{},"运行:",[220,102418,102420],{"className":23937,"code":102419,"language":23939,"meta":141,"style":141},"python ch1_first_sim.py\n",[30,102421,102422],{"__ignoreMap":141},[228,102423,102424,102426],{"class":230,"line":231},[228,102425,30495],{"class":2077},[228,102427,101401],{"class":343},[14,102429,102431],{"id":102430},"_5运行结果说明","5.运行结果说明",[19,102433,102434],{},"你应该看到类似输出:",[220,102436,102439],{"className":102437,"code":102438,"language":5302,"meta":141},[5300],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[30,102440,102438],{"__ignoreMap":141},[19,102442,102443,102445,102446,102449,102450,78],{},[30,102444,101735],{}," 有 7 个位置变量: ",[30,102447,102448],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[30,102451,102452],{},"vx vy vz wx wy wz",[19,102454,102455,102456,102459],{},"你还会看到 ",[30,102457,102458],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,102461,102463],{"id":102462},"_6验证步骤","6.验证步骤",[19,102465,102466],{},"确认版本:",[220,102468,102469],{"className":23937,"code":101054,"language":23939,"meta":141,"style":141},[30,102470,102471],{"__ignoreMap":141},[228,102472,102473,102475,102477],{"class":230,"line":231},[228,102474,30495],{"class":2077},[228,102476,30473],{"class":287},[228,102478,101065],{"class":343},[19,102480,102481],{},"确认导入的是官方 bindings:",[220,102483,102485],{"className":23937,"code":102484,"language":23939,"meta":141,"style":141},"python -c \"import mujoco; print(mujoco)\"\n",[30,102486,102487],{"__ignoreMap":141},[228,102488,102489,102491,102493],{"class":230,"line":231},[228,102490,30495],{"class":2077},[228,102492,30473],{"class":287},[228,102494,102495],{"class":343}," \"import mujoco; print(mujoco)\"\n",[19,102497,102498],{},"运行程序:",[220,102500,102501],{"className":23937,"code":102419,"language":23939,"meta":141,"style":141},[30,102502,102503],{"__ignoreMap":141},[228,102504,102505,102507],{"class":230,"line":231},[228,102506,30495],{"class":2077},[228,102508,101401],{"class":343},[19,102510,102511,102512,102515,102516,78],{},"检查 ",[30,102513,102514],{},"final time"," 是否约等于 ",[30,102517,102518],{},"1.0",[19,102520,102521],{},"再做几个小实验：",[183,102523,102524,102534,102542,102555],{},[186,102525,102526,102527,102529,102530,102533],{},"把 ",[30,102528,102054],{}," 改成 ",[30,102531,102532],{},"pos=\"0 0 2\"","，观察初始高度变化。",[186,102535,102526,102536,102529,102538,102541],{},[30,102537,101943],{},[30,102539,102540],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[186,102543,102526,102544,102529,102546,102549,102550,102552,102553,78],{},[30,102545,101939],{},[30,102547,102548],{},"timestep=\"0.005\"","，观察 100 步后的 ",[30,102551,102514],{}," 是否变成约 ",[30,102554,35444],{},[186,102556,102557,102558,102561],{},"删除 ",[30,102559,102560],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,102563,102564],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,102566,102568],{"id":102567},"_7常见错误与解决方案","7.常见错误与解决方案",[200,102570,102572],{"id":102571},"modulenotfounderror-no-module-named-mujoco",[30,102573,102574],{},"ModuleNotFoundError: No module named 'mujoco'",[19,102576,102577],{},"解决:",[220,102579,102581],{"className":23937,"code":102580,"language":23939,"meta":141,"style":141},"pip install \"mujoco>=2.3\"\n",[30,102582,102583],{"__ignoreMap":141},[228,102584,102585,102587,102589],{"class":230,"line":231},[228,102586,23946],{"class":2077},[228,102588,23949],{"class":343},[228,102590,102591],{"class":343}," \"mujoco>=2.3\"\n",[200,102593,102595],{"id":102594},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,102597,102598],{},"先安装系统依赖:",[220,102600,102602],{"className":23937,"code":102601,"language":23939,"meta":141,"style":141},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[30,102603,102604],{"__ignoreMap":141},[228,102605,102606,102608,102610,102612,102614,102617,102619,102622,102624,102627,102629],{"class":230,"line":231},[228,102607,24692],{"class":2077},[228,102609,26431],{"class":343},[228,102611,23949],{"class":343},[228,102613,26516],{"class":287},[228,102615,102616],{"class":343}," mesa-libGL",[228,102618,100929],{"class":343},[228,102620,102621],{"class":343}," glfw",[228,102623,100949],{"class":343},[228,102625,102626],{"class":343}," libX11",[228,102628,100962],{"class":343},[228,102630,102631],{"class":343}," libXrandr\n",[200,102633,102635],{"id":102634},"xml-解析失败","XML 解析失败",[19,102637,102638],{},"检查:",[183,102640,102641,102644,102647,102653],{},[186,102642,102643],{},"标签是否闭合",[186,102645,102646],{},"属性是否带引号",[186,102648,102649,102650],{},"根节点是否是 ",[30,102651,102652],{},"\u003Cmujoco>",[186,102654,102655,102657,102658,102661],{},[30,102656,51915],{}," 是否放在 ",[30,102659,102660],{},"\u003Cworldbody>"," 内部",[200,102663,102665,102667,102668],{"id":102664},"final-time-不是严格等于-10",[30,102666,102514],{}," 不是严格等于 ",[30,102669,102518],{},[19,102671,102672],{},"这通常不是错误。浮点数计算可能得到：",[220,102674,102677],{"className":102675,"code":102676,"language":5302,"meta":141},[5300],"1.0000000000000007\n",[30,102678,102676],{"__ignoreMap":141},[19,102680,102681,102682,102684],{},"只要接近 ",[30,102683,102518],{}," 就正常。",[200,102686,102687],{"id":102687},"方块没有掉下来",[19,102689,102690],{},"检查：",[183,102692,102693,102699,102705,102710],{},[186,102694,102695,102696],{},"方块 body 里是否有 ",[30,102697,102698],{},"\u003Cfreejoint\u002F>",[186,102700,102701,102702],{},"重力是否是 ",[30,102703,102704],{},"0 0 -9.81",[186,102706,102707,102708],{},"是否真的调用了 ",[30,102709,100800],{},[186,102711,102712,102713,102715,102716],{},"你看的是否是 ",[30,102714,102458],{},"，不是 ",[30,102717,102718],{},"initial qpos",[14,102720,102722],{"id":102721},"_8本章小结","8.本章小结",[19,102724,102725],{},"本章你已经完成了 MuJoCo 的最小闭环：",[220,102727,102730],{"className":102728,"code":102729,"language":5302,"meta":141},[5300],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[30,102731,102729],{"__ignoreMap":141},[19,102733,102734],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[5241,102736,102737],{},"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":141,"searchDepth":142,"depth":142,"links":102739},[102740,102741,102742,102747,102751,102752,102753,102761],{"id":100761,"depth":142,"text":100762},{"id":100884,"depth":142,"text":100885},{"id":101159,"depth":142,"text":101160,"children":102743},[102744,102745,102746],{"id":101197,"depth":1293,"text":101198},{"id":101291,"depth":1293,"text":101292},{"id":101343,"depth":1293,"text":101344},{"id":101367,"depth":142,"text":101368,"children":102748},[102749,102750],{"id":101687,"depth":1293,"text":101687},{"id":101823,"depth":1293,"text":101823},{"id":102430,"depth":142,"text":102431},{"id":102462,"depth":142,"text":102463},{"id":102567,"depth":142,"text":102568,"children":102754},[102755,102756,102757,102758,102760],{"id":102571,"depth":1293,"text":102574},{"id":102594,"depth":1293,"text":102595},{"id":102634,"depth":1293,"text":102635},{"id":102664,"depth":1293,"text":102759},"final time 不是严格等于 1.0",{"id":102687,"depth":1293,"text":102687},{"id":102721,"depth":142,"text":102722},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100753,"description":141},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102768,"title":102769,"body":102770,"description":141,"extension":155,"meta":104426,"navigation":157,"path":104427,"seo":104428,"stem":104429,"__hash__":104430},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102771,"toc":104402},[102772,102775,102777,102780,102783,102800,102895,102898,102904,102906,102908,102932,102935,102949,102952,102993,102995,103008,103010,103013,103061,103073,103076,103079,103085,103098,103165,103168,103187,103190,103193,103199,103201,103210,103213,103217,103226,103308,103317,103321,103327,103341,103351,103353,103683,103686,103698,103700,103711,103713,103716,103734,103737,103740,103758,103769,103772,103787,103797,103799,103820,103837,103857,103863,103903,103919,103935,103941,103944,103968,103984,103989,104019,104036,104061,104064,104079,104088,104103,104112,104127,104134,104136,104146,104159,104166,104169,104208,104215,104217,104269,104271,104277,104280,104287,104294,104297,104299,104317,104320,104323,104357,104369,104371,104374,104396,104399],[10,102773,102769],{"id":102774},"_2xml-与-mjcf-物理建模基础",[14,102776,100762],{"id":100761},[19,102778,102779],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,102781,102782],{},"本章结束后，你应该能看懂一个简单模型里：",[183,102784,102785,102788,102791,102794,102797],{},[186,102786,102787],{},"地面在哪里。",[186,102789,102790],{},"物体初始位置在哪里。",[186,102792,102793],{},"几何体是什么形状。",[186,102795,102796],{},"哪些 body 可以自由运动。",[186,102798,102799],{},"如何用名字在 Python 里找到 XML 中的对象。",[376,102801,102802,102812],{},[379,102803,102804],{},[382,102805,102806,102809],{},[385,102807,102808],{"align":23851},"标签",[385,102810,102811],{"align":23851},"作用",[423,102813,102814,102823,102833,102842,102852,102862,102875,102885],{},[382,102815,102816,102820],{},[428,102817,102818],{"align":23851},[30,102819,102652],{},[428,102821,102822],{"align":23851},"根节点",[382,102824,102825,102830],{},[428,102826,102827],{"align":23851},[30,102828,102829],{},"\u003Coption>",[428,102831,102832],{"align":23851},"仿真参数",[382,102834,102835,102839],{},[428,102836,102837],{"align":23851},[30,102838,102660],{},[428,102840,102841],{"align":23851},"世界中的物体",[382,102843,102844,102849],{},[428,102845,102846],{"align":23851},[30,102847,102848],{},"\u003Cbody>",[428,102850,102851],{"align":23851},"刚体",[382,102853,102854,102859],{},[428,102855,102856],{"align":23851},[30,102857,102858],{},"\u003Cgeom>",[428,102860,102861],{"align":23851},"几何体、碰撞体、可视体",[382,102863,102864,102872],{},[428,102865,102866,25094,102869],{"align":23851},[30,102867,102868],{},"\u003Cjoint>",[30,102870,102871],{},"\u003Cfreejoint>",[428,102873,102874],{"align":23851},"关节",[382,102876,102877,102882],{},[428,102878,102879],{"align":23851},[30,102880,102881],{},"\u003Csite>",[428,102883,102884],{"align":23851},"标记点",[382,102886,102887,102892],{},[428,102888,102889],{"align":23851},[30,102890,102891],{},"\u003Cactuator>",[428,102893,102894],{"align":23851},"控制器",[19,102896,102897],{},"初学时可以先记住：",[220,102899,102902],{"className":102900,"code":102901,"language":5302,"meta":141},[5300],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[30,102903,102901],{"__ignoreMap":141},[14,102905,100885],{"id":100884},[19,102907,100888],{},[220,102909,102911],{"className":23937,"code":102910,"language":23939,"meta":141,"style":141},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[30,102912,102913],{"__ignoreMap":141},[228,102914,102915,102917,102919,102921,102923,102925,102927,102929],{"class":230,"line":231},[228,102916,24692],{"class":2077},[228,102918,26431],{"class":343},[228,102920,23949],{"class":343},[228,102922,26516],{"class":287},[228,102924,102616],{"class":343},[228,102926,100929],{"class":343},[228,102928,102621],{"class":343},[228,102930,102931],{"class":343}," glfw-devel\n",[19,102933,102934],{},"pip:",[220,102936,102937],{"className":23937,"code":101034,"language":23939,"meta":141,"style":141},[30,102938,102939],{"__ignoreMap":141},[228,102940,102941,102943,102945,102947],{"class":230,"line":231},[228,102942,23946],{"class":2077},[228,102944,23949],{"class":343},[228,102946,101045],{"class":343},[228,102948,101048],{"class":343},[19,102950,102951],{},"conda:",[220,102953,102955],{"className":23937,"code":102954,"language":23939,"meta":141,"style":141},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[30,102956,102957,102974,102983],{"__ignoreMap":141},[228,102958,102959,102961,102963,102965,102968,102970,102972],{"class":230,"line":231},[228,102960,30445],{"class":2077},[228,102962,29291],{"class":343},[228,102964,25231],{"class":287},[228,102966,102967],{"class":343}," mujoco-xml",[228,102969,101090],{"class":343},[228,102971,101093],{"class":287},[228,102973,101096],{"class":287},[228,102975,102976,102978,102980],{"class":230,"line":142},[228,102977,30445],{"class":2077},[228,102979,101103],{"class":343},[228,102981,102982],{"class":343}," mujoco-xml\n",[228,102984,102985,102987,102989,102991],{"class":230,"line":1293},[228,102986,23946],{"class":2077},[228,102988,23949],{"class":343},[228,102990,101045],{"class":343},[228,102992,101048],{"class":343},[19,102994,101119],{},[183,102996,102997,103000,103005],{},[186,102998,102999],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[186,103001,103002,103003,78],{},"本章使用基础标签，适用于 ",[30,103004,101142],{},[186,103006,103007],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,103009,101160],{"id":101159},[19,103011,103012],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[220,103014,103016],{"className":53182,"code":103015,"language":53184,"meta":141,"style":141},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[30,103017,103018,103032,103040,103045,103053],{"__ignoreMap":141},[228,103019,103020,103022,103024,103026,103028,103030],{"class":230,"line":231},[228,103021,1148],{"class":238},[228,103023,101136],{"class":51415},[228,103025,101890],{"class":2077},[228,103027,284],{"class":238},[228,103029,62794],{"class":343},[228,103031,51422],{"class":238},[228,103033,103034,103036,103038],{"class":230,"line":142},[228,103035,52259],{"class":238},[228,103037,101956],{"class":51415},[228,103039,51422],{"class":238},[228,103041,103042],{"class":230,"line":1293},[228,103043,103044],{"class":238},"    ...\n",[228,103046,103047,103049,103051],{"class":230,"line":1308},[228,103048,52532],{"class":238},[228,103050,101956],{"class":51415},[228,103052,51422],{"class":238},[228,103054,103055,103057,103059],{"class":230,"line":1314},[228,103056,51900],{"class":238},[228,103058,101136],{"class":51415},[228,103060,51422],{"class":238},[19,103062,103063,103065,103066,103068,103069,103072],{},[30,103064,51915],{}," 表示刚体。",[30,103067,101235],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[30,103070,103071],{},"joint"," 表示刚体相对父刚体如何运动。",[200,103074,103075],{"id":103075},"层级结构非常重要",[19,103077,103078],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[220,103080,103083],{"className":103081,"code":103082,"language":5302,"meta":141},[5300],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[30,103084,103082],{"__ignoreMap":141},[19,103086,103087,101133,103090,103093,103094,103097],{},[30,103088,103089],{},"red_box_geom",[30,103091,103092],{},"box_center"," 都属于 ",[30,103095,103096],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[220,103099,103101],{"className":53182,"code":103100,"language":53184,"meta":141,"style":141},"\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",[30,103102,103103,103123,103137,103157],{"__ignoreMap":141},[228,103104,103105,103107,103109,103111,103113,103115,103117,103119,103121],{"class":230,"line":231},[228,103106,1148],{"class":238},[228,103108,51915],{"class":51415},[228,103110,15035],{"class":2077},[228,103112,284],{"class":238},[228,103114,53606],{"class":343},[228,103116,101221],{"class":2077},[228,103118,284],{"class":238},[228,103120,101226],{"class":343},[228,103122,51422],{"class":238},[228,103124,103125,103127,103129,103131,103133,103135],{"class":230,"line":142},[228,103126,52259],{"class":238},[228,103128,101735],{"class":51415},[228,103130,15035],{"class":2077},[228,103132,284],{"class":238},[228,103134,102076],{"class":343},[228,103136,101259],{"class":238},[228,103138,103139,103141,103143,103145,103147,103149,103151,103153,103155],{"class":230,"line":1293},[228,103140,52259],{"class":238},[228,103142,101235],{"class":51415},[228,103144,53939],{"class":2077},[228,103146,284],{"class":238},[228,103148,53606],{"class":343},[228,103150,101251],{"class":2077},[228,103152,284],{"class":238},[228,103154,101256],{"class":343},[228,103156,101259],{"class":238},[228,103158,103159,103161,103163],{"class":230,"line":1308},[228,103160,51900],{"class":238},[228,103162,51915],{"class":51415},[228,103164,51422],{"class":238},[19,103166,103167],{},"含义:",[183,103169,103170,103176,103181,103184],{},[186,103171,103172,103173,103175],{},"创建名为 ",[30,103174,53829],{}," 的刚体",[186,103177,103178,103179],{},"初始位置在世界坐标 ",[30,103180,101284],{},[186,103182,103183],{},"它有一个自由关节",[186,103185,103186],{},"它有一个盒子几何体",[200,103188,103189],{"id":103189},"坐标怎么理解",[19,103191,103192],{},"MuJoCo 默认使用三维坐标：",[220,103194,103197],{"className":103195,"code":103196,"language":5302,"meta":141},[5300],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[30,103198,103196],{"__ignoreMap":141},[19,103200,14748],{},[220,103202,103204],{"className":53182,"code":103203,"language":53184,"meta":141,"style":141},"pos=\"0 0 1\"\n",[30,103205,103206],{"__ignoreMap":141},[228,103207,103208],{"class":230,"line":231},[228,103209,103203],{"class":238},[19,103211,103212],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[200,103214,103216],{"id":103215},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,103218,103219,103220,82645,103223,103225],{},"不同 ",[30,103221,103222],{},"type",[30,103224,31611],{}," 含义不同：",[376,103227,103228,103243],{},[379,103229,103230],{},[382,103231,103232,103236,103241],{},[385,103233,103234],{"align":23851},[30,103235,103222],{},[385,103237,103238,103240],{"align":23851},[30,103239,31611],{}," 示例",[385,103242,100815],{"align":23851},[423,103244,103245,103259,103274,103293],{},[382,103246,103247,103251,103256],{},[428,103248,103249],{"align":23851},[30,103250,53829],{},[428,103252,103253],{"align":23851},[30,103254,103255],{},"size=\"0.1 0.2 0.3\"",[428,103257,103258],{"align":23851},"x\u002Fy\u002Fz 半边长，不是完整长度",[382,103260,103261,103266,103271],{},[428,103262,103263],{"align":23851},[30,103264,103265],{},"sphere",[428,103267,103268],{"align":23851},[30,103269,103270],{},"size=\"0.1\"",[428,103272,103273],{"align":23851},"球半径",[382,103275,103276,103281,103286],{},[428,103277,103278],{"align":23851},[30,103279,103280],{},"capsule",[428,103282,103283],{"align":23851},[30,103284,103285],{},"size=\"0.03\"",[428,103287,103288,103289,103292],{"align":23851},"胶囊半径，长度常用 ",[30,103290,103291],{},"fromto"," 指定",[382,103294,103295,103300,103305],{},[428,103296,103297],{"align":23851},[30,103298,103299],{},"plane",[428,103301,103302],{"align":23851},[30,103303,103304],{},"size=\"3 3 0.1\"",[428,103306,103307],{"align":23851},"可视平面大小，通常当地面",[19,103309,103310,103311,103313,103314,103316],{},"最容易踩坑的是 box：",[30,103312,102139],{}," 表示边长大约是 ",[30,103315,32152],{},"，因为 MuJoCo 用的是半边长。",[200,103318,103320],{"id":103319},"site-是什么","site 是什么",[19,103322,103323,103326],{},[30,103324,103325],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[183,103328,103329,103332,103335,103338],{},[186,103330,103331],{},"标记机械臂末端。",[186,103333,103334],{},"标记目标位置。",[186,103336,103337],{},"放传感器或相机参考点。",[186,103339,103340],{},"在 Python 中读取某个关键点的世界坐标。",[19,103342,103343,103344,101133,103347,103350],{},"在后面的 Reacher 任务中，",[30,103345,103346],{},"tip",[30,103348,103349],{},"target"," 就会用 site 表示。",[14,103352,101368],{"id":101367},[220,103354,103356],{"className":30493,"code":103355,"language":30495,"meta":141,"style":141},"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",[30,103357,103358,103364,103374,103378,103382,103390,103395,103399,103403,103407,103412,103416,103421,103426,103431,103436,103440,103444,103448,103452,103456,103460,103472,103484,103492,103496,103511,103526,103530,103543,103558,103571,103584,103588,103604,103608,103612,103623,103635,103647,103659,103663,103667,103679],{"__ignoreMap":141},[228,103359,103360,103362],{"class":230,"line":231},[228,103361,30507],{"class":234},[228,103363,101416],{"class":238},[228,103365,103366,103368,103370,103372],{"class":230,"line":142},[228,103367,30507],{"class":234},[228,103369,31495],{"class":238},[228,103371,31498],{"class":234},[228,103373,31501],{"class":238},[228,103375,103376],{"class":230,"line":1293},[228,103377,2514],{"emptyLinePlaceholder":157},[228,103379,103380],{"class":230,"line":1308},[228,103381,2514],{"emptyLinePlaceholder":157},[228,103383,103384,103386,103388],{"class":230,"line":1314},[228,103385,101429],{"class":287},[228,103387,13679],{"class":234},[228,103389,101434],{"class":343},[228,103391,103392],{"class":230,"line":1328},[228,103393,103394],{"class":343},"\u003Cmujoco model=\"xml_basic\">\n",[228,103396,103397],{"class":230,"line":1334},[228,103398,101444],{"class":343},[228,103400,103401],{"class":230,"line":1425},[228,103402,2514],{"emptyLinePlaceholder":157},[228,103404,103405],{"class":230,"line":1431},[228,103406,101453],{"class":343},[228,103408,103409],{"class":230,"line":1443},[228,103410,103411],{"class":343},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[228,103413,103414],{"class":230,"line":1726},[228,103415,2514],{"emptyLinePlaceholder":157},[228,103417,103418],{"class":230,"line":1731},[228,103419,103420],{"class":343},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[228,103422,103423],{"class":230,"line":1737},[228,103424,103425],{"class":343},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[228,103427,103428],{"class":230,"line":1742},[228,103429,103430],{"class":343},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[228,103432,103433],{"class":230,"line":1756},[228,103434,103435],{"class":343},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[228,103437,103438],{"class":230,"line":1761},[228,103439,101482],{"class":343},[228,103441,103442],{"class":230,"line":1767},[228,103443,101487],{"class":343},[228,103445,103446],{"class":230,"line":1788},[228,103447,101492],{"class":343},[228,103449,103450],{"class":230,"line":1793},[228,103451,95813],{"class":343},[228,103453,103454],{"class":230,"line":1807},[228,103455,2514],{"emptyLinePlaceholder":157},[228,103457,103458],{"class":230,"line":1812},[228,103459,2514],{"emptyLinePlaceholder":157},[228,103461,103462,103464,103466,103468,103470],{"class":230,"line":1841},[228,103463,32062],{"class":234},[228,103465,2087],{"class":2077},[228,103467,101513],{"class":238},[228,103469,95801],{"class":287},[228,103471,3853],{"class":238},[228,103473,103474,103476,103478,103480,103482],{"class":230,"line":1846},[228,103475,101522],{"class":238},[228,103477,284],{"class":234},[228,103479,101527],{"class":238},[228,103481,101429],{"class":287},[228,103483,245],{"class":238},[228,103485,103486,103488,103490],{"class":230,"line":1863},[228,103487,101536],{"class":238},[228,103489,284],{"class":234},[228,103491,101541],{"class":238},[228,103493,103494],{"class":230,"line":1868},[228,103495,2514],{"emptyLinePlaceholder":157},[228,103497,103498,103501,103503,103506,103509],{"class":230,"line":1873},[228,103499,103500],{"class":238},"    box_body_id ",[228,103502,284],{"class":234},[228,103504,103505],{"class":238}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[228,103507,103508],{"class":343},"\"red_box\"",[228,103510,245],{"class":238},[228,103512,103513,103516,103518,103521,103524],{"class":230,"line":1878},[228,103514,103515],{"class":238},"    site_id ",[228,103517,284],{"class":234},[228,103519,103520],{"class":238}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[228,103522,103523],{"class":343},"\"box_center\"",[228,103525,245],{"class":238},[228,103527,103528],{"class":230,"line":1892},[228,103529,2514],{"emptyLinePlaceholder":157},[228,103531,103532,103534,103537,103539,103541],{"class":230,"line":1897},[228,103533,3215],{"class":234},[228,103535,103536],{"class":238}," box_body_id ",[228,103538,1148],{"class":234},[228,103540,4207],{"class":287},[228,103542,3853],{"class":238},[228,103544,103545,103548,103551,103553,103556],{"class":230,"line":2691},[228,103546,103547],{"class":234},"        raise",[228,103549,103550],{"class":287}," RuntimeError",[228,103552,239],{"class":238},[228,103554,103555],{"class":343},"\"body red_box not found\"",[228,103557,245],{"class":238},[228,103559,103560,103562,103565,103567,103569],{"class":230,"line":2705},[228,103561,3215],{"class":234},[228,103563,103564],{"class":238}," site_id ",[228,103566,1148],{"class":234},[228,103568,4207],{"class":287},[228,103570,3853],{"class":238},[228,103572,103573,103575,103577,103579,103582],{"class":230,"line":2713},[228,103574,103547],{"class":234},[228,103576,103550],{"class":287},[228,103578,239],{"class":238},[228,103580,103581],{"class":343},"\"site box_center not found\"",[228,103583,245],{"class":238},[228,103585,103586],{"class":230,"line":2718},[228,103587,2514],{"emptyLinePlaceholder":157},[228,103589,103590,103592,103594,103596,103598,103600,103602],{"class":230,"line":2724},[228,103591,3315],{"class":234},[228,103593,101616],{"class":238},[228,103595,26159],{"class":234},[228,103597,32558],{"class":287},[228,103599,239],{"class":238},[228,103601,1836],{"class":287},[228,103603,30901],{"class":238},[228,103605,103606],{"class":230,"line":2730},[228,103607,101631],{"class":238},[228,103609,103610],{"class":230,"line":2735},[228,103611,2514],{"emptyLinePlaceholder":157},[228,103613,103614,103616,103618,103621],{"class":230,"line":8063},[228,103615,31414],{"class":287},[228,103617,239],{"class":238},[228,103619,103620],{"class":343},"\"simulation time:\"",[228,103622,101593],{"class":238},[228,103624,103625,103627,103629,103632],{"class":230,"line":8087},[228,103626,31414],{"class":287},[228,103628,239],{"class":238},[228,103630,103631],{"class":343},"\"box body position:\"",[228,103633,103634],{"class":238},", data.xpos[box_body_id].copy())\n",[228,103636,103637,103639,103641,103644],{"class":230,"line":8092},[228,103638,31414],{"class":287},[228,103640,239],{"class":238},[228,103642,103643],{"class":343},"\"site position:\"",[228,103645,103646],{"class":238},", data.site_xpos[site_id].copy())\n",[228,103648,103649,103651,103653,103656],{"class":230,"line":8098},[228,103650,31414],{"class":287},[228,103652,239],{"class":238},[228,103654,103655],{"class":343},"\"box qpos:\"",[228,103657,103658],{"class":238},", np.array(data.qpos))\n",[228,103660,103661],{"class":230,"line":8125},[228,103662,2514],{"emptyLinePlaceholder":157},[228,103664,103665],{"class":230,"line":8130},[228,103666,2514],{"emptyLinePlaceholder":157},[228,103668,103669,103671,103673,103675,103677],{"class":230,"line":8136},[228,103670,1645],{"class":234},[228,103672,31335],{"class":287},[228,103674,101674],{"class":234},[228,103676,101677],{"class":343},[228,103678,3853],{"class":238},[228,103680,103681],{"class":230,"line":8148},[228,103682,101684],{"class":238},[19,103684,103685],{},"保存为：",[220,103687,103689],{"className":23937,"code":103688,"language":23939,"meta":141,"style":141},"touch ch2_xml_basic.py\n",[30,103690,103691],{"__ignoreMap":141},[228,103692,103693,103695],{"class":230,"line":231},[228,103694,101398],{"class":2077},[228,103696,103697],{"class":343}," ch2_xml_basic.py\n",[19,103699,102416],{},[220,103701,103703],{"className":23937,"code":103702,"language":23939,"meta":141,"style":141},"python ch2_xml_basic.py\n",[30,103704,103705],{"__ignoreMap":141},[228,103706,103707,103709],{"class":230,"line":231},[228,103708,30495],{"class":2077},[228,103710,103697],{"class":343},[200,103712,101687],{"id":101687},[19,103714,103715],{},"用名字查找 body：",[220,103717,103719],{"className":30493,"code":103718,"language":30495,"meta":141,"style":141},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[30,103720,103721],{"__ignoreMap":141},[228,103722,103723,103726,103728,103730,103732],{"class":230,"line":231},[228,103724,103725],{"class":238},"box_body_id ",[228,103727,284],{"class":234},[228,103729,103505],{"class":238},[228,103731,103508],{"class":343},[228,103733,245],{"class":238},[19,103735,103736],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,103738,103739],{},"用名字查找 site：",[220,103741,103743],{"className":30493,"code":103742,"language":30495,"meta":141,"style":141},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[30,103744,103745],{"__ignoreMap":141},[228,103746,103747,103750,103752,103754,103756],{"class":230,"line":231},[228,103748,103749],{"class":238},"site_id ",[228,103751,284],{"class":234},[228,103753,103520],{"class":238},[228,103755,103523],{"class":343},[228,103757,245],{"class":238},[19,103759,103760,103761,103764,103765,103768],{},"注意第二个参数是对象类型。查 body 就用 ",[30,103762,103763],{},"mjOBJ_BODY","，查 site 就用 ",[30,103766,103767],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,103770,103771],{},"读取世界坐标：",[220,103773,103775],{"className":30493,"code":103774,"language":30495,"meta":141,"style":141},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[30,103776,103777,103782],{"__ignoreMap":141},[228,103778,103779],{"class":230,"line":231},[228,103780,103781],{"class":238},"data.xpos[box_body_id]\n",[228,103783,103784],{"class":230,"line":142},[228,103785,103786],{"class":238},"data.site_xpos[site_id]\n",[19,103788,103789,103792,103793,103796],{},[30,103790,103791],{},"xpos"," 是 body 的世界坐标，",[30,103794,103795],{},"site_xpos"," 是 site 的世界坐标。",[200,103798,101823],{"id":101823},[220,103800,103802],{"className":30493,"code":103801,"language":30495,"meta":141,"style":141},"import mujoco\nimport numpy as np\n",[30,103803,103804,103810],{"__ignoreMap":141},[228,103805,103806,103808],{"class":230,"line":231},[228,103807,30507],{"class":234},[228,103809,101416],{"class":238},[228,103811,103812,103814,103816,103818],{"class":230,"line":142},[228,103813,30507],{"class":234},[228,103815,31495],{"class":238},[228,103817,31498],{"class":234},[228,103819,31501],{"class":238},[19,103821,103822,103823,103826,103827,103830,103831,451,103834,78],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[30,103824,103825],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[30,103828,103829],{},"as np"," 是习惯写法，后面就可以写 ",[30,103832,103833],{},"np.array(...)",[30,103835,103836],{},"np.round(...)",[220,103838,103839],{"className":30493,"code":101710,"language":30495,"meta":141,"style":141},[30,103840,103841,103849,103853],{"__ignoreMap":141},[228,103842,103843,103845,103847],{"class":230,"line":231},[228,103844,101429],{"class":287},[228,103846,13679],{"class":234},[228,103848,101434],{"class":343},[228,103850,103851],{"class":230,"line":142},[228,103852,101725],{"class":343},[228,103854,103855],{"class":230,"line":1293},[228,103856,95813],{"class":343},[19,103858,103859,103860,78],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[30,103861,103862],{},"mujoco.MjModel.from_xml_string(XML)",[220,103864,103866],{"className":53182,"code":103865,"language":53184,"meta":141,"style":141},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[30,103867,103868],{"__ignoreMap":141},[228,103869,103870,103872,103874,103876,103878,103880,103882,103884,103887,103889,103891,103894,103896,103898,103901],{"class":230,"line":231},[228,103871,1148],{"class":238},[228,103873,103325],{"class":51415},[228,103875,15035],{"class":2077},[228,103877,284],{"class":238},[228,103879,103523],{"class":343},[228,103881,101221],{"class":2077},[228,103883,284],{"class":238},[228,103885,103886],{"class":343},"\"0 0 0\"",[228,103888,101251],{"class":2077},[228,103890,284],{"class":238},[228,103892,103893],{"class":343},"\"0.03\"",[228,103895,78882],{"class":2077},[228,103897,284],{"class":238},[228,103899,103900],{"class":343},"\"0 1 0 1\"",[228,103902,101259],{"class":238},[19,103904,103905,103907,103908,103911,103912,103914,103915,103918],{},[30,103906,103325],{}," 是标记点。",[30,103909,103910],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[30,103913,103285],{}," 表示显示出来的小球大小。",[30,103916,103917],{},"rgba=\"0 1 0 1\""," 表示绿色。",[220,103920,103921],{"className":30493,"code":103718,"language":30495,"meta":141,"style":141},[30,103922,103923],{"__ignoreMap":141},[228,103924,103925,103927,103929,103931,103933],{"class":230,"line":231},[228,103926,103725],{"class":238},[228,103928,284],{"class":234},[228,103930,103505],{"class":238},[228,103932,103508],{"class":343},[228,103934,245],{"class":238},[19,103936,103937,103938,103940],{},"这行的作用是：根据名字 ",[30,103939,103508],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,103942,103943],{},"拆开看：",[183,103945,103946,103952,103957,103963],{},[186,103947,103948,103951],{},[30,103949,103950],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[186,103953,103954,103956],{},[30,103955,102200],{}," 是被查询的模型。",[186,103958,103959,103962],{},[30,103960,103961],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[186,103964,103965,103967],{},[30,103966,103508],{}," 是 XML 里写的名字。",[220,103969,103970],{"className":30493,"code":103742,"language":30495,"meta":141,"style":141},[30,103971,103972],{"__ignoreMap":141},[228,103973,103974,103976,103978,103980,103982],{"class":230,"line":231},[228,103975,103749],{"class":238},[228,103977,284],{"class":234},[228,103979,103520],{"class":238},[228,103981,103523],{"class":343},[228,103983,245],{"class":238},[19,103985,103986,103987,78],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[30,103988,103523],{},[220,103990,103992],{"className":30493,"code":103991,"language":30495,"meta":141,"style":141},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[30,103993,103994,104006],{"__ignoreMap":141},[228,103995,103996,103998,104000,104002,104004],{"class":230,"line":231},[228,103997,1645],{"class":234},[228,103999,103536],{"class":238},[228,104001,1148],{"class":234},[228,104003,4207],{"class":287},[228,104005,3853],{"class":238},[228,104007,104008,104011,104013,104015,104017],{"class":230,"line":142},[228,104009,104010],{"class":234},"    raise",[228,104012,103550],{"class":287},[228,104014,239],{"class":238},[228,104016,103555],{"class":343},[228,104018,245],{"class":238},[19,104020,104021,104023,104024,104027,104028,104031,104032,104035],{},[30,104022,1645],{}," 是条件判断。",[30,104025,104026],{},"mj_name2id"," 找不到对象时会返回 ",[30,104029,104030],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[30,104033,104034],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[220,104037,104039],{"className":30493,"code":104038,"language":30495,"meta":141,"style":141},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[30,104040,104041,104057],{"__ignoreMap":141},[228,104042,104043,104045,104047,104049,104051,104053,104055],{"class":230,"line":231},[228,104044,3139],{"class":234},[228,104046,101616],{"class":238},[228,104048,26159],{"class":234},[228,104050,32558],{"class":287},[228,104052,239],{"class":238},[228,104054,1836],{"class":287},[228,104056,30901],{"class":238},[228,104058,104059],{"class":230,"line":142},[228,104060,101814],{"class":238},[19,104062,104063],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[220,104065,104067],{"className":30493,"code":104066,"language":30495,"meta":141,"style":141},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[30,104068,104069],{"__ignoreMap":141},[228,104070,104071,104073,104075,104077],{"class":230,"line":231},[228,104072,30530],{"class":287},[228,104074,239],{"class":238},[228,104076,103631],{"class":343},[228,104078,103634],{"class":238},[19,104080,104081,104083,104084,104087],{},[30,104082,101194],{}," 保存所有 body 的世界坐标。",[30,104085,104086],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[220,104089,104091],{"className":30493,"code":104090,"language":30495,"meta":141,"style":141},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[30,104092,104093],{"__ignoreMap":141},[228,104094,104095,104097,104099,104101],{"class":230,"line":231},[228,104096,30530],{"class":287},[228,104098,239],{"class":238},[228,104100,103643],{"class":343},[228,104102,103646],{"class":238},[19,104104,104105,104108,104109,104111],{},[30,104106,104107],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[30,104110,103092],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[220,104113,104115],{"className":30493,"code":104114,"language":30495,"meta":141,"style":141},"print(\"box qpos:\", np.array(data.qpos))\n",[30,104116,104117],{"__ignoreMap":141},[228,104118,104119,104121,104123,104125],{"class":230,"line":231},[228,104120,30530],{"class":287},[228,104122,239],{"class":238},[228,104124,103655],{"class":343},[228,104126,103658],{"class":238},[19,104128,104129,104130,104133],{},"这里打印广义位置数组。",[30,104131,104132],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,104135,102431],{"id":102430},[19,104137,104138,104139,104142,104143,78],{},"程序会输出 ",[30,104140,104141],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[30,104144,104145],{},"qpos",[19,104147,104148,104150,104151,104154,104155,104158],{},[30,104149,104086],{}," 是 body 的世界坐标位置。",[30,104152,104153],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[30,104156,104157],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,104160,82337,104161,82645,104163,104165],{},[30,104162,103092],{},[30,104164,103910],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,104167,104168],{},"如果你把 site 改成：",[220,104170,104172],{"className":53182,"code":104171,"language":53184,"meta":141,"style":141},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[30,104173,104174],{"__ignoreMap":141},[228,104175,104176,104178,104180,104182,104184,104187,104189,104191,104194,104196,104198,104200,104202,104204,104206],{"class":230,"line":231},[228,104177,1148],{"class":238},[228,104179,103325],{"class":51415},[228,104181,15035],{"class":2077},[228,104183,284],{"class":238},[228,104185,104186],{"class":343},"\"box_top\"",[228,104188,101221],{"class":2077},[228,104190,284],{"class":238},[228,104192,104193],{"class":343},"\"0 0 0.15\"",[228,104195,101251],{"class":2077},[228,104197,284],{"class":238},[228,104199,103893],{"class":343},[228,104201,78882],{"class":2077},[228,104203,284],{"class":238},[228,104205,103900],{"class":343},[228,104207,101259],{"class":238},[19,104209,104210,104211,104214],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[30,104212,104213],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,104216,102463],{"id":102462},[183,104218,104219,104228,104231,104238,104244,104255],{},[186,104220,102526,104221,104223,104224,102529,104226,78],{},[30,104222,103096],{}," 的初始高度从 ",[30,104225,456],{},[30,104227,316],{},[186,104229,104230],{},"重新运行程序。",[186,104232,104233,104234,104237],{},"观察 ",[30,104235,104236],{},"box qpos"," 和最终位置是否变化。",[186,104239,104240,104241,104243],{},"故意把 ",[30,104242,103325],{}," 名称改错，确认程序能报错。",[186,104245,102526,104246,104248,104249,102529,104251,104254],{},[30,104247,101235],{}," 的颜色 ",[30,104250,102147],{},[30,104252,104253],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[186,104256,102526,104257,82645,104259,102529,104262,104265,104266,104268],{},[30,104258,103092],{},[30,104260,104261],{},"pos",[30,104263,104264],{},"0 0 0.2","，观察 ",[30,104267,104213],{}," 如何变化。",[14,104270,102568],{"id":102567},[200,104272,104274],{"id":104273},"xml-error-schema-violation",[30,104275,104276],{},"XML Error: Schema violation",[19,104278,104279],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[200,104281,104283,81405,104285],{"id":104282},"mj_name2id-返回-1",[30,104284,104026],{},[30,104286,104030],{},[19,104288,104289,104290,104293],{},"说明名字没有找到。检查 XML 中 ",[30,104291,104292],{},"name=\"...\"","，并确认对象类型正确。",[200,104295,104296],{"id":104296},"物体不下落",[19,104298,102638],{},[183,104300,104301,104306,104311],{},[186,104302,104303,104304],{},"body 是否有 ",[30,104305,101735],{},[186,104307,104308,104309],{},"gravity 是否为 ",[30,104310,102704],{},[186,104312,104313,104314,104316],{},"body 是否被固定在 ",[30,104315,101956],{}," 中",[200,104318,104319],{"id":104319},"坐标看起来不符合预期",[19,104321,104322],{},"先区分两种坐标：",[376,104324,104325,104334],{},[379,104326,104327],{},[382,104328,104329,104332],{},[385,104330,104331],{"align":23851},"坐标",[385,104333,100815],{"align":23851},[423,104335,104336,104346],{},[382,104337,104338,104343],{},[428,104339,104340,104341],{"align":23851},"XML 里的 ",[30,104342,104261],{},[428,104344,104345],{"align":23851},"相对父 body 的局部坐标",[382,104347,104348,104354],{},[428,104349,104350,25094,104352],{"align":23851},[30,104351,101194],{},[30,104353,104107],{},[428,104355,104356],{"align":23851},"仿真更新后的世界坐标",[19,104358,104359,104360,104362,104363,82654,104366,104368],{},"如果你修改了 ",[30,104361,101185],{},"，但还没调用 ",[30,104364,104365],{},"mj_forward",[30,104367,101330],{},"，世界坐标可能还没有更新。",[14,104370,102722],{"id":102721},[19,104372,104373],{},"MJCF 建模先掌握四件事：",[183,104375,104376,104381,104386,104391],{},[186,104377,104378,104380],{},[30,104379,51915],{}," 表示刚体层级。",[186,104382,104383,104385],{},[30,104384,101235],{}," 表示形状、碰撞和质量。",[186,104387,104388,104390],{},[30,104389,103071],{}," 决定 body 能不能动、怎么动。",[186,104392,104393,104395],{},[30,104394,103325],{}," 用来标记关键点，方便 Python 读取位置。",[19,104397,104398],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[5241,104400,104401],{},"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":141,"searchDepth":142,"depth":142,"links":104403},[104404,104405,104406,104412,104416,104417,104418,104425],{"id":100761,"depth":142,"text":100762},{"id":100884,"depth":142,"text":100885},{"id":101159,"depth":142,"text":101160,"children":104407},[104408,104409,104410,104411],{"id":103075,"depth":1293,"text":103075},{"id":103189,"depth":1293,"text":103189},{"id":103215,"depth":1293,"text":103216},{"id":103319,"depth":1293,"text":103320},{"id":101367,"depth":142,"text":101368,"children":104413},[104414,104415],{"id":101687,"depth":1293,"text":101687},{"id":101823,"depth":1293,"text":101823},{"id":102430,"depth":142,"text":102431},{"id":102462,"depth":142,"text":102463},{"id":102567,"depth":142,"text":102568,"children":104419},[104420,104421,104423,104424],{"id":104273,"depth":1293,"text":104276},{"id":104282,"depth":1293,"text":104422},"mj_name2id 返回 -1",{"id":104296,"depth":1293,"text":104296},{"id":104319,"depth":1293,"text":104319},{"id":102721,"depth":142,"text":102722},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102769,"description":141},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104432,"title":104433,"body":104434,"description":141,"extension":155,"meta":105929,"navigation":157,"path":105930,"seo":105931,"stem":105932,"__hash__":105933},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104435,"toc":105901},[104436,104439,104441,104444,104447,104485,104488,104494,104497,104499,104501,104528,104530,104544,104546,104587,104589,104613,104615,104618,104627,104636,104639,104648,104656,104665,104668,104678,104681,104733,104740,104746,104754,104802,104805,104824,104827,104835,104839,104848,104881,104883,105231,105233,105245,105247,105258,105260,105263,105284,105290,105293,105318,105328,105331,105339,105342,105345,105366,105377,105379,105399,105402,105423,105432,105451,105457,105482,105485,105499,105506,105530,105533,105541,105550,105566,105578,105586,105595,105597,105600,105624,105629,105632,105654,105656,105695,105697,105704,105706,105714,105717,105720,105732,105773,105780,105791,105798,105801,105850,105853,105856,105862,105864,105869,105895,105898],[10,104437,104433],{"id":104438},"_3python-控制接口读取状态与推进仿真",[14,104440,100762],{"id":100761},[19,104442,104443],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,104445,104446],{},"你将学习:",[183,104448,104449,104454,104459,104463,104468,104479],{},[186,104450,104451],{},[30,104452,104453],{},"MjModel.from_xml_string",[186,104455,104456],{},[30,104457,104458],{},"MjData(model)",[186,104460,104461],{},[30,104462,101330],{},[186,104464,104465],{},[30,104466,104467],{},"mj_resetData",[186,104469,104470,104471,451,104473,451,104476],{},"读取 ",[30,104472,104145],{},[30,104474,104475],{},"qvel",[30,104477,104478],{},"ctrl",[186,104480,104481,104482],{},"使用 ",[30,104483,104484],{},"model.opt.timestep",[19,104486,104487],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[220,104489,104492],{"className":104490,"code":104491,"language":5302,"meta":141},[5300],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[30,104493,104491],{"__ignoreMap":141},[19,104495,104496],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,104498,100885],{"id":100884},[19,104500,100888],{},[220,104502,104504],{"className":23937,"code":104503,"language":23939,"meta":141,"style":141},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[30,104505,104506],{"__ignoreMap":141},[228,104507,104508,104510,104512,104514,104516,104519,104521,104523,104525],{"class":230,"line":231},[228,104509,24692],{"class":2077},[228,104511,26431],{"class":343},[228,104513,23949],{"class":343},[228,104515,26516],{"class":287},[228,104517,104518],{"class":343}," python3",[228,104520,100913],{"class":343},[228,104522,102616],{"class":343},[228,104524,100929],{"class":343},[228,104526,104527],{"class":343}," glfw\n",[19,104529,102934],{},[220,104531,104532],{"className":23937,"code":101034,"language":23939,"meta":141,"style":141},[30,104533,104534],{"__ignoreMap":141},[228,104535,104536,104538,104540,104542],{"class":230,"line":231},[228,104537,23946],{"class":2077},[228,104539,23949],{"class":343},[228,104541,101045],{"class":343},[228,104543,101048],{"class":343},[19,104545,102951],{},[220,104547,104549],{"className":23937,"code":104548,"language":23939,"meta":141,"style":141},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[30,104550,104551,104568,104577],{"__ignoreMap":141},[228,104552,104553,104555,104557,104559,104562,104564,104566],{"class":230,"line":231},[228,104554,30445],{"class":2077},[228,104556,29291],{"class":343},[228,104558,25231],{"class":287},[228,104560,104561],{"class":343}," mujoco-python-api",[228,104563,101090],{"class":343},[228,104565,101093],{"class":287},[228,104567,101096],{"class":287},[228,104569,104570,104572,104574],{"class":230,"line":142},[228,104571,30445],{"class":2077},[228,104573,101103],{"class":343},[228,104575,104576],{"class":343}," mujoco-python-api\n",[228,104578,104579,104581,104583,104585],{"class":230,"line":1293},[228,104580,23946],{"class":2077},[228,104582,23949],{"class":343},[228,104584,101045],{"class":343},[228,104586,101048],{"class":343},[19,104588,101119],{},[183,104590,104591,104598,104607],{},[186,104592,104593,101133,104595,104597],{},[30,104594,100790],{},[30,104596,100795],{}," 是官方 Python bindings 的类名。",[186,104599,104600,104601,104604,104605,78],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[30,104602,104603],{},"mjModel"," 在 Python 中是 ",[30,104606,100824],{},[186,104608,104609,104610,78],{},"不要使用 ",[30,104611,104612],{},"sim = mujoco_py.MjSim(...)",[14,104614,101160],{"id":101159},[19,104616,104617],{},"仿真推进核心代码:",[220,104619,104621],{"className":30493,"code":104620,"language":30495,"meta":141,"style":141},"mujoco.mj_step(model, data)\n",[30,104622,104623],{"__ignoreMap":141},[228,104624,104625],{"class":230,"line":231},[228,104626,104620],{"class":238},[19,104628,104629,104630,451,104632,451,104634,78],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[30,104631,101185],{},[30,104633,101188],{},[30,104635,101182],{},[19,104637,104638],{},"重置仿真:",[220,104640,104642],{"className":30493,"code":104641,"language":30495,"meta":141,"style":141},"mujoco.mj_resetData(model, data)\n",[30,104643,104644],{"__ignoreMap":141},[228,104645,104646],{"class":230,"line":231},[228,104647,104641],{"class":238},[19,104649,104650,104651,82654,104653,104655],{},"如果手动修改了 ",[30,104652,101185],{},[30,104654,101188],{},"，通常应调用:",[220,104657,104659],{"className":30493,"code":104658,"language":30495,"meta":141,"style":141},"mujoco.mj_forward(model, data)\n",[30,104660,104661],{"__ignoreMap":141},[228,104662,104663],{"class":230,"line":231},[228,104664,104658],{"class":238},[19,104666,104667],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[200,104669,104671,451,104673,451,104675,104677],{"id":104670},"qposqvelctrl-是什么",[30,104672,104145],{},[30,104674,104475],{},[30,104676,104478],{}," 是什么",[19,104679,104680],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[376,104682,104683,104695],{},[379,104684,104685],{},[382,104686,104687,104690,104692],{},[385,104688,104689],{"align":23851},"字段",[385,104691,100815],{"align":23851},[385,104693,104694],{"align":23851},"谁来修改",[423,104696,104697,104709,104721],{},[382,104698,104699,104703,104706],{},[428,104700,104701],{"align":23851},[30,104702,101185],{},[428,104704,104705],{"align":23851},"广义位置，例如小车位置、关节角、自由物体位置姿态",[428,104707,104708],{"align":23851},"MuJoCo 更新，也可以手动设置初始状态",[382,104710,104711,104715,104718],{},[428,104712,104713],{"align":23851},[30,104714,101188],{},[428,104716,104717],{"align":23851},"广义速度，例如小车速度、关节角速度",[428,104719,104720],{"align":23851},"MuJoCo 更新，也可以手动清零",[382,104722,104723,104727,104730],{},[428,104724,104725],{"align":23851},[30,104726,101191],{},[428,104728,104729],{"align":23851},"actuator 的控制输入",[428,104731,104732],{"align":23851},"主要由你的控制代码写入",[19,104734,9140,104735,101133,104737,104739],{},[30,104736,104145],{},[30,104738,104475],{}," 不一定同维。自由刚体就是典型例子：",[220,104741,104744],{"className":104742,"code":104743,"language":5302,"meta":141},[5300],"freejoint: qpos 7 维，qvel 6 维\n",[30,104745,104743],{"__ignoreMap":141},[200,104747,104749,101133,104751,104753],{"id":104748},"mj_step-和-mj_forward-的区别",[30,104750,101330],{},[30,104752,104365],{}," 的区别",[376,104755,104756,104769],{},[379,104757,104758],{},[382,104759,104760,104763,104766],{},[385,104761,104762],{"align":23851},"函数",[385,104764,104765],{"align":23851},"是否推进时间",[385,104767,104768],{"align":23851},"什么时候用",[423,104770,104771,104784],{},[382,104772,104773,104778,104781],{},[428,104774,104775],{"align":23851},[30,104776,104777],{},"mj_step(model, data)",[428,104779,104780],{"align":23851},"是",[428,104782,104783],{"align":23851},"正常仿真循环，每调用一次前进一步",[382,104785,104786,104791,104794],{},[428,104787,104788],{"align":23851},[30,104789,104790],{},"mj_forward(model, data)",[428,104792,104793],{"align":23851},"否",[428,104795,104796,104797,451,104799,104801],{"align":23851},"手动改了 ",[30,104798,104145],{},[30,104800,104475],{}," 后，刷新派生量",[19,104803,104804],{},"例如你写：",[220,104806,104808],{"className":30493,"code":104807,"language":30495,"meta":141,"style":141},"data.qpos[2] = 2.0\n",[30,104809,104810],{"__ignoreMap":141},[228,104811,104812,104815,104817,104819,104821],{"class":230,"line":231},[228,104813,104814],{"class":238},"data.qpos[",[228,104816,316],{"class":287},[228,104818,4557],{"class":238},[228,104820,284],{"class":234},[228,104822,104823],{"class":287}," 2.0\n",[19,104825,104826],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[220,104828,104829],{"className":30493,"code":104658,"language":30495,"meta":141,"style":141},[30,104830,104831],{"__ignoreMap":141},[228,104832,104833],{"class":230,"line":231},[228,104834,104658],{"class":238},[200,104836,104838],{"id":104837},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,104840,104841,104844,104845,104847],{},[30,104842,104843],{},"mujoco.mj_resetData(model, data)"," 会把 ",[30,104846,33516],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[220,104849,104851],{"className":30493,"code":104850,"language":30495,"meta":141,"style":141},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[30,104852,104853,104857,104867,104877],{"__ignoreMap":141},[228,104854,104855],{"class":230,"line":231},[228,104856,104641],{"class":238},[228,104858,104859,104862,104864],{"class":230,"line":142},[228,104860,104861],{"class":238},"data.qpos[:] ",[228,104863,284],{"class":234},[228,104865,104866],{"class":238}," random_qpos\n",[228,104868,104869,104872,104874],{"class":230,"line":1293},[228,104870,104871],{"class":238},"data.qvel[:] ",[228,104873,284],{"class":234},[228,104875,104876],{"class":287}," 0.0\n",[228,104878,104879],{"class":230,"line":1308},[228,104880,104658],{"class":238},[14,104882,101368],{"id":101367},[220,104884,104886],{"className":30493,"code":104885,"language":30495,"meta":141,"style":141},"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",[30,104887,104888,104894,104904,104908,104912,104920,104925,104929,104933,104937,104942,104946,104951,104956,104961,104965,104969,104973,104977,104981,104985,105004,105011,105023,105034,105050,105066,105070,105074,105086,105098,105106,105110,105121,105125,105141,105145,105149,105158,105162,105167,105176,105180,105193,105198,105207,105211,105215,105227],{"__ignoreMap":141},[228,104889,104890,104892],{"class":230,"line":231},[228,104891,30507],{"class":234},[228,104893,101416],{"class":238},[228,104895,104896,104898,104900,104902],{"class":230,"line":142},[228,104897,30507],{"class":234},[228,104899,31495],{"class":238},[228,104901,31498],{"class":234},[228,104903,31501],{"class":238},[228,104905,104906],{"class":230,"line":1293},[228,104907,2514],{"emptyLinePlaceholder":157},[228,104909,104910],{"class":230,"line":1308},[228,104911,2514],{"emptyLinePlaceholder":157},[228,104913,104914,104916,104918],{"class":230,"line":1314},[228,104915,101429],{"class":287},[228,104917,13679],{"class":234},[228,104919,101434],{"class":343},[228,104921,104922],{"class":230,"line":1328},[228,104923,104924],{"class":343},"\u003Cmujoco model=\"state_api\">\n",[228,104926,104927],{"class":230,"line":1334},[228,104928,101444],{"class":343},[228,104930,104931],{"class":230,"line":1425},[228,104932,2514],{"emptyLinePlaceholder":157},[228,104934,104935],{"class":230,"line":1431},[228,104936,101453],{"class":343},[228,104938,104939],{"class":230,"line":1443},[228,104940,104941],{"class":343},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[228,104943,104944],{"class":230,"line":1726},[228,104945,2514],{"emptyLinePlaceholder":157},[228,104947,104948],{"class":230,"line":1731},[228,104949,104950],{"class":343},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[228,104952,104953],{"class":230,"line":1737},[228,104954,104955],{"class":343},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[228,104957,104958],{"class":230,"line":1742},[228,104959,104960],{"class":343},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[228,104962,104963],{"class":230,"line":1756},[228,104964,101482],{"class":343},[228,104966,104967],{"class":230,"line":1761},[228,104968,101487],{"class":343},[228,104970,104971],{"class":230,"line":1767},[228,104972,101492],{"class":343},[228,104974,104975],{"class":230,"line":1788},[228,104976,95813],{"class":343},[228,104978,104979],{"class":230,"line":1793},[228,104980,2514],{"emptyLinePlaceholder":157},[228,104982,104983],{"class":230,"line":1807},[228,104984,2514],{"emptyLinePlaceholder":157},[228,104986,104987,104989,104992,104995,104997,105000,105002],{"class":230,"line":1812},[228,104988,32062],{"class":234},[228,104990,104991],{"class":2077}," print_state",[228,104993,104994],{"class":238},"(prefix: ",[228,104996,1413],{"class":287},[228,104998,104999],{"class":238},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[228,105001,95801],{"class":287},[228,105003,3853],{"class":238},[228,105005,105006,105008],{"class":230,"line":1841},[228,105007,31414],{"class":287},[228,105009,105010],{"class":238},"(prefix)\n",[228,105012,105013,105015,105017,105020],{"class":230,"line":1846},[228,105014,31414],{"class":287},[228,105016,239],{"class":238},[228,105018,105019],{"class":343},"\"  timestep:\"",[228,105021,105022],{"class":238},", model.opt.timestep)\n",[228,105024,105025,105027,105029,105032],{"class":230,"line":1863},[228,105026,31414],{"class":287},[228,105028,239],{"class":238},[228,105030,105031],{"class":343},"\"  time:\"",[228,105033,101593],{"class":238},[228,105035,105036,105038,105040,105043,105046,105048],{"class":230,"line":1868},[228,105037,31414],{"class":287},[228,105039,239],{"class":238},[228,105041,105042],{"class":343},"\"  qpos:\"",[228,105044,105045],{"class":238},", np.round(data.qpos.copy(), ",[228,105047,531],{"class":287},[228,105049,30612],{"class":238},[228,105051,105052,105054,105056,105059,105062,105064],{"class":230,"line":1873},[228,105053,31414],{"class":287},[228,105055,239],{"class":238},[228,105057,105058],{"class":343},"\"  qvel:\"",[228,105060,105061],{"class":238},", np.round(data.qvel.copy(), ",[228,105063,531],{"class":287},[228,105065,30612],{"class":238},[228,105067,105068],{"class":230,"line":1878},[228,105069,2514],{"emptyLinePlaceholder":157},[228,105071,105072],{"class":230,"line":1892},[228,105073,2514],{"emptyLinePlaceholder":157},[228,105075,105076,105078,105080,105082,105084],{"class":230,"line":1897},[228,105077,32062],{"class":234},[228,105079,2087],{"class":2077},[228,105081,101513],{"class":238},[228,105083,95801],{"class":287},[228,105085,3853],{"class":238},[228,105087,105088,105090,105092,105094,105096],{"class":230,"line":2691},[228,105089,101522],{"class":238},[228,105091,284],{"class":234},[228,105093,101527],{"class":238},[228,105095,101429],{"class":287},[228,105097,245],{"class":238},[228,105099,105100,105102,105104],{"class":230,"line":2705},[228,105101,101536],{"class":238},[228,105103,284],{"class":234},[228,105105,101541],{"class":238},[228,105107,105108],{"class":230,"line":2713},[228,105109,2514],{"emptyLinePlaceholder":157},[228,105111,105112,105115,105118],{"class":230,"line":2718},[228,105113,105114],{"class":238},"    print_state(",[228,105116,105117],{"class":343},"\"initial\"",[228,105119,105120],{"class":238},", model, data)\n",[228,105122,105123],{"class":230,"line":2724},[228,105124,2514],{"emptyLinePlaceholder":157},[228,105126,105127,105129,105131,105133,105135,105137,105139],{"class":230,"line":2730},[228,105128,3315],{"class":234},[228,105130,101616],{"class":238},[228,105132,26159],{"class":234},[228,105134,32558],{"class":287},[228,105136,239],{"class":238},[228,105138,894],{"class":287},[228,105140,30901],{"class":238},[228,105142,105143],{"class":230,"line":2735},[228,105144,101631],{"class":238},[228,105146,105147],{"class":230,"line":8063},[228,105148,2514],{"emptyLinePlaceholder":157},[228,105150,105151,105153,105156],{"class":230,"line":8087},[228,105152,105114],{"class":238},[228,105154,105155],{"class":343},"\"after 50 steps\"",[228,105157,105120],{"class":238},[228,105159,105160],{"class":230,"line":8092},[228,105161,2514],{"emptyLinePlaceholder":157},[228,105163,105164],{"class":230,"line":8098},[228,105165,105166],{"class":238},"    mujoco.mj_resetData(model, data)\n",[228,105168,105169,105171,105174],{"class":230,"line":8125},[228,105170,105114],{"class":238},[228,105172,105173],{"class":343},"\"after reset\"",[228,105175,105120],{"class":238},[228,105177,105178],{"class":230,"line":8130},[228,105179,2514],{"emptyLinePlaceholder":157},[228,105181,105182,105185,105187,105189,105191],{"class":230,"line":8136},[228,105183,105184],{"class":238},"    data.qpos[",[228,105186,316],{"class":287},[228,105188,4557],{"class":238},[228,105190,284],{"class":234},[228,105192,104823],{"class":287},[228,105194,105195],{"class":230,"line":8148},[228,105196,105197],{"class":238},"    mujoco.mj_forward(model, data)\n",[228,105199,105200,105202,105205],{"class":230,"line":8160},[228,105201,105114],{"class":238},[228,105203,105204],{"class":343},"\"after manual qpos edit\"",[228,105206,105120],{"class":238},[228,105208,105209],{"class":230,"line":8172},[228,105210,2514],{"emptyLinePlaceholder":157},[228,105212,105213],{"class":230,"line":9831},[228,105214,2514],{"emptyLinePlaceholder":157},[228,105216,105217,105219,105221,105223,105225],{"class":230,"line":9856},[228,105218,1645],{"class":234},[228,105220,31335],{"class":287},[228,105222,101674],{"class":234},[228,105224,101677],{"class":343},[228,105226,3853],{"class":238},[228,105228,105229],{"class":230,"line":9879},[228,105230,101684],{"class":238},[19,105232,103685],{},[220,105234,105236],{"className":23937,"code":105235,"language":23939,"meta":141,"style":141},"touch ch3_python_state.py\n",[30,105237,105238],{"__ignoreMap":141},[228,105239,105240,105242],{"class":230,"line":231},[228,105241,101398],{"class":2077},[228,105243,105244],{"class":343}," ch3_python_state.py\n",[19,105246,102416],{},[220,105248,105250],{"className":23937,"code":105249,"language":23939,"meta":141,"style":141},"python ch3_python_state.py\n",[30,105251,105252],{"__ignoreMap":141},[228,105253,105254,105256],{"class":230,"line":231},[228,105255,30495],{"class":2077},[228,105257,105244],{"class":343},[200,105259,101687],{"id":101687},[19,105261,105262],{},"打印状态的函数：",[220,105264,105266],{"className":30493,"code":105265,"language":30495,"meta":141,"style":141},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[30,105267,105268],{"__ignoreMap":141},[228,105269,105270,105272,105274,105276,105278,105280,105282],{"class":230,"line":231},[228,105271,32062],{"class":234},[228,105273,104991],{"class":2077},[228,105275,104994],{"class":238},[228,105277,1413],{"class":287},[228,105279,104999],{"class":238},[228,105281,95801],{"class":287},[228,105283,3853],{"class":238},[19,105285,105286,105287,105289],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[30,105288,33516],{}," 里发生了什么。",[19,105291,105292],{},"推进 50 步：",[220,105294,105296],{"className":30493,"code":105295,"language":30495,"meta":141,"style":141},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[30,105297,105298,105314],{"__ignoreMap":141},[228,105299,105300,105302,105304,105306,105308,105310,105312],{"class":230,"line":231},[228,105301,3139],{"class":234},[228,105303,101616],{"class":238},[228,105305,26159],{"class":234},[228,105307,32558],{"class":287},[228,105309,239],{"class":238},[228,105311,894],{"class":287},[228,105313,30901],{"class":238},[228,105315,105316],{"class":230,"line":142},[228,105317,101814],{"class":238},[19,105319,105320,105321,105324,105325,105327],{},"由于 ",[30,105322,105323],{},"timestep=0.01","，所以 50 步后时间约为 ",[30,105326,35444],{}," 秒。",[19,105329,105330],{},"重置：",[220,105332,105333],{"className":30493,"code":104641,"language":30495,"meta":141,"style":141},[30,105334,105335],{"__ignoreMap":141},[228,105336,105337],{"class":230,"line":231},[228,105338,104641],{"class":238},[19,105340,105341],{},"这会把时间、位置、速度恢复到初始状态。",[19,105343,105344],{},"手动改高度：",[220,105346,105348],{"className":30493,"code":105347,"language":30495,"meta":141,"style":141},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[30,105349,105350,105362],{"__ignoreMap":141},[228,105351,105352,105354,105356,105358,105360],{"class":230,"line":231},[228,105353,104814],{"class":238},[228,105355,316],{"class":287},[228,105357,4557],{"class":238},[228,105359,284],{"class":234},[228,105361,104823],{"class":287},[228,105363,105364],{"class":230,"line":142},[228,105365,104658],{"class":238},[19,105367,105368,105369,105372,105373,105376],{},"这个例子里 ",[30,105370,105371],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[30,105374,105375],{},"2.0"," 表示把小球放到更高的位置。",[200,105378,101823],{"id":101823},[220,105380,105381],{"className":30493,"code":105265,"language":30495,"meta":141,"style":141},[30,105382,105383],{"__ignoreMap":141},[228,105384,105385,105387,105389,105391,105393,105395,105397],{"class":230,"line":231},[228,105386,32062],{"class":234},[228,105388,104991],{"class":2077},[228,105390,104994],{"class":238},[228,105392,1413],{"class":287},[228,105394,104999],{"class":238},[228,105396,95801],{"class":287},[228,105398,3853],{"class":238},[19,105400,105401],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[183,105403,105404,105413,105418],{},[186,105405,105406,105409,105410,105412],{},[30,105407,105408],{},"prefix","：一段文字，比如 ",[30,105411,105117],{},"，用来说明现在打印的是哪个阶段。",[186,105414,105415,105417],{},[30,105416,102200],{},"：MuJoCo 模型。",[186,105419,105420,105422],{},[30,105421,33516],{},"：MuJoCo 当前状态。",[19,105424,105425,451,105428,105431],{},[30,105426,105427],{},"prefix: str",[30,105429,105430],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[220,105433,105435],{"className":30493,"code":105434,"language":30495,"meta":141,"style":141},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[30,105436,105437],{"__ignoreMap":141},[228,105438,105439,105441,105443,105445,105447,105449],{"class":230,"line":231},[228,105440,30530],{"class":287},[228,105442,239],{"class":238},[228,105444,105042],{"class":343},[228,105446,105045],{"class":238},[228,105448,531],{"class":287},[228,105450,30612],{"class":238},[19,105452,105453,105456],{},[30,105454,105455],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[220,105458,105460],{"className":30493,"code":105459,"language":30495,"meta":141,"style":141},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[30,105461,105462,105474],{"__ignoreMap":141},[228,105463,105464,105466,105468,105470,105472],{"class":230,"line":231},[228,105465,101749],{"class":238},[228,105467,284],{"class":234},[228,105469,101527],{"class":238},[228,105471,101429],{"class":287},[228,105473,245],{"class":238},[228,105475,105476,105478,105480],{"class":230,"line":142},[228,105477,101773],{"class":238},[228,105479,284],{"class":234},[228,105481,101541],{"class":238},[19,105483,105484],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[220,105486,105488],{"className":30493,"code":105487,"language":30495,"meta":141,"style":141},"print_state(\"initial\", model, data)\n",[30,105489,105490],{"__ignoreMap":141},[228,105491,105492,105495,105497],{"class":230,"line":231},[228,105493,105494],{"class":238},"print_state(",[228,105496,105117],{"class":343},[228,105498,105120],{"class":238},[19,105500,105501,105502,105505],{},"调用刚才定义的 ",[30,105503,105504],{},"print_state"," 函数，打印初始状态。",[220,105507,105508],{"className":30493,"code":105295,"language":30495,"meta":141,"style":141},[30,105509,105510,105526],{"__ignoreMap":141},[228,105511,105512,105514,105516,105518,105520,105522,105524],{"class":230,"line":231},[228,105513,3139],{"class":234},[228,105515,101616],{"class":238},[228,105517,26159],{"class":234},[228,105519,32558],{"class":287},[228,105521,239],{"class":238},[228,105523,894],{"class":287},[228,105525,30901],{"class":238},[228,105527,105528],{"class":230,"line":142},[228,105529,101814],{"class":238},[19,105531,105532],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[220,105534,105535],{"className":30493,"code":104641,"language":30495,"meta":141,"style":141},[30,105536,105537],{"__ignoreMap":141},[228,105538,105539],{"class":230,"line":231},[228,105540,104641],{"class":238},[19,105542,105543,105544,105546,105547,105549],{},"重置 ",[30,105545,33516],{},"。注意它不会重新创建 ",[30,105548,102200],{},"，因为模型结构没有变，只是状态回到初始值。",[220,105551,105552],{"className":30493,"code":104807,"language":30495,"meta":141,"style":141},[30,105553,105554],{"__ignoreMap":141},[228,105555,105556,105558,105560,105562,105564],{"class":230,"line":231},[228,105557,104814],{"class":238},[228,105559,316],{"class":287},[228,105561,4557],{"class":238},[228,105563,284],{"class":234},[228,105565,104823],{"class":287},[19,105567,105568,105569,451,105572,451,105575,105577],{},"这行是“手动改状态”。在 freejoint 中，",[30,105570,105571],{},"qpos[0]",[30,105573,105574],{},"qpos[1]",[30,105576,105371],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[220,105579,105580],{"className":30493,"code":104658,"language":30495,"meta":141,"style":141},[30,105581,105582],{"__ignoreMap":141},[228,105583,105584],{"class":230,"line":231},[228,105585,104658],{"class":238},[19,105587,105588,105589,105591,105592,105594],{},"手动改完 ",[30,105590,104145],{}," 后，调用 ",[30,105593,104365],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,105596,102431],{"id":102430},[19,105598,105599],{},"你会看到:",[183,105601,105602,105607,105612,105615],{},[186,105603,105604,105605],{},"初始时间为 ",[30,105606,430],{},[186,105608,105609,105610],{},"50 步后时间约为 ",[30,105611,35444],{},[186,105613,105614],{},"reset 后状态恢复",[186,105616,105617,105618,105621,105622],{},"手动修改 ",[30,105619,105620],{},"data.qpos[2]"," 后，小球高度变为 ",[30,105623,105375],{},[19,105625,105626,105628],{},[30,105627,105371],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,105630,105631],{},"输出里可以重点看三件事：",[183,105633,105634,105642,105647],{},[186,105635,105636,105638,105639,105641],{},[30,105637,2501],{}," 是否随着 ",[30,105640,101330],{}," 增加。",[186,105643,105644,105646],{},[30,105645,104145],{}," 的 z 坐标是否因为下落而变化。",[186,105648,105649,105651,105652,78],{},[30,105650,104467],{}," 后时间是否回到 ",[30,105653,430],{},[14,105655,102463],{"id":102462},[183,105657,105658,105664,105670,105676,105679,105688],{},[186,105659,105660,105661,78],{},"修改 timestep 为 ",[30,105662,105663],{},"0.005",[186,105665,105666,105667,78],{},"重新运行，检查 50 步后时间是否约为 ",[30,105668,105669],{},"0.25",[186,105671,105672,105673,78],{},"修改重力为 ",[30,105674,105675],{},"0 0 -1.0",[186,105677,105678],{},"观察小球下降速度是否变慢。",[186,105680,102526,105681,102529,105684,105687],{},[30,105682,105683],{},"data.qpos[2] = 2.0",[30,105685,105686],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[186,105689,105690,105691,105694],{},"注释掉 ",[30,105692,105693],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,105696,102568],{"id":102567},[200,105698,105700,105701,105703],{"id":105699},"修改-dataqpos-后位置没有更新","修改 ",[30,105702,101185],{}," 后位置没有更新",[19,105705,102577],{},[220,105707,105708],{"className":30493,"code":104658,"language":30495,"meta":141,"style":141},[30,105709,105710],{"__ignoreMap":141},[228,105711,105712],{"class":230,"line":231},[228,105713,104658],{"class":238},[200,105715,105716],{"id":105716},"数组维度看不懂",[19,105718,105719],{},"打印模型维度:",[220,105721,105723],{"className":30493,"code":105722,"language":30495,"meta":141,"style":141},"print(model.nq, model.nv, model.nu)\n",[30,105724,105725],{"__ignoreMap":141},[228,105726,105727,105729],{"class":230,"line":231},[228,105728,30530],{"class":287},[228,105730,105731],{"class":238},"(model.nq, model.nv, model.nu)\n",[376,105733,105734,105742],{},[379,105735,105736],{},[382,105737,105738,105740],{},[385,105739,104689],{"align":23851},[385,105741,100815],{"align":23851},[423,105743,105744,105754,105764],{},[382,105745,105746,105751],{},[428,105747,105748],{"align":23851},[30,105749,105750],{},"nq",[428,105752,105753],{"align":23851},"位置变量数量",[382,105755,105756,105761],{},[428,105757,105758],{"align":23851},[30,105759,105760],{},"nv",[428,105762,105763],{"align":23851},"速度变量数量",[382,105765,105766,105770],{},[428,105767,105768],{"align":23851},[30,105769,102277],{},[428,105771,105772],{"align":23851},"控制输入数量",[200,105774,105776,105777,105779],{"id":105775},"误以为-qpos-一定等于关节数","误以为 ",[30,105778,104145],{}," 一定等于关节数",[19,105781,105782,105783,82645,105785,105787,105788,105790],{},"不是。例如 ",[30,105784,101735],{},[30,105786,104145],{}," 是 7 维，但 ",[30,105789,104475],{}," 是 6 维。",[200,105792,105794,105795,105797],{"id":105793},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[30,105796,104145],{}," 的第几位",[19,105799,105800],{},"初学时可以先打印：",[220,105802,105804],{"className":30493,"code":105803,"language":30495,"meta":141,"style":141},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[30,105805,105806,105816,105826,105838],{"__ignoreMap":141},[228,105807,105808,105810,105812,105814],{"class":230,"line":231},[228,105809,30530],{"class":287},[228,105811,239],{"class":238},[228,105813,101554],{"class":343},[228,105815,101557],{"class":238},[228,105817,105818,105820,105822,105824],{"class":230,"line":142},[228,105819,30530],{"class":287},[228,105821,239],{"class":238},[228,105823,101566],{"class":343},[228,105825,101569],{"class":238},[228,105827,105828,105830,105832,105835],{"class":230,"line":1293},[228,105829,30530],{"class":287},[228,105831,239],{"class":238},[228,105833,105834],{"class":343},"\"qpos:\"",[228,105836,105837],{"class":238},", data.qpos)\n",[228,105839,105840,105842,105844,105847],{"class":230,"line":1308},[228,105841,30530],{"class":287},[228,105843,239],{"class":238},[228,105845,105846],{"class":343},"\"qvel:\"",[228,105848,105849],{"class":238},", data.qvel)\n",[19,105851,105852],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[200,105854,105855],{"id":105855},"仿真结果每次都一样",[19,105857,105858,105859,105861],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[30,105860,104145],{},"、目标点或控制输入。",[14,105863,102722],{"id":102721},[19,105865,105866,105867,24734],{},"Python 控制 MuJoCo 的核心就是读写 ",[30,105868,33516],{},[183,105870,105871,105879,105884,105889],{},[186,105872,105873,105874,101133,105876,105878],{},"用 ",[30,105875,101185],{},[30,105877,101188],{}," 读取状态。",[186,105880,105873,105881,105883],{},[30,105882,101191],{}," 写入控制。",[186,105885,105873,105886,105888],{},[30,105887,101330],{}," 推进时间。",[186,105890,105891,105892,105894],{},"手动改状态后用 ",[30,105893,104365],{}," 刷新派生量。",[19,105896,105897],{},"理解这一章后，就可以进入关节和 actuator 控制。",[5241,105899,105900],{},"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":141,"searchDepth":142,"depth":142,"links":105902},[105903,105904,105905,105912,105916,105917,105918,105928],{"id":100761,"depth":142,"text":100762},{"id":100884,"depth":142,"text":100885},{"id":101159,"depth":142,"text":101160,"children":105906},[105907,105909,105911],{"id":104670,"depth":1293,"text":105908},"qpos、qvel、ctrl 是什么",{"id":104748,"depth":1293,"text":105910},"mj_step 和 mj_forward 的区别",{"id":104837,"depth":1293,"text":104838},{"id":101367,"depth":142,"text":101368,"children":105913},[105914,105915],{"id":101687,"depth":1293,"text":101687},{"id":101823,"depth":1293,"text":101823},{"id":102430,"depth":142,"text":102431},{"id":102462,"depth":142,"text":102463},{"id":102567,"depth":142,"text":102568,"children":105919},[105920,105922,105923,105925,105927],{"id":105699,"depth":1293,"text":105921},"修改 data.qpos 后位置没有更新",{"id":105716,"depth":1293,"text":105716},{"id":105775,"depth":1293,"text":105924},"误以为 qpos 一定等于关节数",{"id":105793,"depth":1293,"text":105926},"不知道某个元素在 qpos 的第几位",{"id":105855,"depth":1293,"text":105855},{"id":102721,"depth":142,"text":102722},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104433,"description":141},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":105935,"title":105936,"body":105937,"description":141,"extension":155,"meta":107627,"navigation":157,"path":107628,"seo":107629,"stem":107630,"__hash__":107631},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":105938,"toc":107603},[105939,105942,105944,105947,105949,105974,105977,105996,105999,106001,106003,106027,106029,106043,106045,106086,106088,106112,106114,106117,106151,106153,106166,106169,106237,106246,106250,106253,106287,106293,106296,106300,106339,106342,106362,106366,106409,106411,106440,106443,106449,106452,106454,106848,106850,106862,106864,106875,106877,106880,106909,106917,106920,106955,106958,106960,106968,106971,106973,106984,106994,107014,107017,107053,107065,107113,107132,107174,107187,107215,107220,107241,107251,107269,107272,107306,107309,107329,107332,107351,107357,107359,107362,107368,107374,107384,107387,107393,107402,107404,107450,107452,107458,107464,107467,107470,107490,107493,107499,107505,107507,107530,107533,107536,107545,107548,107586,107588,107591,107597,107600],[10,105940,105936],{"id":105941},"_4关节actuator-与力控制",[14,105943,100762],{"id":100761},[19,105945,105946],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,105948,104446],{},[183,105950,105951,105957,105962,105966,105971],{},[186,105952,105953,105956],{},[30,105954,105955],{},"hinge"," 关节",[186,105958,105959],{},[30,105960,105961],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[186,105963,105964],{},[30,105965,101191],{},[186,105967,105968],{},[30,105969,105970],{},"ctrlrange",[186,105972,105973],{},"读取关节角和角速度",[19,105975,105976],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[220,105978,105980],{"className":30493,"code":105979,"language":30495,"meta":141,"style":141},"data.ctrl[0] = ...\n",[30,105981,105982],{"__ignoreMap":141},[228,105983,105984,105987,105989,105991,105993],{"class":230,"line":231},[228,105985,105986],{"class":238},"data.ctrl[",[228,105988,430],{"class":287},[228,105990,4557],{"class":238},[228,105992,284],{"class":234},[228,105994,105995],{"class":287}," ...\n",[19,105997,105998],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,106000,100885],{"id":100884},[19,106002,100888],{},[220,106004,106005],{"className":23937,"code":104503,"language":23939,"meta":141,"style":141},[30,106006,106007],{"__ignoreMap":141},[228,106008,106009,106011,106013,106015,106017,106019,106021,106023,106025],{"class":230,"line":231},[228,106010,24692],{"class":2077},[228,106012,26431],{"class":343},[228,106014,23949],{"class":343},[228,106016,26516],{"class":287},[228,106018,104518],{"class":343},[228,106020,100913],{"class":343},[228,106022,102616],{"class":343},[228,106024,100929],{"class":343},[228,106026,104527],{"class":343},[19,106028,102934],{},[220,106030,106031],{"className":23937,"code":101034,"language":23939,"meta":141,"style":141},[30,106032,106033],{"__ignoreMap":141},[228,106034,106035,106037,106039,106041],{"class":230,"line":231},[228,106036,23946],{"class":2077},[228,106038,23949],{"class":343},[228,106040,101045],{"class":343},[228,106042,101048],{"class":343},[19,106044,102951],{},[220,106046,106048],{"className":23937,"code":106047,"language":23939,"meta":141,"style":141},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[30,106049,106050,106067,106076],{"__ignoreMap":141},[228,106051,106052,106054,106056,106058,106061,106063,106065],{"class":230,"line":231},[228,106053,30445],{"class":2077},[228,106055,29291],{"class":343},[228,106057,25231],{"class":287},[228,106059,106060],{"class":343}," mujoco-control",[228,106062,101090],{"class":343},[228,106064,101093],{"class":287},[228,106066,101096],{"class":287},[228,106068,106069,106071,106073],{"class":230,"line":142},[228,106070,30445],{"class":2077},[228,106072,101103],{"class":343},[228,106074,106075],{"class":343}," mujoco-control\n",[228,106077,106078,106080,106082,106084],{"class":230,"line":1293},[228,106079,23946],{"class":2077},[228,106081,23949],{"class":343},[228,106083,101045],{"class":343},[228,106085,101048],{"class":343},[19,106087,101119],{},[183,106089,106090,106096,106103,106109],{},[186,106091,106092,106095],{},[30,106093,106094],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[186,106097,106098,106100,106101,78],{},[30,106099,101191],{}," 长度等于 ",[30,106102,102273],{},[186,106104,82337,106105,106108],{},[30,106106,106107],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[186,106110,106111],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,106113,101160],{"id":101159},[19,106115,106116],{},"关节决定 body 如何运动:",[220,106118,106120],{"className":53182,"code":106119,"language":53184,"meta":141,"style":141},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[30,106121,106122],{"__ignoreMap":141},[228,106123,106124,106126,106128,106130,106132,106135,106137,106139,106141,106144,106146,106149],{"class":230,"line":231},[228,106125,1148],{"class":238},[228,106127,103071],{"class":51415},[228,106129,15035],{"class":2077},[228,106131,284],{"class":238},[228,106133,106134],{"class":343},"\"hinge\"",[228,106136,53939],{"class":2077},[228,106138,284],{"class":238},[228,106140,106134],{"class":343},[228,106142,106143],{"class":2077}," axis",[228,106145,284],{"class":238},[228,106147,106148],{"class":343},"\"0 1 0\"",[228,106150,101259],{"class":238},[19,106152,103167],{},[183,106154,106155,106160,106163],{},[186,106156,106157,106158],{},"名字是 ",[30,106159,105955],{},[186,106161,106162],{},"类型是旋转关节",[186,106164,106165],{},"绕 y 轴旋转",[19,106167,106168],{},"actuator 决定如何施加控制:",[220,106170,106172],{"className":53182,"code":106171,"language":53184,"meta":141,"style":141},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[30,106173,106174,106183,106229],{"__ignoreMap":141},[228,106175,106176,106178,106181],{"class":230,"line":231},[228,106177,1148],{"class":238},[228,106179,106180],{"class":51415},"actuator",[228,106182,51422],{"class":238},[228,106184,106185,106187,106190,106192,106194,106197,106200,106202,106204,106207,106209,106211,106214,106216,106219,106222,106224,106227],{"class":230,"line":142},[228,106186,52259],{"class":238},[228,106188,106189],{"class":51415},"motor",[228,106191,15035],{"class":2077},[228,106193,284],{"class":238},[228,106195,106196],{"class":343},"\"hinge_motor\"",[228,106198,106199],{"class":2077}," joint",[228,106201,284],{"class":238},[228,106203,106134],{"class":343},[228,106205,106206],{"class":2077}," gear",[228,106208,284],{"class":238},[228,106210,3792],{"class":343},[228,106212,106213],{"class":2077}," ctrlrange",[228,106215,284],{"class":238},[228,106217,106218],{"class":343},"\"-2 2\"",[228,106220,106221],{"class":2077}," ctrllimited",[228,106223,284],{"class":238},[228,106225,106226],{"class":343},"\"true\"",[228,106228,101259],{"class":238},[228,106230,106231,106233,106235],{"class":230,"line":1293},[228,106232,51900],{"class":238},[228,106234,106180],{"class":51415},[228,106236,51422],{"class":238},[19,106238,106239,106242,106243,78],{},[30,106240,106241],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[30,106244,106245],{},"[-2, 2]",[200,106247,106249],{"id":106248},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,106251,106252],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[376,106254,106255,106265],{},[379,106256,106257],{},[382,106258,106259,106261,106263],{},[385,106260,25869],{"align":23851},[385,106262,102811],{"align":23851},[385,106264,100849],{"align":23851},[423,106266,106267,106277],{},[382,106268,106269,106271,106274],{},[428,106270,103071],{"align":23851},[428,106272,106273],{"align":23851},"定义能怎么动",[428,106275,106276],{"align":23851},"门轴允许门旋转",[382,106278,106279,106281,106284],{},[428,106280,106180],{"align":23851},[428,106282,106283],{"align":23851},"定义怎么施力或控制",[428,106285,106286],{"align":23851},"人推门、马达带动门",[19,106288,106289,106290,106292],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[30,106291,101191],{}," 主动控制它。",[19,106294,106295],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[200,106297,106299],{"id":106298},"hinge-joint","hinge joint",[220,106301,106303],{"className":53182,"code":106302,"language":53184,"meta":141,"style":141},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[30,106304,106305],{"__ignoreMap":141},[228,106306,106307,106309,106311,106313,106315,106317,106319,106321,106323,106325,106327,106329,106332,106334,106337],{"class":230,"line":231},[228,106308,1148],{"class":238},[228,106310,103071],{"class":51415},[228,106312,15035],{"class":2077},[228,106314,284],{"class":238},[228,106316,106134],{"class":343},[228,106318,53939],{"class":2077},[228,106320,284],{"class":238},[228,106322,106134],{"class":343},[228,106324,106143],{"class":2077},[228,106326,284],{"class":238},[228,106328,106148],{"class":343},[228,106330,106331],{"class":2077}," damping",[228,106333,284],{"class":238},[228,106335,106336],{"class":343},"\"0.1\"",[228,106338,101259],{"class":238},[19,106340,106341],{},"含义：",[183,106343,106344,106350,106356],{},[186,106345,106346,106349],{},[30,106347,106348],{},"type=\"hinge\"","：只能绕一个轴旋转。",[186,106351,106352,106355],{},[30,106353,106354],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[186,106357,106358,106361],{},[30,106359,106360],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[200,106363,106365],{"id":106364},"motor-actuator","motor actuator",[220,106367,106369],{"className":53182,"code":106368,"language":53184,"meta":141,"style":141},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[30,106370,106371],{"__ignoreMap":141},[228,106372,106373,106375,106377,106379,106381,106383,106385,106387,106389,106391,106393,106395,106397,106399,106401,106403,106405,106407],{"class":230,"line":231},[228,106374,1148],{"class":238},[228,106376,106189],{"class":51415},[228,106378,15035],{"class":2077},[228,106380,284],{"class":238},[228,106382,106196],{"class":343},[228,106384,106199],{"class":2077},[228,106386,284],{"class":238},[228,106388,106134],{"class":343},[228,106390,106206],{"class":2077},[228,106392,284],{"class":238},[228,106394,3792],{"class":343},[228,106396,106213],{"class":2077},[228,106398,284],{"class":238},[228,106400,106218],{"class":343},[228,106402,106221],{"class":2077},[228,106404,284],{"class":238},[228,106406,106226],{"class":343},[228,106408,101259],{"class":238},[19,106410,106341],{},[183,106412,106413,106422,106428,106434],{},[186,106414,106415,106418,106419,106421],{},[30,106416,106417],{},"joint=\"hinge\"","：这个电机作用在名为 ",[30,106420,105955],{}," 的关节上。",[186,106423,106424,106427],{},[30,106425,106426],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[186,106429,106430,106433],{},[30,106431,106432],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[186,106435,106436,106439],{},[30,106437,106438],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,106441,106442],{},"简单理解：",[220,106444,106447],{"className":106445,"code":106446,"language":5302,"meta":141},[5300],"实际施加效果 ≈ data.ctrl[0] * gear\n",[30,106448,106446],{"__ignoreMap":141},[19,106450,106451],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,106453,101368],{"id":101367},[220,106455,106457],{"className":30493,"code":106456,"language":30495,"meta":141,"style":141},"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",[30,106458,106459,106466,106470,106476,106486,106490,106494,106502,106507,106512,106516,106520,106525,106530,106534,106539,106544,106549,106554,106558,106562,106566,106571,106576,106581,106585,106589,106593,106597,106609,106621,106629,106633,106643,106653,106663,106667,106680,106693,106697,106714,106728,106763,106767,106771,106782,106797,106812,106824,106828,106832,106844],{"__ignoreMap":141},[228,106460,106461,106463],{"class":230,"line":231},[228,106462,30507],{"class":234},[228,106464,106465],{"class":238}," math\n",[228,106467,106468],{"class":230,"line":142},[228,106469,2514],{"emptyLinePlaceholder":157},[228,106471,106472,106474],{"class":230,"line":1293},[228,106473,30507],{"class":234},[228,106475,101416],{"class":238},[228,106477,106478,106480,106482,106484],{"class":230,"line":1308},[228,106479,30507],{"class":234},[228,106481,31495],{"class":238},[228,106483,31498],{"class":234},[228,106485,31501],{"class":238},[228,106487,106488],{"class":230,"line":1314},[228,106489,2514],{"emptyLinePlaceholder":157},[228,106491,106492],{"class":230,"line":1328},[228,106493,2514],{"emptyLinePlaceholder":157},[228,106495,106496,106498,106500],{"class":230,"line":1334},[228,106497,101429],{"class":287},[228,106499,13679],{"class":234},[228,106501,101434],{"class":343},[228,106503,106504],{"class":230,"line":1425},[228,106505,106506],{"class":343},"\u003Cmujoco model=\"one_link_motor\">\n",[228,106508,106509],{"class":230,"line":1431},[228,106510,106511],{"class":343},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[228,106513,106514],{"class":230,"line":1443},[228,106515,2514],{"emptyLinePlaceholder":157},[228,106517,106518],{"class":230,"line":1726},[228,106519,101453],{"class":343},[228,106521,106522],{"class":230,"line":1731},[228,106523,106524],{"class":343},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[228,106526,106527],{"class":230,"line":1737},[228,106528,106529],{"class":343},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[228,106531,106532],{"class":230,"line":1742},[228,106533,2514],{"emptyLinePlaceholder":157},[228,106535,106536],{"class":230,"line":1756},[228,106537,106538],{"class":343},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[228,106540,106541],{"class":230,"line":1761},[228,106542,106543],{"class":343},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[228,106545,106546],{"class":230,"line":1767},[228,106547,106548],{"class":343},"        \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",[228,106550,106551],{"class":230,"line":1788},[228,106552,106553],{"class":343},"      \u003C\u002Fbody>\n",[228,106555,106556],{"class":230,"line":1793},[228,106557,101482],{"class":343},[228,106559,106560],{"class":230,"line":1807},[228,106561,101487],{"class":343},[228,106563,106564],{"class":230,"line":1812},[228,106565,2514],{"emptyLinePlaceholder":157},[228,106567,106568],{"class":230,"line":1841},[228,106569,106570],{"class":343},"  \u003Cactuator>\n",[228,106572,106573],{"class":230,"line":1846},[228,106574,106575],{"class":343},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[228,106577,106578],{"class":230,"line":1863},[228,106579,106580],{"class":343},"  \u003C\u002Factuator>\n",[228,106582,106583],{"class":230,"line":1868},[228,106584,101492],{"class":343},[228,106586,106587],{"class":230,"line":1873},[228,106588,95813],{"class":343},[228,106590,106591],{"class":230,"line":1878},[228,106592,2514],{"emptyLinePlaceholder":157},[228,106594,106595],{"class":230,"line":1892},[228,106596,2514],{"emptyLinePlaceholder":157},[228,106598,106599,106601,106603,106605,106607],{"class":230,"line":1897},[228,106600,32062],{"class":234},[228,106602,2087],{"class":2077},[228,106604,101513],{"class":238},[228,106606,95801],{"class":287},[228,106608,3853],{"class":238},[228,106610,106611,106613,106615,106617,106619],{"class":230,"line":2691},[228,106612,101522],{"class":238},[228,106614,284],{"class":234},[228,106616,101527],{"class":238},[228,106618,101429],{"class":287},[228,106620,245],{"class":238},[228,106622,106623,106625,106627],{"class":230,"line":2705},[228,106624,101536],{"class":238},[228,106626,284],{"class":234},[228,106628,101541],{"class":238},[228,106630,106631],{"class":230,"line":2713},[228,106632,2514],{"emptyLinePlaceholder":157},[228,106634,106635,106637,106639,106641],{"class":230,"line":2718},[228,106636,31414],{"class":287},[228,106638,239],{"class":238},[228,106640,101554],{"class":343},[228,106642,101557],{"class":238},[228,106644,106645,106647,106649,106651],{"class":230,"line":2724},[228,106646,31414],{"class":287},[228,106648,239],{"class":238},[228,106650,101566],{"class":343},[228,106652,101569],{"class":238},[228,106654,106655,106657,106659,106661],{"class":230,"line":2730},[228,106656,31414],{"class":287},[228,106658,239],{"class":238},[228,106660,101578],{"class":343},[228,106662,101581],{"class":238},[228,106664,106665],{"class":230,"line":2735},[228,106666,2514],{"emptyLinePlaceholder":157},[228,106668,106669,106671,106674,106676,106678],{"class":230,"line":8063},[228,106670,3215],{"class":234},[228,106672,106673],{"class":238}," model.nu ",[228,106675,21063],{"class":234},[228,106677,25234],{"class":287},[228,106679,3853],{"class":238},[228,106681,106682,106684,106686,106688,106691],{"class":230,"line":8087},[228,106683,103547],{"class":234},[228,106685,103550],{"class":287},[228,106687,239],{"class":238},[228,106689,106690],{"class":343},"\"expected exactly one actuator\"",[228,106692,245],{"class":238},[228,106694,106695],{"class":230,"line":8092},[228,106696,2514],{"emptyLinePlaceholder":157},[228,106698,106699,106701,106703,106705,106707,106709,106712],{"class":230,"line":8098},[228,106700,3315],{"class":234},[228,106702,31731],{"class":238},[228,106704,26159],{"class":234},[228,106706,32558],{"class":287},[228,106708,239],{"class":238},[228,106710,106711],{"class":287},"2000",[228,106713,30901],{"class":238},[228,106715,106716,106719,106721,106723,106725],{"class":230,"line":8125},[228,106717,106718],{"class":238},"        t ",[228,106720,284],{"class":234},[228,106722,31731],{"class":238},[228,106724,693],{"class":234},[228,106726,106727],{"class":238}," model.opt.timestep\n",[228,106729,106730,106733,106735,106737,106739,106742,106744,106747,106749,106751,106754,106756,106758,106760],{"class":230,"line":8130},[228,106731,106732],{"class":238},"        data.ctrl[",[228,106734,430],{"class":287},[228,106736,4557],{"class":238},[228,106738,284],{"class":234},[228,106740,106741],{"class":287}," 1.5",[228,106743,6633],{"class":234},[228,106745,106746],{"class":238}," math.sin(",[228,106748,105375],{"class":287},[228,106750,6633],{"class":234},[228,106752,106753],{"class":238}," math.pi ",[228,106755,693],{"class":234},[228,106757,61982],{"class":287},[228,106759,6633],{"class":234},[228,106761,106762],{"class":238}," t)\n",[228,106764,106765],{"class":230,"line":8136},[228,106766,101631],{"class":238},[228,106768,106769],{"class":230,"line":8148},[228,106770,2514],{"emptyLinePlaceholder":157},[228,106772,106773,106775,106777,106780],{"class":230,"line":8160},[228,106774,31414],{"class":287},[228,106776,239],{"class":238},[228,106778,106779],{"class":343},"\"time:\"",[228,106781,101593],{"class":238},[228,106783,106784,106786,106788,106791,106793,106795],{"class":230,"line":8172},[228,106785,31414],{"class":287},[228,106787,239],{"class":238},[228,106789,106790],{"class":343},"\"joint qpos:\"",[228,106792,105045],{"class":238},[228,106794,531],{"class":287},[228,106796,30612],{"class":238},[228,106798,106799,106801,106803,106806,106808,106810],{"class":230,"line":9831},[228,106800,31414],{"class":287},[228,106802,239],{"class":238},[228,106804,106805],{"class":343},"\"joint qvel:\"",[228,106807,105061],{"class":238},[228,106809,531],{"class":287},[228,106811,30612],{"class":238},[228,106813,106814,106816,106818,106821],{"class":230,"line":9856},[228,106815,31414],{"class":287},[228,106817,239],{"class":238},[228,106819,106820],{"class":343},"\"last ctrl:\"",[228,106822,106823],{"class":238},", data.ctrl.copy())\n",[228,106825,106826],{"class":230,"line":9879},[228,106827,2514],{"emptyLinePlaceholder":157},[228,106829,106830],{"class":230,"line":9903},[228,106831,2514],{"emptyLinePlaceholder":157},[228,106833,106834,106836,106838,106840,106842],{"class":230,"line":9908},[228,106835,1645],{"class":234},[228,106837,31335],{"class":287},[228,106839,101674],{"class":234},[228,106841,101677],{"class":343},[228,106843,3853],{"class":238},[228,106845,106846],{"class":230,"line":9913},[228,106847,101684],{"class":238},[19,106849,103685],{},[220,106851,106853],{"className":23937,"code":106852,"language":23939,"meta":141,"style":141},"touch ch4_joint_motor.py\n",[30,106854,106855],{"__ignoreMap":141},[228,106856,106857,106859],{"class":230,"line":231},[228,106858,101398],{"class":2077},[228,106860,106861],{"class":343}," ch4_joint_motor.py\n",[19,106863,102416],{},[220,106865,106867],{"className":23937,"code":106866,"language":23939,"meta":141,"style":141},"python ch4_joint_motor.py\n",[30,106868,106869],{"__ignoreMap":141},[228,106870,106871,106873],{"class":230,"line":231},[228,106872,30495],{"class":2077},[228,106874,106861],{"class":343},[200,106876,101687],{"id":101687},[19,106878,106879],{},"检查 actuator 数量：",[220,106881,106883],{"className":30493,"code":106882,"language":30495,"meta":141,"style":141},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[30,106884,106885,106897],{"__ignoreMap":141},[228,106886,106887,106889,106891,106893,106895],{"class":230,"line":231},[228,106888,1645],{"class":234},[228,106890,106673],{"class":238},[228,106892,21063],{"class":234},[228,106894,25234],{"class":287},[228,106896,3853],{"class":238},[228,106898,106899,106901,106903,106905,106907],{"class":230,"line":142},[228,106900,104010],{"class":234},[228,106902,103550],{"class":287},[228,106904,239],{"class":238},[228,106906,106690],{"class":343},[228,106908,245],{"class":238},[19,106910,106911,106913,106914,106916],{},[30,106912,102273],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[30,106915,101191],{}," 长度应该是 1。",[19,106918,106919],{},"产生正弦控制信号：",[220,106921,106923],{"className":30493,"code":106922,"language":30495,"meta":141,"style":141},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[30,106924,106925],{"__ignoreMap":141},[228,106926,106927,106929,106931,106933,106935,106937,106939,106941,106943,106945,106947,106949,106951,106953],{"class":230,"line":231},[228,106928,105986],{"class":238},[228,106930,430],{"class":287},[228,106932,4557],{"class":238},[228,106934,284],{"class":234},[228,106936,106741],{"class":287},[228,106938,6633],{"class":234},[228,106940,106746],{"class":238},[228,106942,105375],{"class":287},[228,106944,6633],{"class":234},[228,106946,106753],{"class":238},[228,106948,693],{"class":234},[228,106950,61982],{"class":287},[228,106952,6633],{"class":234},[228,106954,106762],{"class":238},[19,106956,106957],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,106959,101788],{},[220,106961,106962],{"className":30493,"code":104620,"language":30495,"meta":141,"style":141},[30,106963,106964],{"__ignoreMap":141},[228,106965,106966],{"class":230,"line":231},[228,106967,104620],{"class":238},[19,106969,106970],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[200,106972,101823],{"id":101823},[220,106974,106976],{"className":30493,"code":106975,"language":30495,"meta":141,"style":141},"import math\n",[30,106977,106978],{"__ignoreMap":141},[228,106979,106980,106982],{"class":230,"line":231},[228,106981,30507],{"class":234},[228,106983,106465],{"class":238},[19,106985,106986,106987,101133,106990,106993],{},"导入 Python 标准库里的数学模块。后面要用 ",[30,106988,106989],{},"math.sin",[30,106991,106992],{},"math.pi"," 生成周期变化的控制信号。",[220,106995,106996],{"className":30493,"code":103801,"language":30495,"meta":141,"style":141},[30,106997,106998,107004],{"__ignoreMap":141},[228,106999,107000,107002],{"class":230,"line":231},[228,107001,30507],{"class":234},[228,107003,101416],{"class":238},[228,107005,107006,107008,107010,107012],{"class":230,"line":142},[228,107007,30507],{"class":234},[228,107009,31495],{"class":238},[228,107011,31498],{"class":234},[228,107013,31501],{"class":238},[19,107015,107016],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[220,107018,107019],{"className":53182,"code":106302,"language":53184,"meta":141,"style":141},[30,107020,107021],{"__ignoreMap":141},[228,107022,107023,107025,107027,107029,107031,107033,107035,107037,107039,107041,107043,107045,107047,107049,107051],{"class":230,"line":231},[228,107024,1148],{"class":238},[228,107026,103071],{"class":51415},[228,107028,15035],{"class":2077},[228,107030,284],{"class":238},[228,107032,106134],{"class":343},[228,107034,53939],{"class":2077},[228,107036,284],{"class":238},[228,107038,106134],{"class":343},[228,107040,106143],{"class":2077},[228,107042,284],{"class":238},[228,107044,106148],{"class":343},[228,107046,106331],{"class":2077},[228,107048,284],{"class":238},[228,107050,106336],{"class":343},[228,107052,101259],{"class":238},[19,107054,107055,107056,107058,107059,107061,107062,107064],{},"这行定义关节。",[30,107057,105955],{}," 表示旋转关节。",[30,107060,106354],{}," 表示绕 y 轴旋转。",[30,107063,106360],{}," 表示有一点阻尼，运动不会完全无损耗。",[220,107066,107068],{"className":53182,"code":107067,"language":53184,"meta":141,"style":141},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[30,107069,107070],{"__ignoreMap":141},[228,107071,107072,107074,107076,107078,107080,107083,107085,107087,107090,107093,107095,107098,107100,107102,107104,107106,107108,107111],{"class":230,"line":231},[228,107073,1148],{"class":238},[228,107075,101235],{"class":51415},[228,107077,15035],{"class":2077},[228,107079,284],{"class":238},[228,107081,107082],{"class":343},"\"link_geom\"",[228,107084,53939],{"class":2077},[228,107086,284],{"class":238},[228,107088,107089],{"class":343},"\"capsule\"",[228,107091,107092],{"class":2077}," fromto",[228,107094,284],{"class":238},[228,107096,107097],{"class":343},"\"0 0 0 0 0 0.5\"",[228,107099,101251],{"class":2077},[228,107101,284],{"class":238},[228,107103,103893],{"class":343},[228,107105,102116],{"class":2077},[228,107107,284],{"class":238},[228,107109,107110],{"class":343},"\"0.5\"",[228,107112,101259],{"class":238},[19,107114,107115,107116,107118,107119,107121,107122,107125,107126,78,107129,107131],{},"这行定义摆杆的形状。",[30,107117,103280],{}," 是胶囊体，适合表示杆子。",[30,107120,103291],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[30,107123,107124],{},"(0,0,0)"," 延伸到 ",[30,107127,107128],{},"(0,0,0.5)",[30,107130,103285],{}," 是半径。",[220,107133,107134],{"className":53182,"code":106368,"language":53184,"meta":141,"style":141},[30,107135,107136],{"__ignoreMap":141},[228,107137,107138,107140,107142,107144,107146,107148,107150,107152,107154,107156,107158,107160,107162,107164,107166,107168,107170,107172],{"class":230,"line":231},[228,107139,1148],{"class":238},[228,107141,106189],{"class":51415},[228,107143,15035],{"class":2077},[228,107145,284],{"class":238},[228,107147,106196],{"class":343},[228,107149,106199],{"class":2077},[228,107151,284],{"class":238},[228,107153,106134],{"class":343},[228,107155,106206],{"class":2077},[228,107157,284],{"class":238},[228,107159,3792],{"class":343},[228,107161,106213],{"class":2077},[228,107163,284],{"class":238},[228,107165,106218],{"class":343},[228,107167,106221],{"class":2077},[228,107169,284],{"class":238},[228,107171,106226],{"class":343},[228,107173,101259],{"class":238},[19,107175,107176,107177,107179,107180,107183,107184,107186],{},"这行定义电机。它作用在 ",[30,107178,105955],{}," 关节上。",[30,107181,107182],{},"gear"," 可以理解成放大倍数。",[30,107185,105970],{}," 限制控制输入范围。",[220,107188,107189],{"className":30493,"code":106882,"language":30495,"meta":141,"style":141},[30,107190,107191,107203],{"__ignoreMap":141},[228,107192,107193,107195,107197,107199,107201],{"class":230,"line":231},[228,107194,1645],{"class":234},[228,107196,106673],{"class":238},[228,107198,21063],{"class":234},[228,107200,25234],{"class":287},[228,107202,3853],{"class":238},[228,107204,107205,107207,107209,107211,107213],{"class":230,"line":142},[228,107206,104010],{"class":234},[228,107208,103550],{"class":287},[228,107210,239],{"class":238},[228,107212,106690],{"class":343},[228,107214,245],{"class":238},[19,107216,107217,107219],{},[30,107218,102273],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[220,107221,107223],{"className":30493,"code":107222,"language":30495,"meta":141,"style":141},"for step in range(2000):\n",[30,107224,107225],{"__ignoreMap":141},[228,107226,107227,107229,107231,107233,107235,107237,107239],{"class":230,"line":231},[228,107228,3139],{"class":234},[228,107230,31731],{"class":238},[228,107232,26159],{"class":234},[228,107234,32558],{"class":287},[228,107236,239],{"class":238},[228,107238,106711],{"class":287},[228,107240,30901],{"class":238},[19,107242,107243,107244,107246,107247,107250],{},"循环 2000 步。这里没有用 ",[30,107245,1230],{},"，而是用 ",[30,107248,107249],{},"step","，因为后面要用当前步数计算时间。",[220,107252,107254],{"className":30493,"code":107253,"language":30495,"meta":141,"style":141},"t = step * model.opt.timestep\n",[30,107255,107256],{"__ignoreMap":141},[228,107257,107258,107261,107263,107265,107267],{"class":230,"line":231},[228,107259,107260],{"class":238},"t ",[228,107262,284],{"class":234},[228,107264,31731],{"class":238},[228,107266,693],{"class":234},[228,107268,106727],{"class":238},[19,107270,107271],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[220,107273,107274],{"className":30493,"code":106922,"language":30495,"meta":141,"style":141},[30,107275,107276],{"__ignoreMap":141},[228,107277,107278,107280,107282,107284,107286,107288,107290,107292,107294,107296,107298,107300,107302,107304],{"class":230,"line":231},[228,107279,105986],{"class":238},[228,107281,430],{"class":287},[228,107283,4557],{"class":238},[228,107285,284],{"class":234},[228,107287,106741],{"class":287},[228,107289,6633],{"class":234},[228,107291,106746],{"class":238},[228,107293,105375],{"class":287},[228,107295,6633],{"class":234},[228,107297,106753],{"class":238},[228,107299,693],{"class":234},[228,107301,61982],{"class":287},[228,107303,6633],{"class":234},[228,107305,106762],{"class":238},[19,107307,107308],{},"这行给电机输入一个正弦波。拆开看：",[183,107310,107311,107317,107323],{},[186,107312,107313,107316],{},[30,107314,107315],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[186,107318,107319,107322],{},[30,107320,107321],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[186,107324,107325,107328],{},[30,107326,107327],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,107330,107331],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[220,107333,107335],{"className":30493,"code":107334,"language":30495,"meta":141,"style":141},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[30,107336,107337],{"__ignoreMap":141},[228,107338,107339,107341,107343,107345,107347,107349],{"class":230,"line":231},[228,107340,30530],{"class":287},[228,107342,239],{"class":238},[228,107344,106790],{"class":343},[228,107346,105045],{"class":238},[228,107348,531],{"class":287},[228,107350,30612],{"class":238},[19,107352,107353,107354,107356],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[30,107355,101185],{}," 只有一个数。",[14,107358,102431],{"id":102430},[19,107360,107361],{},"输出类似:",[220,107363,107366],{"className":107364,"code":107365,"language":5302,"meta":141},[5300],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[30,107367,107365],{"__ignoreMap":141},[19,107369,107370,107371,107373],{},"这里 ",[30,107372,106241],{}," 是电机输入。",[19,107375,107376,107379,107380,107383],{},[30,107377,107378],{},"joint qpos"," 是关节角度，单位通常是弧度。",[30,107381,107382],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,107385,107386],{},"角度单位提示：",[220,107388,107391],{"className":107389,"code":107390,"language":5302,"meta":141},[5300],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[30,107392,107390],{"__ignoreMap":141},[19,107394,107395,107396,107398,107399,107401],{},"如果你看到 ",[30,107397,104145],{}," 是 ",[30,107400,35444],{},"，大约就是 28.6 度。",[14,107403,102463],{"id":102462},[183,107405,107406,107413,107416,107423,107426,107434,107442],{},[186,107407,102526,107408,102529,107410,78],{},[30,107409,106426],{},[30,107411,107412],{},"gear=\"5\"",[186,107414,107415],{},"重新运行，观察关节运动是否更剧烈。",[186,107417,102526,107418,102529,107420,78],{},[30,107419,105970],{},[30,107421,107422],{},"-0.2 0.2",[186,107424,107425],{},"重新运行，观察控制能力是否变弱。",[186,107427,107428,107429,107431,107432,78],{},"去掉 actuator，确认 ",[30,107430,102273],{}," 变成 ",[30,107433,430],{},[186,107435,102526,107436,102529,107438,107441],{},[30,107437,106360],{},[30,107439,107440],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[186,107443,102526,107444,102529,107446,107449],{},[30,107445,106354],{},[30,107447,107448],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,107451,102568],{"id":102567},[200,107453,107455],{"id":107454},"indexerror-index-0-is-out-of-bounds",[30,107456,107457],{},"IndexError: index 0 is out of bounds",[19,107459,107460,107461,107463],{},"原因是 ",[30,107462,106107],{},"，没有 actuator。",[200,107465,107466],{"id":107466},"关节几乎不动",[19,107468,107469],{},"可能原因:",[183,107471,107472,107477,107481,107487],{},[186,107473,107474,107476],{},[30,107475,107182],{}," 太小",[186,107478,107479,107476],{},[30,107480,105970],{},[186,107482,107483,107486],{},[30,107484,107485],{},"damping"," 太大",[186,107488,107489],{},"重力方向导致运动不明显",[200,107491,107492],{"id":107492},"模型编译失败",[19,107494,107495,107496,107498],{},"检查 actuator 引用的 ",[30,107497,106417],{}," 是否存在，joint 名称是否拼写一致。",[200,107500,107502,107504],{"id":107501},"datactrl0-写了但没有效果",[30,107503,106241],{}," 写了但没有效果",[19,107506,102690],{},[183,107508,107509,107514,107517,107522,107527],{},[186,107510,107511,107513],{},[30,107512,102273],{}," 是否大于 0。",[186,107515,107516],{},"motor 是否引用了正确 joint。",[186,107518,107519,107521],{},[30,107520,107182],{}," 是否太小。",[186,107523,107524,107526],{},[30,107525,105970],{}," 是否把输入限制得太小。",[186,107528,107529],{},"body 是否真的有可动 joint。",[200,107531,107532],{"id":107532},"控制输入超过范围会怎样",[19,107534,107535],{},"如果设置了：",[220,107537,107539],{"className":53182,"code":107538,"language":53184,"meta":141,"style":141},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[30,107540,107541],{"__ignoreMap":141},[228,107542,107543],{"class":230,"line":231},[228,107544,107538],{"class":238},[19,107546,107547],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[220,107549,107551],{"className":30493,"code":107550,"language":30495,"meta":141,"style":141},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[30,107552,107553,107573],{"__ignoreMap":141},[228,107554,107555,107558,107560,107563,107565,107567,107569,107571],{"class":230,"line":231},[228,107556,107557],{"class":238},"action ",[228,107559,284],{"class":234},[228,107561,107562],{"class":238}," np.clip(action, ",[228,107564,770],{"class":234},[228,107566,105375],{"class":287},[228,107568,12550],{"class":238},[228,107570,105375],{"class":287},[228,107572,245],{"class":238},[228,107574,107575,107577,107579,107581,107583],{"class":230,"line":142},[228,107576,105986],{"class":238},[228,107578,430],{"class":287},[228,107580,4557],{"class":238},[228,107582,284],{"class":234},[228,107584,107585],{"class":238}," action\n",[14,107587,102722],{"id":102721},[19,107589,107590],{},"这一章建立了控制任务的基本形式：",[220,107592,107595],{"className":107593,"code":107594,"language":5302,"meta":141},[5300],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[30,107596,107594],{"__ignoreMap":141},[19,107598,107599],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[5241,107601,107602],{},"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":141,"searchDepth":142,"depth":142,"links":107604},[107605,107606,107607,107612,107616,107617,107618,107626],{"id":100761,"depth":142,"text":100762},{"id":100884,"depth":142,"text":100885},{"id":101159,"depth":142,"text":101160,"children":107608},[107609,107610,107611],{"id":106248,"depth":1293,"text":106249},{"id":106298,"depth":1293,"text":106299},{"id":106364,"depth":1293,"text":106365},{"id":101367,"depth":142,"text":101368,"children":107613},[107614,107615],{"id":101687,"depth":1293,"text":101687},{"id":101823,"depth":1293,"text":101823},{"id":102430,"depth":142,"text":102431},{"id":102462,"depth":142,"text":102463},{"id":102567,"depth":142,"text":102568,"children":107619},[107620,107621,107622,107623,107625],{"id":107454,"depth":1293,"text":107457},{"id":107466,"depth":1293,"text":107466},{"id":107492,"depth":1293,"text":107492},{"id":107501,"depth":1293,"text":107624},"data.ctrl[0] 写了但没有效果",{"id":107532,"depth":1293,"text":107532},{"id":102721,"depth":142,"text":102722},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":105936,"description":141},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107633,"title":107634,"body":107635,"description":141,"extension":155,"meta":109544,"navigation":157,"path":109545,"seo":109546,"stem":109547,"__hash__":109548},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107636,"toc":109520},[107637,107640,107642,107645,107653,107656,107673,107676,107701,107704,107750,107752,107754,107809,107811,107830,107832,107875,107878,107895,107898,107914,107924,107931,107933,107936,107939,107973,107976,108024,108028,108031,108045,108054,108058,108061,108086,108089,108093,108106,108109,108115,108118,108133,108135,108138,108398,108400,108412,108415,108727,108729,108741,108743,108746,108761,108766,108769,108791,108794,108797,108831,108834,108838,108849,108852,108869,108872,108886,108893,108913,108920,108934,108937,108949,108964,108984,108987,109009,109012,109016,109031,109042,109057,109060,109090,109106,109135,109143,109167,109170,109188,109198,109210,109217,109226,109232,109241,109244,109246,109255,109258,109273,109275,109278,109289,109292,109303,109306,109324,109326,109343,109346,109374,109376,109380,109383,109413,109419,109422,109426,109434,109437,109439,109460,109463,109466,109482,109485,109501,109503,109506,109517],[10,107638,107634],{"id":107639},"_5viewer-可视化与-renderer-离屏渲染",[14,107641,100762],{"id":100761},[19,107643,107644],{},"本章掌握两类可视化方式:",[183,107646,107647,107650],{},[186,107648,107649],{},"交互式 viewer: 适合人工观察仿真",[186,107651,107652],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,107654,107655],{},"使用官方接口:",[220,107657,107659],{"className":30493,"code":107658,"language":30495,"meta":141,"style":141},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[30,107660,107661,107668],{"__ignoreMap":141},[228,107662,107663,107665],{"class":230,"line":231},[228,107664,30507],{"class":234},[228,107666,107667],{"class":238}," mujoco.viewer\n",[228,107669,107670],{"class":230,"line":142},[228,107671,107672],{"class":238},"mujoco.viewer.launch_passive(model, data)\n",[19,107674,107675],{},"以及:",[220,107677,107679],{"className":30493,"code":107678,"language":30495,"meta":141,"style":141},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[30,107680,107681,107691],{"__ignoreMap":141},[228,107682,107683,107686,107688],{"class":230,"line":231},[228,107684,107685],{"class":238},"renderer ",[228,107687,284],{"class":234},[228,107689,107690],{"class":238}," mujoco.Renderer(model)\n",[228,107692,107693,107696,107698],{"class":230,"line":142},[228,107694,107695],{"class":238},"image ",[228,107697,284],{"class":234},[228,107699,107700],{"class":238}," renderer.render()\n",[19,107702,107703],{},"新手建议先理解二者区别：",[376,107705,107706,107722],{},[379,107707,107708],{},[382,107709,107710,107713,107716,107719],{},[385,107711,107712],{"align":23851},"工具",[385,107714,107715],{"align":23851},"用途",[385,107717,107718],{"align":23851},"是否打开窗口",[385,107720,107721],{"align":23851},"常见场景",[423,107723,107724,107737],{},[382,107725,107726,107729,107732,107734],{},[428,107727,107728],{"align":23851},"Viewer",[428,107730,107731],{"align":23851},"人眼实时观察仿真",[428,107733,104780],{"align":23851},[428,107735,107736],{"align":23851},"调试模型、看控制效果",[382,107738,107739,107742,107745,107747],{},[428,107740,107741],{"align":23851},"Renderer",[428,107743,107744],{"align":23851},"生成图像数组",[428,107746,104793],{"align":23851},[428,107748,107749],{"align":23851},"保存图片、训练视觉策略、服务器批量采集",[14,107751,100885],{"id":100884},[19,107753,100888],{},[220,107755,107757],{"className":23937,"code":107756,"language":23939,"meta":141,"style":141},"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",[30,107758,107759,107771,107781,107789,107797],{"__ignoreMap":141},[228,107760,107761,107763,107765,107767,107769],{"class":230,"line":231},[228,107762,24692],{"class":2077},[228,107764,26431],{"class":343},[228,107766,23949],{"class":343},[228,107768,26516],{"class":287},[228,107770,24794],{"class":287},[228,107772,107773,107775,107777,107779],{"class":230,"line":142},[228,107774,100923],{"class":343},[228,107776,100926],{"class":343},[228,107778,100929],{"class":343},[228,107780,24794],{"class":287},[228,107782,107783,107785,107787],{"class":230,"line":1293},[228,107784,100936],{"class":343},[228,107786,100939],{"class":343},[228,107788,24794],{"class":287},[228,107790,107791,107793,107795],{"class":230,"line":1308},[228,107792,100946],{"class":343},[228,107794,100949],{"class":343},[228,107796,24794],{"class":287},[228,107798,107799,107801,107803,107805,107807],{"class":230,"line":1314},[228,107800,100956],{"class":343},[228,107802,100959],{"class":343},[228,107804,100962],{"class":343},[228,107806,100965],{"class":343},[228,107808,102631],{"class":343},[19,107810,102934],{},[220,107812,107814],{"className":23937,"code":107813,"language":23939,"meta":141,"style":141},"pip install \"mujoco>=2.3\" numpy pillow\n",[30,107815,107816],{"__ignoreMap":141},[228,107817,107818,107820,107822,107824,107827],{"class":230,"line":231},[228,107819,23946],{"class":2077},[228,107821,23949],{"class":343},[228,107823,101045],{"class":343},[228,107825,107826],{"class":343}," numpy",[228,107828,107829],{"class":343}," pillow\n",[19,107831,102951],{},[220,107833,107835],{"className":23937,"code":107834,"language":23939,"meta":141,"style":141},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[30,107836,107837,107854,107863],{"__ignoreMap":141},[228,107838,107839,107841,107843,107845,107848,107850,107852],{"class":230,"line":231},[228,107840,30445],{"class":2077},[228,107842,29291],{"class":343},[228,107844,25231],{"class":287},[228,107846,107847],{"class":343}," mujoco-render",[228,107849,101090],{"class":343},[228,107851,101093],{"class":287},[228,107853,101096],{"class":287},[228,107855,107856,107858,107860],{"class":230,"line":142},[228,107857,30445],{"class":2077},[228,107859,101103],{"class":343},[228,107861,107862],{"class":343}," mujoco-render\n",[228,107864,107865,107867,107869,107871,107873],{"class":230,"line":1293},[228,107866,23946],{"class":2077},[228,107868,23949],{"class":343},[228,107870,101045],{"class":343},[228,107872,107826],{"class":343},[228,107874,107829],{"class":343},[19,107876,107877],{},"离屏渲染后端:",[220,107879,107881],{"className":23937,"code":107880,"language":23939,"meta":141,"style":141},"export MUJOCO_GL=egl\n",[30,107882,107883],{"__ignoreMap":141},[228,107884,107885,107887,107890,107892],{"class":230,"line":231},[228,107886,25158],{"class":234},[228,107888,107889],{"class":238}," MUJOCO_GL",[228,107891,284],{"class":234},[228,107893,107894],{"class":238},"egl\n",[19,107896,107897],{},"或:",[220,107899,107901],{"className":23937,"code":107900,"language":23939,"meta":141,"style":141},"export MUJOCO_GL=osmesa\n",[30,107902,107903],{"__ignoreMap":141},[228,107904,107905,107907,107909,107911],{"class":230,"line":231},[228,107906,25158],{"class":234},[228,107908,107889],{"class":238},[228,107910,284],{"class":234},[228,107912,107913],{"class":238},"osmesa\n",[19,107915,107916,107917,107920,107921,78],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[30,107918,107919],{},"egl"," 失败，再尝试 ",[30,107922,107923],{},"osmesa",[19,107925,107926,107927,107930],{},"如果你在本机桌面环境运行，通常先不要设置 ",[30,107928,107929],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,107932,101160],{"id":101159},[19,107934,107935],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,107937,107938],{},"典型 viewer 流程:",[220,107940,107942],{"className":30493,"code":107941,"language":30495,"meta":141,"style":141},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[30,107943,107944,107957,107964,107968],{"__ignoreMap":141},[228,107945,107946,107949,107952,107954],{"class":230,"line":231},[228,107947,107948],{"class":234},"with",[228,107950,107951],{"class":238}," mujoco.viewer.launch_passive(model, data) ",[228,107953,31498],{"class":234},[228,107955,107956],{"class":238}," viewer:\n",[228,107958,107959,107961],{"class":230,"line":142},[228,107960,2365],{"class":234},[228,107962,107963],{"class":238}," viewer.is_running():\n",[228,107965,107966],{"class":230,"line":1293},[228,107967,101631],{"class":238},[228,107969,107970],{"class":230,"line":1308},[228,107971,107972],{"class":238},"        viewer.sync()\n",[19,107974,107975],{},"典型 renderer 流程:",[220,107977,107979],{"className":30493,"code":107978,"language":30495,"meta":141,"style":141},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[30,107980,107981,108007,108011,108016],{"__ignoreMap":141},[228,107982,107983,107985,107987,107990,107992,107994,107996,107998,108000,108002,108005],{"class":230,"line":231},[228,107984,107685],{"class":238},[228,107986,284],{"class":234},[228,107988,107989],{"class":238}," mujoco.Renderer(model, ",[228,107991,25097],{"class":5331},[228,107993,284],{"class":234},[228,107995,42457],{"class":287},[228,107997,12550],{"class":238},[228,107999,25093],{"class":5331},[228,108001,284],{"class":234},[228,108003,108004],{"class":287},"640",[228,108006,245],{"class":238},[228,108008,108009],{"class":230,"line":142},[228,108010,104620],{"class":238},[228,108012,108013],{"class":230,"line":1293},[228,108014,108015],{"class":238},"renderer.update_scene(data)\n",[228,108017,108018,108020,108022],{"class":230,"line":1308},[228,108019,107695],{"class":238},[228,108021,284],{"class":234},[228,108023,107700],{"class":238},[200,108025,108027],{"id":108026},"viewer-的同步逻辑","viewer 的同步逻辑",[19,108029,108030],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[220,108032,108034],{"className":30493,"code":108033,"language":30495,"meta":141,"style":141},"mujoco.mj_step(model, data)\nviewer.sync()\n",[30,108035,108036,108040],{"__ignoreMap":141},[228,108037,108038],{"class":230,"line":231},[228,108039,104620],{"class":238},[228,108041,108042],{"class":230,"line":142},[228,108043,108044],{"class":238},"viewer.sync()\n",[19,108046,108047,108049,108050,108053],{},[30,108048,101330],{}," 负责算物理，",[30,108051,108052],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[200,108055,108057],{"id":108056},"为什么要-sleep","为什么要 sleep",[19,108059,108060],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[220,108062,108064],{"className":30493,"code":108063,"language":30495,"meta":141,"style":141},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[30,108065,108066],{"__ignoreMap":141},[228,108067,108068,108071,108073,108076,108078,108081,108083],{"class":230,"line":231},[228,108069,108070],{"class":238},"sleep_time ",[228,108072,284],{"class":234},[228,108074,108075],{"class":238}," model.opt.timestep ",[228,108077,770],{"class":234},[228,108079,108080],{"class":238}," (time.time() ",[228,108082,770],{"class":234},[228,108084,108085],{"class":238}," step_start)\n",[19,108087,108088],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[200,108090,108092],{"id":108091},"renderer-输出是什么","renderer 输出是什么",[220,108094,108096],{"className":30493,"code":108095,"language":30495,"meta":141,"style":141},"image = renderer.render()\n",[30,108097,108098],{"__ignoreMap":141},[228,108099,108100,108102,108104],{"class":230,"line":231},[228,108101,107695],{"class":238},[228,108103,284],{"class":234},[228,108105,107700],{"class":238},[19,108107,108108],{},"得到的是 NumPy 数组，形状通常是：",[220,108110,108113],{"className":108111,"code":108112,"language":5302,"meta":141},[5300],"(height, width, 3)\n",[30,108114,108112],{"__ignoreMap":141},[19,108116,108117],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[220,108119,108121],{"className":30493,"code":108120,"language":30495,"meta":141,"style":141},"Image.fromarray(image).save(\"render_output.png\")\n",[30,108122,108123],{"__ignoreMap":141},[228,108124,108125,108128,108131],{"class":230,"line":231},[228,108126,108127],{"class":238},"Image.fromarray(image).save(",[228,108129,108130],{"class":343},"\"render_output.png\"",[228,108132,245],{"class":238},[14,108134,101368],{"id":101367},[19,108136,108137],{},"交互式 Viewer:",[220,108139,108141],{"className":30493,"code":108140,"language":30495,"meta":141,"style":141},"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",[30,108142,108143,108149,108153,108159,108165,108169,108173,108181,108186,108190,108194,108198,108203,108208,108212,108216,108220,108225,108229,108233,108237,108241,108245,108249,108261,108273,108281,108285,108295,108315,108325,108330,108335,108339,108356,108369,108374,108378,108382,108394],{"__ignoreMap":141},[228,108144,108145,108147],{"class":230,"line":231},[228,108146,30507],{"class":234},[228,108148,31944],{"class":238},[228,108150,108151],{"class":230,"line":142},[228,108152,2514],{"emptyLinePlaceholder":157},[228,108154,108155,108157],{"class":230,"line":1293},[228,108156,30507],{"class":234},[228,108158,101416],{"class":238},[228,108160,108161,108163],{"class":230,"line":1308},[228,108162,30507],{"class":234},[228,108164,107667],{"class":238},[228,108166,108167],{"class":230,"line":1314},[228,108168,2514],{"emptyLinePlaceholder":157},[228,108170,108171],{"class":230,"line":1328},[228,108172,2514],{"emptyLinePlaceholder":157},[228,108174,108175,108177,108179],{"class":230,"line":1334},[228,108176,101429],{"class":287},[228,108178,13679],{"class":234},[228,108180,101434],{"class":343},[228,108182,108183],{"class":230,"line":1425},[228,108184,108185],{"class":343},"\u003Cmujoco model=\"viewer_demo\">\n",[228,108187,108188],{"class":230,"line":1431},[228,108189,101444],{"class":343},[228,108191,108192],{"class":230,"line":1443},[228,108193,2514],{"emptyLinePlaceholder":157},[228,108195,108196],{"class":230,"line":1726},[228,108197,101453],{"class":343},[228,108199,108200],{"class":230,"line":1731},[228,108201,108202],{"class":343},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[228,108204,108205],{"class":230,"line":1737},[228,108206,108207],{"class":343},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[228,108209,108210],{"class":230,"line":1742},[228,108211,2514],{"emptyLinePlaceholder":157},[228,108213,108214],{"class":230,"line":1756},[228,108215,101467],{"class":343},[228,108217,108218],{"class":230,"line":1761},[228,108219,101472],{"class":343},[228,108221,108222],{"class":230,"line":1767},[228,108223,108224],{"class":343},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[228,108226,108227],{"class":230,"line":1788},[228,108228,101482],{"class":343},[228,108230,108231],{"class":230,"line":1793},[228,108232,101487],{"class":343},[228,108234,108235],{"class":230,"line":1807},[228,108236,101492],{"class":343},[228,108238,108239],{"class":230,"line":1812},[228,108240,95813],{"class":343},[228,108242,108243],{"class":230,"line":1841},[228,108244,2514],{"emptyLinePlaceholder":157},[228,108246,108247],{"class":230,"line":1846},[228,108248,2514],{"emptyLinePlaceholder":157},[228,108250,108251,108253,108255,108257,108259],{"class":230,"line":1863},[228,108252,32062],{"class":234},[228,108254,2087],{"class":2077},[228,108256,101513],{"class":238},[228,108258,95801],{"class":287},[228,108260,3853],{"class":238},[228,108262,108263,108265,108267,108269,108271],{"class":230,"line":1868},[228,108264,101522],{"class":238},[228,108266,284],{"class":234},[228,108268,101527],{"class":238},[228,108270,101429],{"class":287},[228,108272,245],{"class":238},[228,108274,108275,108277,108279],{"class":230,"line":1873},[228,108276,101536],{"class":238},[228,108278,284],{"class":234},[228,108280,101541],{"class":238},[228,108282,108283],{"class":230,"line":1878},[228,108284,2514],{"emptyLinePlaceholder":157},[228,108286,108287,108289,108291,108293],{"class":230,"line":1892},[228,108288,34293],{"class":234},[228,108290,107951],{"class":238},[228,108292,31498],{"class":234},[228,108294,107956],{"class":238},[228,108296,108297,108300,108303,108305,108308,108310,108313],{"class":230,"line":1897},[228,108298,108299],{"class":234},"        while",[228,108301,108302],{"class":238}," viewer.is_running() ",[228,108304,30577],{"class":234},[228,108306,108307],{"class":238}," data.time ",[228,108309,1148],{"class":234},[228,108311,108312],{"class":287}," 5.0",[228,108314,3853],{"class":238},[228,108316,108317,108320,108322],{"class":230,"line":2691},[228,108318,108319],{"class":238},"            step_start ",[228,108321,284],{"class":234},[228,108323,108324],{"class":238}," time.time()\n",[228,108326,108327],{"class":230,"line":2705},[228,108328,108329],{"class":238},"            mujoco.mj_step(model, data)\n",[228,108331,108332],{"class":230,"line":2713},[228,108333,108334],{"class":238},"            viewer.sync()\n",[228,108336,108337],{"class":230,"line":2718},[228,108338,2514],{"emptyLinePlaceholder":157},[228,108340,108341,108344,108346,108348,108350,108352,108354],{"class":230,"line":2724},[228,108342,108343],{"class":238},"            sleep_time ",[228,108345,284],{"class":234},[228,108347,108075],{"class":238},[228,108349,770],{"class":234},[228,108351,108080],{"class":238},[228,108353,770],{"class":234},[228,108355,108085],{"class":238},[228,108357,108358,108360,108363,108365,108367],{"class":230,"line":2730},[228,108359,4756],{"class":234},[228,108361,108362],{"class":238}," sleep_time ",[228,108364,1198],{"class":234},[228,108366,4207],{"class":287},[228,108368,3853],{"class":238},[228,108370,108371],{"class":230,"line":2735},[228,108372,108373],{"class":238},"                time.sleep(sleep_time)\n",[228,108375,108376],{"class":230,"line":8063},[228,108377,2514],{"emptyLinePlaceholder":157},[228,108379,108380],{"class":230,"line":8087},[228,108381,2514],{"emptyLinePlaceholder":157},[228,108383,108384,108386,108388,108390,108392],{"class":230,"line":8092},[228,108385,1645],{"class":234},[228,108387,31335],{"class":287},[228,108389,101674],{"class":234},[228,108391,101677],{"class":343},[228,108393,3853],{"class":238},[228,108395,108396],{"class":230,"line":8098},[228,108397,101684],{"class":238},[19,108399,103685],{},[220,108401,108403],{"className":23937,"code":108402,"language":23939,"meta":141,"style":141},"touch ch5_viewer.py\n",[30,108404,108405],{"__ignoreMap":141},[228,108406,108407,108409],{"class":230,"line":231},[228,108408,101398],{"class":2077},[228,108410,108411],{"class":343}," ch5_viewer.py\n",[19,108413,108414],{},"离屏 Renderer 保存图片:",[220,108416,108418],{"className":30493,"code":108417,"language":30495,"meta":141,"style":141},"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",[30,108419,108420,108432,108436,108442,108452,108456,108460,108468,108473,108477,108481,108485,108489,108494,108498,108502,108506,108510,108514,108518,108522,108526,108530,108534,108538,108550,108562,108570,108595,108599,108615,108619,108623,108638,108647,108651,108665,108670,108675,108679,108691,108703,108707,108711,108723],{"__ignoreMap":141},[228,108421,108422,108424,108427,108429],{"class":230,"line":231},[228,108423,30852],{"class":234},[228,108425,108426],{"class":238}," pathlib ",[228,108428,30507],{"class":234},[228,108430,108431],{"class":238}," Path\n",[228,108433,108434],{"class":230,"line":142},[228,108435,2514],{"emptyLinePlaceholder":157},[228,108437,108438,108440],{"class":230,"line":1293},[228,108439,30507],{"class":234},[228,108441,101416],{"class":238},[228,108443,108444,108446,108448,108450],{"class":230,"line":1308},[228,108445,30852],{"class":234},[228,108447,47378],{"class":287},[228,108449,47381],{"class":234},[228,108451,47384],{"class":238},[228,108453,108454],{"class":230,"line":1314},[228,108455,2514],{"emptyLinePlaceholder":157},[228,108457,108458],{"class":230,"line":1328},[228,108459,2514],{"emptyLinePlaceholder":157},[228,108461,108462,108464,108466],{"class":230,"line":1334},[228,108463,101429],{"class":287},[228,108465,13679],{"class":234},[228,108467,101434],{"class":343},[228,108469,108470],{"class":230,"line":1425},[228,108471,108472],{"class":343},"\u003Cmujoco model=\"renderer_demo\">\n",[228,108474,108475],{"class":230,"line":1431},[228,108476,101444],{"class":343},[228,108478,108479],{"class":230,"line":1443},[228,108480,2514],{"emptyLinePlaceholder":157},[228,108482,108483],{"class":230,"line":1726},[228,108484,101453],{"class":343},[228,108486,108487],{"class":230,"line":1731},[228,108488,108202],{"class":343},[228,108490,108491],{"class":230,"line":1737},[228,108492,108493],{"class":343},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[228,108495,108496],{"class":230,"line":1742},[228,108497,108207],{"class":343},[228,108499,108500],{"class":230,"line":1756},[228,108501,2514],{"emptyLinePlaceholder":157},[228,108503,108504],{"class":230,"line":1761},[228,108505,101467],{"class":343},[228,108507,108508],{"class":230,"line":1767},[228,108509,101472],{"class":343},[228,108511,108512],{"class":230,"line":1788},[228,108513,108224],{"class":343},[228,108515,108516],{"class":230,"line":1793},[228,108517,101482],{"class":343},[228,108519,108520],{"class":230,"line":1807},[228,108521,101487],{"class":343},[228,108523,108524],{"class":230,"line":1812},[228,108525,101492],{"class":343},[228,108527,108528],{"class":230,"line":1841},[228,108529,95813],{"class":343},[228,108531,108532],{"class":230,"line":1846},[228,108533,2514],{"emptyLinePlaceholder":157},[228,108535,108536],{"class":230,"line":1863},[228,108537,2514],{"emptyLinePlaceholder":157},[228,108539,108540,108542,108544,108546,108548],{"class":230,"line":1868},[228,108541,32062],{"class":234},[228,108543,2087],{"class":2077},[228,108545,101513],{"class":238},[228,108547,95801],{"class":287},[228,108549,3853],{"class":238},[228,108551,108552,108554,108556,108558,108560],{"class":230,"line":1873},[228,108553,101522],{"class":238},[228,108555,284],{"class":234},[228,108557,101527],{"class":238},[228,108559,101429],{"class":287},[228,108561,245],{"class":238},[228,108563,108564,108566,108568],{"class":230,"line":1878},[228,108565,101536],{"class":238},[228,108567,284],{"class":234},[228,108569,101541],{"class":238},[228,108571,108572,108575,108577,108579,108581,108583,108585,108587,108589,108591,108593],{"class":230,"line":1892},[228,108573,108574],{"class":238},"    renderer ",[228,108576,284],{"class":234},[228,108578,107989],{"class":238},[228,108580,25097],{"class":5331},[228,108582,284],{"class":234},[228,108584,42457],{"class":287},[228,108586,12550],{"class":238},[228,108588,25093],{"class":5331},[228,108590,284],{"class":234},[228,108592,108004],{"class":287},[228,108594,245],{"class":238},[228,108596,108597],{"class":230,"line":1897},[228,108598,2514],{"emptyLinePlaceholder":157},[228,108600,108601,108603,108605,108607,108609,108611,108613],{"class":230,"line":2691},[228,108602,3315],{"class":234},[228,108604,101616],{"class":238},[228,108606,26159],{"class":234},[228,108608,32558],{"class":287},[228,108610,239],{"class":238},[228,108612,549],{"class":287},[228,108614,30901],{"class":238},[228,108616,108617],{"class":230,"line":2705},[228,108618,101631],{"class":238},[228,108620,108621],{"class":230,"line":2713},[228,108622,2514],{"emptyLinePlaceholder":157},[228,108624,108625,108628,108631,108633,108636],{"class":230,"line":2718},[228,108626,108627],{"class":238},"    renderer.update_scene(data, ",[228,108629,108630],{"class":5331},"camera",[228,108632,284],{"class":234},[228,108634,108635],{"class":343},"\"fixed_camera\"",[228,108637,245],{"class":238},[228,108639,108640,108643,108645],{"class":230,"line":2724},[228,108641,108642],{"class":238},"    image ",[228,108644,284],{"class":234},[228,108646,107700],{"class":238},[228,108648,108649],{"class":230,"line":2730},[228,108650,2514],{"emptyLinePlaceholder":157},[228,108652,108653,108656,108658,108661,108663],{"class":230,"line":2735},[228,108654,108655],{"class":238},"    output_path ",[228,108657,284],{"class":234},[228,108659,108660],{"class":238}," Path(",[228,108662,108130],{"class":343},[228,108664,245],{"class":238},[228,108666,108667],{"class":230,"line":8063},[228,108668,108669],{"class":238},"    Image.fromarray(image).save(output_path)\n",[228,108671,108672],{"class":230,"line":8087},[228,108673,108674],{"class":238},"    renderer.close()\n",[228,108676,108677],{"class":230,"line":8092},[228,108678,2514],{"emptyLinePlaceholder":157},[228,108680,108681,108683,108685,108688],{"class":230,"line":8098},[228,108682,31414],{"class":287},[228,108684,239],{"class":238},[228,108686,108687],{"class":343},"\"saved:\"",[228,108689,108690],{"class":238},", output_path.resolve())\n",[228,108692,108693,108695,108697,108700],{"class":230,"line":8125},[228,108694,31414],{"class":287},[228,108696,239],{"class":238},[228,108698,108699],{"class":343},"\"image shape:\"",[228,108701,108702],{"class":238},", image.shape)\n",[228,108704,108705],{"class":230,"line":8130},[228,108706,2514],{"emptyLinePlaceholder":157},[228,108708,108709],{"class":230,"line":8136},[228,108710,2514],{"emptyLinePlaceholder":157},[228,108712,108713,108715,108717,108719,108721],{"class":230,"line":8148},[228,108714,1645],{"class":234},[228,108716,31335],{"class":287},[228,108718,101674],{"class":234},[228,108720,101677],{"class":343},[228,108722,3853],{"class":238},[228,108724,108725],{"class":230,"line":8160},[228,108726,101684],{"class":238},[19,108728,103685],{},[220,108730,108732],{"className":23937,"code":108731,"language":23939,"meta":141,"style":141},"touch ch5_renderer.py\n",[30,108733,108734],{"__ignoreMap":141},[228,108735,108736,108738],{"class":230,"line":231},[228,108737,101398],{"class":2077},[228,108739,108740],{"class":343}," ch5_renderer.py\n",[200,108742,101687],{"id":101687},[19,108744,108745],{},"viewer 上下文：",[220,108747,108749],{"className":30493,"code":108748,"language":30495,"meta":141,"style":141},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[30,108750,108751],{"__ignoreMap":141},[228,108752,108753,108755,108757,108759],{"class":230,"line":231},[228,108754,107948],{"class":234},[228,108756,107951],{"class":238},[228,108758,31498],{"class":234},[228,108760,107956],{"class":238},[19,108762,108763,108765],{},[30,108764,107948],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,108767,108768],{},"窗口循环：",[220,108770,108772],{"className":30493,"code":108771,"language":30495,"meta":141,"style":141},"while viewer.is_running() and data.time \u003C 5.0:\n",[30,108773,108774],{"__ignoreMap":141},[228,108775,108776,108779,108781,108783,108785,108787,108789],{"class":230,"line":231},[228,108777,108778],{"class":234},"while",[228,108780,108302],{"class":238},[228,108782,30577],{"class":234},[228,108784,108307],{"class":238},[228,108786,1148],{"class":234},[228,108788,108312],{"class":287},[228,108790,3853],{"class":238},[19,108792,108793],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,108795,108796],{},"固定相机：",[220,108798,108800],{"className":53182,"code":108799,"language":53184,"meta":141,"style":141},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[30,108801,108802],{"__ignoreMap":141},[228,108803,108804,108806,108808,108810,108812,108814,108816,108818,108821,108824,108826,108829],{"class":230,"line":231},[228,108805,1148],{"class":238},[228,108807,108630],{"class":51415},[228,108809,15035],{"class":2077},[228,108811,284],{"class":238},[228,108813,108635],{"class":343},[228,108815,101221],{"class":2077},[228,108817,284],{"class":238},[228,108819,108820],{"class":343},"\"1.5 -2.0 1.2\"",[228,108822,108823],{"class":2077}," xyaxes",[228,108825,284],{"class":238},[228,108827,108828],{"class":343},"\"1 0.75 0 0 0 1\"",[228,108830,101259],{"class":238},[19,108832,108833],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[200,108835,108837],{"id":108836},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[220,108839,108841],{"className":30493,"code":108840,"language":30495,"meta":141,"style":141},"import time\n",[30,108842,108843],{"__ignoreMap":141},[228,108844,108845,108847],{"class":230,"line":231},[228,108846,30507],{"class":234},[228,108848,31944],{"class":238},[19,108850,108851],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[220,108853,108855],{"className":30493,"code":108854,"language":30495,"meta":141,"style":141},"import mujoco\nimport mujoco.viewer\n",[30,108856,108857,108863],{"__ignoreMap":141},[228,108858,108859,108861],{"class":230,"line":231},[228,108860,30507],{"class":234},[228,108862,101416],{"class":238},[228,108864,108865,108867],{"class":230,"line":142},[228,108866,30507],{"class":234},[228,108868,107667],{"class":238},[19,108870,108871],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[220,108873,108874],{"className":30493,"code":108748,"language":30495,"meta":141,"style":141},[30,108875,108876],{"__ignoreMap":141},[228,108877,108878,108880,108882,108884],{"class":230,"line":231},[228,108879,107948],{"class":234},[228,108881,107951],{"class":238},[228,108883,31498],{"class":234},[228,108885,107956],{"class":238},[19,108887,108888,108889,108892],{},"打开一个 viewer 窗口。",[30,108890,108891],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[220,108894,108895],{"className":30493,"code":108771,"language":30495,"meta":141,"style":141},[30,108896,108897],{"__ignoreMap":141},[228,108898,108899,108901,108903,108905,108907,108909,108911],{"class":230,"line":231},[228,108900,108778],{"class":234},[228,108902,108302],{"class":238},[228,108904,30577],{"class":234},[228,108906,108307],{"class":238},[228,108908,1148],{"class":234},[228,108910,108312],{"class":287},[228,108912,3853],{"class":238},[19,108914,108915,108916,108919],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[30,108917,108918],{},"viewer.is_running()"," 会变成 false，循环结束。",[220,108921,108923],{"className":30493,"code":108922,"language":30495,"meta":141,"style":141},"step_start = time.time()\n",[30,108924,108925],{"__ignoreMap":141},[228,108926,108927,108930,108932],{"class":230,"line":231},[228,108928,108929],{"class":238},"step_start ",[228,108931,284],{"class":234},[228,108933,108324],{"class":238},[19,108935,108936],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[220,108938,108939],{"className":30493,"code":108033,"language":30495,"meta":141,"style":141},[30,108940,108941,108945],{"__ignoreMap":141},[228,108942,108943],{"class":230,"line":231},[228,108944,104620],{"class":238},[228,108946,108947],{"class":230,"line":142},[228,108948,108044],{"class":238},[19,108950,108951,108953,108954,108956,108957,108959,108960,108963],{},[30,108952,101330],{}," 推进物理仿真。",[30,108955,108052],{}," 把最新的 ",[30,108958,33516],{}," 同步到窗口里显示。没有 ",[30,108961,108962],{},"sync()","，窗口可能看不到最新状态。",[220,108965,108966],{"className":30493,"code":108063,"language":30495,"meta":141,"style":141},[30,108967,108968],{"__ignoreMap":141},[228,108969,108970,108972,108974,108976,108978,108980,108982],{"class":230,"line":231},[228,108971,108070],{"class":238},[228,108973,284],{"class":234},[228,108975,108075],{"class":238},[228,108977,770],{"class":234},[228,108979,108080],{"class":238},[228,108981,770],{"class":234},[228,108983,108085],{"class":238},[19,108985,108986],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[220,108988,108990],{"className":30493,"code":108989,"language":30495,"meta":141,"style":141},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[30,108991,108992,109004],{"__ignoreMap":141},[228,108993,108994,108996,108998,109000,109002],{"class":230,"line":231},[228,108995,1645],{"class":234},[228,108997,108362],{"class":238},[228,108999,1198],{"class":234},[228,109001,4207],{"class":287},[228,109003,3853],{"class":238},[228,109005,109006],{"class":230,"line":142},[228,109007,109008],{"class":238},"    time.sleep(sleep_time)\n",[19,109010,109011],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[200,109013,109015],{"id":109014},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[220,109017,109019],{"className":30493,"code":109018,"language":30495,"meta":141,"style":141},"from pathlib import Path\n",[30,109020,109021],{"__ignoreMap":141},[228,109022,109023,109025,109027,109029],{"class":230,"line":231},[228,109024,30852],{"class":234},[228,109026,108426],{"class":238},[228,109028,30507],{"class":234},[228,109030,108431],{"class":238},[19,109032,109033,109034,109037,109038,109041],{},"导入 ",[30,109035,109036],{},"Path","，用来处理文件路径。相比直接写字符串，",[30,109039,109040],{},"Path(\"render_output.png\")"," 更清晰。",[220,109043,109045],{"className":30493,"code":109044,"language":30495,"meta":141,"style":141},"from PIL import Image\n",[30,109046,109047],{"__ignoreMap":141},[228,109048,109049,109051,109053,109055],{"class":230,"line":231},[228,109050,30852],{"class":234},[228,109052,47378],{"class":287},[228,109054,47381],{"class":234},[228,109056,47384],{"class":238},[19,109058,109059],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[220,109061,109062],{"className":53182,"code":108799,"language":53184,"meta":141,"style":141},[30,109063,109064],{"__ignoreMap":141},[228,109065,109066,109068,109070,109072,109074,109076,109078,109080,109082,109084,109086,109088],{"class":230,"line":231},[228,109067,1148],{"class":238},[228,109069,108630],{"class":51415},[228,109071,15035],{"class":2077},[228,109073,284],{"class":238},[228,109075,108635],{"class":343},[228,109077,101221],{"class":2077},[228,109079,284],{"class":238},[228,109081,108820],{"class":343},[228,109083,108823],{"class":2077},[228,109085,284],{"class":238},[228,109087,108828],{"class":343},[228,109089,101259],{"class":238},[19,109091,109092,109093,109095,109096,109098,109099,109102,109103,109105],{},"定义一个相机。",[30,109094,79925],{}," 是相机名字。",[30,109097,104261],{}," 是相机在世界里的位置。",[30,109100,109101],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[30,109104,104261],{}," 来调视角。",[220,109107,109109],{"className":30493,"code":109108,"language":30495,"meta":141,"style":141},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[30,109110,109111],{"__ignoreMap":141},[228,109112,109113,109115,109117,109119,109121,109123,109125,109127,109129,109131,109133],{"class":230,"line":231},[228,109114,107685],{"class":238},[228,109116,284],{"class":234},[228,109118,107989],{"class":238},[228,109120,25097],{"class":5331},[228,109122,284],{"class":234},[228,109124,42457],{"class":287},[228,109126,12550],{"class":238},[228,109128,25093],{"class":5331},[228,109130,284],{"class":234},[228,109132,108004],{"class":287},[228,109134,245],{"class":238},[19,109136,109137,109138,101133,109140,109142],{},"创建离屏渲染器。",[30,109139,25097],{},[30,109141,25093],{}," 决定输出图片大小。",[220,109144,109145],{"className":30493,"code":101791,"language":30495,"meta":141,"style":141},[30,109146,109147,109163],{"__ignoreMap":141},[228,109148,109149,109151,109153,109155,109157,109159,109161],{"class":230,"line":231},[228,109150,3139],{"class":234},[228,109152,101616],{"class":238},[228,109154,26159],{"class":234},[228,109156,32558],{"class":287},[228,109158,239],{"class":238},[228,109160,549],{"class":287},[228,109162,30901],{"class":238},[228,109164,109165],{"class":230,"line":142},[228,109166,101814],{"class":238},[19,109168,109169],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[220,109171,109173],{"className":30493,"code":109172,"language":30495,"meta":141,"style":141},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[30,109174,109175],{"__ignoreMap":141},[228,109176,109177,109180,109182,109184,109186],{"class":230,"line":231},[228,109178,109179],{"class":238},"renderer.update_scene(data, ",[228,109181,108630],{"class":5331},[228,109183,284],{"class":234},[228,109185,108635],{"class":343},[228,109187,245],{"class":238},[19,109189,109190,109191,109193,109194,109197],{},"告诉 renderer：用当前 ",[30,109192,33516],{}," 的状态更新画面，并使用名为 ",[30,109195,109196],{},"fixed_camera"," 的相机视角。",[220,109199,109200],{"className":30493,"code":108095,"language":30495,"meta":141,"style":141},[30,109201,109202],{"__ignoreMap":141},[228,109203,109204,109206,109208],{"class":230,"line":231},[228,109205,107695],{"class":238},[228,109207,284],{"class":234},[228,109209,107700],{"class":238},[19,109211,109212,109213,109216],{},"真正渲染出图像。",[30,109214,109215],{},"image"," 是一个 NumPy 数组，不是文件。",[220,109218,109220],{"className":30493,"code":109219,"language":30495,"meta":141,"style":141},"Image.fromarray(image).save(output_path)\n",[30,109221,109222],{"__ignoreMap":141},[228,109223,109224],{"class":230,"line":231},[228,109225,109219],{"class":238},[19,109227,109228,109229,78],{},"把数组转换成图片，并保存到 ",[30,109230,109231],{},"render_output.png",[220,109233,109235],{"className":30493,"code":109234,"language":30495,"meta":141,"style":141},"renderer.close()\n",[30,109236,109237],{"__ignoreMap":141},[228,109238,109239],{"class":230,"line":231},[228,109240,109234],{"class":238},[19,109242,109243],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,109245,102431],{"id":102430},[19,109247,109248,109249,109251,109252,78],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[30,109250,109231],{},"，并输出图像数组形状，例如 ",[30,109253,109254],{},"(480, 640, 3)",[19,109256,109257],{},"如果图片里看不到方块，先检查：",[183,109259,109260,109263,109266],{},[186,109261,109262],{},"方块是否掉到相机视野外。",[186,109264,109265],{},"camera 位置是否合理。",[186,109267,109268,109269,109272],{},"是否在 ",[30,109270,109271],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,109274,102463],{"id":102462},[19,109276,109277],{},"运行 viewer:",[220,109279,109281],{"className":23937,"code":109280,"language":23939,"meta":141,"style":141},"python ch5_viewer.py\n",[30,109282,109283],{"__ignoreMap":141},[228,109284,109285,109287],{"class":230,"line":231},[228,109286,30495],{"class":2077},[228,109288,108411],{"class":343},[19,109290,109291],{},"运行 renderer:",[220,109293,109295],{"className":23937,"code":109294,"language":23939,"meta":141,"style":141},"python ch5_renderer.py\n",[30,109296,109297],{"__ignoreMap":141},[228,109298,109299,109301],{"class":230,"line":231},[228,109300,30495],{"class":2077},[228,109302,108740],{"class":343},[19,109304,109305],{},"如果在服务器上运行:",[220,109307,109309],{"className":23937,"code":109308,"language":23939,"meta":141,"style":141},"MUJOCO_GL=egl python ch5_renderer.py\n",[30,109310,109311],{"__ignoreMap":141},[228,109312,109313,109315,109317,109319,109322],{"class":230,"line":231},[228,109314,107929],{"class":238},[228,109316,284],{"class":234},[228,109318,107919],{"class":343},[228,109320,109321],{"class":2077}," python",[228,109323,108740],{"class":343},[19,109325,107897],{},[220,109327,109329],{"className":23937,"code":109328,"language":23939,"meta":141,"style":141},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[30,109330,109331],{"__ignoreMap":141},[228,109332,109333,109335,109337,109339,109341],{"class":230,"line":231},[228,109334,107929],{"class":238},[228,109336,284],{"class":234},[228,109338,107923],{"class":343},[228,109340,109321],{"class":2077},[228,109342,108740],{"class":343},[19,109344,109345],{},"再做几个练习：",[183,109347,109348,109355,109358,109364],{},[186,109349,109350,109351,109354],{},"把 renderer 分辨率改成 ",[30,109352,109353],{},"height=240, width=320","，观察输出 shape。",[186,109356,109357],{},"把方块颜色改成蓝色，重新保存图片。",[186,109359,109360,109361,109363],{},"把相机 ",[30,109362,104261],{}," 改远一点，观察画面中物体是否变小。",[186,109365,109366,109367,102529,109370,109373],{},"把 viewer 示例中的 ",[30,109368,109369],{},"data.time \u003C 5.0",[30,109371,109372],{},"data.time \u003C 20.0","，观察更长时间。",[14,109375,102568],{"id":102567},[200,109377,109379],{"id":109378},"viewer-窗口打不开","viewer 窗口打不开",[19,109381,109382],{},"安装:",[220,109384,109386],{"className":23937,"code":109385,"language":23939,"meta":141,"style":141},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[30,109387,109388],{"__ignoreMap":141},[228,109389,109390,109392,109394,109396,109398,109400,109402,109404,109406,109408,109410],{"class":230,"line":231},[228,109391,24692],{"class":2077},[228,109393,26431],{"class":343},[228,109395,23949],{"class":343},[228,109397,26516],{"class":287},[228,109399,102621],{"class":343},[228,109401,100949],{"class":343},[228,109403,102626],{"class":343},[228,109405,100962],{"class":343},[228,109407,100968],{"class":343},[228,109409,100959],{"class":343},[228,109411,109412],{"class":343}," libXinerama\n",[200,109414,109416],{"id":109415},"glfwerror",[30,109417,109418],{},"GLFWError",[19,109420,109421],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[200,109423,109425],{"id":109424},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,109427,109428,109429,82654,109431,109433],{},"尝试 ",[30,109430,101152],{},[30,109432,101155],{},"。可能存在版本差异。",[200,109435,109436],{"id":109436},"保存图片是黑的",[19,109438,102690],{},[183,109440,109441,109444,109447,109457],{},[186,109442,109443],{},"XML 里是否有 light。",[186,109445,109446],{},"相机是否对着模型。",[186,109448,109449,109450,109453,109454,78],{},"是否先 ",[30,109451,109452],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[30,109455,109456],{},"renderer.render()",[186,109458,109459],{},"物体是否已经掉出视野。",[200,109461,109462],{"id":109462},"远程服务器没有显示器",[19,109464,109465],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[220,109467,109468],{"className":23937,"code":109308,"language":23939,"meta":141,"style":141},[30,109469,109470],{"__ignoreMap":141},[228,109471,109472,109474,109476,109478,109480],{"class":230,"line":231},[228,109473,107929],{"class":238},[228,109475,284],{"class":234},[228,109477,107919],{"class":343},[228,109479,109321],{"class":2077},[228,109481,108740],{"class":343},[19,109483,109484],{},"如果 EGL 不可用，再尝试：",[220,109486,109487],{"className":23937,"code":109328,"language":23939,"meta":141,"style":141},[30,109488,109489],{"__ignoreMap":141},[228,109490,109491,109493,109495,109497,109499],{"class":230,"line":231},[228,109492,107929],{"class":238},[228,109494,284],{"class":234},[228,109496,107923],{"class":343},[228,109498,109321],{"class":2077},[228,109500,108740],{"class":343},[14,109502,102722],{"id":102721},[19,109504,109505],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[183,109507,109508,109511,109514],{},[186,109509,109510],{},"先用 viewer 看模型和控制是否正常。",[186,109512,109513],{},"再用 renderer 保存图片或构造视觉观测。",[186,109515,109516],{},"最后把状态、动作、图像、奖励组织成训练数据。",[5241,109518,109519],{},"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":141,"searchDepth":142,"depth":142,"links":109521},[109522,109523,109524,109529,109534,109535,109536,109543],{"id":100761,"depth":142,"text":100762},{"id":100884,"depth":142,"text":100885},{"id":101159,"depth":142,"text":101160,"children":109525},[109526,109527,109528],{"id":108026,"depth":1293,"text":108027},{"id":108056,"depth":1293,"text":108057},{"id":108091,"depth":1293,"text":108092},{"id":101367,"depth":142,"text":101368,"children":109530},[109531,109532,109533],{"id":101687,"depth":1293,"text":101687},{"id":108836,"depth":1293,"text":108837},{"id":109014,"depth":1293,"text":109015},{"id":102430,"depth":142,"text":102431},{"id":102462,"depth":142,"text":102463},{"id":102567,"depth":142,"text":102568,"children":109537},[109538,109539,109540,109541,109542],{"id":109378,"depth":1293,"text":109379},{"id":109415,"depth":1293,"text":109418},{"id":109424,"depth":1293,"text":109425},{"id":109436,"depth":1293,"text":109436},{"id":109462,"depth":1293,"text":109462},{"id":102721,"depth":142,"text":102722},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107634,"description":141},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109550,"title":109551,"body":109552,"description":141,"extension":155,"meta":111463,"navigation":157,"path":111464,"seo":111465,"stem":111466,"__hash__":111467},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109553,"toc":111439},[109554,109557,109559,109562,109564,109583,109586,109592,109595,109597,109599,109623,109625,109639,109641,109682,109684,109695,109697,109700,109706,109709,109743,109746,109778,109781,109813,109817,109820,109860,109863,109869,109872,109878,109882,109885,109891,109894,109898,109901,109941,109943,109956,109959,109961,110543,110545,110557,110560,110571,110573,110576,110595,110607,110610,110631,110634,110637,110680,110683,110686,110706,110713,110715,110733,110748,110751,110757,110760,110766,110783,110790,110821,110832,110866,110877,110894,110903,110911,110916,110930,110933,110954,110960,110974,110979,111009,111019,111044,111052,111075,111078,111094,111097,111105,111111,111133,111146,111167,111176,111215,111226,111228,111231,111237,111240,111243,111249,111252,111272,111275,111277,111316,111318,111321,111329,111332,111335,111362,111365,111375,111381,111384,111390,111392,111398,111402,111405,111407,111410,111434,111437],[10,109555,109551],{"id":109556},"_6控制任务cartpole",[14,109558,100762],{"id":100761},[19,109560,109561],{},"本章搭建一个最小 Cartpole 控制任务。",[19,109563,104446],{},[183,109565,109566,109569,109571,109574,109577,109580],{},[186,109567,109568],{},"slide joint",[186,109570,106299],{},[186,109572,109573],{},"cart force actuator",[186,109575,109576],{},"状态观测",[186,109578,109579],{},"简单控制循环",[186,109581,109582],{},"reward 设计雏形",[19,109584,109585],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[220,109587,109590],{"className":109588,"code":109589,"language":5302,"meta":141},[5300],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[30,109591,109589],{"__ignoreMap":141},[19,109593,109594],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,109596,100885],{"id":100884},[19,109598,100888],{},[220,109600,109601],{"className":23937,"code":104503,"language":23939,"meta":141,"style":141},[30,109602,109603],{"__ignoreMap":141},[228,109604,109605,109607,109609,109611,109613,109615,109617,109619,109621],{"class":230,"line":231},[228,109606,24692],{"class":2077},[228,109608,26431],{"class":343},[228,109610,23949],{"class":343},[228,109612,26516],{"class":287},[228,109614,104518],{"class":343},[228,109616,100913],{"class":343},[228,109618,102616],{"class":343},[228,109620,100929],{"class":343},[228,109622,104527],{"class":343},[19,109624,102934],{},[220,109626,109627],{"className":23937,"code":101034,"language":23939,"meta":141,"style":141},[30,109628,109629],{"__ignoreMap":141},[228,109630,109631,109633,109635,109637],{"class":230,"line":231},[228,109632,23946],{"class":2077},[228,109634,23949],{"class":343},[228,109636,101045],{"class":343},[228,109638,101048],{"class":343},[19,109640,102951],{},[220,109642,109644],{"className":23937,"code":109643,"language":23939,"meta":141,"style":141},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[30,109645,109646,109663,109672],{"__ignoreMap":141},[228,109647,109648,109650,109652,109654,109657,109659,109661],{"class":230,"line":231},[228,109649,30445],{"class":2077},[228,109651,29291],{"class":343},[228,109653,25231],{"class":287},[228,109655,109656],{"class":343}," mujoco-cartpole",[228,109658,101090],{"class":343},[228,109660,101093],{"class":287},[228,109662,101096],{"class":287},[228,109664,109665,109667,109669],{"class":230,"line":142},[228,109666,30445],{"class":2077},[228,109668,101103],{"class":343},[228,109670,109671],{"class":343}," mujoco-cartpole\n",[228,109673,109674,109676,109678,109680],{"class":230,"line":1293},[228,109675,23946],{"class":2077},[228,109677,23949],{"class":343},[228,109679,101045],{"class":343},[228,109681,101048],{"class":343},[19,109683,101119],{},[183,109685,109686,109689,109692],{},[186,109687,109688],{},"本章不依赖 Gymnasium。",[186,109690,109691],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[186,109693,109694],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,109696,101160],{"id":101159},[19,109698,109699],{},"Cartpole 的模型结构:",[220,109701,109704],{"className":109702,"code":109703,"language":5302,"meta":141},[5300],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[30,109705,109703],{"__ignoreMap":141},[19,109707,109708],{},"小车通过 slide joint 左右移动:",[220,109710,109712],{"className":53182,"code":109711,"language":53184,"meta":141,"style":141},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[30,109713,109714],{"__ignoreMap":141},[228,109715,109716,109718,109720,109722,109724,109727,109729,109731,109734,109736,109738,109741],{"class":230,"line":231},[228,109717,1148],{"class":238},[228,109719,103071],{"class":51415},[228,109721,15035],{"class":2077},[228,109723,284],{"class":238},[228,109725,109726],{"class":343},"\"cart_x\"",[228,109728,53939],{"class":2077},[228,109730,284],{"class":238},[228,109732,109733],{"class":343},"\"slide\"",[228,109735,106143],{"class":2077},[228,109737,284],{"class":238},[228,109739,109740],{"class":343},"\"1 0 0\"",[228,109742,101259],{"class":238},[19,109744,109745],{},"杆子通过 hinge joint 旋转:",[220,109747,109749],{"className":53182,"code":109748,"language":53184,"meta":141,"style":141},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[30,109750,109751],{"__ignoreMap":141},[228,109752,109753,109755,109757,109759,109761,109764,109766,109768,109770,109772,109774,109776],{"class":230,"line":231},[228,109754,1148],{"class":238},[228,109756,103071],{"class":51415},[228,109758,15035],{"class":2077},[228,109760,284],{"class":238},[228,109762,109763],{"class":343},"\"pole_hinge\"",[228,109765,53939],{"class":2077},[228,109767,284],{"class":238},[228,109769,106134],{"class":343},[228,109771,106143],{"class":2077},[228,109773,284],{"class":238},[228,109775,106148],{"class":343},[228,109777,101259],{"class":238},[19,109779,109780],{},"控制力作用在小车 slide joint 上:",[220,109782,109784],{"className":53182,"code":109783,"language":53184,"meta":141,"style":141},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[30,109785,109786],{"__ignoreMap":141},[228,109787,109788,109790,109792,109794,109796,109799,109801,109803,109805,109807,109809,109811],{"class":230,"line":231},[228,109789,1148],{"class":238},[228,109791,106189],{"class":51415},[228,109793,15035],{"class":2077},[228,109795,284],{"class":238},[228,109797,109798],{"class":343},"\"cart_motor\"",[228,109800,106199],{"class":2077},[228,109802,284],{"class":238},[228,109804,109726],{"class":343},[228,109806,106206],{"class":2077},[228,109808,284],{"class":238},[228,109810,54431],{"class":343},[228,109812,101259],{"class":238},[200,109814,109816],{"id":109815},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,109818,109819],{},"这个简化模型有两个关节：",[376,109821,109822,109833],{},[379,109823,109824],{},[382,109825,109826,109828,109830],{},[385,109827,102874],{"align":23851},[385,109829,23852],{"align":23851},[385,109831,109832],{"align":23851},"对应状态",[423,109834,109835,109848],{},[382,109836,109837,109842,109845],{},[428,109838,109839],{"align":23851},[30,109840,109841],{},"cart_x",[428,109843,109844],{"align":23851},"slide",[428,109846,109847],{"align":23851},"小车 x 位置",[382,109849,109850,109855,109857],{},[428,109851,109852],{"align":23851},[30,109853,109854],{},"pole_hinge",[428,109856,105955],{"align":23851},[428,109858,109859],{"align":23851},"杆子角度",[19,109861,109862],{},"所以：",[220,109864,109867],{"className":109865,"code":109866,"language":5302,"meta":141},[5300],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[30,109868,109866],{"__ignoreMap":141},[19,109870,109871],{},"把它们拼起来就是观测：",[220,109873,109876],{"className":109874,"code":109875,"language":5302,"meta":141},[5300],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[30,109877,109875],{"__ignoreMap":141},[200,109879,109881],{"id":109880},"action-是什么","action 是什么",[19,109883,109884],{},"本章只有一个 actuator：",[220,109886,109889],{"className":109887,"code":109888,"language":5302,"meta":141},[5300],"data.ctrl[0] = action\n",[30,109890,109888],{"__ignoreMap":141},[19,109892,109893],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[200,109895,109897],{"id":109896},"reward-是什么","reward 是什么",[19,109899,109900],{},"奖励函数：",[220,109902,109904],{"className":30493,"code":109903,"language":30495,"meta":141,"style":141},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[30,109905,109906],{"__ignoreMap":141},[228,109907,109908,109910,109913,109915,109917,109919,109922,109924,109927,109929,109931,109933,109936,109938],{"class":230,"line":231},[228,109909,17161],{"class":234},[228,109911,109912],{"class":287}," float",[228,109914,239],{"class":238},[228,109916,102518],{"class":287},[228,109918,52386],{"class":234},[228,109920,109921],{"class":287}," 0.1",[228,109923,6633],{"class":234},[228,109925,109926],{"class":238}," cart_x ",[228,109928,693],{"class":234},[228,109930,109926],{"class":238},[228,109932,770],{"class":234},[228,109934,109935],{"class":238}," pole_angle ",[228,109937,693],{"class":234},[228,109939,109940],{"class":238}," pole_angle)\n",[19,109942,106341],{},[183,109944,109945,109950,109953],{},[186,109946,109947,109948,78],{},"基础奖励是 ",[30,109949,102518],{},[186,109951,109952],{},"小车离中心越远，扣分越多。",[186,109954,109955],{},"杆子角度越大，扣分越多。",[19,109957,109958],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,109960,101368],{"id":101367},[220,109962,109964],{"className":30493,"code":109963,"language":30495,"meta":141,"style":141},"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",[30,109965,109966,109972,109982,109986,109990,109998,110003,110007,110011,110015,110020,110024,110029,110034,110039,110043,110048,110053,110058,110062,110066,110070,110074,110078,110083,110087,110091,110095,110099,110103,110113,110120,110124,110128,110142,110156,110169,110199,110203,110207,110219,110231,110239,110243,110256,110260,110264,110273,110277,110293,110303,110316,110329,110333,110356,110374,110378,110390,110394,110398,110408,110418,110422,110438,110479,110483,110503,110519,110523,110527,110539],{"__ignoreMap":141},[228,109967,109968,109970],{"class":230,"line":231},[228,109969,30507],{"class":234},[228,109971,101416],{"class":238},[228,109973,109974,109976,109978,109980],{"class":230,"line":142},[228,109975,30507],{"class":234},[228,109977,31495],{"class":238},[228,109979,31498],{"class":234},[228,109981,31501],{"class":238},[228,109983,109984],{"class":230,"line":1293},[228,109985,2514],{"emptyLinePlaceholder":157},[228,109987,109988],{"class":230,"line":1308},[228,109989,2514],{"emptyLinePlaceholder":157},[228,109991,109992,109994,109996],{"class":230,"line":1314},[228,109993,101429],{"class":287},[228,109995,13679],{"class":234},[228,109997,101434],{"class":343},[228,109999,110000],{"class":230,"line":1328},[228,110001,110002],{"class":343},"\u003Cmujoco model=\"cartpole\">\n",[228,110004,110005],{"class":230,"line":1334},[228,110006,101444],{"class":343},[228,110008,110009],{"class":230,"line":1425},[228,110010,2514],{"emptyLinePlaceholder":157},[228,110012,110013],{"class":230,"line":1431},[228,110014,101453],{"class":343},[228,110016,110017],{"class":230,"line":1443},[228,110018,110019],{"class":343},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[228,110021,110022],{"class":230,"line":1726},[228,110023,2514],{"emptyLinePlaceholder":157},[228,110025,110026],{"class":230,"line":1731},[228,110027,110028],{"class":343},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[228,110030,110031],{"class":230,"line":1737},[228,110032,110033],{"class":343},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[228,110035,110036],{"class":230,"line":1742},[228,110037,110038],{"class":343},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[228,110040,110041],{"class":230,"line":1756},[228,110042,2514],{"emptyLinePlaceholder":157},[228,110044,110045],{"class":230,"line":1761},[228,110046,110047],{"class":343},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[228,110049,110050],{"class":230,"line":1767},[228,110051,110052],{"class":343},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[228,110054,110055],{"class":230,"line":1788},[228,110056,110057],{"class":343},"        \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",[228,110059,110060],{"class":230,"line":1793},[228,110061,106553],{"class":343},[228,110063,110064],{"class":230,"line":1807},[228,110065,101482],{"class":343},[228,110067,110068],{"class":230,"line":1812},[228,110069,101487],{"class":343},[228,110071,110072],{"class":230,"line":1841},[228,110073,2514],{"emptyLinePlaceholder":157},[228,110075,110076],{"class":230,"line":1846},[228,110077,106570],{"class":343},[228,110079,110080],{"class":230,"line":1863},[228,110081,110082],{"class":343},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[228,110084,110085],{"class":230,"line":1868},[228,110086,106580],{"class":343},[228,110088,110089],{"class":230,"line":1873},[228,110090,101492],{"class":343},[228,110092,110093],{"class":230,"line":1878},[228,110094,95813],{"class":343},[228,110096,110097],{"class":230,"line":1892},[228,110098,2514],{"emptyLinePlaceholder":157},[228,110100,110101],{"class":230,"line":1897},[228,110102,2514],{"emptyLinePlaceholder":157},[228,110104,110105,110107,110110],{"class":230,"line":2691},[228,110106,32062],{"class":234},[228,110108,110109],{"class":2077}," get_observation",[228,110111,110112],{"class":238},"(data: mujoco.MjData) -> np.ndarray:\n",[228,110114,110115,110117],{"class":230,"line":2705},[228,110116,4204],{"class":234},[228,110118,110119],{"class":238}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[228,110121,110122],{"class":230,"line":2713},[228,110123,2514],{"emptyLinePlaceholder":157},[228,110125,110126],{"class":230,"line":2718},[228,110127,2514],{"emptyLinePlaceholder":157},[228,110129,110130,110132,110135,110138,110140],{"class":230,"line":2724},[228,110131,32062],{"class":234},[228,110133,110134],{"class":2077}," compute_reward",[228,110136,110137],{"class":238},"(obs: np.ndarray) -> ",[228,110139,278],{"class":287},[228,110141,3853],{"class":238},[228,110143,110144,110147,110149,110152,110154],{"class":230,"line":2730},[228,110145,110146],{"class":238},"    cart_x ",[228,110148,284],{"class":234},[228,110150,110151],{"class":238}," obs[",[228,110153,430],{"class":287},[228,110155,33361],{"class":238},[228,110157,110158,110161,110163,110165,110167],{"class":230,"line":2735},[228,110159,110160],{"class":238},"    pole_angle ",[228,110162,284],{"class":234},[228,110164,110151],{"class":238},[228,110166,456],{"class":287},[228,110168,33361],{"class":238},[228,110170,110171,110173,110175,110177,110179,110181,110183,110185,110187,110189,110191,110193,110195,110197],{"class":230,"line":8063},[228,110172,4204],{"class":234},[228,110174,109912],{"class":287},[228,110176,239],{"class":238},[228,110178,102518],{"class":287},[228,110180,52386],{"class":234},[228,110182,109921],{"class":287},[228,110184,6633],{"class":234},[228,110186,109926],{"class":238},[228,110188,693],{"class":234},[228,110190,109926],{"class":238},[228,110192,770],{"class":234},[228,110194,109935],{"class":238},[228,110196,693],{"class":234},[228,110198,109940],{"class":238},[228,110200,110201],{"class":230,"line":8087},[228,110202,2514],{"emptyLinePlaceholder":157},[228,110204,110205],{"class":230,"line":8092},[228,110206,2514],{"emptyLinePlaceholder":157},[228,110208,110209,110211,110213,110215,110217],{"class":230,"line":8098},[228,110210,32062],{"class":234},[228,110212,2087],{"class":2077},[228,110214,101513],{"class":238},[228,110216,95801],{"class":287},[228,110218,3853],{"class":238},[228,110220,110221,110223,110225,110227,110229],{"class":230,"line":8125},[228,110222,101522],{"class":238},[228,110224,284],{"class":234},[228,110226,101527],{"class":238},[228,110228,101429],{"class":287},[228,110230,245],{"class":238},[228,110232,110233,110235,110237],{"class":230,"line":8130},[228,110234,101536],{"class":238},[228,110236,284],{"class":234},[228,110238,101541],{"class":238},[228,110240,110241],{"class":230,"line":8136},[228,110242,2514],{"emptyLinePlaceholder":157},[228,110244,110245,110247,110249,110251,110253],{"class":230,"line":8148},[228,110246,105184],{"class":238},[228,110248,456],{"class":287},[228,110250,4557],{"class":238},[228,110252,284],{"class":234},[228,110254,110255],{"class":287}," 0.1\n",[228,110257,110258],{"class":230,"line":8160},[228,110259,105197],{"class":238},[228,110261,110262],{"class":230,"line":8172},[228,110263,2514],{"emptyLinePlaceholder":157},[228,110265,110266,110269,110271],{"class":230,"line":9831},[228,110267,110268],{"class":238},"    total_reward ",[228,110270,284],{"class":234},[228,110272,104876],{"class":287},[228,110274,110275],{"class":230,"line":9856},[228,110276,2514],{"emptyLinePlaceholder":157},[228,110278,110279,110281,110283,110285,110287,110289,110291],{"class":230,"line":9879},[228,110280,3315],{"class":234},[228,110282,31731],{"class":238},[228,110284,26159],{"class":234},[228,110286,32558],{"class":287},[228,110288,239],{"class":238},[228,110290,6525],{"class":287},[228,110292,30901],{"class":238},[228,110294,110295,110298,110300],{"class":230,"line":9903},[228,110296,110297],{"class":238},"        obs ",[228,110299,284],{"class":234},[228,110301,110302],{"class":238}," get_observation(data)\n",[228,110304,110305,110308,110310,110312,110314],{"class":230,"line":9908},[228,110306,110307],{"class":238},"        pole_angle ",[228,110309,284],{"class":234},[228,110311,110151],{"class":238},[228,110313,456],{"class":287},[228,110315,33361],{"class":238},[228,110317,110318,110321,110323,110325,110327],{"class":230,"line":9913},[228,110319,110320],{"class":238},"        pole_angular_velocity ",[228,110322,284],{"class":234},[228,110324,110151],{"class":238},[228,110326,310],{"class":287},[228,110328,33361],{"class":238},[228,110330,110331],{"class":230,"line":9918},[228,110332,2514],{"emptyLinePlaceholder":157},[228,110334,110335,110338,110340,110343,110345,110347,110349,110351,110353],{"class":230,"line":9927},[228,110336,110337],{"class":238},"        action ",[228,110339,284],{"class":234},[228,110341,110342],{"class":287}," 2.0",[228,110344,6633],{"class":234},[228,110346,109935],{"class":238},[228,110348,719],{"class":234},[228,110350,61982],{"class":287},[228,110352,6633],{"class":234},[228,110354,110355],{"class":238}," pole_angular_velocity\n",[228,110357,110358,110360,110362,110364,110366,110368,110370,110372],{"class":230,"line":9932},[228,110359,110337],{"class":238},[228,110361,284],{"class":234},[228,110363,107562],{"class":238},[228,110365,770],{"class":234},[228,110367,102518],{"class":287},[228,110369,12550],{"class":238},[228,110371,102518],{"class":287},[228,110373,245],{"class":238},[228,110375,110376],{"class":230,"line":9938},[228,110377,2514],{"emptyLinePlaceholder":157},[228,110379,110380,110382,110384,110386,110388],{"class":230,"line":9959},[228,110381,106732],{"class":238},[228,110383,430],{"class":287},[228,110385,4557],{"class":238},[228,110387,284],{"class":234},[228,110389,107585],{"class":238},[228,110391,110392],{"class":230,"line":9965},[228,110393,101631],{"class":238},[228,110395,110396],{"class":230,"line":9979},[228,110397,2514],{"emptyLinePlaceholder":157},[228,110399,110400,110403,110405],{"class":230,"line":9985},[228,110401,110402],{"class":238},"        reward ",[228,110404,284],{"class":234},[228,110406,110407],{"class":238}," compute_reward(get_observation(data))\n",[228,110409,110410,110413,110415],{"class":230,"line":10012},[228,110411,110412],{"class":238},"        total_reward ",[228,110414,9592],{"class":234},[228,110416,110417],{"class":238}," reward\n",[228,110419,110420],{"class":230,"line":10021},[228,110421,2514],{"emptyLinePlaceholder":157},[228,110423,110424,110426,110428,110430,110432,110434,110436],{"class":230,"line":10027},[228,110425,2611],{"class":234},[228,110427,31731],{"class":238},[228,110429,566],{"class":234},[228,110431,5869],{"class":287},[228,110433,101674],{"class":234},[228,110435,4207],{"class":287},[228,110437,3853],{"class":238},[228,110439,110440,110442,110444,110447,110450,110453,110456,110458,110461,110464,110466,110468,110470,110472,110475,110477],{"class":230,"line":10035},[228,110441,34765],{"class":287},[228,110443,239],{"class":238},[228,110445,110446],{"class":343},"\"step:\"",[228,110448,110449],{"class":238},", step, ",[228,110451,110452],{"class":343},"\"obs:\"",[228,110454,110455],{"class":238},", np.round(obs, ",[228,110457,310],{"class":287},[228,110459,110460],{"class":238},"), ",[228,110462,110463],{"class":343},"\"action:\"",[228,110465,12550],{"class":238},[228,110467,32133],{"class":287},[228,110469,239],{"class":238},[228,110471,278],{"class":287},[228,110473,110474],{"class":238},"(action), ",[228,110476,310],{"class":287},[228,110478,30612],{"class":238},[228,110480,110481],{"class":230,"line":10040},[228,110482,2514],{"emptyLinePlaceholder":157},[228,110484,110485,110487,110489,110492,110494,110496,110499,110501],{"class":230,"line":16719},[228,110486,31414],{"class":287},[228,110488,239],{"class":238},[228,110490,110491],{"class":343},"\"total_reward:\"",[228,110493,12550],{"class":238},[228,110495,32133],{"class":287},[228,110497,110498],{"class":238},"(total_reward, ",[228,110500,310],{"class":287},[228,110502,30612],{"class":238},[228,110504,110505,110507,110509,110512,110515,110517],{"class":230,"line":16725},[228,110506,31414],{"class":287},[228,110508,239],{"class":238},[228,110510,110511],{"class":343},"\"final obs:\"",[228,110513,110514],{"class":238},", np.round(get_observation(data), ",[228,110516,310],{"class":287},[228,110518,30612],{"class":238},[228,110520,110521],{"class":230,"line":16748},[228,110522,2514],{"emptyLinePlaceholder":157},[228,110524,110525],{"class":230,"line":16754},[228,110526,2514],{"emptyLinePlaceholder":157},[228,110528,110529,110531,110533,110535,110537],{"class":230,"line":16777},[228,110530,1645],{"class":234},[228,110532,31335],{"class":287},[228,110534,101674],{"class":234},[228,110536,101677],{"class":343},[228,110538,3853],{"class":238},[228,110540,110541],{"class":230,"line":16791},[228,110542,101684],{"class":238},[19,110544,103685],{},[220,110546,110548],{"className":23937,"code":110547,"language":23939,"meta":141,"style":141},"touch ch6_cartpole.py\n",[30,110549,110550],{"__ignoreMap":141},[228,110551,110552,110554],{"class":230,"line":231},[228,110553,101398],{"class":2077},[228,110555,110556],{"class":343}," ch6_cartpole.py\n",[19,110558,110559],{},"运行：",[220,110561,110563],{"className":23937,"code":110562,"language":23939,"meta":141,"style":141},"python ch6_cartpole.py\n",[30,110564,110565],{"__ignoreMap":141},[228,110566,110567,110569],{"class":230,"line":231},[228,110568,30495],{"class":2077},[228,110570,110556],{"class":343},[200,110572,101687],{"id":101687},[19,110574,110575],{},"构造观测：",[220,110577,110579],{"className":30493,"code":110578,"language":30495,"meta":141,"style":141},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[30,110580,110581,110589],{"__ignoreMap":141},[228,110582,110583,110585,110587],{"class":230,"line":231},[228,110584,32062],{"class":234},[228,110586,110109],{"class":2077},[228,110588,110112],{"class":238},[228,110590,110591,110593],{"class":230,"line":142},[228,110592,4204],{"class":234},[228,110594,110119],{"class":238},[19,110596,110597,110600,110601,110603,110604,110606],{},[30,110598,110599],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[30,110602,104145],{}," 2 维，",[30,110605,104475],{}," 2 维，所以 obs 是 4 维。",[19,110608,110609],{},"设置初始角度：",[220,110611,110613],{"className":30493,"code":110612,"language":30495,"meta":141,"style":141},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[30,110614,110615,110627],{"__ignoreMap":141},[228,110616,110617,110619,110621,110623,110625],{"class":230,"line":231},[228,110618,104814],{"class":238},[228,110620,456],{"class":287},[228,110622,4557],{"class":238},[228,110624,284],{"class":234},[228,110626,110255],{"class":287},[228,110628,110629],{"class":230,"line":142},[228,110630,104658],{"class":238},[19,110632,110633],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,110635,110636],{},"简单反馈控制：",[220,110638,110640],{"className":30493,"code":110639,"language":30495,"meta":141,"style":141},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[30,110641,110642,110662],{"__ignoreMap":141},[228,110643,110644,110646,110648,110650,110652,110654,110656,110658,110660],{"class":230,"line":231},[228,110645,107557],{"class":238},[228,110647,284],{"class":234},[228,110649,110342],{"class":287},[228,110651,6633],{"class":234},[228,110653,109935],{"class":238},[228,110655,719],{"class":234},[228,110657,61982],{"class":287},[228,110659,6633],{"class":234},[228,110661,110355],{"class":238},[228,110663,110664,110666,110668,110670,110672,110674,110676,110678],{"class":230,"line":142},[228,110665,107557],{"class":238},[228,110667,284],{"class":234},[228,110669,107562],{"class":238},[228,110671,770],{"class":234},[228,110673,102518],{"class":287},[228,110675,12550],{"class":238},[228,110677,102518],{"class":287},[228,110679,245],{"class":238},[19,110681,110682],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,110684,110685],{},"限制动作：",[220,110687,110689],{"className":30493,"code":110688,"language":30495,"meta":141,"style":141},"np.clip(action, -1.0, 1.0)\n",[30,110690,110691],{"__ignoreMap":141},[228,110692,110693,110696,110698,110700,110702,110704],{"class":230,"line":231},[228,110694,110695],{"class":238},"np.clip(action, ",[228,110697,770],{"class":234},[228,110699,102518],{"class":287},[228,110701,12550],{"class":238},[228,110703,102518],{"class":287},[228,110705,245],{"class":238},[19,110707,110708,110709,110712],{},"因为 XML 里 ",[30,110710,110711],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[200,110714,101823],{"id":101823},[220,110716,110717],{"className":30493,"code":110578,"language":30495,"meta":141,"style":141},[30,110718,110719,110727],{"__ignoreMap":141},[228,110720,110721,110723,110725],{"class":230,"line":231},[228,110722,32062],{"class":234},[228,110724,110109],{"class":2077},[228,110726,110112],{"class":238},[228,110728,110729,110731],{"class":230,"line":142},[228,110730,4204],{"class":234},[228,110732,110119],{"class":238},[19,110734,110735,110736,110739,110740,110743,110744,110747],{},"这段定义了一个函数，用来获取当前观测。",[30,110737,110738],{},"data.qpos.copy()"," 是位置数组副本，",[30,110741,110742],{},"data.qvel.copy()"," 是速度数组副本。",[30,110745,110746],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,110749,110750],{},"在本章模型里：",[220,110752,110755],{"className":110753,"code":110754,"language":5302,"meta":141},[5300],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[30,110756,110754],{"__ignoreMap":141},[19,110758,110759],{},"所以返回的 obs 是：",[220,110761,110764],{"className":110762,"code":110763,"language":5302,"meta":141},[5300],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[30,110765,110763],{"__ignoreMap":141},[220,110767,110769],{"className":30493,"code":110768,"language":30495,"meta":141,"style":141},"def compute_reward(obs: np.ndarray) -> float:\n",[30,110770,110771],{"__ignoreMap":141},[228,110772,110773,110775,110777,110779,110781],{"class":230,"line":231},[228,110774,32062],{"class":234},[228,110776,110134],{"class":2077},[228,110778,110137],{"class":238},[228,110780,278],{"class":287},[228,110782,3853],{"class":238},[19,110784,110785,110786,110789],{},"这行定义奖励函数。输入是观测 ",[30,110787,110788],{},"obs","，输出是一个浮点数奖励。",[220,110791,110793],{"className":30493,"code":110792,"language":30495,"meta":141,"style":141},"cart_x = obs[0]\npole_angle = obs[1]\n",[30,110794,110795,110808],{"__ignoreMap":141},[228,110796,110797,110800,110802,110804,110806],{"class":230,"line":231},[228,110798,110799],{"class":238},"cart_x ",[228,110801,284],{"class":234},[228,110803,110151],{"class":238},[228,110805,430],{"class":287},[228,110807,33361],{"class":238},[228,110809,110810,110813,110815,110817,110819],{"class":230,"line":142},[228,110811,110812],{"class":238},"pole_angle ",[228,110814,284],{"class":234},[228,110816,110151],{"class":238},[228,110818,456],{"class":287},[228,110820,33361],{"class":238},[19,110822,110823,110824,110827,110828,110831],{},"数组索引从 0 开始。",[30,110825,110826],{},"obs[0]"," 是第一个元素，也就是小车位置。",[30,110829,110830],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[220,110833,110834],{"className":30493,"code":109903,"language":30495,"meta":141,"style":141},[30,110835,110836],{"__ignoreMap":141},[228,110837,110838,110840,110842,110844,110846,110848,110850,110852,110854,110856,110858,110860,110862,110864],{"class":230,"line":231},[228,110839,17161],{"class":234},[228,110841,109912],{"class":287},[228,110843,239],{"class":238},[228,110845,102518],{"class":287},[228,110847,52386],{"class":234},[228,110849,109921],{"class":287},[228,110851,6633],{"class":234},[228,110853,109926],{"class":238},[228,110855,693],{"class":234},[228,110857,109926],{"class":238},[228,110859,770],{"class":234},[228,110861,109935],{"class":238},[228,110863,693],{"class":234},[228,110865,109940],{"class":238},[19,110867,110868,110869,110872,110873,110876],{},"这行计算奖励。",[30,110870,110871],{},"cart_x * cart_x"," 是小车位置的平方，",[30,110874,110875],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[220,110878,110880],{"className":30493,"code":110879,"language":30495,"meta":141,"style":141},"data.qpos[1] = 0.1\n",[30,110881,110882],{"__ignoreMap":141},[228,110883,110884,110886,110888,110890,110892],{"class":230,"line":231},[228,110885,104814],{"class":238},[228,110887,456],{"class":287},[228,110889,4557],{"class":238},[228,110891,284],{"class":234},[228,110893,110255],{"class":287},[19,110895,110896,110897,110899,110900,110902],{},"手动设置杆子的初始角度。因为 ",[30,110898,105571],{}," 是小车位置，",[30,110901,105574],{}," 是杆子角度，所以这里改的是杆子。",[220,110904,110905],{"className":30493,"code":104658,"language":30495,"meta":141,"style":141},[30,110906,110907],{"__ignoreMap":141},[228,110908,110909],{"class":230,"line":231},[228,110910,104658],{"class":238},[19,110912,105617,110913,110915],{},[30,110914,104145],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[220,110917,110919],{"className":30493,"code":110918,"language":30495,"meta":141,"style":141},"total_reward = 0.0\n",[30,110920,110921],{"__ignoreMap":141},[228,110922,110923,110926,110928],{"class":230,"line":231},[228,110924,110925],{"class":238},"total_reward ",[228,110927,284],{"class":234},[228,110929,104876],{"class":287},[19,110931,110932],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[220,110934,110936],{"className":30493,"code":110935,"language":30495,"meta":141,"style":141},"for step in range(1000):\n",[30,110937,110938],{"__ignoreMap":141},[228,110939,110940,110942,110944,110946,110948,110950,110952],{"class":230,"line":231},[228,110941,3139],{"class":234},[228,110943,31731],{"class":238},[228,110945,26159],{"class":234},[228,110947,32558],{"class":287},[228,110949,239],{"class":238},[228,110951,6525],{"class":287},[228,110953,30901],{"class":238},[19,110955,110956,110957,110959],{},"循环 1000 步。",[30,110958,107249],{}," 是当前步数，从 0 到 999。",[220,110961,110963],{"className":30493,"code":110962,"language":30495,"meta":141,"style":141},"obs = get_observation(data)\n",[30,110964,110965],{"__ignoreMap":141},[228,110966,110967,110970,110972],{"class":230,"line":231},[228,110968,110969],{"class":238},"obs ",[228,110971,284],{"class":234},[228,110973,110302],{"class":238},[19,110975,110976,110977,78],{},"读取当前状态，保存到 ",[30,110978,110788],{},[220,110980,110982],{"className":30493,"code":110981,"language":30495,"meta":141,"style":141},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[30,110983,110984,110996],{"__ignoreMap":141},[228,110985,110986,110988,110990,110992,110994],{"class":230,"line":231},[228,110987,110812],{"class":238},[228,110989,284],{"class":234},[228,110991,110151],{"class":238},[228,110993,456],{"class":287},[228,110995,33361],{"class":238},[228,110997,110998,111001,111003,111005,111007],{"class":230,"line":142},[228,110999,111000],{"class":238},"pole_angular_velocity ",[228,111002,284],{"class":234},[228,111004,110151],{"class":238},[228,111006,310],{"class":287},[228,111008,33361],{"class":238},[19,111010,111011,111012,111015,111016,78],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[30,111013,111014],{},"obs[3]","？因为 obs 的顺序是 ",[30,111017,111018],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[220,111020,111022],{"className":30493,"code":111021,"language":30495,"meta":141,"style":141},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[30,111023,111024],{"__ignoreMap":141},[228,111025,111026,111028,111030,111032,111034,111036,111038,111040,111042],{"class":230,"line":231},[228,111027,107557],{"class":238},[228,111029,284],{"class":234},[228,111031,110342],{"class":287},[228,111033,6633],{"class":234},[228,111035,109935],{"class":238},[228,111037,719],{"class":234},[228,111039,61982],{"class":287},[228,111041,6633],{"class":234},[228,111043,110355],{"class":238},[19,111045,111046,111047,101133,111049,111051],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[30,111048,105375],{},[30,111050,35444],{}," 是人为设置的系数，不是固定公式。",[220,111053,111055],{"className":30493,"code":111054,"language":30495,"meta":141,"style":141},"action = np.clip(action, -1.0, 1.0)\n",[30,111056,111057],{"__ignoreMap":141},[228,111058,111059,111061,111063,111065,111067,111069,111071,111073],{"class":230,"line":231},[228,111060,107557],{"class":238},[228,111062,284],{"class":234},[228,111064,107562],{"class":238},[228,111066,770],{"class":234},[228,111068,102518],{"class":287},[228,111070,12550],{"class":238},[228,111072,102518],{"class":287},[228,111074,245],{"class":238},[19,111076,111077],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[220,111079,111080],{"className":30493,"code":109888,"language":30495,"meta":141,"style":141},[30,111081,111082],{"__ignoreMap":141},[228,111083,111084,111086,111088,111090,111092],{"class":230,"line":231},[228,111085,105986],{"class":238},[228,111087,430],{"class":287},[228,111089,4557],{"class":238},[228,111091,284],{"class":234},[228,111093,107585],{"class":238},[19,111095,111096],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[220,111098,111099],{"className":30493,"code":104620,"language":30495,"meta":141,"style":141},[30,111100,111101],{"__ignoreMap":141},[228,111102,111103],{"class":230,"line":231},[228,111104,104620],{"class":238},[19,111106,111107,111108,111110],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[30,111109,106241],{}," 计算小车和杆子的下一刻状态。",[220,111112,111114],{"className":30493,"code":111113,"language":30495,"meta":141,"style":141},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[30,111115,111116,111125],{"__ignoreMap":141},[228,111117,111118,111121,111123],{"class":230,"line":231},[228,111119,111120],{"class":238},"reward ",[228,111122,284],{"class":234},[228,111124,110407],{"class":238},[228,111126,111127,111129,111131],{"class":230,"line":142},[228,111128,110925],{"class":238},[228,111130,9592],{"class":234},[228,111132,110417],{"class":238},[19,111134,111135,111136,111138,111139,111142,111143,78],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[30,111137,9592],{}," 是简写，",[30,111140,111141],{},"total_reward += reward"," 等价于 ",[30,111144,111145],{},"total_reward = total_reward + reward",[220,111147,111149],{"className":30493,"code":111148,"language":30495,"meta":141,"style":141},"if step % 100 == 0:\n",[30,111150,111151],{"__ignoreMap":141},[228,111152,111153,111155,111157,111159,111161,111163,111165],{"class":230,"line":231},[228,111154,1645],{"class":234},[228,111156,31731],{"class":238},[228,111158,566],{"class":234},[228,111160,5869],{"class":287},[228,111162,101674],{"class":234},[228,111164,4207],{"class":287},[228,111166,3853],{"class":238},[19,111168,111169,111171,111172,111175],{},[30,111170,566],{}," 是取余数。",[30,111173,111174],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[220,111177,111179],{"className":30493,"code":111178,"language":30495,"meta":141,"style":141},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[30,111180,111181],{"__ignoreMap":141},[228,111182,111183,111185,111187,111189,111191,111193,111195,111197,111199,111201,111203,111205,111207,111209,111211,111213],{"class":230,"line":231},[228,111184,30530],{"class":287},[228,111186,239],{"class":238},[228,111188,110446],{"class":343},[228,111190,110449],{"class":238},[228,111192,110452],{"class":343},[228,111194,110455],{"class":238},[228,111196,310],{"class":287},[228,111198,110460],{"class":238},[228,111200,110463],{"class":343},[228,111202,12550],{"class":238},[228,111204,32133],{"class":287},[228,111206,239],{"class":238},[228,111208,278],{"class":287},[228,111210,110474],{"class":238},[228,111212,310],{"class":287},[228,111214,30612],{"class":238},[19,111216,111217,111218,111221,111222,111225],{},"打印当前步数、观测和动作。",[30,111219,111220],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[30,111223,111224],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,111227,102431],{"id":102430},[19,111229,111230],{},"观测向量:",[220,111232,111235],{"className":111233,"code":111234,"language":5302,"meta":141},[5300],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[30,111236,111234],{"__ignoreMap":141},[19,111238,111239],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,111241,111242],{},"每隔 100 步会打印一次：",[220,111244,111247],{"className":111245,"code":111246,"language":5302,"meta":141},[5300],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[30,111248,111246],{"__ignoreMap":141},[19,111250,111251],{},"重点观察：",[183,111253,111254,111260,111265],{},[186,111255,111256,111259],{},[30,111257,111258],{},"pole_angle"," 是否越来越大。",[186,111261,111262,111264],{},[30,111263,109841],{}," 是否跑得太远。",[186,111266,111267,111268,82654,111270,78],{},"action 是否经常被 clip 到 ",[30,111269,104030],{},[30,111271,456],{},[19,111273,111274],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,111276,102463],{"id":102462},[183,111278,111279,111285,111288,111294,111304,111310,111313],{},[186,111280,111281,111282,78],{},"把初始角度改为 ",[30,111283,111284],{},"data.qpos[1] = 0.3",[186,111286,111287],{},"重新运行，观察控制是否变差。",[186,111289,111290,111291,111293],{},"把 actuator ",[30,111292,107182],{}," 改小。",[186,111295,111296,111297,111300,111301,78],{},"打印 ",[30,111298,111299],{},"model.nq, model.nv, model.nu","，应为 ",[30,111302,111303],{},"2 2 1",[186,111305,111306,111307,111309],{},"把 reward 里的 ",[30,111308,110875],{}," 系数改大，观察总奖励变化。",[186,111311,111312],{},"把控制器改成反号，观察杆子是否更容易倒。",[186,111314,111315],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,111317,102568],{"id":102567},[200,111319,111320],{"id":111320},"杆子方向和预期不一致",[19,111322,102511,111323,111325,111326,111328],{},[30,111324,106354],{}," 和 capsule 的 ",[30,111327,103291],{},"，必要时用 viewer 可视化确认。",[200,111330,111331],{"id":111331},"控制器越控越倒",[19,111333,111334],{},"说明反馈符号可能反了，尝试:",[220,111336,111338],{"className":30493,"code":111337,"language":30495,"meta":141,"style":141},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[30,111339,111340],{"__ignoreMap":141},[228,111341,111342,111344,111346,111348,111350,111352,111354,111356,111358,111360],{"class":230,"line":231},[228,111343,107557],{"class":238},[228,111345,284],{"class":234},[228,111347,52386],{"class":234},[228,111349,105375],{"class":287},[228,111351,6633],{"class":234},[228,111353,109935],{"class":238},[228,111355,770],{"class":234},[228,111357,61982],{"class":287},[228,111359,6633],{"class":234},[228,111361,110355],{"class":238},[200,111363,111364],{"id":111364},"小车飞走",[19,111366,111367,111368,111370,111371,111374],{},"降低 ",[30,111369,107182],{}," 或缩小 ",[30,111372,111373],{},"action"," 的 clip 范围。",[200,111376,111378,111380],{"id":111377},"obs3-为什么是杆子角速度",[30,111379,111014],{}," 为什么是杆子角速度",[19,111382,111383],{},"因为这个模型里：",[220,111385,111388],{"className":111386,"code":111387,"language":5302,"meta":141},[5300],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[30,111389,111387],{"__ignoreMap":141},[19,111391,109862],{},[220,111393,111396],{"className":111394,"code":111395,"language":5302,"meta":141},[5300],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[30,111397,111395],{"__ignoreMap":141},[200,111399,111401],{"id":111400},"reward-变成负数是否错误","reward 变成负数是否错误",[19,111403,111404],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,111406,102722],{"id":102721},[19,111408,111409],{},"一个控制任务通常包含：",[183,111411,111412,111415,111423,111428,111431],{},[186,111413,111414],{},"模型：Cartpole 的 body、joint、actuator。",[186,111416,111417,111418,451,111420,111422],{},"观测：从 ",[30,111419,104145],{},[30,111421,104475],{}," 里取状态。",[186,111424,111425,111426,78],{},"动作：写入 ",[30,111427,101191],{},[186,111429,111430],{},"奖励：根据任务目标打分。",[186,111432,111433],{},"循环：obs -> action -> step -> reward。",[19,111435,111436],{},"这就是后面 Gymnasium 环境的基本骨架。",[5241,111438,104401],{},{"title":141,"searchDepth":142,"depth":142,"links":111440},[111441,111442,111443,111448,111452,111453,111454,111462],{"id":100761,"depth":142,"text":100762},{"id":100884,"depth":142,"text":100885},{"id":101159,"depth":142,"text":101160,"children":111444},[111445,111446,111447],{"id":109815,"depth":1293,"text":109816},{"id":109880,"depth":1293,"text":109881},{"id":109896,"depth":1293,"text":109897},{"id":101367,"depth":142,"text":101368,"children":111449},[111450,111451],{"id":101687,"depth":1293,"text":101687},{"id":101823,"depth":1293,"text":101823},{"id":102430,"depth":142,"text":102431},{"id":102462,"depth":142,"text":102463},{"id":102567,"depth":142,"text":102568,"children":111455},[111456,111457,111458,111459,111461],{"id":111320,"depth":1293,"text":111320},{"id":111331,"depth":1293,"text":111331},{"id":111364,"depth":1293,"text":111364},{"id":111377,"depth":1293,"text":111460},"obs[3] 为什么是杆子角速度",{"id":111400,"depth":1293,"text":111401},{"id":102721,"depth":142,"text":102722},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109551,"description":141},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111469,"title":111470,"body":111471,"description":141,"extension":155,"meta":113485,"navigation":157,"path":113486,"seo":113487,"stem":113488,"__hash__":113489},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111472,"toc":113461},[111473,111476,111478,111481,111483,111500,111503,111506,111512,111515,111517,111519,111543,111545,111559,111561,111602,111604,111622,111624,111627,111633,111636,111664,111668,111674,111699,111702,111733,111740,111743,111746,111752,111755,111761,111764,111770,111774,111777,111802,111805,111807,112567,112569,112581,112583,112594,112596,112599,112616,112619,112621,112632,112635,112637,112683,112686,112699,112702,112784,112787,112789,112805,112815,112828,112831,112870,112880,112891,112901,112914,112917,112946,112949,112959,112962,112968,112985,112996,112998,113004,113021,113032,113053,113056,113068,113071,113092,113095,113103,113111,113128,113131,113200,113207,113215,113218,113231,113238,113240,113243,113249,113252,113255,113261,113267,113269,113309,113311,113317,113326,113329,113331,113351,113354,113357,113363,113367,113369,113396,113399,113402,113429,113435,113438,113441,113443,113446,113449,113455,113458],[10,111474,111470],{"id":111475},"_7控制任务reacher-机械臂到达目标",[14,111477,100762],{"id":100761},[19,111479,111480],{},"本章搭建一个二维两关节 reacher 任务。",[19,111482,104446],{},[183,111484,111485,111488,111491,111494,111497],{},[186,111486,111487],{},"两个 hinge joint",[186,111489,111490],{},"两个 motor actuator",[186,111492,111493],{},"site 作为末端点和目标点",[186,111495,111496],{},"根据末端和目标距离设计 reward",[186,111498,111499],{},"构造机械臂任务的基本形式",[19,111501,111502],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,111504,111505],{},"Reacher 任务可以理解为：",[220,111507,111510],{"className":111508,"code":111509,"language":5302,"meta":141},[5300],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[30,111511,111509],{"__ignoreMap":141},[19,111513,111514],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,111516,100885],{"id":100884},[19,111518,100888],{},[220,111520,111521],{"className":23937,"code":104503,"language":23939,"meta":141,"style":141},[30,111522,111523],{"__ignoreMap":141},[228,111524,111525,111527,111529,111531,111533,111535,111537,111539,111541],{"class":230,"line":231},[228,111526,24692],{"class":2077},[228,111528,26431],{"class":343},[228,111530,23949],{"class":343},[228,111532,26516],{"class":287},[228,111534,104518],{"class":343},[228,111536,100913],{"class":343},[228,111538,102616],{"class":343},[228,111540,100929],{"class":343},[228,111542,104527],{"class":343},[19,111544,102934],{},[220,111546,111547],{"className":23937,"code":101034,"language":23939,"meta":141,"style":141},[30,111548,111549],{"__ignoreMap":141},[228,111550,111551,111553,111555,111557],{"class":230,"line":231},[228,111552,23946],{"class":2077},[228,111554,23949],{"class":343},[228,111556,101045],{"class":343},[228,111558,101048],{"class":343},[19,111560,102951],{},[220,111562,111564],{"className":23937,"code":111563,"language":23939,"meta":141,"style":141},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[30,111565,111566,111583,111592],{"__ignoreMap":141},[228,111567,111568,111570,111572,111574,111577,111579,111581],{"class":230,"line":231},[228,111569,30445],{"class":2077},[228,111571,29291],{"class":343},[228,111573,25231],{"class":287},[228,111575,111576],{"class":343}," mujoco-reacher",[228,111578,101090],{"class":343},[228,111580,101093],{"class":287},[228,111582,101096],{"class":287},[228,111584,111585,111587,111589],{"class":230,"line":142},[228,111586,30445],{"class":2077},[228,111588,101103],{"class":343},[228,111590,111591],{"class":343}," mujoco-reacher\n",[228,111593,111594,111596,111598,111600],{"class":230,"line":1293},[228,111595,23946],{"class":2077},[228,111597,23949],{"class":343},[228,111599,101045],{"class":343},[228,111601,101048],{"class":343},[19,111603,101119],{},[183,111605,111606,111609,111612],{},[186,111607,111608],{},"本章使用低维状态，不使用图像输入。",[186,111610,111611],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[186,111613,111614,111615,451,111617,451,111619,111621],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[30,111616,104145],{},[30,111618,104475],{},[30,111620,103795],{}," 的方法一致。",[14,111623,101160],{"id":101159},[19,111625,111626],{},"Reacher 任务核心:",[220,111628,111631],{"className":111629,"code":111630,"language":5302,"meta":141},[5300],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[30,111632,111630],{"__ignoreMap":141},[19,111634,111635],{},"读取 site 世界坐标:",[220,111637,111639],{"className":30493,"code":111638,"language":30495,"meta":141,"style":141},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[30,111640,111641,111654],{"__ignoreMap":141},[228,111642,111643,111645,111647,111649,111652],{"class":230,"line":231},[228,111644,103749],{"class":238},[228,111646,284],{"class":234},[228,111648,103520],{"class":238},[228,111650,111651],{"class":343},"\"tip\"",[228,111653,245],{"class":238},[228,111655,111656,111659,111661],{"class":230,"line":142},[228,111657,111658],{"class":238},"tip_pos ",[228,111660,284],{"class":234},[228,111662,111663],{"class":238}," data.site_xpos[site_id]\n",[200,111665,111667],{"id":111666},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,111669,111670,111671,111673],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[30,111672,104145],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[220,111675,111677],{"className":30493,"code":111676,"language":30495,"meta":141,"style":141},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[30,111678,111679,111689],{"__ignoreMap":141},[228,111680,111681,111684,111686],{"class":230,"line":231},[228,111682,111683],{"class":238},"tip ",[228,111685,284],{"class":234},[228,111687,111688],{"class":238}," data.site_xpos[tip_site_id]\n",[228,111690,111691,111694,111696],{"class":230,"line":142},[228,111692,111693],{"class":238},"target ",[228,111695,284],{"class":234},[228,111697,111698],{"class":238}," data.site_xpos[target_site_id]\n",[19,111700,111701],{},"这样 reward 就很容易写：",[220,111703,111705],{"className":30493,"code":111704,"language":30495,"meta":141,"style":141},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[30,111706,111707,111722],{"__ignoreMap":141},[228,111708,111709,111712,111714,111717,111719],{"class":230,"line":231},[228,111710,111711],{"class":238},"dist ",[228,111713,284],{"class":234},[228,111715,111716],{"class":238}," np.linalg.norm(tip ",[228,111718,770],{"class":234},[228,111720,111721],{"class":238}," target)\n",[228,111723,111724,111726,111728,111730],{"class":230,"line":142},[228,111725,111120],{"class":238},[228,111727,284],{"class":234},[228,111729,52386],{"class":234},[228,111731,111732],{"class":238},"dist\n",[19,111734,111735,111736,111739],{},"距离越小，",[30,111737,111738],{},"-dist"," 越接近 0，奖励越高。",[200,111741,111742],{"id":111742},"两关节机械臂的状态",[19,111744,111745],{},"这个模型有两个 hinge joint：",[220,111747,111750],{"className":111748,"code":111749,"language":5302,"meta":141},[5300],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[30,111751,111749],{"__ignoreMap":141},[19,111753,111754],{},"再加上末端和目标位置：",[220,111756,111759],{"className":111757,"code":111758,"language":5302,"meta":141},[5300],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[30,111760,111758],{"__ignoreMap":141},[19,111762,111763],{},"总维度：",[220,111765,111768],{"className":111766,"code":111767,"language":5302,"meta":141},[5300],"2 + 2 + 3 + 3 = 10\n",[30,111769,111767],{"__ignoreMap":141},[200,111771,111773],{"id":111772},"为什么-gravity-是-0","为什么 gravity 是 0",[19,111775,111776],{},"本章把重力设为：",[220,111778,111780],{"className":53182,"code":111779,"language":53184,"meta":141,"style":141},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[30,111781,111782],{"__ignoreMap":141},[228,111783,111784,111786,111788,111790,111792,111794,111796,111798,111800],{"class":230,"line":231},[228,111785,1148],{"class":238},[228,111787,69281],{"class":51415},[228,111789,101309],{"class":2077},[228,111791,284],{"class":238},[228,111793,101314],{"class":343},[228,111795,101317],{"class":2077},[228,111797,284],{"class":238},[228,111799,103886],{"class":343},[228,111801,101259],{"class":238},[19,111803,111804],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,111806,101368],{"id":101367},[220,111808,111810],{"className":30493,"code":111809,"language":30495,"meta":141,"style":141},"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",[30,111811,111812,111818,111828,111832,111836,111844,111849,111854,111858,111862,111867,111872,111876,111881,111886,111891,111895,111900,111905,111910,111915,111919,111923,111927,111931,111935,111940,111945,111949,111953,111957,111961,111965,111980,111989,112001,112024,112031,112035,112039,112049,112063,112077,112084,112088,112092,112106,112118,112130,112143,112158,112175,112179,112183,112195,112207,112215,112223,112227,112243,112248,112261,112274,112289,112293,112328,112360,112364,112368,112377,112381,112397,112407,112418,112434,112450,112466,112482,112486,112504,112524,112543,112547,112551,112563],{"__ignoreMap":141},[228,111813,111814,111816],{"class":230,"line":231},[228,111815,30507],{"class":234},[228,111817,101416],{"class":238},[228,111819,111820,111822,111824,111826],{"class":230,"line":142},[228,111821,30507],{"class":234},[228,111823,31495],{"class":238},[228,111825,31498],{"class":234},[228,111827,31501],{"class":238},[228,111829,111830],{"class":230,"line":1293},[228,111831,2514],{"emptyLinePlaceholder":157},[228,111833,111834],{"class":230,"line":1308},[228,111835,2514],{"emptyLinePlaceholder":157},[228,111837,111838,111840,111842],{"class":230,"line":1314},[228,111839,101429],{"class":287},[228,111841,13679],{"class":234},[228,111843,101434],{"class":343},[228,111845,111846],{"class":230,"line":1328},[228,111847,111848],{"class":343},"\u003Cmujoco model=\"two_link_reacher\">\n",[228,111850,111851],{"class":230,"line":1334},[228,111852,111853],{"class":343},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[228,111855,111856],{"class":230,"line":1425},[228,111857,2514],{"emptyLinePlaceholder":157},[228,111859,111860],{"class":230,"line":1431},[228,111861,101453],{"class":343},[228,111863,111864],{"class":230,"line":1443},[228,111865,111866],{"class":343},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[228,111868,111869],{"class":230,"line":1726},[228,111870,111871],{"class":343},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[228,111873,111874],{"class":230,"line":1731},[228,111875,2514],{"emptyLinePlaceholder":157},[228,111877,111878],{"class":230,"line":1737},[228,111879,111880],{"class":343},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[228,111882,111883],{"class":230,"line":1742},[228,111884,111885],{"class":343},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[228,111887,111888],{"class":230,"line":1756},[228,111889,111890],{"class":343},"      \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",[228,111892,111893],{"class":230,"line":1761},[228,111894,2514],{"emptyLinePlaceholder":157},[228,111896,111897],{"class":230,"line":1767},[228,111898,111899],{"class":343},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[228,111901,111902],{"class":230,"line":1788},[228,111903,111904],{"class":343},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[228,111906,111907],{"class":230,"line":1793},[228,111908,111909],{"class":343},"        \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",[228,111911,111912],{"class":230,"line":1807},[228,111913,111914],{"class":343},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[228,111916,111917],{"class":230,"line":1812},[228,111918,106553],{"class":343},[228,111920,111921],{"class":230,"line":1841},[228,111922,101482],{"class":343},[228,111924,111925],{"class":230,"line":1846},[228,111926,101487],{"class":343},[228,111928,111929],{"class":230,"line":1863},[228,111930,2514],{"emptyLinePlaceholder":157},[228,111932,111933],{"class":230,"line":1868},[228,111934,106570],{"class":343},[228,111936,111937],{"class":230,"line":1873},[228,111938,111939],{"class":343},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[228,111941,111942],{"class":230,"line":1878},[228,111943,111944],{"class":343},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[228,111946,111947],{"class":230,"line":1892},[228,111948,106580],{"class":343},[228,111950,111951],{"class":230,"line":1897},[228,111952,101492],{"class":343},[228,111954,111955],{"class":230,"line":2691},[228,111956,95813],{"class":343},[228,111958,111959],{"class":230,"line":2705},[228,111960,2514],{"emptyLinePlaceholder":157},[228,111962,111963],{"class":230,"line":2713},[228,111964,2514],{"emptyLinePlaceholder":157},[228,111966,111967,111969,111972,111975,111977],{"class":230,"line":2718},[228,111968,32062],{"class":234},[228,111970,111971],{"class":2077}," site_position",[228,111973,111974],{"class":238},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[228,111976,1413],{"class":287},[228,111978,111979],{"class":238},") -> np.ndarray:\n",[228,111981,111982,111984,111986],{"class":230,"line":2724},[228,111983,103515],{"class":238},[228,111985,284],{"class":234},[228,111987,111988],{"class":238}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[228,111990,111991,111993,111995,111997,111999],{"class":230,"line":2730},[228,111992,3215],{"class":234},[228,111994,103564],{"class":238},[228,111996,1148],{"class":234},[228,111998,4207],{"class":287},[228,112000,3853],{"class":238},[228,112002,112003,112005,112007,112009,112011,112014,112016,112018,112020,112022],{"class":230,"line":2735},[228,112004,103547],{"class":234},[228,112006,103550],{"class":287},[228,112008,239],{"class":238},[228,112010,291],{"class":234},[228,112012,112013],{"class":343},"\"site not found: ",[228,112015,1134],{"class":287},[228,112017,79925],{"class":238},[228,112019,1184],{"class":287},[228,112021,489],{"class":343},[228,112023,245],{"class":238},[228,112025,112026,112028],{"class":230,"line":8063},[228,112027,4204],{"class":234},[228,112029,112030],{"class":238}," data.site_xpos[site_id].copy()\n",[228,112032,112033],{"class":230,"line":8087},[228,112034,2514],{"emptyLinePlaceholder":157},[228,112036,112037],{"class":230,"line":8092},[228,112038,2514],{"emptyLinePlaceholder":157},[228,112040,112041,112043,112046],{"class":230,"line":8098},[228,112042,32062],{"class":234},[228,112044,112045],{"class":2077}," get_obs",[228,112047,112048],{"class":238},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[228,112050,112051,112054,112056,112059,112061],{"class":230,"line":8125},[228,112052,112053],{"class":238},"    tip ",[228,112055,284],{"class":234},[228,112057,112058],{"class":238}," site_position(model, data, ",[228,112060,111651],{"class":343},[228,112062,245],{"class":238},[228,112064,112065,112068,112070,112072,112075],{"class":230,"line":8130},[228,112066,112067],{"class":238},"    target ",[228,112069,284],{"class":234},[228,112071,112058],{"class":238},[228,112073,112074],{"class":343},"\"target\"",[228,112076,245],{"class":238},[228,112078,112079,112081],{"class":230,"line":8136},[228,112080,4204],{"class":234},[228,112082,112083],{"class":238}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[228,112085,112086],{"class":230,"line":8148},[228,112087,2514],{"emptyLinePlaceholder":157},[228,112089,112090],{"class":230,"line":8160},[228,112091,2514],{"emptyLinePlaceholder":157},[228,112093,112094,112096,112099,112102,112104],{"class":230,"line":8172},[228,112095,32062],{"class":234},[228,112097,112098],{"class":2077}," reward",[228,112100,112101],{"class":238},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[228,112103,278],{"class":287},[228,112105,3853],{"class":238},[228,112107,112108,112110,112112,112114,112116],{"class":230,"line":9831},[228,112109,112053],{"class":238},[228,112111,284],{"class":234},[228,112113,112058],{"class":238},[228,112115,111651],{"class":343},[228,112117,245],{"class":238},[228,112119,112120,112122,112124,112126,112128],{"class":230,"line":9856},[228,112121,112067],{"class":238},[228,112123,284],{"class":234},[228,112125,112058],{"class":238},[228,112127,112074],{"class":343},[228,112129,245],{"class":238},[228,112131,112132,112135,112137,112139,112141],{"class":230,"line":9879},[228,112133,112134],{"class":238},"    dist ",[228,112136,284],{"class":234},[228,112138,111716],{"class":238},[228,112140,770],{"class":234},[228,112142,111721],{"class":238},[228,112144,112145,112148,112150,112153,112155],{"class":230,"line":9903},[228,112146,112147],{"class":238},"    control_cost ",[228,112149,284],{"class":234},[228,112151,112152],{"class":287}," 0.01",[228,112154,6633],{"class":234},[228,112156,112157],{"class":238}," np.sum(np.square(data.ctrl))\n",[228,112159,112160,112162,112164,112166,112168,112170,112172],{"class":230,"line":9908},[228,112161,4204],{"class":234},[228,112163,109912],{"class":287},[228,112165,239],{"class":238},[228,112167,770],{"class":234},[228,112169,111711],{"class":238},[228,112171,770],{"class":234},[228,112173,112174],{"class":238}," control_cost)\n",[228,112176,112177],{"class":230,"line":9913},[228,112178,2514],{"emptyLinePlaceholder":157},[228,112180,112181],{"class":230,"line":9918},[228,112182,2514],{"emptyLinePlaceholder":157},[228,112184,112185,112187,112189,112191,112193],{"class":230,"line":9927},[228,112186,32062],{"class":234},[228,112188,2087],{"class":2077},[228,112190,101513],{"class":238},[228,112192,95801],{"class":287},[228,112194,3853],{"class":238},[228,112196,112197,112199,112201,112203,112205],{"class":230,"line":9932},[228,112198,101522],{"class":238},[228,112200,284],{"class":234},[228,112202,101527],{"class":238},[228,112204,101429],{"class":287},[228,112206,245],{"class":238},[228,112208,112209,112211,112213],{"class":230,"line":9938},[228,112210,101536],{"class":238},[228,112212,284],{"class":234},[228,112214,101541],{"class":238},[228,112216,112217,112219,112221],{"class":230,"line":9959},[228,112218,110268],{"class":238},[228,112220,284],{"class":234},[228,112222,104876],{"class":287},[228,112224,112225],{"class":230,"line":9965},[228,112226,2514],{"emptyLinePlaceholder":157},[228,112228,112229,112231,112233,112235,112237,112239,112241],{"class":230,"line":9979},[228,112230,3315],{"class":234},[228,112232,31731],{"class":238},[228,112234,26159],{"class":234},[228,112236,32558],{"class":287},[228,112238,239],{"class":238},[228,112240,65189],{"class":287},[228,112242,30901],{"class":238},[228,112244,112245],{"class":230,"line":9985},[228,112246,112247],{"class":238},"        mujoco.mj_forward(model, data)\n",[228,112249,112250,112253,112255,112257,112259],{"class":230,"line":10012},[228,112251,112252],{"class":238},"        tip ",[228,112254,284],{"class":234},[228,112256,112058],{"class":238},[228,112258,111651],{"class":343},[228,112260,245],{"class":238},[228,112262,112263,112266,112268,112270,112272],{"class":230,"line":10021},[228,112264,112265],{"class":238},"        target ",[228,112267,284],{"class":234},[228,112269,112058],{"class":238},[228,112271,112074],{"class":343},[228,112273,245],{"class":238},[228,112275,112276,112279,112281,112284,112286],{"class":230,"line":10027},[228,112277,112278],{"class":238},"        error ",[228,112280,284],{"class":234},[228,112282,112283],{"class":238}," target ",[228,112285,770],{"class":234},[228,112287,112288],{"class":238}," tip\n",[228,112290,112291],{"class":230,"line":10035},[228,112292,2514],{"emptyLinePlaceholder":157},[228,112294,112295,112297,112299,112301,112303,112306,112308,112310,112313,112315,112318,112320,112322,112324,112326],{"class":230,"line":10040},[228,112296,106732],{"class":238},[228,112298,430],{"class":287},[228,112300,4557],{"class":238},[228,112302,284],{"class":234},[228,112304,112305],{"class":238}," np.clip(",[228,112307,105375],{"class":287},[228,112309,6633],{"class":234},[228,112311,112312],{"class":238}," error[",[228,112314,316],{"class":287},[228,112316,112317],{"class":238},"], ",[228,112319,770],{"class":234},[228,112321,102518],{"class":287},[228,112323,12550],{"class":238},[228,112325,102518],{"class":287},[228,112327,245],{"class":238},[228,112329,112330,112332,112334,112336,112338,112340,112342,112344,112346,112348,112350,112352,112354,112356,112358],{"class":230,"line":16719},[228,112331,106732],{"class":238},[228,112333,456],{"class":287},[228,112335,4557],{"class":238},[228,112337,284],{"class":234},[228,112339,112305],{"class":238},[228,112341,105375],{"class":287},[228,112343,6633],{"class":234},[228,112345,112312],{"class":238},[228,112347,430],{"class":287},[228,112349,112317],{"class":238},[228,112351,770],{"class":234},[228,112353,102518],{"class":287},[228,112355,12550],{"class":238},[228,112357,102518],{"class":287},[228,112359,245],{"class":238},[228,112361,112362],{"class":230,"line":16725},[228,112363,2514],{"emptyLinePlaceholder":157},[228,112365,112366],{"class":230,"line":16748},[228,112367,101631],{"class":238},[228,112369,112370,112372,112374],{"class":230,"line":16754},[228,112371,110412],{"class":238},[228,112373,9592],{"class":234},[228,112375,112376],{"class":238}," reward(model, data)\n",[228,112378,112379],{"class":230,"line":16777},[228,112380,2514],{"emptyLinePlaceholder":157},[228,112382,112383,112385,112387,112389,112391,112393,112395],{"class":230,"line":16791},[228,112384,2611],{"class":234},[228,112386,31731],{"class":238},[228,112388,566],{"class":234},[228,112390,5869],{"class":287},[228,112392,101674],{"class":234},[228,112394,4207],{"class":287},[228,112396,3853],{"class":238},[228,112398,112399,112402,112404],{"class":230,"line":16811},[228,112400,112401],{"class":238},"            obs ",[228,112403,284],{"class":234},[228,112405,112406],{"class":238}," get_obs(model, data)\n",[228,112408,112409,112411,112413,112415],{"class":230,"line":16817},[228,112410,34765],{"class":287},[228,112412,239],{"class":238},[228,112414,110446],{"class":343},[228,112416,112417],{"class":238},", step)\n",[228,112419,112420,112422,112424,112427,112430,112432],{"class":230,"line":16828},[228,112421,34765],{"class":287},[228,112423,239],{"class":238},[228,112425,112426],{"class":343},"\"  tip:\"",[228,112428,112429],{"class":238},", np.round(tip, ",[228,112431,310],{"class":287},[228,112433,30612],{"class":238},[228,112435,112436,112438,112440,112443,112446,112448],{"class":230,"line":16851},[228,112437,34765],{"class":287},[228,112439,239],{"class":238},[228,112441,112442],{"class":343},"\"  target:\"",[228,112444,112445],{"class":238},", np.round(target, ",[228,112447,310],{"class":287},[228,112449,30612],{"class":238},[228,112451,112452,112454,112456,112459,112462,112464],{"class":230,"line":16873},[228,112453,34765],{"class":287},[228,112455,239],{"class":238},[228,112457,112458],{"class":343},"\"  ctrl:\"",[228,112460,112461],{"class":238},", np.round(data.ctrl.copy(), ",[228,112463,310],{"class":287},[228,112465,30612],{"class":238},[228,112467,112468,112470,112472,112475,112478,112480],{"class":230,"line":16878},[228,112469,34765],{"class":287},[228,112471,239],{"class":238},[228,112473,112474],{"class":343},"\"  obs_dim:\"",[228,112476,112477],{"class":238},", obs.shape[",[228,112479,430],{"class":287},[228,112481,4771],{"class":238},[228,112483,112484],{"class":230,"line":16884},[228,112485,2514],{"emptyLinePlaceholder":157},[228,112487,112488,112490,112492,112494,112496,112498,112500,112502],{"class":230,"line":16898},[228,112489,31414],{"class":287},[228,112491,239],{"class":238},[228,112493,110491],{"class":343},[228,112495,12550],{"class":238},[228,112497,32133],{"class":287},[228,112499,110498],{"class":238},[228,112501,310],{"class":287},[228,112503,30612],{"class":238},[228,112505,112506,112508,112510,112513,112516,112518,112520,112522],{"class":230,"line":16911},[228,112507,31414],{"class":287},[228,112509,239],{"class":238},[228,112511,112512],{"class":343},"\"final tip:\"",[228,112514,112515],{"class":238},", np.round(site_position(model, data, ",[228,112517,111651],{"class":343},[228,112519,110460],{"class":238},[228,112521,310],{"class":287},[228,112523,30612],{"class":238},[228,112525,112526,112528,112530,112533,112535,112537,112539,112541],{"class":230,"line":16916},[228,112527,31414],{"class":287},[228,112529,239],{"class":238},[228,112531,112532],{"class":343},"\"target:\"",[228,112534,112515],{"class":238},[228,112536,112074],{"class":343},[228,112538,110460],{"class":238},[228,112540,310],{"class":287},[228,112542,30612],{"class":238},[228,112544,112545],{"class":230,"line":16930},[228,112546,2514],{"emptyLinePlaceholder":157},[228,112548,112549],{"class":230,"line":16935},[228,112550,2514],{"emptyLinePlaceholder":157},[228,112552,112553,112555,112557,112559,112561],{"class":230,"line":16941},[228,112554,1645],{"class":234},[228,112556,31335],{"class":287},[228,112558,101674],{"class":234},[228,112560,101677],{"class":343},[228,112562,3853],{"class":238},[228,112564,112565],{"class":230,"line":16946},[228,112566,101684],{"class":238},[19,112568,103685],{},[220,112570,112572],{"className":23937,"code":112571,"language":23939,"meta":141,"style":141},"touch ch7_reacher.py\n",[30,112573,112574],{"__ignoreMap":141},[228,112575,112576,112578],{"class":230,"line":231},[228,112577,101398],{"class":2077},[228,112579,112580],{"class":343}," ch7_reacher.py\n",[19,112582,110559],{},[220,112584,112586],{"className":23937,"code":112585,"language":23939,"meta":141,"style":141},"python ch7_reacher.py\n",[30,112587,112588],{"__ignoreMap":141},[228,112589,112590,112592],{"class":230,"line":231},[228,112591,30495],{"class":2077},[228,112593,112580],{"class":343},[200,112595,101687],{"id":101687},[19,112597,112598],{},"读取 site 坐标：",[220,112600,112602],{"className":30493,"code":112601,"language":30495,"meta":141,"style":141},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[30,112603,112604],{"__ignoreMap":141},[228,112605,112606,112608,112610,112612,112614],{"class":230,"line":231},[228,112607,32062],{"class":234},[228,112609,111971],{"class":2077},[228,112611,111974],{"class":238},[228,112613,1413],{"class":287},[228,112615,111979],{"class":238},[19,112617,112618],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,112620,110575],{},[220,112622,112624],{"className":30493,"code":112623,"language":30495,"meta":141,"style":141},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[30,112625,112626],{"__ignoreMap":141},[228,112627,112628,112630],{"class":230,"line":231},[228,112629,17161],{"class":234},[228,112631,112083],{"class":238},[19,112633,112634],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,112636,109900],{},[220,112638,112640],{"className":30493,"code":112639,"language":30495,"meta":141,"style":141},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[30,112641,112642,112654,112667],{"__ignoreMap":141},[228,112643,112644,112646,112648,112650,112652],{"class":230,"line":231},[228,112645,111711],{"class":238},[228,112647,284],{"class":234},[228,112649,111716],{"class":238},[228,112651,770],{"class":234},[228,112653,111721],{"class":238},[228,112655,112656,112659,112661,112663,112665],{"class":230,"line":142},[228,112657,112658],{"class":238},"control_cost ",[228,112660,284],{"class":234},[228,112662,112152],{"class":287},[228,112664,6633],{"class":234},[228,112666,112157],{"class":238},[228,112668,112669,112671,112673,112675,112677,112679,112681],{"class":230,"line":1293},[228,112670,17161],{"class":234},[228,112672,109912],{"class":287},[228,112674,239],{"class":238},[228,112676,770],{"class":234},[228,112678,111711],{"class":238},[228,112680,770],{"class":234},[228,112682,112174],{"class":238},[19,112684,112685],{},"奖励由两部分组成：",[183,112687,112688,112693],{},[186,112689,112690,112692],{},[30,112691,111738],{},"：末端离目标越远，奖励越低。",[186,112694,112695,112698],{},[30,112696,112697],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,112700,112701],{},"简单控制器：",[220,112703,112705],{"className":30493,"code":112704,"language":30495,"meta":141,"style":141},"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",[30,112706,112707,112720,112752],{"__ignoreMap":141},[228,112708,112709,112712,112714,112716,112718],{"class":230,"line":231},[228,112710,112711],{"class":238},"error ",[228,112713,284],{"class":234},[228,112715,112283],{"class":238},[228,112717,770],{"class":234},[228,112719,112288],{"class":238},[228,112721,112722,112724,112726,112728,112730,112732,112734,112736,112738,112740,112742,112744,112746,112748,112750],{"class":230,"line":142},[228,112723,105986],{"class":238},[228,112725,430],{"class":287},[228,112727,4557],{"class":238},[228,112729,284],{"class":234},[228,112731,112305],{"class":238},[228,112733,105375],{"class":287},[228,112735,6633],{"class":234},[228,112737,112312],{"class":238},[228,112739,316],{"class":287},[228,112741,112317],{"class":238},[228,112743,770],{"class":234},[228,112745,102518],{"class":287},[228,112747,12550],{"class":238},[228,112749,102518],{"class":287},[228,112751,245],{"class":238},[228,112753,112754,112756,112758,112760,112762,112764,112766,112768,112770,112772,112774,112776,112778,112780,112782],{"class":230,"line":1293},[228,112755,105986],{"class":238},[228,112757,456],{"class":287},[228,112759,4557],{"class":238},[228,112761,284],{"class":234},[228,112763,112305],{"class":238},[228,112765,105375],{"class":287},[228,112767,6633],{"class":234},[228,112769,112312],{"class":238},[228,112771,430],{"class":287},[228,112773,112317],{"class":238},[228,112775,770],{"class":234},[228,112777,102518],{"class":287},[228,112779,12550],{"class":238},[228,112781,102518],{"class":287},[228,112783,245],{"class":238},[19,112785,112786],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[200,112788,101823],{"id":101823},[220,112790,112791],{"className":30493,"code":112601,"language":30495,"meta":141,"style":141},[30,112792,112793],{"__ignoreMap":141},[228,112794,112795,112797,112799,112801,112803],{"class":230,"line":231},[228,112796,32062],{"class":234},[228,112798,111971],{"class":2077},[228,112800,111974],{"class":238},[228,112802,1413],{"class":287},[228,112804,111979],{"class":238},[19,112806,112807,112808,112810,112811,82654,112813,78],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[30,112809,79925],{}," 是 site 的名字，比如 ",[30,112812,111651],{},[30,112814,112074],{},[220,112816,112818],{"className":30493,"code":112817,"language":30495,"meta":141,"style":141},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[30,112819,112820],{"__ignoreMap":141},[228,112821,112822,112824,112826],{"class":230,"line":231},[228,112823,103749],{"class":238},[228,112825,284],{"class":234},[228,112827,111988],{"class":238},[19,112829,112830],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[220,112832,112834],{"className":30493,"code":112833,"language":30495,"meta":141,"style":141},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[30,112835,112836,112848],{"__ignoreMap":141},[228,112837,112838,112840,112842,112844,112846],{"class":230,"line":231},[228,112839,1645],{"class":234},[228,112841,103564],{"class":238},[228,112843,1148],{"class":234},[228,112845,4207],{"class":287},[228,112847,3853],{"class":238},[228,112849,112850,112852,112854,112856,112858,112860,112862,112864,112866,112868],{"class":230,"line":142},[228,112851,104010],{"class":234},[228,112853,103550],{"class":287},[228,112855,239],{"class":238},[228,112857,291],{"class":234},[228,112859,112013],{"class":343},[228,112861,1134],{"class":287},[228,112863,79925],{"class":238},[228,112865,1184],{"class":287},[228,112867,489],{"class":343},[228,112869,245],{"class":238},[19,112871,112872,112873,112876,112877,112879],{},"如果 site 没找到，就主动报错。",[30,112874,112875],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[30,112878,79925],{}," 的值放进字符串里。",[220,112881,112883],{"className":30493,"code":112882,"language":30495,"meta":141,"style":141},"return data.site_xpos[site_id].copy()\n",[30,112884,112885],{"__ignoreMap":141},[228,112886,112887,112889],{"class":230,"line":231},[228,112888,17161],{"class":234},[228,112890,112030],{"class":238},[19,112892,112893,112894,112896,112897,112900],{},"返回这个 site 的世界坐标。",[30,112895,103795],{}," 里的每一行都是一个 site 的 ",[30,112898,112899],{},"(x, y, z)"," 坐标。",[220,112902,112904],{"className":30493,"code":112903,"language":30495,"meta":141,"style":141},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[30,112905,112906],{"__ignoreMap":141},[228,112907,112908,112910,112912],{"class":230,"line":231},[228,112909,32062],{"class":234},[228,112911,112045],{"class":2077},[228,112913,112048],{"class":238},[19,112915,112916],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[220,112918,112920],{"className":30493,"code":112919,"language":30495,"meta":141,"style":141},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[30,112921,112922,112934],{"__ignoreMap":141},[228,112923,112924,112926,112928,112930,112932],{"class":230,"line":231},[228,112925,111683],{"class":238},[228,112927,284],{"class":234},[228,112929,112058],{"class":238},[228,112931,111651],{"class":343},[228,112933,245],{"class":238},[228,112935,112936,112938,112940,112942,112944],{"class":230,"line":142},[228,112937,111693],{"class":238},[228,112939,284],{"class":234},[228,112941,112058],{"class":238},[228,112943,112074],{"class":343},[228,112945,245],{"class":238},[19,112947,112948],{},"分别读取末端点和目标点的世界坐标。",[220,112950,112951],{"className":30493,"code":112623,"language":30495,"meta":141,"style":141},[30,112952,112953],{"__ignoreMap":141},[228,112954,112955,112957],{"class":230,"line":231},[228,112956,17161],{"class":234},[228,112958,112083],{"class":238},[19,112960,112961],{},"把四部分拼成一个观测数组：",[220,112963,112966],{"className":112964,"code":112965,"language":5302,"meta":141},[5300],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[30,112967,112965],{"__ignoreMap":141},[220,112969,112971],{"className":30493,"code":112970,"language":30495,"meta":141,"style":141},"dist = np.linalg.norm(tip - target)\n",[30,112972,112973],{"__ignoreMap":141},[228,112974,112975,112977,112979,112981,112983],{"class":230,"line":231},[228,112976,111711],{"class":238},[228,112978,284],{"class":234},[228,112980,111716],{"class":238},[228,112982,770],{"class":234},[228,112984,111721],{"class":238},[19,112986,112987,112988,112991,112992,112995],{},"计算 tip 到 target 的距离。",[30,112989,112990],{},"tip - target"," 得到一个三维向量，",[30,112993,112994],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,112997,14748],{},[220,112999,113002],{"className":113000,"code":113001,"language":5302,"meta":141},[5300],"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",[30,113003,113001],{"__ignoreMap":141},[220,113005,113007],{"className":30493,"code":113006,"language":30495,"meta":141,"style":141},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[30,113008,113009],{"__ignoreMap":141},[228,113010,113011,113013,113015,113017,113019],{"class":230,"line":231},[228,113012,112658],{"class":238},[228,113014,284],{"class":234},[228,113016,112152],{"class":287},[228,113018,6633],{"class":234},[228,113020,112157],{"class":238},[19,113022,113023,113024,113027,113028,113031],{},"计算动作惩罚。",[30,113025,113026],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[30,113029,113030],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[220,113033,113035],{"className":30493,"code":113034,"language":30495,"meta":141,"style":141},"return float(-dist - control_cost)\n",[30,113036,113037],{"__ignoreMap":141},[228,113038,113039,113041,113043,113045,113047,113049,113051],{"class":230,"line":231},[228,113040,17161],{"class":234},[228,113042,109912],{"class":287},[228,113044,239],{"class":238},[228,113046,770],{"class":234},[228,113048,111711],{"class":238},[228,113050,770],{"class":234},[228,113052,112174],{"class":238},[19,113054,113055],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[220,113057,113058],{"className":30493,"code":110918,"language":30495,"meta":141,"style":141},[30,113059,113060],{"__ignoreMap":141},[228,113061,113062,113064,113066],{"class":230,"line":231},[228,113063,110925],{"class":238},[228,113065,284],{"class":234},[228,113067,104876],{"class":287},[19,113069,113070],{},"累计奖励变量，记录整个运行过程的总分。",[220,113072,113074],{"className":30493,"code":113073,"language":30495,"meta":141,"style":141},"for step in range(500):\n",[30,113075,113076],{"__ignoreMap":141},[228,113077,113078,113080,113082,113084,113086,113088,113090],{"class":230,"line":231},[228,113079,3139],{"class":234},[228,113081,31731],{"class":238},[228,113083,26159],{"class":234},[228,113085,32558],{"class":287},[228,113087,239],{"class":238},[228,113089,65189],{"class":287},[228,113091,30901],{"class":238},[19,113093,113094],{},"运行 500 个控制步。",[220,113096,113097],{"className":30493,"code":104658,"language":30495,"meta":141,"style":141},[30,113098,113099],{"__ignoreMap":141},[228,113100,113101],{"class":230,"line":231},[228,113102,104658],{"class":238},[19,113104,113105,113106,101133,113108,113110],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[30,113107,103346],{},[30,113109,103349],{}," 是当前状态下的坐标。",[220,113112,113114],{"className":30493,"code":113113,"language":30495,"meta":141,"style":141},"error = target - tip\n",[30,113115,113116],{"__ignoreMap":141},[228,113117,113118,113120,113122,113124,113126],{"class":230,"line":231},[228,113119,112711],{"class":238},[228,113121,284],{"class":234},[228,113123,112283],{"class":238},[228,113125,770],{"class":234},[228,113127,112288],{"class":238},[19,113129,113130],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[220,113132,113134],{"className":30493,"code":113133,"language":30495,"meta":141,"style":141},"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",[30,113135,113136,113168],{"__ignoreMap":141},[228,113137,113138,113140,113142,113144,113146,113148,113150,113152,113154,113156,113158,113160,113162,113164,113166],{"class":230,"line":231},[228,113139,105986],{"class":238},[228,113141,430],{"class":287},[228,113143,4557],{"class":238},[228,113145,284],{"class":234},[228,113147,112305],{"class":238},[228,113149,105375],{"class":287},[228,113151,6633],{"class":234},[228,113153,112312],{"class":238},[228,113155,316],{"class":287},[228,113157,112317],{"class":238},[228,113159,770],{"class":234},[228,113161,102518],{"class":287},[228,113163,12550],{"class":238},[228,113165,102518],{"class":287},[228,113167,245],{"class":238},[228,113169,113170,113172,113174,113176,113178,113180,113182,113184,113186,113188,113190,113192,113194,113196,113198],{"class":230,"line":142},[228,113171,105986],{"class":238},[228,113173,456],{"class":287},[228,113175,4557],{"class":238},[228,113177,284],{"class":234},[228,113179,112305],{"class":238},[228,113181,105375],{"class":287},[228,113183,6633],{"class":234},[228,113185,112312],{"class":238},[228,113187,430],{"class":287},[228,113189,112317],{"class":238},[228,113191,770],{"class":234},[228,113193,102518],{"class":287},[228,113195,12550],{"class":238},[228,113197,102518],{"class":287},[228,113199,245],{"class":238},[19,113201,113202,113203,113206],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[30,113204,113205],{},"error -> ctrl -> step"," 的流程。",[220,113208,113209],{"className":30493,"code":104620,"language":30495,"meta":141,"style":141},[30,113210,113211],{"__ignoreMap":141},[228,113212,113213],{"class":230,"line":231},[228,113214,104620],{"class":238},[19,113216,113217],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[220,113219,113221],{"className":30493,"code":113220,"language":30495,"meta":141,"style":141},"obs = get_obs(model, data)\n",[30,113222,113223],{"__ignoreMap":141},[228,113224,113225,113227,113229],{"class":230,"line":231},[228,113226,110969],{"class":238},[228,113228,284],{"class":234},[228,113230,112406],{"class":238},[19,113232,113233,113234,113237],{},"读取最新观测。后面打印 ",[30,113235,113236],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,113239,102431],{"id":102430},[19,113241,113242],{},"观测维度为:",[220,113244,113247],{"className":113245,"code":113246,"language":5302,"meta":141},[5300],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[30,113248,113246],{"__ignoreMap":141},[19,113250,113251],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,113253,113254],{},"程序每 100 步打印：",[220,113256,113259],{"className":113257,"code":113258,"language":5302,"meta":141},[5300],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[30,113260,113258],{"__ignoreMap":141},[19,113262,113263,113264,113266],{},"如果控制有效，你应该看到最终 ",[30,113265,103346],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,113268,102463],{"id":102462},[183,113270,113271,113274,113277,113283,113289,113296,113306],{},[186,113272,113273],{},"修改目标点位置。",[186,113275,113276],{},"重新运行，观察最终 tip 是否变化。",[186,113278,113279,113280,113282],{},"把 gravity 改成 ",[30,113281,102704],{},"，观察控制是否变差。",[186,113284,111296,113285,111300,113287,78],{},[30,113286,102273],{},[30,113288,316],{},[186,113290,102526,113291,102529,113293,113295],{},[30,113292,110711],{},[30,113294,107422],{},"，观察机械臂是否更难移动。",[186,113297,102526,113298,82645,113300,102529,113302,113305],{},[30,113299,103349],{},[30,113301,104261],{},[30,113303,113304],{},"0.2 0 0.6","，观察 reward 和 final tip。",[186,113307,113308],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,113310,102568],{"id":102567},[200,113312,113314],{"id":113313},"site-not-found",[30,113315,113316],{},"site not found",[19,113318,113319,113320,101133,113323,78],{},"检查 XML 中是否有 ",[30,113321,113322],{},"site name=\"tip\"",[30,113324,113325],{},"site name=\"target\"",[200,113327,113328],{"id":113328},"机械臂完全不动",[19,113330,102638],{},[183,113332,113333,113338,113341,113346],{},[186,113334,113335,113337],{},[30,113336,102273],{}," 是否为 2",[186,113339,113340],{},"actuator 是否引用正确 joint",[186,113342,113343,113345],{},[30,113344,101191],{}," 是否被赋值",[186,113347,113348,113349],{},"是否执行了 ",[30,113350,100800],{},[200,113352,113353],{"id":113353},"控制效果不好",[19,113355,113356],{},"正常。本章重点不是控制器最优，而是任务结构:",[220,113358,113361],{"className":113359,"code":113360,"language":5302,"meta":141},[5300],"obs → action → mj_step → reward → next_obs\n",[30,113362,113360],{"__ignoreMap":141},[200,113364,113366],{"id":113365},"tip-坐标不变化","tip 坐标不变化",[19,113368,102690],{},[183,113370,113371,113376,113384,113393],{},[186,113372,113373,113374,78],{},"是否每步调用了 ",[30,113375,100800],{},[186,113377,113378,113379,101133,113381,78],{},"是否写入了 ",[30,113380,106241],{},[30,113382,113383],{},"data.ctrl[1]",[186,113385,113386,113387,451,113390,78],{},"actuator 是否正确引用 ",[30,113388,113389],{},"joint1",[30,113391,113392],{},"joint2",[186,113394,113395],{},"控制输入是否太小。",[200,113397,113398],{"id":113398},"目标点不会动",[19,113400,113401],{},"本章的 target 是固定 site：",[220,113403,113405],{"className":53182,"code":113404,"language":53184,"meta":141,"style":141},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[30,113406,113407],{"__ignoreMap":141},[228,113408,113409,113411,113413,113415,113417,113419,113421,113423,113426],{"class":230,"line":231},[228,113410,1148],{"class":238},[228,113412,103325],{"class":51415},[228,113414,15035],{"class":2077},[228,113416,284],{"class":238},[228,113418,112074],{"class":343},[228,113420,101221],{"class":2077},[228,113422,284],{"class":238},[228,113424,113425],{"class":343},"\"0.5 0 0.4\"",[228,113427,113428],{"class":238}," ...\u002F>\n",[19,113430,113431,113432,113434],{},"它直接挂在 ",[30,113433,101956],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[200,113436,113437],{"id":113437},"机械臂不像真实机械臂",[19,113439,113440],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,113442,102722],{"id":102721},[19,113444,113445],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,113447,113448],{},"核心公式：",[220,113450,113453],{"className":113451,"code":113452,"language":5302,"meta":141},[5300],"distance = ||tip - target||\nreward = -distance - action_cost\n",[30,113454,113452],{"__ignoreMap":141},[19,113456,113457],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[5241,113459,113460],{},"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":141,"searchDepth":142,"depth":142,"links":113462},[113463,113464,113465,113470,113474,113475,113476,113484],{"id":100761,"depth":142,"text":100762},{"id":100884,"depth":142,"text":100885},{"id":101159,"depth":142,"text":101160,"children":113466},[113467,113468,113469],{"id":111666,"depth":1293,"text":111667},{"id":111742,"depth":1293,"text":111742},{"id":111772,"depth":1293,"text":111773},{"id":101367,"depth":142,"text":101368,"children":113471},[113472,113473],{"id":101687,"depth":1293,"text":101687},{"id":101823,"depth":1293,"text":101823},{"id":102430,"depth":142,"text":102431},{"id":102462,"depth":142,"text":102463},{"id":102567,"depth":142,"text":102568,"children":113477},[113478,113479,113480,113481,113482,113483],{"id":113313,"depth":1293,"text":113316},{"id":113328,"depth":1293,"text":113328},{"id":113353,"depth":1293,"text":113353},{"id":113365,"depth":1293,"text":113366},{"id":113398,"depth":1293,"text":113398},{"id":113437,"depth":1293,"text":113437},{"id":102721,"depth":142,"text":102722},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111470,"description":141},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113491,"title":113492,"body":113493,"description":141,"extension":155,"meta":116955,"navigation":157,"path":116956,"seo":116957,"stem":116958,"__hash__":116959},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113494,"toc":116926},[113495,113498,113500,113503,113506,113531,113534,113540,113543,113549,113551,113553,113577,113579,113597,113599,113642,113644,113671,113673,113676,113728,113731,113737,113746,113749,113787,113790,113829,113832,113840,113847,113850,113856,113858,113912,113919,113964,113967,113971,113987,113997,113999,115260,115262,115274,115276,115287,115289,115292,115313,115316,115319,115352,115358,115361,115394,115397,115400,115441,115446,115460,115463,115476,115481,115504,115506,115521,115531,115546,115553,115573,115588,115606,115609,115626,115634,115650,115656,115688,115701,115733,115743,115778,115792,115838,115852,115894,115905,115918,115924,115957,115960,115987,115997,116037,116047,116064,116071,116089,116092,116133,116146,116161,116164,116187,116190,116202,116205,116224,116229,116250,116253,116268,116271,116305,116317,116332,116335,116360,116363,116382,116385,116417,116420,116444,116450,116480,116487,116500,116503,116505,116507,116513,116516,116519,116531,116534,116536,116590,116592,116596,116602,116611,116614,116621,116623,116646,116649,116653,116655,116673,116679,116681,116714,116717,116723,116727,116730,116750,116755,116759,116766,116786,116791,116795,116798,116818,116821,116907,116911,116914,116920,116923],[10,113496,113492],{"id":113497},"_8gymnasium-风格强化学习接口基础",[14,113499,100762],{"id":100761},[19,113501,113502],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,113504,113505],{},"你将实现:",[220,113507,113509],{"className":30493,"code":113508,"language":30495,"meta":141,"style":141},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[30,113510,113511,113521],{"__ignoreMap":141},[228,113512,113513,113516,113518],{"class":230,"line":231},[228,113514,113515],{"class":238},"obs, info ",[228,113517,284],{"class":234},[228,113519,113520],{"class":238}," env.reset()\n",[228,113522,113523,113526,113528],{"class":230,"line":142},[228,113524,113525],{"class":238},"obs, reward, terminated, truncated, info ",[228,113527,284],{"class":234},[228,113529,113530],{"class":238}," env.step(action)\n",[19,113532,113533],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,113535,113536,113537,113539],{},"前面章节的代码都是“脚本式”的：在 ",[30,113538,102410],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,113541,113542],{},"可以先记住 Gymnasium 环境的核心交互：",[220,113544,113547],{"className":113545,"code":113546,"language":5302,"meta":141},[5300],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[30,113548,113546],{"__ignoreMap":141},[14,113550,100885],{"id":100884},[19,113552,100888],{},[220,113554,113555],{"className":23937,"code":104503,"language":23939,"meta":141,"style":141},[30,113556,113557],{"__ignoreMap":141},[228,113558,113559,113561,113563,113565,113567,113569,113571,113573,113575],{"class":230,"line":231},[228,113560,24692],{"class":2077},[228,113562,26431],{"class":343},[228,113564,23949],{"class":343},[228,113566,26516],{"class":287},[228,113568,104518],{"class":343},[228,113570,100913],{"class":343},[228,113572,102616],{"class":343},[228,113574,100929],{"class":343},[228,113576,104527],{"class":343},[19,113578,102934],{},[220,113580,113582],{"className":23937,"code":113581,"language":23939,"meta":141,"style":141},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[30,113583,113584],{"__ignoreMap":141},[228,113585,113586,113588,113590,113592,113594],{"class":230,"line":231},[228,113587,23946],{"class":2077},[228,113589,23949],{"class":343},[228,113591,101045],{"class":343},[228,113593,107826],{"class":343},[228,113595,113596],{"class":343}," gymnasium\n",[19,113598,102951],{},[220,113600,113602],{"className":23937,"code":113601,"language":23939,"meta":141,"style":141},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[30,113603,113604,113621,113630],{"__ignoreMap":141},[228,113605,113606,113608,113610,113612,113615,113617,113619],{"class":230,"line":231},[228,113607,30445],{"class":2077},[228,113609,29291],{"class":343},[228,113611,25231],{"class":287},[228,113613,113614],{"class":343}," mujoco-gym-api",[228,113616,101090],{"class":343},[228,113618,101093],{"class":287},[228,113620,101096],{"class":287},[228,113622,113623,113625,113627],{"class":230,"line":142},[228,113624,30445],{"class":2077},[228,113626,101103],{"class":343},[228,113628,113629],{"class":343}," mujoco-gym-api\n",[228,113631,113632,113634,113636,113638,113640],{"class":230,"line":1293},[228,113633,23946],{"class":2077},[228,113635,23949],{"class":343},[228,113637,101045],{"class":343},[228,113639,107826],{"class":343},[228,113641,113596],{"class":343},[19,113643,101119],{},[183,113645,113646,113656,113659,113665],{},[186,113647,113648,113649,113652,113653,78],{},"本章使用 ",[30,113650,113651],{},"gymnasium","，不是旧版 ",[30,113654,113655],{},"gym",[186,113657,113658],{},"Gymnasium API 与旧 Gym API 有差异。",[186,113660,113661,113662,78],{},"旧 Gym 常见返回值是 4 个: ",[30,113663,113664],{},"obs, reward, done, info",[186,113666,113667,113668,78],{},"Gymnasium 返回值是 5 个: ",[30,113669,113670],{},"obs, reward, terminated, truncated, info",[14,113672,101160],{"id":101159},[19,113674,113675],{},"强化学习环境接口包含:",[376,113677,113678,113687],{},[379,113679,113680],{},[382,113681,113682,113685],{},[385,113683,113684],{"align":23851},"方法",[385,113686,102811],{"align":23851},[423,113688,113689,113699,113709,113719],{},[382,113690,113691,113696],{},[428,113692,113693],{"align":23851},[30,113694,113695],{},"reset()",[428,113697,113698],{"align":23851},"重置环境",[382,113700,113701,113706],{},[428,113702,113703],{"align":23851},[30,113704,113705],{},"step(action)",[428,113707,113708],{"align":23851},"执行动作",[382,113710,113711,113716],{},[428,113712,113713],{"align":23851},[30,113714,113715],{},"observation_space",[428,113717,113718],{"align":23851},"观测空间",[382,113720,113721,113726],{},[428,113722,113723],{"align":23851},[30,113724,113725],{},"action_space",[428,113727,23769],{"align":23851},[19,113729,113730],{},"一个最小环境需要完成:",[220,113732,113735],{"className":113733,"code":113734,"language":5302,"meta":141},[5300],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[30,113736,113734],{"__ignoreMap":141},[200,113738,113740,101133,113743,104753],{"id":113739},"terminated-和-truncated-的区别",[30,113741,113742],{},"terminated",[30,113744,113745],{},"truncated",[19,113747,113748],{},"Gymnasium 把“结束”拆成两个概念：",[376,113750,113751,113761],{},[379,113752,113753],{},[382,113754,113755,113757,113759],{},[385,113756,104689],{"align":23851},[385,113758,100815],{"align":23851},[385,113760,21302],{"align":23851},[423,113762,113763,113775],{},[382,113764,113765,113769,113772],{},[428,113766,113767],{"align":23851},[30,113768,113742],{},[428,113770,113771],{"align":23851},"任务自然结束",[428,113773,113774],{"align":23851},"机械臂到达目标、机器人摔倒",[382,113776,113777,113781,113784],{},[428,113778,113779],{"align":23851},[30,113780,113745],{},[428,113782,113783],{"align":23851},"因外部限制截断",[428,113785,113786],{"align":23851},"达到最大步数、时间限制",[19,113788,113789],{},"本章中：",[220,113791,113793],{"className":30493,"code":113792,"language":30495,"meta":141,"style":141},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[30,113794,113795,113810],{"__ignoreMap":141},[228,113796,113797,113800,113802,113805,113807],{"class":230,"line":231},[228,113798,113799],{"class":238},"terminated ",[228,113801,284],{"class":234},[228,113803,113804],{"class":238}," dist ",[228,113806,1148],{"class":234},[228,113808,113809],{"class":287}," 0.05\n",[228,113811,113812,113815,113817,113819,113822,113824,113826],{"class":230,"line":142},[228,113813,113814],{"class":238},"truncated ",[228,113816,284],{"class":234},[228,113818,38988],{"class":287},[228,113820,113821],{"class":238},".steps ",[228,113823,1824],{"class":234},[228,113825,38988],{"class":287},[228,113827,113828],{"class":238},".max_steps\n",[19,113830,113831],{},"也就是：",[183,113833,113834,113837],{},[186,113835,113836],{},"末端距离目标小于 0.05，任务成功结束。",[186,113838,113839],{},"步数超过上限，episode 被截断。",[200,113841,113843,101133,113845],{"id":113842},"observation_space-和-action_space",[30,113844,113715],{},[30,113846,113725],{},[19,113848,113849],{},"这两个对象告诉算法：",[220,113851,113854],{"className":113852,"code":113853,"language":5302,"meta":141},[5300],"观测长什么样\n动作允许多大\n",[30,113855,113853],{"__ignoreMap":141},[19,113857,14748],{},[220,113859,113861],{"className":30493,"code":113860,"language":30495,"meta":141,"style":141},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[30,113862,113863],{"__ignoreMap":141},[228,113864,113865,113867,113870,113872,113875,113878,113881,113883,113885,113888,113890,113892,113894,113896,113898,113900,113902,113905,113907,113909],{"class":230,"line":231},[228,113866,30938],{"class":287},[228,113868,113869],{"class":238},".action_space ",[228,113871,284],{"class":234},[228,113873,113874],{"class":238}," spaces.Box(",[228,113876,113877],{"class":5331},"low",[228,113879,113880],{"class":234},"=-",[228,113882,102518],{"class":287},[228,113884,12550],{"class":238},[228,113886,113887],{"class":5331},"high",[228,113889,284],{"class":234},[228,113891,102518],{"class":287},[228,113893,12550],{"class":238},[228,113895,96078],{"class":5331},[228,113897,284],{"class":234},[228,113899,239],{"class":238},[228,113901,316],{"class":287},[228,113903,113904],{"class":238},",), ",[228,113906,93615],{"class":5331},[228,113908,284],{"class":234},[228,113910,113911],{"class":238},"np.float32)\n",[19,113913,113914,113915,113918],{},"表示动作是 2 维数组，每个值都在 ",[30,113916,113917],{},"[-1, 1]"," 范围内。",[220,113920,113922],{"className":30493,"code":113921,"language":30495,"meta":141,"style":141},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[30,113923,113924],{"__ignoreMap":141},[228,113925,113926,113928,113931,113933,113935,113937,113939,113942,113944,113946,113948,113950,113952,113954,113956,113958,113960,113962],{"class":230,"line":231},[228,113927,30938],{"class":287},[228,113929,113930],{"class":238},".observation_space ",[228,113932,284],{"class":234},[228,113934,113874],{"class":238},[228,113936,113877],{"class":5331},[228,113938,113880],{"class":234},[228,113940,113941],{"class":238},"np.inf, ",[228,113943,113887],{"class":5331},[228,113945,284],{"class":234},[228,113947,113941],{"class":238},[228,113949,96078],{"class":5331},[228,113951,284],{"class":234},[228,113953,239],{"class":238},[228,113955,684],{"class":287},[228,113957,113904],{"class":238},[228,113959,93615],{"class":5331},[228,113961,284],{"class":234},[228,113963,113911],{"class":238},[19,113965,113966],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[200,113968,113970],{"id":113969},"frame_skip-是什么","frame_skip 是什么",[220,113972,113974],{"className":30493,"code":113973,"language":30495,"meta":141,"style":141},"self.frame_skip = 5\n",[30,113975,113976],{"__ignoreMap":141},[228,113977,113978,113980,113983,113985],{"class":230,"line":231},[228,113979,30938],{"class":287},[228,113981,113982],{"class":238},".frame_skip ",[228,113984,284],{"class":234},[228,113986,54542],{"class":287},[19,113988,113989,113990,113993,113994,113996],{},"表示外部调用一次 ",[30,113991,113992],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[30,113995,101330],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,113998,101368],{"id":101367},[220,114000,114002],{"className":30493,"code":114001,"language":30495,"meta":141,"style":141},"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",[30,114003,114004,114016,114022,114032,114043,114047,114051,114059,114064,114068,114072,114076,114080,114084,114088,114092,114097,114101,114105,114109,114114,114118,114122,114126,114130,114134,114138,114142,114146,114150,114154,114158,114162,114166,114184,114199,114203,114216,114226,114241,114258,114262,114283,114302,114327,114341,114345,114355,114367,114377,114381,114423,114461,114465,114475,114491,114506,114525,114532,114536,114549,114564,114579,114592,114611,114627,114631,114672,114687,114702,114706,114745,114756,114769,114773,114783,114792,114796,114806,114821,114839,114843,114854,114871,114884,114888,114898,114902,114913,114924,114928,114942,114956,114972,114976,114989,115006,115021,115028,115032,115036,115048,115058,115076,115088,115100,115104,115112,115128,115137,115146,115154,115196,115209,115214,115218,115236,115240,115244,115256],{"__ignoreMap":141},[228,114005,114006,114008,114011,114013],{"class":230,"line":231},[228,114007,30507],{"class":234},[228,114009,114010],{"class":238}," gymnasium ",[228,114012,31498],{"class":234},[228,114014,114015],{"class":238}," gym\n",[228,114017,114018,114020],{"class":230,"line":142},[228,114019,30507],{"class":234},[228,114021,101416],{"class":238},[228,114023,114024,114026,114028,114030],{"class":230,"line":1293},[228,114025,30507],{"class":234},[228,114027,31495],{"class":238},[228,114029,31498],{"class":234},[228,114031,31501],{"class":238},[228,114033,114034,114036,114038,114040],{"class":230,"line":1308},[228,114035,30852],{"class":234},[228,114037,114010],{"class":238},[228,114039,30507],{"class":234},[228,114041,114042],{"class":238}," spaces\n",[228,114044,114045],{"class":230,"line":1314},[228,114046,2514],{"emptyLinePlaceholder":157},[228,114048,114049],{"class":230,"line":1328},[228,114050,2514],{"emptyLinePlaceholder":157},[228,114052,114053,114055,114057],{"class":230,"line":1334},[228,114054,101429],{"class":287},[228,114056,13679],{"class":234},[228,114058,101434],{"class":343},[228,114060,114061],{"class":230,"line":1425},[228,114062,114063],{"class":343},"\u003Cmujoco model=\"gym_reacher\">\n",[228,114065,114066],{"class":230,"line":1431},[228,114067,111853],{"class":343},[228,114069,114070],{"class":230,"line":1443},[228,114071,2514],{"emptyLinePlaceholder":157},[228,114073,114074],{"class":230,"line":1726},[228,114075,101453],{"class":343},[228,114077,114078],{"class":230,"line":1731},[228,114079,111871],{"class":343},[228,114081,114082],{"class":230,"line":1737},[228,114083,2514],{"emptyLinePlaceholder":157},[228,114085,114086],{"class":230,"line":1742},[228,114087,111880],{"class":343},[228,114089,114090],{"class":230,"line":1756},[228,114091,111885],{"class":343},[228,114093,114094],{"class":230,"line":1761},[228,114095,114096],{"class":343},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[228,114098,114099],{"class":230,"line":1767},[228,114100,2514],{"emptyLinePlaceholder":157},[228,114102,114103],{"class":230,"line":1788},[228,114104,111899],{"class":343},[228,114106,114107],{"class":230,"line":1793},[228,114108,111904],{"class":343},[228,114110,114111],{"class":230,"line":1807},[228,114112,114113],{"class":343},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[228,114115,114116],{"class":230,"line":1812},[228,114117,111914],{"class":343},[228,114119,114120],{"class":230,"line":1841},[228,114121,106553],{"class":343},[228,114123,114124],{"class":230,"line":1846},[228,114125,101482],{"class":343},[228,114127,114128],{"class":230,"line":1863},[228,114129,101487],{"class":343},[228,114131,114132],{"class":230,"line":1868},[228,114133,2514],{"emptyLinePlaceholder":157},[228,114135,114136],{"class":230,"line":1873},[228,114137,106570],{"class":343},[228,114139,114140],{"class":230,"line":1878},[228,114141,111939],{"class":343},[228,114143,114144],{"class":230,"line":1892},[228,114145,111944],{"class":343},[228,114147,114148],{"class":230,"line":1897},[228,114149,106580],{"class":343},[228,114151,114152],{"class":230,"line":2691},[228,114153,101492],{"class":343},[228,114155,114156],{"class":230,"line":2705},[228,114157,95813],{"class":343},[228,114159,114160],{"class":230,"line":2713},[228,114161,2514],{"emptyLinePlaceholder":157},[228,114163,114164],{"class":230,"line":2718},[228,114165,2514],{"emptyLinePlaceholder":157},[228,114167,114168,114170,114173,114175,114177,114179,114182],{"class":230,"line":2724},[228,114169,14809],{"class":234},[228,114171,114172],{"class":2077}," ReacherEnv",[228,114174,239],{"class":238},[228,114176,113655],{"class":2077},[228,114178,796],{"class":238},[228,114180,114181],{"class":2077},"Env",[228,114183,30901],{"class":238},[228,114185,114186,114189,114191,114193,114196],{"class":230,"line":2730},[228,114187,114188],{"class":238},"    metadata ",[228,114190,284],{"class":234},[228,114192,4562],{"class":238},[228,114194,114195],{"class":343},"\"render_modes\"",[228,114197,114198],{"class":238},": []}\n",[228,114200,114201],{"class":230,"line":2735},[228,114202,2514],{"emptyLinePlaceholder":157},[228,114204,114205,114207,114209,114212,114214],{"class":230,"line":8063},[228,114206,30916],{"class":234},[228,114208,30919],{"class":287},[228,114210,114211],{"class":238},"(self) -> ",[228,114213,95801],{"class":287},[228,114215,3853],{"class":238},[228,114217,114218,114220,114222,114224],{"class":230,"line":8087},[228,114219,30932],{"class":287},[228,114221,17376],{"class":238},[228,114223,30944],{"class":287},[228,114225,2090],{"class":238},[228,114227,114228,114230,114233,114235,114237,114239],{"class":230,"line":8092},[228,114229,30960],{"class":287},[228,114231,114232],{"class":238},".model ",[228,114234,284],{"class":234},[228,114236,101527],{"class":238},[228,114238,101429],{"class":287},[228,114240,245],{"class":238},[228,114242,114243,114245,114248,114250,114253,114255],{"class":230,"line":8098},[228,114244,30960],{"class":287},[228,114246,114247],{"class":238},".data ",[228,114249,284],{"class":234},[228,114251,114252],{"class":238}," mujoco.MjData(",[228,114254,30938],{"class":287},[228,114256,114257],{"class":238},".model)\n",[228,114259,114260],{"class":230,"line":8125},[228,114261,2514],{"emptyLinePlaceholder":157},[228,114263,114264,114266,114269,114271,114274,114276,114279,114281],{"class":230,"line":8130},[228,114265,30960],{"class":287},[228,114267,114268],{"class":238},".tip_site_id ",[228,114270,284],{"class":234},[228,114272,114273],{"class":238}," mujoco.mj_name2id(",[228,114275,30938],{"class":287},[228,114277,114278],{"class":238},".model, mujoco.mjtObj.mjOBJ_SITE, ",[228,114280,111651],{"class":343},[228,114282,245],{"class":238},[228,114284,114285,114287,114290,114292,114294,114296,114298,114300],{"class":230,"line":8136},[228,114286,30960],{"class":287},[228,114288,114289],{"class":238},".target_site_id ",[228,114291,284],{"class":234},[228,114293,114273],{"class":238},[228,114295,30938],{"class":287},[228,114297,114278],{"class":238},[228,114299,112074],{"class":343},[228,114301,245],{"class":238},[228,114303,114304,114306,114308,114310,114312,114314,114317,114319,114321,114323,114325],{"class":230,"line":8148},[228,114305,2611],{"class":234},[228,114307,38988],{"class":287},[228,114309,114268],{"class":238},[228,114311,1148],{"class":234},[228,114313,4207],{"class":287},[228,114315,114316],{"class":234}," or",[228,114318,38988],{"class":287},[228,114320,114289],{"class":238},[228,114322,1148],{"class":234},[228,114324,4207],{"class":287},[228,114326,3853],{"class":238},[228,114328,114329,114332,114334,114336,114339],{"class":230,"line":8160},[228,114330,114331],{"class":234},"            raise",[228,114333,103550],{"class":287},[228,114335,239],{"class":238},[228,114337,114338],{"class":343},"\"required sites not found\"",[228,114340,245],{"class":238},[228,114342,114343],{"class":230,"line":8172},[228,114344,2514],{"emptyLinePlaceholder":157},[228,114346,114347,114349,114351,114353],{"class":230,"line":9831},[228,114348,30960],{"class":287},[228,114350,113982],{"class":238},[228,114352,284],{"class":234},[228,114354,54542],{"class":287},[228,114356,114357,114359,114362,114364],{"class":230,"line":9856},[228,114358,30960],{"class":287},[228,114360,114361],{"class":238},".max_steps ",[228,114363,284],{"class":234},[228,114365,114366],{"class":287}," 200\n",[228,114368,114369,114371,114373,114375],{"class":230,"line":9879},[228,114370,30960],{"class":287},[228,114372,113821],{"class":238},[228,114374,284],{"class":234},[228,114376,47448],{"class":287},[228,114378,114379],{"class":230,"line":9903},[228,114380,2514],{"emptyLinePlaceholder":157},[228,114382,114383,114385,114387,114389,114391,114393,114395,114397,114399,114401,114403,114405,114407,114409,114411,114413,114415,114417,114419,114421],{"class":230,"line":9908},[228,114384,30960],{"class":287},[228,114386,113869],{"class":238},[228,114388,284],{"class":234},[228,114390,113874],{"class":238},[228,114392,113877],{"class":5331},[228,114394,113880],{"class":234},[228,114396,102518],{"class":287},[228,114398,12550],{"class":238},[228,114400,113887],{"class":5331},[228,114402,284],{"class":234},[228,114404,102518],{"class":287},[228,114406,12550],{"class":238},[228,114408,96078],{"class":5331},[228,114410,284],{"class":234},[228,114412,239],{"class":238},[228,114414,316],{"class":287},[228,114416,113904],{"class":238},[228,114418,93615],{"class":5331},[228,114420,284],{"class":234},[228,114422,113911],{"class":238},[228,114424,114425,114427,114429,114431,114433,114435,114437,114439,114441,114443,114445,114447,114449,114451,114453,114455,114457,114459],{"class":230,"line":9913},[228,114426,30960],{"class":287},[228,114428,113930],{"class":238},[228,114430,284],{"class":234},[228,114432,113874],{"class":238},[228,114434,113877],{"class":5331},[228,114436,113880],{"class":234},[228,114438,113941],{"class":238},[228,114440,113887],{"class":5331},[228,114442,284],{"class":234},[228,114444,113941],{"class":238},[228,114446,96078],{"class":5331},[228,114448,284],{"class":234},[228,114450,239],{"class":238},[228,114452,684],{"class":287},[228,114454,113904],{"class":238},[228,114456,93615],{"class":5331},[228,114458,284],{"class":234},[228,114460,113911],{"class":238},[228,114462,114463],{"class":230,"line":9918},[228,114464,2514],{"emptyLinePlaceholder":157},[228,114466,114467,114469,114472],{"class":230,"line":9927},[228,114468,30916],{"class":234},[228,114470,114471],{"class":2077}," _get_obs",[228,114473,114474],{"class":238},"(self) -> np.ndarray:\n",[228,114476,114477,114479,114481,114483,114486,114488],{"class":230,"line":9932},[228,114478,112252],{"class":238},[228,114480,284],{"class":234},[228,114482,38988],{"class":287},[228,114484,114485],{"class":238},".data.site_xpos[",[228,114487,30938],{"class":287},[228,114489,114490],{"class":238},".tip_site_id].copy()\n",[228,114492,114493,114495,114497,114499,114501,114503],{"class":230,"line":9938},[228,114494,112265],{"class":238},[228,114496,284],{"class":234},[228,114498,38988],{"class":287},[228,114500,114485],{"class":238},[228,114502,30938],{"class":287},[228,114504,114505],{"class":238},".target_site_id].copy()\n",[228,114507,114508,114510,114512,114515,114517,114520,114522],{"class":230,"line":9959},[228,114509,110297],{"class":238},[228,114511,284],{"class":234},[228,114513,114514],{"class":238}," np.concatenate([",[228,114516,30938],{"class":287},[228,114518,114519],{"class":238},".data.qpos.copy(), ",[228,114521,30938],{"class":287},[228,114523,114524],{"class":238},".data.qvel.copy(), tip, target])\n",[228,114526,114527,114529],{"class":230,"line":9965},[228,114528,14867],{"class":234},[228,114530,114531],{"class":238}," obs.astype(np.float32)\n",[228,114533,114534],{"class":230,"line":9979},[228,114535,2514],{"emptyLinePlaceholder":157},[228,114537,114538,114540,114543,114545,114547],{"class":230,"line":9985},[228,114539,30916],{"class":234},[228,114541,114542],{"class":2077}," _get_reward",[228,114544,114211],{"class":238},[228,114546,278],{"class":287},[228,114548,3853],{"class":238},[228,114550,114551,114553,114555,114557,114559,114561],{"class":230,"line":10012},[228,114552,112252],{"class":238},[228,114554,284],{"class":234},[228,114556,38988],{"class":287},[228,114558,114485],{"class":238},[228,114560,30938],{"class":287},[228,114562,114563],{"class":238},".tip_site_id]\n",[228,114565,114566,114568,114570,114572,114574,114576],{"class":230,"line":10021},[228,114567,112265],{"class":238},[228,114569,284],{"class":234},[228,114571,38988],{"class":287},[228,114573,114485],{"class":238},[228,114575,30938],{"class":287},[228,114577,114578],{"class":238},".target_site_id]\n",[228,114580,114581,114584,114586,114588,114590],{"class":230,"line":10027},[228,114582,114583],{"class":238},"        dist ",[228,114585,284],{"class":234},[228,114587,111716],{"class":238},[228,114589,770],{"class":234},[228,114591,111721],{"class":238},[228,114593,114594,114597,114599,114601,114603,114606,114608],{"class":230,"line":10035},[228,114595,114596],{"class":238},"        control_cost ",[228,114598,284],{"class":234},[228,114600,112152],{"class":287},[228,114602,6633],{"class":234},[228,114604,114605],{"class":238}," np.sum(np.square(",[228,114607,30938],{"class":287},[228,114609,114610],{"class":238},".data.ctrl))\n",[228,114612,114613,114615,114617,114619,114621,114623,114625],{"class":230,"line":10040},[228,114614,14867],{"class":234},[228,114616,109912],{"class":287},[228,114618,239],{"class":238},[228,114620,770],{"class":234},[228,114622,111711],{"class":238},[228,114624,770],{"class":234},[228,114626,112174],{"class":238},[228,114628,114629],{"class":230,"line":16719},[228,114630,2514],{"emptyLinePlaceholder":157},[228,114632,114633,114635,114638,114641,114643,114646,114648,114650,114652,114654,114656,114659,114662,114664,114666,114668,114670],{"class":230,"line":16725},[228,114634,30916],{"class":234},[228,114636,114637],{"class":2077}," reset",[228,114639,114640],{"class":238},"(self, ",[228,114642,693],{"class":234},[228,114644,114645],{"class":238},", seed: ",[228,114647,242],{"class":287},[228,114649,25225],{"class":234},[228,114651,39048],{"class":287},[228,114653,13679],{"class":234},[228,114655,39048],{"class":287},[228,114657,114658],{"class":238},", options: ",[228,114660,114661],{"class":287},"dict",[228,114663,25225],{"class":234},[228,114665,39048],{"class":287},[228,114667,13679],{"class":234},[228,114669,39048],{"class":287},[228,114671,30901],{"class":238},[228,114673,114674,114676,114679,114682,114684],{"class":230,"line":16748},[228,114675,30932],{"class":287},[228,114677,114678],{"class":238},"().reset(",[228,114680,114681],{"class":5331},"seed",[228,114683,284],{"class":234},[228,114685,114686],{"class":238},"seed)\n",[228,114688,114689,114692,114694,114697,114699],{"class":230,"line":16754},[228,114690,114691],{"class":238},"        mujoco.mj_resetData(",[228,114693,30938],{"class":287},[228,114695,114696],{"class":238},".model, ",[228,114698,30938],{"class":287},[228,114700,114701],{"class":238},".data)\n",[228,114703,114704],{"class":230,"line":16777},[228,114705,2514],{"emptyLinePlaceholder":157},[228,114707,114708,114710,114713,114715,114717,114720,114722,114724,114726,114728,114730,114732,114734,114736,114738,114740,114742],{"class":230,"line":16791},[228,114709,30960],{"class":287},[228,114711,114712],{"class":238},".data.qpos[:] ",[228,114714,284],{"class":234},[228,114716,38988],{"class":287},[228,114718,114719],{"class":238},".np_random.uniform(",[228,114721,113877],{"class":5331},[228,114723,113880],{"class":234},[228,114725,86325],{"class":287},[228,114727,12550],{"class":238},[228,114729,113887],{"class":5331},[228,114731,284],{"class":234},[228,114733,86325],{"class":287},[228,114735,12550],{"class":238},[228,114737,31611],{"class":5331},[228,114739,284],{"class":234},[228,114741,30938],{"class":287},[228,114743,114744],{"class":238},".model.nq)\n",[228,114746,114747,114749,114752,114754],{"class":230,"line":16811},[228,114748,30960],{"class":287},[228,114750,114751],{"class":238},".data.qvel[:] ",[228,114753,284],{"class":234},[228,114755,104876],{"class":287},[228,114757,114758,114761,114763,114765,114767],{"class":230,"line":16817},[228,114759,114760],{"class":238},"        mujoco.mj_forward(",[228,114762,30938],{"class":287},[228,114764,114696],{"class":238},[228,114766,30938],{"class":287},[228,114768,114701],{"class":238},[228,114770,114771],{"class":230,"line":16828},[228,114772,2514],{"emptyLinePlaceholder":157},[228,114774,114775,114777,114779,114781],{"class":230,"line":16851},[228,114776,30960],{"class":287},[228,114778,113821],{"class":238},[228,114780,284],{"class":234},[228,114782,47448],{"class":287},[228,114784,114785,114787,114789],{"class":230,"line":16873},[228,114786,14867],{"class":234},[228,114788,38988],{"class":287},[228,114790,114791],{"class":238},"._get_obs(), {}\n",[228,114793,114794],{"class":230,"line":16878},[228,114795,2514],{"emptyLinePlaceholder":157},[228,114797,114798,114800,114803],{"class":230,"line":16884},[228,114799,30916],{"class":234},[228,114801,114802],{"class":2077}," step",[228,114804,114805],{"class":238},"(self, action):\n",[228,114807,114808,114810,114812,114815,114817,114819],{"class":230,"line":16898},[228,114809,110337],{"class":238},[228,114811,284],{"class":234},[228,114813,114814],{"class":238}," np.asarray(action, ",[228,114816,93615],{"class":5331},[228,114818,284],{"class":234},[228,114820,113911],{"class":238},[228,114822,114823,114825,114827,114829,114831,114834,114836],{"class":230,"line":16911},[228,114824,110337],{"class":238},[228,114826,284],{"class":234},[228,114828,107562],{"class":238},[228,114830,30938],{"class":287},[228,114832,114833],{"class":238},".action_space.low, ",[228,114835,30938],{"class":287},[228,114837,114838],{"class":238},".action_space.high)\n",[228,114840,114841],{"class":230,"line":16916},[228,114842,2514],{"emptyLinePlaceholder":157},[228,114844,114845,114847,114850,114852],{"class":230,"line":16930},[228,114846,30960],{"class":287},[228,114848,114849],{"class":238},".data.ctrl[:] ",[228,114851,284],{"class":234},[228,114853,107585],{"class":238},[228,114855,114856,114858,114860,114862,114864,114866,114868],{"class":230,"line":16935},[228,114857,3517],{"class":234},[228,114859,101616],{"class":238},[228,114861,26159],{"class":234},[228,114863,32558],{"class":287},[228,114865,239],{"class":238},[228,114867,30938],{"class":287},[228,114869,114870],{"class":238},".frame_skip):\n",[228,114872,114873,114876,114878,114880,114882],{"class":230,"line":16941},[228,114874,114875],{"class":238},"            mujoco.mj_step(",[228,114877,30938],{"class":287},[228,114879,114696],{"class":238},[228,114881,30938],{"class":287},[228,114883,114701],{"class":238},[228,114885,114886],{"class":230,"line":16946},[228,114887,2514],{"emptyLinePlaceholder":157},[228,114889,114890,114892,114894,114896],{"class":230,"line":16960},[228,114891,30960],{"class":287},[228,114893,113821],{"class":238},[228,114895,9592],{"class":234},[228,114897,55814],{"class":287},[228,114899,114900],{"class":230,"line":16965},[228,114901,2514],{"emptyLinePlaceholder":157},[228,114903,114904,114906,114908,114910],{"class":230,"line":16970},[228,114905,110297],{"class":238},[228,114907,284],{"class":234},[228,114909,38988],{"class":287},[228,114911,114912],{"class":238},"._get_obs()\n",[228,114914,114915,114917,114919,114921],{"class":230,"line":16984},[228,114916,110402],{"class":238},[228,114918,284],{"class":234},[228,114920,38988],{"class":287},[228,114922,114923],{"class":238},"._get_reward()\n",[228,114925,114926],{"class":230,"line":16996},[228,114927,2514],{"emptyLinePlaceholder":157},[228,114929,114930,114932,114934,114936,114938,114940],{"class":230,"line":17001},[228,114931,112252],{"class":238},[228,114933,284],{"class":234},[228,114935,38988],{"class":287},[228,114937,114485],{"class":238},[228,114939,30938],{"class":287},[228,114941,114563],{"class":238},[228,114943,114944,114946,114948,114950,114952,114954],{"class":230,"line":17014},[228,114945,112265],{"class":238},[228,114947,284],{"class":234},[228,114949,38988],{"class":287},[228,114951,114485],{"class":238},[228,114953,30938],{"class":287},[228,114955,114578],{"class":238},[228,114957,114958,114960,114962,114964,114967,114969],{"class":230,"line":17019},[228,114959,114583],{"class":238},[228,114961,284],{"class":234},[228,114963,109912],{"class":287},[228,114965,114966],{"class":238},"(np.linalg.norm(tip ",[228,114968,770],{"class":234},[228,114970,114971],{"class":238}," target))\n",[228,114973,114974],{"class":230,"line":17024},[228,114975,2514],{"emptyLinePlaceholder":157},[228,114977,114978,114981,114983,114985,114987],{"class":230,"line":17029},[228,114979,114980],{"class":238},"        terminated ",[228,114982,284],{"class":234},[228,114984,113804],{"class":238},[228,114986,1148],{"class":234},[228,114988,113809],{"class":287},[228,114990,114991,114994,114996,114998,115000,115002,115004],{"class":230,"line":17042},[228,114992,114993],{"class":238},"        truncated ",[228,114995,284],{"class":234},[228,114997,38988],{"class":287},[228,114999,113821],{"class":238},[228,115001,1824],{"class":234},[228,115003,38988],{"class":287},[228,115005,113828],{"class":238},[228,115007,115008,115011,115013,115015,115018],{"class":230,"line":17047},[228,115009,115010],{"class":238},"        info ",[228,115012,284],{"class":234},[228,115014,4562],{"class":238},[228,115016,115017],{"class":343},"\"distance\"",[228,115019,115020],{"class":238},": dist}\n",[228,115022,115023,115025],{"class":230,"line":32748},[228,115024,14867],{"class":234},[228,115026,115027],{"class":238}," obs, reward, terminated, truncated, info\n",[228,115029,115030],{"class":230,"line":32754},[228,115031,2514],{"emptyLinePlaceholder":157},[228,115033,115034],{"class":230,"line":32760},[228,115035,2514],{"emptyLinePlaceholder":157},[228,115037,115038,115040,115042,115044,115046],{"class":230,"line":32766},[228,115039,32062],{"class":234},[228,115041,2087],{"class":2077},[228,115043,101513],{"class":238},[228,115045,95801],{"class":287},[228,115047,3853],{"class":238},[228,115049,115050,115053,115055],{"class":230,"line":32772},[228,115051,115052],{"class":238},"    env ",[228,115054,284],{"class":234},[228,115056,115057],{"class":238}," ReacherEnv()\n",[228,115059,115060,115063,115065,115068,115070,115072,115074],{"class":230,"line":32783},[228,115061,115062],{"class":238},"    obs, info ",[228,115064,284],{"class":234},[228,115066,115067],{"class":238}," env.reset(",[228,115069,114681],{"class":5331},[228,115071,284],{"class":234},[228,115073,430],{"class":287},[228,115075,245],{"class":238},[228,115077,115078,115080,115082,115085],{"class":230,"line":32789},[228,115079,31414],{"class":287},[228,115081,239],{"class":238},[228,115083,115084],{"class":343},"\"initial obs shape:\"",[228,115086,115087],{"class":238},", obs.shape)\n",[228,115089,115090,115092,115094,115097],{"class":230,"line":32809},[228,115091,31414],{"class":287},[228,115093,239],{"class":238},[228,115095,115096],{"class":343},"\"initial info:\"",[228,115098,115099],{"class":238},", info)\n",[228,115101,115102],{"class":230,"line":32815},[228,115103,2514],{"emptyLinePlaceholder":157},[228,115105,115106,115108,115110],{"class":230,"line":32826},[228,115107,110268],{"class":238},[228,115109,284],{"class":234},[228,115111,104876],{"class":287},[228,115113,115114,115116,115118,115120,115122,115124,115126],{"class":230,"line":32832},[228,115115,3315],{"class":234},[228,115117,31731],{"class":238},[228,115119,26159],{"class":234},[228,115121,32558],{"class":287},[228,115123,239],{"class":238},[228,115125,938],{"class":287},[228,115127,30901],{"class":238},[228,115129,115130,115132,115134],{"class":230,"line":32838},[228,115131,110337],{"class":238},[228,115133,284],{"class":234},[228,115135,115136],{"class":238}," env.action_space.sample()\n",[228,115138,115139,115142,115144],{"class":230,"line":32844},[228,115140,115141],{"class":238},"        obs, reward, terminated, truncated, info ",[228,115143,284],{"class":234},[228,115145,113530],{"class":238},[228,115147,115148,115150,115152],{"class":230,"line":32850},[228,115149,110412],{"class":238},[228,115151,9592],{"class":234},[228,115153,110417],{"class":238},[228,115155,115156,115158,115160,115162,115164,115167,115169,115171,115174,115176,115178,115181,115183,115185,115188,115190,115192,115194],{"class":230,"line":32856},[228,115157,32566],{"class":287},[228,115159,239],{"class":238},[228,115161,110446],{"class":343},[228,115163,110449],{"class":238},[228,115165,115166],{"class":343},"\"reward:\"",[228,115168,12550],{"class":238},[228,115170,32133],{"class":287},[228,115172,115173],{"class":238},"(reward, ",[228,115175,310],{"class":287},[228,115177,110460],{"class":238},[228,115179,115180],{"class":343},"\"distance:\"",[228,115182,12550],{"class":238},[228,115184,32133],{"class":287},[228,115186,115187],{"class":238},"(info[",[228,115189,115017],{"class":343},[228,115191,112317],{"class":238},[228,115193,310],{"class":287},[228,115195,30612],{"class":238},[228,115197,115198,115200,115203,115206],{"class":230,"line":32862},[228,115199,2611],{"class":234},[228,115201,115202],{"class":238}," terminated ",[228,115204,115205],{"class":234},"or",[228,115207,115208],{"class":238}," truncated:\n",[228,115210,115211],{"class":230,"line":32868},[228,115212,115213],{"class":234},"            break\n",[228,115215,115216],{"class":230,"line":32888},[228,115217,2514],{"emptyLinePlaceholder":157},[228,115219,115220,115222,115224,115226,115228,115230,115232,115234],{"class":230,"line":32894},[228,115221,31414],{"class":287},[228,115223,239],{"class":238},[228,115225,110491],{"class":343},[228,115227,12550],{"class":238},[228,115229,32133],{"class":287},[228,115231,110498],{"class":238},[228,115233,310],{"class":287},[228,115235,30612],{"class":238},[228,115237,115238],{"class":230,"line":32910},[228,115239,2514],{"emptyLinePlaceholder":157},[228,115241,115242],{"class":230,"line":32916},[228,115243,2514],{"emptyLinePlaceholder":157},[228,115245,115246,115248,115250,115252,115254],{"class":230,"line":32930},[228,115247,1645],{"class":234},[228,115249,31335],{"class":287},[228,115251,101674],{"class":234},[228,115253,101677],{"class":343},[228,115255,3853],{"class":238},[228,115257,115258],{"class":230,"line":32936},[228,115259,101684],{"class":238},[19,115261,103685],{},[220,115263,115265],{"className":23937,"code":115264,"language":23939,"meta":141,"style":141},"touch ch8_gym_env.py\n",[30,115266,115267],{"__ignoreMap":141},[228,115268,115269,115271],{"class":230,"line":231},[228,115270,101398],{"class":2077},[228,115272,115273],{"class":343}," ch8_gym_env.py\n",[19,115275,110559],{},[220,115277,115279],{"className":23937,"code":115278,"language":23939,"meta":141,"style":141},"python ch8_gym_env.py\n",[30,115280,115281],{"__ignoreMap":141},[228,115282,115283,115285],{"class":230,"line":231},[228,115284,30495],{"class":2077},[228,115286,115273],{"class":343},[200,115288,101687],{"id":101687},[19,115290,115291],{},"继承 Gymnasium 环境：",[220,115293,115295],{"className":30493,"code":115294,"language":30495,"meta":141,"style":141},"class ReacherEnv(gym.Env):\n",[30,115296,115297],{"__ignoreMap":141},[228,115298,115299,115301,115303,115305,115307,115309,115311],{"class":230,"line":231},[228,115300,14809],{"class":234},[228,115302,114172],{"class":2077},[228,115304,239],{"class":238},[228,115306,113655],{"class":2077},[228,115308,796],{"class":238},[228,115310,114181],{"class":2077},[228,115312,30901],{"class":238},[19,115314,115315],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,115317,115318],{},"初始化模型：",[220,115320,115322],{"className":30493,"code":115321,"language":30495,"meta":141,"style":141},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[30,115323,115324,115338],{"__ignoreMap":141},[228,115325,115326,115328,115330,115332,115334,115336],{"class":230,"line":231},[228,115327,30938],{"class":287},[228,115329,114232],{"class":238},[228,115331,284],{"class":234},[228,115333,101527],{"class":238},[228,115335,101429],{"class":287},[228,115337,245],{"class":238},[228,115339,115340,115342,115344,115346,115348,115350],{"class":230,"line":142},[228,115341,30938],{"class":287},[228,115343,114247],{"class":238},[228,115345,284],{"class":234},[228,115347,114252],{"class":238},[228,115349,30938],{"class":287},[228,115351,114257],{"class":238},[19,115353,115354,115355,115357],{},"这和前面章节一样，只是现在放到了类的 ",[30,115356,30944],{}," 里。",[19,115359,115360],{},"缓存 site ID：",[220,115362,115364],{"className":30493,"code":115363,"language":30495,"meta":141,"style":141},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[30,115365,115366,115380],{"__ignoreMap":141},[228,115367,115368,115370,115372,115374,115376,115378],{"class":230,"line":231},[228,115369,30938],{"class":287},[228,115371,114268],{"class":238},[228,115373,284],{"class":234},[228,115375,114273],{"class":238},[228,115377,89669],{"class":287},[228,115379,245],{"class":238},[228,115381,115382,115384,115386,115388,115390,115392],{"class":230,"line":142},[228,115383,30938],{"class":287},[228,115385,114289],{"class":238},[228,115387,284],{"class":234},[228,115389,114273],{"class":238},[228,115391,89669],{"class":287},[228,115393,245],{"class":238},[19,115395,115396],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,115398,115399],{},"reset：",[220,115401,115403],{"className":30493,"code":115402,"language":30495,"meta":141,"style":141},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[30,115404,115405],{"__ignoreMap":141},[228,115406,115407,115409,115411,115413,115415,115417,115419,115421,115423,115425,115427,115429,115431,115433,115435,115437,115439],{"class":230,"line":231},[228,115408,32062],{"class":234},[228,115410,114637],{"class":2077},[228,115412,114640],{"class":238},[228,115414,693],{"class":234},[228,115416,114645],{"class":238},[228,115418,242],{"class":287},[228,115420,25225],{"class":234},[228,115422,39048],{"class":287},[228,115424,13679],{"class":234},[228,115426,39048],{"class":287},[228,115428,114658],{"class":238},[228,115430,114661],{"class":287},[228,115432,25225],{"class":234},[228,115434,39048],{"class":287},[228,115436,13679],{"class":234},[228,115438,39048],{"class":287},[228,115440,30901],{"class":238},[19,115442,115443,115445],{},[30,115444,70171],{}," 做四件事：",[183,115447,115448,115451,115454,115457],{},[186,115449,115450],{},"设置随机种子。",[186,115452,115453],{},"重置 MuJoCo data。",[186,115455,115456],{},"随机初始化关节角。",[186,115458,115459],{},"返回初始观测和 info。",[19,115461,115462],{},"step：",[220,115464,115466],{"className":30493,"code":115465,"language":30495,"meta":141,"style":141},"def step(self, action):\n",[30,115467,115468],{"__ignoreMap":141},[228,115469,115470,115472,115474],{"class":230,"line":231},[228,115471,32062],{"class":234},[228,115473,114802],{"class":2077},[228,115475,114805],{"class":238},[19,115477,115478,115480],{},[30,115479,107249],{}," 做六件事：",[183,115482,115483,115486,115492,115495,115498,115501],{},[186,115484,115485],{},"检查并裁剪 action。",[186,115487,115488,115489,78],{},"写入 ",[30,115490,115491],{},"self.data.ctrl",[186,115493,115494],{},"连续推进若干个 MuJoCo 物理步。",[186,115496,115497],{},"计算新观测。",[186,115499,115500],{},"计算奖励和结束条件。",[186,115502,115503],{},"返回 Gymnasium 标准五元组。",[200,115505,101823],{"id":101823},[220,115507,115509],{"className":30493,"code":115508,"language":30495,"meta":141,"style":141},"import gymnasium as gym\n",[30,115510,115511],{"__ignoreMap":141},[228,115512,115513,115515,115517,115519],{"class":230,"line":231},[228,115514,30507],{"class":234},[228,115516,114010],{"class":238},[228,115518,31498],{"class":234},[228,115520,114015],{"class":238},[19,115522,115523,115524,115526,115527,115530],{},"导入 Gymnasium，并起别名 ",[30,115525,113655],{},"。后面写 ",[30,115528,115529],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[220,115532,115534],{"className":30493,"code":115533,"language":30495,"meta":141,"style":141},"from gymnasium import spaces\n",[30,115535,115536],{"__ignoreMap":141},[228,115537,115538,115540,115542,115544],{"class":230,"line":231},[228,115539,30852],{"class":234},[228,115541,114010],{"class":238},[228,115543,30507],{"class":234},[228,115545,114042],{"class":238},[19,115547,115548,115549,115552],{},"导入空间定义工具。",[30,115550,115551],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[220,115554,115555],{"className":30493,"code":115294,"language":30495,"meta":141,"style":141},[30,115556,115557],{"__ignoreMap":141},[228,115558,115559,115561,115563,115565,115567,115569,115571],{"class":230,"line":231},[228,115560,14809],{"class":234},[228,115562,114172],{"class":2077},[228,115564,239],{"class":238},[228,115566,113655],{"class":2077},[228,115568,796],{"class":238},[228,115570,114181],{"class":2077},[228,115572,30901],{"class":238},[19,115574,115575,115576,115579,115580,115582,115583,101133,115585,115587],{},"定义一个类，名字叫 ",[30,115577,115578],{},"ReacherEnv","。括号里的 ",[30,115581,115529],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[30,115584,70171],{},[30,115586,107249],{}," 这两个核心方法。",[220,115589,115591],{"className":30493,"code":115590,"language":30495,"meta":141,"style":141},"metadata = {\"render_modes\": []}\n",[30,115592,115593],{"__ignoreMap":141},[228,115594,115595,115598,115600,115602,115604],{"class":230,"line":231},[228,115596,115597],{"class":238},"metadata ",[228,115599,284],{"class":234},[228,115601,4562],{"class":238},[228,115603,114195],{"class":343},[228,115605,114198],{"class":238},[19,115607,115608],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[220,115610,115612],{"className":30493,"code":115611,"language":30495,"meta":141,"style":141},"def __init__(self) -> None:\n",[30,115613,115614],{"__ignoreMap":141},[228,115615,115616,115618,115620,115622,115624],{"class":230,"line":231},[228,115617,32062],{"class":234},[228,115619,30919],{"class":287},[228,115621,114211],{"class":238},[228,115623,95801],{"class":287},[228,115625,3853],{"class":238},[19,115627,115628,115630,115631,78],{},[30,115629,30944],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[30,115632,115633],{},"env = ReacherEnv()",[220,115635,115637],{"className":30493,"code":115636,"language":30495,"meta":141,"style":141},"super().__init__()\n",[30,115638,115639],{"__ignoreMap":141},[228,115640,115641,115644,115646,115648],{"class":230,"line":231},[228,115642,115643],{"class":287},"super",[228,115645,17376],{"class":238},[228,115647,30944],{"class":287},[228,115649,2090],{"class":238},[19,115651,115652,115653,115655],{},"调用父类 ",[30,115654,115529],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[220,115657,115658],{"className":30493,"code":115321,"language":30495,"meta":141,"style":141},[30,115659,115660,115674],{"__ignoreMap":141},[228,115661,115662,115664,115666,115668,115670,115672],{"class":230,"line":231},[228,115663,30938],{"class":287},[228,115665,114232],{"class":238},[228,115667,284],{"class":234},[228,115669,101527],{"class":238},[228,115671,101429],{"class":287},[228,115673,245],{"class":238},[228,115675,115676,115678,115680,115682,115684,115686],{"class":230,"line":142},[228,115677,30938],{"class":287},[228,115679,114247],{"class":238},[228,115681,284],{"class":234},[228,115683,114252],{"class":238},[228,115685,30938],{"class":287},[228,115687,114257],{"class":238},[19,115689,115690,115691,115693,115694,101133,115697,115700],{},"把 MuJoCo 模型和状态保存到 ",[30,115692,30938],{}," 上。",[30,115695,115696],{},"self.model",[30,115698,115699],{},"self.data"," 表示这个环境对象自己的模型和状态。",[220,115702,115703],{"className":30493,"code":115363,"language":30495,"meta":141,"style":141},[30,115704,115705,115719],{"__ignoreMap":141},[228,115706,115707,115709,115711,115713,115715,115717],{"class":230,"line":231},[228,115708,30938],{"class":287},[228,115710,114268],{"class":238},[228,115712,284],{"class":234},[228,115714,114273],{"class":238},[228,115716,89669],{"class":287},[228,115718,245],{"class":238},[228,115720,115721,115723,115725,115727,115729,115731],{"class":230,"line":142},[228,115722,30938],{"class":287},[228,115724,114289],{"class":238},[228,115726,284],{"class":234},[228,115728,114273],{"class":238},[228,115730,89669],{"class":287},[228,115732,245],{"class":238},[19,115734,115735,115736,101133,115739,115742],{},"提前查好 tip 和 target 的 site ID。这样 ",[30,115737,115738],{},"_get_obs",[30,115740,115741],{},"_get_reward"," 里就不用每次按名字查找。",[220,115744,115746],{"className":30493,"code":115745,"language":30495,"meta":141,"style":141},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[30,115747,115748,115758,115768],{"__ignoreMap":141},[228,115749,115750,115752,115754,115756],{"class":230,"line":231},[228,115751,30938],{"class":287},[228,115753,113982],{"class":238},[228,115755,284],{"class":234},[228,115757,54542],{"class":287},[228,115759,115760,115762,115764,115766],{"class":230,"line":142},[228,115761,30938],{"class":287},[228,115763,114361],{"class":238},[228,115765,284],{"class":234},[228,115767,114366],{"class":287},[228,115769,115770,115772,115774,115776],{"class":230,"line":1293},[228,115771,30938],{"class":287},[228,115773,113821],{"class":238},[228,115775,284],{"class":234},[228,115777,47448],{"class":287},[19,115779,115780,115783,115784,115787,115788,115791],{},[30,115781,115782],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[30,115785,115786],{},"max_steps"," 是一个 episode 最多运行多少步。",[30,115789,115790],{},"steps"," 记录当前 episode 已经走了多少步。",[220,115793,115794],{"className":30493,"code":113860,"language":30495,"meta":141,"style":141},[30,115795,115796],{"__ignoreMap":141},[228,115797,115798,115800,115802,115804,115806,115808,115810,115812,115814,115816,115818,115820,115822,115824,115826,115828,115830,115832,115834,115836],{"class":230,"line":231},[228,115799,30938],{"class":287},[228,115801,113869],{"class":238},[228,115803,284],{"class":234},[228,115805,113874],{"class":238},[228,115807,113877],{"class":5331},[228,115809,113880],{"class":234},[228,115811,102518],{"class":287},[228,115813,12550],{"class":238},[228,115815,113887],{"class":5331},[228,115817,284],{"class":234},[228,115819,102518],{"class":287},[228,115821,12550],{"class":238},[228,115823,96078],{"class":5331},[228,115825,284],{"class":234},[228,115827,239],{"class":238},[228,115829,316],{"class":287},[228,115831,113904],{"class":238},[228,115833,93615],{"class":5331},[228,115835,284],{"class":234},[228,115837,113911],{"class":238},[19,115839,115840,115841,115844,115845,101133,115848,115851],{},"定义动作空间。",[30,115842,115843],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[30,115846,115847],{},"low=-1.0",[30,115849,115850],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[220,115853,115854],{"className":30493,"code":113921,"language":30495,"meta":141,"style":141},[30,115855,115856],{"__ignoreMap":141},[228,115857,115858,115860,115862,115864,115866,115868,115870,115872,115874,115876,115878,115880,115882,115884,115886,115888,115890,115892],{"class":230,"line":231},[228,115859,30938],{"class":287},[228,115861,113930],{"class":238},[228,115863,284],{"class":234},[228,115865,113874],{"class":238},[228,115867,113877],{"class":5331},[228,115869,113880],{"class":234},[228,115871,113941],{"class":238},[228,115873,113887],{"class":5331},[228,115875,284],{"class":234},[228,115877,113941],{"class":238},[228,115879,96078],{"class":5331},[228,115881,284],{"class":234},[228,115883,239],{"class":238},[228,115885,684],{"class":287},[228,115887,113904],{"class":238},[228,115889,93615],{"class":5331},[228,115891,284],{"class":234},[228,115893,113911],{"class":238},[19,115895,115896,115897,115900,115901,115904],{},"定义观测空间。",[30,115898,115899],{},"shape=(10,)"," 表示观测是 10 个数。",[30,115902,115903],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[220,115906,115908],{"className":30493,"code":115907,"language":30495,"meta":141,"style":141},"def _get_obs(self) -> np.ndarray:\n",[30,115909,115910],{"__ignoreMap":141},[228,115911,115912,115914,115916],{"class":230,"line":231},[228,115913,32062],{"class":234},[228,115915,114471],{"class":2077},[228,115917,114474],{"class":238},[19,115919,115920,115921,115923],{},"定义内部函数，用来生成观测。函数名前面的 ",[30,115922,1230],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[220,115925,115927],{"className":30493,"code":115926,"language":30495,"meta":141,"style":141},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[30,115928,115929,115943],{"__ignoreMap":141},[228,115930,115931,115933,115935,115937,115939,115941],{"class":230,"line":231},[228,115932,111683],{"class":238},[228,115934,284],{"class":234},[228,115936,38988],{"class":287},[228,115938,114485],{"class":238},[228,115940,30938],{"class":287},[228,115942,114490],{"class":238},[228,115944,115945,115947,115949,115951,115953,115955],{"class":230,"line":142},[228,115946,111693],{"class":238},[228,115948,284],{"class":234},[228,115950,38988],{"class":287},[228,115952,114485],{"class":238},[228,115954,30938],{"class":287},[228,115956,114505],{"class":238},[19,115958,115959],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[220,115961,115963],{"className":30493,"code":115962,"language":30495,"meta":141,"style":141},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[30,115964,115965,115981],{"__ignoreMap":141},[228,115966,115967,115969,115971,115973,115975,115977,115979],{"class":230,"line":231},[228,115968,110969],{"class":238},[228,115970,284],{"class":234},[228,115972,114514],{"class":238},[228,115974,30938],{"class":287},[228,115976,114519],{"class":238},[228,115978,30938],{"class":287},[228,115980,114524],{"class":238},[228,115982,115983,115985],{"class":230,"line":142},[228,115984,17161],{"class":234},[228,115986,114531],{"class":238},[19,115988,115989,115990,115993,115994,115996],{},"拼接观测，并转换成 ",[30,115991,115992],{},"float32","。很多强化学习库默认使用 ",[30,115995,115992],{},"，所以这里主动转换。",[220,115998,115999],{"className":30493,"code":115402,"language":30495,"meta":141,"style":141},[30,116000,116001],{"__ignoreMap":141},[228,116002,116003,116005,116007,116009,116011,116013,116015,116017,116019,116021,116023,116025,116027,116029,116031,116033,116035],{"class":230,"line":231},[228,116004,32062],{"class":234},[228,116006,114637],{"class":2077},[228,116008,114640],{"class":238},[228,116010,693],{"class":234},[228,116012,114645],{"class":238},[228,116014,242],{"class":287},[228,116016,25225],{"class":234},[228,116018,39048],{"class":287},[228,116020,13679],{"class":234},[228,116022,39048],{"class":287},[228,116024,114658],{"class":238},[228,116026,114661],{"class":287},[228,116028,25225],{"class":234},[228,116030,39048],{"class":287},[228,116032,13679],{"class":234},[228,116034,39048],{"class":287},[228,116036,30901],{"class":238},[19,116038,116039,116040,116042,116043,116046],{},"定义 reset。",[30,116041,114681],{}," 用来控制随机数，保证实验可以复现。",[30,116044,116045],{},"options"," 用来接收额外配置，本章暂时不用。",[220,116048,116050],{"className":30493,"code":116049,"language":30495,"meta":141,"style":141},"super().reset(seed=seed)\n",[30,116051,116052],{"__ignoreMap":141},[228,116053,116054,116056,116058,116060,116062],{"class":230,"line":231},[228,116055,115643],{"class":287},[228,116057,114678],{"class":238},[228,116059,114681],{"class":5331},[228,116061,284],{"class":234},[228,116063,114686],{"class":238},[19,116065,116066,116067,116070],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[30,116068,116069],{},"self.np_random"," 生成可复现的随机数。",[220,116072,116074],{"className":30493,"code":116073,"language":30495,"meta":141,"style":141},"mujoco.mj_resetData(self.model, self.data)\n",[30,116075,116076],{"__ignoreMap":141},[228,116077,116078,116081,116083,116085,116087],{"class":230,"line":231},[228,116079,116080],{"class":238},"mujoco.mj_resetData(",[228,116082,30938],{"class":287},[228,116084,114696],{"class":238},[228,116086,30938],{"class":287},[228,116088,114701],{"class":238},[19,116090,116091],{},"把 MuJoCo 状态重置到默认状态。",[220,116093,116095],{"className":30493,"code":116094,"language":30495,"meta":141,"style":141},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[30,116096,116097],{"__ignoreMap":141},[228,116098,116099,116101,116103,116105,116107,116109,116111,116113,116115,116117,116119,116121,116123,116125,116127,116129,116131],{"class":230,"line":231},[228,116100,30938],{"class":287},[228,116102,114712],{"class":238},[228,116104,284],{"class":234},[228,116106,38988],{"class":287},[228,116108,114719],{"class":238},[228,116110,113877],{"class":5331},[228,116112,113880],{"class":234},[228,116114,86325],{"class":287},[228,116116,12550],{"class":238},[228,116118,113887],{"class":5331},[228,116120,284],{"class":234},[228,116122,86325],{"class":287},[228,116124,12550],{"class":238},[228,116126,31611],{"class":5331},[228,116128,284],{"class":234},[228,116130,30938],{"class":287},[228,116132,114744],{"class":238},[19,116134,115456,116135,116138,116139,116142,116143,116145],{},[30,116136,116137],{},"[:]"," 表示修改整个数组。",[30,116140,116141],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[30,116144,102265],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[220,116147,116149],{"className":30493,"code":116148,"language":30495,"meta":141,"style":141},"self.data.qvel[:] = 0.0\n",[30,116150,116151],{"__ignoreMap":141},[228,116152,116153,116155,116157,116159],{"class":230,"line":231},[228,116154,30938],{"class":287},[228,116156,114751],{"class":238},[228,116158,284],{"class":234},[228,116160,104876],{"class":287},[19,116162,116163],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[220,116165,116167],{"className":30493,"code":116166,"language":30495,"meta":141,"style":141},"self.steps = 0\nreturn self._get_obs(), {}\n",[30,116168,116169,116179],{"__ignoreMap":141},[228,116170,116171,116173,116175,116177],{"class":230,"line":231},[228,116172,30938],{"class":287},[228,116174,113821],{"class":238},[228,116176,284],{"class":234},[228,116178,47448],{"class":287},[228,116180,116181,116183,116185],{"class":230,"line":142},[228,116182,17161],{"class":234},[228,116184,38988],{"class":287},[228,116186,114791],{"class":238},[19,116188,116189],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[220,116191,116192],{"className":30493,"code":115465,"language":30495,"meta":141,"style":141},[30,116193,116194],{"__ignoreMap":141},[228,116195,116196,116198,116200],{"class":230,"line":231},[228,116197,32062],{"class":234},[228,116199,114802],{"class":2077},[228,116201,114805],{"class":238},[19,116203,116204],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[220,116206,116208],{"className":30493,"code":116207,"language":30495,"meta":141,"style":141},"action = np.asarray(action, dtype=np.float32)\n",[30,116209,116210],{"__ignoreMap":141},[228,116211,116212,116214,116216,116218,116220,116222],{"class":230,"line":231},[228,116213,107557],{"class":238},[228,116215,284],{"class":234},[228,116217,114814],{"class":238},[228,116219,93615],{"class":5331},[228,116221,284],{"class":234},[228,116223,113911],{"class":238},[19,116225,116226,116227,78],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[30,116228,115992],{},[220,116230,116232],{"className":30493,"code":116231,"language":30495,"meta":141,"style":141},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[30,116233,116234],{"__ignoreMap":141},[228,116235,116236,116238,116240,116242,116244,116246,116248],{"class":230,"line":231},[228,116237,107557],{"class":238},[228,116239,284],{"class":234},[228,116241,107562],{"class":238},[228,116243,30938],{"class":287},[228,116245,114833],{"class":238},[228,116247,30938],{"class":287},[228,116249,114838],{"class":238},[19,116251,116252],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[220,116254,116256],{"className":30493,"code":116255,"language":30495,"meta":141,"style":141},"self.data.ctrl[:] = action\n",[30,116257,116258],{"__ignoreMap":141},[228,116259,116260,116262,116264,116266],{"class":230,"line":231},[228,116261,30938],{"class":287},[228,116263,114849],{"class":238},[228,116265,284],{"class":234},[228,116267,107585],{"class":238},[19,116269,116270],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[220,116272,116274],{"className":30493,"code":116273,"language":30495,"meta":141,"style":141},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[30,116275,116276,116292],{"__ignoreMap":141},[228,116277,116278,116280,116282,116284,116286,116288,116290],{"class":230,"line":231},[228,116279,3139],{"class":234},[228,116281,101616],{"class":238},[228,116283,26159],{"class":234},[228,116285,32558],{"class":287},[228,116287,239],{"class":238},[228,116289,30938],{"class":287},[228,116291,114870],{"class":238},[228,116293,116294,116297,116299,116301,116303],{"class":230,"line":142},[228,116295,116296],{"class":238},"    mujoco.mj_step(",[228,116298,30938],{"class":287},[228,116300,114696],{"class":238},[228,116302,30938],{"class":287},[228,116304,114701],{"class":238},[19,116306,116307,116308,116311,116312,116314,116315,78],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[30,116309,116310],{},"frame_skip=5","，所以外部调用一次 ",[30,116313,113992],{},"，内部实际执行 5 次 ",[30,116316,101330],{},[220,116318,116320],{"className":30493,"code":116319,"language":30495,"meta":141,"style":141},"self.steps += 1\n",[30,116321,116322],{"__ignoreMap":141},[228,116323,116324,116326,116328,116330],{"class":230,"line":231},[228,116325,30938],{"class":287},[228,116327,113821],{"class":238},[228,116329,9592],{"class":234},[228,116331,55814],{"class":287},[19,116333,116334],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[220,116336,116338],{"className":30493,"code":116337,"language":30495,"meta":141,"style":141},"obs = self._get_obs()\nreward = self._get_reward()\n",[30,116339,116340,116350],{"__ignoreMap":141},[228,116341,116342,116344,116346,116348],{"class":230,"line":231},[228,116343,110969],{"class":238},[228,116345,284],{"class":234},[228,116347,38988],{"class":287},[228,116349,114912],{"class":238},[228,116351,116352,116354,116356,116358],{"class":230,"line":142},[228,116353,111120],{"class":238},[228,116355,284],{"class":234},[228,116357,38988],{"class":287},[228,116359,114923],{"class":238},[19,116361,116362],{},"计算新的观测和奖励。",[220,116364,116366],{"className":30493,"code":116365,"language":30495,"meta":141,"style":141},"dist = float(np.linalg.norm(tip - target))\n",[30,116367,116368],{"__ignoreMap":141},[228,116369,116370,116372,116374,116376,116378,116380],{"class":230,"line":231},[228,116371,111711],{"class":238},[228,116373,284],{"class":234},[228,116375,109912],{"class":287},[228,116377,114966],{"class":238},[228,116379,770],{"class":234},[228,116381,114971],{"class":238},[19,116383,116384],{},"计算末端到目标的距离，并转换成 Python float。",[220,116386,116387],{"className":30493,"code":113792,"language":30495,"meta":141,"style":141},[30,116388,116389,116401],{"__ignoreMap":141},[228,116390,116391,116393,116395,116397,116399],{"class":230,"line":231},[228,116392,113799],{"class":238},[228,116394,284],{"class":234},[228,116396,113804],{"class":238},[228,116398,1148],{"class":234},[228,116400,113809],{"class":287},[228,116402,116403,116405,116407,116409,116411,116413,116415],{"class":230,"line":142},[228,116404,113814],{"class":238},[228,116406,284],{"class":234},[228,116408,38988],{"class":287},[228,116410,113821],{"class":238},[228,116412,1824],{"class":234},[228,116414,38988],{"class":287},[228,116416,113828],{"class":238},[19,116418,116419],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[220,116421,116423],{"className":30493,"code":116422,"language":30495,"meta":141,"style":141},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[30,116424,116425,116438],{"__ignoreMap":141},[228,116426,116427,116430,116432,116434,116436],{"class":230,"line":231},[228,116428,116429],{"class":238},"info ",[228,116431,284],{"class":234},[228,116433,4562],{"class":238},[228,116435,115017],{"class":343},[228,116437,115020],{"class":238},[228,116439,116440,116442],{"class":230,"line":142},[228,116441,17161],{"class":234},[228,116443,115027],{"class":238},[19,116445,116446,116449],{},[30,116447,116448],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[220,116451,116453],{"className":30493,"code":116452,"language":30495,"meta":141,"style":141},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[30,116454,116455,116464],{"__ignoreMap":141},[228,116456,116457,116460,116462],{"class":230,"line":231},[228,116458,116459],{"class":238},"env ",[228,116461,284],{"class":234},[228,116463,115057],{"class":238},[228,116465,116466,116468,116470,116472,116474,116476,116478],{"class":230,"line":142},[228,116467,113515],{"class":238},[228,116469,284],{"class":234},[228,116471,115067],{"class":238},[228,116473,114681],{"class":5331},[228,116475,284],{"class":234},[228,116477,430],{"class":287},[228,116479,245],{"class":238},[19,116481,116482,116483,116486],{},"创建环境并重置。",[30,116484,116485],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[220,116488,116490],{"className":30493,"code":116489,"language":30495,"meta":141,"style":141},"action = env.action_space.sample()\n",[30,116491,116492],{"__ignoreMap":141},[228,116493,116494,116496,116498],{"class":230,"line":231},[228,116495,107557],{"class":238},[228,116497,284],{"class":234},[228,116499,115136],{"class":238},[19,116501,116502],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,116504,102431],{"id":102430},[19,116506,105599],{},[220,116508,116511],{"className":116509,"code":116510,"language":5302,"meta":141},[5300],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[30,116512,116510],{"__ignoreMap":141},[19,116514,116515],{},"这个环境已经具备强化学习环境的基本结构。",[19,116517,116518],{},"主函数里使用随机动作：",[220,116520,116521],{"className":30493,"code":116489,"language":30495,"meta":141,"style":141},[30,116522,116523],{"__ignoreMap":141},[228,116524,116525,116527,116529],{"class":230,"line":231},[228,116526,107557],{"class":238},[228,116528,284],{"class":234},[228,116530,115136],{"class":238},[19,116532,116533],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,116535,102463],{"id":102462},[183,116537,116538,116541,116547,116556,116565,116574,116580],{},[186,116539,116540],{},"运行程序。",[186,116542,116543,116544,78],{},"确认 ",[30,116545,116546],{},"obs.shape == (10,)",[186,116548,111296,116549,116552,116553,78],{},[30,116550,116551],{},"env.action_space","，应类似 ",[30,116554,116555],{},"Box(-1.0, 1.0, (2,), float32)",[186,116557,105700,116558,116561,116562,78],{},[30,116559,116560],{},"self.max_steps = 10","，确认环境会更快 ",[30,116563,116564],{},"truncated=True",[186,116566,102526,116567,102529,116570,116573],{},[30,116568,116569],{},"terminated = dist \u003C 0.05",[30,116571,116572],{},"dist \u003C 0.2","，观察是否更容易结束。",[186,116575,102526,116576,116579],{},[30,116577,116578],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[186,116581,116582,116583,116585,116586,116589],{},"在 ",[30,116584,116448],{}," 里加入 ",[30,116587,116588],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,116591,102568],{"id":102567},[200,116593,116595],{"id":116594},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,116597,116598,116599,116601],{},"Gymnasium 的 ",[30,116600,107249],{}," 返回 5 个值:",[220,116603,116605],{"className":30493,"code":116604,"language":30495,"meta":141,"style":141},"obs, reward, terminated, truncated, info\n",[30,116606,116607],{"__ignoreMap":141},[228,116608,116609],{"class":230,"line":231},[228,116610,116604],{"class":238},[19,116612,116613],{},"不是旧 Gym 的 4 个值。",[200,116615,116617,116620],{"id":116616},"datactrl-action-维度错误",[30,116618,116619],{},"data.ctrl[:] = action"," 维度错误",[19,116622,102638],{},[220,116624,116626],{"className":30493,"code":116625,"language":30495,"meta":141,"style":141},"print(self.model.nu)\nprint(action.shape)\n",[30,116627,116628,116639],{"__ignoreMap":141},[228,116629,116630,116632,116634,116636],{"class":230,"line":231},[228,116631,30530],{"class":287},[228,116633,239],{"class":238},[228,116635,30938],{"class":287},[228,116637,116638],{"class":238},".model.nu)\n",[228,116640,116641,116643],{"class":230,"line":142},[228,116642,30530],{"class":287},[228,116644,116645],{"class":238},"(action.shape)\n",[19,116647,116648],{},"两者必须匹配。",[200,116650,116652],{"id":116651},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,116654,102577],{},[220,116656,116658],{"className":30493,"code":116657,"language":30495,"meta":141,"style":141},"mujoco.mj_forward(self.model, self.data)\n",[30,116659,116660],{"__ignoreMap":141},[228,116661,116662,116665,116667,116669,116671],{"class":230,"line":231},[228,116663,116664],{"class":238},"mujoco.mj_forward(",[228,116666,30938],{"class":287},[228,116668,114696],{"class":238},[228,116670,30938],{"class":287},[228,116672,114701],{"class":238},[200,116674,116676,116678],{"id":116675},"observation_space-维度和-obs-不一致",[30,116677,113715],{}," 维度和 obs 不一致",[19,116680,102690],{},[220,116682,116684],{"className":30493,"code":116683,"language":30495,"meta":141,"style":141},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[30,116685,116686,116696,116703],{"__ignoreMap":141},[228,116687,116688,116690,116692,116694],{"class":230,"line":231},[228,116689,110969],{"class":238},[228,116691,284],{"class":234},[228,116693,38988],{"class":287},[228,116695,114912],{"class":238},[228,116697,116698,116700],{"class":230,"line":142},[228,116699,30530],{"class":287},[228,116701,116702],{"class":238},"(obs.shape)\n",[228,116704,116705,116707,116709,116711],{"class":230,"line":1293},[228,116706,30530],{"class":287},[228,116708,239],{"class":238},[228,116710,30938],{"class":287},[228,116712,116713],{"class":238},".observation_space.shape)\n",[19,116715,116716],{},"两者必须一致。本章观测是：",[220,116718,116721],{"className":116719,"code":116720,"language":5302,"meta":141},[5300],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[30,116722,116720],{"__ignoreMap":141},[200,116724,116726],{"id":116725},"action-超过范围","action 超过范围",[19,116728,116729],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[220,116731,116732],{"className":30493,"code":116231,"language":30495,"meta":141,"style":141},[30,116733,116734],{"__ignoreMap":141},[228,116735,116736,116738,116740,116742,116744,116746,116748],{"class":230,"line":231},[228,116737,107557],{"class":238},[228,116739,284],{"class":234},[228,116741,107562],{"class":238},[228,116743,30938],{"class":287},[228,116745,114833],{"class":238},[228,116747,30938],{"class":287},[228,116749,114838],{"class":238},[19,116751,116752,116753,78],{},"这能避免无效动作直接写入 ",[30,116754,101191],{},[200,116756,116758],{"id":116757},"忘记返回-info","忘记返回 info",[19,116760,116598,116761,101133,116763,116765],{},[30,116762,70171],{},[30,116764,107249],{}," 都会返回 info：",[220,116767,116768],{"className":30493,"code":113508,"language":30495,"meta":141,"style":141},[30,116769,116770,116778],{"__ignoreMap":141},[228,116771,116772,116774,116776],{"class":230,"line":231},[228,116773,113515],{"class":238},[228,116775,284],{"class":234},[228,116777,113520],{"class":238},[228,116779,116780,116782,116784],{"class":230,"line":142},[228,116781,113525],{"class":238},[228,116783,284],{"class":234},[228,116785,113530],{"class":238},[19,116787,116788,116789,78],{},"即使暂时没有额外信息，也返回 ",[30,116790,32574],{},[14,116792,116794],{"id":116793},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,116796,116797],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[183,116799,116800,116803,116806,116809,116812,116815],{},[186,116801,116802],{},"更稳定的 reward。",[186,116804,116805],{},"合理的 episode 长度。",[186,116807,116808],{},"可重复的随机目标采样。",[186,116810,116811],{},"render 接口。",[186,116813,116814],{},"环境注册代码。",[186,116816,116817],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,116819,116820],{},"如果只是自己写训练循环，最小形式是：",[220,116822,116824],{"className":30493,"code":116823,"language":30495,"meta":141,"style":141},"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",[30,116825,116826,116834,116850,116854,116870,116879,116888,116898],{"__ignoreMap":141},[228,116827,116828,116830,116832],{"class":230,"line":231},[228,116829,116459],{"class":238},[228,116831,284],{"class":234},[228,116833,115057],{"class":238},[228,116835,116836,116838,116840,116842,116844,116846,116848],{"class":230,"line":142},[228,116837,113515],{"class":238},[228,116839,284],{"class":234},[228,116841,115067],{"class":238},[228,116843,114681],{"class":5331},[228,116845,284],{"class":234},[228,116847,430],{"class":287},[228,116849,245],{"class":238},[228,116851,116852],{"class":230,"line":1293},[228,116853,2514],{"emptyLinePlaceholder":157},[228,116855,116856,116858,116860,116862,116864,116866,116868],{"class":230,"line":1308},[228,116857,3139],{"class":234},[228,116859,101616],{"class":238},[228,116861,26159],{"class":234},[228,116863,32558],{"class":287},[228,116865,239],{"class":238},[228,116867,6525],{"class":287},[228,116869,30901],{"class":238},[228,116871,116872,116875,116877],{"class":230,"line":1314},[228,116873,116874],{"class":238},"    action ",[228,116876,284],{"class":234},[228,116878,115136],{"class":238},[228,116880,116881,116884,116886],{"class":230,"line":1328},[228,116882,116883],{"class":238},"    obs, reward, terminated, truncated, info ",[228,116885,284],{"class":234},[228,116887,113530],{"class":238},[228,116889,116890,116892,116894,116896],{"class":230,"line":1334},[228,116891,3215],{"class":234},[228,116893,115202],{"class":238},[228,116895,115205],{"class":234},[228,116897,115208],{"class":238},[228,116899,116900,116903,116905],{"class":230,"line":1425},[228,116901,116902],{"class":238},"        obs, info ",[228,116904,284],{"class":234},[228,116906,113520],{"class":238},[14,116908,116910],{"id":116909},"_9本章小结","9.本章小结",[19,116912,116913],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[220,116915,116918],{"className":116916,"code":116917,"language":5302,"meta":141},[5300],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[30,116919,116917],{"__ignoreMap":141},[19,116921,116922],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[5241,116924,116925],{},"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":141,"searchDepth":142,"depth":142,"links":116927},[116928,116929,116930,116937,116941,116942,116943,116953,116954],{"id":100761,"depth":142,"text":100762},{"id":100884,"depth":142,"text":100885},{"id":101159,"depth":142,"text":101160,"children":116931},[116932,116934,116936],{"id":113739,"depth":1293,"text":116933},"terminated 和 truncated 的区别",{"id":113842,"depth":1293,"text":116935},"observation_space 和 action_space",{"id":113969,"depth":1293,"text":113970},{"id":101367,"depth":142,"text":101368,"children":116938},[116939,116940],{"id":101687,"depth":1293,"text":101687},{"id":101823,"depth":1293,"text":101823},{"id":102430,"depth":142,"text":102431},{"id":102462,"depth":142,"text":102463},{"id":102567,"depth":142,"text":102568,"children":116944},[116945,116946,116948,116949,116951,116952],{"id":116594,"depth":1293,"text":116595},{"id":116616,"depth":1293,"text":116947},"data.ctrl[:] = action 维度错误",{"id":116651,"depth":1293,"text":116652},{"id":116675,"depth":1293,"text":116950},"observation_space 维度和 obs 不一致",{"id":116725,"depth":1293,"text":116726},{"id":116757,"depth":1293,"text":116758},{"id":116793,"depth":142,"text":116794},{"id":116909,"depth":142,"text":116910},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113492,"description":141},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":116961,"title":116962,"body":116963,"description":117386,"extension":155,"meta":117387,"navigation":157,"path":117388,"seo":117389,"stem":117390,"__hash__":117391},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":116964,"toc":117376},[116965,116969,116972,116975,116995,117001,117007,117017,117020,117023,117043,117046,117050,117053,117059,117062,117076,117079,117082,117156,117159,117165,117168,117191,117194,117244,117247,117253,117256,117259,117262,117281,117284,117290,117293,117296,117299,117319,117322,117325,117328,117373],[10,116966,116968],{"id":116967},"mujoco-学习","MuJoCo 学习",[19,116970,116971],{},"初版",[19,116973,116974],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[183,116976,116977,116980,116983,116992],{},[186,116978,116979],{},"MuJoCo 模型文件在描述什么。",[186,116981,116982],{},"Python 代码怎样读取和推进仿真。",[186,116984,116985,451,116987,451,116989,116991],{},[30,116986,104145],{},[30,116988,104475],{},[30,116990,104478],{}," 这些数组为什么重要。",[186,116993,116994],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,116996,116997,116998,117000],{},"默认环境为 Fedora 44、Python >= 3.10、",[30,116999,101142],{}," 官方 Python bindings。",[19,117002,117003,117004,117006],{},"注意：本文禁止使用 ",[30,117005,101127],{},"。所有示例均使用：",[220,117008,117009],{"className":30493,"code":101693,"language":30495,"meta":141,"style":141},[30,117010,117011],{"__ignoreMap":141},[228,117012,117013,117015],{"class":230,"line":231},[228,117014,30507],{"class":234},[228,117016,101416],{"class":238},[14,117018,117019],{"id":117019},"适合谁阅读",[19,117021,117022],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[183,117024,117025,117028,117031,117034],{},[186,117026,117027],{},"没学过 MuJoCo，只会一点 Python。",[186,117029,117030],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[186,117032,117033],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[186,117035,117036,117037,117039,117040,117042],{},"以前接触过 ",[30,117038,101127],{},"，现在想迁移到官方 ",[30,117041,101136],{}," Python bindings。",[19,117044,117045],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,117047,117049],{"id":117048},"mujoco-到底是什么","MuJoCo 到底是什么",[19,117051,117052],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[220,117054,117057],{"className":117055,"code":117056,"language":5302,"meta":141},[5300],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[30,117058,117056],{"__ignoreMap":141},[19,117060,117061],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[183,117063,117064,117067,117070,117073],{},[186,117065,117066],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[186,117068,117069],{},"快速测试控制算法，不必一开始就上真实机器人。",[186,117071,117072],{},"生成强化学习环境。",[186,117074,117075],{},"采集状态、动作、图像、奖励等训练数据。",[14,117077,117078],{"id":117078},"学习前的心智模型",[19,117080,117081],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[376,117083,117084,117096],{},[379,117085,117086],{},[382,117087,117088,117091,117094],{},[385,117089,117090],{"align":23851},"部分",[385,117092,117093],{"align":23851},"负责什么",[385,117095,21302],{"align":23851},[423,117097,117098,117109,117121,117133,117145],{},[382,117099,117100,117103,117106],{},[428,117101,117102],{"align":23851},"MJCF XML",[428,117104,117105],{"align":23851},"定义世界和机器人结构",[428,117107,117108],{"align":23851},"地面、盒子、关节、电机、摄像头",[382,117110,117111,117115,117118],{},[428,117112,117113],{"align":23851},[30,117114,100824],{},[428,117116,117117],{"align":23851},"编译后的静态模型",[428,117119,117120],{"align":23851},"有几个关节、有几个电机、时间步长是多少",[382,117122,117123,117127,117130],{},[428,117124,117125],{"align":23851},[30,117126,100834],{},[428,117128,117129],{"align":23851},"运行中的动态状态",[428,117131,117132],{"align":23851},"当前时间、位置、速度、电机输入",[382,117134,117135,117139,117142],{},[428,117136,117137],{"align":23851},[30,117138,101330],{},[428,117140,117141],{"align":23851},"推进一步物理仿真",[428,117143,117144],{"align":23851},"根据重力、力、碰撞更新状态",[382,117146,117147,117150,117153],{},[428,117148,117149],{"align":23851},"Viewer \u002F Renderer",[428,117151,117152],{"align":23851},"把仿真显示出来",[428,117154,117155],{"align":23851},"打开窗口或保存图片",[19,117157,117158],{},"一句话总结：",[220,117160,117163],{"className":117161,"code":117162,"language":5302,"meta":141},[5300],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[30,117164,117162],{"__ignoreMap":141},[19,117166,117167],{},"参考来源：",[1245,117169,117170,117177,117184],{},[186,117171,117172,117173],{},"MuJoCo Python 官方文档：",[476,117174,117175],{"href":117175,"rel":117176},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[23980],[186,117178,117179,117180],{},"MuJoCo XML Reference：",[476,117181,117182],{"href":117182,"rel":117183},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[23980],[186,117185,117186,117187],{},"MuJoCo Overview：",[476,117188,117189],{"href":117189,"rel":117190},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[23980],[14,117192,117193],{"id":117193},"章节目录",[183,117195,117196,117202,117208,117214,117220,117226,117232,117238],{},[186,117197,117198],{},[476,117199,117201],{"href":117200},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[186,117203,117204],{},[476,117205,117207],{"href":117206},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[186,117209,117210],{},[476,117211,117213],{"href":117212},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[186,117215,117216],{},[476,117217,117219],{"href":117218},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[186,117221,117222],{},[476,117223,117225],{"href":117224},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[186,117227,117228],{},[476,117229,117231],{"href":117230},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[186,117233,117234],{},[476,117235,117237],{"href":117236},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[186,117239,117240],{},[476,117241,117243],{"href":117242},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,117245,117246],{"id":117246},"推荐学习路线",[220,117248,117251],{"className":117249,"code":117250,"language":5302,"meta":141},[5300],"环境安装\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",[30,117252,117250],{"__ignoreMap":141},[19,117254,117255],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,117257,117258],{"id":117258},"建议的目录结构",[19,117260,117261],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[220,117263,117265],{"className":23937,"code":117264,"language":23939,"meta":141,"style":141},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[30,117266,117267,117275],{"__ignoreMap":141},[228,117268,117269,117271,117273],{"class":230,"line":231},[228,117270,101381],{"class":2077},[228,117272,29331],{"class":287},[228,117274,101386],{"class":343},[228,117276,117277,117279],{"class":230,"line":142},[228,117278,101391],{"class":287},[228,117280,101386],{"class":343},[19,117282,117283],{},"每一章的代码都单独保存：",[220,117285,117288],{"className":117286,"code":117287,"language":5302,"meta":141},[5300],"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",[30,117289,117287],{"__ignoreMap":141},[19,117291,117292],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,117294,117295],{"id":117295},"学习方法",[19,117297,117298],{},"每章建议按这个顺序操作：",[183,117300,117301,117304,117307,117310,117313,117316],{},[186,117302,117303],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[186,117305,117306],{},"复制最小可运行代码，保存成指定文件。",[186,117308,117309],{},"运行代码，确认没有报错。",[186,117311,117312],{},"对照“运行结果说明”理解输出。",[186,117314,117315],{},"做“验证步骤”，主动改一两个参数。",[186,117317,117318],{},"遇到报错先看“常见错误与解决方案”。",[19,117320,117321],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,117323,117324],{"id":117324},"全局排错顺序",[19,117326,117327],{},"遇到问题时，按下面顺序查：",[183,117329,117330,117336,117342,117347,117350,117353,117360,117370],{},[186,117331,117332,117333],{},"Python 环境是否激活：",[30,117334,117335],{},"which python",[186,117337,117338,117339],{},"MuJoCo 是否能导入：",[30,117340,117341],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[186,117343,117344,117345],{},"是否误装了 ",[30,117346,101127],{},[186,117348,117349],{},"XML 标签是否闭合、属性是否拼写正确",[186,117351,117352],{},"actuator 引用的 joint 名字是否存在",[186,117354,117355,117357,117358],{},[30,117356,101191],{}," 的长度是否等于 ",[30,117359,102273],{},[186,117361,105700,117362,82654,117364,117366,117367],{},[30,117363,104145],{},[30,117365,104475],{}," 后是否调用了 ",[30,117368,117369],{},"mujoco.mj_forward",[186,117371,117372],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[5241,117374,117375],{},"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":141,"searchDepth":142,"depth":142,"links":117377},[117378,117379,117380,117381,117382,117383,117384,117385],{"id":117019,"depth":142,"text":117019},{"id":117048,"depth":142,"text":117049},{"id":117078,"depth":142,"text":117078},{"id":117193,"depth":142,"text":117193},{"id":117246,"depth":142,"text":117246},{"id":117258,"depth":142,"text":117258},{"id":117295,"depth":142,"text":117295},{"id":117324,"depth":142,"text":117324},"仿真搭建。",{"category":23493},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":116962,"description":117386},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117393,"title":117394,"body":117395,"description":154,"extension":155,"meta":117850,"navigation":157,"path":117851,"seo":117852,"stem":117853,"__hash__":117854},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117396,"toc":117848},[117397,117400,117403,117409,117845],[10,117398,117394],{"id":117399},"_1-最常用的基本操作更新",[19,117401,117402],{},"装linux系统教程：",[19,117404,117405],{},[476,117406,117407],{"href":117407,"rel":117408},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[23980],[220,117410,117414],{"className":117411,"code":117412,"language":117413,"meta":141,"style":141},"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",[30,117415,117416,117421,117426,117435,117440,117449,117454,117474,117479,117490,117495,117504,117509,117537,117542,117561,117566,117585,117589,117594,117610,117614,117619,117649,117653,117658,117674,117678,117683,117698,117702,117707,117723,117727,117732,117744,117756,117760,117765,117782,117786,117791,117809,117813,117818,117827,117831,117836],{"__ignoreMap":141},[228,117417,117418],{"class":230,"line":231},[228,117419,117420],{"class":297},"#更新相关的知识\n",[228,117422,117423],{"class":230,"line":142},[228,117424,117425],{"class":297},"# 更新软件包列表（从服务器获取最新软件信息）\n",[228,117427,117428,117430,117433],{"class":230,"line":1293},[228,117429,24692],{"class":2077},[228,117431,117432],{"class":343}," apt",[228,117434,26358],{"class":343},[228,117436,117437],{"class":230,"line":1308},[228,117438,117439],{"class":297},"# 升级所有可更新的软件包（不删除旧包）\n",[228,117441,117442,117444,117446],{"class":230,"line":1314},[228,117443,24692],{"class":2077},[228,117445,117432],{"class":343},[228,117447,117448],{"class":343}," upgrade\n",[228,117450,117451],{"class":230,"line":1328},[228,117452,117453],{"class":297},"#更新和升级软件包\n",[228,117455,117456,117458,117460,117463,117465,117467,117469,117472],{"class":230,"line":1334},[228,117457,24692],{"class":2077},[228,117459,117432],{"class":343},[228,117461,117462],{"class":343}," update",[228,117464,26306],{"class":238},[228,117466,24692],{"class":2077},[228,117468,117432],{"class":343},[228,117470,117471],{"class":343}," upgrade",[228,117473,101096],{"class":287},[228,117475,117476],{"class":230,"line":1425},[228,117477,117478],{"class":297},"#列出可更新的软件包及版本信息\n",[228,117480,117481,117484,117487],{"class":230,"line":1431},[228,117482,117483],{"class":2077},"apt",[228,117485,117486],{"class":343}," list",[228,117488,117489],{"class":287}," --upgradable\n",[228,117491,117492],{"class":230,"line":1443},[228,117493,117494],{"class":297},"#彻底升级（处理依赖关系，可能删除旧包）\n",[228,117496,117497,117499,117501],{"class":230,"line":1726},[228,117498,24692],{"class":2077},[228,117500,117432],{"class":343},[228,117502,117503],{"class":343}," full-upgrade\n",[228,117505,117506],{"class":230,"line":1731},[228,117507,117508],{"class":297},"#设置指定版本\n",[228,117510,117511,117513,117515,117517,117519,117522,117524,117526,117528,117530,117533,117535],{"class":230,"line":1737},[228,117512,24692],{"class":2077},[228,117514,117432],{"class":343},[228,117516,23949],{"class":343},[228,117518,29017],{"class":234},[228,117520,117521],{"class":343},"package_nam",[228,117523,313],{"class":238},[228,117525,1198],{"class":234},[228,117527,284],{"class":343},[228,117529,1148],{"class":234},[228,117531,117532],{"class":343},"version_numbe",[228,117534,908],{"class":238},[228,117536,51422],{"class":234},[228,117538,117539],{"class":230,"line":1742},[228,117540,117541],{"class":297},"#只安装软件包不升级\n",[228,117543,117544,117546,117548,117550,117552,117554,117556,117558],{"class":230,"line":1756},[228,117545,24692],{"class":2077},[228,117547,117432],{"class":343},[228,117549,23949],{"class":343},[228,117551,29017],{"class":234},[228,117553,117521],{"class":343},[228,117555,313],{"class":238},[228,117557,1198],{"class":234},[228,117559,117560],{"class":287}," --no-upgrade\n",[228,117562,117563],{"class":230,"line":1761},[228,117564,117565],{"class":297},"#只升级，不存在就不安装\n",[228,117567,117568,117570,117572,117574,117576,117578,117580,117582],{"class":230,"line":1767},[228,117569,24692],{"class":2077},[228,117571,117432],{"class":343},[228,117573,23949],{"class":343},[228,117575,29017],{"class":234},[228,117577,117521],{"class":343},[228,117579,313],{"class":238},[228,117581,1198],{"class":234},[228,117583,117584],{"class":287}," --only-upgrade\n",[228,117586,117587],{"class":230,"line":1788},[228,117588,2514],{"emptyLinePlaceholder":157},[228,117590,117591],{"class":230,"line":1793},[228,117592,117593],{"class":297},"#安装指定的软件命令\n",[228,117595,117596,117598,117600,117602,117604,117606,117608],{"class":230,"line":1807},[228,117597,24692],{"class":2077},[228,117599,117432],{"class":343},[228,117601,23949],{"class":343},[228,117603,29017],{"class":234},[228,117605,117521],{"class":343},[228,117607,313],{"class":238},[228,117609,51422],{"class":234},[228,117611,117612],{"class":230,"line":1812},[228,117613,2514],{"emptyLinePlaceholder":157},[228,117615,117616],{"class":230,"line":1841},[228,117617,117618],{"class":297},"#安装多个软件包\n",[228,117620,117621,117623,117625,117627,117629,117632,117635,117637,117639,117642,117644,117646],{"class":230,"line":1846},[228,117622,24692],{"class":2077},[228,117624,117432],{"class":343},[228,117626,23949],{"class":343},[228,117628,29017],{"class":234},[228,117630,117631],{"class":343},"package_",[228,117633,117634],{"class":234},"1>",[228,117636,29017],{"class":234},[228,117638,117631],{"class":343},[228,117640,117641],{"class":234},"2>",[228,117643,29017],{"class":234},[228,117645,117631],{"class":343},[228,117647,117648],{"class":234},"3>\n",[228,117650,117651],{"class":230,"line":1863},[228,117652,2514],{"emptyLinePlaceholder":157},[228,117654,117655],{"class":230,"line":1868},[228,117656,117657],{"class":297},"#更新指定的软件命令\n",[228,117659,117660,117662,117664,117666,117668,117670,117672],{"class":230,"line":1873},[228,117661,24692],{"class":2077},[228,117663,117432],{"class":343},[228,117665,117462],{"class":343},[228,117667,29017],{"class":234},[228,117669,117521],{"class":343},[228,117671,313],{"class":238},[228,117673,51422],{"class":234},[228,117675,117676],{"class":230,"line":1878},[228,117677,2514],{"emptyLinePlaceholder":157},[228,117679,117680],{"class":230,"line":1892},[228,117681,117682],{"class":297},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[228,117684,117685,117687,117690,117692,117694,117696],{"class":230,"line":1897},[228,117686,117483],{"class":2077},[228,117688,117689],{"class":343}," show",[228,117691,29017],{"class":234},[228,117693,117521],{"class":343},[228,117695,313],{"class":238},[228,117697,51422],{"class":234},[228,117699,117700],{"class":230,"line":2691},[228,117701,2514],{"emptyLinePlaceholder":157},[228,117703,117704],{"class":230,"line":2705},[228,117705,117706],{"class":297},"#删除软件包命令\n",[228,117708,117709,117711,117713,117715,117717,117719,117721],{"class":230,"line":2713},[228,117710,24692],{"class":2077},[228,117712,117432],{"class":343},[228,117714,26195],{"class":343},[228,117716,29017],{"class":234},[228,117718,117521],{"class":343},[228,117720,313],{"class":238},[228,117722,51422],{"class":234},[228,117724,117725],{"class":230,"line":2718},[228,117726,2514],{"emptyLinePlaceholder":157},[228,117728,117729],{"class":230,"line":2724},[228,117730,117731],{"class":297},"# 清理旧版本和缓存（释放磁盘空间）\n",[228,117733,117734,117736,117738,117741],{"class":230,"line":2730},[228,117735,24692],{"class":2077},[228,117737,117432],{"class":343},[228,117739,117740],{"class":343}," autoremove",[228,117742,117743],{"class":297},"  # 删除不再需要的依赖和库文件\n",[228,117745,117746,117748,117750,117753],{"class":230,"line":2735},[228,117747,24692],{"class":2077},[228,117749,117432],{"class":343},[228,117751,117752],{"class":343}," clean",[228,117754,117755],{"class":297},"       # 清理下载的缓存包\n",[228,117757,117758],{"class":230,"line":8063},[228,117759,2514],{"emptyLinePlaceholder":157},[228,117761,117762],{"class":230,"line":8087},[228,117763,117764],{"class":297},"#移除软件包及配置文件\n",[228,117766,117767,117769,117771,117774,117776,117778,117780],{"class":230,"line":8092},[228,117768,24692],{"class":2077},[228,117770,117432],{"class":343},[228,117772,117773],{"class":343}," purge",[228,117775,29017],{"class":234},[228,117777,117521],{"class":343},[228,117779,313],{"class":238},[228,117781,51422],{"class":234},[228,117783,117784],{"class":230,"line":8098},[228,117785,2514],{"emptyLinePlaceholder":157},[228,117787,117788],{"class":230,"line":8125},[228,117789,117790],{"class":297},"#查找软件包命令\n",[228,117792,117793,117795,117797,117800,117802,117805,117807],{"class":230,"line":8130},[228,117794,24692],{"class":2077},[228,117796,117432],{"class":343},[228,117798,117799],{"class":343}," search",[228,117801,29017],{"class":234},[228,117803,117804],{"class":343},"keywor",[228,117806,552],{"class":238},[228,117808,51422],{"class":234},[228,117810,117811],{"class":230,"line":8136},[228,117812,2514],{"emptyLinePlaceholder":157},[228,117814,117815],{"class":230,"line":8148},[228,117816,117817],{"class":297},"#列出所有已安装的包\n",[228,117819,117820,117822,117824],{"class":230,"line":8160},[228,117821,117483],{"class":2077},[228,117823,117486],{"class":343},[228,117825,117826],{"class":287}," --installed\n",[228,117828,117829],{"class":230,"line":8172},[228,117830,2514],{"emptyLinePlaceholder":157},[228,117832,117833],{"class":230,"line":9831},[228,117834,117835],{"class":297},"#列出所有已安装的包的版本信息\n",[228,117837,117838,117840,117842],{"class":230,"line":9856},[228,117839,117483],{"class":2077},[228,117841,117486],{"class":343},[228,117843,117844],{"class":287}," --all-versions\n",[5241,117846,117847],{},"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":141,"searchDepth":142,"depth":142,"links":117849},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117394,"description":154},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117856,"title":117857,"body":117858,"description":154,"extension":155,"meta":118599,"navigation":157,"path":118600,"seo":118601,"stem":118602,"__hash__":118603},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117859,"toc":118586},[117860,117863,117867,117870,117876,117880,117884,117890,117895,117900,117905,117910,117915,117918,117921,117924,117927,117931,117934,117939,117942,117947,117950,117955,117962,117965,117968,117971,117974,117977,117988,117992,117996,118001,118006,118010,118015,118019,118024,118028,118032,118037,118040,118085,118090,118094,118098,118103,118109,118114,118124,118129,118139,118144,118149,118176,118180,118183,118188,118191,118216,118220,118225,118228,118233,118238,118258,118263,118266,118281,118285,118338,118341,118346,118350,118353,118368,118371,118374,118379,118383,118387,118390,118394,118398,118401,118406,118411,118415,118422,118430,118433,118440,118445,118450,118453,118458,118465,118470,118477,118481,118483,118488,118492,118495,118498,118503,118506,118511,118514,118519,118524,118529,118533,118538,118542,118583],[10,117861,117857],{"id":117862},"_2-linux装机教程",[14,117864,117866],{"id":117865},"_21-实体机","2.1 实体机",[19,117868,117869],{},"使用清华源：（Ubuntu24.04）",[19,117871,117872],{},[476,117873,117874],{"href":117874,"rel":117875},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[23980],[14,117877,117879],{"id":117878},"_22-普通虚拟机","2.2 普通虚拟机",[200,117881,117883],{"id":117882},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,117885,117886],{},[476,117887,117888],{"href":117888,"rel":117889},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[23980],[19,117891,117892],{},[1576,117893],{"alt":141,"src":117894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,117896,117897],{},[1576,117898],{"alt":141,"src":117899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,117901,117902],{},[1576,117903],{"alt":141,"src":117904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,117906,117907],{},[1576,117908],{"alt":141,"src":117909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,117911,117912],{},[1576,117913],{"alt":141,"src":117914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,117916,117917],{},"内存4G（4096MB）；",[19,117919,117920],{},"CPU给4个核；",[19,117922,117923],{},"硬盘动态分配60G；",[19,117925,117926],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[200,117928,117930],{"id":117929},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,117932,117933],{},"按照1.1的步骤下载Ubuntu",[19,117935,117936],{},[1576,117937],{"alt":141,"src":117938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,117940,117941],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,117943,117944],{},[1576,117945],{"alt":141,"src":117946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,117948,117949],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,117951,117952],{},[1576,117953],{"alt":141,"src":117954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,117956,117957,117958,117961],{},"选择“正常安装”(找不到都用Alt+F7)， ",[388,117959,117960],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,117963,117964],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,117966,117967],{},"将改动写入磁盘吗 继续",[19,117969,117970],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,117972,117973],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,117975,117976],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,117978,117979,117980,117983,117984,117987],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[388,117981,117982],{},"除了"," 选不发送系统信息与不升级之外， ",[388,117985,117986],{},"其它"," 都跳过或前进）",[200,117989,117991],{"id":117990},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22113,117993,117995],{"id":117994},"_2231-全屏","2.2.3.1 全屏",[19,117997,117998],{},[1576,117999],{"alt":141,"src":118000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,118002,118003],{},[1576,118004],{"alt":141,"src":118005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22113,118007,118009],{"id":118008},"_2232-文件交换","2.2.3.2 文件交换",[19,118011,118012],{},[1576,118013],{"alt":141,"src":118014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22113,118016,118018],{"id":118017},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,118020,118021],{},[1576,118022],{"alt":141,"src":118023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,118025,118027],{"id":118026},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[200,118029,118031],{"id":118030},"_231-简介与优缺点","2.3.1 简介与优缺点",[183,118033,118034],{},[186,118035,118036],{},"什么情况下推荐？",[19,118038,118039],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[183,118041,118042],{"start":142},[186,118043,118044,118045],{},"优缺点：",[183,118046,118047,118077],{},[186,118048,118049,118050],{},"优点：",[183,118051,118052,118055,118062,118065,118068,118071,118074],{},[186,118053,118054],{},"WSL2是最好的Linux发行版;(bushi)",[186,118056,118057,118058,118061],{},"性能损耗极低。且比在Windows上跑深度性能 ",[388,118059,118060],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[186,118063,118064],{},"非常方便调用USB设备，可以USB直通;",[186,118066,118067],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[186,118069,118070],{},"非常方便Win与WSL2互相传文件等协同操作;",[186,118072,118073],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[186,118075,118076],{},"非常方便使用Windows的VScode远程开发;",[186,118078,118079,118080],{},"缺点：",[183,118081,118082],{},[186,118083,118084],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,118086,118087],{},[1576,118088],{"alt":141,"src":118089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[200,118091,118093],{"id":118092},"_232-安装教程","2.3.2 安装教程",[22113,118095,118097],{"id":118096},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[183,118099,118100],{},[186,118101,118102],{},"方法一(图形界面)",[19,118104,118105,118106,24734],{},"用Win+R输入",[30,118107,118108],{},"appwiz.cpl",[19,118110,118111],{},[1576,118112],{"alt":141,"src":118113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,118115,118116,118117,118120,118121,26589],{},"点击OK进入 ",[388,118118,118119],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[388,118122,118123],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,118125,118126],{},[1576,118127],{"alt":141,"src":118128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,118130,118131,118132,101133,118135,118138],{},"选择 ",[388,118133,118134],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[388,118136,118137],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,118140,118141],{},[1576,118142],{"alt":141,"src":118143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[183,118145,118146],{"start":142},[186,118147,118148],{},"方法二(命令行)",[220,118150,118154],{"className":118151,"code":118152,"language":118153,"meta":141,"style":141},"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",[30,118155,118156,118161,118166,118171],{"__ignoreMap":141},[228,118157,118158],{"class":230,"line":231},[228,118159,118160],{},"# 开启 Linux 子系统\n",[228,118162,118163],{"class":230,"line":142},[228,118164,118165],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[228,118167,118168],{"class":230,"line":1293},[228,118169,118170],{},"# 开启虚拟机平台\n",[228,118172,118173],{"class":230,"line":1308},[228,118174,118175],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22113,118177,118179],{"id":118178},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,118181,118182],{},"用管理员权限打开powershell",[19,118184,118185],{},[1576,118186],{"alt":141,"src":118187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,118189,118190],{},"升级WSL并设置默认版本为WSL2",[220,118192,118194],{"className":118151,"code":118193,"language":118153,"meta":141,"style":141},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[30,118195,118196,118201,118206,118211],{"__ignoreMap":141},[228,118197,118198],{"class":230,"line":231},[228,118199,118200],{},"# 更新 wsl\n",[228,118202,118203],{"class":230,"line":142},[228,118204,118205],{},"wsl --update\n",[228,118207,118208],{"class":230,"line":1293},[228,118209,118210],{},"# 将 wsl 版本设置为 wsl2\n",[228,118212,118213],{"class":230,"line":1308},[228,118214,118215],{},"wsl --set-default-version 2\n",[22113,118217,118219],{"id":118218},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[183,118221,118222],{},[186,118223,118224],{},"方式一(商店下载)",[19,118226,118227],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,118229,118230],{},[1576,118231],{"alt":141,"src":118232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[183,118234,118235],{"start":142},[186,118236,118237],{},"方式二(命令行安装)",[220,118239,118241],{"className":118151,"code":118240,"language":118153,"meta":141,"style":141},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[30,118242,118243,118248,118253],{"__ignoreMap":141},[228,118244,118245],{"class":230,"line":231},[228,118246,118247],{},"# 列出可安装的 Linux 版本\n",[228,118249,118250],{"class":230,"line":142},[228,118251,118252],{},"#（需要科学手段）\n",[228,118254,118255],{"class":230,"line":1293},[228,118256,118257],{},"wsl --list --online\n",[19,118259,118260],{},[1576,118261],{"alt":141,"src":118262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,118264,118265],{},"选择对应发行版并安装",[220,118267,118269],{"className":118151,"code":118268,"language":118153,"meta":141,"style":141},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[30,118270,118271,118276],{"__ignoreMap":141},[228,118272,118273],{"class":230,"line":231},[228,118274,118275],{},"# Ubuntu安装完毕后需要重启系统\n",[228,118277,118278],{"class":230,"line":142},[228,118279,118280],{},"wsl --install -d Ubuntu-24.04\n",[22113,118282,118284],{"id":118283},"_2324-查看系统状态","2.3.2.4 查看系统状态",[220,118286,118288],{"className":118151,"code":118287,"language":118153,"meta":141,"style":141},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[30,118289,118290,118295,118300,118305,118310,118314,118318,118323,118328,118333],{"__ignoreMap":141},[228,118291,118292],{"class":230,"line":231},[228,118293,118294],{},"# 查看 wsl\n",[228,118296,118297],{"class":230,"line":142},[228,118298,118299],{},"wsl -l\n",[228,118301,118302],{"class":230,"line":1293},[228,118303,118304],{},"# 查看 wsl 运行版本或模式\n",[228,118306,118307],{"class":230,"line":1308},[228,118308,118309],{},"wsl -l -v\n",[228,118311,118312],{"class":230,"line":1314},[228,118313,2514],{"emptyLinePlaceholder":157},[228,118315,118316],{"class":230,"line":1328},[228,118317,2514],{"emptyLinePlaceholder":157},[228,118319,118320],{"class":230,"line":1334},[228,118321,118322],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[228,118324,118325],{"class":230,"line":1425},[228,118326,118327],{},"wsl --set-version \u003Cdistro> 2\n",[228,118329,118330],{"class":230,"line":1431},[228,118331,118332],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[228,118334,118335],{"class":230,"line":1443},[228,118336,118337],{},"wsl --unregister \u003Cdistro>\n",[19,118339,118340],{},"输出Version为2即正常",[19,118342,118343],{},[1576,118344],{"alt":141,"src":118345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22113,118347,118349],{"id":118348},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,118351,118352],{},"直接在Powershell里输入wsl命令进入子系统",[220,118354,118356],{"className":118151,"code":118355,"language":118153,"meta":141,"style":141},"# 进入子系统\nwsl\n",[30,118357,118358,118363],{"__ignoreMap":141},[228,118359,118360],{"class":230,"line":231},[228,118361,118362],{},"# 进入子系统\n",[228,118364,118365],{"class":230,"line":142},[228,118366,118367],{},"wsl\n",[19,118369,118370],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,118372,118373],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,118375,118376],{},[1576,118377],{"alt":141,"src":118378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[200,118380,118382],{"id":118381},"_233-配置各种环境","2.3.3 配置各种环境",[22113,118384,118386],{"id":118385},"_2331-换源","2.3.3.1 换源",[19,118388,118389],{},"(同实体机LINUX，往下找教程)",[22113,118391,118393],{"id":118392},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23025,118395,118397],{"id":118396},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,118399,118400],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,118402,118403],{},[1576,118404],{"alt":141,"src":118405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,118407,118408],{},[1576,118409],{"alt":141,"src":118410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23025,118412,118414],{"id":118413},"_23322-cuda","2.3.3.2.2 CUDA",[19,118416,118417,118418],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[476,118419,118420],{"href":118420,"rel":118421},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[23980],[19,118423,118424,118427],{},[1576,118425],{"alt":141,"src":118426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[1576,118428],{"alt":141,"src":118429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,118431,118432],{},"在下方的网站，选择合适的版本。",[19,118434,118435,118436],{},"WSL2 专属 CUDA 指南：",[476,118437,118438],{"href":118438,"rel":118439},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[23980],[19,118441,118442],{},[388,118443,118444],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,118446,118447],{},[1576,118448],{"alt":141,"src":118449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,118451,118452],{},"挨行敲一遍",[19,118454,118455],{},[1576,118456],{"alt":141,"src":118457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,118459,118460,118461,118464],{},"敲完后，输入",[30,118462,118463],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,118466,118467],{},[1576,118468],{"alt":141,"src":118469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,118471,118472,118473,118476],{},"（请详看下方教程的",[388,118474,118475],{},"安装CUDA的配置环境来看","如何配置环境）",[23025,118478,118480],{"id":118479},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,118482,118389],{},[19,118484,118485],{},[1576,118486],{"alt":141,"src":118487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22113,118489,118491],{"id":118490},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,118493,118494],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,118496,118497],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,118499,118500],{},[1576,118501],{"alt":141,"src":118502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,118504,118505],{},"连接WSL2",[19,118507,118508],{},[1576,118509],{"alt":141,"src":118510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,118512,118513],{},"远程开发成功。",[19,118515,118516],{},[1576,118517],{"alt":141,"src":118518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,118520,118521],{},[1576,118522],{"alt":141,"src":118523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,118525,118526],{},[1576,118527],{"alt":141,"src":118528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22113,118530,118532],{"id":118531},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,118534,118535],{},[1576,118536],{"alt":141,"src":118537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22113,118539,118541],{"id":118540},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[220,118543,118545],{"className":117411,"code":118544,"language":117413,"meta":141,"style":141},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[30,118546,118547,118555,118563,118574,118578],{"__ignoreMap":141},[228,118548,118549,118551,118553],{"class":230,"line":231},[228,118550,24692],{"class":2077},[228,118552,117432],{"class":343},[228,118554,26358],{"class":343},[228,118556,118557,118559,118561],{"class":230,"line":142},[228,118558,24692],{"class":2077},[228,118560,117432],{"class":343},[228,118562,117448],{"class":343},[228,118564,118565,118567,118569,118571],{"class":230,"line":1293},[228,118566,24692],{"class":2077},[228,118568,117432],{"class":343},[228,118570,23949],{"class":343},[228,118572,118573],{"class":343}," mesa-utils\n",[228,118575,118576],{"class":230,"line":1308},[228,118577,2514],{"emptyLinePlaceholder":157},[228,118579,118580],{"class":230,"line":1314},[228,118581,118582],{"class":297},"#然后重启wsl2即可\n",[5241,118584,118585],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":141,"searchDepth":142,"depth":142,"links":118587},[118588,118589,118594],{"id":117865,"depth":142,"text":117866},{"id":117878,"depth":142,"text":117879,"children":118590},[118591,118592,118593],{"id":117882,"depth":1293,"text":117883},{"id":117929,"depth":1293,"text":117930},{"id":117990,"depth":1293,"text":117991},{"id":118026,"depth":142,"text":118027,"children":118595},[118596,118597,118598],{"id":118030,"depth":1293,"text":118031},{"id":118092,"depth":1293,"text":118093},{"id":118381,"depth":1293,"text":118382},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117857,"description":154},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118605,"title":118606,"body":118607,"description":154,"extension":155,"meta":121543,"navigation":157,"path":121544,"seo":121545,"stem":121546,"__hash__":121547},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118608,"toc":121515},[118609,118612,118616,118622,118626,118632,118636,118824,118827,118832,118836,118840,118843,118846,118852,118857,118860,118863,118868,118901,118906,118910,118987,118990,118995,118999,119002,119041,119044,119053,119071,119076,119083,119200,119205,119208,119235,119240,119244,119253,119303,119310,119314,119317,119331,119338,119372,119377,119381,119404,119407,119412,119416,119419,119422,119425,119467,119471,119474,119477,119518,119522,119526,119529,119534,119539,119542,119565,119568,119576,119581,119584,119589,119594,119597,119602,119606,119611,119634,119639,119701,119709,119714,119719,119722,119727,119730,119735,119740,119758,119763,119769,119774,119788,119792,119795,119798,119801,119844,119847,119852,119953,119956,119961,119965,119969,120006,120010,120014,120018,120064,120068,120113,120117,120124,120132,120187,120190,120267,120270,120293,120297,120300,120305,120310,120318,120321,120326,120331,120336,120339,120344,120353,120356,120361,120364,120435,120440,120443,120448,120451,120456,120459,120464,120467,120472,120477,120480,120555,120558,120571,120576,120579,120593,120596,120625,120630,120659,120662,120667,120671,120676,120685,120688,120693,120696,120701,120704,120707,120712,120715,120720,120725,120728,120733,120736,120861,120866,120896,120899,120904,120909,120926,120929,120972,120975,121002,121007,121020,121163,121167,121172,121186,121189,121240,121243,121273,121276,121292,121297,121311,121314,121381,121386,121395,121400,121403,121415,121420,121427,121451,121454,121459,121462,121481,121486,121493,121505,121512],[10,118610,118606],{"id":118611},"_3-安装必备配置",[14,118613,118615],{"id":118614},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[220,118617,118620],{"className":118618,"code":118619,"language":5302},[5300],"  打开下方网站（注意，该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",[30,118621,118619],{"__ignoreMap":141},[200,118623,118625],{"id":118624},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[220,118627,118630],{"className":118628,"code":118629,"language":5302},[5300],"  输入以下命令\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",[30,118631,118629],{"__ignoreMap":141},[200,118633,118635],{"id":118634},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[220,118637,118641],{"className":118638,"code":118639,"language":118640,"meta":141,"style":141},"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",[30,118642,118643,118651,118662,118674,118688,118692,118702,118707,118711,118715,118720,118724,118736,118740,118745,118749,118760,118764,118780,118784,118795,118799,118804,118808,118816],{"__ignoreMap":141},[228,118644,118645,118647,118649],{"class":230,"line":231},[228,118646,24692],{"class":2077},[228,118648,117432],{"class":343},[228,118650,26358],{"class":343},[228,118652,118653,118655,118657,118659],{"class":230,"line":142},[228,118654,24692],{"class":2077},[228,118656,117432],{"class":343},[228,118658,23949],{"class":343},[228,118660,118661],{"class":343}," vim\n",[228,118663,118664,118666,118669,118671],{"class":230,"line":1293},[228,118665,24692],{"class":2077},[228,118667,118668],{"class":343}," rm",[228,118670,25441],{"class":287},[228,118672,118673],{"class":343}," \u002Fetc\u002Fapt\u002Fsources.list\n",[228,118675,118676,118678,118680,118682,118685],{"class":230,"line":1308},[228,118677,24692],{"class":2077},[228,118679,118668],{"class":343},[228,118681,25441],{"class":287},[228,118683,118684],{"class":343}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[228,118686,118687],{"class":287},"**\n",[228,118689,118690],{"class":230,"line":1314},[228,118691,2514],{"emptyLinePlaceholder":157},[228,118693,118694,118696,118699],{"class":230,"line":1328},[228,118695,24692],{"class":2077},[228,118697,118698],{"class":343}," vim",[228,118700,118701],{"class":343}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[228,118703,118704],{"class":230,"line":1334},[228,118705,118706],{"class":343},"```\n",[228,118708,118709],{"class":230,"line":1425},[228,118710,2514],{"emptyLinePlaceholder":157},[228,118712,118713],{"class":230,"line":1431},[228,118714,2514],{"emptyLinePlaceholder":157},[228,118716,118717],{"class":230,"line":1443},[228,118718,118719],{"class":2077},"选择好Ubuntu版本后，复制下方的内容。\n",[228,118721,118722],{"class":230,"line":1726},[228,118723,2514],{"emptyLinePlaceholder":157},[228,118725,118726,118728,118731,118734],{"class":230,"line":1731},[228,118727,32],{"class":234},[228,118729,118730],{"class":343},"[](",[228,118732,118733],{"class":2077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[228,118735,245],{"class":343},[228,118737,118738],{"class":230,"line":1737},[228,118739,2514],{"emptyLinePlaceholder":157},[228,118741,118742],{"class":230,"line":1742},[228,118743,118744],{"class":2077},"粘贴进去\n",[228,118746,118747],{"class":230,"line":1756},[228,118748,2514],{"emptyLinePlaceholder":157},[228,118750,118751,118753,118755,118758],{"class":230,"line":1761},[228,118752,32],{"class":234},[228,118754,118730],{"class":343},[228,118756,118757],{"class":2077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[228,118759,245],{"class":343},[228,118761,118762],{"class":230,"line":1767},[228,118763,2514],{"emptyLinePlaceholder":157},[228,118765,118766,118769,118772,118775,118777],{"class":230,"line":1788},[228,118767,118768],{"class":2077},"按一下ESC，然后英文冒号，输入",[228,118770,118771],{"class":343}," `",[228,118773,118774],{"class":2077},":wq!",[228,118776,1210],{"class":343},[228,118778,118779],{"class":2077},"然后回车\n",[228,118781,118782],{"class":230,"line":1793},[228,118783,2514],{"emptyLinePlaceholder":157},[228,118785,118786,118788,118790,118793],{"class":230,"line":1807},[228,118787,32],{"class":234},[228,118789,118730],{"class":343},[228,118791,118792],{"class":2077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[228,118794,245],{"class":343},[228,118796,118797],{"class":230,"line":1812},[228,118798,2514],{"emptyLinePlaceholder":157},[228,118800,118801],{"class":230,"line":1841},[228,118802,118803],{"class":2077},"输入以下命令\n",[228,118805,118806],{"class":230,"line":1846},[228,118807,2514],{"emptyLinePlaceholder":157},[228,118809,118810,118813],{"class":230,"line":1863},[228,118811,118812],{"class":343},"```",[228,118814,118815],{"class":2077},"Bash\n",[228,118817,118818,118820,118822],{"class":230,"line":1868},[228,118819,24692],{"class":2077},[228,118821,117432],{"class":343},[228,118823,26358],{"class":343},[19,118825,118826],{},"这里被替换成对应学校则成功",[19,118828,118829],{},[1576,118830],{"alt":141,"src":118831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,118833,118835],{"id":118834},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[200,118837,118839],{"id":118838},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,118841,118842],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,118844,118845],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,118847,118848],{},[476,118849,118850],{"href":118850,"rel":118851},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[23980],[19,118853,118854],{},[1576,118855],{"alt":141,"src":118856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,118858,118859],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,118861,118862],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,118864,118865],{},[1576,118866],{"alt":141,"src":118867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[220,118869,118871],{"className":117411,"code":118870,"language":117413,"meta":141,"style":141},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[30,118872,118873,118878,118885,118890],{"__ignoreMap":141},[228,118874,118875],{"class":230,"line":231},[228,118876,118877],{"class":297},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[228,118879,118880,118882],{"class":230,"line":142},[228,118881,101391],{"class":287},[228,118883,118884],{"class":343}," ~\u002FDownloads\n",[228,118886,118887],{"class":230,"line":1293},[228,118888,118889],{"class":297},"#下方chrome安装包名不一定是这个，根据名字来看\n",[228,118891,118892,118894,118896,118898],{"class":230,"line":1308},[228,118893,24692],{"class":2077},[228,118895,117432],{"class":343},[228,118897,23949],{"class":343},[228,118899,118900],{"class":343}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,118902,118903],{},[1576,118904],{"alt":141,"src":118905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[200,118907,118909],{"id":118908},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[220,118911,118913],{"className":117411,"code":118912,"language":117413,"meta":141,"style":141},"# 老版\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",[30,118914,118915,118920,118928,118939,118944,118948,118953,118963,118971,118982],{"__ignoreMap":141},[228,118916,118917],{"class":230,"line":231},[228,118918,118919],{"class":297},"# 老版\n",[228,118921,118922,118924,118926],{"class":230,"line":142},[228,118923,24692],{"class":2077},[228,118925,117432],{"class":343},[228,118927,26358],{"class":343},[228,118929,118930,118932,118934,118936],{"class":230,"line":1293},[228,118931,24692],{"class":2077},[228,118933,117432],{"class":343},[228,118935,23949],{"class":343},[228,118937,118938],{"class":343}," neofetch\n",[228,118940,118941],{"class":230,"line":1308},[228,118942,118943],{"class":2077},"neofetch\n",[228,118945,118946],{"class":230,"line":1314},[228,118947,2514],{"emptyLinePlaceholder":157},[228,118949,118950],{"class":230,"line":1328},[228,118951,118952],{"class":297},"# 新版\n",[228,118954,118955,118957,118960],{"class":230,"line":1334},[228,118956,24692],{"class":2077},[228,118958,118959],{"class":343}," add-apt-repository",[228,118961,118962],{"class":343}," ppa:zhangsongcui3371\u002Ffastfetch\n",[228,118964,118965,118967,118969],{"class":230,"line":1425},[228,118966,24692],{"class":2077},[228,118968,117432],{"class":343},[228,118970,26358],{"class":343},[228,118972,118973,118975,118977,118979],{"class":230,"line":1431},[228,118974,24692],{"class":2077},[228,118976,117432],{"class":343},[228,118978,23949],{"class":343},[228,118980,118981],{"class":343}," fastfetch\n",[228,118983,118984],{"class":230,"line":1443},[228,118985,118986],{"class":2077},"fastfetch\n",[19,118988,118989],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,118991,118992],{},[1576,118993],{"alt":141,"src":118994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[200,118996,118998],{"id":118997},"_323-移除snap应用","3.2.3 移除snap应用",[19,119000,119001],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[220,119003,119005],{"className":117411,"code":119004,"language":117413,"meta":141,"style":141},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[30,119006,119007,119019,119030],{"__ignoreMap":141},[228,119008,119009,119011,119013,119016],{"class":230,"line":231},[228,119010,24692],{"class":2077},[228,119012,26629],{"class":343},[228,119014,119015],{"class":343}," disable",[228,119017,119018],{"class":343}," snapd.service\n",[228,119020,119021,119023,119025,119027],{"class":230,"line":142},[228,119022,24692],{"class":2077},[228,119024,26629],{"class":343},[228,119026,119015],{"class":343},[228,119028,119029],{"class":343}," snapd.socket\n",[228,119031,119032,119034,119036,119038],{"class":230,"line":1293},[228,119033,24692],{"class":2077},[228,119035,26629],{"class":343},[228,119037,119015],{"class":343},[228,119039,119040],{"class":343}," snapd.seeded.service\n",[19,119042,119043],{},"然后查看snap应用列表",[19,119045,119046,119047,119052],{},"根据你安装的选择不同（最小安装或普通安装），有",[476,119048,119051],{"href":119049,"rel":119050},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[23980],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[220,119054,119056],{"className":117411,"code":119055,"language":117413,"meta":141,"style":141},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[30,119057,119058,119063],{"__ignoreMap":141},[228,119059,119060],{"class":230,"line":231},[228,119061,119062],{"class":297},"# 查询当前系统上snap安装了哪些app\n",[228,119064,119065,119068],{"class":230,"line":142},[228,119066,119067],{"class":2077},"snap",[228,119069,119070],{"class":343}," list\n",[19,119072,119073],{},[1576,119074],{"alt":141,"src":119075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,119077,119078,119079,119082],{},"卸载掉图中所有应用，按照 ",[388,119080,119081],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[220,119084,119086],{"className":117411,"code":119085,"language":117413,"meta":141,"style":141},"#移除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",[30,119087,119088,119093,119105,119110,119121,119126,119137,119142,119153,119158,119162,119167,119178,119189],{"__ignoreMap":141},[228,119089,119090],{"class":230,"line":231},[228,119091,119092],{"class":297},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[228,119094,119095,119097,119100,119102],{"class":230,"line":142},[228,119096,24692],{"class":2077},[228,119098,119099],{"class":343}," snap",[228,119101,26195],{"class":343},[228,119103,119104],{"class":343}," snap-store\n",[228,119106,119107],{"class":230,"line":1293},[228,119108,119109],{"class":297},"#移除firefox浏览器\n",[228,119111,119112,119114,119116,119118],{"class":230,"line":1308},[228,119113,24692],{"class":2077},[228,119115,119099],{"class":343},[228,119117,26195],{"class":343},[228,119119,119120],{"class":343}," firefox\n",[228,119122,119123],{"class":230,"line":1314},[228,119124,119125],{"class":297},"#移除gnome-42-2204\n",[228,119127,119128,119130,119132,119134],{"class":230,"line":1328},[228,119129,24692],{"class":2077},[228,119131,119099],{"class":343},[228,119133,26195],{"class":343},[228,119135,119136],{"class":343}," gnome-42-2204\n",[228,119138,119139],{"class":230,"line":1334},[228,119140,119141],{"class":297},"#移除gtk-common-themes\n",[228,119143,119144,119146,119148,119150],{"class":230,"line":1425},[228,119145,24692],{"class":2077},[228,119147,119099],{"class":343},[228,119149,26195],{"class":343},[228,119151,119152],{"class":343}," gtk-common-themes\n",[228,119154,119155],{"class":230,"line":1431},[228,119156,119157],{"class":297},"#移除其它...\n",[228,119159,119160],{"class":230,"line":1443},[228,119161,2788],{"class":238},[228,119163,119164],{"class":230,"line":1726},[228,119165,119166],{"class":297},"#移除core22,bare以及snapd\n",[228,119168,119169,119171,119173,119175],{"class":230,"line":1731},[228,119170,24692],{"class":2077},[228,119172,119099],{"class":343},[228,119174,26195],{"class":343},[228,119176,119177],{"class":343}," core22\n",[228,119179,119180,119182,119184,119186],{"class":230,"line":1737},[228,119181,24692],{"class":2077},[228,119183,119099],{"class":343},[228,119185,26195],{"class":343},[228,119187,119188],{"class":343}," bare\n",[228,119190,119191,119193,119195,119197],{"class":230,"line":1742},[228,119192,24692],{"class":2077},[228,119194,119099],{"class":343},[228,119196,26195],{"class":343},[228,119198,119199],{"class":343}," snapd\n",[19,119201,119202],{},[1576,119203],{"alt":141,"src":119204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,119206,119207],{},"输入以下命令查看是否还有snap包",[220,119209,119211],{"className":117411,"code":119210,"language":117413,"meta":141,"style":141},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[30,119212,119213,119219,119223,119227,119231],{"__ignoreMap":141},[228,119214,119215,119217],{"class":230,"line":231},[228,119216,119067],{"class":2077},[228,119218,119070],{"class":343},[228,119220,119221],{"class":230,"line":142},[228,119222,118919],{"class":297},[228,119224,119225],{"class":230,"line":1293},[228,119226,118943],{"class":2077},[228,119228,119229],{"class":230,"line":1308},[228,119230,118952],{"class":297},[228,119232,119233],{"class":230,"line":1314},[228,119234,118986],{"class":2077},[19,119236,119237],{},[1576,119238],{"alt":141,"src":119239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[200,119241,119243],{"id":119242},"_324-移除snap","3.2.4 移除snap",[19,119245,119246,119247,119252],{},"在删除掉",[476,119248,119251],{"href":119249,"rel":119250},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[23980],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[220,119254,119256],{"className":117411,"code":119255,"language":117413,"meta":141,"style":141}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[30,119257,119258,119263,119276,119281,119292],{"__ignoreMap":141},[228,119259,119260],{"class":230,"line":231},[228,119261,119262],{"class":297}," #使用apt移除掉snap\n",[228,119264,119265,119267,119269,119271,119274],{"class":230,"line":142},[228,119266,24692],{"class":2077},[228,119268,117432],{"class":343},[228,119270,117740],{"class":343},[228,119272,119273],{"class":287}," --purge",[228,119275,119199],{"class":343},[228,119277,119278],{"class":230,"line":1293},[228,119279,119280],{"class":297},"#移除snapd的一些目录\n",[228,119282,119283,119285,119287,119289],{"class":230,"line":1308},[228,119284,24692],{"class":2077},[228,119286,118668],{"class":343},[228,119288,25441],{"class":287},[228,119290,119291],{"class":343}," \u002Fvar\u002Fcache\u002Fsnapd\n",[228,119293,119294,119296,119298,119300],{"class":230,"line":1314},[228,119295,24692],{"class":2077},[228,119297,118668],{"class":343},[228,119299,25441],{"class":287},[228,119301,119302],{"class":343}," ~\u002Fsnap\n",[19,119304,119305,119306,119309],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[30,119307,119308],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[200,119311,119313],{"id":119312},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,119315,119316],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[220,119318,119320],{"className":117411,"code":119319,"language":117413,"meta":141,"style":141},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[30,119321,119322],{"__ignoreMap":141},[228,119323,119324,119326,119328],{"class":230,"line":231},[228,119325,24692],{"class":2077},[228,119327,118698],{"class":343},[228,119329,119330],{"class":343}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,119332,119333,119334,119337],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[30,119335,119336],{},":wq"," 回车",[220,119339,119341],{"className":117411,"code":119340,"language":117413,"meta":141,"style":141},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[30,119342,119343,119350,119364],{"__ignoreMap":141},[228,119344,119345,119348],{"class":230,"line":231},[228,119346,119347],{"class":2077},"Package:",[228,119349,119199],{"class":343},[228,119351,119352,119355,119358,119361],{"class":230,"line":142},[228,119353,119354],{"class":2077},"Pin:",[228,119356,119357],{"class":343}," release",[228,119359,119360],{"class":343}," a=",[228,119362,119363],{"class":287},"*\n",[228,119365,119366,119369],{"class":230,"line":1293},[228,119367,119368],{"class":2077},"Pin-Priority:",[228,119370,119371],{"class":287}," -10\n",[19,119373,119374],{},[1576,119375],{"alt":141,"src":119376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[200,119378,119380],{"id":119379},"_326-测试是否成功","3.2.6 测试是否成功",[220,119382,119384],{"className":117411,"code":119383,"language":117413,"meta":141,"style":141},"sudo apt update\nsudo apt install firefox\n",[30,119385,119386,119394],{"__ignoreMap":141},[228,119387,119388,119390,119392],{"class":230,"line":231},[228,119389,24692],{"class":2077},[228,119391,117432],{"class":343},[228,119393,26358],{"class":343},[228,119395,119396,119398,119400,119402],{"class":230,"line":142},[228,119397,24692],{"class":2077},[228,119399,117432],{"class":343},[228,119401,23949],{"class":343},[228,119403,119120],{"class":343},[19,119405,119406],{},"这里提示snapd无法被安装，就证明成功了",[19,119408,119409],{},[1576,119410],{"alt":141,"src":119411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[200,119413,119415],{"id":119414},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,119417,119418],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,119420,119421],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,119423,119424],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[220,119426,119428],{"className":117411,"code":119427,"language":117413,"meta":141,"style":141},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[30,119429,119430,119435,119444,119449,119457],{"__ignoreMap":141},[228,119431,119432],{"class":230,"line":231},[228,119433,119434],{"class":297},"# 添加Mozilla提供的源\n",[228,119436,119437,119439,119441],{"class":230,"line":142},[228,119438,24692],{"class":2077},[228,119440,118959],{"class":343},[228,119442,119443],{"class":343}," ppa:mozillateam\u002Fppa\n",[228,119445,119446],{"class":230,"line":1293},[228,119447,119448],{"class":297},"# 安装Firefox\n",[228,119450,119451,119453,119455],{"class":230,"line":1308},[228,119452,24692],{"class":2077},[228,119454,117432],{"class":343},[228,119456,26358],{"class":343},[228,119458,119459,119461,119463,119465],{"class":230,"line":1314},[228,119460,24692],{"class":2077},[228,119462,117432],{"class":343},[228,119464,23949],{"class":343},[228,119466,119120],{"class":343},[200,119468,119470],{"id":119469},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,119472,119473],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,119475,119476],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[220,119478,119480],{"className":117411,"code":119479,"language":117413,"meta":141,"style":141},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[30,119481,119482,119487,119497,119505,119509],{"__ignoreMap":141},[228,119483,119484],{"class":230,"line":231},[228,119485,119486],{"class":297},"#删掉禁止安装snap的配置文件\n",[228,119488,119489,119491,119493,119495],{"class":230,"line":142},[228,119490,24692],{"class":2077},[228,119492,118668],{"class":343},[228,119494,25441],{"class":287},[228,119496,119330],{"class":343},[228,119498,119499,119501,119503],{"class":230,"line":1293},[228,119500,24692],{"class":2077},[228,119502,117432],{"class":343},[228,119504,26358],{"class":343},[228,119506,119507],{"class":230,"line":1308},[228,119508,2514],{"emptyLinePlaceholder":157},[228,119510,119511,119513,119515],{"class":230,"line":1314},[228,119512,24692],{"class":2077},[228,119514,117432],{"class":343},[228,119516,119517],{"class":343}," dist-update\n",[14,119519,119521],{"id":119520},"_33-中文输入法","3.3 中文输入法",[200,119523,119525],{"id":119524},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,119527,119528],{},"官网下载搜狗输入法",[19,119530,119531],{},[1576,119532],{"alt":141,"src":119533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,119535,119536],{},[1576,119537],{"alt":141,"src":119538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,119540,119541],{},"打开终端输入如下",[220,119543,119545],{"className":117411,"code":119544,"language":117413,"meta":141,"style":141},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[30,119546,119547,119554],{"__ignoreMap":141},[228,119548,119549,119551],{"class":230,"line":231},[228,119550,101391],{"class":287},[228,119552,119553],{"class":343}," ~\u002FDownloads\u002F\n",[228,119555,119556,119558,119560,119562],{"class":230,"line":142},[228,119557,24692],{"class":2077},[228,119559,117432],{"class":343},[228,119561,23949],{"class":343},[228,119563,119564],{"class":343}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,119566,119567],{},"打开Fcitx",[19,119569,119570,119573],{},[1576,119571],{"alt":141,"src":119572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[1576,119574],{"alt":141,"src":119575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,119577,119578],{},[1576,119579],{"alt":141,"src":119580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,119582,119583],{},"添加搜狗输入法",[19,119585,119586],{},[1576,119587],{"alt":141,"src":119588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,119590,119591],{},[1576,119592],{"alt":141,"src":119593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,119595,119596],{},"将搜狗输入法设置为唯一输入法",[19,119598,119599],{},[1576,119600],{"alt":141,"src":119601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[200,119603,119605],{"id":119604},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[183,119607,119608],{},[186,119609,119610],{},"卸载旧输入法",[220,119612,119614],{"className":118638,"code":119613,"language":118640,"meta":141,"style":141},"sudo apt purge fcitx* ibus*\n",[30,119615,119616],{"__ignoreMap":141},[228,119617,119618,119620,119622,119624,119627,119629,119632],{"class":230,"line":231},[228,119619,24692],{"class":2077},[228,119621,117432],{"class":343},[228,119623,117773],{"class":343},[228,119625,119626],{"class":343}," fcitx",[228,119628,693],{"class":287},[228,119630,119631],{"class":343}," ibus",[228,119633,119363],{"class":287},[183,119635,119636],{"start":142},[186,119637,119638],{},"安装Fcitx5",[220,119640,119642],{"className":117411,"code":119641,"language":117413,"meta":141,"style":141},"# 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",[30,119643,119644,119649,119663,119667,119672,119681,119689],{"__ignoreMap":141},[228,119645,119646],{"class":230,"line":231},[228,119647,119648],{"class":297},"# Ubuntu22.04及以上、Debian12及以上\n",[228,119650,119651,119653,119655,119657,119660],{"class":230,"line":142},[228,119652,24692],{"class":2077},[228,119654,117432],{"class":343},[228,119656,23949],{"class":343},[228,119658,119659],{"class":343}," fcitx5",[228,119661,119662],{"class":343}," fcitx5-chinese-addons\n",[228,119664,119665],{"class":230,"line":1293},[228,119666,2514],{"emptyLinePlaceholder":157},[228,119668,119669],{"class":230,"line":1308},[228,119670,119671],{"class":297},"# Ubuntu20.04\n",[228,119673,119674,119676,119678],{"class":230,"line":1314},[228,119675,24692],{"class":2077},[228,119677,118959],{"class":343},[228,119679,119680],{"class":343}," ppa:zhsj\u002Ffcitx5\n",[228,119682,119683,119685,119687],{"class":230,"line":1328},[228,119684,24692],{"class":2077},[228,119686,117432],{"class":343},[228,119688,26358],{"class":343},[228,119690,119691,119693,119695,119697,119699],{"class":230,"line":1334},[228,119692,24692],{"class":2077},[228,119694,117432],{"class":343},[228,119696,23949],{"class":343},[228,119698,119659],{"class":343},[228,119700,119662],{"class":343},[183,119702,119703,119706],{"start":1293},[186,119704,119705],{},"Reboot System",[186,119707,119708],{},"启动Fcitx5",[19,119710,119711],{},[1576,119712],{"alt":141,"src":119713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[183,119715,119716],{"start":1314},[186,119717,119718],{},"修改一些设置",[19,119720,119721],{},"将Pinyin和Keyboard - English US加入到左边。",[19,119723,119724],{},[1576,119725],{"alt":141,"src":119726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,119728,119729],{},"添加快捷键以便于更好切换中英文",[19,119731,119732],{},[1576,119733],{"alt":141,"src":119734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[183,119736,119737],{"start":1328},[186,119738,119739],{},"重启",[220,119741,119743],{"className":118638,"code":119742,"language":118640,"meta":141,"style":141},"sudo shutdown -r now\n",[30,119744,119745],{"__ignoreMap":141},[228,119746,119747,119749,119752,119755],{"class":230,"line":231},[228,119748,24692],{"class":2077},[228,119750,119751],{"class":343}," shutdown",[228,119753,119754],{"class":287}," -r",[228,119756,119757],{"class":343}," now\n",[183,119759,119760],{"start":1334},[186,119761,119762],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,119764,119765],{},[476,119766,119767],{"href":119767,"rel":119768},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[23980],[183,119770,119771],{"start":1425},[186,119772,119773],{},"再重启",[220,119775,119776],{"className":118638,"code":119742,"language":118640,"meta":141,"style":141},[30,119777,119778],{"__ignoreMap":141},[228,119779,119780,119782,119784,119786],{"class":230,"line":231},[228,119781,24692],{"class":2077},[228,119783,119751],{"class":343},[228,119785,119754],{"class":287},[228,119787,119757],{"class":343},[14,119789,119791],{"id":119790},"_34-pip3源替换","3.4 pip3源替换",[19,119793,119794],{},"非Debian系发行版需要做。",[19,119796,119797],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,119799,119800],{},"使用dnf的系统也可能不用做。",[220,119802,119804],{"className":117411,"code":119803,"language":117413,"meta":141,"style":141},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[30,119805,119806,119811,119818,119823,119828],{"__ignoreMap":141},[228,119807,119808],{"class":230,"line":231},[228,119809,119810],{"class":297},"# 检查是否已安装 pip\n",[228,119812,119813,119816],{"class":230,"line":142},[228,119814,119815],{"class":2077},"pip3",[228,119817,26409],{"class":287},[228,119819,119820],{"class":230,"line":1293},[228,119821,119822],{"class":297},"# 如果未安装，先安装 pip3（见下方）\n",[228,119824,119825],{"class":230,"line":1308},[228,119826,119827],{"class":297},"# 配置 pip 使用清华源\n",[228,119829,119830,119832,119835,119838,119841],{"class":230,"line":1314},[228,119831,119815],{"class":2077},[228,119833,119834],{"class":343}," config",[228,119836,119837],{"class":343}," set",[228,119839,119840],{"class":343}," global.index-url",[228,119842,119843],{"class":343}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,119845,119846],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,119848,119849],{},[1576,119850],{"alt":141,"src":119851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[220,119853,119855],{"className":117411,"code":119854,"language":117413,"meta":141,"style":141},"#安装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",[30,119856,119857,119862,119870,119881,119885,119890,119909,119913,119918,119930,119934,119939],{"__ignoreMap":141},[228,119858,119859],{"class":230,"line":231},[228,119860,119861],{"class":297},"#安装pip3\n",[228,119863,119864,119866,119868],{"class":230,"line":142},[228,119865,24692],{"class":2077},[228,119867,117432],{"class":343},[228,119869,26358],{"class":343},[228,119871,119872,119874,119876,119878],{"class":230,"line":1293},[228,119873,24692],{"class":2077},[228,119875,26192],{"class":343},[228,119877,23949],{"class":343},[228,119879,119880],{"class":343}," python3-pip\n",[228,119882,119883],{"class":230,"line":1308},[228,119884,2514],{"emptyLinePlaceholder":157},[228,119886,119887],{"class":230,"line":1314},[228,119888,119889],{"class":297},"#更新pip3\n",[228,119891,119892,119894,119896,119898,119900,119902,119905,119907],{"class":230,"line":1328},[228,119893,100994],{"class":2077},[228,119895,100997],{"class":287},[228,119897,101020],{"class":343},[228,119899,23949],{"class":343},[228,119901,26546],{"class":287},[228,119903,119904],{"class":343}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[228,119906,101025],{"class":287},[228,119908,101028],{"class":343},[228,119910,119911],{"class":230,"line":1334},[228,119912,2514],{"emptyLinePlaceholder":157},[228,119914,119915],{"class":230,"line":1425},[228,119916,119917],{"class":297},"#设置pip源为清华源\n",[228,119919,119920,119922,119924,119926,119928],{"class":230,"line":1431},[228,119921,119815],{"class":2077},[228,119923,119834],{"class":343},[228,119925,119837],{"class":343},[228,119927,119840],{"class":343},[228,119929,119843],{"class":343},[228,119931,119932],{"class":230,"line":1443},[228,119933,2514],{"emptyLinePlaceholder":157},[228,119935,119936],{"class":230,"line":1726},[228,119937,119938],{"class":297},"#测试\n",[228,119940,119941,119943,119945,119947,119949,119951],{"class":230,"line":1731},[228,119942,100994],{"class":2077},[228,119944,100997],{"class":287},[228,119946,101020],{"class":343},[228,119948,23949],{"class":343},[228,119950,101025],{"class":287},[228,119952,101028],{"class":343},[19,119954,119955],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,119957,119958],{},[1576,119959],{"alt":141,"src":119960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,119962,119964],{"id":119963},"_35-显卡驱动安装","3.5 显卡驱动安装",[200,119966,119968],{"id":119967},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[220,119970,119972],{"className":118638,"code":119971,"language":118640,"meta":141,"style":141},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[30,119973,119974,119979,119994,119999],{"__ignoreMap":141},[228,119975,119976],{"class":230,"line":231},[228,119977,119978],{"class":297},"# 如果是使用apt安装的驱动\n",[228,119980,119981,119983,119985,119987,119989,119992],{"class":230,"line":142},[228,119982,24692],{"class":2077},[228,119984,26192],{"class":343},[228,119986,26195],{"class":343},[228,119988,119273],{"class":287},[228,119990,119991],{"class":343}," nvidia",[228,119993,119363],{"class":287},[228,119995,119996],{"class":230,"line":1293},[228,119997,119998],{"class":297},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[228,120000,120001,120003],{"class":230,"line":1308},[228,120002,24692],{"class":2077},[228,120004,120005],{"class":343}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[200,120007,120009],{"id":120008},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22113,120011,120013],{"id":120012},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23025,120015,120017],{"id":120016},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[220,120019,120021],{"className":118638,"code":120020,"language":118640,"meta":141,"style":141},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[30,120022,120023,120028,120039,120044,120054,120059],{"__ignoreMap":141},[228,120024,120025],{"class":230,"line":231},[228,120026,120027],{"class":297},"# 安装英伟达驱动\n",[228,120029,120030,120032,120034,120036],{"class":230,"line":142},[228,120031,24692],{"class":2077},[228,120033,117432],{"class":343},[228,120035,23949],{"class":343},[228,120037,120038],{"class":343}," nvidia-driver-版本号\n",[228,120040,120041],{"class":230,"line":1293},[228,120042,120043],{"class":297},"# 重启 \n",[228,120045,120046,120048,120050,120052],{"class":230,"line":1308},[228,120047,24692],{"class":2077},[228,120049,119751],{"class":343},[228,120051,119754],{"class":287},[228,120053,119757],{"class":343},[228,120055,120056],{"class":230,"line":1314},[228,120057,120058],{"class":297},"# 检查驱动是否安装成功\n",[228,120060,120061],{"class":230,"line":1328},[228,120062,120063],{"class":2077},"nvidia-smi\n",[23025,120065,120067],{"id":120066},"_35212-debian","3.5.2.1.2 Debian",[220,120069,120071],{"className":118638,"code":120070,"language":118640,"meta":141,"style":141},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[30,120072,120073,120077,120091,120095,120105,120109],{"__ignoreMap":141},[228,120074,120075],{"class":230,"line":231},[228,120076,120027],{"class":297},[228,120078,120079,120081,120083,120085,120088],{"class":230,"line":142},[228,120080,24692],{"class":2077},[228,120082,117432],{"class":343},[228,120084,23949],{"class":343},[228,120086,120087],{"class":343}," nvidia-driver",[228,120089,120090],{"class":343}," nvidia-settings\n",[228,120092,120093],{"class":230,"line":1293},[228,120094,120043],{"class":297},[228,120096,120097,120099,120101,120103],{"class":230,"line":1308},[228,120098,24692],{"class":2077},[228,120100,119751],{"class":343},[228,120102,119754],{"class":287},[228,120104,119757],{"class":343},[228,120106,120107],{"class":230,"line":1314},[228,120108,120058],{"class":297},[228,120110,120111],{"class":230,"line":1328},[228,120112,120063],{"class":2077},[22113,120114,120116],{"id":120115},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,120118,120119,120120,120123],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[388,120121,120122],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,120125,120126,120127],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23668,120128,120129],{},[388,120130,120131],{},"（也可以不禁用桌面环境，直接进行下一步。）",[220,120133,120135],{"className":118638,"code":120134,"language":118640,"meta":141,"style":141},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[30,120136,120137,120142,120152,120157,120170,120175],{"__ignoreMap":141},[228,120138,120139],{"class":230,"line":231},[228,120140,120141],{"class":297},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[228,120143,120144,120146,120149],{"class":230,"line":142},[228,120145,24692],{"class":2077},[228,120147,120148],{"class":343}," telinit",[228,120150,120151],{"class":287}," 3\n",[228,120153,120154],{"class":230,"line":1293},[228,120155,120156],{"class":297},"# ubuntu 使用下方命令\n",[228,120158,120159,120161,120164,120167],{"class":230,"line":1308},[228,120160,24692],{"class":2077},[228,120162,120163],{"class":343}," service",[228,120165,120166],{"class":343}," lightdm",[228,120168,120169],{"class":343}," stop\n",[228,120171,120172],{"class":230,"line":1314},[228,120173,120174],{"class":297},"# Fedora 使用下方命令\n",[228,120176,120177,120179,120181,120184],{"class":230,"line":1328},[228,120178,24692],{"class":2077},[228,120180,26629],{"class":343},[228,120182,120183],{"class":343}," isolate",[228,120185,120186],{"class":343}," multi-user.target\n",[19,120188,120189],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[220,120191,120193],{"className":118638,"code":120192,"language":118640,"meta":141,"style":141},"# 编译环境+准备工作\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",[30,120194,120195,120200,120211,120216,120223,120228,120240,120245,120252,120257],{"__ignoreMap":141},[228,120196,120197],{"class":230,"line":231},[228,120198,120199],{"class":297},"# 编译环境+准备工作\n",[228,120201,120202,120204,120206,120208],{"class":230,"line":142},[228,120203,24692],{"class":2077},[228,120205,117432],{"class":343},[228,120207,23949],{"class":343},[228,120209,120210],{"class":343}," build-essential\n",[228,120212,120213],{"class":230,"line":1293},[228,120214,120215],{"class":297},"# 进入到.run目录中\n",[228,120217,120218,120220],{"class":230,"line":1308},[228,120219,101391],{"class":287},[228,120221,120222],{"class":343}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[228,120224,120225],{"class":230,"line":1314},[228,120226,120227],{"class":297},"# 给驱动文件增加可执行权限：\n",[228,120229,120230,120232,120234,120237],{"class":230,"line":1328},[228,120231,24692],{"class":2077},[228,120233,24695],{"class":343},[228,120235,120236],{"class":343}," a+x",[228,120238,120239],{"class":343}," NVIDIA-Linux-x86_64-550.107.02.run\n",[228,120241,120242],{"class":230,"line":1334},[228,120243,120244],{"class":297},"# 然后执行安装：\n",[228,120246,120247,120249],{"class":230,"line":1425},[228,120248,24692],{"class":2077},[228,120250,120251],{"class":343}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[228,120253,120254],{"class":230,"line":1431},[228,120255,120256],{"class":297},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[228,120258,120259,120261,120264],{"class":230,"line":1443},[228,120260,24692],{"class":2077},[228,120262,120263],{"class":343}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[228,120265,120266],{"class":287},"  --no-opengl-files\n",[19,120268,120269],{},"安装完毕重启即可",[220,120271,120273],{"className":118638,"code":120272,"language":118640,"meta":141,"style":141},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[30,120274,120275,120279,120285,120289],{"__ignoreMap":141},[228,120276,120277],{"class":230,"line":231},[228,120278,120043],{"class":297},[228,120280,120281,120283],{"class":230,"line":142},[228,120282,24692],{"class":2077},[228,120284,26763],{"class":343},[228,120286,120287],{"class":230,"line":1293},[228,120288,120058],{"class":297},[228,120290,120291],{"class":230,"line":1308},[228,120292,120063],{"class":2077},[200,120294,120296],{"id":120295},"_353-安装cuda","3.5.3 安装CUDA",[19,120298,120299],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,120301,120302],{},[1576,120303],{"alt":141,"src":120304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[183,120306,120307],{},[186,120308,120309],{},"先查看显卡驱动所支持的最高CUDA版本",[220,120311,120312],{"className":118638,"code":120063,"language":118640,"meta":141,"style":141},[30,120313,120314],{"__ignoreMap":141},[228,120315,120316],{"class":230,"line":231},[228,120317,120063],{"class":2077},[19,120319,120320],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,120322,120323],{},[1576,120324],{"alt":141,"src":120325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[183,120327,120328],{"start":142},[186,120329,120330],{},"下载CUDA并安装CUDA",[19,120332,118417,120333],{},[476,120334,118420],{"href":118420,"rel":120335},[23980],[19,120337,120338],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,120340,120341],{},[1576,120342],{"alt":141,"src":120343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,120345,120346,120347,120352],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[476,120348,120351],{"href":120349,"rel":120350},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[23980],"Vinci机器人队单片机教程","）",[19,120354,120355],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,120357,120358],{},[1576,120359],{"alt":141,"src":120360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,120362,120363],{},"将最下方框框里的命令敲入终端",[220,120365,120367],{"className":118638,"code":120366,"language":118640,"meta":141,"style":141},"# 在当前文件夹下创建一个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",[30,120368,120369,120374,120383,120388,120395,120400,120408,120413,120424,120429],{"__ignoreMap":141},[228,120370,120371],{"class":230,"line":231},[228,120372,120373],{"class":297},"# 在当前文件夹下创建一个ttt的子文件夹\n",[228,120375,120376,120378,120380],{"class":230,"line":142},[228,120377,101381],{"class":2077},[228,120379,29331],{"class":287},[228,120381,120382],{"class":343}," .\u002Fttt\n",[228,120384,120385],{"class":230,"line":1293},[228,120386,120387],{"class":297},"# 进入ttt文件夹\n",[228,120389,120390,120392],{"class":230,"line":1308},[228,120391,101391],{"class":287},[228,120393,120394],{"class":343}," ttt\n",[228,120396,120397],{"class":230,"line":1314},[228,120398,120399],{"class":297},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[228,120401,120402,120405],{"class":230,"line":1328},[228,120403,120404],{"class":2077},"wget",[228,120406,120407],{"class":343}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[228,120409,120410],{"class":230,"line":1334},[228,120411,120412],{"class":297},"# 给予权限\n",[228,120414,120415,120417,120419,120421],{"class":230,"line":1425},[228,120416,24692],{"class":2077},[228,120418,24695],{"class":343},[228,120420,120236],{"class":343},[228,120422,120423],{"class":343}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[228,120425,120426],{"class":230,"line":1431},[228,120427,120428],{"class":297},"# 运行脚本\n",[228,120430,120431,120433],{"class":230,"line":1443},[228,120432,24692],{"class":2077},[228,120434,120423],{"class":343},[19,120436,120437],{},[1576,120438],{"alt":141,"src":120439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,120441,120442],{},"正在安装中：",[19,120444,120445],{},[1576,120446],{"alt":141,"src":120447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,120449,120450],{},"输入accept接受即可",[19,120452,120453],{},[1576,120454],{"alt":141,"src":120455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,120457,120458],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,120460,120461],{},[1576,120462],{"alt":141,"src":120463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,120465,120466],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,120468,120469],{},[1576,120470],{"alt":141,"src":120471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[183,120473,120474],{"start":1293},[186,120475,120476],{},"配置环境",[19,120478,120479],{},"根据上方确认一下路径，比如我上面红色框起来的为",[220,120481,120483],{"className":118638,"code":120482,"language":118640,"meta":141,"style":141},"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",[30,120484,120485,120501,120516],{"__ignoreMap":141},[228,120486,120487,120490,120493,120496,120499],{"class":230,"line":231},[228,120488,120489],{"class":2077},"Please",[228,120491,120492],{"class":343}," make",[228,120494,120495],{"class":343}," sure",[228,120497,120498],{"class":343}," that",[228,120500,2788],{"class":238},[228,120502,120503,120505,120508,120511,120514],{"class":230,"line":142},[228,120504,52386],{"class":2077},[228,120506,120507],{"class":343},"   PATH",[228,120509,120510],{"class":343}," includes",[228,120512,120513],{"class":343}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[228,120515,2788],{"class":238},[228,120517,120518,120520,120523,120525,120528,120531,120533,120536,120539,120542,120545,120547,120550,120552],{"class":230,"line":1293},[228,120519,52386],{"class":2077},[228,120521,120522],{"class":343},"   LD_LIBRARY_PATH",[228,120524,120510],{"class":343},[228,120526,120527],{"class":343}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[228,120529,120530],{"class":343}," or,",[228,120532,5324],{"class":343},[228,120534,120535],{"class":343}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[228,120537,120538],{"class":343}," to",[228,120540,120541],{"class":343}," \u002Fetc\u002Fld.so.conf",[228,120543,120544],{"class":343}," and",[228,120546,27346],{"class":343},[228,120548,120549],{"class":343}," ldconfig",[228,120551,64719],{"class":343},[228,120553,120554],{"class":343}," root\n",[19,120556,120557],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[220,120559,120561],{"className":118638,"code":120560,"language":118640,"meta":141,"style":141},"which nvcc\n",[30,120562,120563],{"__ignoreMap":141},[228,120564,120565,120568],{"class":230,"line":231},[228,120566,120567],{"class":287},"which",[228,120569,120570],{"class":343}," nvcc\n",[19,120572,120573],{},[1576,120574],{"alt":141,"src":120575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,120577,120578],{},"所以我进行以下操作：",[220,120580,120582],{"className":118638,"code":120581,"language":118640,"meta":141,"style":141},"sudo vim ~\u002F.bashrc\n",[30,120583,120584],{"__ignoreMap":141},[228,120585,120586,120588,120590],{"class":230,"line":231},[228,120587,24692],{"class":2077},[228,120589,118698],{"class":343},[228,120591,120592],{"class":343}," ~\u002F.bashrc\n",[19,120594,120595],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[220,120597,120599],{"className":118638,"code":120598,"language":118640,"meta":141,"style":141},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[30,120600,120601,120613],{"__ignoreMap":141},[228,120602,120603,120605,120608,120610],{"class":230,"line":231},[228,120604,25158],{"class":234},[228,120606,120607],{"class":238}," PATH",[228,120609,284],{"class":234},[228,120611,120612],{"class":238},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[228,120614,120615,120617,120620,120622],{"class":230,"line":142},[228,120616,25158],{"class":234},[228,120618,120619],{"class":238}," LD_LIBRARY_PATH",[228,120621,284],{"class":234},[228,120623,120624],{"class":238},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,120626,120627],{},[1576,120628],{"alt":141,"src":120629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[220,120631,120633],{"className":118638,"code":120632,"language":118640,"meta":141,"style":141},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[30,120634,120635,120640,120646,120651],{"__ignoreMap":141},[228,120636,120637],{"class":230,"line":231},[228,120638,120639],{"class":297},"# 刷新当前终端的环境变量\n",[228,120641,120642,120644],{"class":230,"line":142},[228,120643,101008],{"class":287},[228,120645,120592],{"class":343},[228,120647,120648],{"class":230,"line":1293},[228,120649,120650],{"class":297},"# 验证CUDA是否安装成功\n",[228,120652,120653,120656],{"class":230,"line":1308},[228,120654,120655],{"class":2077},"nvcc",[228,120657,120658],{"class":287}," -V\n",[19,120660,120661],{},"出现下图这种则安装成功。",[19,120663,120664],{},[1576,120665],{"alt":141,"src":120666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[200,120668,120670],{"id":120669},"_354-安装cudnn","3.5.4 安装cuDNN",[183,120672,120673],{},[186,120674,120675],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,120677,120678,120679,120684],{},"前往 NVIDIA cuDNN 下载页面：",[476,120680,120683],{"href":120681,"rel":120682},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[23980],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,120686,120687],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,120689,120690],{},[1576,120691],{"alt":141,"src":120692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,120694,120695],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,120697,120698],{},[1576,120699],{"alt":141,"src":120700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,120702,120703],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,120705,120706],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,120708,120709],{},[388,120710,120711],{},"我这里选择所有Linux X86_64最通用的办法：",[19,120713,120714],{},"下载好的：",[19,120716,120717],{},[1576,120718],{"alt":141,"src":120719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[183,120721,120722],{"start":142},[186,120723,120724],{},"安装cuDNN",[19,120726,120727],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,120729,120730],{},[1576,120731],{"alt":141,"src":120732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,120734,120735],{},"解压文件，并复制到对应位置完成安装",[220,120737,120739],{"className":118638,"code":120738,"language":118640,"meta":141,"style":141},"# 解压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",[30,120740,120741,120746,120757,120762,120769,120774,120790,120804,120809,120820,120829,120833,120849],{"__ignoreMap":141},[228,120742,120743],{"class":230,"line":231},[228,120744,120745],{"class":297},"# 解压cuDNN文件\n",[228,120747,120748,120751,120754],{"class":230,"line":142},[228,120749,120750],{"class":2077},"tar",[228,120752,120753],{"class":287}," -xvf",[228,120755,120756],{"class":343}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[228,120758,120759],{"class":230,"line":1293},[228,120760,120761],{"class":297},"# cd进文件夹\n",[228,120763,120764,120766],{"class":230,"line":1308},[228,120765,101391],{"class":287},[228,120767,120768],{"class":343}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[228,120770,120771],{"class":230,"line":1314},[228,120772,120773],{"class":297},"# 复制cuDNN文件到CUDA目录\n",[228,120775,120776,120778,120780,120783,120785,120788],{"class":230,"line":1328},[228,120777,24692],{"class":2077},[228,120779,27977],{"class":343},[228,120781,120782],{"class":343}," include\u002Fcudnn",[228,120784,693],{"class":287},[228,120786,120787],{"class":343},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[228,120789,2788],{"class":238},[228,120791,120792,120794,120796,120799,120801],{"class":230,"line":1334},[228,120793,24692],{"class":2077},[228,120795,27977],{"class":343},[228,120797,120798],{"class":343}," lib\u002Flibcudnn",[228,120800,693],{"class":287},[228,120802,120803],{"class":343},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[228,120805,120806],{"class":230,"line":1425},[228,120807,120808],{"class":297},"# 对比一下有没有缺文件\n",[228,120810,120811,120813,120816,120818],{"class":230,"line":1431},[228,120812,26877],{"class":2077},[228,120814,120815],{"class":343}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[228,120817,693],{"class":287},[228,120819,2788],{"class":238},[228,120821,120822,120824,120827],{"class":230,"line":1443},[228,120823,26877],{"class":2077},[228,120825,120826],{"class":343}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[228,120828,119363],{"class":287},[228,120830,120831],{"class":230,"line":1726},[228,120832,120412],{"class":297},[228,120834,120835,120837,120839,120842,120844,120846],{"class":230,"line":1731},[228,120836,24692],{"class":2077},[228,120838,24695],{"class":343},[228,120840,120841],{"class":343}," a+r",[228,120843,120815],{"class":343},[228,120845,693],{"class":287},[228,120847,120848],{"class":238},"   \n",[228,120850,120851,120853,120855,120857,120859],{"class":230,"line":1737},[228,120852,24692],{"class":2077},[228,120854,24695],{"class":343},[228,120856,120841],{"class":343},[228,120858,120826],{"class":343},[228,120860,119363],{"class":287},[183,120862,120863],{"start":1293},[186,120864,120865],{},"检查是否安装成功",[220,120867,120869],{"className":118638,"code":120868,"language":118640,"meta":141,"style":141},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[30,120870,120871,120876],{"__ignoreMap":141},[228,120872,120873],{"class":230,"line":231},[228,120874,120875],{"class":297},"# 检查cuDNN版本命令\n",[228,120877,120878,120881,120884,120886,120888,120891,120894],{"class":230,"line":142},[228,120879,120880],{"class":2077},"cat",[228,120882,120883],{"class":343}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[228,120885,25225],{"class":234},[228,120887,30351],{"class":2077},[228,120889,120890],{"class":343}," CUDNN_MAJOR",[228,120892,120893],{"class":287}," -A",[228,120895,47838],{"class":287},[19,120897,120898],{},"出现下图这样的就是安装成功了",[19,120900,120901],{},[1576,120902],{"alt":141,"src":120903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[183,120905,120906],{"start":1308},[186,120907,120908],{},"软链接(一般不需要)",[220,120910,120912],{"className":118638,"code":120911,"language":118640,"meta":141,"style":141},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[30,120913,120914,120919],{"__ignoreMap":141},[228,120915,120916],{"class":230,"line":231},[228,120917,120918],{"class":297},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[228,120920,120921,120923],{"class":230,"line":142},[228,120922,24692],{"class":2077},[228,120924,120925],{"class":343}," ldconfig\n",[19,120927,120928],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[220,120930,120935],{"className":120931,"code":120932,"language":120933,"meta":120934,"style":141},"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",[30,120936,120937,120942,120947,120952,120957,120962,120967],{"__ignoreMap":141},[228,120938,120939],{"class":230,"line":231},[228,120940,120941],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[228,120943,120944],{"class":230,"line":142},[228,120945,120946],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[228,120948,120949],{"class":230,"line":1293},[228,120950,120951],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[228,120953,120954],{"class":230,"line":1308},[228,120955,120956],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[228,120958,120959],{"class":230,"line":1314},[228,120960,120961],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[228,120963,120964],{"class":230,"line":1328},[228,120965,120966],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[228,120968,120969],{"class":230,"line":1334},[228,120970,120971],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,120973,120974],{},"运行下方的命令",[220,120976,120978],{"className":118638,"code":120977,"language":118640,"meta":141,"style":141},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[30,120979,120980,120985,120992,120997],{"__ignoreMap":141},[228,120981,120982],{"class":230,"line":231},[228,120983,120984],{"class":297},"# cd进入CUDA路径\n",[228,120986,120987,120989],{"class":230,"line":142},[228,120988,101391],{"class":287},[228,120990,120991],{"class":343}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[228,120993,120994],{"class":230,"line":1293},[228,120995,120996],{"class":297}," # 查看本路径下的需要软链接的文件名\n",[228,120998,120999],{"class":230,"line":1308},[228,121000,121001],{"class":2077}," ls\n",[19,121003,121004],{},[1576,121005],{"alt":141,"src":121006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,121008,121009,121010,18525,121013,18525,121016,121019],{},"如上图，我需要将",[30,121011,121012],{},"libcudnn_xxx_xxxxx.so.8.9.7",[30,121014,121015],{},"libcudnn_xxx_xxxxx.so.8",[30,121017,121018],{},"libcudnn_xxx_xxxxx.so","软链接",[220,121021,121023],{"className":118638,"code":121022,"language":118640,"meta":141,"style":141},"# 创建符号链接。对于每个 .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",[30,121024,121025,121030,121046,121060,121074,121088,121102,121116,121130,121135,121141,121146],{"__ignoreMap":141},[228,121026,121027],{"class":230,"line":231},[228,121028,121029],{"class":297},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[228,121031,121032,121034,121037,121040,121043],{"class":230,"line":142},[228,121033,24692],{"class":2077},[228,121035,121036],{"class":343}," ln",[228,121038,121039],{"class":287}," -sf",[228,121041,121042],{"class":343}," libcudnn_cnn_train.so.8.9.7",[228,121044,121045],{"class":343}," libcudnn_cnn_train.so.8\n",[228,121047,121048,121050,121052,121054,121057],{"class":230,"line":1293},[228,121049,24692],{"class":2077},[228,121051,121036],{"class":343},[228,121053,121039],{"class":287},[228,121055,121056],{"class":343}," libcudnn_adv_infer.so.8.9.7",[228,121058,121059],{"class":343}," libcudnn_adv_infer.so.8\n",[228,121061,121062,121064,121066,121068,121071],{"class":230,"line":1308},[228,121063,24692],{"class":2077},[228,121065,121036],{"class":343},[228,121067,121039],{"class":287},[228,121069,121070],{"class":343}," libcudnn_adv_train.so.8.9.7",[228,121072,121073],{"class":343}," libcudnn_adv_train.so.8\n",[228,121075,121076,121078,121080,121082,121085],{"class":230,"line":1314},[228,121077,24692],{"class":2077},[228,121079,121036],{"class":343},[228,121081,121039],{"class":287},[228,121083,121084],{"class":343}," libcudnn_cnn_infer.so.8.9.7",[228,121086,121087],{"class":343}," libcudnn_cnn_infer.so.8\n",[228,121089,121090,121092,121094,121096,121099],{"class":230,"line":1328},[228,121091,24692],{"class":2077},[228,121093,121036],{"class":343},[228,121095,121039],{"class":287},[228,121097,121098],{"class":343}," libcudnn.so.8.9.7",[228,121100,121101],{"class":343}," libcudnn.so.8\n",[228,121103,121104,121106,121108,121110,121113],{"class":230,"line":1334},[228,121105,24692],{"class":2077},[228,121107,121036],{"class":343},[228,121109,121039],{"class":287},[228,121111,121112],{"class":343}," libcudnn_ops_infer.so.8.9.7",[228,121114,121115],{"class":343}," libcudnn_ops_infer.so.8\n",[228,121117,121118,121120,121122,121124,121127],{"class":230,"line":1425},[228,121119,24692],{"class":2077},[228,121121,121036],{"class":343},[228,121123,121039],{"class":287},[228,121125,121126],{"class":343}," libcudnn_ops_train.so.8.9.7",[228,121128,121129],{"class":343}," libcudnn_ops_train.so.8\n",[228,121131,121132],{"class":230,"line":1431},[228,121133,121134],{"class":297},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[228,121136,121137,121139],{"class":230,"line":1443},[228,121138,24692],{"class":2077},[228,121140,120925],{"class":343},[228,121142,121143],{"class":230,"line":1726},[228,121144,121145],{"class":297},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[228,121147,121148,121150,121153,121156,121158,121161],{"class":230,"line":1731},[228,121149,26877],{"class":2077},[228,121151,121152],{"class":287}," -l",[228,121154,121155],{"class":343}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[228,121157,693],{"class":287},[228,121159,121160],{"class":343},".so",[228,121162,119363],{"class":287},[200,121164,121166],{"id":121165},"_355-常见问题","3.5.5 常见问题",[183,121168,121169],{},[186,121170,121171],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[220,121173,121175],{"className":118638,"code":121174,"language":118640,"meta":141,"style":141},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[30,121176,121177],{"__ignoreMap":141},[228,121178,121179,121181,121183],{"class":230,"line":231},[228,121180,24692],{"class":2077},[228,121182,118698],{"class":343},[228,121184,121185],{"class":343}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,121187,121188],{},"blacklist-nouveau.conf文件内容如下：",[220,121190,121192],{"className":118638,"code":121191,"language":118640,"meta":141,"style":141},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[30,121193,121194,121202,121209,121221,121231],{"__ignoreMap":141},[228,121195,121196,121199],{"class":230,"line":231},[228,121197,121198],{"class":2077},"blacklist",[228,121200,121201],{"class":343}," nouveau\n",[228,121203,121204,121206],{"class":230,"line":142},[228,121205,121198],{"class":2077},[228,121207,121208],{"class":343}," lbm-nouveau\n",[228,121210,121211,121213,121216,121219],{"class":230,"line":1293},[228,121212,116045],{"class":2077},[228,121214,121215],{"class":343}," nouveau",[228,121217,121218],{"class":343}," modeset=",[228,121220,3199],{"class":287},[228,121222,121223,121226,121228],{"class":230,"line":1308},[228,121224,121225],{"class":287},"alias",[228,121227,121215],{"class":343},[228,121229,121230],{"class":343}," off\n",[228,121232,121233,121235,121238],{"class":230,"line":1314},[228,121234,121225],{"class":287},[228,121236,121237],{"class":343}," lbm-nouveau",[228,121239,121230],{"class":343},[19,121241,121242],{},"接着运行下方命令",[220,121244,121246],{"className":118638,"code":121245,"language":118640,"meta":141,"style":141},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[30,121247,121248,121258,121263],{"__ignoreMap":141},[228,121249,121250,121252,121255],{"class":230,"line":231},[228,121251,24692],{"class":2077},[228,121253,121254],{"class":343}," update-initramfs",[228,121256,121257],{"class":287}," -u\n",[228,121259,121260],{"class":230,"line":142},[228,121261,121262],{"class":2077},"或者\n",[228,121264,121265,121267,121270],{"class":230,"line":1293},[228,121266,24692],{"class":2077},[228,121268,121269],{"class":343}," dracut",[228,121271,121272],{"class":287}," --force\n",[19,121274,121275],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[220,121277,121279],{"className":118638,"code":121278,"language":118640,"meta":141,"style":141},"lsmod | grep nouveau\n",[30,121280,121281],{"__ignoreMap":141},[228,121282,121283,121286,121288,121290],{"class":230,"line":231},[228,121284,121285],{"class":2077},"lsmod",[228,121287,25225],{"class":234},[228,121289,30351],{"class":2077},[228,121291,121201],{"class":343},[183,121293,121294],{"start":142},[186,121295,121296],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[220,121298,121300],{"className":118638,"code":121299,"language":118640,"meta":141,"style":141},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[30,121301,121302],{"__ignoreMap":141},[228,121303,121304,121306,121308],{"class":230,"line":231},[228,121305,24692],{"class":2077},[228,121307,118698],{"class":343},[228,121309,121310],{"class":343}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,121312,121313],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[220,121315,121317],{"className":118638,"code":121316,"language":118640,"meta":141,"style":141},"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",[30,121318,121319,121327,121335,121343,121350,121358,121368,121376],{"__ignoreMap":141},[228,121320,121321,121324],{"class":230,"line":231},[228,121322,121323],{"class":2077},"Section",[228,121325,121326],{"class":343}," \"OutputClass\"\n",[228,121328,121329,121332],{"class":230,"line":142},[228,121330,121331],{"class":2077},"   Identifier",[228,121333,121334],{"class":343}," \"nvidia\"\n",[228,121336,121337,121340],{"class":230,"line":1293},[228,121338,121339],{"class":2077},"   MatchDriver",[228,121341,121342],{"class":343}," \"nvidia-drm\"\n",[228,121344,121345,121348],{"class":230,"line":1308},[228,121346,121347],{"class":2077},"   Driver",[228,121349,121334],{"class":343},[228,121351,121352,121355],{"class":230,"line":1314},[228,121353,121354],{"class":2077},"   Option",[228,121356,121357],{"class":343}," \"AllowEmptyInitialConfiguration\"\n",[228,121359,121360,121362,121365],{"class":230,"line":1328},[228,121361,121354],{"class":2077},[228,121363,121364],{"class":343}," \"PrimaryGPU\"",[228,121366,121367],{"class":343}," \"yes\"\n",[228,121369,121370,121373],{"class":230,"line":1334},[228,121371,121372],{"class":2077},"   ModulePath",[228,121374,121375],{"class":343}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[228,121377,121378],{"class":230,"line":1425},[228,121379,121380],{"class":2077},"EndSection\n",[183,121382,121383],{"start":1293},[186,121384,121385],{},"安装N卡驱动提示错误",[220,121387,121389],{"className":120931,"code":121388,"language":120933,"meta":120934,"style":141},"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",[30,121390,121391],{"__ignoreMap":141},[228,121392,121393],{"class":230,"line":231},[228,121394,121388],{},[183,121396,121397],{},[186,121398,121399],{},"检查当前运行的内核版本：",[19,121401,121402],{},"运行以下命令以查看你当前正在使用的内核版本：",[220,121404,121406],{"className":117411,"code":121405,"language":117413,"meta":141,"style":141},"uname -r\n",[30,121407,121408],{"__ignoreMap":141},[228,121409,121410,121412],{"class":230,"line":231},[228,121411,70319],{"class":2077},[228,121413,121414],{"class":287}," -r\n",[183,121416,121417],{"start":142},[186,121418,121419],{},"安装内核开发文件：",[19,121421,121422,121423,121426],{},"确保你已经安装了与当前内核版本相匹配的 ",[30,121424,121425],{},"kernel-devel"," 包。运行以下命令来安装：",[220,121428,121430],{"className":117411,"code":121429,"language":117413,"meta":141,"style":141},"sudo dnf install kernel-devel-$(uname -r)\n",[30,121431,121432],{"__ignoreMap":141},[228,121433,121434,121436,121438,121440,121443,121445,121447,121449],{"class":230,"line":231},[228,121435,24692],{"class":2077},[228,121437,26431],{"class":343},[228,121439,23949],{"class":343},[228,121441,121442],{"class":343}," kernel-devel-",[228,121444,25215],{"class":238},[228,121446,70319],{"class":2077},[228,121448,119754],{"class":287},[228,121450,245],{"class":238},[19,121452,121453],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[183,121455,121456],{"start":1293},[186,121457,121458],{},"安装内核源代码（如果需要）：",[19,121460,121461],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[220,121463,121465],{"className":117411,"code":121464,"language":117413,"meta":141,"style":141},"sudo dnf install kernel-headers kernel-source\n",[30,121466,121467],{"__ignoreMap":141},[228,121468,121469,121471,121473,121475,121478],{"class":230,"line":231},[228,121470,24692],{"class":2077},[228,121472,26431],{"class":343},[228,121474,23949],{"class":343},[228,121476,121477],{"class":343}," kernel-headers",[228,121479,121480],{"class":343}," kernel-source\n",[183,121482,121483],{"start":1308},[186,121484,121485],{},"检查安装：",[19,121487,121488,121489,121492],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[30,121490,121491],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[220,121494,121496],{"className":117411,"code":121495,"language":117413,"meta":141,"style":141},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[30,121497,121498],{"__ignoreMap":141},[228,121499,121500,121502],{"class":230,"line":231},[228,121501,26877],{"class":2077},[228,121503,121504],{"class":343}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,121506,121507,121508,121511],{},"如果仍然遇到问题，可以通过 ",[30,121509,121510],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[5241,121513,121514],{},"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":141,"searchDepth":142,"depth":142,"links":121516},[121517,121521,121531,121535,121536],{"id":118614,"depth":142,"text":118615,"children":121518},[121519,121520],{"id":118624,"depth":1293,"text":118625},{"id":118634,"depth":1293,"text":118635},{"id":118834,"depth":142,"text":118835,"children":121522},[121523,121524,121525,121526,121527,121528,121529,121530],{"id":118838,"depth":1293,"text":118839},{"id":118908,"depth":1293,"text":118909},{"id":118997,"depth":1293,"text":118998},{"id":119242,"depth":1293,"text":119243},{"id":119312,"depth":1293,"text":119313},{"id":119379,"depth":1293,"text":119380},{"id":119414,"depth":1293,"text":119415},{"id":119469,"depth":1293,"text":119470},{"id":119520,"depth":142,"text":119521,"children":121532},[121533,121534],{"id":119524,"depth":1293,"text":119525},{"id":119604,"depth":1293,"text":119605},{"id":119790,"depth":142,"text":119791},{"id":119963,"depth":142,"text":119964,"children":121537},[121538,121539,121540,121541,121542],{"id":119967,"depth":1293,"text":119968},{"id":120008,"depth":1293,"text":120009},{"id":120295,"depth":1293,"text":120296},{"id":120669,"depth":1293,"text":120670},{"id":121165,"depth":1293,"text":121166},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118606,"description":154},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121549,"title":121550,"body":121551,"description":154,"extension":155,"meta":121891,"navigation":157,"path":121892,"seo":121893,"stem":121894,"__hash__":121895},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121552,"toc":121889},[121553,121556,121561,121564,121810,121815,121818,121854,121857,121886],[10,121554,121550],{"id":121555},"_4-命令教程长期积累",[183,121557,121558],{},[186,121559,121560],{},"大多数命令",[19,121562,121563],{},"常用 Linux 命令速查：",[220,121565,121567],{"className":117411,"code":121566,"language":117413,"meta":141,"style":141},"# 文件与目录\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",[30,121568,121569,121574,121581,121588,121596,121603,121610,121618,121626,121633,121640,121648,121652,121657,121664,121672,121679,121683,121688,121695,121703,121711,121719,121727,121731,121736,121744,121751,121758,121766,121774,121778,121783,121792,121801],{"__ignoreMap":141},[228,121570,121571],{"class":230,"line":231},[228,121572,121573],{"class":297},"# 文件与目录\n",[228,121575,121576,121578],{"class":230,"line":142},[228,121577,26877],{"class":2077},[228,121579,121580],{"class":297},"        # 列出目录内容\n",[228,121582,121583,121585],{"class":230,"line":1293},[228,121584,101391],{"class":287},[228,121586,121587],{"class":297},"        # 切换目录\n",[228,121589,121590,121593],{"class":230,"line":1308},[228,121591,121592],{"class":287},"pwd",[228,121594,121595],{"class":297},"       # 显示当前路径\n",[228,121597,121598,121600],{"class":230,"line":1314},[228,121599,101381],{"class":2077},[228,121601,121602],{"class":297},"     # 创建目录\n",[228,121604,121605,121607],{"class":230,"line":1328},[228,121606,25438],{"class":2077},[228,121608,121609],{"class":297},"        # 删除文件或目录\n",[228,121611,121612,121615],{"class":230,"line":1334},[228,121613,121614],{"class":2077},"cp",[228,121616,121617],{"class":297},"        # 复制文件或目录\n",[228,121619,121620,121623],{"class":230,"line":1425},[228,121621,121622],{"class":2077},"mv",[228,121624,121625],{"class":297},"        # 移动\u002F重命名文件或目录\n",[228,121627,121628,121630],{"class":230,"line":1431},[228,121629,101398],{"class":2077},[228,121631,121632],{"class":297},"     # 创建空文件\n",[228,121634,121635,121637],{"class":230,"line":1443},[228,121636,120880],{"class":2077},[228,121638,121639],{"class":297},"       # 查看文件内容\n",[228,121641,121642,121645],{"class":230,"line":1726},[228,121643,121644],{"class":2077},"head\u002Ftail",[228,121646,121647],{"class":297}," # 查看文件头部\u002F尾部\n",[228,121649,121650],{"class":230,"line":1731},[228,121651,2514],{"emptyLinePlaceholder":157},[228,121653,121654],{"class":230,"line":1737},[228,121655,121656],{"class":297},"# 权限管理\n",[228,121658,121659,121661],{"class":230,"line":1742},[228,121660,24727],{"class":2077},[228,121662,121663],{"class":297},"     # 修改文件权限\n",[228,121665,121666,121669],{"class":230,"line":1756},[228,121667,121668],{"class":2077},"chown",[228,121670,121671],{"class":297},"     # 修改文件所有者\n",[228,121673,121674,121676],{"class":230,"line":1761},[228,121675,24692],{"class":2077},[228,121677,121678],{"class":297},"      # 以管理员身份执行\n",[228,121680,121681],{"class":230,"line":1767},[228,121682,2514],{"emptyLinePlaceholder":157},[228,121684,121685],{"class":230,"line":1788},[228,121686,121687],{"class":297},"# 系统信息\n",[228,121689,121690,121692],{"class":230,"line":1793},[228,121691,70319],{"class":2077},[228,121693,121694],{"class":297},"     # 系统信息\n",[228,121696,121697,121700],{"class":230,"line":1807},[228,121698,121699],{"class":2077},"df",[228,121701,121702],{"class":297},"        # 磁盘使用情况\n",[228,121704,121705,121708],{"class":230,"line":1812},[228,121706,121707],{"class":2077},"free",[228,121709,121710],{"class":297},"      # 内存使用情况\n",[228,121712,121713,121716],{"class":230,"line":1841},[228,121714,121715],{"class":2077},"top\u002Fhtop",[228,121717,121718],{"class":297},"  # 进程监控\n",[228,121720,121721,121724],{"class":230,"line":1846},[228,121722,121723],{"class":2077},"ps",[228,121725,121726],{"class":297},"        # 查看进程\n",[228,121728,121729],{"class":230,"line":1863},[228,121730,2514],{"emptyLinePlaceholder":157},[228,121732,121733],{"class":230,"line":1868},[228,121734,121735],{"class":297},"# 网络\n",[228,121737,121738,121741],{"class":230,"line":1873},[228,121739,121740],{"class":2077},"ping",[228,121742,121743],{"class":297},"      # 测试网络连通性\n",[228,121745,121746,121748],{"class":230,"line":1878},[228,121747,26965],{"class":2077},[228,121749,121750],{"class":297},"      # 发送 HTTP 请求\n",[228,121752,121753,121755],{"class":230,"line":1892},[228,121754,120404],{"class":2077},[228,121756,121757],{"class":297},"      # 下载文件\n",[228,121759,121760,121763],{"class":230,"line":1897},[228,121761,121762],{"class":2077},"ssh",[228,121764,121765],{"class":297},"       # 远程登录\n",[228,121767,121768,121771],{"class":230,"line":2691},[228,121769,121770],{"class":2077},"scp",[228,121772,121773],{"class":297},"       # 远程文件传输\n",[228,121775,121776],{"class":230,"line":2705},[228,121777,2514],{"emptyLinePlaceholder":157},[228,121779,121780],{"class":230,"line":2713},[228,121781,121782],{"class":297},"# 包管理（Debian\u002FUbuntu）\n",[228,121784,121785,121787,121789],{"class":230,"line":2718},[228,121786,117483],{"class":2077},[228,121788,117462],{"class":343},[228,121790,121791],{"class":297},"   # 更新软件源\n",[228,121793,121794,121796,121798],{"class":230,"line":2724},[228,121795,117483],{"class":2077},[228,121797,23949],{"class":343},[228,121799,121800],{"class":297},"  # 安装软件包\n",[228,121802,121803,121805,121807],{"class":230,"line":2730},[228,121804,117483],{"class":2077},[228,121806,26195],{"class":343},[228,121808,121809],{"class":297},"   # 卸载软件包\n",[183,121811,121812],{"start":142},[186,121813,121814],{},"KDE Dolphin 以root打开",[19,121816,121817],{},"kde5",[220,121819,121821],{"className":117411,"code":121820,"language":117413,"meta":141,"style":141},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[30,121822,121823],{"__ignoreMap":141},[228,121824,121825,121828,121831,121834,121836,121838,121841,121844,121846,121849,121851],{"class":230,"line":231},[228,121826,121827],{"class":2077},"pkexec",[228,121829,121830],{"class":343}," env",[228,121832,121833],{"class":343}," DISPLAY=",[228,121835,28259],{"class":238},[228,121837,28317],{"class":343},[228,121839,121840],{"class":238},"$XAUTHORITY ",[228,121842,121843],{"class":343},"KDE_SESSION_VERSION=",[228,121845,557],{"class":287},[228,121847,121848],{"class":343}," KDE_FULL_SESSION=",[228,121850,1476],{"class":287},[228,121852,121853],{"class":343}," dolphin\n",[19,121855,121856],{},"kde6",[220,121858,121860],{"className":117411,"code":121859,"language":117413,"meta":141,"style":141},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[30,121861,121862],{"__ignoreMap":141},[228,121863,121864,121866,121868,121870,121872,121874,121876,121878,121880,121882,121884],{"class":230,"line":231},[228,121865,121827],{"class":2077},[228,121867,121830],{"class":343},[228,121869,121833],{"class":343},[228,121871,28259],{"class":238},[228,121873,28317],{"class":343},[228,121875,121840],{"class":238},[228,121877,121843],{"class":343},[228,121879,582],{"class":287},[228,121881,121848],{"class":343},[228,121883,1476],{"class":287},[228,121885,121853],{"class":343},[5241,121887,121888],{},"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":141,"searchDepth":142,"depth":142,"links":121890},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121550,"description":154},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121897,"title":121898,"body":121899,"description":154,"extension":155,"meta":121913,"navigation":157,"path":121914,"seo":121915,"stem":121916,"__hash__":121917},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121900,"toc":121911},[121901,121904],[10,121902,121898],{"id":121903},"_5-各种环境配置",[19,121905,121906],{},[476,121907,121910],{"href":121908,"rel":121909},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[23980],"电控组环境搭建大全",{"title":141,"searchDepth":142,"depth":142,"links":121912},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121898,"description":154},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121919,"title":121920,"body":121921,"description":154,"extension":155,"meta":122269,"navigation":157,"path":122270,"seo":122271,"stem":122272,"__hash__":122273},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":121922,"toc":122261},[121923,121926,121930,121934,121938,121943,121950,121954,122247,122251,122258],[10,121924,121920],{"id":121925},"_6-拓展功能",[14,121927,121929],{"id":121928},"_61-wine","6.1 Wine",[14,121931,121933],{"id":121932},"_62-android","6.2 Android",[200,121935,121937],{"id":121936},"_621-i卡a卡","6.2.1 I卡、A卡",[183,121939,121940],{},[186,121941,121942],{},"Wayland-Waydroid(体验超级好)",[19,121944,121945,121946],{},"Waydroid 官网与安装指南：",[476,121947,121948],{"href":121948,"rel":121949},"https:\u002F\u002Fwaydro.id\u002F",[23980],[200,121951,121953],{"id":121952},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[183,121955,121956],{},[186,121957,121958,121959,121961,121962,121966,121968,121971,121976,122173],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53831,121960],{},"BlissOS 官网下载：",[476,121963,121964],{"href":121964,"rel":121965},"https:\u002F\u002Fblissos.org\u002F",[23980],[53831,121967],{},[1576,121969],{"alt":141,"src":121970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[183,121972,121973],{"start":1293},[186,121974,121975],{},"比较推荐的配置",[220,121977,121979],{"className":117411,"code":121978,"language":117413,"meta":141,"style":141},"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",[30,121980,121981,121988,121998,122008,122018,122030,122040,122047,122057,122066,122075,122085,122095,122104,122114,122124,122136,122146,122155,122165],{"__ignoreMap":141},[228,121982,121983,121986],{"class":230,"line":231},[228,121984,121985],{"class":2077},"qemu-system-x86_64",[228,121987,24794],{"class":287},[228,121989,121990,121993,121996],{"class":230,"line":142},[228,121991,121992],{"class":287},"        -M",[228,121994,121995],{"class":343}," q35,vmport=off",[228,121997,24794],{"class":287},[228,121999,122000,122003,122006],{"class":230,"line":1293},[228,122001,122002],{"class":287},"        -accel",[228,122004,122005],{"class":343}," kvm",[228,122007,24794],{"class":287},[228,122009,122010,122013,122016],{"class":230,"line":1308},[228,122011,122012],{"class":287},"        -cpu",[228,122014,122015],{"class":343}," qemu64,+sse3,+sse4.2",[228,122017,24794],{"class":287},[228,122019,122020,122023,122026,122028],{"class":230,"line":1314},[228,122021,122022],{"class":287},"        -smp",[228,122024,122025],{"class":343}," 8,cores=",[228,122027,531],{"class":287},[228,122029,24794],{"class":287},[228,122031,122032,122035,122038],{"class":230,"line":1328},[228,122033,122034],{"class":287},"        -m",[228,122036,122037],{"class":343}," 6G",[228,122039,24794],{"class":287},[228,122041,122042,122045],{"class":230,"line":1334},[228,122043,122044],{"class":287},"        -usb",[228,122046,24794],{"class":287},[228,122048,122049,122052,122055],{"class":230,"line":1425},[228,122050,122051],{"class":287},"        -device",[228,122053,122054],{"class":343}," virtio-tablet",[228,122056,24794],{"class":287},[228,122058,122059,122061,122064],{"class":230,"line":1431},[228,122060,122051],{"class":287},[228,122062,122063],{"class":343}," virtio-keyboard",[228,122065,24794],{"class":287},[228,122067,122068,122070,122073],{"class":230,"line":1443},[228,122069,122051],{"class":287},[228,122071,122072],{"class":343}," usb-tablet",[228,122074,24794],{"class":287},[228,122076,122077,122080,122083],{"class":230,"line":1726},[228,122078,122079],{"class":287},"        -bios",[228,122081,122082],{"class":343}," OVMF-pure-efi64.fd",[228,122084,24794],{"class":287},[228,122086,122087,122090,122093],{"class":230,"line":1731},[228,122088,122089],{"class":287},"        -net",[228,122091,122092],{"class":343}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[228,122094,24794],{"class":287},[228,122096,122097,122099,122102],{"class":230,"line":1737},[228,122098,122089],{"class":287},[228,122100,122101],{"class":343}," nic,model=virtio",[228,122103,24794],{"class":287},[228,122105,122106,122109,122112],{"class":230,"line":1742},[228,122107,122108],{"class":287},"        -audio",[228,122110,122111],{"class":343}," sdl,model=hda",[228,122113,24794],{"class":287},[228,122115,122116,122119,122122],{"class":230,"line":1756},[228,122117,122118],{"class":287},"        -display",[228,122120,122121],{"class":343}," sdl,gl=on,show-cursor=on",[228,122123,24794],{"class":287},[228,122125,122126,122128,122131,122134],{"class":230,"line":1761},[228,122127,122051],{"class":287},[228,122129,122130],{"class":343}," virtio-vga-gl,xres=1920,yres=",[228,122132,122133],{"class":287},"1080",[228,122135,24794],{"class":287},[228,122137,122138,122141,122144],{"class":230,"line":1767},[228,122139,122140],{"class":287},"        -drive",[228,122142,122143],{"class":343}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[228,122145,24794],{"class":287},[228,122147,122148,122150,122153],{"class":230,"line":1788},[228,122149,122140],{"class":287},[228,122151,122152],{"class":343}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[228,122154,24794],{"class":287},[228,122156,122157,122160,122163],{"class":230,"line":1793},[228,122158,122159],{"class":287},"        -monitor",[228,122161,122162],{"class":343}," stdio",[228,122164,24794],{"class":287},[228,122166,122167,122170],{"class":230,"line":1807},[228,122168,122169],{"class":287},"        -serial",[228,122171,122172],{"class":343}," none\n",[183,122174,122175],{"start":1314},[186,122176,122177,122178],{},"常用操作：",[183,122179,122180,122183,122239],{},[186,122181,122182],{},"全屏：Ctrl+Alt+F",[186,122184,122185,122186,122191],{},"adb调试",[183,122187,122188],{},[186,122189,122190],{},"使Linux与Android用ADB连接。",[220,122192,122194],{"className":117411,"code":122193,"language":117413,"meta":141,"style":141},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[30,122195,122196,122201,122212,122217,122229,122234],{"__ignoreMap":141},[228,122197,122198],{"class":230,"line":231},[228,122199,122200],{"class":297},"# 连接安卓\n",[228,122202,122203,122206,122209],{"class":230,"line":142},[228,122204,122205],{"class":2077},"adb",[228,122207,122208],{"class":343}," connect",[228,122210,122211],{"class":287}," 127.0.0.1\n",[228,122213,122214],{"class":230,"line":1293},[228,122215,122216],{"class":297},"# 打开shell\n",[228,122218,122219,122221,122223,122226],{"class":230,"line":1308},[228,122220,122205],{"class":2077},[228,122222,26999],{"class":287},[228,122224,122225],{"class":343}," 127.0.0.1:5555",[228,122227,122228],{"class":343}," shell\n",[228,122230,122231],{"class":230,"line":1314},[228,122232,122233],{"class":297},"# 使用root权限\n",[228,122235,122236],{"class":230,"line":1328},[228,122237,122238],{"class":2077},"su\n",[186,122240,122241,122242],{},"中文输入法",[183,122243,122244],{},[186,122245,122246],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,122248,122250],{"id":122249},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,122252,122253,122254],{},"rEFInd 官网与文档：",[476,122255,122256],{"href":122256,"rel":122257},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[23980],[5241,122259,122260],{},"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":141,"searchDepth":142,"depth":142,"links":122262},[122263,122264,122268],{"id":121928,"depth":142,"text":121929},{"id":121932,"depth":142,"text":121933,"children":122265},[122266,122267],{"id":121936,"depth":1293,"text":121937},{"id":121952,"depth":1293,"text":121953},{"id":122249,"depth":142,"text":122250},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121920,"description":154},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122275,"title":122276,"body":122277,"description":154,"extension":155,"meta":125576,"navigation":157,"path":125577,"seo":125578,"stem":125579,"__hash__":125580},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122278,"toc":125550},[122279,122282,122286,122289,122296,122546,122549,122621,122624,122628,122632,122637,122640,122643,122646,122651,122654,122657,122660,122665,122668,122673,122676,122679,122684,122687,122692,122695,122699,122703,122706,122711,122714,122728,122731,122734,122743,122746,122755,122758,122761,122770,122773,122782,122785,122788,122797,122800,122803,122818,122821,122824,122833,122838,122841,122844,122853,122856,122865,122868,122877,122880,122889,122894,122897,122905,122910,122913,122922,122925,122933,122938,122941,122950,122953,122956,122960,122963,122968,122971,122976,122990,122995,123000,123011,123016,123022,123027,123042,123047,123050,123055,123060,123065,123073,123078,123085,123090,123101,123106,123109,123113,123116,123119,123124,123127,123146,123151,123154,123163,123168,123171,123193,123196,123226,123229,123234,123237,123251,123256,123275,123278,123281,123286,123298,123303,123308,123311,123316,123319,123334,123337,123342,123347,123351,123356,123396,123399,123403,123409,123415,123420,123423,123430,123435,123442,123445,123448,123455,123469,123472,123532,123535,123549,123561,123564,123567,123570,123634,123637,123640,123643,123663,123666,123671,123678,123682,123685,123689,123694,123699,123703,123706,123709,123751,123756,123759,123781,123796,123798,123803,123815,123875,123877,123879,123933,123935,123937,123943,123948,123951,123956,123960,123963,124025,124030,124033,124035,124039,124051,124133,124135,124137,124191,124197,124199,124203,124208,124210,124215,124219,124239,124274,124278,124281,124284,124287,124294,124297,124309,124312,124327,124330,124349,124397,124400,124417,124420,124434,124439,124442,124451,124466,124478,124516,124521,124530,124535,124540,124566,124575,124579,124583,124588,124591,124595,124599,124604,124607,124612,124615,124620,124623,124628,124631,124635,124640,124643,124648,124651,124655,124660,124663,124668,124671,124676,124679,124683,124688,124691,124696,124699,124704,124707,124711,124716,124719,124724,124727,124732,124735,124740,124743,124748,124751,124756,124759,124763,124768,124771,124776,124783,124787,124792,124795,124800,124803,124807,124812,124815,124818,124821,124824,124827,124831,124834,124844,124849,124854,124876,124881,124886,124893,124897,124902,124905,124908,124913,124916,124919,124922,124925,124928,124931,124934,124937,124940,124943,124946,124949,124954,124959,124964,124969,124974,124979,124984,124987,124991,124994,124998,125003,125008,125013,125018,125022,125028,125036,125041,125044,125049,125064,125067,125072,125106,125121,125124,125179,125205,125217,125220,125229,125232,125247,125252,125255,125261,125266,125269,125274,125277,125282,125287,125294,125297,125312,125315,125350,125355,125363,125401,125404,125407,125412,125415,125420,125431,125465,125470,125473,125482,125487,125493,125496,125501,125510,125515,125518,125521,125526,125534,125537,125542,125547],[10,122280,122276],{"id":122281},"_7-其他操作",[14,122283,122285],{"id":122284},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,122287,122288],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,122290,122291,122292,122295],{},"进入工控机的硬盘目录，进入",[30,122293,122294],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[220,122297,122301],{"className":122298,"code":122299,"language":122300,"meta":141,"style":141},"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",[30,122302,122303,122311,122322,122329,122336,122348,122355,122367,122378,122389,122396,122403,122410,122422,122434,122441,122453,122465,122472,122484,122496,122508,122519,122526,122537],{"__ignoreMap":141},[228,122304,122305,122308],{"class":230,"line":231},[228,122306,122307],{"class":51415},"network",[228,122309,122310],{"class":238},": \n",[228,122312,122313,122316,122318,122320],{"class":230,"line":142},[228,122314,122315],{"class":51415},"  version",[228,122317,51552],{"class":238},[228,122319,316],{"class":287},[228,122321,2788],{"class":238},[228,122323,122324,122327],{"class":230,"line":1293},[228,122325,122326],{"class":51415},"  wifis",[228,122328,122310],{"class":238},[228,122330,122331,122334],{"class":230,"line":1308},[228,122332,122333],{"class":51415},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[228,122335,122310],{"class":238},[228,122337,122338,122341,122343,122346],{"class":230,"line":1314},[228,122339,122340],{"class":51415},"      renderer",[228,122342,51552],{"class":238},[228,122344,122345],{"class":343},"NetworkManager",[228,122347,2788],{"class":238},[228,122349,122350,122353],{"class":230,"line":1328},[228,122351,122352],{"class":51415},"      match",[228,122354,122310],{"class":238},[228,122356,122357,122360,122362,122365],{"class":230,"line":1334},[228,122358,122359],{"class":51415},"        name",[228,122361,51552],{"class":238},[228,122363,122364],{"class":343},"\"wlan0\"",[228,122366,2788],{"class":238},[228,122368,122369,122372,122374,122376],{"class":230,"line":1425},[228,122370,122371],{"class":51415},"      dhcp4",[228,122373,51552],{"class":238},[228,122375,1476],{"class":287},[228,122377,2788],{"class":238},[228,122379,122380,122383,122385,122387],{"class":230,"line":1431},[228,122381,122382],{"class":51415},"      dhcp6",[228,122384,51552],{"class":238},[228,122386,1476],{"class":287},[228,122388,2788],{"class":238},[228,122390,122391,122394],{"class":230,"line":1443},[228,122392,122393],{"class":51415},"      access-points",[228,122395,122310],{"class":238},[228,122397,122398,122401],{"class":230,"line":1726},[228,122399,122400],{"class":343},"        \"EMIS_Vinci_Robocon_5G\"",[228,122402,122310],{"class":238},[228,122404,122405,122408],{"class":230,"line":1731},[228,122406,122407],{"class":51415},"          auth",[228,122409,122310],{"class":238},[228,122411,122412,122415,122417,122420],{"class":230,"line":1737},[228,122413,122414],{"class":51415},"            key-management",[228,122416,51552],{"class":238},[228,122418,122419],{"class":343},"\"psk\"",[228,122421,2788],{"class":238},[228,122423,122424,122427,122429,122432],{"class":230,"line":1742},[228,122425,122426],{"class":51415},"            password",[228,122428,51552],{"class":238},[228,122430,122431],{"class":343},"\"vinci666\"",[228,122433,2788],{"class":238},[228,122435,122436,122439],{"class":230,"line":1756},[228,122437,122438],{"class":51415},"          networkmanager",[228,122440,122310],{"class":238},[228,122442,122443,122446,122448,122451],{"class":230,"line":1761},[228,122444,122445],{"class":51415},"            uuid",[228,122447,51552],{"class":238},[228,122449,122450],{"class":343},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[228,122452,2788],{"class":238},[228,122454,122455,122458,122460,122463],{"class":230,"line":1767},[228,122456,122457],{"class":51415},"            name",[228,122459,51552],{"class":238},[228,122461,122462],{"class":343},"\"EMIS_Vinci_Robocon_5G\"",[228,122464,2788],{"class":238},[228,122466,122467,122470],{"class":230,"line":1788},[228,122468,122469],{"class":51415},"            passthrough",[228,122471,122310],{"class":238},[228,122473,122474,122477,122479,122482],{"class":230,"line":1793},[228,122475,122476],{"class":51415},"              wifi-security.auth-alg",[228,122478,51552],{"class":238},[228,122480,122481],{"class":343},"\"open\"",[228,122483,2788],{"class":238},[228,122485,122486,122489,122491,122494],{"class":230,"line":1807},[228,122487,122488],{"class":51415},"              ipv6.addr-gen-mode",[228,122490,51552],{"class":238},[228,122492,122493],{"class":343},"\"default\"",[228,122495,2788],{"class":238},[228,122497,122498,122501,122503,122506],{"class":230,"line":1812},[228,122499,122500],{"class":51415},"              ipv6.ip6-privacy",[228,122502,51552],{"class":238},[228,122504,122505],{"class":343},"\"-1\"",[228,122507,2788],{"class":238},[228,122509,122510,122513,122515,122517],{"class":230,"line":1841},[228,122511,122512],{"class":51415},"              proxy._",[228,122514,51552],{"class":238},[228,122516,7767],{"class":343},[228,122518,2788],{"class":238},[228,122520,122521,122524],{"class":230,"line":1846},[228,122522,122523],{"class":51415},"      networkmanager",[228,122525,122310],{"class":238},[228,122527,122528,122531,122533,122535],{"class":230,"line":1863},[228,122529,122530],{"class":51415},"        uuid",[228,122532,51552],{"class":238},[228,122534,122450],{"class":343},[228,122536,2788],{"class":238},[228,122538,122539,122541,122543],{"class":230,"line":1868},[228,122540,122359],{"class":51415},[228,122542,51552],{"class":238},[228,122544,122545],{"class":343},"\"EMIS_Vinci_Robocon_5G\"\n",[19,122547,122548],{},"将其改为新wifi的名和密码：",[220,122550,122552],{"className":122298,"code":122551,"language":122300,"meta":141,"style":141},"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",[30,122553,122554,122560,122569,122575,122582,122591,122599,122605,122611],{"__ignoreMap":141},[228,122555,122556,122558],{"class":230,"line":231},[228,122557,122307],{"class":51415},[228,122559,3853],{"class":238},[228,122561,122562,122564,122566],{"class":230,"line":142},[228,122563,122315],{"class":51415},[228,122565,51552],{"class":238},[228,122567,122568],{"class":287},"2\n",[228,122570,122571,122573],{"class":230,"line":1293},[228,122572,122326],{"class":51415},[228,122574,3853],{"class":238},[228,122576,122577,122580],{"class":230,"line":1308},[228,122578,122579],{"class":51415},"    wlan0",[228,122581,3853],{"class":238},[228,122583,122584,122586,122588],{"class":230,"line":1314},[228,122585,122371],{"class":51415},[228,122587,51552],{"class":238},[228,122589,122590],{"class":287},"true\n",[228,122592,122593,122595,122597],{"class":230,"line":1328},[228,122594,122382],{"class":51415},[228,122596,51552],{"class":238},[228,122598,122590],{"class":287},[228,122600,122601,122603],{"class":230,"line":1334},[228,122602,122393],{"class":51415},[228,122604,3853],{"class":238},[228,122606,122607,122609],{"class":230,"line":1425},[228,122608,122400],{"class":343},[228,122610,3853],{"class":238},[228,122612,122613,122616,122618],{"class":230,"line":1431},[228,122614,122615],{"class":51415},"          password",[228,122617,51552],{"class":238},[228,122619,122620],{"class":343},"\"vinci666\"\n",[19,122622,122623],{},"工控机开机即可连上网。",[14,122625,122627],{"id":122626},"_72-ssh远程开发","7.2 SSH远程开发",[200,122629,122631],{"id":122630},"_721-环境准备","7.2.1 环境准备",[19,122633,122634],{},[388,122635,122636],{},"1.硬件准备",[19,122638,122639],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,122641,122642],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,122644,122645],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,122647,122648],{},[388,122649,122650],{},"2.设置固定IP",[19,122652,122653],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,122655,122656],{},"1.进入设置界面",[19,122658,122659],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,122661,122662],{},[1576,122663],{"alt":141,"src":122664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,122666,122667],{},"2.配置所连接的网络",[19,122669,122670],{},[1576,122671],{"alt":141,"src":122672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,122674,122675],{},"3.设置固定IP",[19,122677,122678],{},"查看当前IP地址。",[19,122680,122681],{},[1576,122682],{"alt":141,"src":122683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,122685,122686],{},"设置固定IP。",[19,122688,122689],{},[1576,122690],{"alt":141,"src":122691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,122693,122694],{},"至此，IP配置完毕。",[200,122696,122698],{"id":122697},"_722-环境搭建","7.2.2 环境搭建",[19,122700,122701],{},[388,122702,25869],{},[19,122704,122705],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,122707,122708],{},[388,122709,122710],{},"实现",[19,122712,122713],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[183,122715,122716,122719,122722,122725],{},[186,122717,122718],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[186,122720,122721],{},"远程主机启动SSH服务；",[186,122723,122724],{},"本地主机登陆远程主机；",[186,122726,122727],{},"实现数据传输。",[19,122729,122730],{},"1.安装SSH客户端与服务端",[19,122732,122733],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[220,122735,122737],{"className":120931,"code":122736,"language":120933,"meta":120934,"style":141}," sudo apt install openssh-server\n",[30,122738,122739],{"__ignoreMap":141},[228,122740,122741],{"class":230,"line":231},[228,122742,122736],{},[19,122744,122745],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[220,122747,122749],{"className":120931,"code":122748,"language":120933,"meta":120934,"style":141},"sudo apt install openssh-client\n",[30,122750,122751],{"__ignoreMap":141},[228,122752,122753],{"class":230,"line":231},[228,122754,122748],{},[19,122756,122757],{},"2.远程主机启动SSH服务",[19,122759,122760],{},"远程主机启动 ssh 服务命令如下：",[220,122762,122764],{"className":120931,"code":122763,"language":120933,"meta":120934,"style":141},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[30,122765,122766],{"__ignoreMap":141},[228,122767,122768],{"class":230,"line":231},[228,122769,122763],{},[19,122771,122772],{},"启动后可使用如下命令查看服务是否正常运行：",[220,122774,122776],{"className":120931,"code":122775,"language":120933,"meta":120934,"style":141},"ps -e | grep ssh\n",[30,122777,122778],{"__ignoreMap":141},[228,122779,122780],{"class":230,"line":231},[228,122781,122775],{},[19,122783,122784],{},"如果启动成功，会包含 sshd 程序。",[19,122786,122787],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[220,122789,122791],{"className":120931,"code":122790,"language":120933,"meta":120934,"style":141},"sudo systemctl enable ssh\n",[30,122792,122793],{"__ignoreMap":141},[228,122794,122795],{"class":230,"line":231},[228,122796,122790],{},[19,122798,122799],{},"3.本地远程登录",[19,122801,122802],{},"登录远程主机可以调用如下命令:",[220,122804,122806],{"className":117411,"code":122805,"language":117413,"meta":141,"style":141},"ssh -X 用户名@ip地址\n",[30,122807,122808],{"__ignoreMap":141},[228,122809,122810,122812,122815],{"class":230,"line":231},[228,122811,121762],{"class":2077},[228,122813,122814],{"class":287}," -X",[228,122816,122817],{"class":343}," 用户名@ip地址\n",[19,122819,122820],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,122822,122823],{},"如果退出，可以调用exit命令：",[220,122825,122827],{"className":120931,"code":122826,"language":120933,"meta":120934,"style":141},"exit\n",[30,122828,122829],{"__ignoreMap":141},[228,122830,122831],{"class":230,"line":231},[228,122832,122826],{},[19,122834,122835],{},[388,122836,122837],{},"4.实现数据传输",[19,122839,122840],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,122842,122843],{},"上传文件指令格式如下：",[220,122845,122847],{"className":120931,"code":122846,"language":120933,"meta":120934,"style":141},"scp 本地文件路径 账号@ip:路径\n",[30,122848,122849],{"__ignoreMap":141},[228,122850,122851],{"class":230,"line":231},[228,122852,122846],{},[19,122854,122855],{},"上传文件夹指令格式如下：",[220,122857,122859],{"className":120931,"code":122858,"language":120933,"meta":120934,"style":141},"scp -r 本地文件夹路径 账号@ip:路径\n",[30,122860,122861],{"__ignoreMap":141},[228,122862,122863],{"class":230,"line":231},[228,122864,122858],{},[19,122866,122867],{},"下载文件指令格式如下：",[220,122869,122871],{"className":120931,"code":122870,"language":120933,"meta":120934,"style":141},"scp 账号@ip:路径 本地文件夹路径\n",[30,122872,122873],{"__ignoreMap":141},[228,122874,122875],{"class":230,"line":231},[228,122876,122870],{},[19,122878,122879],{},"下载文件夹指令格式如下：",[220,122881,122883],{"className":120931,"code":122882,"language":120933,"meta":120934,"style":141},"scp -r 账号@ip:路径 本地文件夹路径\n",[30,122884,122885],{"__ignoreMap":141},[228,122886,122887],{"class":230,"line":231},[228,122888,122882],{},[19,122890,122891],{},[388,122892,122893],{},"优化",[19,122895,122896],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[183,122898,122899,122902],{},[186,122900,122901],{},"本地生成密钥对；",[186,122903,122904],{},"将公钥上传至远程主机。",[19,122906,122907],{},[388,122908,122909],{},"1.生成密钥对",[19,122911,122912],{},"本地客户端生成公私钥：（一路回车默认即可）",[220,122914,122916],{"className":120931,"code":122915,"language":120933,"meta":120934,"style":141},"ssh-keygen\n",[30,122917,122918],{"__ignoreMap":141},[228,122919,122920],{"class":230,"line":231},[228,122921,122915],{},[19,122923,122924],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[183,122926,122927,122930],{},[186,122928,122929],{},"id_rsa （私钥）；",[186,122931,122932],{},"id_rsa.pub (公钥)。",[19,122934,122935],{},[388,122936,122937],{},"2.公钥上传",[19,122939,122940],{},"上传指令如下：",[220,122942,122944],{"className":120931,"code":122943,"language":120933,"meta":120934,"style":141},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[30,122945,122946],{"__ignoreMap":141},[228,122947,122948],{"class":230,"line":231},[228,122949,122943],{},[19,122951,122952],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,122954,122955],{},"以后再远程登录就无需录入密码了。",[200,122957,122959],{"id":122958},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,122961,122962],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,122964,122965],{},[388,122966,122967],{},"1.准备工作",[19,122969,122970],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,122972,122973],{},[388,122974,122975],{},"2.为VScode安装远程开发插件",[19,122977,122978,122979,122982,122983,122986,122987,78],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[30,122980,122981],{},"扩展：商店","的搜索栏输入",[30,122984,122985],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[30,122988,122989],{},"安装",[19,122991,122992],{},[1576,122993],{"alt":141,"src":122994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,122996,122997],{},[388,122998,122999],{},"3.配置远程连接",[19,123001,123002,123003,123006,123007,123010],{},"步骤1：使用快捷键",[30,123004,123005],{},"ctrl + shift + p","打开命令输入窗口，并输入",[30,123008,123009],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,123012,123013],{},[1576,123014],{"alt":141,"src":123015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,123017,123018,123019,78],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[30,123020,123021],{},"Add New SSH Host",[19,123023,123024],{},[1576,123025],{"alt":141,"src":123026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,123028,123029,123030,123033,123034,123037,123038,123041],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[30,123031,123032],{},"ssh +X ubuntu@192.168.43.164","，其中，",[30,123035,123036],{},"ubuntu","需要替换为你的登录用户名，",[30,123039,123040],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,123043,123044],{},[1576,123045],{"alt":141,"src":123046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,123048,123049],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,123051,123052],{},[1576,123053],{"alt":141,"src":123054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,123056,123057],{},[1576,123058],{"alt":141,"src":123059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,123061,123062],{},[388,123063,123064],{},"4.使用",[19,123066,123067,123068,123006,123070,123072],{},"步骤1：继续使用快捷键",[30,123069,123005],{},[30,123071,123009],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,123074,123075],{},[1576,123076],{"alt":141,"src":123077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,123079,123080,123081,123084],{},"或者，也可以点击侧边栏的",[30,123082,123083],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,123086,123087],{},[1576,123088],{"alt":141,"src":123089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,123091,123092,123093,123096,123097,123100],{},"步骤2：选择菜单栏的",[30,123094,123095],{},"文件","下的",[30,123098,123099],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,123102,123103],{},[1576,123104],{"alt":141,"src":123105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,123107,123108],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,123110,123112],{"id":123111},"_73-远程桌面","7.3 远程桌面",[19,123114,123115],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,123117,123118],{},"我们选择使用VNC来看。",[183,123120,123121],{},[186,123122,123123],{},"安装VNC服务器：",[19,123125,123126],{},"这里以TigerVNC为例进行安装：",[220,123128,123130],{"className":117411,"code":123129,"language":117413,"meta":141,"style":141},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[30,123131,123132],{"__ignoreMap":141},[228,123133,123134,123136,123138,123140,123143],{"class":230,"line":231},[228,123135,24692],{"class":2077},[228,123137,117432],{"class":343},[228,123139,23949],{"class":343},[228,123141,123142],{"class":343}," tigervnc-standalone-server",[228,123144,123145],{"class":343}," tigervnc-common\n",[183,123147,123148],{"start":142},[186,123149,123150],{},"设置VNC密码：",[19,123152,123153],{},"为VNC用户设置密码，运行以下命令：",[220,123155,123157],{"className":117411,"code":123156,"language":117413,"meta":141,"style":141},"vncpasswd\n",[30,123158,123159],{"__ignoreMap":141},[228,123160,123161],{"class":230,"line":231},[228,123162,123156],{"class":2077},[183,123164,123165],{"start":1293},[186,123166,123167],{},"配置VNC启动脚本:",[19,123169,123170],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[220,123172,123174],{"className":117411,"code":123173,"language":117413,"meta":141,"style":141},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[30,123175,123176,123185],{"__ignoreMap":141},[228,123177,123178,123180,123182],{"class":230,"line":231},[228,123179,101381],{"class":2077},[228,123181,29331],{"class":287},[228,123183,123184],{"class":343}," ~\u002F.vnc\n",[228,123186,123187,123190],{"class":230,"line":142},[228,123188,123189],{"class":2077},"nano",[228,123191,123192],{"class":343}," ~\u002F.vnc\u002Fxstartup\n",[19,123194,123195],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[220,123197,123199],{"className":117411,"code":123198,"language":117413,"meta":141,"style":141},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[30,123200,123201,123206,123214,123221],{"__ignoreMap":141},[228,123202,123203],{"class":230,"line":231},[228,123204,123205],{"class":297},"#!\u002Fbin\u002Fsh\n",[228,123207,123208,123211],{"class":230,"line":142},[228,123209,123210],{"class":287},"unset",[228,123212,123213],{"class":343}," SESSION_MANAGER\n",[228,123215,123216,123218],{"class":230,"line":1293},[228,123217,123210],{"class":287},[228,123219,123220],{"class":343}," DBUS_SESSION_BUS_ADDRESS\n",[228,123222,123223],{"class":230,"line":1308},[228,123224,123225],{"class":2077},"gnome-session\n",[19,123227,123228],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[183,123230,123231],{"start":1308},[186,123232,123233],{},"给予执行权限：",[19,123235,123236],{},"为xstartup文件设置执行权限：",[220,123238,123240],{"className":117411,"code":123239,"language":117413,"meta":141,"style":141},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[30,123241,123242],{"__ignoreMap":141},[228,123243,123244,123246,123249],{"class":230,"line":231},[228,123245,24727],{"class":2077},[228,123247,123248],{"class":343}," +x",[228,123250,123192],{"class":343},[183,123252,123253],{"start":1314},[186,123254,123255],{},"启动VNC服务器：",[220,123257,123259],{"className":117411,"code":123258,"language":117413,"meta":141,"style":141},"vncserver -geometry 1920x1080 -localhost=0\n",[30,123260,123261],{"__ignoreMap":141},[228,123262,123263,123266,123269,123272],{"class":230,"line":231},[228,123264,123265],{"class":2077},"vncserver",[228,123267,123268],{"class":287}," -geometry",[228,123270,123271],{"class":343}," 1920x1080",[228,123273,123274],{"class":287}," -localhost=0\n",[19,123276,123277],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,123279,123280],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[183,123282,123283],{"start":1328},[186,123284,123285],{},"查看已开启的VNC服务器：",[220,123287,123289],{"className":117411,"code":123288,"language":117413,"meta":141,"style":141},"vncserver -list\n",[30,123290,123291],{"__ignoreMap":141},[228,123292,123293,123295],{"class":230,"line":231},[228,123294,123265],{"class":2077},[228,123296,123297],{"class":287}," -list\n",[19,123299,123300],{},[1576,123301],{"alt":141,"src":123302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[183,123304,123305],{"start":1334},[186,123306,123307],{},"连接到VNC服务器：",[19,123309,123310],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[183,123312,123313],{"start":1425},[186,123314,123315],{},"停止VNC服务器：",[19,123317,123318],{},"如果需要停止VNC服务器，可以使用以下命令：",[220,123320,123322],{"className":117411,"code":123321,"language":117413,"meta":141,"style":141},"vncserver -kill :1\n",[30,123323,123324],{"__ignoreMap":141},[228,123325,123326,123328,123331],{"class":230,"line":231},[228,123327,123265],{"class":2077},[228,123329,123330],{"class":287}," -kill",[228,123332,123333],{"class":343}," :1\n",[19,123335,123336],{},"将:1替换为你实际使用的显示编号。",[19,123338,123339],{},[1576,123340],{"alt":141,"src":123341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,123343,123344],{},[1576,123345],{"alt":141,"src":123346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,123348,123350],{"id":123349},"_74-usb端口设置","7.4 USB端口设置",[19,123352,123353],{},[388,123354,123355],{},"首先先配置好权限",[220,123357,123359],{"className":117411,"code":123358,"language":117413,"meta":141,"style":141},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[30,123360,123361,123366,123379,123386,123391],{"__ignoreMap":141},[228,123362,123363],{"class":230,"line":231},[228,123364,123365],{"class":297},"# 将用户权限提高\n",[228,123367,123368,123370,123372,123374,123377],{"class":230,"line":142},[228,123369,24692],{"class":2077},[228,123371,26690],{"class":343},[228,123373,26693],{"class":287},[228,123375,123376],{"class":343}," dialout",[228,123378,26698],{"class":238},[228,123380,123381,123383],{"class":230,"line":1293},[228,123382,26717],{"class":2077},[228,123384,123385],{"class":343}," dialout\n",[228,123387,123388],{"class":230,"line":1308},[228,123389,123390],{"class":297},"# 查看下面命令是否输出dialout（若输出才正常）\n",[228,123392,123393],{"class":230,"line":1314},[228,123394,123395],{"class":2077},"groups\n",[19,123397,123398],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[200,123400,123402],{"id":123401},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,123404,123405,123408],{},[388,123406,123407],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,123410,123411,123414],{},[388,123412,123413],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,123416,123417],{},[388,123418,123419],{},"流程如下：",[19,123421,123422],{},"（1）.查找设备idVendor和idProduct",[19,123424,123425,123426,123429],{},"接入两个USB设备，在终端调用指令",[30,123427,123428],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,123431,123432],{},[1576,123433],{"alt":141,"src":123434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,123436,123437,123438,123441],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[30,123439,123440],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,123443,123444],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,123446,123447],{},"（2）.编写映射规则",[19,123449,123450,123451,123454],{},"在",[30,123452,123453],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[220,123456,123458],{"className":117411,"code":123457,"language":117413,"meta":141,"style":141},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[30,123459,123460],{"__ignoreMap":141},[228,123461,123462,123464,123466],{"class":230,"line":231},[228,123463,24692],{"class":2077},[228,123465,118698],{"class":343},[228,123467,123468],{"class":343}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,123470,123471],{},"输入如下内容：",[220,123473,123475],{"className":117411,"code":123474,"language":117413,"meta":141,"style":141},"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",[30,123476,123477,123507],{"__ignoreMap":141},[228,123478,123479,123482,123484,123487,123490,123493,123496,123498,123501,123504],{"class":230,"line":231},[228,123480,123481],{"class":238},"KERNEL",[228,123483,284],{"class":234},[228,123485,123486],{"class":343},"=\"ttyUSB*\",",[228,123488,123489],{"class":2077}," ATTRS",[228,123491,123492],{"class":343},"{idVendor}==",[228,123494,123495],{"class":2077},"\"10c4\"",[228,123497,616],{"class":2077},[228,123499,123500],{"class":343}," ATTRS{idProduct}==\"ea60\",",[228,123502,123503],{"class":343}," MODE:=\"0777\",",[228,123505,123506],{"class":343}," SYMLINK+=\"mylidar\"\n",[228,123508,123509,123511,123513,123515,123517,123519,123522,123524,123527,123529],{"class":230,"line":142},[228,123510,123481],{"class":238},[228,123512,284],{"class":234},[228,123514,123486],{"class":343},[228,123516,123489],{"class":2077},[228,123518,123492],{"class":343},[228,123520,123521],{"class":2077},"\"1a86\"",[228,123523,616],{"class":2077},[228,123525,123526],{"class":343}," ATTRS{idProduct}==\"7523\",",[228,123528,123503],{"class":343},[228,123530,123531],{"class":343}," SYMLINK+=\"mycar\"\n",[19,123533,123534],{},"代码解释：",[1245,123536,123537,123540,123543,123546],{},[186,123538,123539],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[186,123541,123542],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[186,123544,123545],{},"SYMLINK是符号连接，即绑定的别名；",[186,123547,123548],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,123550,123551,123552,123555,123558],{},"***小提示：***",[23668,123553,123554],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[30,123556,123557],{},"\u002Fetc\u002Fudev\u002Frule.d",[23668,123559,123560],{},"目录即可。",[19,123562,123563],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,123565,123566],{},"（3）.使规则生效",[19,123568,123569],{},"在终端下输入如下指令：",[220,123571,123573],{"className":117411,"code":123572,"language":117413,"meta":141,"style":141},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[30,123574,123575,123580,123592,123603,123607,123612,123625],{"__ignoreMap":141},[228,123576,123577],{"class":230,"line":231},[228,123578,123579],{"class":297},"# Ubuntu用下方命令\n",[228,123581,123582,123584,123586,123589],{"class":230,"line":142},[228,123583,24692],{"class":2077},[228,123585,120163],{"class":343},[228,123587,123588],{"class":343}," udev",[228,123590,123591],{"class":343}," reload\n",[228,123593,123594,123596,123598,123600],{"class":230,"line":1293},[228,123595,24692],{"class":2077},[228,123597,120163],{"class":343},[228,123599,123588],{"class":343},[228,123601,123602],{"class":343}," restart\n",[228,123604,123605],{"class":230,"line":1308},[228,123606,2514],{"emptyLinePlaceholder":157},[228,123608,123609],{"class":230,"line":1314},[228,123610,123611],{"class":297},"#Fedora用下方命令\n",[228,123613,123614,123616,123619,123622],{"class":230,"line":1328},[228,123615,24692],{"class":2077},[228,123617,123618],{"class":343}," udevadm",[228,123620,123621],{"class":343}," control",[228,123623,123624],{"class":287}," --reload\n",[228,123626,123627,123629,123631],{"class":230,"line":1334},[228,123628,24692],{"class":2077},[228,123630,123618],{"class":343},[228,123632,123633],{"class":343}," trigger\n",[19,123635,123636],{},"再重新插拔设备即可。",[19,123638,123639],{},"（4）.测试",[19,123641,123642],{},"终端下输入如下指令",[220,123644,123646],{"className":117411,"code":123645,"language":117413,"meta":141,"style":141},"ll \u002Fdev | grep ttyUSB\n",[30,123647,123648],{"__ignoreMap":141},[228,123649,123650,123653,123656,123658,123660],{"class":230,"line":231},[228,123651,123652],{"class":2077},"ll",[228,123654,123655],{"class":343}," \u002Fdev",[228,123657,25225],{"class":234},[228,123659,30351],{"class":2077},[228,123661,123662],{"class":343}," ttyUSB\n",[19,123664,123665],{},"运行结果如下：",[19,123667,123668],{},[1576,123669],{"alt":141,"src":123670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,123672,123673,123674,123677],{},"也可以多次插拔USB设备，会发现设备端口",[30,123675,123676],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,123679,123680],{},[388,123681,118079],{},[19,123683,123684],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[200,123686,123688],{"id":123687},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,123690,123691,123693],{},[388,123692,123407],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,123695,123696,123698],{},[388,123697,123413],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,123700,123701],{},[388,123702,123419],{},[19,123704,123705],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,123707,123708],{},"调用如下指令查看第一台雷达的USB信息：",[220,123710,123712],{"className":117411,"code":123711,"language":117413,"meta":141,"style":141},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[30,123713,123714,123734],{"__ignoreMap":141},[228,123715,123716,123719,123721,123724,123727,123729,123731],{"class":230,"line":231},[228,123717,123718],{"class":2077},"udevadm",[228,123720,69936],{"class":343},[228,123722,123723],{"class":287}," --attribute-walk",[228,123725,123726],{"class":287}," --name=\u002Fdev\u002FttyUSB0",[228,123728,25225],{"class":234},[228,123730,30351],{"class":2077},[228,123732,123733],{"class":343}," KERNELS\n",[228,123735,123736,123738,123740,123742,123745,123747,123749],{"class":230,"line":142},[228,123737,123718],{"class":2077},[228,123739,69936],{"class":343},[228,123741,123723],{"class":287},[228,123743,123744],{"class":287}," --name=\u002Fdev\u002FttyACM0",[228,123746,25225],{"class":234},[228,123748,30351],{"class":2077},[228,123750,123733],{"class":343},[19,123752,123753],{},[1576,123754],{"alt":141,"src":123755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,123757,123758],{},"调用如下指令查看第二台雷达的USB信息：",[220,123760,123762],{"className":117411,"code":123761,"language":117413,"meta":141,"style":141},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[30,123763,123764],{"__ignoreMap":141},[228,123765,123766,123768,123770,123772,123775,123777,123779],{"class":230,"line":231},[228,123767,123718],{"class":2077},[228,123769,69936],{"class":343},[228,123771,123723],{"class":287},[228,123773,123774],{"class":287}," --name=\u002Fdev\u002FttyUSB1",[228,123776,25225],{"class":234},[228,123778,30351],{"class":2077},[228,123780,123733],{"class":343},[19,123782,123783,123784,123787,123788,123791,123792,123795],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[30,123785,123786],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[30,123789,123790],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[388,123793,123794],{},"唯一性标识","”。",[19,123797,123447],{},[19,123799,123450,123800,123802],{},[30,123801,123453],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[220,123804,123805],{"className":117411,"code":123457,"language":117413,"meta":141,"style":141},[30,123806,123807],{"__ignoreMap":141},[228,123808,123809,123811,123813],{"class":230,"line":231},[228,123810,24692],{"class":2077},[228,123812,118698],{"class":343},[228,123814,123468],{"class":343},[220,123816,123818],{"className":117411,"code":123817,"language":117413,"meta":141,"style":141},"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",[30,123819,123820,123849],{"__ignoreMap":141},[228,123821,123822,123824,123826,123828,123831,123833,123836,123839,123841,123844,123846],{"class":230,"line":231},[228,123823,123481],{"class":238},[228,123825,284],{"class":234},[228,123827,123486],{"class":343},[228,123829,123830],{"class":238}," KERNELS",[228,123832,284],{"class":234},[228,123834,123835],{"class":343},"=\"1-1.3:1.0\",",[228,123837,123838],{"class":2077}," MODE:",[228,123840,284],{"class":343},[228,123842,123843],{"class":2077},"\"0777\"",[228,123845,616],{"class":2077},[228,123847,123848],{"class":343}," SYMLINK+=\"rplidar_front\"\n",[228,123850,123851,123853,123855,123857,123859,123861,123864,123866,123868,123870,123872],{"class":230,"line":142},[228,123852,123481],{"class":238},[228,123854,284],{"class":234},[228,123856,123486],{"class":343},[228,123858,123830],{"class":238},[228,123860,284],{"class":234},[228,123862,123863],{"class":343},"=\"1-1.4:1.0\",",[228,123865,123838],{"class":2077},[228,123867,284],{"class":343},[228,123869,123843],{"class":2077},[228,123871,616],{"class":2077},[228,123873,123874],{"class":343}," SYMLINK+=\"rplidar_back\"\n",[19,123876,123566],{},[19,123878,123569],{},[220,123880,123881],{"className":117411,"code":123572,"language":117413,"meta":141,"style":141},[30,123882,123883,123887,123897,123907,123911,123915,123925],{"__ignoreMap":141},[228,123884,123885],{"class":230,"line":231},[228,123886,123579],{"class":297},[228,123888,123889,123891,123893,123895],{"class":230,"line":142},[228,123890,24692],{"class":2077},[228,123892,120163],{"class":343},[228,123894,123588],{"class":343},[228,123896,123591],{"class":343},[228,123898,123899,123901,123903,123905],{"class":230,"line":1293},[228,123900,24692],{"class":2077},[228,123902,120163],{"class":343},[228,123904,123588],{"class":343},[228,123906,123602],{"class":343},[228,123908,123909],{"class":230,"line":1308},[228,123910,2514],{"emptyLinePlaceholder":157},[228,123912,123913],{"class":230,"line":1314},[228,123914,123611],{"class":297},[228,123916,123917,123919,123921,123923],{"class":230,"line":1328},[228,123918,24692],{"class":2077},[228,123920,123618],{"class":343},[228,123922,123621],{"class":343},[228,123924,123624],{"class":287},[228,123926,123927,123929,123931],{"class":230,"line":1334},[228,123928,24692],{"class":2077},[228,123930,123618],{"class":343},[228,123932,123633],{"class":343},[19,123934,123636],{},[19,123936,123639],{},[19,123938,123642,123939,123942],{},[30,123940,123941],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,123944,123945],{},[1576,123946],{"alt":141,"src":123947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,123949,123950],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,123952,123953,123955],{},[388,123954,118079],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[200,123957,123959],{"id":123958},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,123961,123962],{},"（1）.查看所连接的主机USB接口的信息",[220,123964,123966],{"className":117411,"code":123965,"language":117413,"meta":141,"style":141},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[30,123967,123968,123998],{"__ignoreMap":141},[228,123969,123970,123972,123974,123977,123979,123981,123983,123985,123988,123991,123993,123996],{"class":230,"line":231},[228,123971,123718],{"class":2077},[228,123973,69936],{"class":343},[228,123975,123976],{"class":287}," -a",[228,123978,29331],{"class":287},[228,123980,28537],{"class":238},[228,123982,123718],{"class":2077},[228,123984,69936],{"class":343},[228,123986,123987],{"class":287}," -q",[228,123989,123990],{"class":343}," path",[228,123992,25231],{"class":287},[228,123994,123995],{"class":343}," \u002Fdev\u002FttyACM0",[228,123997,245],{"class":238},[228,123999,124000,124002,124004,124006,124008,124010,124012,124014,124016,124018,124020,124023],{"class":230,"line":142},[228,124001,123718],{"class":2077},[228,124003,69936],{"class":343},[228,124005,123976],{"class":287},[228,124007,29331],{"class":287},[228,124009,28537],{"class":238},[228,124011,123718],{"class":2077},[228,124013,69936],{"class":343},[228,124015,123987],{"class":287},[228,124017,123990],{"class":343},[228,124019,25231],{"class":287},[228,124021,124022],{"class":343}," \u002Fdev\u002FttyUSB0",[228,124024,245],{"class":238},[19,124026,124027],{},[1576,124028],{"alt":141,"src":124029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,124031,124032],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,124034,123447],{},[19,124036,123450,124037,123802],{},[30,124038,123453],{},[220,124040,124041],{"className":117411,"code":123457,"language":117413,"meta":141,"style":141},[30,124042,124043],{"__ignoreMap":141},[228,124044,124045,124047,124049],{"class":230,"line":231},[228,124046,24692],{"class":2077},[228,124048,118698],{"class":343},[228,124050,123468],{"class":343},[220,124052,124054],{"className":117411,"code":124053,"language":117413,"meta":141,"style":141},"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",[30,124055,124056,124084,124110],{"__ignoreMap":141},[228,124057,124058,124060,124062,124065,124067,124069,124071,124073,124076,124079,124081],{"class":230,"line":231},[228,124059,123481],{"class":238},[228,124061,284],{"class":234},[228,124063,124064],{"class":343},"=\"ttyACM*\",",[228,124066,123489],{"class":2077},[228,124068,123492],{"class":343},[228,124070,123521],{"class":2077},[228,124072,616],{"class":2077},[228,124074,124075],{"class":343}," ATTRS{idProduct}==\"55d4\",",[228,124077,124078],{"class":343}," ATTRS{serial}==\"0001\",",[228,124080,123503],{"class":343},[228,124082,124083],{"class":343}," SYMLINK+=\"ttyACM_MCU\"\n",[228,124085,124086,124088,124090,124092,124094,124096,124098,124100,124102,124105,124107],{"class":230,"line":142},[228,124087,123481],{"class":238},[228,124089,284],{"class":234},[228,124091,124064],{"class":343},[228,124093,123489],{"class":2077},[228,124095,123492],{"class":343},[228,124097,123521],{"class":2077},[228,124099,616],{"class":2077},[228,124101,124075],{"class":343},[228,124103,124104],{"class":343}," ATTRS{serial}==\"0002\",",[228,124106,123503],{"class":343},[228,124108,124109],{"class":343}," SYMLINK+=\"ttyACM_Lidar\"\n",[228,124111,124112,124114,124116,124118,124120,124122,124124,124126,124128,124130],{"class":230,"line":1293},[228,124113,123481],{"class":238},[228,124115,284],{"class":234},[228,124117,123486],{"class":343},[228,124119,123489],{"class":2077},[228,124121,123492],{"class":343},[228,124123,123521],{"class":2077},[228,124125,616],{"class":2077},[228,124127,123526],{"class":343},[228,124129,123503],{"class":343},[228,124131,124132],{"class":343}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,124134,123566],{},[19,124136,123569],{},[220,124138,124139],{"className":117411,"code":123572,"language":117413,"meta":141,"style":141},[30,124140,124141,124145,124155,124165,124169,124173,124183],{"__ignoreMap":141},[228,124142,124143],{"class":230,"line":231},[228,124144,123579],{"class":297},[228,124146,124147,124149,124151,124153],{"class":230,"line":142},[228,124148,24692],{"class":2077},[228,124150,120163],{"class":343},[228,124152,123588],{"class":343},[228,124154,123591],{"class":343},[228,124156,124157,124159,124161,124163],{"class":230,"line":1293},[228,124158,24692],{"class":2077},[228,124160,120163],{"class":343},[228,124162,123588],{"class":343},[228,124164,123602],{"class":343},[228,124166,124167],{"class":230,"line":1308},[228,124168,2514],{"emptyLinePlaceholder":157},[228,124170,124171],{"class":230,"line":1314},[228,124172,123611],{"class":297},[228,124174,124175,124177,124179,124181],{"class":230,"line":1328},[228,124176,24692],{"class":2077},[228,124178,123618],{"class":343},[228,124180,123621],{"class":343},[228,124182,123624],{"class":287},[228,124184,124185,124187,124189],{"class":230,"line":1334},[228,124186,24692],{"class":2077},[228,124188,123618],{"class":343},[228,124190,123633],{"class":343},[19,124192,124193,124194],{},"再重新插拔设备即可，或者 ",[388,124195,124196],{},"直接重启系统。",[19,124198,123639],{},[19,124200,123642,124201,123942],{},[30,124202,123941],{},[19,124204,124205],{},[1576,124206],{"alt":141,"src":124207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,124209,123950],{},[19,124211,124212,124214],{},[388,124213,118079],{}," 一些设备可能没有串口号等。",[200,124216,124218],{"id":124217},"_744-其他注意事项","7.4.4 其他注意事项",[19,124220,124221,124222,124224,124225,124228,124229,18525,124232,124235,124236,124238],{},"并非所有的USB设备端口号都是",[30,124223,123676],{},"的格式，比如Arduino的端口号可能是",[30,124226,124227],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[30,124230,124231],{},"videon",[30,124233,124234],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[30,124237,124231],{},"端口，绑定时需要关联的也是该接口。",[19,124240,124241,124242,124245,124246,124249,124250,124252,124253,124256,124257,124260,124261,124264,124265,124264,124268,124264,124271,78],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[30,124243,124244],{},"KERNEL==\"ttyUSB*\"","修改为",[30,124247,124248],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[30,124251,124244],{},"修改为类似于",[30,124254,124255],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[30,124258,124259],{},"video[0,2,4,6]","表示可以绑定的端口为",[30,124262,124263],{},"video0","或",[30,124266,124267],{},"video2",[30,124269,124270],{},"video4",[30,124272,124273],{},"video6",[14,124275,124277],{"id":124276},"_75-挂载内网网页","7.5 挂载内网网页",[19,124279,124280],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,124282,124283],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,124285,124286],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,124288,124289,124290],{},"Termux 下载地址（F-Droid）：",[476,124291,124292],{"href":124292,"rel":124293},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[23980],[19,124295,124296],{},"首先打开app后，先更新软件缓存：",[220,124298,124300],{"className":117411,"code":124299,"language":117413,"meta":141,"style":141},"pkg update\n",[30,124301,124302],{"__ignoreMap":141},[228,124303,124304,124307],{"class":230,"line":231},[228,124305,124306],{"class":2077},"pkg",[228,124308,26358],{"class":343},[19,124310,124311],{},"然后换源",[220,124313,124315],{"className":117411,"code":124314,"language":117413,"meta":141,"style":141},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[30,124316,124317],{"__ignoreMap":141},[228,124318,124319,124321,124324],{"class":230,"line":231},[228,124320,123189],{"class":2077},[228,124322,124323],{"class":238}," $PREFIX",[228,124325,124326],{"class":343},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,124328,124329],{},"将该文件内容替换为下面：",[220,124331,124333],{"className":117411,"code":124332,"language":117413,"meta":141,"style":141},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[30,124334,124335],{"__ignoreMap":141},[228,124336,124337,124340,124343,124346],{"class":230,"line":231},[228,124338,124339],{"class":2077},"deb",[228,124341,124342],{"class":343}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[228,124344,124345],{"class":343}," stable",[228,124347,124348],{"class":343}," main\n",[1245,124350,124351,124378],{},[186,124352,124353,124354,124356,124357],{},"如果你使用的是",[30,124355,123189],{},"编辑器：",[1245,124358,124359,124366,124372],{},[186,124360,124361,124362,124365],{},"按 ",[30,124363,124364],{},"Ctrl+O"," 保存文件。",[186,124367,124361,124368,124371],{},[30,124369,124370],{},"Enter"," 确认文件名。",[186,124373,124361,124374,124377],{},[30,124375,124376],{},"Ctrl+X"," 退出编辑器。",[186,124379,124353,124380,124356,124383],{},[30,124381,124382],{},"vim",[1245,124384,124385,124391],{},[186,124386,124361,124387,124390],{},[30,124388,124389],{},"Esc"," 退出编辑模式。",[186,124392,124393,124394,124396],{},"输入 ",[30,124395,119336],{}," 保存并退出。",[19,124398,124399],{},"接下来重新更新软件源：",[220,124401,124403],{"className":117411,"code":124402,"language":117413,"meta":141,"style":141},"pkg update && pkg upgrade\n",[30,124404,124405],{"__ignoreMap":141},[228,124406,124407,124409,124411,124413,124415],{"class":230,"line":231},[228,124408,124306],{"class":2077},[228,124410,117462],{"class":343},[228,124412,26306],{"class":238},[228,124414,124306],{"class":2077},[228,124416,117448],{"class":343},[19,124418,124419],{},"安装python：",[220,124421,124423],{"className":117411,"code":124422,"language":117413,"meta":141,"style":141},"pkg install python\n",[30,124424,124425],{"__ignoreMap":141},[228,124426,124427,124429,124431],{"class":230,"line":231},[228,124428,124306],{"class":2077},[228,124430,23949],{"class":343},[228,124432,124433],{"class":343}," python\n",[19,124435,124436,26589],{},[388,124437,124438],{},"通过Termux访问设备存储",[19,124440,124441],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[220,124443,124445],{"className":117411,"code":124444,"language":117413,"meta":141,"style":141},"termux-setup-storage\n",[30,124446,124447],{"__ignoreMap":141},[228,124448,124449],{"class":230,"line":231},[228,124450,124444],{"class":2077},[183,124452,124453],{},[186,124454,124455,26589,124458],{},[388,124456,124457],{},"进入HTML文件所在的目录",[183,124459,124460],{},[186,124461,124462,124463,124465],{},"使用",[30,124464,101391],{},"命令进入HTML文件所在的目录：",[220,124467,124469],{"className":117411,"code":124468,"language":117413,"meta":141,"style":141},"cd ~\u002Fyour_html_folder\n",[30,124470,124471],{"__ignoreMap":141},[228,124472,124473,124475],{"class":230,"line":231},[228,124474,101391],{"class":287},[228,124476,124477],{"class":343}," ~\u002Fyour_html_folder\n",[183,124479,124480],{"start":142},[186,124481,124482,26589,124485,124490,124507],{},[388,124483,124484],{},"启动Python HTTP服务器",[183,124486,124487],{},[186,124488,124489],{},"运行以下命令启动一个简单的HTTP服务器：",[220,124491,124493],{"className":117411,"code":124492,"language":117413,"meta":141,"style":141},"python -m http.server 8000\n",[30,124494,124495],{"__ignoreMap":141},[228,124496,124497,124499,124501,124504],{"class":230,"line":231},[228,124498,30495],{"class":2077},[228,124500,100997],{"class":287},[228,124502,124503],{"class":343}," http.server",[228,124505,124506],{"class":287}," 8000\n",[183,124508,124509],{"start":1293},[186,124510,124511,124512,124515],{},"这会在端口",[30,124513,124514],{},"8000","上启动一个Web服务器。",[1245,124517,124518],{},[186,124519,124520],{},"启动服务器后，Termux会显示日志信息，例如：",[220,124522,124524],{"className":120931,"code":124523,"language":120933,"meta":120934,"style":141},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[30,124525,124526],{"__ignoreMap":141},[228,124527,124528],{"class":230,"line":231},[228,124529,124523],{},[1245,124531,124532],{},[186,124533,124534],{},"这表示服务器已成功启动。",[19,124536,124537],{},[388,124538,124539],{},"在浏览器中访问HTML文件",[183,124541,124542],{},[186,124543,124544,26589,124547,124552],{},[388,124545,124546],{},"在同一设备上访问",[183,124548,124549],{},[186,124550,124551],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[220,124553,124556],{"className":124554,"code":124555,"language":71779,"meta":141,"style":141},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[30,124557,124558],{"__ignoreMap":141},[228,124559,124560,124563],{"class":230,"line":231},[228,124561,124562],{"class":238},"http:",[228,124564,124565],{"class":297},"\u002F\u002Flocalhost:8000\n",[1245,124567,124568],{},[186,124569,124570,124571,124574],{},"如果HTML文件中有",[30,124572,124573],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,124576,124578],{"id":124577},"_76-linux重点知识","7.6 Linux重点知识",[200,124580,124582],{"id":124581},"_761-关于点的说明","7.6.1 关于点的说明",[19,124584,124585],{},[1576,124586],{"alt":141,"src":124587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,124589,124590],{},"一点本目录，两点上目录",[200,124592,124594],{"id":124593},"_762-目录","7.6.2 目录",[22113,124596,124598],{"id":124597},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,124600,124601],{},[388,124602,124603],{},"\u002Fboot:",[19,124605,124606],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,124608,124609],{},[388,124610,124611],{},"\u002Fetc:",[19,124613,124614],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,124616,124617],{},[388,124618,124619],{},"\u002Flib：",[19,124621,124622],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,124624,124625],{},[388,124626,124627],{},"\u002Fsys:",[19,124629,124630],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22113,124632,124634],{"id":124633},"_7622-指令集合","7.6.2.2 指令集合",[19,124636,124637],{},[388,124638,124639],{},"\u002Fbin:",[19,124641,124642],{},"为二进制文件的缩写，存放最经常使用的命令",[19,124644,124645],{},[388,124646,124647],{},"\u002Fsbin:",[19,124649,124650],{},"只有系统管理员才能使用的程序和指令",[22113,124652,124654],{"id":124653},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,124656,124657],{},[388,124658,124659],{},"\u002Fdev:",[19,124661,124662],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,124664,124665],{},[388,124666,124667],{},"\u002Fmedia:",[19,124669,124670],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,124672,124673],{},[388,124674,124675],{},"\u002Fmnt:",[19,124677,124678],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22113,124680,124682],{"id":124681},"_7624-临时文件","7.6.2.4 临时文件",[19,124684,124685],{},[388,124686,124687],{},"\u002Frun:",[19,124689,124690],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,124692,124693],{},[388,124694,124695],{},"\u002Flost+found:",[19,124697,124698],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,124700,124701],{},[388,124702,124703],{},"\u002Ftmp:",[19,124705,124706],{},"这个目录是用来存放一些临时文件的",[22113,124708,124710],{"id":124709},"_7625-账户","7.6.2.5 账户",[19,124712,124713],{},[388,124714,124715],{},"\u002Froot：",[19,124717,124718],{},"系统管理员的用户主目录",[19,124720,124721,26589],{},[388,124722,124723],{},"\u002Fhome",[19,124725,124726],{},"用户的主目录，以用户的账号命名的",[19,124728,124729,26589],{},[388,124730,124731],{},"\u002Fusr",[19,124733,124734],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,124736,124737],{},[388,124738,124739],{},"\u002Fusr\u002Fbin：",[19,124741,124742],{},"系统用户使用的应用程序与指令",[19,124744,124745],{},[388,124746,124747],{},"\u002Fusr\u002Fsbin：",[19,124749,124750],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,124752,124753],{},[388,124754,124755],{},"\u002Fusr\u002Fsrc：",[19,124757,124758],{},"内核源代码默认的放置目录",[22113,124760,124762],{"id":124761},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,124764,124765],{},[388,124766,124767],{},"\u002Fvar：",[19,124769,124770],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,124772,124773],{},[388,124774,124775],{},"\u002Fproc:",[19,124777,124778,124779,124782],{},"管理 ",[388,124780,124781],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22113,124784,124786],{"id":124785},"_7627-扩展用的","7.6.2.7 扩展用的",[19,124788,124789],{},[388,124790,124791],{},"\u002Fopt:",[19,124793,124794],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,124796,124797],{},[388,124798,124799],{},"\u002Fsrv:",[19,124801,124802],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[200,124804,124806],{"id":124805},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,124808,124809],{},[1576,124810],{"alt":141,"src":124811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,124813,124814],{},"windows-->linux:",[19,124816,124817],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,124819,124820],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,124822,124823],{},"linux传输文件到windows",[19,124825,124826],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[200,124828,124830],{"id":124829},"_764-易忘知识","7.6.4 易忘知识",[19,124832,124833],{},"操作系统内核查看",[220,124835,124836],{"className":117411,"code":121405,"language":117413,"meta":141,"style":141},[30,124837,124838],{"__ignoreMap":141},[228,124839,124840,124842],{"class":230,"line":231},[228,124841,70319],{"class":2077},[228,124843,121414],{"class":287},[19,124845,124846],{},[1576,124847],{"alt":141,"src":124848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,124850,124851],{},[1576,124852],{"alt":141,"src":124853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[220,124855,124857],{"className":117411,"code":124856,"language":117413,"meta":141,"style":141},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[30,124858,124859,124871],{"__ignoreMap":141},[228,124860,124861,124863,124866,124869],{"class":230,"line":231},[228,124862,121622],{"class":2077},[228,124864,124865],{"class":343}," mvtest",[228,124867,124868],{"class":343}," mvtest2",[228,124870,2788],{"class":238},[228,124872,124873],{"class":230,"line":142},[228,124874,124875],{"class":2077},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,124877,124878],{},[1576,124879],{"alt":141,"src":124880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,124882,124883],{},[1576,124884],{"alt":141,"src":124885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,124887,124888,124889,124892],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[30,124890,124891],{},"du -a"," 可以快速查看磁盘使用细节。",[200,124894,124896],{"id":124895},"_765-vim","7.6.5 Vim",[19,124898,124899],{},[1576,124900],{"alt":141,"src":124901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,124903,124904],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,124906,124907],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,124909,124910],{},[388,124911,124912],{},"1.命令模式：",[19,124914,124915],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,124917,124918],{},"x 删除当前光标所在处的字符",[19,124920,124921],{},"：切换到底线命令模式，以在最底一行输入命令",[19,124923,124924],{},"a 进行插入模式，在光标下一个位置输入文本",[19,124926,124927],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,124929,124930],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,124932,124933],{},"dd 剪切当前行",[19,124935,124936],{},"yy 复制当前行",[19,124938,124939],{},"p 粘贴剪贴板内容到光标下方",[19,124941,124942],{},"P 粘贴剪贴板内容到光标上方",[19,124944,124945],{},"u 撤销上一次操作",[19,124947,124948],{},"ctrl+r 重做上一次操作",[19,124950,124951,124953],{},[1033,124952],{}," 保存文件",[19,124955,124956,124958],{},[883,124957],{}," 退出Vim编辑器",[19,124960,124961,124963],{},[883,124962],{},"! 强制退出Vim编辑器，不保存修改",[19,124965,124966],{},[388,124967,124968],{},"2.输入模式：",[19,124970,124971],{},[1576,124972],{"alt":141,"src":124973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,124975,124976],{},[388,124977,124978],{},"3.底线命令模式：",[19,124980,124981],{},[1576,124982],{"alt":141,"src":124983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,124985,124986],{},"按下esc可以退出底线命令模式",[200,124988,124990],{"id":124989},"_766-apt","7.6.6 apt",[19,124992,124993],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[200,124995,124997],{"id":124996},"_767-home与root的区别","7.6.7 home与root的区别",[19,124999,125000],{},[1576,125001],{"alt":141,"src":125002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,125004,125005],{},[1576,125006],{"alt":141,"src":125007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,125009,125010],{},[1576,125011],{"alt":141,"src":125012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,125014,125015],{},[1576,125016],{"alt":141,"src":125017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[200,125019,125021],{"id":125020},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,125023,125024],{},[476,125025,125026],{"href":125026,"rel":125027},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[23980],[183,125029,125030,125033],{},[186,125031,125032],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[186,125034,125035],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,125037,125038],{},[1576,125039],{"alt":141,"src":125040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,125042,125043],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,125045,125046],{},[1576,125047],{"alt":141,"src":125048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[220,125050,125052],{"className":120931,"code":125051,"language":120933,"meta":120934,"style":141},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[30,125053,125054,125059],{"__ignoreMap":141},[228,125055,125056],{"class":230,"line":231},[228,125057,125058],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[228,125060,125061],{"class":230,"line":142},[228,125062,125063],{},".\u002Fpycharm.sh\n",[19,125065,125066],{},"3️⃣创建.desktop文件",[19,125068,125069],{},[388,125070,125071],{},"原理：",[1245,125073,125074,125084],{},[186,125075,125076,125077,125083],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[388,125078,125079,125082],{},[30,125080,125081],{},".desktop"," 文件"," 来识别应用。",[186,125085,125086,125088,125089],{},[30,125087,125081],{}," 文件相当于一个“应用注册表”，告诉系统：",[1245,125090,125091,125094,125097,125100,125103],{},[186,125092,125093],{},"应用名字（Name）",[186,125095,125096],{},"图标（Icon）",[186,125098,125099],{},"执行命令（Exec）",[186,125101,125102],{},"分类（Categories）",[186,125104,125105],{},"是否需要终端（Terminal）",[220,125107,125109],{"className":120931,"code":125108,"language":120933,"meta":120934,"style":141},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[30,125110,125111,125116],{"__ignoreMap":141},[228,125112,125113],{"class":230,"line":231},[228,125114,125115],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[228,125117,125118],{"class":230,"line":142},[228,125119,125120],{},"nano pycharm.desktop\n",[19,125122,125123],{},"nano是一个命令行下的编辑器，也可以使用vim",[220,125125,125127],{"className":120931,"code":125126,"language":120933,"meta":120934,"style":141},"[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",[30,125128,125129,125134,125139,125144,125149,125154,125159,125164,125169,125174],{"__ignoreMap":141},[228,125130,125131],{"class":230,"line":231},[228,125132,125133],{},"[Desktop Entry]\n",[228,125135,125136],{"class":230,"line":142},[228,125137,125138],{},"Version=1.0\n",[228,125140,125141],{"class":230,"line":1293},[228,125142,125143],{},"Type=Application\n",[228,125145,125146],{"class":230,"line":1308},[228,125147,125148],{},"Name=PyCharm\n",[228,125150,125151],{"class":230,"line":1314},[228,125152,125153],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[228,125155,125156],{"class":230,"line":1328},[228,125157,125158],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[228,125160,125161],{"class":230,"line":1334},[228,125162,125163],{},"Comment=JetBrains PyCharm IDE\n",[228,125165,125166],{"class":230,"line":1425},[228,125167,125168],{},"Categories=Development;IDE;\n",[228,125170,125171],{"class":230,"line":1431},[228,125172,125173],{},"Terminal=false\n",[228,125175,125176],{"class":230,"line":1443},[228,125177,125178],{},"StartupWMClass=jetbrains-pycharm\n",[1245,125180,125181,125187,125193,125199],{},[186,125182,125183,125186],{},[30,125184,125185],{},"Exec"," → 点击图标时执行的命令",[186,125188,125189,125192],{},[30,125190,125191],{},"Icon"," → 显示在菜单和桌面上的图标",[186,125194,125195,125198],{},[30,125196,125197],{},"Terminal=false"," → 不打开终端",[186,125200,125201,125204],{},[30,125202,125203],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125206,125207,125208],"blockquote",{},[19,125209,125210,125211,125213,125214],{},"可以理解成 ",[30,125212,125081],{}," 文件是 Linux 的 ",[388,125215,125216],{},"快捷方式配置文件",[19,125218,125219],{},"4️⃣设置可执行权限",[220,125221,125223],{"className":120931,"code":125222,"language":120933,"meta":120934,"style":141},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[30,125224,125225],{"__ignoreMap":141},[228,125226,125227],{"class":230,"line":231},[228,125228,125222],{},[19,125230,125231],{},"5️⃣桌面图标启动的话如下：",[220,125233,125235],{"className":120931,"code":125234,"language":120933,"meta":120934,"style":141},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[30,125236,125237,125242],{"__ignoreMap":141},[228,125238,125239],{"class":230,"line":231},[228,125240,125241],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[228,125243,125244],{"class":230,"line":142},[228,125245,125246],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[183,125248,125249],{"start":1293},[186,125250,125251],{},"下载Appimage文件实现软件的安装",[19,125253,125254],{},"1️⃣先下载appimage",[19,125256,125257],{},[476,125258,125259],{"href":125259,"rel":125260},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[23980],[19,125262,125263],{},[1576,125264],{"alt":141,"src":125265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,125267,125268],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,125270,125271],{},[1576,125272],{"alt":141,"src":125273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,125275,125276],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,125278,125279],{},[1576,125280],{"alt":141,"src":125281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,125283,125284],{},[1576,125285],{"alt":141,"src":125286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,125288,125289,125290,125293],{},"3️⃣给他们放在",[30,125291,125292],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,125295,125296],{},"4️⃣给软件执行权限",[220,125298,125300],{"className":120931,"code":125299,"language":120933,"meta":120934,"style":141},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[30,125301,125302,125307],{"__ignoreMap":141},[228,125303,125304],{"class":230,"line":231},[228,125305,125306],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[228,125308,125309],{"class":230,"line":142},[228,125310,125311],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,125313,125314],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[220,125316,125318],{"className":117411,"code":125317,"language":117413,"meta":141,"style":141},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[30,125319,125320,125327,125334,125340],{"__ignoreMap":141},[228,125321,125322,125324],{"class":230,"line":231},[228,125323,101391],{"class":287},[228,125325,125326],{"class":343}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[228,125328,125329,125331],{"class":230,"line":142},[228,125330,101398],{"class":2077},[228,125332,125333],{"class":343}," .\u002Fqqmusic.desktop\n",[228,125335,125336,125338],{"class":230,"line":1293},[228,125337,124382],{"class":2077},[228,125339,125333],{"class":343},[228,125341,125342,125344,125346,125348],{"class":230,"line":1308},[228,125343,24692],{"class":2077},[228,125345,24695],{"class":343},[228,125347,123248],{"class":343},[228,125349,125333],{"class":343},[19,125351,125352,125354],{},[30,125353,101398],{},"：一个 Linux 命令，主要功能是：",[1245,125356,125357,125360],{},[186,125358,125359],{},"如果文件不存在，就创建一个新的空文件",[186,125361,125362],{},"如果文件已存在，就更新该文件的最后修改时间",[220,125364,125366],{"className":120931,"code":125365,"language":120933,"meta":120934,"style":141},"[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",[30,125367,125368,125372,125377,125382,125387,125391,125396],{"__ignoreMap":141},[228,125369,125370],{"class":230,"line":231},[228,125371,125133],{},[228,125373,125374],{"class":230,"line":142},[228,125375,125376],{},"Name=QQ音乐\n",[228,125378,125379],{"class":230,"line":1293},[228,125380,125381],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[228,125383,125384],{"class":230,"line":1308},[228,125385,125386],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[228,125388,125389],{"class":230,"line":1314},[228,125390,125143],{},[228,125392,125393],{"class":230,"line":1328},[228,125394,125395],{},"Categories=Audio;Music;Player;\n",[228,125397,125398],{"class":230,"line":1334},[228,125399,125400],{},"Comment=QQ Music Client for Linux\n",[19,125402,125403],{},"将文件复制进去",[19,125405,125406],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,125408,125409],{},[1576,125410],{"alt":141,"src":125411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,125413,125414],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,125416,125417],{},[1576,125418],{"alt":141,"src":125419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,125421,125422,125423,125426,125427,125430],{},"如果你用的不是KDE，那么也可以直接修改",[30,125424,125425],{},"qqmuic.desktop","：在exec的末尾加上",[30,125428,125429],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[220,125432,125434],{"className":120931,"code":125433,"language":120933,"meta":120934,"style":141},"[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",[30,125435,125436,125440,125444,125449,125453,125457,125461],{"__ignoreMap":141},[228,125437,125438],{"class":230,"line":231},[228,125439,125133],{},[228,125441,125442],{"class":230,"line":142},[228,125443,125376],{},[228,125445,125446],{"class":230,"line":1293},[228,125447,125448],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[228,125450,125451],{"class":230,"line":1308},[228,125452,125386],{},[228,125454,125455],{"class":230,"line":1314},[228,125456,125143],{},[228,125458,125459],{"class":230,"line":1328},[228,125460,125395],{},[228,125462,125463],{"class":230,"line":1334},[228,125464,125400],{},[19,125466,125467],{},[1576,125468],{"alt":141,"src":125469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,125471,125472],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[220,125474,125476],{"className":120931,"code":125475,"language":120933,"meta":120934,"style":141},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[30,125477,125478],{"__ignoreMap":141},[228,125479,125480],{"class":230,"line":231},[228,125481,125475],{},[183,125483,125484],{"start":1308},[186,125485,125486],{},"去Flathub上安装软件",[19,125488,125489],{},[476,125490,125491],{"href":125491,"rel":125492},"https:\u002F\u002Fflathub.org\u002F",[23980],[19,125494,125495],{},"1️⃣去上面的官网搜索软件+下载软件",[19,125497,125498],{},[1576,125499],{"alt":141,"src":125500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[220,125502,125504],{"className":120931,"code":125503,"language":120933,"meta":120934,"style":141},"flatpak install flathub com.obsproject.Studio\n",[30,125505,125506],{"__ignoreMap":141},[228,125507,125508],{"class":230,"line":231},[228,125509,125503],{},[19,125511,125512],{},[1576,125513],{"alt":141,"src":125514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,125516,125517],{},"2️⃣运行软件",[19,125519,125520],{},"a.官方方式：",[19,125522,125523],{},[1576,125524],{"alt":141,"src":125525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[220,125527,125528],{"className":120931,"code":125503,"language":120933,"meta":120934,"style":141},[30,125529,125530],{"__ignoreMap":141},[228,125531,125532],{"class":230,"line":231},[228,125533,125503],{},[19,125535,125536],{},"b.当普通软件运行：",[19,125538,125539],{},[1576,125540],{"alt":141,"src":125541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,125543,125544],{},[1576,125545],{"alt":141,"src":125546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[5241,125548,125549],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":141,"searchDepth":142,"depth":142,"links":125551},[125552,125553,125558,125559,125565,125566],{"id":122284,"depth":142,"text":122285},{"id":122626,"depth":142,"text":122627,"children":125554},[125555,125556,125557],{"id":122630,"depth":1293,"text":122631},{"id":122697,"depth":1293,"text":122698},{"id":122958,"depth":1293,"text":122959},{"id":123111,"depth":142,"text":123112},{"id":123349,"depth":142,"text":123350,"children":125560},[125561,125562,125563,125564],{"id":123401,"depth":1293,"text":123402},{"id":123687,"depth":1293,"text":123688},{"id":123958,"depth":1293,"text":123959},{"id":124217,"depth":1293,"text":124218},{"id":124276,"depth":142,"text":124277},{"id":124577,"depth":142,"text":124578,"children":125567},[125568,125569,125570,125571,125572,125573,125574,125575],{"id":124581,"depth":1293,"text":124582},{"id":124593,"depth":1293,"text":124594},{"id":124805,"depth":1293,"text":124806},{"id":124829,"depth":1293,"text":124830},{"id":124895,"depth":1293,"text":124896},{"id":124989,"depth":1293,"text":124990},{"id":124996,"depth":1293,"text":124997},{"id":125020,"depth":1293,"text":125021},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122276,"description":154},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125582,"title":125583,"body":125584,"description":154,"extension":155,"meta":125588,"navigation":157,"path":125589,"seo":125590,"stem":125591,"__hash__":125592},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125585,"toc":125586},[],{"title":141,"searchDepth":142,"depth":142,"links":125587},[],{"category":30378},"\u002Fwiki\u002F2025-01-27-linux",{"title":125583,"description":154},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125594,"title":125595,"body":125596,"description":125600,"extension":155,"meta":125991,"navigation":157,"path":125992,"seo":125993,"stem":125994,"__hash__":125995},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125597,"toc":125989},[125598,125601,125605,125622,125625,125678,125682,125684,125724,125733,125737,125740,125981,125986],[19,125599,125600],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125602,125604],{"id":125603},"_1ubuntu环境配置","1.Ubuntu环境配置",[183,125606,125607,125610,125613,125616,125619],{},[186,125608,125609],{},"ubuntu环境换源",[186,125611,125612],{},"安装cuda",[186,125614,125615],{},"安装miniconda",[186,125617,125618],{},"安装pytorch",[186,125620,125621],{},"安装genesis",[19,125623,125624],{},"参考链接：",[220,125626,125628],{"className":23937,"code":125627,"language":23939,"meta":141,"style":141},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[30,125629,125630],{"__ignoreMap":141},[228,125631,125632,125635,125638,125641,125643,125646,125649,125651,125654,125657,125659,125662,125665,125667,125670,125673,125675],{"class":230,"line":231},[228,125633,125634],{"class":2077},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[228,125636,125637],{"class":343},"=blogdetail",[228,125639,125640],{"class":238},"&sharetype",[228,125642,284],{"class":234},[228,125644,125645],{"class":343},"blogdetail",[228,125647,125648],{"class":238},"&sharerId",[228,125650,284],{"class":234},[228,125652,125653],{"class":343},"144728092",[228,125655,125656],{"class":238},"&sharerefer",[228,125658,284],{"class":234},[228,125660,125661],{"class":343},"PC",[228,125663,125664],{"class":238},"&sharesource",[228,125666,284],{"class":234},[228,125668,125669],{"class":343},"qq_69379513",[228,125671,125672],{"class":238},"&sharefrom",[228,125674,284],{"class":234},[228,125676,125677],{"class":343},"from_link\n",[10,125679,125681],{"id":125680},"_2genesis-报错issue","2.Genesis 报错issue",[19,125683,125624],{},[220,125685,125686],{"className":23937,"code":125627,"language":23939,"meta":141,"style":141},[30,125687,125688],{"__ignoreMap":141},[228,125689,125690,125692,125694,125696,125698,125700,125702,125704,125706,125708,125710,125712,125714,125716,125718,125720,125722],{"class":230,"line":231},[228,125691,125634],{"class":2077},[228,125693,125637],{"class":343},[228,125695,125640],{"class":238},[228,125697,284],{"class":234},[228,125699,125645],{"class":343},[228,125701,125648],{"class":238},[228,125703,284],{"class":234},[228,125705,125653],{"class":343},[228,125707,125656],{"class":238},[228,125709,284],{"class":234},[228,125711,125661],{"class":343},[228,125713,125664],{"class":238},[228,125715,284],{"class":234},[228,125717,125669],{"class":343},[228,125719,125672],{"class":238},[228,125721,284],{"class":234},[228,125723,125677],{"class":343},[220,125725,125727],{"className":23937,"code":125726,"language":23939,"meta":141,"style":141},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[30,125728,125729],{"__ignoreMap":141},[228,125730,125731],{"class":230,"line":231},[228,125732,125726],{"class":2077},[10,125734,125736],{"id":125735},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,125738,125739],{},"hello_robot.py",[220,125741,125743],{"className":30493,"code":125742,"language":30495,"meta":141,"style":141},"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",[30,125744,125745,125751,125766,125770,125782,125794,125798,125811,125815,125834,125844,125854,125868,125872,125876,125881,125885,125895,125902,125916,125923,125933,125938,125942,125960,125965,125969,125976],{"__ignoreMap":141},[228,125746,125747,125749],{"class":230,"line":231},[228,125748,30507],{"class":234},[228,125750,45420],{"class":238},[228,125752,125753,125756,125759,125761,125763],{"class":230,"line":142},[228,125754,125755],{"class":238},"os.environ[",[228,125757,125758],{"class":343},"'PYOPENGL_PLATFORM'",[228,125760,4557],{"class":238},[228,125762,284],{"class":234},[228,125764,125765],{"class":343}," 'glx'\n",[228,125767,125768],{"class":230,"line":1293},[228,125769,2514],{"emptyLinePlaceholder":157},[228,125771,125772,125774,125777,125779],{"class":230,"line":1308},[228,125773,30507],{"class":234},[228,125775,125776],{"class":238}," genesis ",[228,125778,31498],{"class":234},[228,125780,125781],{"class":238}," gs\n",[228,125783,125784,125786,125789,125791],{"class":230,"line":1314},[228,125785,30852],{"class":234},[228,125787,125788],{"class":238}," pynput ",[228,125790,30507],{"class":234},[228,125792,125793],{"class":238}," keyboard\n",[228,125795,125796],{"class":230,"line":1328},[228,125797,2514],{"emptyLinePlaceholder":157},[228,125799,125800,125803,125806,125808],{"class":230,"line":1334},[228,125801,125802],{"class":238},"gs.init(",[228,125804,125805],{"class":5331},"backend",[228,125807,284],{"class":234},[228,125809,125810],{"class":238},"gs.gpu)\n",[228,125812,125813],{"class":230,"line":1425},[228,125814,2514],{"emptyLinePlaceholder":157},[228,125816,125817,125820,125822,125825,125828,125830,125832],{"class":230,"line":1431},[228,125818,125819],{"class":238},"scene ",[228,125821,284],{"class":234},[228,125823,125824],{"class":238}," gs.Scene(",[228,125826,125827],{"class":5331},"show_viewer",[228,125829,284],{"class":234},[228,125831,31591],{"class":287},[228,125833,245],{"class":238},[228,125835,125836,125839,125841],{"class":230,"line":1443},[228,125837,125838],{"class":238},"plane ",[228,125840,284],{"class":234},[228,125842,125843],{"class":238}," scene.add_entity(gs.morphs.Plane())\n",[228,125845,125846,125849,125851],{"class":230,"line":1726},[228,125847,125848],{"class":238},"franka ",[228,125850,284],{"class":234},[228,125852,125853],{"class":238}," scene.add_entity(\n",[228,125855,125856,125859,125861,125863,125866],{"class":230,"line":1731},[228,125857,125858],{"class":238},"    gs.morphs.MJCF(",[228,125860,45469],{"class":5331},[228,125862,284],{"class":234},[228,125864,125865],{"class":343},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[228,125867,38162],{"class":238},[228,125869,125870],{"class":230,"line":1737},[228,125871,245],{"class":238},[228,125873,125874],{"class":230,"line":1742},[228,125875,2514],{"emptyLinePlaceholder":157},[228,125877,125878],{"class":230,"line":1756},[228,125879,125880],{"class":238},"scene.build()\n",[228,125882,125883],{"class":230,"line":1761},[228,125884,2514],{"emptyLinePlaceholder":157},[228,125886,125887,125889,125892],{"class":230,"line":1767},[228,125888,32062],{"class":234},[228,125890,125891],{"class":2077}," on_press",[228,125893,125894],{"class":238},"(key):\n",[228,125896,125897,125900],{"class":230,"line":1788},[228,125898,125899],{"class":234},"    try",[228,125901,3853],{"class":238},[228,125903,125904,125906,125909,125911,125914],{"class":230,"line":1793},[228,125905,2611],{"class":234},[228,125907,125908],{"class":238}," key.char ",[228,125910,3063],{"class":234},[228,125912,125913],{"class":343}," 'q'",[228,125915,3853],{"class":238},[228,125917,125918,125920],{"class":230,"line":1807},[228,125919,15847],{"class":234},[228,125921,125922],{"class":287}," False\n",[228,125924,125925,125928,125931],{"class":230,"line":1812},[228,125926,125927],{"class":234},"    except",[228,125929,125930],{"class":287}," AttributeError",[228,125932,3853],{"class":238},[228,125934,125935],{"class":230,"line":1841},[228,125936,125937],{"class":234},"        pass\n",[228,125939,125940],{"class":230,"line":1846},[228,125941,2514],{"emptyLinePlaceholder":157},[228,125943,125944,125947,125949,125952,125955,125957],{"class":230,"line":1863},[228,125945,125946],{"class":238},"listener ",[228,125948,284],{"class":234},[228,125950,125951],{"class":238}," keyboard.Listener(",[228,125953,125954],{"class":5331},"on_press",[228,125956,284],{"class":234},[228,125958,125959],{"class":238},"on_press)\n",[228,125961,125962],{"class":230,"line":1868},[228,125963,125964],{"class":238},"listener.start()\n",[228,125966,125967],{"class":230,"line":1873},[228,125968,2514],{"emptyLinePlaceholder":157},[228,125970,125971,125973],{"class":230,"line":1878},[228,125972,108778],{"class":234},[228,125974,125975],{"class":238}," listener.running:\n",[228,125977,125978],{"class":230,"line":1892},[228,125979,125980],{"class":238},"    scene.step()\n",[19,125982,125983],{},[1576,125984],{"alt":141,"src":125985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[5241,125987,125988],{},"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":141,"searchDepth":142,"depth":142,"links":125990},[],{"category":23493},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125595,"description":125600},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":125997,"title":125998,"body":125999,"description":154,"extension":155,"meta":126014,"navigation":157,"path":126015,"seo":126016,"stem":126017,"__hash__":126018},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":126000,"toc":126011},[126001,126004,126008],[10,126002,125998],{"id":126003},"_1-基础知识",[14,126005,126007],{"id":126006},"_11-js的组成","1.1 js的组成",[19,126009,126010],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":141,"searchDepth":142,"depth":142,"links":126012},[126013],{"id":126006,"depth":142,"text":126007},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":125998,"description":154},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":4,"title":5,"body":126020,"description":154,"extension":155,"meta":126108,"navigation":157,"path":158,"seo":126109,"stem":160,"__hash__":161},{"type":7,"value":126021,"toc":126096},[126022,126024,126026,126028,126030,126036,126038,126040,126042,126044,126046,126050,126054,126056,126060,126066,126068,126070,126072,126074,126076,126078,126080,126082,126084,126086,126088,126090,126092,126094],[10,126023,5],{"id":12},[14,126025,17],{"id":16},[19,126027,21],{},[14,126029,25],{"id":24},[19,126031,28,126032,33,126034,37],{},[30,126033,32],{},[30,126035,36],{},[14,126037,41],{"id":40},[19,126039,44],{},[19,126041,47],{},[19,126043,50],{},[14,126045,54],{"id":53},[19,126047,57,126048,61],{},[30,126049,60],{},[19,126051,126052,67],{},[30,126053,66],{},[14,126055,71],{"id":70},[19,126057,74,126058,78],{},[30,126059,77],{},[19,126061,81,126062,85,126064,89],{},[30,126063,84],{},[30,126065,88],{},[14,126067,93],{"id":92},[19,126069,96],{},[14,126071,100],{"id":99},[19,126073,103],{},[14,126075,107],{"id":106},[19,126077,110],{},[14,126079,114],{"id":113},[19,126081,117],{},[14,126083,121],{"id":120},[19,126085,124],{},[19,126087,127],{},[19,126089,130],{},[19,126091,133],{},[19,126093,136],{},[19,126095,139],{},{"title":141,"searchDepth":142,"depth":142,"links":126097},[126098,126099,126100,126101,126102,126103,126104,126105,126106,126107],{"id":16,"depth":142,"text":17},{"id":24,"depth":142,"text":25},{"id":40,"depth":142,"text":41},{"id":53,"depth":142,"text":54},{"id":70,"depth":142,"text":71},{"id":92,"depth":142,"text":93},{"id":99,"depth":142,"text":100},{"id":106,"depth":142,"text":107},{"id":113,"depth":142,"text":114},{"id":120,"depth":142,"text":121},{},{"title":5,"description":154},{"id":126111,"title":126112,"body":126113,"description":154,"extension":155,"meta":126272,"navigation":157,"path":126273,"seo":126274,"stem":126275,"__hash__":126276},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126114,"toc":126264},[126115,126118,126122,126132,126138,126144,126148,126157,126161,126166,126169,126172,126176,126179,126189,126198,126207,126216,126226,126233,126238,126243,126256],[10,126116,126112],{"id":126117},"_3-html文本与容器标签",[14,126119,126121],{"id":126120},"_31-标题标签","3.1 标题标签",[19,126123,126124,126127,126128,126131],{},[30,126125,126126],{},"\u003Ch1>","我是一级标签",[30,126129,126130],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,126133,126134,126127,126136],{},[30,126135,126126],{},[30,126137,126130],{},[19,126139,123450,126140,126143],{},[30,126141,126142],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,126145,126147],{"id":126146},"_32-段落标签","3.2 段落标签",[19,126149,126150,126153,126154],{},[30,126151,126152],{},"\u003Cp>","....",[30,126155,126156],{},"\u003C\u002Fp>",[14,126158,126160],{"id":126159},"_33-换行标签","3.3 换行标签",[19,126162,126163],{},[30,126164,126165],{},"\u003Cbr \u002F>",[19,126167,126168],{},"具有强制换行的作用",[19,126170,126171],{},"单标签",[14,126173,126175],{"id":126174},"_34-文本格式化标签","3.4 文本格式化标签",[19,126177,126178],{},"提供粗体、斜体和下划线等效果",[19,126180,126181,126182,82654,126185,126188],{},"加粗：",[30,126183,126184],{},"\u003Cstrong>...\u003C\u002Fstrong>",[30,126186,126187],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,126190,126191,126192,82654,126195,126188],{},"斜体：",[30,126193,126194],{},"\u003Cem>...\u003C\u002Fem>",[30,126196,126197],{},"\u003Ci>...\u003C\u002Fi>",[19,126199,126200,126201,82654,126204,126188],{},"删除线：",[30,126202,126203],{},"\u003Cdel>...\u003C\u002Fdel>",[30,126205,126206],{},"\u003Cs>...\u003C\u002Fs>",[19,126208,126209,126210,82654,126213,126188],{},"下划线：",[30,126211,126212],{},"\u003Cins>...\u003C\u002Fins>",[30,126214,126215],{},"\u003Cu>...\u003C\u002Fu>",[14,126217,126219,126220,18525,126223,102808],{"id":126218},"_35-div和span标签","3.5 ",[30,126221,126222],{},"\u003Cdiv>",[30,126224,126225],{},"\u003Cspan>",[19,126227,126228,101133,126230,126232],{},[30,126229,126222],{},[30,126231,126225],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,126234,126235],{},[30,126236,126237],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,126239,126240],{},[30,126241,126242],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,126244,126245,126246,126248,126249,126251,126252,126255],{},"两者特点：①",[30,126247,126222],{}," 标签用来布局，但一行通常只放一个 ",[30,126250,126222],{},"。可以理解为一个大盒子，独占一行，在 ",[30,126253,126254],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,126257,77364,126258,126260,126261,126263],{},[30,126259,126225],{}," 标签也可用于布局，一行可以放多个 ",[30,126262,126225],{},"，可理解为小盒子。",{"title":141,"searchDepth":142,"depth":142,"links":126265},[126266,126267,126268,126269,126270],{"id":126120,"depth":142,"text":126121},{"id":126146,"depth":142,"text":126147},{"id":126159,"depth":142,"text":126160},{"id":126174,"depth":142,"text":126175},{"id":126218,"depth":142,"text":126271},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126112,"description":154},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126278,"title":126279,"body":126280,"description":154,"extension":155,"meta":126477,"navigation":157,"path":126478,"seo":126479,"stem":126480,"__hash__":126481},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126281,"toc":126469},[126282,126285,126289,126292,126298,126305,126311,126317,126320,126323,126326,126329,126332,126335,126338,126342,126345,126348,126351,126357,126363,126369,126376,126380,126386,126392,126395,126398,126404,126410,126416,126419,126422,126426,126429,126439,126445,126449,126458,126462,126465],[10,126283,126279],{"id":126284},"_4-html图像与链接",[14,126286,126288],{"id":126287},"_41-图像标签","4.1 图像标签",[19,126290,126291],{},"（1）标签",[19,126293,126294,126297],{},[30,126295,126296],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,126299,126300,126301,126304],{},"src是",[30,126302,126303],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,126306,126307,126308],{},"alt:文本，替换文本。图像不能显示的文字 ",[30,126309,126310],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,126312,126313,126314],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[30,126315,126316],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,126318,126319],{},"width:像素，设置图像的宽度",[19,126321,126322],{},"height:像素，设置图像的高度",[19,126324,126325],{},"border：像素，设置图像的边框粗细",[19,126327,126328],{},"（2）图像标签属性的注意点：",[19,126330,126331],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,126333,126334],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,126336,126337],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,126339,126341],{"id":126340},"_42-路径注意要点","4.2 路径注意要点：",[19,126343,126344],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,126346,126347],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,126349,126350],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,126352,126353,126354],{},"①同一级路径：图像文件位于HTML文件同一级，如",[30,126355,126356],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,126358,126359,126360],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[30,126361,126362],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,126364,126365,126366],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[30,126367,126368],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,126370,126371,126372,489],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[476,126373,126374],{"href":126374,"rel":126375},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[23980],[14,126377,126379],{"id":126378},"_43-超链接标签","4.3 超链接标签",[19,126381,126382,126385],{},[30,126383,126384],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,126387,126388,126389],{},"①语法格式：",[30,126390,126391],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,126393,126394],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,126396,126397],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,126399,126400,126401],{},"③链接分类：外部链接：",[30,126402,126403],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,126405,126406,126407],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[30,126408,126409],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,126411,126412,126413],{},"空链接：如果当时没有确定链接目标时，",[30,126414,126415],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,126417,126418],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,126420,126421],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,126423,126425],{"id":126424},"_44-锚点链接","4.4 锚点链接",[19,126427,126428],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,126430,126431,126432,126435,126436],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[30,126433,126434],{},"\u003Ca href=\"#two\">","第二级",[30,126437,126438],{},"\u003C\u002Fa>",[19,126440,126441,126442],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[30,126443,126444],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,126446,126448],{"id":126447},"_45-注释标签","4.5 注释标签",[19,126450,126451,126454,126455],{},[30,126452,126453],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[30,126456,126457],{},"ctrl+\u002F",[14,126459,126461],{"id":126460},"_46-特殊字符","4.6 特殊字符",[19,126463,126464],{},"可以实现添加多个空格",[1576,126466],{"style":126467,"src":126468},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":141,"searchDepth":142,"depth":142,"links":126470},[126471,126472,126473,126474,126475,126476],{"id":126287,"depth":142,"text":126288},{"id":126340,"depth":142,"text":126341},{"id":126378,"depth":142,"text":126379},{"id":126424,"depth":142,"text":126425},{"id":126447,"depth":142,"text":126448},{"id":126460,"depth":142,"text":126461},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126279,"description":154},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126483,"title":126484,"body":126485,"description":154,"extension":155,"meta":126778,"navigation":157,"path":126779,"seo":126780,"stem":126781,"__hash__":126782},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126486,"toc":126769},[126487,126490,126494,126497,126500,126503,126506,126509,126512,126515,126518,126521,126541,126547,126551,126554,126557,126560,126563,126566,126569,126573,126576,126579,126582,126585,126598,126603,126606,126609,126624,126627,126630,126633,126636,126639,126643,126646,126653,126656,126659,126662,126665,126668,126674,126677,126680,126686,126689,126692,126695,126701,126704,126707,126721,126728,126731,126734,126741,126750,126753,126756,126759,126763,126766],[10,126488,126484],{"id":126489},"_5-html表格列表与表单",[14,126491,126493],{"id":126492},"_51-表格标签","5.1 表格标签",[19,126495,126496],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,126498,126499],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,126501,126502],{},"②表格基本语法：",[1576,126504],{"style":126467,"src":126505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,126507,126508],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[1576,126510],{"style":126467,"src":126511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,126513,126514],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[1576,126516],{"style":126467,"src":126517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,126519,126520],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,126522,126523,126526,126527,126529,126530,126533,126534,126536,126537,126540],{},[30,126524,126525],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[30,126528,126525],{},"内部必须拥有",[30,126531,126532],{},"\u003Ctr>","标签，一般位于第一行，",[30,126535,126525],{},"比",[30,126538,126539],{},"\u003Cth>","范围广",[19,126542,126543,126546],{},[30,126544,126545],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,126548,126550],{"id":126549},"_52-合并单元格","5.2 合并单元格",[19,126552,126553],{},"（1）合并单元格方式：",[19,126555,126556],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,126558,126559],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,126561,126562],{},"（2）目标单元格：",[19,126564,126565],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,126567,126568],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,126570,126572],{"id":126571},"_53-列表标签","5.3 列表标签",[19,126574,126575],{},"（1）分类：无序列表、有序列表、自定义列表",[19,126577,126578],{},"①无序列表：",[1576,126580],{"style":126467,"src":126581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,126583,126584],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,126586,126587,126590,126591,126594,126595,126597],{},[30,126588,126589],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[30,126592,126593],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[30,126596,126589],{},"中输入其他标签或文字是不对的",[19,126599,126600,126602],{},[30,126601,126593],{},"之间相当于一个容器，可以容纳所有元素",[19,126604,126605],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,126607,126608],{},"在css中去除前边的小圆点采用如下代码:",[220,126610,126614],{"className":126611,"code":126612,"language":126613,"meta":141,"style":141},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[30,126615,126616],{"__ignoreMap":141},[228,126617,126618,126621],{"class":230,"line":231},[228,126619,126620],{"class":51415},"list-style",[228,126622,126623],{"class":238},": none;\n",[19,126625,126626],{},"②有序列表：",[1576,126628],{"style":126467,"src":126629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,126631,126632],{},"③自定义列表：",[1576,126634],{"style":126467,"src":126635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[1576,126637],{"style":126467,"src":126638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,126640,126642],{"id":126641},"_54-表单标签","5.4 表单标签",[19,126644,126645],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,126647,126648,126649,126652],{},"（1）表单域：包含单元素的区域，",[30,126650,126651],{},"\u003Cform>","标签可以实现信息的收集和传递。",[1576,126654],{"style":126467,"src":126655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,126657,126658],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,126660,126661],{},"表单元素提交必须有name属性",[19,126663,126664],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,126666,126667],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,126669,77341,126670,126673],{},[30,126671,126672],{},"\u003Cinput>","输入表单元素",[1576,126675],{"style":126467,"src":126676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[1576,126678],{"style":126467,"src":126679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,126681,126682,126683],{},"单选按钮：",[30,126684,126685],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[1576,126687],{"style":126467,"src":126688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,126690,126691],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[1576,126693],{"style":126467,"src":126694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,126696,126697,126700],{},[388,126698,126699],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,126702,126703],{},"②select下拉表单元素：可以节约页面控件",[1576,126705],{"style":126467,"src":126706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,126708,126709,13910,126711,126714,126715,126717,126718,126720],{},[388,126710,268],{},[30,126712,126713],{},"\u003Cselect>","中至少包含一对",[30,126716,102829],{},"；在",[30,126719,102829],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,126722,126723,126724,126727],{},"③",[30,126725,126726],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[1576,126729],{"style":126467,"src":126730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,126732,126733],{},"3行20列",[14,126735,126737,126738,102808],{"id":126736},"_55-lable标签","5.5 ",[30,126739,126740],{},"\u003Clable>",[19,126742,126743,126744,126746,126747,126749],{},"它不是表单标签，但常常与表单标签搭配使用，",[30,126745,126740],{},"标签用于绑定一个表单标签，当点击",[30,126748,126740],{},"标签内的文本",[19,126751,126752],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[1576,126754],{"style":126467,"src":126755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[1576,126757],{"style":126467,"src":126758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,126760,126762],{"id":126761},"_56-实例","5.6 实例",[1576,126764],{"style":126467,"src":126765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[5241,126767,126768],{},"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":141,"searchDepth":142,"depth":142,"links":126770},[126771,126772,126773,126774,126775,126777],{"id":126492,"depth":142,"text":126493},{"id":126549,"depth":142,"text":126550},{"id":126571,"depth":142,"text":126572},{"id":126641,"depth":142,"text":126642},{"id":126736,"depth":142,"text":126776},"5.5 \u003Clable>标签",{"id":126761,"depth":142,"text":126762},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126484,"description":154},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126784,"title":126785,"body":126786,"description":154,"extension":155,"meta":127335,"navigation":157,"path":127336,"seo":127337,"stem":127338,"__hash__":127339},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126787,"toc":127310},[126788,126791,126795,126798,126801,126805,126808,126811,126814,126817,126820,126823,126826,126830,126833,126837,126840,126843,126846,126850,126853,126856,126859,126865,126868,126871,126874,126877,126880,126883,126886,126919,126923,126926,126929,126932,126936,126939,126942,126945,126948,126951,126955,126958,126961,126964,126968,126971,126975,126978,126982,126985,126990,126994,126997,127001,127004,127007,127010,127013,127040,127043,127047,127050,127053,127058,127061,127064,127068,127071,127076,127079,127082,127085,127089,127092,127095,127098,127102,127105,127108,127111,127115,127119,127122,127162,127165,127169,127176,127179,127183,127186,127232,127236,127239,127242,127245,127273,127277,127280,127307],[10,126789,126785],{"id":126790},"_6-css语法与文本样式",[14,126792,126794],{"id":126793},"_61-css语法规范","6.1 css语法规范",[19,126796,126797],{},"由两部分组成，选择器及一条或多条声明",[1576,126799],{"style":126467,"src":126800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,126802,126803],{},[388,126804,268],{},[19,126806,126807],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,126809,126810],{},"②属性与属性值以“键值对”的形式出现",[19,126812,126813],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,126815,126816],{},"④属性和属性值之间用英文“;”分开",[1576,126818],{"style":126467,"src":126819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[1576,126821],{"style":126467,"src":126822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[1576,126824],{"style":126467,"src":126825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,126827,126829],{"id":126828},"_62-css选择器","6.2 css选择器",[19,126831,126832],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[200,126834,126836],{"id":126835},"_621-标签选择器","6.2.1 标签选择器",[19,126838,126839],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,126841,126842],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[1576,126844],{"style":126467,"src":126845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[200,126847,126849],{"id":126848},"_622-类选择器","6.2.2 类选择器",[19,126851,126852],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,126854,126855],{},"②样例",[1576,126857],{"style":126467,"src":126858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,126860,126861,126862,126864],{},"③ ",[388,126863,126699],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,126866,126867],{},"可以理解为给这个标签起了个名字，来表示；",[19,126869,126870],{},"长名称或词组可以使用横线来为选择器命名；",[19,126872,126873],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,126875,126876],{},"命名要有意义；",[1576,126878],{"style":126467,"src":126879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,126881,126882],{},"类选择器也可以指定特殊的元素p.center{}",[19,126884,126885],{},"p.center和.center都对",[220,126887,126889],{"className":126611,"code":126888,"language":126613,"meta":141,"style":141},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[30,126890,126891,126896,126905,126915],{"__ignoreMap":141},[228,126892,126893],{"class":230,"line":231},[228,126894,126895],{"class":297},"\u002F* 类选择器指定特殊元素 *\u002F\n",[228,126897,126898,126900,126903],{"class":230,"line":142},[228,126899,19],{"class":51415},[228,126901,126902],{"class":2077},".center",[228,126904,15687],{"class":238},[228,126906,126907,126909,126911,126913],{"class":230,"line":1293},[228,126908,70641],{"class":287},[228,126910,51552],{"class":238},[228,126912,51707],{"class":287},[228,126914,1404],{"class":238},[228,126916,126917],{"class":230,"line":1308},[228,126918,1679],{"class":238},[200,126920,126922],{"id":126921},"_623-多类名使用","6.2.3 多类名使用",[19,126924,126925],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[1576,126927],{"style":126467,"src":126928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,126930,126931],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[200,126933,126935],{"id":126934},"_624-id选择器","6.2.4 id选择器",[19,126937,126938],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,126940,126941],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[1576,126943],{"style":126467,"src":126944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,126946,126947],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,126949,126950],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[200,126952,126954],{"id":126953},"_625-通配符选择器","6.2.5 通配符选择器",[19,126956,126957],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,126959,126960],{},"* {",[19,126962,126963],{},"color=\"red\"}",[200,126965,126967],{"id":126966},"_626-总结","6.2.6 总结",[1576,126969],{"style":126467,"src":126970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,126972,126974],{"id":126973},"_63-css字体属性","6.3 css字体属性",[19,126976,126977],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[200,126979,126981],{"id":126980},"_631-字体系列","6.3.1 字体系列",[19,126983,126984],{},"font-family: '宋体';",[19,126986,126987,126989],{},[388,126988,268],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[200,126991,126993],{"id":126992},"_632-字体大小","6.3.2 字体大小",[19,126995,126996],{},"font-size: 20px",[19,126998,126999,26589],{},[388,127000,126699],{},[19,127002,127003],{},"①px（像素）大小是网页的最常用单位",[19,127005,127006],{},"②谷歌浏览器默认为16px",[19,127008,127009],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,127011,127012],{},"④可以给body指定整个页面的大小：会自动引用",[220,127014,127016],{"className":126611,"code":127015,"language":126613,"meta":141,"style":141},"body {\n  font-size: 16px;\n}\n",[30,127017,127018,127024,127036],{"__ignoreMap":141},[228,127019,127020,127022],{"class":230,"line":231},[228,127021,51915],{"class":51415},[228,127023,15687],{"class":238},[228,127025,127026,127028,127030,127032,127034],{"class":230,"line":142},[228,127027,70741],{"class":287},[228,127029,51552],{"class":238},[228,127031,839],{"class":287},[228,127033,51607],{"class":234},[228,127035,1404],{"class":238},[228,127037,127038],{"class":230,"line":1293},[228,127039,1679],{"class":238},[19,127041,127042],{},"⑤标题标签比较特殊，需要单独指定大小",[200,127044,127046],{"id":127045},"_633-字体粗细","6.3.3 字体粗细",[19,127048,127049],{},"font-weight: bold;",[19,127051,127052],{},"font-weight: 100；",[19,127054,127055,127057],{},[388,127056,268],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,127059,127060],{},"font-weight= 400;",[19,127062,127063],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[200,127065,127067],{"id":127066},"_634-文字样式","6.3.4 文字样式",[19,127069,127070],{},"font-style: normal；",[19,127072,127073,26589],{},[388,127074,127075],{},"属性值",[19,127077,127078],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,127080,127081],{},"②italic：浏览器会显示斜体的字体样式",[1576,127083],{"style":126467,"src":127084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[200,127086,127088],{"id":127087},"_635-字体符合属性","6.3.5 字体符合属性",[1576,127090],{"style":126467,"src":127091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[1576,127093],{"style":126467,"src":127094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,127096,127097],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,127099,127100,26589],{},[388,127101,126699],{},[19,127103,127104],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,127106,127107],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,127109,127110],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,127112,127114],{"id":127113},"_64-css-test文本属性","6.4 css test文本属性",[200,127116,127118],{"id":127117},"_641-文本颜色","6.4.1 文本颜色",[19,127120,127121],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[220,127123,127125],{"className":126611,"code":127124,"language":126613,"meta":141,"style":141},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[30,127126,127127,127132,127138,127148,127153,127158],{"__ignoreMap":141},[228,127128,127129],{"class":230,"line":231},[228,127130,127131],{"class":297},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[228,127133,127134,127136],{"class":230,"line":142},[228,127135,19],{"class":51415},[228,127137,15687],{"class":238},[228,127139,127140,127142,127144,127146],{"class":230,"line":1293},[228,127141,71020],{"class":287},[228,127143,51552],{"class":238},[228,127145,57536],{"class":287},[228,127147,1404],{"class":238},[228,127149,127150],{"class":230,"line":1308},[228,127151,127152],{"class":297},"  \u002F* color: #ff0000; *\u002F\n",[228,127154,127155],{"class":230,"line":1314},[228,127156,127157],{"class":297},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[228,127159,127160],{"class":230,"line":1328},[228,127161,1679],{"class":238},[1576,127163],{"style":126467,"src":127164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[200,127166,127168],{"id":127167},"_642-对齐文本","6.4.2 对齐文本",[19,127170,127171,127172,127175],{},"text-align属于用于设置元素内文本内容的 ",[388,127173,127174],{},"水平对齐"," 方式",[19,127177,127178],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[200,127180,127182],{"id":127181},"_643-装饰文本","6.4.3 装饰文本",[19,127184,127185],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[220,127187,127189],{"className":126611,"code":127188,"language":126613,"meta":141,"style":141},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[30,127190,127191,127197,127207,127211,127217,127228],{"__ignoreMap":141},[228,127192,127193,127195],{"class":230,"line":231},[228,127194,476],{"class":51415},[228,127196,15687],{"class":238},[228,127198,127199,127201,127203,127205],{"class":230,"line":142},[228,127200,70617],{"class":287},[228,127202,51552],{"class":238},[228,127204,54852],{"class":287},[228,127206,1404],{"class":238},[228,127208,127209],{"class":230,"line":1293},[228,127210,1679],{"class":238},[228,127212,127213,127215],{"class":230,"line":1308},[228,127214,19],{"class":51415},[228,127216,15687],{"class":238},[228,127218,127219,127221,127223,127226],{"class":230,"line":1314},[228,127220,70617],{"class":287},[228,127222,51552],{"class":238},[228,127224,127225],{"class":287},"underline",[228,127227,1404],{"class":238},[228,127229,127230],{"class":230,"line":1328},[228,127231,1679],{"class":238},[200,127233,127235],{"id":127234},"_644-文本缩进","6.4.4 文本缩进",[19,127237,127238],{},"实现文本的第一行首行缩进自己指定的距离",[19,127240,127241],{},"20px往右边走；-20px往左边走",[19,127243,127244],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[220,127246,127248],{"className":126611,"code":127247,"language":126613,"meta":141,"style":141},"p {\n  text-indent: 2em;\n}\n",[30,127249,127250,127256,127269],{"__ignoreMap":141},[228,127251,127252,127254],{"class":230,"line":231},[228,127253,19],{"class":51415},[228,127255,15687],{"class":238},[228,127257,127258,127261,127263,127265,127267],{"class":230,"line":142},[228,127259,127260],{"class":287},"  text-indent",[228,127262,51552],{"class":238},[228,127264,316],{"class":287},[228,127266,23668],{"class":234},[228,127268,1404],{"class":238},[228,127270,127271],{"class":230,"line":1293},[228,127272,1679],{"class":238},[200,127274,127276],{"id":127275},"_645-行间距","6.4.5 行间距",[19,127278,127279],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[220,127281,127283],{"className":126611,"code":127282,"language":126613,"meta":141,"style":141},"p {\n  line-height: 1.6;\n}\n",[30,127284,127285,127291,127303],{"__ignoreMap":141},[228,127286,127287,127289],{"class":230,"line":231},[228,127288,19],{"class":51415},[228,127290,15687],{"class":238},[228,127292,127293,127296,127298,127301],{"class":230,"line":142},[228,127294,127295],{"class":287},"  line-height",[228,127297,51552],{"class":238},[228,127299,127300],{"class":287},"1.6",[228,127302,1404],{"class":238},[228,127304,127305],{"class":230,"line":1293},[228,127306,1679],{"class":238},[5241,127308,127309],{},"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":141,"searchDepth":142,"depth":142,"links":127311},[127312,127313,127321,127328],{"id":126793,"depth":142,"text":126794},{"id":126828,"depth":142,"text":126829,"children":127314},[127315,127316,127317,127318,127319,127320],{"id":126835,"depth":1293,"text":126836},{"id":126848,"depth":1293,"text":126849},{"id":126921,"depth":1293,"text":126922},{"id":126934,"depth":1293,"text":126935},{"id":126953,"depth":1293,"text":126954},{"id":126966,"depth":1293,"text":126967},{"id":126973,"depth":142,"text":126974,"children":127322},[127323,127324,127325,127326,127327],{"id":126980,"depth":1293,"text":126981},{"id":126992,"depth":1293,"text":126993},{"id":127045,"depth":1293,"text":127046},{"id":127066,"depth":1293,"text":127067},{"id":127087,"depth":1293,"text":127088},{"id":127113,"depth":142,"text":127114,"children":127329},[127330,127331,127332,127333,127334],{"id":127117,"depth":1293,"text":127118},{"id":127167,"depth":1293,"text":127168},{"id":127181,"depth":1293,"text":127182},{"id":127234,"depth":1293,"text":127235},{"id":127275,"depth":1293,"text":127276},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126785,"description":154},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127341,"title":127342,"body":127343,"description":154,"extension":155,"meta":127992,"navigation":157,"path":127993,"seo":127994,"stem":127995,"__hash__":127996},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127344,"toc":127973},[127345,127348,127352,127356,127416,127420,127430,127433,127436,127440,127465,127469,127472,127475,127478,127481,127484,127488,127491,127494,127536,127539,127565,127571,127574,127578,127582,127588,127591,127594,127597,127600,127603,127606,127651,127655,127658,127661,127665,127669,127698,127701,127706,127709,127712,127715,127718,127722,127726,127729,127731,127734,127738,127741,127745,127748,127751,127754,127758,127762,127768,127778,127781,127784,127787,127790,127793,127916,127924,127932,127970],[10,127346,127342],{"id":127347},"_7-css引入方式与选择器进阶",[14,127349,127351],{"id":127350},"_71-css引入方式","7.1 css引入方式",[200,127353,127355],{"id":127354},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[220,127357,127361],{"className":127358,"code":127359,"language":127360,"meta":141,"style":141},"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",[30,127362,127363,127371,127378,127390,127403,127408],{"__ignoreMap":141},[228,127364,127365,127367,127369],{"class":230,"line":231},[228,127366,1148],{"class":238},[228,127368,5241],{"class":51415},[228,127370,51422],{"class":238},[228,127372,127373,127376],{"class":230,"line":142},[228,127374,127375],{"class":51415},"  h1",[228,127377,15687],{"class":238},[228,127379,127380,127383,127385,127388],{"class":230,"line":1293},[228,127381,127382],{"class":287},"    color",[228,127384,51552],{"class":238},[228,127386,127387],{"class":287},"blue",[228,127389,1404],{"class":238},[228,127391,127392,127395,127397,127399,127401],{"class":230,"line":1308},[228,127393,127394],{"class":287},"    font-size",[228,127396,51552],{"class":238},[228,127398,1038],{"class":287},[228,127400,51607],{"class":234},[228,127402,1404],{"class":238},[228,127404,127405],{"class":230,"line":1314},[228,127406,127407],{"class":238},"  }\n",[228,127409,127410,127412,127414],{"class":230,"line":1328},[228,127411,51900],{"class":238},[228,127413,5241],{"class":51415},[228,127415,51422],{"class":238},[19,127417,127418,26589],{},[388,127419,126699],{},[19,127421,77341,127422,127425,127426,127429],{},[30,127423,127424],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[30,127427,127428],{},"\u003Chead>","标签中",[19,127431,127432],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,127434,127435],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[200,127437,127439],{"id":127438},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[220,127441,127443],{"className":127358,"code":127442,"language":127360,"meta":141,"style":141},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[30,127444,127445],{"__ignoreMap":141},[228,127446,127447,127449,127451,127453,127455,127458,127461,127463],{"class":230,"line":231},[228,127448,1148],{"class":238},[228,127450,19],{"class":51415},[228,127452,62741],{"class":2077},[228,127454,284],{"class":238},[228,127456,127457],{"class":343},"\"color: red; font-size: 16px;\"",[228,127459,127460],{"class":238},">这是一个段落\u003C\u002F",[228,127462,19],{"class":51415},[228,127464,51422],{"class":238},[19,127466,127467,26589],{},[388,127468,126699],{},[19,127470,127471],{},"①style其实就是标签的属性",[19,127473,127474],{},"②在双引号中间，写法要符合css规范",[19,127476,127477],{},"③可以控制当前的标签设置样式",[19,127479,127480],{},"④书写繁琐，简单时才用",[19,127482,127483],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[200,127485,127487],{"id":127486},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,127489,127490],{},"使用最多，单独建一个css文件，然后html引用",[19,127492,127493],{},"①css文件部分： style.css",[220,127495,127497],{"className":126611,"code":127496,"language":126613,"meta":141,"style":141},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[30,127498,127499,127504,127510,127520,127532],{"__ignoreMap":141},[228,127500,127501],{"class":230,"line":231},[228,127502,127503],{"class":297},"\u002F* style.css *\u002F\n",[228,127505,127506,127508],{"class":230,"line":142},[228,127507,10],{"class":51415},[228,127509,15687],{"class":238},[228,127511,127512,127514,127516,127518],{"class":230,"line":1293},[228,127513,71020],{"class":287},[228,127515,51552],{"class":238},[228,127517,127387],{"class":287},[228,127519,1404],{"class":238},[228,127521,127522,127524,127526,127528,127530],{"class":230,"line":1308},[228,127523,70741],{"class":287},[228,127525,51552],{"class":238},[228,127527,1038],{"class":287},[228,127529,51607],{"class":234},[228,127531,1404],{"class":238},[228,127533,127534],{"class":230,"line":1314},[228,127535,1679],{"class":238},[19,127537,127538],{},"②html部分",[220,127540,127542],{"className":127358,"code":127541,"language":127360,"meta":141,"style":141},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[30,127543,127544],{"__ignoreMap":141},[228,127545,127546,127548,127550,127552,127554,127556,127558,127560,127563],{"class":230,"line":231},[228,127547,1148],{"class":238},[228,127549,69120],{"class":51415},[228,127551,69123],{"class":2077},[228,127553,284],{"class":238},[228,127555,69128],{"class":343},[228,127557,61172],{"class":2077},[228,127559,284],{"class":238},[228,127561,127562],{"class":343},"\"style.css\"",[228,127564,51422],{"class":238},[19,127566,127567,127570],{},[30,127568,127569],{},"\u003Chr>","水平线标签（但是不常用！）",[19,127572,127573],{},"ctrl+0回到页面原来大小",[14,127575,127577],{"id":127576},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[200,127579,127581],{"id":127580},"_721-快速生成html","7.2.1 快速生成html",[19,127583,127584,127585],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[30,127586,127587],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,127589,127590],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,127592,127593],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,127595,127596],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,127598,127599],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,127601,127602],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,127604,127605],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[220,127607,127609],{"className":127358,"code":127608,"language":127360,"meta":141,"style":141},"\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",[30,127610,127611,127616,127621,127626,127631,127636,127641,127646],{"__ignoreMap":141},[228,127612,127613],{"class":230,"line":231},[228,127614,127615],{"class":297},"\u003C!-- Emmet 语法示例 -->\n",[228,127617,127618],{"class":230,"line":142},[228,127619,127620],{"class":297},"\u003C!-- div*3        → 生成3个div -->\n",[228,127622,127623],{"class":230,"line":1293},[228,127624,127625],{"class":297},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[228,127627,127628],{"class":230,"line":1308},[228,127629,127630],{"class":297},"\u003C!-- div+p        → 兄弟div和p -->\n",[228,127632,127633],{"class":230,"line":1314},[228,127634,127635],{"class":297},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[228,127637,127638],{"class":230,"line":1328},[228,127639,127640],{"class":297},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[228,127642,127643],{"class":230,"line":1334},[228,127644,127645],{"class":297},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[228,127647,127648],{"class":230,"line":1425},[228,127649,127650],{"class":297},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[200,127652,127654],{"id":127653},"_722-快速生成css","7.2.2 快速生成css",[19,127656,127657],{},"简写开头",[19,127659,127660],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,127662,127664],{"id":127663},"_73-css复合选择器","7.3 css复合选择器",[200,127666,127668],{"id":127667},"_731-后代选择器","7.3.1 后代选择器",[220,127670,127672],{"className":126611,"code":127671,"language":126613,"meta":141,"style":141},".parent .child {\n  color: blue;\n}\n",[30,127673,127674,127684,127694],{"__ignoreMap":141},[228,127675,127676,127679,127682],{"class":230,"line":231},[228,127677,127678],{"class":2077},".parent",[228,127680,127681],{"class":2077}," .child",[228,127683,15687],{"class":238},[228,127685,127686,127688,127690,127692],{"class":230,"line":142},[228,127687,71020],{"class":287},[228,127689,51552],{"class":238},[228,127691,127387],{"class":287},[228,127693,1404],{"class":238},[228,127695,127696],{"class":230,"line":1293},[228,127697,1679],{"class":238},[19,127699,127700],{},"元素1 元素2 {样式声明}",[19,127702,127703],{},[388,127704,127705],{},"注意点:",[19,127707,127708],{},"①元素1和元素2中间用空格隔开",[19,127710,127711],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,127713,127714],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,127716,127717],{},"④元素1和元素2可以是任意基础选择器",[200,127719,127721],{"id":127720},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,127723,127724],{},[388,127725,127705],{},[19,127727,127728],{},"①元素1和元素2中间用大于号隔开",[19,127730,127711],{},[19,127732,127733],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[200,127735,127737],{"id":127736},"_733-并集选择器","7.3.3 并集选择器",[19,127739,127740],{},"元素1，元素2 {样式声明}",[19,127742,127743],{},[388,127744,127705],{},[19,127746,127747],{},"①元素1和元素2中间用逗号隔开",[19,127749,127750],{},"②逗号可以理解为和的意思",[19,127752,127753],{},"③并集选择器通常用于集体声明",[200,127755,127757],{"id":127756},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,127759,127760],{},[388,127761,127705],{},[19,127763,127764,127765,127767],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69120,127766],{},"－:visited－:hover－:active。",[19,127769,127770,127771,127774,127775,25856],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127772,127773],"hover",{}," 、 ",[127776,127777],"first-child",{},[19,127779,127780],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,127782,127783],{},"link对没访问的进行设置",[19,127785,127786],{},"vistied对已访问的进行改变",[19,127788,127789],{},"hover鼠标经过就会变",[19,127791,127792],{},"active常按(点)就会变",[220,127794,127796],{"className":126611,"code":127795,"language":126613,"meta":141,"style":141},"\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",[30,127797,127798,127803,127812,127822,127832,127836,127845,127856,127860,127868,127878,127888,127892,127901,127912],{"__ignoreMap":141},[228,127799,127800],{"class":230,"line":231},[228,127801,127802],{"class":297},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[228,127804,127805,127807,127810],{"class":230,"line":142},[228,127806,476],{"class":51415},[228,127808,127809],{"class":2077},":link",[228,127811,15687],{"class":238},[228,127813,127814,127816,127818,127820],{"class":230,"line":1293},[228,127815,71020],{"class":287},[228,127817,51552],{"class":238},[228,127819,62484],{"class":287},[228,127821,1404],{"class":238},[228,127823,127824,127826,127828,127830],{"class":230,"line":1308},[228,127825,70617],{"class":287},[228,127827,51552],{"class":238},[228,127829,54852],{"class":287},[228,127831,1404],{"class":238},[228,127833,127834],{"class":230,"line":1314},[228,127835,1679],{"class":238},[228,127837,127838,127840,127843],{"class":230,"line":1328},[228,127839,476],{"class":51415},[228,127841,127842],{"class":2077},":visited",[228,127844,15687],{"class":238},[228,127846,127847,127849,127851,127854],{"class":230,"line":1334},[228,127848,71020],{"class":287},[228,127850,51552],{"class":238},[228,127852,127853],{"class":287},"purple",[228,127855,1404],{"class":238},[228,127857,127858],{"class":230,"line":1425},[228,127859,1679],{"class":238},[228,127861,127862,127864,127866],{"class":230,"line":1431},[228,127863,476],{"class":51415},[228,127865,61055],{"class":2077},[228,127867,15687],{"class":238},[228,127869,127870,127872,127874,127876],{"class":230,"line":1443},[228,127871,71020],{"class":287},[228,127873,51552],{"class":238},[228,127875,55004],{"class":287},[228,127877,1404],{"class":238},[228,127879,127880,127882,127884,127886],{"class":230,"line":1726},[228,127881,70617],{"class":287},[228,127883,51552],{"class":238},[228,127885,127225],{"class":287},[228,127887,1404],{"class":238},[228,127889,127890],{"class":230,"line":1731},[228,127891,1679],{"class":238},[228,127893,127894,127896,127899],{"class":230,"line":1737},[228,127895,476],{"class":51415},[228,127897,127898],{"class":2077},":active",[228,127900,15687],{"class":238},[228,127902,127903,127905,127907,127910],{"class":230,"line":1742},[228,127904,71020],{"class":287},[228,127906,51552],{"class":238},[228,127908,127909],{"class":287},"green",[228,127911,1404],{"class":238},[228,127913,127914],{"class":230,"line":1756},[228,127915,1679],{"class":238},[200,127917,127919,127920,127923],{"id":127918},"_735-伪类选择器","7.3.5 ",[127921,127922],"focus",{},"伪类选择器",[19,127925,127926,127928,127929,127931],{},[127921,127927],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[30,127930,126672],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[220,127933,127935],{"className":126611,"code":127934,"language":126613,"meta":141,"style":141},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[30,127936,127937,127945,127956,127966],{"__ignoreMap":141},[228,127938,127939,127941,127943],{"class":230,"line":231},[228,127940,53936],{"class":51415},[228,127942,62015],{"class":2077},[228,127944,15687],{"class":238},[228,127946,127947,127950,127952,127954],{"class":230,"line":142},[228,127948,127949],{"class":287},"  border-color",[228,127951,51552],{"class":238},[228,127953,55004],{"class":287},[228,127955,1404],{"class":238},[228,127957,127958,127960,127962,127964],{"class":230,"line":1293},[228,127959,70913],{"class":287},[228,127961,51552],{"class":238},[228,127963,54852],{"class":287},[228,127965,1404],{"class":238},[228,127967,127968],{"class":230,"line":1308},[228,127969,1679],{"class":238},[5241,127971,127972],{},"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":141,"searchDepth":142,"depth":142,"links":127974},[127975,127980,127984],{"id":127350,"depth":142,"text":127351,"children":127976},[127977,127978,127979],{"id":127354,"depth":1293,"text":127355},{"id":127438,"depth":1293,"text":127439},{"id":127486,"depth":1293,"text":127487},{"id":127576,"depth":142,"text":127577,"children":127981},[127982,127983],{"id":127580,"depth":1293,"text":127581},{"id":127653,"depth":1293,"text":127654},{"id":127663,"depth":142,"text":127664,"children":127985},[127986,127987,127988,127989,127990],{"id":127667,"depth":1293,"text":127668},{"id":127720,"depth":1293,"text":127721},{"id":127736,"depth":1293,"text":127737},{"id":127756,"depth":1293,"text":127757},{"id":127918,"depth":1293,"text":127991},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127342,"description":154},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":127998,"title":127999,"body":128000,"description":154,"extension":155,"meta":129923,"navigation":157,"path":129924,"seo":129925,"stem":129926,"__hash__":129927},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128001,"toc":129897},[128002,128005,128009,128018,128022,128048,128053,128056,128059,128062,128065,128069,128072,128082,128090,128094,128129,128134,128137,128140,128143,128146,128150,128153,128162,128166,128179,128184,128187,128190,128193,128197,128200,128204,128207,128262,128265,128296,128299,128353,128357,128360,128526,128649,128652,128655,128658,128661,128665,128668,128672,128675,128678,128682,128685,128716,128743,128771,128774,128778,128804,128847,128851,128945,128948,128975,128978,128981,128984,128987,128990,128993,128996,128999,129002,129006,129063,129090,129094,129142,129146,129187,129189,129192,129195,129198,129201,129205,129297,129300,129303,129306,129310,129433,129634,129638,129642,129645,129648,129651,129655,129658,129661,129686,129689,129692,129695,129698,129701,129705,129713,129775,129778,129836,129839,129842,129845,129848,129851,129854,129857,129894],[10,128003,127999],{"id":128004},"_8-css显示模式与背景特性",[14,128006,128008],{"id":128007},"_81-css元素显示模式","8.1 css元素显示模式",[19,128010,128011,128012,128014,128015,128017],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[30,128013,126222],{},"自己占一行，比如一行可以放多个",[30,128016,126225],{},"，HTML 元素一般分为块元素和行内元素两种类型",[200,128019,128021],{"id":128020},"_811-块元素","8.1.1 块元素",[19,128023,128024,128025,128027,128028,451,128031,451,128033,451,128035,451,128038,451,128041,128044,128045,128047],{},"常见的块元素有",[30,128026,126126],{},"~",[30,128029,128030],{},"\u003Ch6>",[30,128032,126152],{},[30,128034,126222],{},[30,128036,128037],{},"\u003Cul>",[30,128039,128040],{},"\u003Col>",[30,128042,128043],{},"\u003Cli>","等，其中 ",[30,128046,126222],{}," 标签是最典型的块元素",[19,128049,128050],{},[388,128051,128052],{},"块级元素的特点：",[19,128054,128055],{},"① 比较霸道，自己独占一行。",[19,128057,128058],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,128060,128061],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,128063,128064],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,128066,128067],{},[388,128068,268],{},[19,128070,128071],{},"①文字类的元素内不能使用块级元素",[19,128073,77364,128074,128076,128077,128079,128080],{},[30,128075,126152],{}," 标签主要用于存放文字，因此 ",[30,128078,126152],{}," 里面不能放块级元素，特别是不能放",[30,128081,126222],{},[19,128083,128084,128085,128027,128087,128089],{},"⑥同理， ",[30,128086,126126],{},[30,128088,128030],{},"等都是文字类块级标签，里面也不能放其他块级元素",[200,128091,128093],{"id":128092},"_812-行内元素","8.1.2 行内元素",[19,128095,128096,128097,451,128099,451,128102,451,128105,451,128108,451,128111,451,128114,451,128117,451,128120,451,128123,128125,128126,128128],{},"常见的行内元素有 ",[30,128098,126384],{},[30,128100,128101],{},"\u003Cstrong>",[30,128103,128104],{},"\u003Cb>",[30,128106,128107],{},"\u003Cem>",[30,128109,128110],{},"\u003Ci>",[30,128112,128113],{},"\u003Cdel>",[30,128115,128116],{},"\u003Cs>",[30,128118,128119],{},"\u003Cins>",[30,128121,128122],{},"\u003Cu>",[30,128124,126225],{}," 等，其中 ",[30,128127,126225],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,128130,128131],{},[388,128132,128133],{},"特点：",[19,128135,128136],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,128138,128139],{},"② 高、宽直接设置是无效的。",[19,128141,128142],{},"③ 默认宽度就是它本身内容的宽度。",[19,128144,128145],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,128147,128148],{},[388,128149,268],{},[19,128151,128152],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,128154,128155,128156,128158,128159,128161],{},"②特殊情况链接 ",[30,128157,126384],{}," 里面可以放块级元素，但是给 ",[30,128160,126384],{}," 转换一下块级模式最安全",[200,128163,128165],{"id":128164},"_813-行内块元素","8.1.3 行内块元素",[19,128167,128168,128169,451,128172,451,128175,128178],{},"在行内元素中有几个特殊的标签 —— ",[30,128170,128171],{},"\u003Cimg \u002F>",[30,128173,128174],{},"\u003Cinput \u002F>",[30,128176,128177],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,128180,128181],{},[388,128182,128183],{},"行内块元素的特点：",[19,128185,128186],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,128188,128189],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,128191,128192],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[200,128194,128196],{"id":128195},"_814-总结","8.1.4 总结",[1576,128198],{"style":126467,"src":128199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[200,128201,128203],{"id":128202},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,128205,128206],{},"①转换为块元素：display:block;",[220,128208,128210],{"className":126611,"code":128209,"language":126613,"meta":141,"style":141},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[30,128211,128212,128217,128223,128234,128246,128258],{"__ignoreMap":141},[228,128213,128214],{"class":230,"line":231},[228,128215,128216],{"class":297},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[228,128218,128219,128221],{"class":230,"line":142},[228,128220,476],{"class":51415},[228,128222,15687],{"class":238},[228,128224,128225,128228,128230,128232],{"class":230,"line":1293},[228,128226,128227],{"class":287},"  display",[228,128229,51552],{"class":238},[228,128231,60984],{"class":287},[228,128233,1404],{"class":238},[228,128235,128236,128238,128240,128242,128244],{"class":230,"line":1308},[228,128237,70683],{"class":287},[228,128239,51552],{"class":238},[228,128241,549],{"class":287},[228,128243,51607],{"class":234},[228,128245,1404],{"class":238},[228,128247,128248,128250,128252,128254,128256],{"class":230,"line":1314},[228,128249,70903],{"class":287},[228,128251,51552],{"class":238},[228,128253,639],{"class":287},[228,128255,51607],{"class":234},[228,128257,1404],{"class":238},[228,128259,128260],{"class":230,"line":1328},[228,128261,1679],{"class":238},[19,128263,128264],{},"②转换为行内元素：display:inline;",[220,128266,128268],{"className":126611,"code":128267,"language":126613,"meta":141,"style":141},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[30,128269,128270,128275,128281,128292],{"__ignoreMap":141},[228,128271,128272],{"class":230,"line":231},[228,128273,128274],{"class":297},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[228,128276,128277,128279],{"class":230,"line":142},[228,128278,51726],{"class":51415},[228,128280,15687],{"class":238},[228,128282,128283,128285,128287,128290],{"class":230,"line":1293},[228,128284,128227],{"class":287},[228,128286,51552],{"class":238},[228,128288,128289],{"class":287},"inline",[228,128291,1404],{"class":238},[228,128293,128294],{"class":230,"line":1308},[228,128295,1679],{"class":238},[19,128297,128298],{},"③转换为行内块：display:inline-block;",[220,128300,128302],{"className":126611,"code":128301,"language":126613,"meta":141,"style":141},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[30,128303,128304,128309,128315,128325,128337,128349],{"__ignoreMap":141},[228,128305,128306],{"class":230,"line":231},[228,128307,128308],{"class":297},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[228,128310,128311,128313],{"class":230,"line":142},[228,128312,228],{"class":51415},[228,128314,15687],{"class":238},[228,128316,128317,128319,128321,128323],{"class":230,"line":1293},[228,128318,128227],{"class":287},[228,128320,51552],{"class":238},[228,128322,72498],{"class":287},[228,128324,1404],{"class":238},[228,128326,128327,128329,128331,128333,128335],{"class":230,"line":1308},[228,128328,70683],{"class":287},[228,128330,51552],{"class":238},[228,128332,850],{"class":287},[228,128334,51607],{"class":234},[228,128336,1404],{"class":238},[228,128338,128339,128341,128343,128345,128347],{"class":230,"line":1314},[228,128340,70903],{"class":287},[228,128342,51552],{"class":238},[228,128344,1189],{"class":287},[228,128346,51607],{"class":234},[228,128348,1404],{"class":238},[228,128350,128351],{"class":230,"line":1328},[228,128352,1679],{"class":238},[200,128354,128356],{"id":128355},"_816-小米侧边栏","8.1.6 小米侧边栏",[1576,128358],{"style":126467,"src":128359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[220,128361,128363],{"className":127358,"code":128362,"language":127360,"meta":141,"style":141},"\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",[30,128364,128365,128370,128385,128404,128423,128442,128461,128480,128499,128518],{"__ignoreMap":141},[228,128366,128367],{"class":230,"line":231},[228,128368,128369],{"class":297},"\u003C!-- 小米侧边栏案例 -->\n",[228,128371,128372,128374,128376,128378,128380,128383],{"class":230,"line":142},[228,128373,1148],{"class":238},[228,128375,51726],{"class":51415},[228,128377,53601],{"class":2077},[228,128379,284],{"class":238},[228,128381,128382],{"class":343},"\"sidebar\"",[228,128384,51422],{"class":238},[228,128386,128387,128389,128391,128393,128395,128397,128400,128402],{"class":230,"line":1293},[228,128388,52259],{"class":238},[228,128390,476],{"class":51415},[228,128392,61172],{"class":2077},[228,128394,284],{"class":238},[228,128396,61177],{"class":343},[228,128398,128399],{"class":238},">手机 电话卡\u003C\u002F",[228,128401,476],{"class":51415},[228,128403,51422],{"class":238},[228,128405,128406,128408,128410,128412,128414,128416,128419,128421],{"class":230,"line":1308},[228,128407,52259],{"class":238},[228,128409,476],{"class":51415},[228,128411,61172],{"class":2077},[228,128413,284],{"class":238},[228,128415,61177],{"class":343},[228,128417,128418],{"class":238},">电视 盒子\u003C\u002F",[228,128420,476],{"class":51415},[228,128422,51422],{"class":238},[228,128424,128425,128427,128429,128431,128433,128435,128438,128440],{"class":230,"line":1314},[228,128426,52259],{"class":238},[228,128428,476],{"class":51415},[228,128430,61172],{"class":2077},[228,128432,284],{"class":238},[228,128434,61177],{"class":343},[228,128436,128437],{"class":238},">笔记本 平板\u003C\u002F",[228,128439,476],{"class":51415},[228,128441,51422],{"class":238},[228,128443,128444,128446,128448,128450,128452,128454,128457,128459],{"class":230,"line":1328},[228,128445,52259],{"class":238},[228,128447,476],{"class":51415},[228,128449,61172],{"class":2077},[228,128451,284],{"class":238},[228,128453,61177],{"class":343},[228,128455,128456],{"class":238},">出行 穿戴\u003C\u002F",[228,128458,476],{"class":51415},[228,128460,51422],{"class":238},[228,128462,128463,128465,128467,128469,128471,128473,128476,128478],{"class":230,"line":1334},[228,128464,52259],{"class":238},[228,128466,476],{"class":51415},[228,128468,61172],{"class":2077},[228,128470,284],{"class":238},[228,128472,61177],{"class":343},[228,128474,128475],{"class":238},">智能 路由器\u003C\u002F",[228,128477,476],{"class":51415},[228,128479,51422],{"class":238},[228,128481,128482,128484,128486,128488,128490,128492,128495,128497],{"class":230,"line":1425},[228,128483,52259],{"class":238},[228,128485,476],{"class":51415},[228,128487,61172],{"class":2077},[228,128489,284],{"class":238},[228,128491,61177],{"class":343},[228,128493,128494],{"class":238},">健康 儿童\u003C\u002F",[228,128496,476],{"class":51415},[228,128498,51422],{"class":238},[228,128500,128501,128503,128505,128507,128509,128511,128514,128516],{"class":230,"line":1431},[228,128502,52259],{"class":238},[228,128504,476],{"class":51415},[228,128506,61172],{"class":2077},[228,128508,284],{"class":238},[228,128510,61177],{"class":343},[228,128512,128513],{"class":238},">耳机 音响\u003C\u002F",[228,128515,476],{"class":51415},[228,128517,51422],{"class":238},[228,128519,128520,128522,128524],{"class":230,"line":1443},[228,128521,51900],{"class":238},[228,128523,51726],{"class":51415},[228,128525,51422],{"class":238},[220,128527,128529],{"className":126611,"code":128528,"language":126613,"meta":141,"style":141},".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",[30,128530,128531,128540,128550,128563,128575,128587,128599,128609,128620,128624,128634,128645],{"__ignoreMap":141},[228,128532,128533,128536,128538],{"class":230,"line":231},[228,128534,128535],{"class":2077},".sidebar",[228,128537,1512],{"class":51415},[228,128539,15687],{"class":238},[228,128541,128542,128544,128546,128548],{"class":230,"line":142},[228,128543,128227],{"class":287},[228,128545,51552],{"class":238},[228,128547,60984],{"class":287},[228,128549,1404],{"class":238},[228,128551,128552,128554,128556,128559,128561],{"class":230,"line":1293},[228,128553,70683],{"class":287},[228,128555,51552],{"class":238},[228,128557,128558],{"class":287},"234",[228,128560,51607],{"class":234},[228,128562,1404],{"class":238},[228,128564,128565,128567,128569,128571,128573],{"class":230,"line":1308},[228,128566,70903],{"class":287},[228,128568,51552],{"class":238},[228,128570,690],{"class":287},[228,128572,51607],{"class":234},[228,128574,1404],{"class":238},[228,128576,128577,128579,128581,128583,128585],{"class":230,"line":1314},[228,128578,127295],{"class":287},[228,128580,51552],{"class":238},[228,128582,690],{"class":287},[228,128584,51607],{"class":234},[228,128586,1404],{"class":238},[228,128588,128589,128591,128593,128595,128597],{"class":230,"line":1328},[228,128590,70938],{"class":287},[228,128592,51552],{"class":238},[228,128594,1189],{"class":287},[228,128596,51607],{"class":234},[228,128598,1404],{"class":238},[228,128600,128601,128603,128605,128607],{"class":230,"line":1334},[228,128602,71020],{"class":287},[228,128604,51552],{"class":238},[228,128606,60957],{"class":287},[228,128608,1404],{"class":238},[228,128610,128611,128613,128615,128618],{"class":230,"line":1425},[228,128612,70993],{"class":287},[228,128614,51552],{"class":238},[228,128616,128617],{"class":287},"#55585a",[228,128619,1404],{"class":238},[228,128621,128622],{"class":230,"line":1431},[228,128623,1679],{"class":238},[228,128625,128626,128628,128630,128632],{"class":230,"line":1443},[228,128627,128535],{"class":2077},[228,128629,1512],{"class":51415},[228,128631,61055],{"class":2077},[228,128633,15687],{"class":238},[228,128635,128636,128638,128640,128643],{"class":230,"line":1726},[228,128637,70993],{"class":287},[228,128639,51552],{"class":238},[228,128641,128642],{"class":287},"#ff6700",[228,128644,1404],{"class":238},[228,128646,128647],{"class":230,"line":1731},[228,128648,1679],{"class":238},[1576,128650],{"style":126467,"src":128651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,128653,128654],{},"行高=盒子高度：实现文字的垂直居中",[19,128656,128657],{},"原理讲解：",[1576,128659],{"style":126467,"src":128660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,128662,128664],{"id":128663},"_82-css背景","8.2 css背景",[19,128666,128667],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[200,128669,128671],{"id":128670},"_821-背景颜色","8.2.1 背景颜色",[19,128673,128674],{},"background-color:颜色值;",[19,128676,128677],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[200,128679,128681],{"id":128680},"_822-背景图片","8.2.2 背景图片",[19,128683,128684],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[220,128686,128688],{"className":126611,"code":128687,"language":126613,"meta":141,"style":141},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[30,128689,128690,128696,128712],{"__ignoreMap":141},[228,128691,128692,128694],{"class":230,"line":231},[228,128693,51726],{"class":51415},[228,128695,15687],{"class":238},[228,128697,128698,128701,128703,128705,128707,128710],{"class":230,"line":142},[228,128699,128700],{"class":287},"  background-image",[228,128702,51552],{"class":238},[228,128704,61841],{"class":287},[228,128706,239],{"class":238},[228,128708,128709],{"class":5331},"images\u002Fbg.png",[228,128711,2833],{"class":238},[228,128713,128714],{"class":230,"line":1293},[228,128715,1679],{"class":238},[376,128717,128718,128727],{},[379,128719,128720],{},[382,128721,128722,128725],{},[385,128723,128724],{"align":23851},"参数值",[385,128726,102811],{"align":23851},[423,128728,128729,128736],{},[382,128730,128731,128733],{},[428,128732,54852],{"align":23851},[428,128734,128735],{"align":23851},"无背景图（默认的）",[382,128737,128738,128740],{},[428,128739,61841],{"align":23851},[428,128741,128742],{"align":23851},"使用绝对或相对地址指定背景图像",[220,128744,128745],{"className":126611,"code":128687,"language":126613,"meta":141,"style":141},[30,128746,128747,128753,128767],{"__ignoreMap":141},[228,128748,128749,128751],{"class":230,"line":231},[228,128750,51726],{"class":51415},[228,128752,15687],{"class":238},[228,128754,128755,128757,128759,128761,128763,128765],{"class":230,"line":142},[228,128756,128700],{"class":287},[228,128758,51552],{"class":238},[228,128760,61841],{"class":287},[228,128762,239],{"class":238},[228,128764,128709],{"class":5331},[228,128766,2833],{"class":238},[228,128768,128769],{"class":230,"line":1293},[228,128770,1679],{"class":238},[19,128772,128773],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[200,128775,128777],{"id":128776},"_823-背景平铺","8.2.3 背景平铺",[220,128779,128781],{"className":126611,"code":128780,"language":126613,"meta":141,"style":141},"div {\n  background-repeat: no-repeat;\n}\n",[30,128782,128783,128789,128800],{"__ignoreMap":141},[228,128784,128785,128787],{"class":230,"line":231},[228,128786,51726],{"class":51415},[228,128788,15687],{"class":238},[228,128790,128791,128794,128796,128798],{"class":230,"line":142},[228,128792,128793],{"class":287},"  background-repeat",[228,128795,51552],{"class":238},[228,128797,61851],{"class":287},[228,128799,1404],{"class":238},[228,128801,128802],{"class":230,"line":1293},[228,128803,1679],{"class":238},[376,128805,128806,128814],{},[379,128807,128808],{},[382,128809,128810,128812],{},[385,128811,128724],{"align":23851},[385,128813,102811],{"align":23851},[423,128815,128816,128824,128831,128839],{},[382,128817,128818,128821],{},[428,128819,128820],{"align":23851},"repeat",[428,128822,128823],{"align":23851},"背景图像在纵向和横向上平铺（默认的）",[382,128825,128826,128828],{},[428,128827,61851],{"align":23851},[428,128829,128830],{"align":23851},"背景图像不平铺",[382,128832,128833,128836],{},[428,128834,128835],{"align":23851},"repeat-x",[428,128837,128838],{"align":23851},"背景图像在横向上平铺",[382,128840,128841,128844],{},[428,128842,128843],{"align":23851},"repeat-y",[428,128845,128846],{"align":23851},"背景图像在纵向平铺",[200,128848,128850],{"id":128849},"_824-背景图片位置","8.2.4 背景图片位置",[220,128852,128854],{"className":126611,"code":128853,"language":126613,"meta":141,"style":141},"\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",[30,128855,128856,128861,128867,128881,128885,128890,128896,128912,128916,128921,128927,128941],{"__ignoreMap":141},[228,128857,128858],{"class":230,"line":231},[228,128859,128860],{"class":297},"\u002F* 方位名词 *\u002F\n",[228,128862,128863,128865],{"class":230,"line":142},[228,128864,51726],{"class":51415},[228,128866,15687],{"class":238},[228,128868,128869,128872,128874,128876,128879],{"class":230,"line":1293},[228,128870,128871],{"class":287},"  background-position",[228,128873,51552],{"class":238},[228,128875,51707],{"class":287},[228,128877,128878],{"class":287}," top",[228,128880,1404],{"class":238},[228,128882,128883],{"class":230,"line":1308},[228,128884,1679],{"class":238},[228,128886,128887],{"class":230,"line":1314},[228,128888,128889],{"class":297},"\u002F* 精确单位 *\u002F\n",[228,128891,128892,128894],{"class":230,"line":1328},[228,128893,51726],{"class":51415},[228,128895,15687],{"class":238},[228,128897,128898,128900,128902,128904,128906,128908,128910],{"class":230,"line":1334},[228,128899,128871],{"class":287},[228,128901,51552],{"class":238},[228,128903,938],{"class":287},[228,128905,51607],{"class":234},[228,128907,57619],{"class":287},[228,128909,51607],{"class":234},[228,128911,1404],{"class":238},[228,128913,128914],{"class":230,"line":1425},[228,128915,1679],{"class":238},[228,128917,128918],{"class":230,"line":1431},[228,128919,128920],{"class":297},"\u002F* 混合单位 *\u002F\n",[228,128922,128923,128925],{"class":230,"line":1443},[228,128924,51726],{"class":51415},[228,128926,15687],{"class":238},[228,128928,128929,128931,128933,128935,128937,128939],{"class":230,"line":1726},[228,128930,128871],{"class":287},[228,128932,51552],{"class":238},[228,128934,938],{"class":287},[228,128936,51607],{"class":234},[228,128938,17259],{"class":287},[228,128940,1404],{"class":238},[228,128942,128943],{"class":230,"line":1731},[228,128944,1679],{"class":238},[19,128946,128947],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[376,128949,128950,128958],{},[379,128951,128952],{},[382,128953,128954,128956],{},[385,128955,128724],{"align":23851},[385,128957,25985],{"align":23851},[423,128959,128960,128967],{},[382,128961,128962,128964],{},[428,128963,52083],{"align":23851},[428,128965,128966],{"align":23851},"百分数|由浮点数和单位标识符组成的长度值",[382,128968,128969,128972],{},[428,128970,128971],{"align":23851},"position",[428,128973,128974],{"align":23851},"top|center|bottom|left|center|right 方位名词",[19,128976,128977],{},"其他说明：",[19,128979,128980],{},"①参数是方位名词",[19,128982,128983],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,128985,128986],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,128988,128989],{},"②参数是精确单位",[19,128991,128992],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,128994,128995],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,128997,128998],{},"③参数是混合单位",[19,129000,129001],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[200,129003,129005],{"id":129004},"_825-背景图片固定","8.2.5 背景图片固定",[220,129007,129009],{"className":126611,"code":129008,"language":126613,"meta":141,"style":141},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[30,129010,129011,129016,129022,129034,129038,129043,129049,129059],{"__ignoreMap":141},[228,129012,129013],{"class":230,"line":231},[228,129014,129015],{"class":297},"\u002F* 背景滚动（默认） *\u002F\n",[228,129017,129018,129020],{"class":230,"line":142},[228,129019,51726],{"class":51415},[228,129021,15687],{"class":238},[228,129023,129024,129027,129029,129032],{"class":230,"line":1293},[228,129025,129026],{"class":287},"  background-attachment",[228,129028,51552],{"class":238},[228,129030,129031],{"class":287},"scroll",[228,129033,1404],{"class":238},[228,129035,129036],{"class":230,"line":1308},[228,129037,1679],{"class":238},[228,129039,129040],{"class":230,"line":1314},[228,129041,129042],{"class":297},"\u002F* 背景固定 *\u002F\n",[228,129044,129045,129047],{"class":230,"line":1328},[228,129046,51726],{"class":51415},[228,129048,15687],{"class":238},[228,129050,129051,129053,129055,129057],{"class":230,"line":1334},[228,129052,129026],{"class":287},[228,129054,51552],{"class":238},[228,129056,86348],{"class":287},[228,129058,1404],{"class":238},[228,129060,129061],{"class":230,"line":1425},[228,129062,1679],{"class":238},[376,129064,129065,129074],{},[379,129066,129067],{},[382,129068,129069,129072],{},[385,129070,129071],{"align":23851},"参数",[385,129073,102811],{"align":23851},[423,129075,129076,129083],{},[382,129077,129078,129080],{},[428,129079,129031],{"align":23851},[428,129081,129082],{"align":23851},"背景图像是随对象内容滚动",[382,129084,129085,129087],{},[428,129086,86348],{"align":23851},[428,129088,129089],{"align":23851},"背景图像固定",[200,129091,129093],{"id":129092},"_826-背景样式合写","8.2.6 背景样式合写",[220,129095,129097],{"className":126611,"code":129096,"language":126613,"meta":141,"style":141},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[30,129098,129099,129104,129110,129138],{"__ignoreMap":141},[228,129100,129101],{"class":230,"line":231},[228,129102,129103],{"class":297},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[228,129105,129106,129108],{"class":230,"line":142},[228,129107,51726],{"class":51415},[228,129109,15687],{"class":238},[228,129111,129112,129114,129116,129118,129121,129123,129125,129127,129129,129132,129134,129136],{"class":230,"line":1293},[228,129113,70726],{"class":287},[228,129115,51552],{"class":238},[228,129117,60957],{"class":287},[228,129119,129120],{"class":287}," url",[228,129122,239],{"class":238},[228,129124,128709],{"class":5331},[228,129126,13829],{"class":238},[228,129128,61851],{"class":287},[228,129130,129131],{"class":287}," fixed",[228,129133,17259],{"class":287},[228,129135,128878],{"class":287},[228,129137,1404],{"class":238},[228,129139,129140],{"class":230,"line":1308},[228,129141,1679],{"class":238},[200,129143,129145],{"id":129144},"_827-背景色半透明","8.2.7 背景色半透明",[220,129147,129149],{"className":126611,"code":129148,"language":126613,"meta":141,"style":141},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[30,129150,129151,129157,129183],{"__ignoreMap":141},[228,129152,129153,129155],{"class":230,"line":231},[228,129154,51726],{"class":51415},[228,129156,15687],{"class":238},[228,129158,129159,129161,129163,129165,129167,129169,129171,129173,129175,129177,129179,129181],{"class":230,"line":142},[228,129160,70726],{"class":287},[228,129162,51552],{"class":238},[228,129164,55225],{"class":287},[228,129166,239],{"class":238},[228,129168,430],{"class":287},[228,129170,12550],{"class":238},[228,129172,430],{"class":287},[228,129174,12550],{"class":238},[228,129176,430],{"class":287},[228,129178,12550],{"class":238},[228,129180,100636],{"class":287},[228,129182,2833],{"class":238},[228,129184,129185],{"class":230,"line":1293},[228,129186,1679],{"class":238},[19,129188,99511],{},[19,129190,129191],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,129193,129194],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,129196,129197],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,129199,129200],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[200,129202,129204],{"id":129203},"_828-总结","8.2.8 总结",[376,129206,129207,129218],{},[379,129208,129209],{},[382,129210,129211,129214,129216],{},[385,129212,129213],{"align":23851},"属性",[385,129215,102811],{"align":23851},[385,129217,391],{"align":23851},[423,129219,129220,129231,129242,129253,129264,129275,129286],{},[382,129221,129222,129225,129228],{},[428,129223,129224],{"align":23851},"background-color",[428,129226,129227],{"align":23851},"背景颜色",[428,129229,129230],{"align":23851},"预定义的颜色值\u002F十六进制\u002FRGB代码",[382,129232,129233,129236,129239],{},[428,129234,129235],{"align":23851},"background-image",[428,129237,129238],{"align":23851},"背景图片",[428,129240,129241],{"align":23851},"url(图片路径)",[382,129243,129244,129247,129250],{},[428,129245,129246],{"align":23851},"background-repeat",[428,129248,129249],{"align":23851},"是否平铺",[428,129251,129252],{"align":23851},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[382,129254,129255,129258,129261],{},[428,129256,129257],{"align":23851},"background-position",[428,129259,129260],{"align":23851},"背景位置",[428,129262,129263],{"align":23851},"length\u002Fposition 分别是x和y坐标",[382,129265,129266,129269,129272],{},[428,129267,129268],{"align":23851},"background-attachment",[428,129270,129271],{"align":23851},"背景附着",[428,129273,129274],{"align":23851},"scroll(背景滚动) \u002Ffixed (背景固定)",[382,129276,129277,129280,129283],{},[428,129278,129279],{"align":23851},"背景简写",[428,129281,129282],{"align":23851},"书写更简单",[428,129284,129285],{"align":23851},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[382,129287,129288,129291,129294],{},[428,129289,129290],{"align":23851},"背景半透明",[428,129292,129293],{"align":23851},"背景颜色半透明",[428,129295,129296],{"align":23851},"background: rgba(0,0,0.3); 后面必须是4个值",[19,129298,129299],{},"颜色渐变：",[1576,129301],{"style":126467,"src":129302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[1576,129304],{"style":126467,"src":129305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[200,129307,129309],{"id":129308},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[220,129311,129313],{"className":127358,"code":129312,"language":127360,"meta":141,"style":141},"\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",[30,129314,129315,129330,129349,129368,129387,129406,129425],{"__ignoreMap":141},[228,129316,129317,129319,129321,129323,129325,129328],{"class":230,"line":231},[228,129318,1148],{"class":238},[228,129320,51726],{"class":51415},[228,129322,53601],{"class":2077},[228,129324,284],{"class":238},[228,129326,129327],{"class":343},"\"nav\"",[228,129329,51422],{"class":238},[228,129331,129332,129334,129336,129338,129340,129342,129345,129347],{"class":230,"line":142},[228,129333,52259],{"class":238},[228,129335,476],{"class":51415},[228,129337,61172],{"class":2077},[228,129339,284],{"class":238},[228,129341,61177],{"class":343},[228,129343,129344],{"class":238},">五彩导航1\u003C\u002F",[228,129346,476],{"class":51415},[228,129348,51422],{"class":238},[228,129350,129351,129353,129355,129357,129359,129361,129364,129366],{"class":230,"line":1293},[228,129352,52259],{"class":238},[228,129354,476],{"class":51415},[228,129356,61172],{"class":2077},[228,129358,284],{"class":238},[228,129360,61177],{"class":343},[228,129362,129363],{"class":238},">五彩导航2\u003C\u002F",[228,129365,476],{"class":51415},[228,129367,51422],{"class":238},[228,129369,129370,129372,129374,129376,129378,129380,129383,129385],{"class":230,"line":1308},[228,129371,52259],{"class":238},[228,129373,476],{"class":51415},[228,129375,61172],{"class":2077},[228,129377,284],{"class":238},[228,129379,61177],{"class":343},[228,129381,129382],{"class":238},">五彩导航3\u003C\u002F",[228,129384,476],{"class":51415},[228,129386,51422],{"class":238},[228,129388,129389,129391,129393,129395,129397,129399,129402,129404],{"class":230,"line":1314},[228,129390,52259],{"class":238},[228,129392,476],{"class":51415},[228,129394,61172],{"class":2077},[228,129396,284],{"class":238},[228,129398,61177],{"class":343},[228,129400,129401],{"class":238},">五彩导航4\u003C\u002F",[228,129403,476],{"class":51415},[228,129405,51422],{"class":238},[228,129407,129408,129410,129412,129414,129416,129418,129421,129423],{"class":230,"line":1328},[228,129409,52259],{"class":238},[228,129411,476],{"class":51415},[228,129413,61172],{"class":2077},[228,129415,284],{"class":238},[228,129417,61177],{"class":343},[228,129419,129420],{"class":238},">五彩导航5\u003C\u002F",[228,129422,476],{"class":51415},[228,129424,51422],{"class":238},[228,129426,129427,129429,129431],{"class":230,"line":1334},[228,129428,51900],{"class":238},[228,129430,51726],{"class":51415},[228,129432,51422],{"class":238},[220,129434,129436],{"className":126611,"code":129435,"language":126613,"meta":141,"style":141},".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",[30,129437,129438,129447,129457,129469,129481,129491,129503,129513,129517,129542,129565,129588,129611],{"__ignoreMap":141},[228,129439,129440,129443,129445],{"class":230,"line":231},[228,129441,129442],{"class":2077},".nav",[228,129444,1512],{"class":51415},[228,129446,15687],{"class":238},[228,129448,129449,129451,129453,129455],{"class":230,"line":142},[228,129450,128227],{"class":287},[228,129452,51552],{"class":238},[228,129454,72498],{"class":287},[228,129456,1404],{"class":238},[228,129458,129459,129461,129463,129465,129467],{"class":230,"line":1293},[228,129460,70683],{"class":287},[228,129462,51552],{"class":238},[228,129464,1055],{"class":287},[228,129466,51607],{"class":234},[228,129468,1404],{"class":238},[228,129470,129471,129473,129475,129477,129479],{"class":230,"line":1308},[228,129472,70903],{"class":287},[228,129474,51552],{"class":238},[228,129476,1094],{"class":287},[228,129478,51607],{"class":234},[228,129480,1404],{"class":238},[228,129482,129483,129485,129487,129489],{"class":230,"line":1314},[228,129484,70641],{"class":287},[228,129486,51552],{"class":238},[228,129488,51707],{"class":287},[228,129490,1404],{"class":238},[228,129492,129493,129495,129497,129499,129501],{"class":230,"line":1328},[228,129494,127295],{"class":287},[228,129496,51552],{"class":238},[228,129498,1094],{"class":287},[228,129500,51607],{"class":234},[228,129502,1404],{"class":238},[228,129504,129505,129507,129509,129511],{"class":230,"line":1334},[228,129506,71020],{"class":287},[228,129508,51552],{"class":238},[228,129510,60957],{"class":287},[228,129512,1404],{"class":238},[228,129514,129515],{"class":230,"line":1425},[228,129516,1679],{"class":238},[228,129518,129519,129521,129523,129526,129528,129530,129533,129535,129537,129539],{"class":230,"line":1431},[228,129520,129442],{"class":2077},[228,129522,1512],{"class":51415},[228,129524,129525],{"class":2077},":nth-child",[228,129527,239],{"class":238},[228,129529,456],{"class":287},[228,129531,129532],{"class":238},") { ",[228,129534,129224],{"class":287},[228,129536,51552],{"class":238},[228,129538,128642],{"class":287},[228,129540,129541],{"class":238},"; }\n",[228,129543,129544,129546,129548,129550,129552,129554,129556,129558,129560,129563],{"class":230,"line":1443},[228,129545,129442],{"class":2077},[228,129547,1512],{"class":51415},[228,129549,129525],{"class":2077},[228,129551,239],{"class":238},[228,129553,316],{"class":287},[228,129555,129532],{"class":238},[228,129557,129224],{"class":287},[228,129559,51552],{"class":238},[228,129561,129562],{"class":287},"#ff0000",[228,129564,129541],{"class":238},[228,129566,129567,129569,129571,129573,129575,129577,129579,129581,129583,129586],{"class":230,"line":1726},[228,129568,129442],{"class":2077},[228,129570,1512],{"class":51415},[228,129572,129525],{"class":2077},[228,129574,239],{"class":238},[228,129576,310],{"class":287},[228,129578,129532],{"class":238},[228,129580,129224],{"class":287},[228,129582,51552],{"class":238},[228,129584,129585],{"class":287},"#00a4ff",[228,129587,129541],{"class":238},[228,129589,129590,129592,129594,129596,129598,129600,129602,129604,129606,129609],{"class":230,"line":1731},[228,129591,129442],{"class":2077},[228,129593,1512],{"class":51415},[228,129595,129525],{"class":2077},[228,129597,239],{"class":238},[228,129599,531],{"class":287},[228,129601,129532],{"class":238},[228,129603,129224],{"class":287},[228,129605,51552],{"class":238},[228,129607,129608],{"class":287},"#ff00ff",[228,129610,129541],{"class":238},[228,129612,129613,129615,129617,129619,129621,129623,129625,129627,129629,129632],{"class":230,"line":1737},[228,129614,129442],{"class":2077},[228,129616,1512],{"class":51415},[228,129618,129525],{"class":2077},[228,129620,239],{"class":238},[228,129622,557],{"class":287},[228,129624,129532],{"class":238},[228,129626,129224],{"class":287},[228,129628,51552],{"class":238},[228,129630,129631],{"class":287},"#00ff00",[228,129633,129541],{"class":238},[14,129635,129637],{"id":129636},"_83-css三大特性","8.3 css三大特性",[200,129639,129641],{"id":129640},"_831-层叠性","8.3.1 层叠性",[19,129643,129644],{},"为了解决样式冲突问题",[19,129646,129647],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,129649,129650],{},"   ②样式不冲突，不会层叠",[200,129652,129654],{"id":129653},"_832-继承性","8.3.2 继承性",[19,129656,129657],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,129659,129660],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[220,129662,129664],{"className":126611,"code":129663,"language":126613,"meta":141,"style":141},"p {\n  color: #333;\n}\n",[30,129665,129666,129672,129682],{"__ignoreMap":141},[228,129667,129668,129670],{"class":230,"line":231},[228,129669,19],{"class":51415},[228,129671,15687],{"class":238},[228,129673,129674,129676,129678,129680],{"class":230,"line":142},[228,129675,71020],{"class":287},[228,129677,51552],{"class":238},[228,129679,62484],{"class":287},[228,129681,1404],{"class":238},[228,129683,129684],{"class":230,"line":1293},[228,129685,1679],{"class":238},[1576,129687],{"style":126467,"src":129688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,129690,129691],{},"解释：①行高可以跟单位也可以不跟单位",[19,129693,129694],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,129696,129697],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,129699,129700],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[200,129702,129704],{"id":129703},"_833-优先级","8.3.3 优先级",[183,129706,129707,129710],{},[186,129708,129709],{},"选择器相同，则执行层叠性",[186,129711,129712],{},"选择器不同，则根据选择器权重执行",[376,129714,129715,129725],{},[379,129716,129717],{},[382,129718,129719,129722],{},[385,129720,129721],{"align":23851},"选择器",[385,129723,129724],{"align":23851},"选择器权重",[423,129726,129727,129735,129743,129751,129759,129767],{},[382,129728,129729,129732],{},[428,129730,129731],{"align":23851},"继承 或者*",[428,129733,129734],{"align":23851},"0，0，0，0",[382,129736,129737,129740],{},[428,129738,129739],{"align":23851},"标签选择器",[428,129741,129742],{"align":23851},"0，0，0，1",[382,129744,129745,129748],{},[428,129746,129747],{"align":23851},"类选择器，伪类选择器",[428,129749,129750],{"align":23851},"0，0，1，0",[382,129752,129753,129756],{},[428,129754,129755],{"align":23851},"ID选择器",[428,129757,129758],{"align":23851},"0，1，0，0",[382,129760,129761,129764],{},[428,129762,129763],{"align":23851},"行内样式",[428,129765,129766],{"align":23851},"1，0，0，0",[382,129768,129769,129772],{},[428,129770,129771],{"align":23851},"！important",[428,129773,129774],{"align":23851},"无穷大",[19,129776,129777],{},"! important用法：",[220,129779,129781],{"className":126611,"code":129780,"language":126613,"meta":141,"style":141},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[30,129782,129783,129788,129794,129807,129811,129816,129822,129832],{"__ignoreMap":141},[228,129784,129785],{"class":230,"line":231},[228,129786,129787],{"class":297},"\u002F* !important 拥有最高优先级 *\u002F\n",[228,129789,129790,129792],{"class":230,"line":142},[228,129791,51726],{"class":51415},[228,129793,15687],{"class":238},[228,129795,129796,129798,129800,129802,129805],{"class":230,"line":1293},[228,129797,71020],{"class":287},[228,129799,51552],{"class":238},[228,129801,51760],{"class":287},[228,129803,129804],{"class":234}," !important",[228,129806,1404],{"class":238},[228,129808,129809],{"class":230,"line":1308},[228,129810,1679],{"class":238},[228,129812,129813],{"class":230,"line":1314},[228,129814,129815],{"class":297},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[228,129817,129818,129820],{"class":230,"line":1328},[228,129819,51726],{"class":51415},[228,129821,15687],{"class":238},[228,129823,129824,129826,129828,129830],{"class":230,"line":1334},[228,129825,71020],{"class":287},[228,129827,51552],{"class":238},[228,129829,57536],{"class":287},[228,129831,1404],{"class":238},[228,129833,129834],{"class":230,"line":1425},[228,129835,1679],{"class":238},[19,129837,129838],{},"优先级注意点：",[19,129840,129841],{},"①权重是有4组数字组成,但是不会有进位",[19,129843,129844],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,129846,129847],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,129849,129850],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,129852,129853],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,129855,129856],{},"⑥复合选择器",[376,129858,129859,129869],{},[379,129860,129861],{},[382,129862,129863,129866],{},[385,129864,129865],{"align":23851},"div ul li",[385,129867,129868],{"align":23851},"0,0,0,3",[423,129870,129871,129879,129887],{},[382,129872,129873,129876],{},[428,129874,129875],{"align":23851},".nav ul li",[428,129877,129878],{"align":23851},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[382,129880,129881,129884],{},[428,129882,129883],{"align":23851},"a:hover",[428,129885,129886],{"align":23851},"0,0,1,1",[382,129888,129889,129892],{},[428,129890,129891],{"align":23851},".nav a",[428,129893,129886],{"align":23851},[5241,129895,129896],{},"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":141,"searchDepth":142,"depth":142,"links":129898},[129899,129907,129918],{"id":128007,"depth":142,"text":128008,"children":129900},[129901,129902,129903,129904,129905,129906],{"id":128020,"depth":1293,"text":128021},{"id":128092,"depth":1293,"text":128093},{"id":128164,"depth":1293,"text":128165},{"id":128195,"depth":1293,"text":128196},{"id":128202,"depth":1293,"text":128203},{"id":128355,"depth":1293,"text":128356},{"id":128663,"depth":142,"text":128664,"children":129908},[129909,129910,129911,129912,129913,129914,129915,129916,129917],{"id":128670,"depth":1293,"text":128671},{"id":128680,"depth":1293,"text":128681},{"id":128776,"depth":1293,"text":128777},{"id":128849,"depth":1293,"text":128850},{"id":129004,"depth":1293,"text":129005},{"id":129092,"depth":1293,"text":129093},{"id":129144,"depth":1293,"text":129145},{"id":129203,"depth":1293,"text":129204},{"id":129308,"depth":1293,"text":129309},{"id":129636,"depth":142,"text":129637,"children":129919},[129920,129921,129922],{"id":129640,"depth":1293,"text":129641},{"id":129653,"depth":1293,"text":129654},{"id":129703,"depth":1293,"text":129704},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":127999,"description":154},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":129929,"title":129930,"body":129931,"description":154,"extension":155,"meta":131521,"navigation":157,"path":131522,"seo":131523,"stem":131524,"__hash__":131525},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":129932,"toc":131500},[129933,129936,129940,129943,129946,129949,129952,129955,129958,129961,129965,129973,130010,130046,130049,130063,130068,130102,130105,130198,130203,130206,130236,130239,130244,130252,130256,130263,130309,130353,130358,130361,130364,130367,130370,130373,130376,130378,130381,130385,130390,130434,130439,130442,130445,130482,130487,130490,130493,130496,130499,130531,130534,130537,130540,130572,130575,130578,130581,130585,130588,130620,130623,130627,130647,130650,130658,130661,130665,130670,130673,130705,130710,130713,130751,130755,130760,130763,130766,130797,130800,130817,130822,130874,130934,130939,130993,131031,131035,131039,131042,131046,131054,131057,131059,131070,131075,131123,131157,131160,131163,131166,131169,131213,131216,131219,131222,131225,131228,131231,131275,131278,131281,131284,131287,131290,131293,131299,131302,131346,131349,131352,131355,131358,131361,131405,131408,131410,131413,131417,131421,131459,131463,131466,131469,131473,131481,131485,131488,131491,131494,131497],[10,129934,129930],{"id":129935},"_9-css盒模型浮动与切图",[14,129937,129939],{"id":129938},"_91-盒子模型","9.1 盒子模型",[19,129941,129942],{},"利用盒子来设计网页",[19,129944,129945],{},"盒子包含：边框、外边距、内边距、实际内容",[19,129947,129948],{},"网页布局设置：",[19,129950,129951],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,129953,129954],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,129956,129957],{},"③往盒子里装内容",[1576,129959],{"style":126467,"src":129960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[200,129962,129964],{"id":129963},"_911-边框border","9.1.1 边框（border）",[183,129966,129967,129970],{},[186,129968,129969],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[186,129971,129972],{},"语法",[220,129974,129976],{"className":126611,"code":129975,"language":126613,"meta":141,"style":141},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[30,129977,129978,129983,129989,130006],{"__ignoreMap":141},[228,129979,129980],{"class":230,"line":231},[228,129981,129982],{"class":297},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[228,129984,129985,129987],{"class":230,"line":142},[228,129986,51726],{"class":51415},[228,129988,15687],{"class":238},[228,129990,129991,129993,129995,129997,129999,130001,130004],{"class":230,"line":1293},[228,129992,71011],{"class":287},[228,129994,51552],{"class":238},[228,129996,456],{"class":287},[228,129998,51607],{"class":234},[228,130000,51636],{"class":287},[228,130002,130003],{"class":287}," #ccc",[228,130005,1404],{"class":238},[228,130007,130008],{"class":230,"line":1308},[228,130009,1679],{"class":238},[376,130011,130012,130020],{},[379,130013,130014],{},[382,130015,130016,130018],{},[385,130017,129213],{"align":23851},[385,130019,102811],{"align":23851},[423,130021,130022,130030,130038],{},[382,130023,130024,130027],{},[428,130025,130026],{"align":23851},"border-width",[428,130028,130029],{"align":23851},"定义边框粗细，单位是px",[382,130031,130032,130035],{},[428,130033,130034],{"align":23851},"border-style",[428,130036,130037],{"align":23851},"边框的样式",[382,130039,130040,130043],{},[428,130041,130042],{"align":23851},"border-color",[428,130044,130045],{"align":23851},"边框的颜色",[19,130047,130048],{},"边框样式 border-style 可以设置如下值：",[1245,130050,130051,130054,130057,130060],{},[186,130052,130053],{},"none：没有边框即忽略所有边框的宽度（默认值）",[186,130055,130056],{},"solid：边框为单实线(最为常用的)",[186,130058,130059],{},"dashed：边框为虚线",[186,130061,130062],{},"dotted：边框为点线",[183,130064,130065],{"start":1293},[186,130066,130067],{},"边框的合写分写",[220,130069,130070],{"className":126611,"code":129975,"language":126613,"meta":141,"style":141},[30,130071,130072,130076,130082,130098],{"__ignoreMap":141},[228,130073,130074],{"class":230,"line":231},[228,130075,129982],{"class":297},[228,130077,130078,130080],{"class":230,"line":142},[228,130079,51726],{"class":51415},[228,130081,15687],{"class":238},[228,130083,130084,130086,130088,130090,130092,130094,130096],{"class":230,"line":1293},[228,130085,71011],{"class":287},[228,130087,51552],{"class":238},[228,130089,456],{"class":287},[228,130091,51607],{"class":234},[228,130093,51636],{"class":287},[228,130095,130003],{"class":287},[228,130097,1404],{"class":238},[228,130099,130100],{"class":230,"line":1308},[228,130101,1679],{"class":238},[19,130103,130104],{},"边框分开写法：",[220,130106,130108],{"className":126611,"code":130107,"language":126613,"meta":141,"style":141},"\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",[30,130109,130110,130115,130121,130139,130157,130176,130194],{"__ignoreMap":141},[228,130111,130112],{"class":230,"line":231},[228,130113,130114],{"class":297},"\u002F* 边框分开写法 *\u002F\n",[228,130116,130117,130119],{"class":230,"line":142},[228,130118,51726],{"class":51415},[228,130120,15687],{"class":238},[228,130122,130123,130126,130128,130130,130132,130134,130137],{"class":230,"line":1293},[228,130124,130125],{"class":287},"  border-top",[228,130127,51552],{"class":238},[228,130129,456],{"class":287},[228,130131,51607],{"class":234},[228,130133,51636],{"class":287},[228,130135,130136],{"class":287}," #000",[228,130138,1404],{"class":238},[228,130140,130141,130144,130146,130148,130150,130152,130155],{"class":230,"line":1308},[228,130142,130143],{"class":287},"  border-right",[228,130145,51552],{"class":238},[228,130147,316],{"class":287},[228,130149,51607],{"class":234},[228,130151,62356],{"class":287},[228,130153,130154],{"class":287}," #333",[228,130156,1404],{"class":238},[228,130158,130159,130162,130164,130166,130168,130171,130174],{"class":230,"line":1314},[228,130160,130161],{"class":287},"  border-bottom",[228,130163,51552],{"class":238},[228,130165,310],{"class":287},[228,130167,51607],{"class":234},[228,130169,130170],{"class":287}," dotted",[228,130172,130173],{"class":287}," #666",[228,130175,1404],{"class":238},[228,130177,130178,130181,130183,130185,130187,130189,130192],{"class":230,"line":1328},[228,130179,130180],{"class":287},"  border-left",[228,130182,51552],{"class":238},[228,130184,456],{"class":287},[228,130186,51607],{"class":234},[228,130188,51636],{"class":287},[228,130190,130191],{"class":287}," #999",[228,130193,1404],{"class":238},[228,130195,130196],{"class":230,"line":1334},[228,130197,1679],{"class":238},[183,130199,130200],{"start":1308},[186,130201,130202],{},"表格的细线边框",[19,130204,130205],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[220,130207,130209],{"className":126611,"code":130208,"language":126613,"meta":141,"style":141},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[30,130210,130211,130216,130222,130232],{"__ignoreMap":141},[228,130212,130213],{"class":230,"line":231},[228,130214,130215],{"class":297},"\u002F* 表格细线边框合并 *\u002F\n",[228,130217,130218,130220],{"class":230,"line":142},[228,130219,376],{"class":51415},[228,130221,15687],{"class":238},[228,130223,130224,130226,130228,130230],{"class":230,"line":1293},[228,130225,70693],{"class":287},[228,130227,51552],{"class":238},[228,130229,65150],{"class":287},[228,130231,1404],{"class":238},[228,130233,130234],{"class":230,"line":1308},[228,130235,1679],{"class":238},[19,130237,130238],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[183,130240,130241],{"start":1314},[186,130242,130243],{},"解决边框额外增加盒子的实际大小的方法：",[1245,130245,130246,130249],{},[186,130247,130248],{},"测量盒子大小的时候,不量边框",[186,130250,130251],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[200,130253,130255],{"id":130254},"_912-内边距","9.1.2 内边距",[183,130257,130258,130261],{},[186,130259,130260],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[186,130262,129972],{},[376,130264,130265,130275],{},[379,130266,130267],{},[382,130268,130269,130272],{},[385,130270,130271],{"align":23851},"值的个数",[385,130273,130274],{"align":23851},"表达意思",[423,130276,130277,130285,130293,130301],{},[382,130278,130279,130282],{},[428,130280,130281],{"align":23851},"padding: 5px;",[428,130283,130284],{"align":23851},"1个值，代表上下左右都有5个元素",[382,130286,130287,130290],{},[428,130288,130289],{"align":23851},"padding: 5px 10px;",[428,130291,130292],{"align":23851},"2个值，代表上下内边距为5像素，左右内边距为10像素",[382,130294,130295,130298],{},[428,130296,130297],{"align":23851},"padding: 5px 10px 20px;",[428,130299,130300],{"align":23851},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[382,130302,130303,130306],{},[428,130304,130305],{"align":23851},"padding: 5px 10px 20px 30px;",[428,130307,130308],{"align":23851},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[376,130310,130311,130319],{},[379,130312,130313],{},[382,130314,130315,130317],{},[385,130316,129213],{"align":23851},[385,130318,102811],{"align":23851},[423,130320,130321,130329,130337,130345],{},[382,130322,130323,130326],{},[428,130324,130325],{"align":23851},"padding-left",[428,130327,130328],{"align":23851},"左内边距",[382,130330,130331,130334],{},[428,130332,130333],{"align":23851},"padding-right",[428,130335,130336],{"align":23851},"右内边距",[382,130338,130339,130342],{},[428,130340,130341],{"align":23851},"padding-top",[428,130343,130344],{"align":23851},"上内边距",[382,130346,130347,130350],{},[428,130348,130349],{"align":23851},"padding-bottom",[428,130351,130352],{"align":23851},"下内边距",[183,130354,130355],{"start":1293},[186,130356,130357],{},"内边距会影响盒子的实际大小",[19,130359,130360],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,130362,130363],{},"①内容和边框有了距离，添加了内边距",[19,130365,130366],{},"②padding影响了盒子实际大小",[19,130368,130369],{},"内边距对盒子大小的影响：",[19,130371,130372],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,130374,130375],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,130377,95335],{},[19,130379,130380],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[200,130382,130384],{"id":130383},"_913-外边距","9.1.3 外边距",[183,130386,130387],{},[186,130388,130389],{},"控制盒子与盒子之间的距离",[376,130391,130392,130400],{},[379,130393,130394],{},[382,130395,130396,130398],{},[385,130397,129213],{"align":23851},[385,130399,102811],{"align":23851},[423,130401,130402,130410,130418,130426],{},[382,130403,130404,130407],{},[428,130405,130406],{"align":23851},"margin-left",[428,130408,130409],{"align":23851},"左外边距",[382,130411,130412,130415],{},[428,130413,130414],{"align":23851},"margin-right",[428,130416,130417],{"align":23851},"右外边距",[382,130419,130420,130423],{},[428,130421,130422],{"align":23851},"margin-top",[428,130424,130425],{"align":23851},"上外边距",[382,130427,130428,130431],{},[428,130429,130430],{"align":23851},"margin-bottom",[428,130432,130433],{"align":23851},"下外边距",[183,130435,130436],{"start":142},[186,130437,130438],{},"外边距可以让块级盒子水平居中的两个条件：",[19,130440,130441],{},"①盒子必须指定了宽度（width）",[19,130443,130444],{},"②盒子左右的外边距都设置为 auto",[220,130446,130448],{"className":126611,"code":130447,"language":126613,"meta":141,"style":141},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[30,130449,130450,130455,130462,130478],{"__ignoreMap":141},[228,130451,130452],{"class":230,"line":231},[228,130453,130454],{"class":297},"\u002F* margin 复合写法（同上） *\u002F\n",[228,130456,130457,130460],{"class":230,"line":142},[228,130458,130459],{"class":2077},".box",[228,130461,15687],{"class":238},[228,130463,130464,130466,130468,130470,130472,130475],{"class":230,"line":1293},[228,130465,70585],{"class":287},[228,130467,51552],{"class":238},[228,130469,430],{"class":287},[228,130471,51671],{"class":287},[228,130473,130474],{"class":238},";  ",[228,130476,130477],{"class":297},"\u002F* 块级盒子水平居中 *\u002F\n",[228,130479,130480],{"class":230,"line":1308},[228,130481,1679],{"class":238},[183,130483,130484],{"start":1293},[186,130485,130486],{},"外边距塌陷问题",[19,130488,130489],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[1576,130491],{"style":126467,"src":130492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,130494,130495],{},"解决方案：",[19,130497,130498],{},"①可以为父亲元素定义上边距",[220,130500,130501],{"className":126611,"code":130447,"language":126613,"meta":141,"style":141},[30,130502,130503,130507,130513,130527],{"__ignoreMap":141},[228,130504,130505],{"class":230,"line":231},[228,130506,130454],{"class":297},[228,130508,130509,130511],{"class":230,"line":142},[228,130510,130459],{"class":2077},[228,130512,15687],{"class":238},[228,130514,130515,130517,130519,130521,130523,130525],{"class":230,"line":1293},[228,130516,70585],{"class":287},[228,130518,51552],{"class":238},[228,130520,430],{"class":287},[228,130522,51671],{"class":287},[228,130524,130474],{"class":238},[228,130526,130477],{"class":297},[228,130528,130529],{"class":230,"line":1308},[228,130530,1679],{"class":238},[19,130532,130533],{},"②可以为父亲元素定义上内边距",[19,130535,130536],{},"③可以为父亲元素添加overflow:hidden",[1576,130538],{"style":126467,"src":130539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[220,130541,130542],{"className":126611,"code":130447,"language":126613,"meta":141,"style":141},[30,130543,130544,130548,130554,130568],{"__ignoreMap":141},[228,130545,130546],{"class":230,"line":231},[228,130547,130454],{"class":297},[228,130549,130550,130552],{"class":230,"line":142},[228,130551,130459],{"class":2077},[228,130553,15687],{"class":238},[228,130555,130556,130558,130560,130562,130564,130566],{"class":230,"line":1293},[228,130557,70585],{"class":287},[228,130559,51552],{"class":238},[228,130561,430],{"class":287},[228,130563,51671],{"class":287},[228,130565,130474],{"class":238},[228,130567,130477],{"class":297},[228,130569,130570],{"class":230,"line":1308},[228,130571,1679],{"class":238},[1576,130573],{"style":126467,"src":130574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,130576,130577],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,130579,130580],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[200,130582,130584],{"id":130583},"_914-清除内外边距","9.1.4 清除内外边距",[19,130586,130587],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[220,130589,130590],{"className":126611,"code":130447,"language":126613,"meta":141,"style":141},[30,130591,130592,130596,130602,130616],{"__ignoreMap":141},[228,130593,130594],{"class":230,"line":231},[228,130595,130454],{"class":297},[228,130597,130598,130600],{"class":230,"line":142},[228,130599,130459],{"class":2077},[228,130601,15687],{"class":238},[228,130603,130604,130606,130608,130610,130612,130614],{"class":230,"line":1293},[228,130605,70585],{"class":287},[228,130607,51552],{"class":238},[228,130609,430],{"class":287},[228,130611,51671],{"class":287},[228,130613,130474],{"class":238},[228,130615,130477],{"class":297},[228,130617,130618],{"class":230,"line":1308},[228,130619,1679],{"class":238},[19,130621,130622],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[200,130624,130626],{"id":130625},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1245,130628,130629,130632,130635,130638,130641,130644],{},[186,130630,130631],{},"文件→打开 ：可以打开我们要测量的图片",[186,130633,130634],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[186,130636,130637],{},"右击标尺，把里面的单位改为像素",[186,130639,130640],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[186,130642,130643],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[186,130645,130646],{},"用选区拖动 可以测量大小",[1576,130648],{"style":126467,"src":130649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1245,130651,130652,130655],{},[186,130653,130654],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[186,130656,130657],{},"吸管取色工具",[1576,130659],{"style":126467,"src":130660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[200,130662,130664],{"id":130663},"_916-案例","9.1.6 案例",[183,130666,130667],{},[186,130668,130669],{},"小米商品",[1576,130671],{"style":126467,"src":130672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[220,130674,130675],{"className":126611,"code":130447,"language":126613,"meta":141,"style":141},[30,130676,130677,130681,130687,130701],{"__ignoreMap":141},[228,130678,130679],{"class":230,"line":231},[228,130680,130454],{"class":297},[228,130682,130683,130685],{"class":230,"line":142},[228,130684,130459],{"class":2077},[228,130686,15687],{"class":238},[228,130688,130689,130691,130693,130695,130697,130699],{"class":230,"line":1293},[228,130690,70585],{"class":287},[228,130692,51552],{"class":238},[228,130694,430],{"class":287},[228,130696,51671],{"class":287},[228,130698,130474],{"class":238},[228,130700,130477],{"class":297},[228,130702,130703],{"class":230,"line":1308},[228,130704,1679],{"class":238},[183,130706,130707],{"start":142},[186,130708,130709],{},"快报模块",[1576,130711],{"style":126467,"src":130712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[220,130714,130716],{"className":127358,"code":130715,"language":127360,"meta":141,"style":141},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[30,130717,130718,130723,130738,130743],{"__ignoreMap":141},[228,130719,130720],{"class":230,"line":231},[228,130721,130722],{"class":297},"\u003C!-- HTML 代码示例 -->\n",[228,130724,130725,130727,130729,130731,130733,130736],{"class":230,"line":142},[228,130726,1148],{"class":238},[228,130728,51726],{"class":51415},[228,130730,53601],{"class":2077},[228,130732,284],{"class":238},[228,130734,130735],{"class":343},"\"example\"",[228,130737,51422],{"class":238},[228,130739,130740],{"class":230,"line":1293},[228,130741,130742],{"class":238},"  示例内容\n",[228,130744,130745,130747,130749],{"class":230,"line":1308},[228,130746,51900],{"class":238},[228,130748,51726],{"class":51415},[228,130750,51422],{"class":238},[200,130752,130754],{"id":130753},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[183,130756,130757],{},[186,130758,130759],{},"圆角边框",[19,130761,130762],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[1576,130764],{"style":126467,"src":130765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[220,130767,130769],{"className":126611,"code":130768,"language":126613,"meta":141,"style":141},"div {\n  border: 1px solid #ccc;\n}\n",[30,130770,130771,130777,130793],{"__ignoreMap":141},[228,130772,130773,130775],{"class":230,"line":231},[228,130774,51726],{"class":51415},[228,130776,15687],{"class":238},[228,130778,130779,130781,130783,130785,130787,130789,130791],{"class":230,"line":142},[228,130780,71011],{"class":287},[228,130782,51552],{"class":238},[228,130784,456],{"class":287},[228,130786,51607],{"class":234},[228,130788,51636],{"class":287},[228,130790,130003],{"class":287},[228,130792,1404],{"class":238},[228,130794,130795],{"class":230,"line":1293},[228,130796,1679],{"class":238},[19,130798,130799],{},"解释:",[1245,130801,130802,130805,130808,130811,130814],{},[186,130803,130804],{},"参数值可以为数值或百分比的形式",[186,130806,130807],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[186,130809,130810],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[186,130812,130813],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[186,130815,130816],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[183,130818,130819],{"start":142},[186,130820,130821],{},"盒子阴影",[220,130823,130825],{"className":126611,"code":130824,"language":126613,"meta":141,"style":141},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[30,130826,130827,130833,130870],{"__ignoreMap":141},[228,130828,130829,130831],{"class":230,"line":231},[228,130830,51726],{"class":51415},[228,130832,15687],{"class":238},[228,130834,130835,130838,130840,130842,130844,130846,130848,130850,130852,130854,130856,130858,130860,130862,130864,130866,130868],{"class":230,"line":142},[228,130836,130837],{"class":287},"  box-shadow",[228,130839,51552],{"class":238},[228,130841,430],{"class":287},[228,130843,14870],{"class":287},[228,130845,51607],{"class":234},[228,130847,2152],{"class":287},[228,130849,51607],{"class":234},[228,130851,78882],{"class":287},[228,130853,239],{"class":238},[228,130855,430],{"class":287},[228,130857,12550],{"class":238},[228,130859,430],{"class":287},[228,130861,12550],{"class":238},[228,130863,430],{"class":287},[228,130865,12550],{"class":238},[228,130867,86325],{"class":287},[228,130869,2833],{"class":238},[228,130871,130872],{"class":230,"line":1293},[228,130873,1679],{"class":238},[376,130875,130876,130884],{},[379,130877,130878],{},[382,130879,130880,130882],{},[385,130881,391],{"align":23851},[385,130883,27605],{"align":23851},[423,130885,130886,130894,130902,130910,130918,130926],{},[382,130887,130888,130891],{},[428,130889,130890],{"align":23851},"h-shadow",[428,130892,130893],{"align":23851},"必需,水平阴影的位置,允许负值",[382,130895,130896,130899],{},[428,130897,130898],{"align":23851},"v-shadow",[428,130900,130901],{"align":23851},"必需,垂直阴影的位置,允许负值",[382,130903,130904,130907],{},[428,130905,130906],{"align":23851},"blur",[428,130908,130909],{"align":23851},"可选,模糊距离,就是影子的虚实",[382,130911,130912,130915],{},[428,130913,130914],{"align":23851},"spread",[428,130916,130917],{"align":23851},"可选,阴影尺寸",[382,130919,130920,130923],{},[428,130921,130922],{"align":23851},"color",[428,130924,130925],{"align":23851},"可选,阴影的颜色",[382,130927,130928,130931],{},[428,130929,130930],{"align":23851},"inset",[428,130932,130933],{"align":23851},"可选,将外部阴影(outset)改为内部阴影",[183,130935,130936],{"start":1293},[186,130937,130938],{},"文字阴影",[220,130940,130942],{"className":126611,"code":130941,"language":126613,"meta":141,"style":141},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[30,130943,130944,130950,130989],{"__ignoreMap":141},[228,130945,130946,130948],{"class":230,"line":231},[228,130947,19],{"class":51415},[228,130949,15687],{"class":238},[228,130951,130952,130955,130957,130959,130961,130963,130965,130967,130969,130971,130973,130975,130977,130979,130981,130983,130985,130987],{"class":230,"line":142},[228,130953,130954],{"class":287},"  text-shadow",[228,130956,51552],{"class":238},[228,130958,456],{"class":287},[228,130960,51607],{"class":234},[228,130962,25234],{"class":287},[228,130964,51607],{"class":234},[228,130966,14870],{"class":287},[228,130968,51607],{"class":234},[228,130970,78882],{"class":287},[228,130972,239],{"class":238},[228,130974,430],{"class":287},[228,130976,12550],{"class":238},[228,130978,430],{"class":287},[228,130980,12550],{"class":238},[228,130982,430],{"class":287},[228,130984,12550],{"class":238},[228,130986,100636],{"class":287},[228,130988,2833],{"class":238},[228,130990,130991],{"class":230,"line":1293},[228,130992,1679],{"class":238},[376,130994,130995,131003],{},[379,130996,130997],{},[382,130998,130999,131001],{},[385,131000,391],{"align":23851},[385,131002,27605],{"align":23851},[423,131004,131005,131011,131018,131025],{},[382,131006,131007,131009],{},[428,131008,130890],{"align":23851},[428,131010,130893],{"align":23851},[382,131012,131013,131015],{},[428,131014,130898],{"align":23851},[428,131016,131017],{"align":23851},"必需,垂直阴影位置,允许负值",[382,131019,131020,131022],{},[428,131021,130906],{"align":23851},[428,131023,131024],{"align":23851},"可选,模糊的距离",[382,131026,131027,131029],{},[428,131028,130922],{"align":23851},[428,131030,130925],{"align":23851},[14,131032,131034],{"id":131033},"_92-浮动","9.2 浮动",[200,131036,131038],{"id":131037},"_921-浮动介绍","9.2.1 浮动介绍",[19,131040,131041],{},"在16.2中详细介绍",[200,131043,131045],{"id":131044},"_922-清除浮动","9.2.2 清除浮动",[183,131047,131048,131051],{},[186,131049,131050],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[186,131052,131053],{},"清除浮动的本质",[19,131055,131056],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,131058,9140],{},[1245,131060,131061,131064,131067],{},[186,131062,131063],{},"如果父盒子本身有高度，则不需要清除浮动",[186,131065,131066],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[186,131068,131069],{},"父级有了高度，就不会影响下面的标准流了",[183,131071,131072],{"start":1293},[186,131073,131074],{},"清除浮动样式",[220,131076,131078],{"className":126611,"code":131077,"language":126613,"meta":141,"style":141},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[30,131079,131080,131087,131098,131102,131109,131119],{"__ignoreMap":141},[228,131081,131082,131085],{"class":230,"line":231},[228,131083,131084],{"class":2077},".left",[228,131086,15687],{"class":238},[228,131088,131089,131092,131094,131096],{"class":230,"line":142},[228,131090,131091],{"class":287},"  float",[228,131093,51552],{"class":238},[228,131095,23851],{"class":287},[228,131097,1404],{"class":238},[228,131099,131100],{"class":230,"line":1293},[228,131101,1679],{"class":238},[228,131103,131104,131107],{"class":230,"line":1308},[228,131105,131106],{"class":2077},".right",[228,131108,15687],{"class":238},[228,131110,131111,131113,131115,131117],{"class":230,"line":1314},[228,131112,131091],{"class":287},[228,131114,51552],{"class":238},[228,131116,72637],{"class":287},[228,131118,1404],{"class":238},[228,131120,131121],{"class":230,"line":1328},[228,131122,1679],{"class":238},[376,131124,131125,131133],{},[379,131126,131127],{},[382,131128,131129,131131],{},[385,131130,127075],{"align":23851},[385,131132,27605],{"align":23851},[423,131134,131135,131142,131149],{},[382,131136,131137,131139],{},[428,131138,23851],{"align":23851},[428,131140,131141],{"align":23851},"不允许左侧有浮动元素（清除左侧浮动的影响）",[382,131143,131144,131146],{},[428,131145,72637],{"align":23851},[428,131147,131148],{"align":23851},"不允许右侧有浮动元素（清除右侧浮动的影响）",[382,131150,131151,131154],{},[428,131152,131153],{"align":23851},"both",[428,131155,131156],{"align":23851},"同时清除左右侧浮动的影响",[19,131158,131159],{},"法一",[19,131161,131162],{},"额外标签法也称为隔墙法",[19,131164,131165],{},"使用方式：",[19,131167,131168],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[220,131170,131171],{"className":126611,"code":131077,"language":126613,"meta":141,"style":141},[30,131172,131173,131179,131189,131193,131199,131209],{"__ignoreMap":141},[228,131174,131175,131177],{"class":230,"line":231},[228,131176,131084],{"class":2077},[228,131178,15687],{"class":238},[228,131180,131181,131183,131185,131187],{"class":230,"line":142},[228,131182,131091],{"class":287},[228,131184,51552],{"class":238},[228,131186,23851],{"class":287},[228,131188,1404],{"class":238},[228,131190,131191],{"class":230,"line":1293},[228,131192,1679],{"class":238},[228,131194,131195,131197],{"class":230,"line":1308},[228,131196,131106],{"class":2077},[228,131198,15687],{"class":238},[228,131200,131201,131203,131205,131207],{"class":230,"line":1314},[228,131202,131091],{"class":287},[228,131204,51552],{"class":238},[228,131206,72637],{"class":287},[228,131208,1404],{"class":238},[228,131210,131211],{"class":230,"line":1328},[228,131212,1679],{"class":238},[19,131214,131215],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,131217,131218],{},"优点： 通俗易懂，书写方便",[19,131220,131221],{},"缺点： 添加许多无意义的标签，结构化较差",[19,131223,131224],{},"注意： 要求这个新的空标签必须是块级元素。",[19,131226,131227],{},"法二",[19,131229,131230],{},"父级添加overflow属性",[220,131232,131233],{"className":126611,"code":131077,"language":126613,"meta":141,"style":141},[30,131234,131235,131241,131251,131255,131261,131271],{"__ignoreMap":141},[228,131236,131237,131239],{"class":230,"line":231},[228,131238,131084],{"class":2077},[228,131240,15687],{"class":238},[228,131242,131243,131245,131247,131249],{"class":230,"line":142},[228,131244,131091],{"class":287},[228,131246,51552],{"class":238},[228,131248,23851],{"class":287},[228,131250,1404],{"class":238},[228,131252,131253],{"class":230,"line":1293},[228,131254,1679],{"class":238},[228,131256,131257,131259],{"class":230,"line":1308},[228,131258,131106],{"class":2077},[228,131260,15687],{"class":238},[228,131262,131263,131265,131267,131269],{"class":230,"line":1314},[228,131264,131091],{"class":287},[228,131266,51552],{"class":238},[228,131268,72637],{"class":287},[228,131270,1404],{"class":238},[228,131272,131273],{"class":230,"line":1328},[228,131274,1679],{"class":238},[19,131276,131277],{},"overflow: hidden;",[19,131279,131280],{},"优点：代码简洁",[19,131282,131283],{},"缺点：无法显示溢出的部分",[19,131285,131286],{},"注意：是给父元素添加代码",[19,131288,131289],{},"法三",[19,131291,131292],{},"父级添加after伪元素",[19,131294,131295,131298],{},[131296,131297],"after",{}," 方式是额外标签法的升级版",[19,131300,131301],{},"使用的时候复制就可以",[220,131303,131304],{"className":126611,"code":131077,"language":126613,"meta":141,"style":141},[30,131305,131306,131312,131322,131326,131332,131342],{"__ignoreMap":141},[228,131307,131308,131310],{"class":230,"line":231},[228,131309,131084],{"class":2077},[228,131311,15687],{"class":238},[228,131313,131314,131316,131318,131320],{"class":230,"line":142},[228,131315,131091],{"class":287},[228,131317,51552],{"class":238},[228,131319,23851],{"class":287},[228,131321,1404],{"class":238},[228,131323,131324],{"class":230,"line":1293},[228,131325,1679],{"class":238},[228,131327,131328,131330],{"class":230,"line":1308},[228,131329,131106],{"class":2077},[228,131331,15687],{"class":238},[228,131333,131334,131336,131338,131340],{"class":230,"line":1314},[228,131335,131091],{"class":287},[228,131337,51552],{"class":238},[228,131339,72637],{"class":287},[228,131341,1404],{"class":238},[228,131343,131344],{"class":230,"line":1328},[228,131345,1679],{"class":238},[19,131347,131348],{},"优点：没有增加标签，结构更简单",[19,131350,131351],{},"缺点：照顾低版本浏览器",[19,131353,131354],{},"代表网站： 百度、淘宝网、网易等",[19,131356,131357],{},"法四",[19,131359,131360],{},"父级添加双伪元素",[220,131362,131363],{"className":126611,"code":131077,"language":126613,"meta":141,"style":141},[30,131364,131365,131371,131381,131385,131391,131401],{"__ignoreMap":141},[228,131366,131367,131369],{"class":230,"line":231},[228,131368,131084],{"class":2077},[228,131370,15687],{"class":238},[228,131372,131373,131375,131377,131379],{"class":230,"line":142},[228,131374,131091],{"class":287},[228,131376,51552],{"class":238},[228,131378,23851],{"class":287},[228,131380,1404],{"class":238},[228,131382,131383],{"class":230,"line":1293},[228,131384,1679],{"class":238},[228,131386,131387,131389],{"class":230,"line":1308},[228,131388,131106],{"class":2077},[228,131390,15687],{"class":238},[228,131392,131393,131395,131397,131399],{"class":230,"line":1314},[228,131394,131091],{"class":287},[228,131396,51552],{"class":238},[228,131398,72637],{"class":287},[228,131400,1404],{"class":238},[228,131402,131403],{"class":230,"line":1328},[228,131404,1679],{"class":238},[19,131406,131407],{},"优点：代码更简洁",[19,131409,131351],{},[19,131411,131412],{},"代表网站：小米、腾讯等",[14,131414,131416],{"id":131415},"_93-ps切图","9.3 PS切图",[200,131418,131420],{"id":131419},"_931-常见图片格式","9.3.1 常见图片格式",[376,131422,131423,131433],{},[379,131424,131425],{},[382,131426,131427,131430],{},[385,131428,131429],{"align":23851},"jpg图像格式",[385,131431,131432],{"align":23851},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[423,131434,131435,131443,131451],{},[382,131436,131437,131440],{},[428,131438,131439],{"align":23851},"gif图像格式",[428,131441,131442],{"align":23851},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[382,131444,131445,131448],{},[428,131446,131447],{"align":23851},"png图像格式",[428,131449,131450],{"align":23851},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[382,131452,131453,131456],{},[428,131454,131455],{"align":23851},"PSD图像格式",[428,131457,131458],{"align":23851},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[200,131460,131462],{"id":131461},"_932-图层切图","9.3.2 图层切图",[19,131464,131465],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,131467,131468],{},"按住shift选中两个图层->图层菜单->合并图层",[200,131470,131472],{"id":131471},"_933-切片切图","9.3.3 切片切图",[1245,131474,131475,131478],{},[186,131476,131477],{},"利用切片工具手动划出",[186,131479,131480],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[200,131482,131484],{"id":131483},"_934-切图步骤","9.3.4 切图步骤",[19,131486,131487],{},"用切片工具选中：",[1576,131489],{"style":126467,"src":131490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,131492,131493],{},"文件 -> 导出",[1576,131495],{"style":126467,"src":131496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[5241,131498,131499],{},"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":141,"searchDepth":142,"depth":142,"links":131501},[131502,131511,131515],{"id":129938,"depth":142,"text":129939,"children":131503},[131504,131505,131506,131507,131508,131509,131510],{"id":129963,"depth":1293,"text":129964},{"id":130254,"depth":1293,"text":130255},{"id":130383,"depth":1293,"text":130384},{"id":130583,"depth":1293,"text":130584},{"id":130625,"depth":1293,"text":130626},{"id":130663,"depth":1293,"text":130664},{"id":130753,"depth":1293,"text":130754},{"id":131033,"depth":142,"text":131034,"children":131512},[131513,131514],{"id":131037,"depth":1293,"text":131038},{"id":131044,"depth":1293,"text":131045},{"id":131415,"depth":142,"text":131416,"children":131516},[131517,131518,131519,131520],{"id":131419,"depth":1293,"text":131420},{"id":131461,"depth":1293,"text":131462},{"id":131471,"depth":1293,"text":131472},{"id":131483,"depth":1293,"text":131484},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":129930,"description":154},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131527,"title":131528,"body":131529,"description":154,"extension":155,"meta":132170,"navigation":157,"path":132171,"seo":132172,"stem":132173,"__hash__":132174},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131530,"toc":132158},[131531,131534,131538,131564,131598,131602,131606,131609,131651,131658,131668,131676,131678,131681,131684,131687,131694,131708,131712,131715,131744,131748,131751,131765,131769,131772,131800,131804,131807,131833,131837,131842,131875,131880,131908,131912,131929,131975,131980,132024,132041,132148,132156],[10,131532,131528],{"id":131533},"_10-css规范与学成在线案例",[14,131535,131537],{"id":131536},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[183,131539,131540,131546,131552,131558],{},[186,131541,131542,131545],{},[388,131543,131544],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[186,131547,131548,131551],{},[388,131549,131550],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[186,131553,131554,131557],{},[388,131555,131556],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[186,131559,131560,131563],{},[388,131561,131562],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[220,131565,131566],{"className":126611,"code":129975,"language":126613,"meta":141,"style":141},[30,131567,131568,131572,131578,131594],{"__ignoreMap":141},[228,131569,131570],{"class":230,"line":231},[228,131571,129982],{"class":297},[228,131573,131574,131576],{"class":230,"line":142},[228,131575,51726],{"class":51415},[228,131577,15687],{"class":238},[228,131579,131580,131582,131584,131586,131588,131590,131592],{"class":230,"line":1293},[228,131581,71011],{"class":287},[228,131583,51552],{"class":238},[228,131585,456],{"class":287},[228,131587,51607],{"class":234},[228,131589,51636],{"class":287},[228,131591,130003],{"class":287},[228,131593,1404],{"class":238},[228,131595,131596],{"class":230,"line":1308},[228,131597,1679],{"class":238},[14,131599,131601],{"id":131600},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[200,131603,131605],{"id":131604},"_1021-header头部制作","10.2.1 header头部制作",[1576,131607],{"style":126467,"src":131608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1245,131610,131611,131618,131625,131631,131638,131645],{},[186,131612,131613,131614,131617],{},"1号是版心盒子 ",[388,131615,131616],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[186,131619,131620,131621,131624],{},"版心盒子 里面包含 2号盒子 ",[388,131622,131623],{},"logo"," 图标",[186,131626,131627,131628,131630],{},"版心盒子 里面包含 3号盒子 ",[388,131629,53828],{}," 导航栏",[186,131632,131633,131634,131637],{},"版心盒子 里面包含 4号盒子 ",[388,131635,131636],{},"search"," 搜索框",[186,131639,131640,131641,131644],{},"版心盒子 里面包含 5号盒子 ",[388,131642,131643],{},"user"," 个人信息",[186,131646,131647,131648],{},"注意，要求里面的 ",[388,131649,131650],{},"4个子盒子 必须都浮动",[183,131652,131653],{},[186,131654,131655],{},[388,131656,131657],{},"导航栏注意点:",[19,131659,131660,131661,131664,131665],{},"实际开发中， ",[388,131662,131663],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[388,131666,131667],{},"用 li 包含链接(li+a)的做法",[1245,131669,131670,131673],{},[186,131671,131672],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[186,131674,131675],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,131677,9140],{},[19,131679,131680],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,131682,131683],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,131685,131686],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[183,131688,131689],{"start":142},[186,131690,131691],{},[388,131692,131693],{},"4号盒子search的细节：",[1245,131695,131696,131699,131702],{},[186,131697,131698],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[186,131700,131701],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[186,131703,131704,131707],{},[30,131705,131706],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[200,131709,131711],{"id":131710},"_1022-banner制作","10.2.2 banner制作",[1576,131713],{"style":126467,"src":131714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1245,131716,131717,131724,131730,131737],{},[186,131718,131719,131720,131723],{},"1号盒子是通栏的大盒子 ",[388,131721,131722],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[186,131725,131726,131727,131729],{},"2号盒子是版心 ",[388,131728,1033],{}," ， 要水平居中对齐",[186,131731,131732,131733,131736],{},"3号盒子版心内，左对齐 ",[388,131734,131735],{},"subnav"," 侧导航栏",[186,131738,131739,131740,131743],{},"4号盒子版心内，右对齐 ",[388,131741,131742],{},"course"," 课程",[200,131745,131747],{"id":131746},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[1576,131749],{"style":126467,"src":131750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1245,131752,131753,131756,131759,131762],{},[186,131754,131755],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[186,131757,131758],{},"1号盒子是标题 H3 左侧浮动",[186,131760,131761],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[186,131763,131764],{},"3号盒子 右浮动 mod 修改",[200,131766,131768],{"id":131767},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[1576,131770],{"style":126467,"src":131771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1245,131773,131774,131780,131787,131794,131797],{},[186,131775,131776,131777,131779],{},"1号盒子为最大的盒子 ",[388,131778,53829],{}," 版心水平居中对齐",[186,131781,131782,131783,131786],{},"2号盒子为上面部分 ",[388,131784,131785],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[186,131788,131789,131790,131793],{},"3号盒子为底下部分 ",[388,131791,131792],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[186,131795,131796],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[186,131798,131799],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[200,131801,131803],{"id":131802},"_1025-底部模块制作","10.2.5 底部模块制作",[1576,131805],{"style":126467,"src":131806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1245,131808,131809,131816,131819,131826],{},[186,131810,131811,131812,131815],{},"1号盒子通栏大盒子 底部 ",[388,131813,131814],{},"footer"," 给高度 底色是白色",[186,131817,131818],{},"2号盒子版心水平居中",[186,131820,131821,131822,131825],{},"3号盒子版权 ",[388,131823,131824],{},"copyright"," 左对齐",[186,131827,131828,131829,131832],{},"4号盒子 链接组 ",[388,131830,131831],{},"links"," 右对齐",[200,131834,131836],{"id":131835},"_1026-代码模块","10.2.6 代码模块",[183,131838,131839],{},[186,131840,131841],{},"html部分",[220,131843,131845],{"className":127358,"code":131844,"language":127360,"meta":141,"style":141},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[30,131846,131847],{"__ignoreMap":141},[228,131848,131849,131851,131853,131855,131857,131860,131863,131865,131868,131871,131873],{"class":230,"line":231},[228,131850,1148],{"class":238},[228,131852,476],{"class":51415},[228,131854,61172],{"class":2077},[228,131856,284],{"class":238},[228,131858,131859],{"class":343},"\"https:\u002F\u002Fexample.com\"",[228,131861,131862],{"class":2077}," target",[228,131864,284],{"class":238},[228,131866,131867],{"class":343},"\"_blank\"",[228,131869,131870],{"class":238},">链接文字\u003C\u002F",[228,131872,476],{"class":51415},[228,131874,51422],{"class":238},[183,131876,131877],{"start":142},[186,131878,131879],{},"css部分",[220,131881,131882],{"className":127358,"code":131844,"language":127360,"meta":141,"style":141},[30,131883,131884],{"__ignoreMap":141},[228,131885,131886,131888,131890,131892,131894,131896,131898,131900,131902,131904,131906],{"class":230,"line":231},[228,131887,1148],{"class":238},[228,131889,476],{"class":51415},[228,131891,61172],{"class":2077},[228,131893,284],{"class":238},[228,131895,131859],{"class":343},[228,131897,131862],{"class":2077},[228,131899,284],{"class":238},[228,131901,131867],{"class":343},[228,131903,131870],{"class":238},[228,131905,476],{"class":51415},[228,131907,51422],{"class":238},[200,131909,131911],{"id":131910},"_1027-收获","10.2.7 收获",[183,131913,131914,131917,131920,131923,131926],{},[186,131915,131916],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[186,131918,131919],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[186,131921,131922],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[186,131924,131925],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[186,131927,131928],{},"遗忘代码",[220,131930,131932],{"className":126611,"code":131931,"language":126613,"meta":141,"style":141},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[30,131933,131934,131956,131961,131971],{"__ignoreMap":141},[228,131935,131936,131938,131940,131942,131944,131946,131948,131950,131952,131954],{"class":230,"line":231},[228,131937,51726],{"class":51415},[228,131939,12550],{"class":238},[228,131941,19],{"class":51415},[228,131943,12550],{"class":238},[228,131945,10],{"class":51415},[228,131947,12550],{"class":238},[228,131949,1245],{"class":51415},[228,131951,12550],{"class":238},[228,131953,186],{"class":51415},[228,131955,15687],{"class":238},[228,131957,131958],{"class":230,"line":142},[228,131959,131960],{"class":297},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[228,131962,131963,131965,131967,131969],{"class":230,"line":1293},[228,131964,128227],{"class":287},[228,131966,51552],{"class":238},[228,131968,60984],{"class":287},[228,131970,1404],{"class":238},[228,131972,131973],{"class":230,"line":1308},[228,131974,1679],{"class":238},[183,131976,131977],{"start":1328},[186,131978,131979],{},"html引css的程序",[220,131981,131982],{"className":126611,"code":131931,"language":126613,"meta":141,"style":141},[30,131983,131984,132006,132010,132020],{"__ignoreMap":141},[228,131985,131986,131988,131990,131992,131994,131996,131998,132000,132002,132004],{"class":230,"line":231},[228,131987,51726],{"class":51415},[228,131989,12550],{"class":238},[228,131991,19],{"class":51415},[228,131993,12550],{"class":238},[228,131995,10],{"class":51415},[228,131997,12550],{"class":238},[228,131999,1245],{"class":51415},[228,132001,12550],{"class":238},[228,132003,186],{"class":51415},[228,132005,15687],{"class":238},[228,132007,132008],{"class":230,"line":142},[228,132009,131960],{"class":297},[228,132011,132012,132014,132016,132018],{"class":230,"line":1293},[228,132013,128227],{"class":287},[228,132015,51552],{"class":238},[228,132017,60984],{"class":287},[228,132019,1404],{"class":238},[228,132021,132022],{"class":230,"line":1308},[228,132023,1679],{"class":238},[183,132025,132026,132029,132032,132035,132038],{"start":1334},[186,132027,132028],{},"浮动的盒子不会有外边距合并问题",[186,132030,132031],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[186,132033,132034],{},"ctrl+g快速定位行；shift+alt多个光标",[186,132036,132037],{},"学习上方各个模块的选择器起名方法，以后就这样用",[186,132039,132040],{},"在写选择器时尽量写全一些，例如",[220,132042,132044],{"className":126611,"code":132043,"language":126613,"meta":141,"style":141},"\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",[30,132045,132046,132051,132067,132072,132087,132092,132107,132112,132127,132132],{"__ignoreMap":141},[228,132047,132048],{"class":230,"line":231},[228,132049,132050],{"class":297},"\u002F* 静态定位（默认） *\u002F\n",[228,132052,132053,132056,132058,132060,132062,132065],{"class":230,"line":142},[228,132054,132055],{"class":2077},".static",[228,132057,79922],{"class":238},[228,132059,128971],{"class":287},[228,132061,51552],{"class":238},[228,132063,132064],{"class":287},"static",[228,132066,129541],{"class":238},[228,132068,132069],{"class":230,"line":1293},[228,132070,132071],{"class":297},"\u002F* 相对定位 *\u002F\n",[228,132073,132074,132077,132079,132081,132083,132085],{"class":230,"line":1308},[228,132075,132076],{"class":2077},".relative",[228,132078,79922],{"class":238},[228,132080,128971],{"class":287},[228,132082,51552],{"class":238},[228,132084,54879],{"class":287},[228,132086,129541],{"class":238},[228,132088,132089],{"class":230,"line":1314},[228,132090,132091],{"class":297},"\u002F* 绝对定位 *\u002F\n",[228,132093,132094,132097,132099,132101,132103,132105],{"class":230,"line":1328},[228,132095,132096],{"class":2077},".absolute",[228,132098,79922],{"class":238},[228,132100,128971],{"class":287},[228,132102,51552],{"class":238},[228,132104,54946],{"class":287},[228,132106,129541],{"class":238},[228,132108,132109],{"class":230,"line":1334},[228,132110,132111],{"class":297},"\u002F* 固定定位 *\u002F\n",[228,132113,132114,132117,132119,132121,132123,132125],{"class":230,"line":1425},[228,132115,132116],{"class":2077},".fixed",[228,132118,79922],{"class":238},[228,132120,128971],{"class":287},[228,132122,51552],{"class":238},[228,132124,86348],{"class":287},[228,132126,129541],{"class":238},[228,132128,132129],{"class":230,"line":1431},[228,132130,132131],{"class":297},"\u002F* 粘性定位 *\u002F\n",[228,132133,132134,132137,132139,132141,132143,132146],{"class":230,"line":1443},[228,132135,132136],{"class":2077},".sticky",[228,132138,79922],{"class":238},[228,132140,128971],{"class":287},[228,132142,51552],{"class":238},[228,132144,132145],{"class":287},"sticky",[228,132147,129541],{"class":238},[183,132149,132150,132153],{"start":1731},[186,132151,132152],{},"一定要用好注释",[186,132154,132155],{},"浮动的盒子不会有外边距合并的问题",[5241,132157,131499],{},{"title":141,"searchDepth":142,"depth":142,"links":132159},[132160,132161],{"id":131536,"depth":142,"text":131537},{"id":131600,"depth":142,"text":131601,"children":132162},[132163,132164,132165,132166,132167,132168,132169],{"id":131604,"depth":1293,"text":131605},{"id":131710,"depth":1293,"text":131711},{"id":131746,"depth":1293,"text":131747},{"id":131767,"depth":1293,"text":131768},{"id":131802,"depth":1293,"text":131803},{"id":131835,"depth":1293,"text":131836},{"id":131910,"depth":1293,"text":131911},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131528,"description":154},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132176,"title":132177,"body":132178,"description":154,"extension":155,"meta":133664,"navigation":157,"path":133665,"seo":133666,"stem":133667,"__hash__":133668},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132179,"toc":133656},[132180,132183,132187,132191,132202,132206,132223,132267,132300,132303,132320,132323,132326,132370,132374,132378,132381,132384,132388,132391,132402,132465,132506,132509,132524,132578,132586,132589,132600,132654,132680,132683,132696,132750,132782,132836,132859,132913,132916,132919,132926,132980,133001,133055,133058,133061,133146,133154,133211,133234,133238,133241,133259,133263,133282,133336,133374,133378,133381,133384,133406,133410,133418,133421,133426,133437,133440,133444,133458,133502,133505,133509,133512,133517,133543,133548,133625,133628,133632,133635,133638,133641,133644,133647,133650,133653],[10,132181,132177],{"id":132182},"_11-传统布局与定位体系",[14,132184,132186],{"id":132185},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[200,132188,132190],{"id":132189},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1245,132192,132193,132196,132199],{},[186,132194,132195],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[186,132197,132198],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[186,132200,132201],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[200,132203,132205],{"id":132204},"_1112-浮动","11.1.2 浮动",[1245,132207,132208,132211,132214,132217,132220],{},[186,132209,132210],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[186,132212,132213],{},"浮动可以改变元素标签默认的排列方式",[186,132215,132216],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[186,132218,132219],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[186,132221,132222],{},"在使用行内块转换时盒子之间是有空隙的",[220,132224,132225],{"className":126611,"code":131077,"language":126613,"meta":141,"style":141},[30,132226,132227,132233,132243,132247,132253,132263],{"__ignoreMap":141},[228,132228,132229,132231],{"class":230,"line":231},[228,132230,131084],{"class":2077},[228,132232,15687],{"class":238},[228,132234,132235,132237,132239,132241],{"class":230,"line":142},[228,132236,131091],{"class":287},[228,132238,51552],{"class":238},[228,132240,23851],{"class":287},[228,132242,1404],{"class":238},[228,132244,132245],{"class":230,"line":1293},[228,132246,1679],{"class":238},[228,132248,132249,132251],{"class":230,"line":1308},[228,132250,131106],{"class":2077},[228,132252,15687],{"class":238},[228,132254,132255,132257,132259,132261],{"class":230,"line":1314},[228,132256,131091],{"class":287},[228,132258,51552],{"class":238},[228,132260,72637],{"class":287},[228,132262,1404],{"class":238},[228,132264,132265],{"class":230,"line":1328},[228,132266,1679],{"class":238},[376,132268,132269,132277],{},[379,132270,132271],{},[382,132272,132273,132275],{},[385,132274,127075],{"align":23851},[385,132276,27605],{"align":23851},[423,132278,132279,132286,132293],{},[382,132280,132281,132283],{},[428,132282,54852],{"align":23851},[428,132284,132285],{"align":23851},"元素不浮动（默认值）",[382,132287,132288,132290],{},[428,132289,23851],{"align":23851},[428,132291,132292],{"align":23851},"元素向左浮动",[382,132294,132295,132297],{},[428,132296,72637],{"align":23851},[428,132298,132299],{"align":23851},"元素向右浮动",[19,132301,132302],{},"浮动重点：",[1245,132304,132305,132308,132311,132314,132317],{},[186,132306,132307],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[186,132309,132310],{},"浮动的元素会一行内显示并且元素顶部对齐",[186,132312,132313],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[186,132315,132316],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[186,132318,132319],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,132321,132322],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,132324,132325],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[220,132327,132328],{"className":126611,"code":131077,"language":126613,"meta":141,"style":141},[30,132329,132330,132336,132346,132350,132356,132366],{"__ignoreMap":141},[228,132331,132332,132334],{"class":230,"line":231},[228,132333,131084],{"class":2077},[228,132335,15687],{"class":238},[228,132337,132338,132340,132342,132344],{"class":230,"line":142},[228,132339,131091],{"class":287},[228,132341,51552],{"class":238},[228,132343,23851],{"class":287},[228,132345,1404],{"class":238},[228,132347,132348],{"class":230,"line":1293},[228,132349,1679],{"class":238},[228,132351,132352,132354],{"class":230,"line":1308},[228,132353,131106],{"class":2077},[228,132355,15687],{"class":238},[228,132357,132358,132360,132362,132364],{"class":230,"line":1314},[228,132359,131091],{"class":287},[228,132361,51552],{"class":238},[228,132363,72637],{"class":287},[228,132365,1404],{"class":238},[228,132367,132368],{"class":230,"line":1328},[228,132369,1679],{"class":238},[200,132371,132373],{"id":132372},"_1113-定位","11.1.3 定位",[22113,132375,132377],{"id":132376},"_11131-使用场景","11.1.3.1 使用场景",[19,132379,132380],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,132382,132383],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22113,132385,132387],{"id":132386},"_11132-定位组成","11.1.3.2 定位组成",[19,132389,132390],{},"定位 = 定位模式 + 边偏移",[183,132392,132393],{},[186,132394,132395,132398,132399],{},[388,132396,132397],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[388,132400,132401],{},"定位模式",[220,132403,132405],{"className":126611,"code":132404,"language":126613,"meta":141,"style":141},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[30,132406,132407,132413,132427,132444,132461],{"__ignoreMap":141},[228,132408,132409,132411],{"class":230,"line":231},[228,132410,130459],{"class":2077},[228,132412,15687],{"class":238},[228,132414,132415,132418,132420,132422,132424],{"class":230,"line":142},[228,132416,132417],{"class":287},"  position",[228,132419,51552],{"class":238},[228,132421,54879],{"class":287},[228,132423,130474],{"class":238},[228,132425,132426],{"class":297},"\u002F* 定位模式 *\u002F\n",[228,132428,132429,132432,132434,132436,132438,132441],{"class":230,"line":1293},[228,132430,132431],{"class":287},"  top",[228,132433,51552],{"class":238},[228,132435,684],{"class":287},[228,132437,51607],{"class":234},[228,132439,132440],{"class":238},";           ",[228,132442,132443],{"class":297},"\u002F* 边偏移：上 *\u002F\n",[228,132445,132446,132449,132451,132453,132455,132458],{"class":230,"line":1308},[228,132447,132448],{"class":287},"  left",[228,132450,51552],{"class":238},[228,132452,938],{"class":287},[228,132454,51607],{"class":234},[228,132456,132457],{"class":238},";          ",[228,132459,132460],{"class":297},"\u002F* 边偏移：左 *\u002F\n",[228,132462,132463],{"class":230,"line":1314},[228,132464,1679],{"class":238},[376,132466,132467,132476],{},[379,132468,132469],{},[382,132470,132471,132473],{},[385,132472,391],{"align":23851},[385,132474,132475],{"align":23851},"语义",[423,132477,132478,132485,132492,132499],{},[382,132479,132480,132482],{},[428,132481,132064],{"align":23851},[428,132483,132484],{"align":23851},"静态定位",[382,132486,132487,132489],{},[428,132488,54879],{"align":23851},[428,132490,132491],{"align":23851},"相对定位",[382,132493,132494,132496],{},[428,132495,54946],{"align":23851},[428,132497,132498],{"align":23851},"绝对定位",[382,132500,132501,132503],{},[428,132502,86348],{"align":23851},[428,132504,132505],{"align":23851},"固定定位",[19,132507,132508],{},"（1）静态定位：",[1245,132510,132511,132522],{},[186,132512,132513,132514,132517,132518,132521],{},"静态定位是元素的 ",[388,132515,132516],{},"默认定位方式"," ， ",[388,132519,132520],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[186,132523,5296],{},[220,132525,132526],{"className":126611,"code":132404,"language":126613,"meta":141,"style":141},[30,132527,132528,132534,132546,132560,132574],{"__ignoreMap":141},[228,132529,132530,132532],{"class":230,"line":231},[228,132531,130459],{"class":2077},[228,132533,15687],{"class":238},[228,132535,132536,132538,132540,132542,132544],{"class":230,"line":142},[228,132537,132417],{"class":287},[228,132539,51552],{"class":238},[228,132541,54879],{"class":287},[228,132543,130474],{"class":238},[228,132545,132426],{"class":297},[228,132547,132548,132550,132552,132554,132556,132558],{"class":230,"line":1293},[228,132549,132431],{"class":287},[228,132551,51552],{"class":238},[228,132553,684],{"class":287},[228,132555,51607],{"class":234},[228,132557,132440],{"class":238},[228,132559,132443],{"class":297},[228,132561,132562,132564,132566,132568,132570,132572],{"class":230,"line":1308},[228,132563,132448],{"class":287},[228,132565,51552],{"class":238},[228,132567,938],{"class":287},[228,132569,51607],{"class":234},[228,132571,132457],{"class":238},[228,132573,132460],{"class":297},[228,132575,132576],{"class":230,"line":1314},[228,132577,1679],{"class":238},[1245,132579,132580,132583],{},[186,132581,132582],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[186,132584,132585],{},"静态定位在布局时我们几乎不用的",[19,132587,132588],{},"（2）相对定位",[1245,132590,132591,132598],{},[186,132592,132593,132594,132597],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[388,132595,132596],{},"原来的位置"," 来说的（自恋型）",[186,132599,5296],{},[220,132601,132602],{"className":126611,"code":132404,"language":126613,"meta":141,"style":141},[30,132603,132604,132610,132622,132636,132650],{"__ignoreMap":141},[228,132605,132606,132608],{"class":230,"line":231},[228,132607,130459],{"class":2077},[228,132609,15687],{"class":238},[228,132611,132612,132614,132616,132618,132620],{"class":230,"line":142},[228,132613,132417],{"class":287},[228,132615,51552],{"class":238},[228,132617,54879],{"class":287},[228,132619,130474],{"class":238},[228,132621,132426],{"class":297},[228,132623,132624,132626,132628,132630,132632,132634],{"class":230,"line":1293},[228,132625,132431],{"class":287},[228,132627,51552],{"class":238},[228,132629,684],{"class":287},[228,132631,51607],{"class":234},[228,132633,132440],{"class":238},[228,132635,132443],{"class":297},[228,132637,132638,132640,132642,132644,132646,132648],{"class":230,"line":1308},[228,132639,132448],{"class":287},[228,132641,51552],{"class":238},[228,132643,938],{"class":287},[228,132645,51607],{"class":234},[228,132647,132457],{"class":238},[228,132649,132460],{"class":297},[228,132651,132652],{"class":230,"line":1314},[228,132653,1679],{"class":238},[1245,132655,132656],{},[186,132657,132658,132659,132661,132662,132664,132665,132668,132669,132672,132673,132675,132676,132679],{},"相对定位的特点：",[53831,132660],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53831,132663],{},"  ② ",[388,132666,132667],{},"原来"," 在标准流的 ",[388,132670,132671],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53831,132674],{},"  ③因此， ",[388,132677,132678],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,132681,132682],{},"（3）绝对定位",[1245,132684,132685,132694],{},[186,132686,132687,132689,132690,132693],{},[388,132688,132498],{}," 是元素在移动位置的时候，是相对于它 ",[388,132691,132692],{},"祖先元素"," 来说的（拼爹型）",[186,132695,5296],{},[220,132697,132698],{"className":126611,"code":132404,"language":126613,"meta":141,"style":141},[30,132699,132700,132706,132718,132732,132746],{"__ignoreMap":141},[228,132701,132702,132704],{"class":230,"line":231},[228,132703,130459],{"class":2077},[228,132705,15687],{"class":238},[228,132707,132708,132710,132712,132714,132716],{"class":230,"line":142},[228,132709,132417],{"class":287},[228,132711,51552],{"class":238},[228,132713,54879],{"class":287},[228,132715,130474],{"class":238},[228,132717,132426],{"class":297},[228,132719,132720,132722,132724,132726,132728,132730],{"class":230,"line":1293},[228,132721,132431],{"class":287},[228,132723,51552],{"class":238},[228,132725,684],{"class":287},[228,132727,51607],{"class":234},[228,132729,132440],{"class":238},[228,132731,132443],{"class":297},[228,132733,132734,132736,132738,132740,132742,132744],{"class":230,"line":1308},[228,132735,132448],{"class":287},[228,132737,51552],{"class":238},[228,132739,938],{"class":287},[228,132741,51607],{"class":234},[228,132743,132457],{"class":238},[228,132745,132460],{"class":297},[228,132747,132748],{"class":230,"line":1314},[228,132749,1679],{"class":238},[1245,132751,132752,132767,132776,132779],{},[186,132753,132754,132755,132757,132758,132760,132761,132763,132764,132766],{},"绝对定位的特点：",[53831,132756],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53831,132759],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53831,132762],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53831,132765],{},"  (4)固定定位",[186,132768,132769,132771,132772,132775],{},[388,132770,132505],{}," 是元素 ",[388,132773,132774],{},"固定于浏览器可视区的位置"," 。（认死理型）",[186,132777,132778],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[186,132780,132781],{},"语法:",[220,132783,132784],{"className":126611,"code":132404,"language":126613,"meta":141,"style":141},[30,132785,132786,132792,132804,132818,132832],{"__ignoreMap":141},[228,132787,132788,132790],{"class":230,"line":231},[228,132789,130459],{"class":2077},[228,132791,15687],{"class":238},[228,132793,132794,132796,132798,132800,132802],{"class":230,"line":142},[228,132795,132417],{"class":287},[228,132797,51552],{"class":238},[228,132799,54879],{"class":287},[228,132801,130474],{"class":238},[228,132803,132426],{"class":297},[228,132805,132806,132808,132810,132812,132814,132816],{"class":230,"line":1293},[228,132807,132431],{"class":287},[228,132809,51552],{"class":238},[228,132811,684],{"class":287},[228,132813,51607],{"class":234},[228,132815,132440],{"class":238},[228,132817,132443],{"class":297},[228,132819,132820,132822,132824,132826,132828,132830],{"class":230,"line":1308},[228,132821,132448],{"class":287},[228,132823,51552],{"class":238},[228,132825,938],{"class":287},[228,132827,51607],{"class":234},[228,132829,132457],{"class":238},[228,132831,132460],{"class":297},[228,132833,132834],{"class":230,"line":1314},[228,132835,1679],{"class":238},[1245,132837,132838,132847],{},[186,132839,132840,132841,132843,132844,132846],{},"特点:",[53831,132842],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53831,132845],{},"  ②固定定位不再占有原先的位置,完全脱标",[186,132848,132849,132850,132852,132853,132855,132856,132858],{},"固定在版心位置的方法:",[53831,132851],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53831,132854],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53831,132857],{},"  实例：",[220,132860,132861],{"className":126611,"code":132404,"language":126613,"meta":141,"style":141},[30,132862,132863,132869,132881,132895,132909],{"__ignoreMap":141},[228,132864,132865,132867],{"class":230,"line":231},[228,132866,130459],{"class":2077},[228,132868,15687],{"class":238},[228,132870,132871,132873,132875,132877,132879],{"class":230,"line":142},[228,132872,132417],{"class":287},[228,132874,51552],{"class":238},[228,132876,54879],{"class":287},[228,132878,130474],{"class":238},[228,132880,132426],{"class":297},[228,132882,132883,132885,132887,132889,132891,132893],{"class":230,"line":1293},[228,132884,132431],{"class":287},[228,132886,51552],{"class":238},[228,132888,684],{"class":287},[228,132890,51607],{"class":234},[228,132892,132440],{"class":238},[228,132894,132443],{"class":297},[228,132896,132897,132899,132901,132903,132905,132907],{"class":230,"line":1308},[228,132898,132448],{"class":287},[228,132900,51552],{"class":238},[228,132902,938],{"class":287},[228,132904,51607],{"class":234},[228,132906,132457],{"class":238},[228,132908,132460],{"class":297},[228,132910,132911],{"class":230,"line":1314},[228,132912,1679],{"class":238},[1576,132914],{"style":126467,"src":132915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,132917,132918],{},"(5)粘性定位",[1245,132920,132921,132924],{},[186,132922,132923],{},"粘性定位可以被认为是相对定位和固定定位的混合",[186,132925,5296],{},[220,132927,132928],{"className":126611,"code":132404,"language":126613,"meta":141,"style":141},[30,132929,132930,132936,132948,132962,132976],{"__ignoreMap":141},[228,132931,132932,132934],{"class":230,"line":231},[228,132933,130459],{"class":2077},[228,132935,15687],{"class":238},[228,132937,132938,132940,132942,132944,132946],{"class":230,"line":142},[228,132939,132417],{"class":287},[228,132941,51552],{"class":238},[228,132943,54879],{"class":287},[228,132945,130474],{"class":238},[228,132947,132426],{"class":297},[228,132949,132950,132952,132954,132956,132958,132960],{"class":230,"line":1293},[228,132951,132431],{"class":287},[228,132953,51552],{"class":238},[228,132955,684],{"class":287},[228,132957,51607],{"class":234},[228,132959,132440],{"class":238},[228,132961,132443],{"class":297},[228,132963,132964,132966,132968,132970,132972,132974],{"class":230,"line":1308},[228,132965,132448],{"class":287},[228,132967,51552],{"class":238},[228,132969,938],{"class":287},[228,132971,51607],{"class":234},[228,132973,132457],{"class":238},[228,132975,132460],{"class":297},[228,132977,132978],{"class":230,"line":1314},[228,132979,1679],{"class":238},[1245,132981,132982],{},[186,132983,132984,132985,132987,132988,132990,132991,132993,132994,132997,132998,133000],{},"粘性定位的特点：",[53831,132986],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53831,132989],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53831,132992],{},"  ③必须添加 top 、left、right、bottom ",[388,132995,132996],{},"其中一个"," 才有效",[53831,132999],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[220,133002,133003],{"className":126611,"code":132404,"language":126613,"meta":141,"style":141},[30,133004,133005,133011,133023,133037,133051],{"__ignoreMap":141},[228,133006,133007,133009],{"class":230,"line":231},[228,133008,130459],{"class":2077},[228,133010,15687],{"class":238},[228,133012,133013,133015,133017,133019,133021],{"class":230,"line":142},[228,133014,132417],{"class":287},[228,133016,51552],{"class":238},[228,133018,54879],{"class":287},[228,133020,130474],{"class":238},[228,133022,132426],{"class":297},[228,133024,133025,133027,133029,133031,133033,133035],{"class":230,"line":1293},[228,133026,132431],{"class":287},[228,133028,51552],{"class":238},[228,133030,684],{"class":287},[228,133032,51607],{"class":234},[228,133034,132440],{"class":238},[228,133036,132443],{"class":297},[228,133038,133039,133041,133043,133045,133047,133049],{"class":230,"line":1308},[228,133040,132448],{"class":287},[228,133042,51552],{"class":238},[228,133044,938],{"class":287},[228,133046,51607],{"class":234},[228,133048,132457],{"class":238},[228,133050,132460],{"class":297},[228,133052,133053],{"class":230,"line":1314},[228,133054,1679],{"class":238},[1576,133056],{"style":126467,"src":133057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,133059,133060],{},"(6)总结",[376,133062,133063,133078],{},[379,133064,133065],{},[382,133066,133067,133069,133072,133075],{},[385,133068,132401],{"align":23851},[385,133070,133071],{"align":23851},"是否脱标",[385,133073,133074],{"align":23851},"移动位置",[385,133076,133077],{"align":23851},"是否常用",[423,133079,133080,133093,133107,133121,133134],{},[382,133081,133082,133085,133087,133090],{},[428,133083,133084],{"align":23851},"Static 静态定位",[428,133086,104793],{"align":23851},[428,133088,133089],{"align":23851},"不能使用边偏移",[428,133091,133092],{"align":23851},"很少",[382,133094,133095,133098,133101,133104],{},[428,133096,133097],{"align":23851},"Relative 相对定位",[428,133099,133100],{"align":23851},"否(占有位置)",[428,133102,133103],{"align":23851},"相对于自身位置移动",[428,133105,133106],{"align":23851},"基本单独使用",[382,133108,133109,133112,133115,133118],{},[428,133110,133111],{"align":23851},"Absolute 绝对定位",[428,133113,133114],{"align":23851},"是(不占有位置)",[428,133116,133117],{"align":23851},"带有定位的父级",[428,133119,133120],{"align":23851},"要和定位父级元素搭配使用",[382,133122,133123,133126,133128,133131],{},[428,133124,133125],{"align":23851},"Fixed 固定定位",[428,133127,133114],{"align":23851},[428,133129,133130],{"align":23851},"浏览器可视区",[428,133132,133133],{"align":23851},"单独使用,不需要父级",[382,133135,133136,133139,133141,133143],{},[428,133137,133138],{"align":23851},"Sticky 粘性定位",[428,133140,133100],{"align":23851},[428,133142,133130],{"align":23851},[428,133144,133145],{"align":23851},"当前阶段少",[183,133147,133148],{"start":142},[186,133149,133150,133153],{},[388,133151,133152],{},"边偏移"," 则决定了该元素的最终位置",[376,133155,133156,133167],{},[379,133157,133158],{},[382,133159,133160,133163,133165],{},[385,133161,133162],{"align":23851},"边偏移属性",[385,133164,27608],{"align":23851},[385,133166,27605],{"align":23851},[423,133168,133169,133180,133191,133201],{},[382,133170,133171,133174,133177],{},[428,133172,133173],{"align":23851},"top",[428,133175,133176],{"align":23851},"top: 80px;",[428,133178,133179],{"align":23851},"顶端偏移量，定义元素相对于父元素上边线的距离",[382,133181,133182,133185,133188],{},[428,133183,133184],{"align":23851},"bottom",[428,133186,133187],{"align":23851},"bottom: 80px ;",[428,133189,133190],{"align":23851},"底部偏移量，定义元素相对于其父元素下边线的距离",[382,133192,133193,133195,133198],{},[428,133194,23851],{"align":23851},[428,133196,133197],{"align":23851},"left: 80px ;",[428,133199,133200],{"align":23851},"左侧偏移量，定义元素相对于其父元素左边线的距离",[382,133202,133203,133205,133208],{},[428,133204,72637],{"align":23851},[428,133206,133207],{"align":23851},"right: 80px ;",[428,133209,133210],{"align":23851},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1245,133212,133213],{},[186,133214,9140,133215,133217,133218,133220,133221,133223,133224,133227,133228,133230,133231,133233],{},[53831,133216],{},"  ① ",[388,133219,133152],{}," 需要和 ",[388,133222,132401],{}," 联合使用， ",[388,133225,133226],{},"单独使用无效"," ；",[53831,133229],{},"  ②top和bottom不要同时使用",[53831,133232],{},"  ③left和right不要同时使用",[22113,133235,133237],{"id":133236},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,133239,133240],{},"子级是绝对定位的话，父级要用相对定位",[1245,133242,133243,133246,133249,133252],{},[186,133244,133245],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[186,133247,133248],{},"父盒子需要加定位限制子盒子在父盒子内显示",[186,133250,133251],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[186,133253,133254,133255,133258],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[388,133256,133257],{},"子绝父绝"," 也会遇到",[22113,133260,133262],{"id":133261},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1245,133264,133265,133280],{},[186,133266,133267,133268,133271,133272,133275,133276,133279],{},"在使用 ",[388,133269,133270],{},"定位"," 布局时，可能会 ",[388,133273,133274],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[388,133277,133278],{},"z-index"," 来控制盒子的前后次序 (z轴)",[186,133281,5296],{},[220,133283,133284],{"className":126611,"code":132404,"language":126613,"meta":141,"style":141},[30,133285,133286,133292,133304,133318,133332],{"__ignoreMap":141},[228,133287,133288,133290],{"class":230,"line":231},[228,133289,130459],{"class":2077},[228,133291,15687],{"class":238},[228,133293,133294,133296,133298,133300,133302],{"class":230,"line":142},[228,133295,132417],{"class":287},[228,133297,51552],{"class":238},[228,133299,54879],{"class":287},[228,133301,130474],{"class":238},[228,133303,132426],{"class":297},[228,133305,133306,133308,133310,133312,133314,133316],{"class":230,"line":1293},[228,133307,132431],{"class":287},[228,133309,51552],{"class":238},[228,133311,684],{"class":287},[228,133313,51607],{"class":234},[228,133315,132440],{"class":238},[228,133317,132443],{"class":297},[228,133319,133320,133322,133324,133326,133328,133330],{"class":230,"line":1308},[228,133321,132448],{"class":287},[228,133323,51552],{"class":238},[228,133325,938],{"class":287},[228,133327,51607],{"class":234},[228,133329,132457],{"class":238},[228,133331,132460],{"class":297},[228,133333,133334],{"class":230,"line":1314},[228,133335,1679],{"class":238},[1245,133337,133338],{},[186,133339,133340,133341,133217,133343,133345,133346,127774,133349,82654,133352,133354,133355,133357,133358,133361,133362,133227,133365,133367,133368,133371,133373],{},"z-index的特性",[53831,133342],{},[388,133344,127075],{}," ： ",[388,133347,133348],{},"正整数",[388,133350,133351],{},"负整数",[388,133353,430],{}," ，默认值是 0，数值越大，盒子越靠上；",[53831,133356],{},"  ②如果 ",[388,133359,133360],{},"属性值相同"," ，则按照书写顺序， ",[388,133363,133364],{},"后来居上",[53831,133366],{},"  ③数字后面 ",[388,133369,133370],{},"不能加单位",[53831,133372],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22113,133375,133377],{"id":133376},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,133379,133380],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,133382,133383],{},"方法:",[1245,133385,133386,133396],{},[186,133387,133388,133389,133392,133393],{},"left: 50%; 让 ",[388,133390,133391],{},"盒子的左侧"," 移动到 ",[388,133394,133395],{},"父级元素的水平中心位置",[186,133397,133398,133399,133402,133403],{},"margin-left: -100px; 让盒子 ",[388,133400,133401],{},"向左"," 移动 ",[388,133404,133405],{},"自身宽度的一半",[22113,133407,133409],{"id":133408},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[183,133411,133412,133415],{},[186,133413,133414],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[186,133416,133417],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,133419,133420],{},"也就是说绝对定位和固定定位和浮动类似",[183,133422,133423],{"start":1293},[186,133424,133425],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1245,133427,133428,133431,133434],{},[186,133429,133430],{},"可以用inline-block 转换为行内块",[186,133432,133433],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[186,133435,133436],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,133438,133439],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22113,133441,133443],{"id":133442},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[183,133445,133446,133449,133452,133455],{},[186,133447,133448],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[186,133450,133451],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[186,133453,133454],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[186,133456,133457],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[220,133459,133460],{"className":126611,"code":131077,"language":126613,"meta":141,"style":141},[30,133461,133462,133468,133478,133482,133488,133498],{"__ignoreMap":141},[228,133463,133464,133466],{"class":230,"line":231},[228,133465,131084],{"class":2077},[228,133467,15687],{"class":238},[228,133469,133470,133472,133474,133476],{"class":230,"line":142},[228,133471,131091],{"class":287},[228,133473,51552],{"class":238},[228,133475,23851],{"class":287},[228,133477,1404],{"class":238},[228,133479,133480],{"class":230,"line":1293},[228,133481,1679],{"class":238},[228,133483,133484,133486],{"class":230,"line":1308},[228,133485,131106],{"class":2077},[228,133487,15687],{"class":238},[228,133489,133490,133492,133494,133496],{"class":230,"line":1314},[228,133491,131091],{"class":287},[228,133493,51552],{"class":238},[228,133495,72637],{"class":287},[228,133497,1404],{"class":238},[228,133499,133500],{"class":230,"line":1328},[228,133501,1679],{"class":238},[1576,133503],{"style":126467,"src":133504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22113,133506,133508],{"id":133507},"_11138-轮播图","11.1.3.8 轮播图",[1576,133510],{"style":126467,"src":133511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[183,133513,133514],{},[186,133515,133516],{},"制作顺序:",[1245,133518,133519,133522,133525,133534],{},[186,133520,133521],{},"大盒子我们类名为： tb-promo 淘宝广告",[186,133523,133524],{},"里面先放一张图片",[186,133526,133527,133528,133530,133531,133533],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53831,133529],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53831,133532],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[186,133535,133536,133537,133539,133540,133542],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53831,133538],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53831,133541],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[183,133544,133545],{"start":142},[186,133546,133547],{},"代码模块",[220,133549,133551],{"className":126611,"code":133550,"language":126613,"meta":141,"style":141},"\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",[30,133552,133553,133558,133565,133575,133585,133595,133599,133604,133611,133621],{"__ignoreMap":141},[228,133554,133555],{"class":230,"line":231},[228,133556,133557],{"class":297},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[228,133559,133560,133563],{"class":230,"line":142},[228,133561,133562],{"class":2077},".son",[228,133564,15687],{"class":238},[228,133566,133567,133569,133571,133573],{"class":230,"line":1293},[228,133568,132417],{"class":287},[228,133570,51552],{"class":238},[228,133572,54946],{"class":287},[228,133574,1404],{"class":238},[228,133576,133577,133579,133581,133583],{"class":230,"line":1308},[228,133578,132431],{"class":287},[228,133580,51552],{"class":238},[228,133582,430],{"class":287},[228,133584,1404],{"class":238},[228,133586,133587,133589,133591,133593],{"class":230,"line":1314},[228,133588,132448],{"class":287},[228,133590,51552],{"class":238},[228,133592,430],{"class":287},[228,133594,1404],{"class":238},[228,133596,133597],{"class":230,"line":1328},[228,133598,1679],{"class":238},[228,133600,133601],{"class":230,"line":1334},[228,133602,133603],{"class":297},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[228,133605,133606,133609],{"class":230,"line":1425},[228,133607,133608],{"class":2077},".father",[228,133610,15687],{"class":238},[228,133612,133613,133615,133617,133619],{"class":230,"line":1431},[228,133614,132417],{"class":287},[228,133616,51552],{"class":238},[228,133618,54879],{"class":287},[228,133620,1404],{"class":238},[228,133622,133623],{"class":230,"line":1443},[228,133624,1679],{"class":238},[19,133626,133627],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[200,133629,133631],{"id":133630},"_1114-定位数值的移动","11.1.4 定位数值的移动",[1576,133633],{"style":126467,"src":133634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,133636,133637],{},"✨ 黄金口诀：",[19,133639,133640],{},"\"TOP正下负上，LEFT正右负左\"",[19,133642,133643],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,133645,133646],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,133648,133649],{},"✨ 简单记：",[19,133651,133652],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[5241,133654,133655],{},"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":141,"searchDepth":142,"depth":142,"links":133657},[133658],{"id":132185,"depth":142,"text":132186,"children":133659},[133660,133661,133662,133663],{"id":132189,"depth":1293,"text":132190},{"id":132204,"depth":1293,"text":132205},{"id":132372,"depth":1293,"text":132373},{"id":133630,"depth":1293,"text":133631},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132177,"description":154},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133670,"title":133671,"body":133672,"description":154,"extension":155,"meta":135095,"navigation":157,"path":135096,"seo":135097,"stem":135098,"__hash__":135099},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133673,"toc":135074},[133674,133677,133681,133689,133693,133698,133706,133718,133722,133727,133735,133746,133750,133755,133796,133804,133808,133811,133814,133817,133911,133914,134008,134011,134105,134108,134111,134146,134149,134152,134182,134185,134188,134191,134194,134197,134200,134203,134273,134276,134280,134284,134325,134329,134335,134338,134341,134345,134348,134351,134354,134435,134438,134441,134445,134449,134452,134455,134458,134461,134464,134470,134479,134483,134502,134506,134516,134519,134522,134525,134528,134531,134534,134537,134540,134549,134553,134562,134565,134570,134623,134628,134794,134797,134800,134805,134808,134811,134814,134817,134822,134970,134973,134976,134981,134984,134989,135023,135026,135029,135033,135036,135043,135046,135049,135052,135055,135058,135061,135064,135068,135071],[10,133675,133671],{"id":133676},"_12-显示隐藏与图形资源",[14,133678,133680],{"id":133679},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1245,133682,133683,133686],{},[186,133684,133685],{},"目的:让一个元素在页面中消失或者显示出来",[186,133687,133688],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[200,133690,133692],{"id":133691},"_1211-display-显示","12.1.1 display 显示",[183,133694,133695],{},[186,133696,133697],{},"display 设置或检索对象是否及如何显示",[1245,133699,133700,133703],{},[186,133701,133702],{},"display: none;隐藏对象",[186,133704,133705],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[183,133707,133708,133715],{"start":142},[186,133709,133710,133711,133714],{},"特点： display 隐藏元素后， ",[388,133712,133713],{},"不再占"," 有原来的位置",[186,133716,133717],{},"在js中使用非常的广泛",[200,133719,133721],{"id":133720},"_1212-visibility可见性","12.1.2 visibility可见性",[183,133723,133724],{},[186,133725,133726],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1245,133728,133729,133732],{},[186,133730,133731],{},"visibility： visible；元素可见",[186,133733,133734],{},"visibility：hidden；元素隐藏",[183,133736,133737,133740,133743],{"start":142},[186,133738,133739],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[186,133741,133742],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[186,133744,133745],{},"隐藏后继续占有原有位置",[200,133747,133749],{"id":133748},"_1213-overflow溢出","12.1.3 overflow溢出",[1245,133751,133752],{},[186,133753,133754],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[376,133756,133757,133765],{},[379,133758,133759],{},[382,133760,133761,133763],{},[385,133762,127075],{"align":23851},[385,133764,27605],{"align":23851},[423,133766,133767,133775,133782,133789],{},[382,133768,133769,133772],{},[428,133770,133771],{"align":23851},"visible",[428,133773,133774],{"align":23851},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[382,133776,133777,133779],{},[428,133778,61829],{"align":23851},[428,133780,133781],{"align":23851},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[382,133783,133784,133786],{},[428,133785,129031],{"align":23851},[428,133787,133788],{"align":23851},"不管超出内容否，总是显示滚动条",[382,133790,133791,133793],{},[428,133792,72778],{"align":23851},[428,133794,133795],{"align":23851},"超出自动显示滚动条，不超出不显示滚动条",[1245,133797,133798,133801],{},[186,133799,133800],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[186,133802,133803],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[200,133805,133807],{"id":133806},"_1214-案例收获","12.1.4 案例收获",[1576,133809],{"style":126467,"src":133810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,133812,133813],{},"问题：没做出来动态效果，使用hover没实现",[19,133815,133816],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[220,133818,133819],{"className":126611,"code":132043,"language":126613,"meta":141,"style":141},[30,133820,133821,133825,133839,133843,133857,133861,133875,133879,133893,133897],{"__ignoreMap":141},[228,133822,133823],{"class":230,"line":231},[228,133824,132050],{"class":297},[228,133826,133827,133829,133831,133833,133835,133837],{"class":230,"line":142},[228,133828,132055],{"class":2077},[228,133830,79922],{"class":238},[228,133832,128971],{"class":287},[228,133834,51552],{"class":238},[228,133836,132064],{"class":287},[228,133838,129541],{"class":238},[228,133840,133841],{"class":230,"line":1293},[228,133842,132071],{"class":297},[228,133844,133845,133847,133849,133851,133853,133855],{"class":230,"line":1308},[228,133846,132076],{"class":2077},[228,133848,79922],{"class":238},[228,133850,128971],{"class":287},[228,133852,51552],{"class":238},[228,133854,54879],{"class":287},[228,133856,129541],{"class":238},[228,133858,133859],{"class":230,"line":1314},[228,133860,132091],{"class":297},[228,133862,133863,133865,133867,133869,133871,133873],{"class":230,"line":1328},[228,133864,132096],{"class":2077},[228,133866,79922],{"class":238},[228,133868,128971],{"class":287},[228,133870,51552],{"class":238},[228,133872,54946],{"class":287},[228,133874,129541],{"class":238},[228,133876,133877],{"class":230,"line":1334},[228,133878,132111],{"class":297},[228,133880,133881,133883,133885,133887,133889,133891],{"class":230,"line":1425},[228,133882,132116],{"class":2077},[228,133884,79922],{"class":238},[228,133886,128971],{"class":287},[228,133888,51552],{"class":238},[228,133890,86348],{"class":287},[228,133892,129541],{"class":238},[228,133894,133895],{"class":230,"line":1431},[228,133896,132131],{"class":297},[228,133898,133899,133901,133903,133905,133907,133909],{"class":230,"line":1443},[228,133900,132136],{"class":2077},[228,133902,79922],{"class":238},[228,133904,128971],{"class":287},[228,133906,51552],{"class":238},[228,133908,132145],{"class":287},[228,133910,129541],{"class":238},[19,133912,133913],{},"完整代码：",[220,133915,133916],{"className":126611,"code":132043,"language":126613,"meta":141,"style":141},[30,133917,133918,133922,133936,133940,133954,133958,133972,133976,133990,133994],{"__ignoreMap":141},[228,133919,133920],{"class":230,"line":231},[228,133921,132050],{"class":297},[228,133923,133924,133926,133928,133930,133932,133934],{"class":230,"line":142},[228,133925,132055],{"class":2077},[228,133927,79922],{"class":238},[228,133929,128971],{"class":287},[228,133931,51552],{"class":238},[228,133933,132064],{"class":287},[228,133935,129541],{"class":238},[228,133937,133938],{"class":230,"line":1293},[228,133939,132071],{"class":297},[228,133941,133942,133944,133946,133948,133950,133952],{"class":230,"line":1308},[228,133943,132076],{"class":2077},[228,133945,79922],{"class":238},[228,133947,128971],{"class":287},[228,133949,51552],{"class":238},[228,133951,54879],{"class":287},[228,133953,129541],{"class":238},[228,133955,133956],{"class":230,"line":1314},[228,133957,132091],{"class":297},[228,133959,133960,133962,133964,133966,133968,133970],{"class":230,"line":1328},[228,133961,132096],{"class":2077},[228,133963,79922],{"class":238},[228,133965,128971],{"class":287},[228,133967,51552],{"class":238},[228,133969,54946],{"class":287},[228,133971,129541],{"class":238},[228,133973,133974],{"class":230,"line":1334},[228,133975,132111],{"class":297},[228,133977,133978,133980,133982,133984,133986,133988],{"class":230,"line":1425},[228,133979,132116],{"class":2077},[228,133981,79922],{"class":238},[228,133983,128971],{"class":287},[228,133985,51552],{"class":238},[228,133987,86348],{"class":287},[228,133989,129541],{"class":238},[228,133991,133992],{"class":230,"line":1431},[228,133993,132131],{"class":297},[228,133995,133996,133998,134000,134002,134004,134006],{"class":230,"line":1443},[228,133997,132136],{"class":2077},[228,133999,79922],{"class":238},[228,134001,128971],{"class":287},[228,134003,51552],{"class":238},[228,134005,132145],{"class":287},[228,134007,129541],{"class":238},[19,134009,134010],{},"分布思路重点详解：",[220,134012,134013],{"className":126611,"code":132043,"language":126613,"meta":141,"style":141},[30,134014,134015,134019,134033,134037,134051,134055,134069,134073,134087,134091],{"__ignoreMap":141},[228,134016,134017],{"class":230,"line":231},[228,134018,132050],{"class":297},[228,134020,134021,134023,134025,134027,134029,134031],{"class":230,"line":142},[228,134022,132055],{"class":2077},[228,134024,79922],{"class":238},[228,134026,128971],{"class":287},[228,134028,51552],{"class":238},[228,134030,132064],{"class":287},[228,134032,129541],{"class":238},[228,134034,134035],{"class":230,"line":1293},[228,134036,132071],{"class":297},[228,134038,134039,134041,134043,134045,134047,134049],{"class":230,"line":1308},[228,134040,132076],{"class":2077},[228,134042,79922],{"class":238},[228,134044,128971],{"class":287},[228,134046,51552],{"class":238},[228,134048,54879],{"class":287},[228,134050,129541],{"class":238},[228,134052,134053],{"class":230,"line":1314},[228,134054,132091],{"class":297},[228,134056,134057,134059,134061,134063,134065,134067],{"class":230,"line":1328},[228,134058,132096],{"class":2077},[228,134060,79922],{"class":238},[228,134062,128971],{"class":287},[228,134064,51552],{"class":238},[228,134066,54946],{"class":287},[228,134068,129541],{"class":238},[228,134070,134071],{"class":230,"line":1334},[228,134072,132111],{"class":297},[228,134074,134075,134077,134079,134081,134083,134085],{"class":230,"line":1425},[228,134076,132116],{"class":2077},[228,134078,79922],{"class":238},[228,134080,128971],{"class":287},[228,134082,51552],{"class":238},[228,134084,86348],{"class":287},[228,134086,129541],{"class":238},[228,134088,134089],{"class":230,"line":1431},[228,134090,132131],{"class":297},[228,134092,134093,134095,134097,134099,134101,134103],{"class":230,"line":1443},[228,134094,132136],{"class":2077},[228,134096,79922],{"class":238},[228,134098,128971],{"class":287},[228,134100,51552],{"class":238},[228,134102,132145],{"class":287},[228,134104,129541],{"class":238},[1576,134106],{"style":126467,"src":134107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,134109,134110],{},"图片太大，盒子太小，此时需要修改图片的大小",[220,134112,134114],{"className":127358,"code":134113,"language":127360,"meta":141,"style":141},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[30,134115,134116],{"__ignoreMap":141},[228,134117,134118,134120,134122,134124,134126,134129,134131,134133,134136,134139,134141,134144],{"class":230,"line":231},[228,134119,1148],{"class":238},[228,134121,1576],{"class":51415},[228,134123,55354],{"class":2077},[228,134125,284],{"class":238},[228,134127,134128],{"class":343},"\"images\u002Fpic.jpg\"",[228,134130,55362],{"class":2077},[228,134132,284],{"class":238},[228,134134,134135],{"class":343},"\"描述文字\"",[228,134137,134138],{"class":2077}," title",[228,134140,284],{"class":238},[228,134142,134143],{"class":343},"\"悬停提示\"",[228,134145,51422],{"class":238},[1576,134147],{"style":126467,"src":134148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,134150,134151],{},"制造遮罩层",[220,134153,134154],{"className":127358,"code":134113,"language":127360,"meta":141,"style":141},[30,134155,134156],{"__ignoreMap":141},[228,134157,134158,134160,134162,134164,134166,134168,134170,134172,134174,134176,134178,134180],{"class":230,"line":231},[228,134159,1148],{"class":238},[228,134161,1576],{"class":51415},[228,134163,55354],{"class":2077},[228,134165,284],{"class":238},[228,134167,134128],{"class":343},[228,134169,55362],{"class":2077},[228,134171,284],{"class":238},[228,134173,134135],{"class":343},[228,134175,134138],{"class":2077},[228,134177,284],{"class":238},[228,134179,134143],{"class":343},[228,134181,51422],{"class":238},[19,134183,134184],{},"此时是这样的为标准流",[1576,134186],{"style":126467,"src":134187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,134189,134190],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,134192,134193],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,134195,134196],{},"让他在中间，用center(background-position)",[19,134198,134199],{},"将需要变的尽可能放到一个盒子中",[19,134201,134202],{},"放大盒子上内部盒子发生变化",[220,134204,134206],{"className":126611,"code":134205,"language":126613,"meta":141,"style":141},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[30,134207,134208,134214,134224,134228,134235,134245,134257,134269],{"__ignoreMap":141},[228,134209,134210,134212],{"class":230,"line":231},[228,134211,127678],{"class":2077},[228,134213,15687],{"class":238},[228,134215,134216,134218,134220,134222],{"class":230,"line":142},[228,134217,132417],{"class":287},[228,134219,51552],{"class":238},[228,134221,54879],{"class":287},[228,134223,1404],{"class":238},[228,134225,134226],{"class":230,"line":1293},[228,134227,1679],{"class":238},[228,134229,134230,134233],{"class":230,"line":1308},[228,134231,134232],{"class":2077},".child",[228,134234,15687],{"class":238},[228,134236,134237,134239,134241,134243],{"class":230,"line":1314},[228,134238,132417],{"class":287},[228,134240,51552],{"class":238},[228,134242,54946],{"class":287},[228,134244,1404],{"class":238},[228,134246,134247,134249,134251,134253,134255],{"class":230,"line":1328},[228,134248,132431],{"class":287},[228,134250,51552],{"class":238},[228,134252,894],{"class":287},[228,134254,566],{"class":234},[228,134256,1404],{"class":238},[228,134258,134259,134261,134263,134265,134267],{"class":230,"line":1334},[228,134260,132448],{"class":287},[228,134262,51552],{"class":238},[228,134264,894],{"class":287},[228,134266,566],{"class":234},[228,134268,1404],{"class":238},[228,134270,134271],{"class":230,"line":1425},[228,134272,1679],{"class":238},[19,134274,134275],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,134277,134279],{"id":134278},"_122-精灵图","12.2 精灵图",[200,134281,134283],{"id":134282},"_1221-理解","12.2.1 理解",[183,134285,134286,134304],{},[186,134287,134288,134289,132517,134292,134295,134296,134299,134300,134303],{},"目的： ",[388,134290,134291],{},"为了有效地减少服务器接收和发送请求的次数",[388,134293,134294],{},"提高"," 页面的 ",[388,134297,134298],{},"加载速度"," ，出现了 ",[388,134301,134302],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[186,134305,134306,134307,134309,134310,134312,134313,134315,134316,134318,134319,134321,134322,134324],{},"使用精灵图核心：",[53831,134308],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53831,134311],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53831,134314],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53831,134317],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53831,134320],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53831,134323],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[200,134326,134328],{"id":134327},"_1222-扒图","12.2.2 扒图",[220,134330,134333],{"className":134331,"code":134332,"language":5302},[5300],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[30,134334,134332],{"__ignoreMap":141},[1576,134336],{"style":126467,"src":134337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[1576,134339],{"style":126467,"src":134340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[200,134342,134344],{"id":134343},"_1223-精灵图的实现","12.2.3 精灵图的实现",[1576,134346],{"style":126467,"src":134347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,134349,134350],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[1576,134352],{"style":126467,"src":134353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[220,134355,134357],{"className":126611,"code":134356,"language":126613,"meta":141,"style":141},"\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",[30,134358,134359,134364,134371,134383,134395,134414,134431],{"__ignoreMap":141},[228,134360,134361],{"class":230,"line":231},[228,134362,134363],{"class":297},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[228,134365,134366,134369],{"class":230,"line":142},[228,134367,134368],{"class":2077},".icon",[228,134370,15687],{"class":238},[228,134372,134373,134375,134377,134379,134381],{"class":230,"line":1293},[228,134374,70683],{"class":287},[228,134376,51552],{"class":238},[228,134378,938],{"class":287},[228,134380,51607],{"class":234},[228,134382,1404],{"class":238},[228,134384,134385,134387,134389,134391,134393],{"class":230,"line":1308},[228,134386,70903],{"class":287},[228,134388,51552],{"class":238},[228,134390,938],{"class":287},[228,134392,51607],{"class":234},[228,134394,1404],{"class":238},[228,134396,134397,134399,134401,134403,134405,134408,134410,134412],{"class":230,"line":1314},[228,134398,70726],{"class":287},[228,134400,51552],{"class":238},[228,134402,61841],{"class":287},[228,134404,239],{"class":238},[228,134406,134407],{"class":5331},"sprites.png",[228,134409,13829],{"class":238},[228,134411,61851],{"class":287},[228,134413,1404],{"class":238},[228,134415,134416,134418,134420,134422,134424,134427,134429],{"class":230,"line":1328},[228,134417,128871],{"class":287},[228,134419,51552],{"class":238},[228,134421,51878],{"class":287},[228,134423,51607],{"class":234},[228,134425,134426],{"class":287}," -20",[228,134428,51607],{"class":234},[228,134430,1404],{"class":238},[228,134432,134433],{"class":230,"line":1334},[228,134434,1679],{"class":238},[1576,134436],{"style":126467,"src":134437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,134439,134440],{},"在前端中坐标轴的正方向是右和下",[14,134442,134444],{"id":134443},"_123-字体图标","12.3 字体图标",[200,134446,134448],{"id":134447},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,134450,134451],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,134453,134454],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,134456,134457],{},"1.图片文件还是比较大的。",[19,134459,134460],{},"2.图片本身放大和缩小会失真。",[19,134462,134463],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,134465,134466,134467,25856],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[388,134468,134469],{},"字体图标 iconfont",[19,134471,134472,134475,134476,78],{},[388,134473,134474],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[388,134477,134478],{},"展示的是图标，本质属于字体",[200,134480,134482],{"id":134481},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1245,134484,134485,134490,134493,134496,134499],{},[186,134486,134487,134489],{},[388,134488,25992],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[186,134491,134492],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[186,134494,134495],{},"兼容性：几乎支持所有的浏览器，请放心使用",[186,134497,134498],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[186,134500,134501],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[200,134503,134505],{"id":134504},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1245,134507,134508],{},[186,134509,134510,134511],{},"icomoon字体库：",[476,134512,134515],{"href":134513,"rel":134514},"http:\u002F\u002Ficomoon.io\u002F",[23980],"http:\u002F\u002Ficomoon.io",[19,134517,134518],{},"进去之后点icomoon app",[1576,134520],{"style":126467,"src":134521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,134523,134524],{},"可以对其编辑：",[1576,134526],{"style":126467,"src":134527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,134529,134530],{},"生成字体：",[1576,134532],{"style":126467,"src":134533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,134535,134536],{},"下载：",[1576,134538],{"style":126467,"src":134539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1245,134541,134542],{},[186,134543,134544,134545],{},"阿里iconfont字体库： ",[476,134546,134547],{"href":134547,"rel":134548},"http:\u002F\u002Fwww.iconfont.cn\u002F",[23980],[200,134550,134552],{"id":134551},"_1234-字体图标的引入","12.3.4 字体图标的引入",[183,134554,134555],{},[186,134556,134557,134558,134561],{},"把下载包里面的 ",[388,134559,134560],{},"fonts"," 文件夹放入页面根目录下",[1576,134563],{"style":126467,"src":134564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[183,134566,134567],{"start":142},[186,134568,134569],{},"字体文件格式",[376,134571,134572,134581],{},[379,134573,134574],{},[382,134575,134576,134579],{},[385,134577,134578],{"align":23851},"格式",[385,134580,23855],{"align":23851},[423,134582,134583,134593,134603,134613],{},[382,134584,134585,134590],{},[428,134586,134587],{"align":23851},[388,134588,134589],{},".ttf",[428,134591,134592],{"align":23851},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[382,134594,134595,134600],{},[428,134596,134597],{"align":23851},[388,134598,134599],{},".woff",[428,134601,134602],{"align":23851},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[382,134604,134605,134610],{},[428,134606,134607],{"align":23851},[388,134608,134609],{},".eot",[428,134611,134612],{"align":23851},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[382,134614,134615,134620],{},[428,134616,134617],{"align":23851},[388,134618,134619],{},"svg",[428,134621,134622],{"align":23851},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[183,134624,134625],{"start":1293},[186,134626,134627],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[220,134629,134631],{"className":126611,"code":134630,"language":126613,"meta":141,"style":141},"\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",[30,134632,134633,134638,134645,134657,134673,134698,134719,134739,134759,134763,134769,134779,134790],{"__ignoreMap":141},[228,134634,134635],{"class":230,"line":231},[228,134636,134637],{"class":297},"\u002F* 引入字体图标 *\u002F\n",[228,134639,134640,134643],{"class":230,"line":142},[228,134641,134642],{"class":234},"@font-face",[228,134644,15687],{"class":238},[228,134646,134647,134650,134652,134655],{"class":230,"line":1293},[228,134648,134649],{"class":287},"  font-family",[228,134651,51552],{"class":238},[228,134653,134654],{"class":343},"'icomoon'",[228,134656,1404],{"class":238},[228,134658,134659,134662,134664,134666,134668,134671],{"class":230,"line":1308},[228,134660,134661],{"class":287},"  src",[228,134663,51552],{"class":238},[228,134665,61841],{"class":287},[228,134667,239],{"class":238},[228,134669,134670],{"class":343},"'fonts\u002Ficomoon.eot'",[228,134672,2833],{"class":238},[228,134674,134675,134677,134679,134681,134683,134686,134688,134691,134693,134696],{"class":230,"line":1314},[228,134676,134661],{"class":287},[228,134678,51552],{"class":238},[228,134680,61841],{"class":287},[228,134682,239],{"class":238},[228,134684,134685],{"class":343},"'fonts\u002Ficomoon.eot?#iefix'",[228,134687,13829],{"class":238},[228,134689,134690],{"class":287},"format",[228,134692,239],{"class":238},[228,134694,134695],{"class":343},"'embedded-opentype'",[228,134697,38162],{"class":238},[228,134699,134700,134703,134705,134708,134710,134712,134714,134717],{"class":230,"line":1328},[228,134701,134702],{"class":287},"       url",[228,134704,239],{"class":238},[228,134706,134707],{"class":343},"'fonts\u002Ficomoon.woff'",[228,134709,13829],{"class":238},[228,134711,134690],{"class":287},[228,134713,239],{"class":238},[228,134715,134716],{"class":343},"'woff'",[228,134718,38162],{"class":238},[228,134720,134721,134723,134725,134728,134730,134732,134734,134737],{"class":230,"line":1334},[228,134722,134702],{"class":287},[228,134724,239],{"class":238},[228,134726,134727],{"class":343},"'fonts\u002Ficomoon.ttf'",[228,134729,13829],{"class":238},[228,134731,134690],{"class":287},[228,134733,239],{"class":238},[228,134735,134736],{"class":343},"'truetype'",[228,134738,38162],{"class":238},[228,134740,134741,134743,134745,134748,134750,134752,134754,134757],{"class":230,"line":1425},[228,134742,134702],{"class":287},[228,134744,239],{"class":238},[228,134746,134747],{"class":343},"'fonts\u002Ficomoon.svg#icomoon'",[228,134749,13829],{"class":238},[228,134751,134690],{"class":287},[228,134753,239],{"class":238},[228,134755,134756],{"class":343},"'svg'",[228,134758,2833],{"class":238},[228,134760,134761],{"class":230,"line":1431},[228,134762,1679],{"class":238},[228,134764,134765,134767],{"class":230,"line":1443},[228,134766,134368],{"class":2077},[228,134768,15687],{"class":238},[228,134770,134771,134773,134775,134777],{"class":230,"line":1726},[228,134772,134649],{"class":287},[228,134774,51552],{"class":238},[228,134776,134654],{"class":343},[228,134778,1404],{"class":238},[228,134780,134781,134784,134786,134788],{"class":230,"line":1731},[228,134782,134783],{"class":287},"  font-style",[228,134785,51552],{"class":238},[228,134787,63956],{"class":287},[228,134789,1404],{"class":238},[228,134791,134792],{"class":230,"line":1737},[228,134793,1679],{"class":238},[19,134795,134796],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[1576,134798],{"style":126467,"src":134799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[183,134801,134802],{"start":1308},[186,134803,134804],{},"添加字体",[1576,134806],{"style":126467,"src":134807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,134809,134810],{},"复制：",[1576,134812],{"style":126467,"src":134813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,134815,134816],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[183,134818,134819],{"start":1314},[186,134820,134821],{},"代码展示：",[220,134823,134824],{"className":126611,"code":134630,"language":126613,"meta":141,"style":141},[30,134825,134826,134830,134836,134846,134860,134882,134900,134918,134936,134940,134946,134956,134966],{"__ignoreMap":141},[228,134827,134828],{"class":230,"line":231},[228,134829,134637],{"class":297},[228,134831,134832,134834],{"class":230,"line":142},[228,134833,134642],{"class":234},[228,134835,15687],{"class":238},[228,134837,134838,134840,134842,134844],{"class":230,"line":1293},[228,134839,134649],{"class":287},[228,134841,51552],{"class":238},[228,134843,134654],{"class":343},[228,134845,1404],{"class":238},[228,134847,134848,134850,134852,134854,134856,134858],{"class":230,"line":1308},[228,134849,134661],{"class":287},[228,134851,51552],{"class":238},[228,134853,61841],{"class":287},[228,134855,239],{"class":238},[228,134857,134670],{"class":343},[228,134859,2833],{"class":238},[228,134861,134862,134864,134866,134868,134870,134872,134874,134876,134878,134880],{"class":230,"line":1314},[228,134863,134661],{"class":287},[228,134865,51552],{"class":238},[228,134867,61841],{"class":287},[228,134869,239],{"class":238},[228,134871,134685],{"class":343},[228,134873,13829],{"class":238},[228,134875,134690],{"class":287},[228,134877,239],{"class":238},[228,134879,134695],{"class":343},[228,134881,38162],{"class":238},[228,134883,134884,134886,134888,134890,134892,134894,134896,134898],{"class":230,"line":1328},[228,134885,134702],{"class":287},[228,134887,239],{"class":238},[228,134889,134707],{"class":343},[228,134891,13829],{"class":238},[228,134893,134690],{"class":287},[228,134895,239],{"class":238},[228,134897,134716],{"class":343},[228,134899,38162],{"class":238},[228,134901,134902,134904,134906,134908,134910,134912,134914,134916],{"class":230,"line":1334},[228,134903,134702],{"class":287},[228,134905,239],{"class":238},[228,134907,134727],{"class":343},[228,134909,13829],{"class":238},[228,134911,134690],{"class":287},[228,134913,239],{"class":238},[228,134915,134736],{"class":343},[228,134917,38162],{"class":238},[228,134919,134920,134922,134924,134926,134928,134930,134932,134934],{"class":230,"line":1425},[228,134921,134702],{"class":287},[228,134923,239],{"class":238},[228,134925,134747],{"class":343},[228,134927,13829],{"class":238},[228,134929,134690],{"class":287},[228,134931,239],{"class":238},[228,134933,134756],{"class":343},[228,134935,2833],{"class":238},[228,134937,134938],{"class":230,"line":1431},[228,134939,1679],{"class":238},[228,134941,134942,134944],{"class":230,"line":1443},[228,134943,134368],{"class":2077},[228,134945,15687],{"class":238},[228,134947,134948,134950,134952,134954],{"class":230,"line":1726},[228,134949,134649],{"class":287},[228,134951,51552],{"class":238},[228,134953,134654],{"class":343},[228,134955,1404],{"class":238},[228,134957,134958,134960,134962,134964],{"class":230,"line":1731},[228,134959,134783],{"class":287},[228,134961,51552],{"class":238},[228,134963,63956],{"class":287},[228,134965,1404],{"class":238},[228,134967,134968],{"class":230,"line":1737},[228,134969,1679],{"class":238},[1576,134971],{"style":126467,"src":134972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,134974,134975],{},"更加细节展示：",[183,134977,134978],{},[186,134979,134980],{},"html 标签内添加小图标",[1576,134982],{"style":126467,"src":134983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[183,134985,134986],{"start":142},[186,134987,134988],{},"给标签定义字体",[220,134990,134991],{"className":127358,"code":130715,"language":127360,"meta":141,"style":141},[30,134992,134993,134997,135011,135015],{"__ignoreMap":141},[228,134994,134995],{"class":230,"line":231},[228,134996,130722],{"class":297},[228,134998,134999,135001,135003,135005,135007,135009],{"class":230,"line":142},[228,135000,1148],{"class":238},[228,135002,51726],{"class":51415},[228,135004,53601],{"class":2077},[228,135006,284],{"class":238},[228,135008,130735],{"class":343},[228,135010,51422],{"class":238},[228,135012,135013],{"class":230,"line":1293},[228,135014,130742],{"class":238},[228,135016,135017,135019,135021],{"class":230,"line":1308},[228,135018,51900],{"class":238},[228,135020,51726],{"class":51415},[228,135022,51422],{"class":238},[19,135024,135025],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[1576,135027],{"style":126467,"src":135028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[200,135030,135032],{"id":135031},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,135034,135035],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,135037,135038,135039,135042],{},"把压缩包里面的 ",[388,135040,135041],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,135044,135045],{},"打开网站，点下方：",[1576,135047],{"style":126467,"src":135048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[1576,135050],{"style":126467,"src":135051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[1576,135053],{"style":126467,"src":135054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,135056,135057],{},"点yes重新加载",[19,135059,135060],{},"然后重复之前的操作就可以实现了",[19,135062,135063],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[200,135065,135067],{"id":135066},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[1576,135069],{"style":126467,"src":135070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[5241,135072,135073],{},"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":141,"searchDepth":142,"depth":142,"links":135075},[135076,135082,135087],{"id":133679,"depth":142,"text":133680,"children":135077},[135078,135079,135080,135081],{"id":133691,"depth":1293,"text":133692},{"id":133720,"depth":1293,"text":133721},{"id":133748,"depth":1293,"text":133749},{"id":133806,"depth":1293,"text":133807},{"id":134278,"depth":142,"text":134279,"children":135083},[135084,135085,135086],{"id":134282,"depth":1293,"text":134283},{"id":134327,"depth":1293,"text":134328},{"id":134343,"depth":1293,"text":134344},{"id":134443,"depth":142,"text":134444,"children":135088},[135089,135090,135091,135092,135093,135094],{"id":134447,"depth":1293,"text":134448},{"id":134481,"depth":1293,"text":134482},{"id":134504,"depth":1293,"text":134505},{"id":134551,"depth":1293,"text":134552},{"id":135031,"depth":1293,"text":135032},{"id":135066,"depth":1293,"text":135067},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133671,"description":154},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135101,"title":135102,"body":135103,"description":154,"extension":155,"meta":136330,"navigation":157,"path":136331,"seo":136332,"stem":136333,"__hash__":136334},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135104,"toc":136311},[135105,135108,135112,135115,135129,135197,135227,135230,135234,135238,135340,135387,135391,135394,135397,135431,135434,135437,135440,135443,135446,135449,135452,135454,135457,135460,135463,135466,135469,135472,135475,135503,135506,135510,135513,135520,135523,135526,135552,135555,135559,135562,135565,135572,135576,135579,135581,135613,135616,135619,135631,135637,135640,135643,135646,135648,135652,135655,135658,135661,135706,135710,135712,135715,135722,135764,135767,135771,135776,135790,135794,135797,135800,135803,135806,135809,135843,135846,135849,135903,135906,135909,135912,135915,135967,135970,135973,136022,136026,136028,136031,136034,136037,136040,136043,136101,136104,136110,136113,136116,136148,136151,136155,136159,136162,136194,136198,136201,136245,136249,136252,136255,136258,136261,136264,136267,136270,136272,136275,136277,136280,136283,136286,136289,136294,136297,136299,136302,136305,136308],[10,135106,135102],{"id":135107},"_13-界面样式与布局技巧",[14,135109,135111],{"id":135110},"_131-css三角","13.1 css三角",[19,135113,135114],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1245,135116,135117,135120,135123,135126],{},[186,135118,135119],{},"用css 边框可以模拟三角效果",[186,135121,135122],{},"宽度高度为0",[186,135124,135125],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[186,135127,135128],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[220,135130,135132],{"className":126611,"code":135131,"language":126613,"meta":141,"style":141},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[30,135133,135134,135139,135146,135156,135166,135182,135193],{"__ignoreMap":141},[228,135135,135136],{"class":230,"line":231},[228,135137,135138],{"class":297},"\u002F* CSS 实现三角形 *\u002F\n",[228,135140,135141,135144],{"class":230,"line":142},[228,135142,135143],{"class":2077},".triangle",[228,135145,15687],{"class":238},[228,135147,135148,135150,135152,135154],{"class":230,"line":1293},[228,135149,70683],{"class":287},[228,135151,51552],{"class":238},[228,135153,430],{"class":287},[228,135155,1404],{"class":238},[228,135157,135158,135160,135162,135164],{"class":230,"line":1308},[228,135159,70903],{"class":287},[228,135161,51552],{"class":238},[228,135163,430],{"class":287},[228,135165,1404],{"class":238},[228,135167,135168,135170,135172,135174,135176,135178,135180],{"class":230,"line":1314},[228,135169,71011],{"class":287},[228,135171,51552],{"class":238},[228,135173,684],{"class":287},[228,135175,51607],{"class":234},[228,135177,51636],{"class":287},[228,135179,64106],{"class":287},[228,135181,1404],{"class":238},[228,135183,135184,135187,135189,135191],{"class":230,"line":1328},[228,135185,135186],{"class":287},"  border-bottom-color",[228,135188,51552],{"class":238},[228,135190,62484],{"class":287},[228,135192,1404],{"class":238},[228,135194,135195],{"class":230,"line":1334},[228,135196,1679],{"class":238},[220,135198,135199],{"className":126611,"code":130768,"language":126613,"meta":141,"style":141},[30,135200,135201,135207,135223],{"__ignoreMap":141},[228,135202,135203,135205],{"class":230,"line":231},[228,135204,51726],{"class":51415},[228,135206,15687],{"class":238},[228,135208,135209,135211,135213,135215,135217,135219,135221],{"class":230,"line":142},[228,135210,71011],{"class":287},[228,135212,51552],{"class":238},[228,135214,456],{"class":287},[228,135216,51607],{"class":234},[228,135218,51636],{"class":287},[228,135220,130003],{"class":287},[228,135222,1404],{"class":238},[228,135224,135225],{"class":230,"line":1293},[228,135226,1679],{"class":238},[1576,135228],{"style":126467,"src":135229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,135231,135233],{"id":135232},"_132-css用户界面样式","13.2 css用户界面样式",[200,135235,135237],{"id":135236},"_1321-鼠标样式","13.2.1 鼠标样式",[220,135239,135241],{"className":126611,"code":135240,"language":126613,"meta":141,"style":141},"\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",[30,135242,135243,135248,135267,135285,135304,135321],{"__ignoreMap":141},[228,135244,135245],{"class":230,"line":231},[228,135246,135247],{"class":297},"\u002F* 鼠标样式 *\u002F\n",[228,135249,135250,135252,135254,135257,135259,135261,135264],{"class":230,"line":142},[228,135251,51726],{"class":51415},[228,135253,79922],{"class":238},[228,135255,135256],{"class":287},"cursor",[228,135258,51552],{"class":238},[228,135260,62145],{"class":287},[228,135262,135263],{"class":238},"; }   ",[228,135265,135266],{"class":297},"\u002F* 手型 *\u002F\n",[228,135268,135269,135271,135273,135275,135277,135280,135282],{"class":230,"line":1293},[228,135270,51726],{"class":51415},[228,135272,79922],{"class":238},[228,135274,135256],{"class":287},[228,135276,51552],{"class":238},[228,135278,135279],{"class":287},"default",[228,135281,135263],{"class":238},[228,135283,135284],{"class":297},"\u002F* 默认 *\u002F\n",[228,135286,135287,135289,135291,135293,135295,135298,135301],{"class":230,"line":1308},[228,135288,51726],{"class":51415},[228,135290,79922],{"class":238},[228,135292,135256],{"class":287},[228,135294,51552],{"class":238},[228,135296,135297],{"class":287},"move",[228,135299,135300],{"class":238},"; }      ",[228,135302,135303],{"class":297},"\u002F* 移动 *\u002F\n",[228,135305,135306,135308,135310,135312,135314,135316,135318],{"class":230,"line":1314},[228,135307,51726],{"class":51415},[228,135309,79922],{"class":238},[228,135311,135256],{"class":287},[228,135313,51552],{"class":238},[228,135315,5302],{"class":287},[228,135317,135300],{"class":238},[228,135319,135320],{"class":297},"\u002F* 文本 *\u002F\n",[228,135322,135323,135325,135327,135329,135331,135334,135337],{"class":230,"line":1328},[228,135324,51726],{"class":51415},[228,135326,79922],{"class":238},[228,135328,135256],{"class":287},[228,135330,51552],{"class":238},[228,135332,135333],{"class":287},"not-allowed",[228,135335,135336],{"class":238},"; } ",[228,135338,135339],{"class":297},"\u002F* 禁止 *\u002F\n",[376,135341,135342,135350],{},[379,135343,135344],{},[382,135345,135346,135348],{},[385,135347,127075],{"align":23851},[385,135349,27605],{"align":23851},[423,135351,135352,135359,135366,135373,135380],{},[382,135353,135354,135356],{},[428,135355,135279],{"align":23851},[428,135357,135358],{"align":23851},"小白 默认",[382,135360,135361,135363],{},[428,135362,62145],{"align":23851},[428,135364,135365],{"align":23851},"小手",[382,135367,135368,135370],{},[428,135369,135297],{"align":23851},[428,135371,135372],{"align":23851},"移动",[382,135374,135375,135377],{},[428,135376,5302],{"align":23851},[428,135378,135379],{"align":23851},"文本",[382,135381,135382,135384],{},[428,135383,135333],{"align":23851},[428,135385,135386],{"align":23851},"禁止",[200,135388,135390],{"id":135389},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,135392,135393],{},"去除表单轮廓线",[19,135395,135396],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[220,135398,135399],{"className":126611,"code":129975,"language":126613,"meta":141,"style":141},[30,135400,135401,135405,135411,135427],{"__ignoreMap":141},[228,135402,135403],{"class":230,"line":231},[228,135404,129982],{"class":297},[228,135406,135407,135409],{"class":230,"line":142},[228,135408,51726],{"class":51415},[228,135410,15687],{"class":238},[228,135412,135413,135415,135417,135419,135421,135423,135425],{"class":230,"line":1293},[228,135414,71011],{"class":287},[228,135416,51552],{"class":238},[228,135418,456],{"class":287},[228,135420,51607],{"class":234},[228,135422,51636],{"class":287},[228,135424,130003],{"class":287},[228,135426,1404],{"class":238},[228,135428,135429],{"class":230,"line":1308},[228,135430,1679],{"class":238},[19,135432,135433],{},"文本域：",[1576,135435],{"style":126467,"src":135436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,135438,135439],{},"此时会有一个空白区域",[1576,135441],{"style":126467,"src":135442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,135444,135445],{},"写在同一行就不会出现这个问题",[1576,135447],{"style":126467,"src":135448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,135450,135451],{},"文本域是行内块元素，一定记住！！！",[19,135453,98348],{},[1576,135455],{"style":126467,"src":135456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,135458,135459],{},"文本域尽量放在一行",[19,135461,135462],{},"知识回顾：cols是列，rols是行",[1576,135464],{"style":126467,"src":135465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,135467,135468],{},"它可以进行拖动，显然这是我们不愿意看到的",[1576,135470],{"style":126467,"src":135471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,135473,135474],{},"使用resize进行解决",[220,135476,135478],{"className":126611,"code":135477,"language":126613,"meta":141,"style":141},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[30,135479,135480,135486,135499],{"__ignoreMap":141},[228,135481,135482,135484],{"class":230,"line":231},[228,135483,53936],{"class":51415},[228,135485,15687],{"class":238},[228,135487,135488,135490,135492,135494,135496],{"class":230,"line":142},[228,135489,70913],{"class":287},[228,135491,51552],{"class":238},[228,135493,54852],{"class":287},[228,135495,130474],{"class":238},[228,135497,135498],{"class":297},"\u002F* 取消表单轮廓线 *\u002F\n",[228,135500,135501],{"class":230,"line":1293},[228,135502,1679],{"class":238},[19,135504,135505],{},"此时就无法通过右下方实现拖动了",[200,135507,135509],{"id":135508},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,135511,135512],{},"实现一个盒子中的文字和图片对齐",[19,135514,135515,135516,135519],{},"用于设置一个元素的 ",[388,135517,135518],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,135521,135522],{},"图片和文字默认是基线对齐",[1576,135524],{"style":126467,"src":135525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[220,135527,135528],{"className":126611,"code":135477,"language":126613,"meta":141,"style":141},[30,135529,135530,135536,135548],{"__ignoreMap":141},[228,135531,135532,135534],{"class":230,"line":231},[228,135533,53936],{"class":51415},[228,135535,15687],{"class":238},[228,135537,135538,135540,135542,135544,135546],{"class":230,"line":142},[228,135539,70913],{"class":287},[228,135541,51552],{"class":238},[228,135543,54852],{"class":287},[228,135545,130474],{"class":238},[228,135547,135498],{"class":297},[228,135549,135550],{"class":230,"line":1293},[228,135551,1679],{"class":238},[1576,135553],{"style":126467,"src":135554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22113,135556,135558],{"id":135557},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,135560,135561],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[1576,135563],{"style":126467,"src":135564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,135566,135567,135568,135571],{},"此时可以给图片、表单这些行内块元素的 ",[388,135569,135570],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22113,135573,135575],{"id":135574},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,135577,135578],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,135580,14748],{},[220,135582,135584],{"className":126611,"code":135583,"language":126613,"meta":141,"style":141},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[30,135585,135586,135591,135597,135609],{"__ignoreMap":141},[228,135587,135588],{"class":230,"line":231},[228,135589,135590],{"class":297},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[228,135592,135593,135595],{"class":230,"line":142},[228,135594,1576],{"class":51415},[228,135596,15687],{"class":238},[228,135598,135599,135602,135604,135607],{"class":230,"line":1293},[228,135600,135601],{"class":287},"  vertical-align",[228,135603,51552],{"class":238},[228,135605,135606],{"class":287},"middle",[228,135608,1404],{"class":238},[228,135610,135611],{"class":230,"line":1308},[228,135612,1679],{"class":238},[1576,135614],{"style":126467,"src":135615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,135617,135618],{},"主要解决方法有两种：",[183,135620,135621],{},[186,135622,135623,135626,135627,135630],{},[388,135624,135625],{},"给图片"," 添加 ",[388,135628,135629],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,135632,135633,135634],{},"2.把图片转换为块级元素 ",[388,135635,135636],{},"display: block",[19,135638,135639],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,135641,135642],{},"img {",[19,135644,135645],{},"vertical-align:middle;",[19,135647,1184],{},[200,135649,135651],{"id":135650},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,135653,135654],{},"效果：",[1576,135656],{"style":126467,"src":135657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,135659,135660],{},"单行文本溢出显示省略号--必须满足三个条件：",[220,135662,135664],{"className":126611,"code":135663,"language":126613,"meta":141,"style":141},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[30,135665,135666,135671,135677,135687,135692,135702],{"__ignoreMap":141},[228,135667,135668],{"class":230,"line":231},[228,135669,135670],{"class":297},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[228,135672,135673,135675],{"class":230,"line":142},[228,135674,1576],{"class":51415},[228,135676,15687],{"class":238},[228,135678,135679,135681,135683,135685],{"class":230,"line":1293},[228,135680,135601],{"class":287},[228,135682,51552],{"class":238},[228,135684,135606],{"class":287},[228,135686,1404],{"class":238},[228,135688,135689],{"class":230,"line":1308},[228,135690,135691],{"class":297},"  \u002F* 或 *\u002F\n",[228,135693,135694,135696,135698,135700],{"class":230,"line":1314},[228,135695,128227],{"class":287},[228,135697,51552],{"class":238},[228,135699,60984],{"class":287},[228,135701,1404],{"class":238},[228,135703,135704],{"class":230,"line":1328},[228,135705,1679],{"class":238},[200,135707,135709],{"id":135708},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,135711,135654],{},[1576,135713],{"style":126467,"src":135714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,135716,135717,135718,135721],{},"多行文本溢出显示省略号， ",[388,135719,135720],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[220,135723,135724],{"className":126611,"code":135663,"language":126613,"meta":141,"style":141},[30,135725,135726,135730,135736,135746,135750,135760],{"__ignoreMap":141},[228,135727,135728],{"class":230,"line":231},[228,135729,135670],{"class":297},[228,135731,135732,135734],{"class":230,"line":142},[228,135733,1576],{"class":51415},[228,135735,15687],{"class":238},[228,135737,135738,135740,135742,135744],{"class":230,"line":1293},[228,135739,135601],{"class":287},[228,135741,51552],{"class":238},[228,135743,135606],{"class":287},[228,135745,1404],{"class":238},[228,135747,135748],{"class":230,"line":1308},[228,135749,135691],{"class":297},[228,135751,135752,135754,135756,135758],{"class":230,"line":1314},[228,135753,128227],{"class":287},[228,135755,51552],{"class":238},[228,135757,60984],{"class":287},[228,135759,1404],{"class":238},[228,135761,135762],{"class":230,"line":1328},[228,135763,1679],{"class":238},[19,135765,135766],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,135768,135770],{"id":135769},"_133-常见布局技巧","13.3 常见布局技巧",[19,135772,135773],{},[388,135774,135775],{},"巧妙利用一个技术更快更好的布局：",[183,135777,135778,135781,135784,135787],{},[186,135779,135780],{},"margin负值的运用",[186,135782,135783],{},"文字围绕浮动元素",[186,135785,135786],{},"行内块的巧妙运用",[186,135788,135789],{},"CSS三角强化",[200,135791,135793],{"id":135792},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,135795,135796],{},"应用场景：",[1576,135798],{"style":126467,"src":135799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[1576,135801],{"style":126467,"src":135802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,135804,135805],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,135807,135808],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[220,135810,135811],{"className":126611,"code":129975,"language":126613,"meta":141,"style":141},[30,135812,135813,135817,135823,135839],{"__ignoreMap":141},[228,135814,135815],{"class":230,"line":231},[228,135816,129982],{"class":297},[228,135818,135819,135821],{"class":230,"line":142},[228,135820,51726],{"class":51415},[228,135822,15687],{"class":238},[228,135824,135825,135827,135829,135831,135833,135835,135837],{"class":230,"line":1293},[228,135826,71011],{"class":287},[228,135828,51552],{"class":238},[228,135830,456],{"class":287},[228,135832,51607],{"class":234},[228,135834,51636],{"class":287},[228,135836,130003],{"class":287},[228,135838,1404],{"class":238},[228,135840,135841],{"class":230,"line":1308},[228,135842,1679],{"class":238},[1576,135844],{"style":126467,"src":135845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,135847,135848],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[220,135850,135852],{"className":126611,"code":135851,"language":126613,"meta":141,"style":141},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[30,135853,135854,135859,135865,135875,135887,135899],{"__ignoreMap":141},[228,135855,135856],{"class":230,"line":231},[228,135857,135858],{"class":297},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[228,135860,135861,135863],{"class":230,"line":142},[228,135862,130459],{"class":2077},[228,135864,15687],{"class":238},[228,135866,135867,135869,135871,135873],{"class":230,"line":1293},[228,135868,132417],{"class":287},[228,135870,51552],{"class":238},[228,135872,54879],{"class":287},[228,135874,1404],{"class":238},[228,135876,135877,135879,135881,135883,135885],{"class":230,"line":1308},[228,135878,132431],{"class":287},[228,135880,51552],{"class":238},[228,135882,684],{"class":287},[228,135884,51607],{"class":234},[228,135886,1404],{"class":238},[228,135888,135889,135891,135893,135895,135897],{"class":230,"line":1314},[228,135890,132448],{"class":287},[228,135892,51552],{"class":238},[228,135894,938],{"class":287},[228,135896,51607],{"class":234},[228,135898,1404],{"class":238},[228,135900,135901],{"class":230,"line":1328},[228,135902,1679],{"class":238},[19,135904,135905],{},"加上上述代码会发现：",[1576,135907],{"style":126467,"src":135908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,135910,135911],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,135913,135914],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[220,135916,135917],{"className":126611,"code":135851,"language":126613,"meta":141,"style":141},[30,135918,135919,135923,135929,135939,135951,135963],{"__ignoreMap":141},[228,135920,135921],{"class":230,"line":231},[228,135922,135858],{"class":297},[228,135924,135925,135927],{"class":230,"line":142},[228,135926,130459],{"class":2077},[228,135928,15687],{"class":238},[228,135930,135931,135933,135935,135937],{"class":230,"line":1293},[228,135932,132417],{"class":287},[228,135934,51552],{"class":238},[228,135936,54879],{"class":287},[228,135938,1404],{"class":238},[228,135940,135941,135943,135945,135947,135949],{"class":230,"line":1308},[228,135942,132431],{"class":287},[228,135944,51552],{"class":238},[228,135946,684],{"class":287},[228,135948,51607],{"class":234},[228,135950,1404],{"class":238},[228,135952,135953,135955,135957,135959,135961],{"class":230,"line":1314},[228,135954,132448],{"class":287},[228,135956,51552],{"class":238},[228,135958,938],{"class":287},[228,135960,51607],{"class":234},[228,135962,1404],{"class":238},[228,135964,135965],{"class":230,"line":1328},[228,135966,1679],{"class":238},[19,135968,135969],{},"解决方式2：",[19,135971,135972],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[220,135974,135976],{"className":126611,"code":135975,"language":126613,"meta":141,"style":141},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[30,135977,135978,135984,135994,136006,136018],{"__ignoreMap":141},[228,135979,135980,135982],{"class":230,"line":231},[228,135981,51726],{"class":51415},[228,135983,15687],{"class":238},[228,135985,135986,135988,135990,135992],{"class":230,"line":142},[228,135987,132417],{"class":287},[228,135989,51552],{"class":238},[228,135991,54879],{"class":287},[228,135993,1404],{"class":238},[228,135995,135996,135998,136000,136002,136004],{"class":230,"line":1293},[228,135997,132431],{"class":287},[228,135999,51552],{"class":238},[228,136001,684],{"class":287},[228,136003,51607],{"class":234},[228,136005,1404],{"class":238},[228,136007,136008,136010,136012,136014,136016],{"class":230,"line":1308},[228,136009,132448],{"class":287},[228,136011,51552],{"class":238},[228,136013,938],{"class":287},[228,136015,51607],{"class":234},[228,136017,1404],{"class":238},[228,136019,136020],{"class":230,"line":1314},[228,136021,1679],{"class":238},[200,136023,136025],{"id":136024},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,136027,135796],{},[1576,136029],{"style":126467,"src":136030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,136032,136033],{},"实现结构图：",[1576,136035],{"style":126467,"src":136036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,136038,136039],{},"巧妙运用浮动元素不会压住文字的特性",[19,136041,136042],{},"代码显示：",[220,136044,136046],{"className":126611,"code":136045,"language":126613,"meta":141,"style":141},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[30,136047,136048,136054,136064,136068,136073,136077,136083,136097],{"__ignoreMap":141},[228,136049,136050,136052],{"class":230,"line":231},[228,136051,130459],{"class":2077},[228,136053,15687],{"class":238},[228,136055,136056,136058,136060,136062],{"class":230,"line":142},[228,136057,131091],{"class":287},[228,136059,51552],{"class":238},[228,136061,23851],{"class":287},[228,136063,1404],{"class":238},[228,136065,136066],{"class":230,"line":1293},[228,136067,1679],{"class":238},[228,136069,136070],{"class":230,"line":1308},[228,136071,136072],{"class":238},"```Css\n",[228,136074,136075],{"class":230,"line":1314},[228,136076,130454],{"class":297},[228,136078,136079,136081],{"class":230,"line":1328},[228,136080,130459],{"class":2077},[228,136082,15687],{"class":238},[228,136084,136085,136087,136089,136091,136093,136095],{"class":230,"line":1334},[228,136086,70585],{"class":287},[228,136088,51552],{"class":238},[228,136090,430],{"class":287},[228,136092,51671],{"class":287},[228,136094,130474],{"class":238},[228,136096,130477],{"class":297},[228,136098,136099],{"class":230,"line":1425},[228,136100,1679],{"class":238},[19,136102,136103],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[220,136105,136108],{"className":136106,"code":136107,"language":5302},[5300],"\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",[30,136109,136107],{"__ignoreMap":141},[1576,136111],{"style":126467,"src":136112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,136114,136115],{},"最终展示结果：",[220,136117,136118],{"className":126611,"code":130447,"language":126613,"meta":141,"style":141},[30,136119,136120,136124,136130,136144],{"__ignoreMap":141},[228,136121,136122],{"class":230,"line":231},[228,136123,130454],{"class":297},[228,136125,136126,136128],{"class":230,"line":142},[228,136127,130459],{"class":2077},[228,136129,15687],{"class":238},[228,136131,136132,136134,136136,136138,136140,136142],{"class":230,"line":1293},[228,136133,70585],{"class":287},[228,136135,51552],{"class":238},[228,136137,430],{"class":287},[228,136139,51671],{"class":287},[228,136141,130474],{"class":238},[228,136143,130477],{"class":297},[228,136145,136146],{"class":230,"line":1308},[228,136147,1679],{"class":238},[1576,136149],{"style":126467,"src":136150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,136152,136154],{"id":136153},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[200,136156,136158],{"id":136157},"_1341-原理","13.4.1 原理",[1576,136160],{"style":126467,"src":136161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[220,136163,136164],{"className":126611,"code":130447,"language":126613,"meta":141,"style":141},[30,136165,136166,136170,136176,136190],{"__ignoreMap":141},[228,136167,136168],{"class":230,"line":231},[228,136169,130454],{"class":297},[228,136171,136172,136174],{"class":230,"line":142},[228,136173,130459],{"class":2077},[228,136175,15687],{"class":238},[228,136177,136178,136180,136182,136184,136186,136188],{"class":230,"line":1293},[228,136179,70585],{"class":287},[228,136181,51552],{"class":238},[228,136183,430],{"class":287},[228,136185,51671],{"class":287},[228,136187,130474],{"class":238},[228,136189,130477],{"class":297},[228,136191,136192],{"class":230,"line":1308},[228,136193,1679],{"class":238},[200,136195,136197],{"id":136196},"_1342-实例","13.4.2 实例",[1576,136199],{"style":126467,"src":136200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[220,136202,136203],{"className":126611,"code":131077,"language":126613,"meta":141,"style":141},[30,136204,136205,136211,136221,136225,136231,136241],{"__ignoreMap":141},[228,136206,136207,136209],{"class":230,"line":231},[228,136208,131084],{"class":2077},[228,136210,15687],{"class":238},[228,136212,136213,136215,136217,136219],{"class":230,"line":142},[228,136214,131091],{"class":287},[228,136216,51552],{"class":238},[228,136218,23851],{"class":287},[228,136220,1404],{"class":238},[228,136222,136223],{"class":230,"line":1293},[228,136224,1679],{"class":238},[228,136226,136227,136229],{"class":230,"line":1308},[228,136228,131106],{"class":2077},[228,136230,15687],{"class":238},[228,136232,136233,136235,136237,136239],{"class":230,"line":1314},[228,136234,131091],{"class":287},[228,136236,51552],{"class":238},[228,136238,72637],{"class":287},[228,136240,1404],{"class":238},[228,136242,136243],{"class":230,"line":1328},[228,136244,1679],{"class":238},[14,136246,136248],{"id":136247},"_135-css的初始化","13.5 css的初始化",[19,136250,136251],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,136253,136254],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,136256,136257],{},"每个网页都必须首先进行 CSS初始化。",[19,136259,136260],{},"这里我们以 京东CSS初始化代码为例。",[19,136262,136263],{},"在网页右键查看网页源代码",[19,136265,136266],{},"找到css的link引入语句",[19,136268,136269],{},"然后ctrl+f 输入body",[19,136271,77341],{},[1576,136273],{"style":126467,"src":136274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,136276,77364],{},[1576,136278],{"style":126467,"src":136279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,136281,136282],{},"③打开了网页上传压缩的代码",[1576,136284],{"style":126467,"src":136285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,136287,136288],{},"④从body前可以查看这个网页的初始化代码",[19,136290,136291],{},[388,136292,136293],{},"Unicode编码字体：",[19,136295,136296],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,136298,83322],{},[19,136300,136301],{},"黑体 \\9ED1\\4F53",[19,136303,136304],{},"宋体 \\5B8B\\4F53",[19,136306,136307],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[5241,136309,136310],{},"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":141,"searchDepth":142,"depth":142,"links":136312},[136313,136314,136321,136325,136329],{"id":135110,"depth":142,"text":135111},{"id":135232,"depth":142,"text":135233,"children":136315},[136316,136317,136318,136319,136320],{"id":135236,"depth":1293,"text":135237},{"id":135389,"depth":1293,"text":135390},{"id":135508,"depth":1293,"text":135509},{"id":135650,"depth":1293,"text":135651},{"id":135708,"depth":1293,"text":135709},{"id":135769,"depth":142,"text":135770,"children":136322},[136323,136324],{"id":135792,"depth":1293,"text":135793},{"id":136024,"depth":1293,"text":136025},{"id":136153,"depth":142,"text":136154,"children":136326},[136327,136328],{"id":136157,"depth":1293,"text":136158},{"id":136196,"depth":1293,"text":136197},{"id":136247,"depth":142,"text":136248},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135102,"description":154},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136336,"title":136337,"body":136338,"description":154,"extension":155,"meta":138024,"navigation":157,"path":138025,"seo":138026,"stem":138027,"__hash__":138028},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136339,"toc":138013},[136340,136343,136347,136351,136354,136361,136364,136367,136405,136408,136410,136424,136428,136437,136441,136446,136449,136452,136455,136490,136495,136498,136528,136531,136536,136539,136542,136572,136575,136629,136632,136636,136641,136653,136656,136660,136690,136693,136698,136701,136731,136734,136738,136755,136759,136763,136766,136799,136802,136806,136809,136812,136815,136818,136821,136932,136935,136938,136941,137043,137046,137050,137054,137058,137061,137101,137104,137106,137122,137126,137129,137134,137215,137218,137221,137347,137352,137355,137363,137366,137371,137456,137459,137463,137466,137469,137473,137493,137498,137582,137585,137590,137593,137596,137674,137677,137680,137683,137686,137689,137694,137697,137700,137772,137775,137780,137783,137880,137883,137889,137892,137895,137898,137901,137904,137907,137910,137913,137917,137922,137925,137958,137963,137966,138007,138010],[10,136341,136337],{"id":136342},"_14-html5与css3新特性",[14,136344,136346],{"id":136345},"_141-html5的新特性","14.1 HTML5的新特性",[200,136348,136350],{"id":136349},"_1411-基本标签","14.1.1 基本标签",[19,136352,136353],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,136355,136356,136357,136360],{},"这些新特性都有兼容性问题，基本是 ",[388,136358,136359],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,136362,136363],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,136365,136366],{},"现在使用的是新特性：",[1245,136368,136369,136375,136381,136387,136393,136399],{},[186,136370,136371,136374],{},[30,136372,136373],{},"\u003Cheader>"," 头部标签",[186,136376,136377,136380],{},[30,136378,136379],{},"\u003Cnav>"," 导航标签",[186,136382,136383,136386],{},[30,136384,136385],{},"\u003Carticle>"," 内容标签",[186,136388,136389,136392],{},[30,136390,136391],{},"\u003Csection>"," 定义文档某个区域",[186,136394,136395,136398],{},[30,136396,136397],{},"\u003Caside>"," 侧边栏标签",[186,136400,136401,136404],{},[30,136402,136403],{},"\u003Cfooter>"," 尾部标签",[1576,136406],{"style":126467,"src":136407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,136409,268],{},[1245,136411,136412,136415,136418,136421],{},[186,136413,136414],{},"这种语义化标准主要是针对搜索引擎的",[186,136416,136417],{},"这些标签页面中可以经常使用",[186,136419,136420],{},"在IE9中，需要把这些元素转换为块级元素",[186,136422,136423],{},"移动端更喜欢使用这些标签",[200,136425,136427],{"id":136426},"_1412-多媒体标签","14.1.2 多媒体标签",[19,136429,136430,136431,136433,136434,136436],{},"音频 ",[388,136432,28290],{}," 和视频 ",[388,136435,28299],{}," 两个标签",[22113,136438,136440],{"id":136439},"_14121-视频标签-video","14.1.2.1 视频标签- video",[183,136442,136443],{},[186,136444,136445],{},"支持格式：",[1576,136447],{"style":126467,"src":136448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,136450,136451],{},"尽量使用MP4，兼容性好",[19,136453,136454],{},"用MP4就可以",[220,136456,136458],{"className":127358,"code":136457,"language":127360,"meta":141,"style":141},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[30,136459,136460],{"__ignoreMap":141},[228,136461,136462,136464,136466,136468,136470,136473,136475,136478,136481,136484,136486,136488],{"class":230,"line":231},[228,136463,1148],{"class":238},[228,136465,28299],{"class":51415},[228,136467,55354],{"class":2077},[228,136469,284],{"class":238},[228,136471,136472],{"class":343},"\"movie.mp4\"",[228,136474,92538],{"class":2077},[228,136476,136477],{"class":2077}," autoplay",[228,136479,136480],{"class":2077}," muted",[228,136482,136483],{"class":2077}," loop",[228,136485,55429],{"class":238},[228,136487,28299],{"class":51415},[228,136489,51422],{"class":238},[183,136491,136492],{"start":142},[186,136493,136494],{},"兼容写法",[19,136496,136497],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[220,136499,136500],{"className":127358,"code":136457,"language":127360,"meta":141,"style":141},[30,136501,136502],{"__ignoreMap":141},[228,136503,136504,136506,136508,136510,136512,136514,136516,136518,136520,136522,136524,136526],{"class":230,"line":231},[228,136505,1148],{"class":238},[228,136507,28299],{"class":51415},[228,136509,55354],{"class":2077},[228,136511,284],{"class":238},[228,136513,136472],{"class":343},[228,136515,92538],{"class":2077},[228,136517,136477],{"class":2077},[228,136519,136480],{"class":2077},[228,136521,136483],{"class":2077},[228,136523,55429],{"class":238},[228,136525,28299],{"class":51415},[228,136527,51422],{"class":238},[19,136529,136530],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[183,136532,136533],{"start":1293},[186,136534,136535],{},"video常用属性",[1576,136537],{"style":126467,"src":136538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,136540,136541],{},"poster属性后面是跟的等待加载图片的地址",[220,136543,136544],{"className":127358,"code":134113,"language":127360,"meta":141,"style":141},[30,136545,136546],{"__ignoreMap":141},[228,136547,136548,136550,136552,136554,136556,136558,136560,136562,136564,136566,136568,136570],{"class":230,"line":231},[228,136549,1148],{"class":238},[228,136551,1576],{"class":51415},[228,136553,55354],{"class":2077},[228,136555,284],{"class":238},[228,136557,134128],{"class":343},[228,136559,55362],{"class":2077},[228,136561,284],{"class":238},[228,136563,134135],{"class":343},[228,136565,134138],{"class":2077},[228,136567,284],{"class":238},[228,136569,134143],{"class":343},[228,136571,51422],{"class":238},[19,136573,136574],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[220,136576,136578],{"className":126611,"code":136577,"language":126613,"meta":141,"style":141},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[30,136579,136580,136585,136591,136615,136620,136625],{"__ignoreMap":141},[228,136581,136582],{"class":230,"line":231},[228,136583,136584],{"class":297},"\u002F* 2D 位移 *\u002F\n",[228,136586,136587,136589],{"class":230,"line":142},[228,136588,51726],{"class":51415},[228,136590,15687],{"class":238},[228,136592,136593,136596,136598,136601,136603,136605,136607,136609,136611,136613],{"class":230,"line":1293},[228,136594,136595],{"class":287},"  transform",[228,136597,51552],{"class":238},[228,136599,136600],{"class":287},"translate",[228,136602,239],{"class":238},[228,136604,549],{"class":287},[228,136606,51607],{"class":234},[228,136608,12550],{"class":238},[228,136610,894],{"class":287},[228,136612,51607],{"class":234},[228,136614,2833],{"class":238},[228,136616,136617],{"class":230,"line":1308},[228,136618,136619],{"class":297},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[228,136621,136622],{"class":230,"line":1314},[228,136623,136624],{"class":297},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[228,136626,136627],{"class":230,"line":1328},[228,136628,1679],{"class":238},[19,136630,136631],{},"muted:自动静音属性",[22113,136633,136635],{"id":136634},"_14122-音频标签audio","14.1.2.2 音频标签audio",[183,136637,136638],{},[186,136639,136640],{},"基本使用",[19,136642,136643,136644,136649,136650],{},"当前 ",[388,136645,136646],{},[30,136647,136648],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[388,136651,136652],{},"mp3格式",[1576,136654],{"style":126467,"src":136655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[183,136657,136658],{"start":142},[186,136659,136494],{},[220,136661,136662],{"className":127358,"code":136457,"language":127360,"meta":141,"style":141},[30,136663,136664],{"__ignoreMap":141},[228,136665,136666,136668,136670,136672,136674,136676,136678,136680,136682,136684,136686,136688],{"class":230,"line":231},[228,136667,1148],{"class":238},[228,136669,28299],{"class":51415},[228,136671,55354],{"class":2077},[228,136673,284],{"class":238},[228,136675,136472],{"class":343},[228,136677,92538],{"class":2077},[228,136679,136477],{"class":2077},[228,136681,136480],{"class":2077},[228,136683,136483],{"class":2077},[228,136685,55429],{"class":238},[228,136687,28299],{"class":51415},[228,136689,51422],{"class":238},[19,136691,136692],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[183,136694,136695],{"start":1293},[186,136696,136697],{},"常用属性",[1576,136699],{"style":126467,"src":136700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[220,136702,136703],{"className":127358,"code":136457,"language":127360,"meta":141,"style":141},[30,136704,136705],{"__ignoreMap":141},[228,136706,136707,136709,136711,136713,136715,136717,136719,136721,136723,136725,136727,136729],{"class":230,"line":231},[228,136708,1148],{"class":238},[228,136710,28299],{"class":51415},[228,136712,55354],{"class":2077},[228,136714,284],{"class":238},[228,136716,136472],{"class":343},[228,136718,92538],{"class":2077},[228,136720,136477],{"class":2077},[228,136722,136480],{"class":2077},[228,136724,136483],{"class":2077},[228,136726,55429],{"class":238},[228,136728,28299],{"class":51415},[228,136730,51422],{"class":238},[19,136732,136733],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22113,136735,136737],{"id":136736},"_14123-总结","14.1.2.3 总结",[1245,136739,136740,136743,136746,136749,136752],{},[186,136741,136742],{},"音频标签和视频标签使用方式基本一致",[186,136744,136745],{},"浏览器支持情况不同",[186,136747,136748],{},"谷歌浏览器把音频和视频自动播放禁止了",[186,136750,136751],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[186,136753,136754],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[200,136756,136758],{"id":136757},"_1413-表单元素","14.1.3 表单元素",[22113,136760,136762],{"id":136761},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[1576,136764],{"style":126467,"src":136765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[220,136767,136769],{"className":127358,"code":136768,"language":127360,"meta":141,"style":141},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[30,136770,136771],{"__ignoreMap":141},[228,136772,136773,136775,136777,136779,136781,136783,136785,136787,136790,136792,136794,136797],{"class":230,"line":231},[228,136774,1148],{"class":238},[228,136776,53936],{"class":51415},[228,136778,53939],{"class":2077},[228,136780,284],{"class":238},[228,136782,62814],{"class":343},[228,136784,15035],{"class":2077},[228,136786,284],{"class":238},[228,136788,136789],{"class":343},"\"username\"",[228,136791,61135],{"class":2077},[228,136793,284],{"class":238},[228,136795,136796],{"class":343},"\"请输入用户名\"",[228,136798,51422],{"class":238},[1576,136800],{"style":126467,"src":136801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22113,136803,136805],{"id":136804},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[1576,136807],{"style":126467,"src":136808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,136810,136811],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,136813,136814],{},"快捷操作：",[1576,136816],{"style":126467,"src":136817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,136819,136820],{},"例子1：",[220,136822,136824],{"className":127358,"code":136823,"language":127360,"meta":141,"style":141},"\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",[30,136825,136826,136849,136876,136905,136924],{"__ignoreMap":141},[228,136827,136828,136830,136832,136834,136836,136839,136842,136844,136847],{"class":230,"line":231},[228,136829,1148],{"class":238},[228,136831,66740],{"class":51415},[228,136833,66743],{"class":2077},[228,136835,284],{"class":238},[228,136837,136838],{"class":343},"\"\u002Fsubmit\"",[228,136840,136841],{"class":2077}," method",[228,136843,284],{"class":238},[228,136845,136846],{"class":343},"\"post\"",[228,136848,51422],{"class":238},[228,136850,136851,136853,136855,136857,136859,136861,136863,136865,136867,136869,136871,136874],{"class":230,"line":142},[228,136852,52259],{"class":238},[228,136854,53936],{"class":51415},[228,136856,53939],{"class":2077},[228,136858,284],{"class":238},[228,136860,62814],{"class":343},[228,136862,15035],{"class":2077},[228,136864,284],{"class":238},[228,136866,136789],{"class":343},[228,136868,61135],{"class":2077},[228,136870,284],{"class":238},[228,136872,136873],{"class":343},"\"用户名\"",[228,136875,51422],{"class":238},[228,136877,136878,136880,136882,136884,136886,136889,136891,136893,136896,136898,136900,136903],{"class":230,"line":1293},[228,136879,52259],{"class":238},[228,136881,53936],{"class":51415},[228,136883,53939],{"class":2077},[228,136885,284],{"class":238},[228,136887,136888],{"class":343},"\"password\"",[228,136890,15035],{"class":2077},[228,136892,284],{"class":238},[228,136894,136895],{"class":343},"\"pwd\"",[228,136897,61135],{"class":2077},[228,136899,284],{"class":238},[228,136901,136902],{"class":343},"\"密码\"",[228,136904,51422],{"class":238},[228,136906,136907,136909,136911,136913,136915,136917,136920,136922],{"class":230,"line":1308},[228,136908,52259],{"class":238},[228,136910,54002],{"class":51415},[228,136912,53939],{"class":2077},[228,136914,284],{"class":238},[228,136916,66763],{"class":343},[228,136918,136919],{"class":238},">提交\u003C\u002F",[228,136921,54002],{"class":51415},[228,136923,51422],{"class":238},[228,136925,136926,136928,136930],{"class":230,"line":1314},[228,136927,51900],{"class":238},[228,136929,66740],{"class":51415},[228,136931,51422],{"class":238},[1576,136933],{"style":126467,"src":136934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,136936,136937],{},"value是表单域的内容",[19,136939,136940],{},"例子2：",[220,136942,136943],{"className":127358,"code":136823,"language":127360,"meta":141,"style":141},[30,136944,136945,136965,136991,137017,137035],{"__ignoreMap":141},[228,136946,136947,136949,136951,136953,136955,136957,136959,136961,136963],{"class":230,"line":231},[228,136948,1148],{"class":238},[228,136950,66740],{"class":51415},[228,136952,66743],{"class":2077},[228,136954,284],{"class":238},[228,136956,136838],{"class":343},[228,136958,136841],{"class":2077},[228,136960,284],{"class":238},[228,136962,136846],{"class":343},[228,136964,51422],{"class":238},[228,136966,136967,136969,136971,136973,136975,136977,136979,136981,136983,136985,136987,136989],{"class":230,"line":142},[228,136968,52259],{"class":238},[228,136970,53936],{"class":51415},[228,136972,53939],{"class":2077},[228,136974,284],{"class":238},[228,136976,62814],{"class":343},[228,136978,15035],{"class":2077},[228,136980,284],{"class":238},[228,136982,136789],{"class":343},[228,136984,61135],{"class":2077},[228,136986,284],{"class":238},[228,136988,136873],{"class":343},[228,136990,51422],{"class":238},[228,136992,136993,136995,136997,136999,137001,137003,137005,137007,137009,137011,137013,137015],{"class":230,"line":1293},[228,136994,52259],{"class":238},[228,136996,53936],{"class":51415},[228,136998,53939],{"class":2077},[228,137000,284],{"class":238},[228,137002,136888],{"class":343},[228,137004,15035],{"class":2077},[228,137006,284],{"class":238},[228,137008,136895],{"class":343},[228,137010,61135],{"class":2077},[228,137012,284],{"class":238},[228,137014,136902],{"class":343},[228,137016,51422],{"class":238},[228,137018,137019,137021,137023,137025,137027,137029,137031,137033],{"class":230,"line":1308},[228,137020,52259],{"class":238},[228,137022,54002],{"class":51415},[228,137024,53939],{"class":2077},[228,137026,284],{"class":238},[228,137028,66763],{"class":343},[228,137030,136919],{"class":238},[228,137032,54002],{"class":51415},[228,137034,51422],{"class":238},[228,137036,137037,137039,137041],{"class":230,"line":1314},[228,137038,51900],{"class":238},[228,137040,66740],{"class":51415},[228,137042,51422],{"class":238},[1576,137044],{"style":126467,"src":137045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,137047,137049],{"id":137048},"_142-css新特性","14.2 CSS新特性",[200,137051,137053],{"id":137052},"_1421-新增选择器","14.2.1 新增选择器",[22113,137055,137057],{"id":137056},"_14211-属性选择器","14.2.1.1 属性选择器",[1576,137059],{"style":126467,"src":137060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[220,137062,137064],{"className":126611,"code":137063,"language":126613,"meta":141,"style":141},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[30,137065,137066,137081,137097],{"__ignoreMap":141},[228,137067,137068,137070,137072,137074,137076,137078],{"class":230,"line":231},[228,137069,53936],{"class":51415},[228,137071,1128],{"class":238},[228,137073,103222],{"class":2077},[228,137075,284],{"class":234},[228,137077,62814],{"class":343},[228,137079,137080],{"class":238},"] {\n",[228,137082,137083,137085,137087,137089,137091,137093,137095],{"class":230,"line":142},[228,137084,71011],{"class":287},[228,137086,51552],{"class":238},[228,137088,456],{"class":287},[228,137090,51607],{"class":234},[228,137092,51636],{"class":287},[228,137094,130191],{"class":287},[228,137096,1404],{"class":238},[228,137098,137099],{"class":230,"line":1293},[228,137100,1679],{"class":238},[1576,137102],{"style":126467,"src":137103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,137105,268],{},[1245,137107,137108,137111,137114,137117],{},[186,137109,137110],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[186,137112,137113],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[186,137115,137116],{},"属性选择器也可以选择出来自定义的属性",[186,137118,137119,137121],{},[388,137120,9140],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22113,137123,137125],{"id":137124},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[1576,137127],{"style":126467,"src":137128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[183,137130,137131],{},[186,137132,137133],{},"fist-child",[220,137135,137137],{"className":126611,"code":137136,"language":126613,"meta":141,"style":141},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[30,137138,137139,137144,137159,137179,137197],{"__ignoreMap":141},[228,137140,137141],{"class":230,"line":231},[228,137142,137143],{"class":297},"\u002F* 属性选择器 *\u002F\n",[228,137145,137146,137148,137150,137152,137154,137156],{"class":230,"line":142},[228,137147,53936],{"class":51415},[228,137149,1128],{"class":238},[228,137151,103222],{"class":2077},[228,137153,284],{"class":234},[228,137155,62814],{"class":343},[228,137157,137158],{"class":238},"] { }\n",[228,137160,137161,137163,137165,137167,137170,137173,137176],{"class":230,"line":1293},[228,137162,53936],{"class":51415},[228,137164,1128],{"class":238},[228,137166,14809],{"class":2077},[228,137168,137169],{"class":234},"^=",[228,137171,137172],{"class":343},"\"icon\"",[228,137174,137175],{"class":238},"] { }  ",[228,137177,137178],{"class":297},"\u002F* 以 icon 开头 *\u002F\n",[228,137180,137181,137183,137185,137187,137190,137192,137194],{"class":230,"line":1308},[228,137182,53936],{"class":51415},[228,137184,1128],{"class":238},[228,137186,14809],{"class":2077},[228,137188,137189],{"class":234},"$=",[228,137191,137172],{"class":343},[228,137193,137175],{"class":238},[228,137195,137196],{"class":297},"\u002F* 以 icon 结尾 *\u002F\n",[228,137198,137199,137201,137203,137205,137208,137210,137212],{"class":230,"line":1314},[228,137200,53936],{"class":51415},[228,137202,1128],{"class":238},[228,137204,14809],{"class":2077},[228,137206,137207],{"class":234},"*=",[228,137209,137172],{"class":343},[228,137211,137175],{"class":238},[228,137213,137214],{"class":297},"\u002F* 包含 icon *\u002F\n",[19,137216,137217],{},"ul的第一个儿子文本为红色",[19,137219,137220],{},"一定要在冒号前加空格，不然就是选中所有的了",[220,137222,137224],{"className":126611,"code":137223,"language":126613,"meta":141,"style":141},".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",[30,137225,137226,137232,137242,137246,137250,137255,137268,137281,137297,137314,137331],{"__ignoreMap":141},[228,137227,137228,137230],{"class":230,"line":231},[228,137229,126902],{"class":2077},[228,137231,15687],{"class":238},[228,137233,137234,137236,137238,137240],{"class":230,"line":142},[228,137235,71020],{"class":287},[228,137237,51552],{"class":238},[228,137239,57536],{"class":287},[228,137241,1404],{"class":238},[228,137243,137244],{"class":230,"line":1293},[228,137245,1679],{"class":238},[228,137247,137248],{"class":230,"line":1308},[228,137249,136072],{"class":238},[228,137251,137252],{"class":230,"line":1314},[228,137253,137254],{"class":297},"\u002F* 结构伪类选择器 *\u002F\n",[228,137256,137257,137259,137262,137265],{"class":230,"line":1328},[228,137258,186],{"class":51415},[228,137260,137261],{"class":2077},":first-child",[228,137263,137264],{"class":238}," { }           ",[228,137266,137267],{"class":297},"\u002F* 第一个 *\u002F\n",[228,137269,137270,137272,137275,137278],{"class":230,"line":1334},[228,137271,186],{"class":51415},[228,137273,137274],{"class":2077},":last-child",[228,137276,137277],{"class":238}," { }            ",[228,137279,137280],{"class":297},"\u002F* 最后一个 *\u002F\n",[228,137282,137283,137285,137287,137289,137291,137294],{"class":230,"line":1425},[228,137284,186],{"class":51415},[228,137286,129525],{"class":2077},[228,137288,239],{"class":238},[228,137290,316],{"class":287},[228,137292,137293],{"class":238},") { }          ",[228,137295,137296],{"class":297},"\u002F* 第2个 *\u002F\n",[228,137298,137299,137301,137303,137305,137308,137311],{"class":230,"line":1431},[228,137300,186],{"class":51415},[228,137302,129525],{"class":2077},[228,137304,239],{"class":238},[228,137306,137307],{"class":287},"2n",[228,137309,137310],{"class":238},") { }         ",[228,137312,137313],{"class":297},"\u002F* 偶数 *\u002F\n",[228,137315,137316,137318,137320,137322,137325,137328],{"class":230,"line":1443},[228,137317,186],{"class":51415},[228,137319,129525],{"class":2077},[228,137321,239],{"class":238},[228,137323,137324],{"class":287},"2n+1",[228,137326,137327],{"class":238},") { }       ",[228,137329,137330],{"class":297},"\u002F* 奇数 *\u002F\n",[228,137332,137333,137335,137337,137339,137342,137344],{"class":230,"line":1726},[228,137334,186],{"class":51415},[228,137336,129525],{"class":2077},[228,137338,239],{"class":238},[228,137340,137341],{"class":287},"-n+3",[228,137343,137327],{"class":238},[228,137345,137346],{"class":297},"\u002F* 前3个 *\u002F\n",[51726,137348,137351],{"className":137349},[137350],"example","\n  示例内容\n",[19,137353,137354],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1245,137356,137357],{},[186,137358,137359,137362],{},[30,137360,137361],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,137364,137365],{},"也就是说它选择的是熊大",[183,137367,137368],{"start":1328},[186,137369,137370],{},"权重",[220,137372,137374],{"className":126611,"code":137373,"language":126613,"meta":141,"style":141},"\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",[30,137375,137376,137380,137390,137400,137414,137428,137442],{"__ignoreMap":141},[228,137377,137378],{"class":230,"line":231},[228,137379,137254],{"class":297},[228,137381,137382,137384,137386,137388],{"class":230,"line":142},[228,137383,186],{"class":51415},[228,137385,137261],{"class":2077},[228,137387,137264],{"class":238},[228,137389,137267],{"class":297},[228,137391,137392,137394,137396,137398],{"class":230,"line":1293},[228,137393,186],{"class":51415},[228,137395,137274],{"class":2077},[228,137397,137277],{"class":238},[228,137399,137280],{"class":297},[228,137401,137402,137404,137406,137408,137410,137412],{"class":230,"line":1308},[228,137403,186],{"class":51415},[228,137405,129525],{"class":2077},[228,137407,239],{"class":238},[228,137409,316],{"class":287},[228,137411,137293],{"class":238},[228,137413,137296],{"class":297},[228,137415,137416,137418,137420,137422,137424,137426],{"class":230,"line":1314},[228,137417,186],{"class":51415},[228,137419,129525],{"class":2077},[228,137421,239],{"class":238},[228,137423,137307],{"class":287},[228,137425,137310],{"class":238},[228,137427,137313],{"class":297},[228,137429,137430,137432,137434,137436,137438,137440],{"class":230,"line":1328},[228,137431,186],{"class":51415},[228,137433,129525],{"class":2077},[228,137435,239],{"class":238},[228,137437,137324],{"class":287},[228,137439,137327],{"class":238},[228,137441,137330],{"class":297},[228,137443,137444,137446,137448,137450,137452,137454],{"class":230,"line":1334},[228,137445,186],{"class":51415},[228,137447,129525],{"class":2077},[228,137449,239],{"class":238},[228,137451,137341],{"class":287},[228,137453,137327],{"class":238},[228,137455,137346],{"class":297},[19,137457,137458],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22113,137460,137462],{"id":137461},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,137464,137465],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[1576,137467],{"style":126467,"src":137468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[183,137470,137471],{},[186,137472,268],{},[1245,137474,137475,137478,137481,137484,137487,137490],{},[186,137476,137477],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[186,137479,137480],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[186,137482,137483],{},"语法： element::before {}",[186,137485,137486],{},"before 和 after 必须有 content 属性",[186,137488,137489],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[186,137491,137492],{},"伪元素选择器和标签选择器一样，权重为 1",[183,137494,137495],{"start":142},[186,137496,137497],{},"实例",[220,137499,137500],{"className":126611,"code":137373,"language":126613,"meta":141,"style":141},[30,137501,137502,137506,137516,137526,137540,137554,137568],{"__ignoreMap":141},[228,137503,137504],{"class":230,"line":231},[228,137505,137254],{"class":297},[228,137507,137508,137510,137512,137514],{"class":230,"line":142},[228,137509,186],{"class":51415},[228,137511,137261],{"class":2077},[228,137513,137264],{"class":238},[228,137515,137267],{"class":297},[228,137517,137518,137520,137522,137524],{"class":230,"line":1293},[228,137519,186],{"class":51415},[228,137521,137274],{"class":2077},[228,137523,137277],{"class":238},[228,137525,137280],{"class":297},[228,137527,137528,137530,137532,137534,137536,137538],{"class":230,"line":1308},[228,137529,186],{"class":51415},[228,137531,129525],{"class":2077},[228,137533,239],{"class":238},[228,137535,316],{"class":287},[228,137537,137293],{"class":238},[228,137539,137296],{"class":297},[228,137541,137542,137544,137546,137548,137550,137552],{"class":230,"line":1314},[228,137543,186],{"class":51415},[228,137545,129525],{"class":2077},[228,137547,239],{"class":238},[228,137549,137307],{"class":287},[228,137551,137310],{"class":238},[228,137553,137313],{"class":297},[228,137555,137556,137558,137560,137562,137564,137566],{"class":230,"line":1328},[228,137557,186],{"class":51415},[228,137559,129525],{"class":2077},[228,137561,239],{"class":238},[228,137563,137324],{"class":287},[228,137565,137327],{"class":238},[228,137567,137330],{"class":297},[228,137569,137570,137572,137574,137576,137578,137580],{"class":230,"line":1334},[228,137571,186],{"class":51415},[228,137573,129525],{"class":2077},[228,137575,239],{"class":238},[228,137577,137341],{"class":287},[228,137579,137327],{"class":238},[228,137581,137346],{"class":297},[1576,137583],{"style":126467,"src":137584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[183,137586,137587],{"start":1293},[186,137588,137589],{},"使用场景1",[1576,137591],{"style":126467,"src":137592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,137594,137595],{},"不需要再加盒子来整红色那部分了",[220,137597,137599],{"className":126611,"code":137598,"language":126613,"meta":141,"style":141},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[30,137600,137601,137606,137615,137626,137636,137640,137649,137660,137670],{"__ignoreMap":141},[228,137602,137603],{"class":230,"line":231},[228,137604,137605],{"class":297},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[228,137607,137608,137610,137613],{"class":230,"line":142},[228,137609,51726],{"class":51415},[228,137611,137612],{"class":2077},"::before",[228,137614,15687],{"class":238},[228,137616,137617,137620,137622,137624],{"class":230,"line":1293},[228,137618,137619],{"class":287},"  content",[228,137621,51552],{"class":238},[228,137623,7767],{"class":343},[228,137625,1404],{"class":238},[228,137627,137628,137630,137632,137634],{"class":230,"line":1308},[228,137629,128227],{"class":287},[228,137631,51552],{"class":238},[228,137633,60984],{"class":287},[228,137635,1404],{"class":238},[228,137637,137638],{"class":230,"line":1314},[228,137639,1679],{"class":238},[228,137641,137642,137644,137647],{"class":230,"line":1328},[228,137643,51726],{"class":51415},[228,137645,137646],{"class":2077},"::after",[228,137648,15687],{"class":238},[228,137650,137651,137653,137655,137658],{"class":230,"line":1334},[228,137652,137619],{"class":287},[228,137654,51552],{"class":238},[228,137656,137657],{"class":343},"\"→\"",[228,137659,1404],{"class":238},[228,137661,137662,137664,137666,137668],{"class":230,"line":1425},[228,137663,71020],{"class":287},[228,137665,51552],{"class":238},[228,137667,62185],{"class":287},[228,137669,1404],{"class":238},[228,137671,137672],{"class":230,"line":1431},[228,137673,1679],{"class":238},[1576,137675],{"style":126467,"src":137676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,137678,137679],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[1576,137681],{"style":126467,"src":137682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,137684,137685],{},"但是在引用时需要先转义一下",[19,137687,137688],{},"content='\\e930'",[183,137690,137691],{"start":1308},[186,137692,137693],{},"使用场景2",[19,137695,137696],{},"仿土豆效果",[19,137698,137699],{},"通过使用伪元素选择器可以减少body中盒子的数量",[220,137701,137702],{"className":126611,"code":137598,"language":126613,"meta":141,"style":141},[30,137703,137704,137708,137716,137726,137736,137740,137748,137758,137768],{"__ignoreMap":141},[228,137705,137706],{"class":230,"line":231},[228,137707,137605],{"class":297},[228,137709,137710,137712,137714],{"class":230,"line":142},[228,137711,51726],{"class":51415},[228,137713,137612],{"class":2077},[228,137715,15687],{"class":238},[228,137717,137718,137720,137722,137724],{"class":230,"line":1293},[228,137719,137619],{"class":287},[228,137721,51552],{"class":238},[228,137723,7767],{"class":343},[228,137725,1404],{"class":238},[228,137727,137728,137730,137732,137734],{"class":230,"line":1308},[228,137729,128227],{"class":287},[228,137731,51552],{"class":238},[228,137733,60984],{"class":287},[228,137735,1404],{"class":238},[228,137737,137738],{"class":230,"line":1314},[228,137739,1679],{"class":238},[228,137741,137742,137744,137746],{"class":230,"line":1328},[228,137743,51726],{"class":51415},[228,137745,137646],{"class":2077},[228,137747,15687],{"class":238},[228,137749,137750,137752,137754,137756],{"class":230,"line":1334},[228,137751,137619],{"class":287},[228,137753,51552],{"class":238},[228,137755,137657],{"class":343},[228,137757,1404],{"class":238},[228,137759,137760,137762,137764,137766],{"class":230,"line":1425},[228,137761,71020],{"class":287},[228,137763,51552],{"class":238},[228,137765,62185],{"class":287},[228,137767,1404],{"class":238},[228,137769,137770],{"class":230,"line":1431},[228,137771,1679],{"class":238},[1576,137773],{"style":126467,"src":137774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[183,137776,137777],{"start":1314},[186,137778,137779],{},"使用场景3",[19,137781,137782],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[220,137784,137786],{"className":126611,"code":137785,"language":126613,"meta":141,"style":141},".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",[30,137787,137788,137794,137804,137808,137812,137816,137824,137834,137844,137848,137856,137866,137876],{"__ignoreMap":141},[228,137789,137790,137792],{"class":230,"line":231},[228,137791,130459],{"class":2077},[228,137793,15687],{"class":238},[228,137795,137796,137798,137800,137802],{"class":230,"line":142},[228,137797,131091],{"class":287},[228,137799,51552],{"class":238},[228,137801,23851],{"class":287},[228,137803,1404],{"class":238},[228,137805,137806],{"class":230,"line":1293},[228,137807,1679],{"class":238},[228,137809,137810],{"class":230,"line":1308},[228,137811,136072],{"class":238},[228,137813,137814],{"class":230,"line":1314},[228,137815,137605],{"class":297},[228,137817,137818,137820,137822],{"class":230,"line":1328},[228,137819,51726],{"class":51415},[228,137821,137612],{"class":2077},[228,137823,15687],{"class":238},[228,137825,137826,137828,137830,137832],{"class":230,"line":1334},[228,137827,137619],{"class":287},[228,137829,51552],{"class":238},[228,137831,7767],{"class":343},[228,137833,1404],{"class":238},[228,137835,137836,137838,137840,137842],{"class":230,"line":1425},[228,137837,128227],{"class":287},[228,137839,51552],{"class":238},[228,137841,60984],{"class":287},[228,137843,1404],{"class":238},[228,137845,137846],{"class":230,"line":1431},[228,137847,1679],{"class":238},[228,137849,137850,137852,137854],{"class":230,"line":1443},[228,137851,51726],{"class":51415},[228,137853,137646],{"class":2077},[228,137855,15687],{"class":238},[228,137857,137858,137860,137862,137864],{"class":230,"line":1726},[228,137859,137619],{"class":287},[228,137861,51552],{"class":238},[228,137863,137657],{"class":343},[228,137865,1404],{"class":238},[228,137867,137868,137870,137872,137874],{"class":230,"line":1731},[228,137869,71020],{"class":287},[228,137871,51552],{"class":238},[228,137873,62185],{"class":287},[228,137875,1404],{"class":238},[228,137877,137878],{"class":230,"line":1737},[228,137879,1679],{"class":238},[19,137881,137882],{},"div {\nmargin: 0 auto;\n}",[220,137884,137887],{"className":137885,"code":137886,"language":5302},[5300],"\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",[30,137888,137886],{"__ignoreMap":141},[19,137890,137891],{},"如果想让多个元素都发生变化",[19,137893,137894],{},"不能如下操作：",[19,137896,137897],{},"transition: width 2s ease 0.5s;",[19,137899,137900],{},"transition: height 2s ease 0.5s;不对！！！",[19,137902,137903],{},"上方会样式冲突，导致不显示任何过渡效果",[19,137905,137906],{},"使用如下：加逗号隔开",[19,137908,137909],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,137911,137912],{},"transition all 2s ease;",[200,137914,137916],{"id":137915},"_1426-过渡练习","14.2.6 过渡练习",[183,137918,137919],{},[186,137920,137921],{},"进度条",[1576,137923],{"style":126467,"src":137924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[220,137926,137928],{"className":126611,"code":137927,"language":126613,"meta":141,"style":141},"div {\n  transition: all 0.3s ease;\n}\n",[30,137929,137930,137936,137954],{"__ignoreMap":141},[228,137931,137932,137934],{"class":230,"line":231},[228,137933,51726],{"class":51415},[228,137935,15687],{"class":238},[228,137937,137938,137941,137943,137945,137948,137950,137952],{"class":230,"line":142},[228,137939,137940],{"class":287},"  transition",[228,137942,51552],{"class":238},[228,137944,28237],{"class":287},[228,137946,137947],{"class":287}," 0.3",[228,137949,933],{"class":234},[228,137951,78795],{"class":287},[228,137953,1404],{"class":238},[228,137955,137956],{"class":230,"line":1293},[228,137957,1679],{"class":238},[183,137959,137960],{"start":142},[186,137961,137962],{},"小米logo",[19,137964,137965],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[220,137967,137969],{"className":126611,"code":137968,"language":126613,"meta":141,"style":141},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[30,137970,137971,137976,137982,137998,138003],{"__ignoreMap":141},[228,137972,137973],{"class":230,"line":231},[228,137974,137975],{"class":297},"\u002F* CSS3 过渡 *\u002F\n",[228,137977,137978,137980],{"class":230,"line":142},[228,137979,51726],{"class":51415},[228,137981,15687],{"class":238},[228,137983,137984,137986,137988,137990,137992,137994,137996],{"class":230,"line":1293},[228,137985,137940],{"class":287},[228,137987,51552],{"class":238},[228,137989,28237],{"class":287},[228,137991,137947],{"class":287},[228,137993,933],{"class":234},[228,137995,78795],{"class":287},[228,137997,1404],{"class":238},[228,137999,138000],{"class":230,"line":1308},[228,138001,138002],{"class":297},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[228,138004,138005],{"class":230,"line":1314},[228,138006,1679],{"class":238},[19,138008,138009],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[5241,138011,138012],{},"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":141,"searchDepth":142,"depth":142,"links":138014},[138015,138020],{"id":136345,"depth":142,"text":136346,"children":138016},[138017,138018,138019],{"id":136349,"depth":1293,"text":136350},{"id":136426,"depth":1293,"text":136427},{"id":136757,"depth":1293,"text":136758},{"id":137048,"depth":142,"text":137049,"children":138021},[138022,138023],{"id":137052,"depth":1293,"text":137053},{"id":137915,"depth":1293,"text":137916},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136337,"description":154},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138030,"title":138031,"body":138032,"description":154,"extension":155,"meta":139776,"navigation":157,"path":139777,"seo":139778,"stem":139779,"__hash__":139780},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138033,"toc":139757},[138034,138037,138041,138044,138050,138056,138060,138062,138065,138068,138071,138074,138077,138080,138083,138087,138091,138094,138097,138100,138104,138107,138110,138115,138118,138121,138124,138128,138131,138140,138143,138146,138150,138153,138156,138161,138168,138182,138190,138197,138202,138205,138208,138211,138218,138222,138228,138234,138237,138240,138245,138251,138253,138261,138266,138269,138275,138277,138282,138287,138290,138292,138297,138300,138305,138310,138344,138348,138352,138355,138359,138362,138448,138451,138488,138491,138527,138531,138536,138549,138603,138605,138633,138635,138663,138669,138683,138685,138729,138731,138775,138778,138785,138796,138798,138825,138827,138853,138860,138876,138878,138972,138974,139068,139075,139078,139083,139089,139163,139166,139168,139204,139206,139242,139245,139252,139271,139274,139277,139279,139304,139306,139330,139333,139336,139366,139370,139373,139436,139438,139504,139506,139570,139573,139605,139607,139633,139635,139661,139664,139695,139697,139723,139725,139751,139754],[10,138035,138031],{"id":138036},"_15-品优购项目上篇-搭建与公共模块",[14,138038,138040],{"id":138039},"_151-项目规划","15.1 项目规划",[1576,138042],{"style":126467,"src":138043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,138045,138046,138049],{},[388,138047,138048],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,138051,138052,138055],{},[388,138053,138054],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,138057,138059],{"id":138058},"_152-项目介绍","15.2 项目介绍",[19,138061,138048],{},[1576,138063],{"style":126467,"src":138064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,138066,138067],{},"主页：",[1576,138069],{"style":126467,"src":138070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,138072,138073],{},"列表页：",[1576,138075],{"style":126467,"src":138076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,138078,138079],{},"注册页：",[1576,138081],{"style":126467,"src":138082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,138084,138086],{"id":138085},"_153-项目搭建工作","15.3 项目搭建工作",[200,138088,138090],{"id":138089},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[1576,138092],{"style":126467,"src":138093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,138095,138096],{},"经常更换的图片要放到upload文件夹中",[19,138098,138099],{},"不经常换的放到images文件夹中",[200,138101,138103],{"id":138102},"_1532-创建文件如下","15.3.2 创建文件如下",[1576,138105],{"style":126467,"src":138106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[1576,138108],{"style":126467,"src":138109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,138111,138112],{},[388,138113,138114],{},"初始化样式：",[19,138116,138117],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,138119,138120],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,138122,138123],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[200,138125,138127],{"id":138126},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,138129,138130],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,138132,138133,138134,138139],{},"这里最典型的应用就是 ",[388,138135,138136],{},[30,138137,138138],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[1576,138141],{"style":126467,"src":138142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,138144,138145],{},"通过link方法来引入",[200,138147,138149],{"id":138148},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[1576,138151],{"style":126467,"src":138152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,138154,138155],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[183,138157,138158],{},[186,138159,138160],{},"制作favicon图标",[19,138162,138163,138164,138167],{},"①把品优购图标切成 ",[30,138165,138166],{},"png"," 图片",[19,138169,138170,138171,138173,138174,138177,138178],{},"②把 ",[30,138172,138166],{}," 图片转换为 ",[30,138175,138176],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[476,138179,138180],{"href":138180,"rel":138181},"http:\u002F\u002Fwww.bitbug.net\u002F",[23980],[183,138183,138184,138187],{"start":142},[186,138185,138186],{},"favicon图标放到网站根目录下",[186,138188,138189],{},"HTML页面引入favicon",[19,138191,138192,138193,138196],{},"在html 页面里面的 ",[30,138194,138195],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,138198,138199],{},[30,138200,138201],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,138203,138204],{},"复制这行代码或者在生成这个的网站进行复制",[1576,138206],{"style":126467,"src":138207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,138209,138210],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,138212,138213,138214],{},"例如:",[476,138215,138216],{"href":138216,"rel":138217},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[23980],[200,138219,138221],{"id":138220},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,138223,138224,138227],{},[388,138225,138226],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,138229,138230,138233],{},[388,138231,138232],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,138235,138236],{},"页面必须有三个标签用来符合 SEO 优化",[1576,138238],{"style":126467,"src":138239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[183,138241,138242],{},[186,138243,138244],{},"title网站标题",[19,138246,138247,138250],{},[388,138248,138249],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,138252,68905],{},[1245,138254,138255,138258],{},[186,138256,138257],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[186,138259,138260],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[183,138262,138263],{"start":142},[186,138264,138265],{},"description网站描述",[19,138267,138268],{},"简要说明我们网站主要是做什么的",[19,138270,138271,138274],{},[388,138272,138273],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,138276,68905],{},[19,138278,138279],{},[30,138280,138281],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[183,138283,138284],{"start":1293},[186,138285,138286],{},"keywords关键词",[19,138288,138289],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,138291,68905],{},[19,138293,138294],{},[30,138295,138296],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,138298,138299],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,138301,138302],{},[388,138303,138304],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[183,138306,138307],{"start":1308},[186,138308,138309],{},"代码总结",[220,138311,138312],{"className":127358,"code":130715,"language":127360,"meta":141,"style":141},[30,138313,138314,138318,138332,138336],{"__ignoreMap":141},[228,138315,138316],{"class":230,"line":231},[228,138317,130722],{"class":297},[228,138319,138320,138322,138324,138326,138328,138330],{"class":230,"line":142},[228,138321,1148],{"class":238},[228,138323,51726],{"class":51415},[228,138325,53601],{"class":2077},[228,138327,284],{"class":238},[228,138329,130735],{"class":343},[228,138331,51422],{"class":238},[228,138333,138334],{"class":230,"line":1293},[228,138335,130742],{"class":238},[228,138337,138338,138340,138342],{"class":230,"line":1308},[228,138339,51900],{"class":238},[228,138341,51726],{"class":51415},[228,138343,51422],{"class":238},[14,138345,138347],{"id":138346},"_154-项目公共部分制作","15.4 项目公共部分制作",[200,138349,138351],{"id":138350},"_1541-常用模块类命名","15.4.1 常用模块类命名",[1576,138353],{"style":126467,"src":138354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[200,138356,138358],{"id":138357},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,138360,138361],{},"布局思路：",[1245,138363,138364,138367,138370,138392,138425],{},[186,138365,138366],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[186,138368,138369],{},"里面包含版心的盒子",[186,138371,138372,138373],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1245,138374,138375,138383,138389],{},[186,138376,138377,138378,21615,138380,138382],{},"1 号盒子 里面包含一个",[30,138379,1245],{},[30,138381,1245],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[186,138384,138385,138386,138388],{},"里面的内容是水平排列，所以需要给",[30,138387,186],{},"设置浮动",[186,138390,138391],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[186,138393,138394,138395],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1245,138396,138397,138411,138416],{},[186,138398,138399,138400,21615,138402,138404,138405,138407,138408,138410],{},"2 号盒子 里面包含一个",[30,138401,1245],{},[30,138403,1245],{},"包裹",[30,138406,186],{},"，中间的",[30,138409,1159],{},"可以用样式去设置，也可以用字符 |",[186,138412,138413,138414,138388],{},"里面内容水平排列，给",[30,138415,186],{},[186,138417,138418,138419,138421,138422,138424],{},"找到里面所有偶数的 ",[30,138420,186],{}," 设置样式（偶数的 ",[30,138423,186],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[186,138426,138427,138428],{},"需要用到字体图标",[1245,138429,138430,138436,138439,138442,138445],{},[186,138431,138432,138433],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[30,138434,138435],{},"arrow-icon",[186,138437,138438],{},"先要引入字体图片的资源",[186,138440,138441],{},"在样式里面利用 font-face 来进行声明",[186,138443,138444],{},"在伪元素的 content属性设置 图标的编码",[186,138446,138447],{},"给伪元素设置font-family属性",[19,138449,138450],{},"结构实例代码：",[220,138452,138454],{"className":126611,"code":138453,"language":126613,"meta":141,"style":141},"div::before {\n  content: \"\";\n  display: block;\n}\n",[30,138455,138456,138464,138474,138484],{"__ignoreMap":141},[228,138457,138458,138460,138462],{"class":230,"line":231},[228,138459,51726],{"class":51415},[228,138461,137612],{"class":2077},[228,138463,15687],{"class":238},[228,138465,138466,138468,138470,138472],{"class":230,"line":142},[228,138467,137619],{"class":287},[228,138469,51552],{"class":238},[228,138471,7767],{"class":343},[228,138473,1404],{"class":238},[228,138475,138476,138478,138480,138482],{"class":230,"line":1293},[228,138477,128227],{"class":287},[228,138479,51552],{"class":238},[228,138481,60984],{"class":287},[228,138483,1404],{"class":238},[228,138485,138486],{"class":230,"line":1308},[228,138487,1679],{"class":238},[19,138489,138490],{},"样式实例代码：",[220,138492,138493],{"className":126611,"code":138453,"language":126613,"meta":141,"style":141},[30,138494,138495,138503,138513,138523],{"__ignoreMap":141},[228,138496,138497,138499,138501],{"class":230,"line":231},[228,138498,51726],{"class":51415},[228,138500,137612],{"class":2077},[228,138502,15687],{"class":238},[228,138504,138505,138507,138509,138511],{"class":230,"line":142},[228,138506,137619],{"class":287},[228,138508,51552],{"class":238},[228,138510,7767],{"class":343},[228,138512,1404],{"class":238},[228,138514,138515,138517,138519,138521],{"class":230,"line":1293},[228,138516,128227],{"class":287},[228,138518,51552],{"class":238},[228,138520,60984],{"class":287},[228,138522,1404],{"class":238},[228,138524,138525],{"class":230,"line":1308},[228,138526,1679],{"class":238},[200,138528,138530],{"id":138529},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1245,138532,138533],{},[186,138534,138535],{},"header 盒子必须要有高度",[19,138537,138538,138539,138541,138542],{},"1 号盒子是 ",[30,138540,131623],{}," 标志定位，在正常开发过程中， ",[388,138543,138544,138545,138548],{},"logo的布局其实是有讲究的，需要进行 ",[30,138546,138547],{},"logoSEO","的优化 （★★★）",[1245,138550,138551,138559,138567,138594],{},[186,138552,138553,138555,138556,138558],{},[30,138554,131623],{}," 里面首先放一个 ",[30,138557,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[186,138560,138561,138563,138564,138566],{},[30,138562,10],{}," 里面再放一个链接，可以返回首页的，把 ",[30,138565,131623],{}," 的背景图片给链接即可",[186,138568,138569,138570],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1245,138571,138572,138587],{},[186,138573,138574,138575,138578,138579,138582,138583,138586],{},"方法1：",[30,138576,138577],{},"text-indent"," 移到盒子外面（",[30,138580,138581],{},"text-indent: -9999px",") ，然后 ",[30,138584,138585],{},"overflow:hidden"," ，淘宝的做法",[186,138588,138589,138590,138593],{},"方法2：直接给 ",[30,138591,138592],{},"font-size: 0;"," 就看不到文字了，京东的做法",[186,138595,138596,138597,138599,138600,138602],{},"最后给链接一个 ",[30,138598,51522],{}," 属性，这样鼠标放到 ",[30,138601,131623],{}," 上就可以看到提示文字了",[19,138604,138450],{},[220,138606,138607],{"className":127358,"code":131844,"language":127360,"meta":141,"style":141},[30,138608,138609],{"__ignoreMap":141},[228,138610,138611,138613,138615,138617,138619,138621,138623,138625,138627,138629,138631],{"class":230,"line":231},[228,138612,1148],{"class":238},[228,138614,476],{"class":51415},[228,138616,61172],{"class":2077},[228,138618,284],{"class":238},[228,138620,131859],{"class":343},[228,138622,131862],{"class":2077},[228,138624,284],{"class":238},[228,138626,131867],{"class":343},[228,138628,131870],{"class":238},[228,138630,476],{"class":51415},[228,138632,51422],{"class":238},[19,138634,138490],{},[220,138636,138637],{"className":127358,"code":131844,"language":127360,"meta":141,"style":141},[30,138638,138639],{"__ignoreMap":141},[228,138640,138641,138643,138645,138647,138649,138651,138653,138655,138657,138659,138661],{"class":230,"line":231},[228,138642,1148],{"class":238},[228,138644,476],{"class":51415},[228,138646,61172],{"class":2077},[228,138648,284],{"class":238},[228,138650,131859],{"class":343},[228,138652,131862],{"class":2077},[228,138654,284],{"class":238},[228,138656,131867],{"class":343},[228,138658,131870],{"class":238},[228,138660,476],{"class":51415},[228,138662,51422],{"class":238},[19,138664,138665,138666,138668],{},"2 号盒子是 ",[30,138667,131636],{}," 搜索模块定位",[1245,138670,138671,138674,138677,138680],{},[186,138672,138673],{},"search盒子利用定位的方式放在对应的位置",[186,138675,138676],{},"search盒子设置绝对定位，header盒子设置相对定位",[186,138678,138679],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[186,138681,138682],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,138684,138450],{},[220,138686,138687],{"className":126611,"code":131931,"language":126613,"meta":141,"style":141},[30,138688,138689,138711,138715,138725],{"__ignoreMap":141},[228,138690,138691,138693,138695,138697,138699,138701,138703,138705,138707,138709],{"class":230,"line":231},[228,138692,51726],{"class":51415},[228,138694,12550],{"class":238},[228,138696,19],{"class":51415},[228,138698,12550],{"class":238},[228,138700,10],{"class":51415},[228,138702,12550],{"class":238},[228,138704,1245],{"class":51415},[228,138706,12550],{"class":238},[228,138708,186],{"class":51415},[228,138710,15687],{"class":238},[228,138712,138713],{"class":230,"line":142},[228,138714,131960],{"class":297},[228,138716,138717,138719,138721,138723],{"class":230,"line":1293},[228,138718,128227],{"class":287},[228,138720,51552],{"class":238},[228,138722,60984],{"class":287},[228,138724,1404],{"class":238},[228,138726,138727],{"class":230,"line":1308},[228,138728,1679],{"class":238},[19,138730,138490],{},[220,138732,138733],{"className":126611,"code":131931,"language":126613,"meta":141,"style":141},[30,138734,138735,138757,138761,138771],{"__ignoreMap":141},[228,138736,138737,138739,138741,138743,138745,138747,138749,138751,138753,138755],{"class":230,"line":231},[228,138738,51726],{"class":51415},[228,138740,12550],{"class":238},[228,138742,19],{"class":51415},[228,138744,12550],{"class":238},[228,138746,10],{"class":51415},[228,138748,12550],{"class":238},[228,138750,1245],{"class":51415},[228,138752,12550],{"class":238},[228,138754,186],{"class":51415},[228,138756,15687],{"class":238},[228,138758,138759],{"class":230,"line":142},[228,138760,131960],{"class":297},[228,138762,138763,138765,138767,138769],{"class":230,"line":1293},[228,138764,128227],{"class":287},[228,138766,51552],{"class":238},[228,138768,60984],{"class":287},[228,138770,1404],{"class":238},[228,138772,138773],{"class":230,"line":1308},[228,138774,1679],{"class":238},[19,138776,138777],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,138779,138780,138781,138784],{},"3 号盒子是 ",[30,138782,138783],{},"hotwords"," 热词模块定位",[1245,138786,138787,138790,138793],{},[186,138788,138789],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[186,138791,138792],{},"给里面所有的a标签设置 左右10px的外边距",[186,138794,138795],{},"给第一个a标签设置文字变红色（#c81623）",[19,138797,138450],{},[220,138799,138801],{"className":126611,"code":138800,"language":126613,"meta":141,"style":141},"div {\n  margin: 0 auto;\n}\n",[30,138802,138803,138809,138821],{"__ignoreMap":141},[228,138804,138805,138807],{"class":230,"line":231},[228,138806,51726],{"class":51415},[228,138808,15687],{"class":238},[228,138810,138811,138813,138815,138817,138819],{"class":230,"line":142},[228,138812,70585],{"class":287},[228,138814,51552],{"class":238},[228,138816,430],{"class":287},[228,138818,51671],{"class":287},[228,138820,1404],{"class":238},[228,138822,138823],{"class":230,"line":1293},[228,138824,1679],{"class":238},[19,138826,138490],{},[220,138828,138829],{"className":126611,"code":138800,"language":126613,"meta":141,"style":141},[30,138830,138831,138837,138849],{"__ignoreMap":141},[228,138832,138833,138835],{"class":230,"line":231},[228,138834,51726],{"class":51415},[228,138836,15687],{"class":238},[228,138838,138839,138841,138843,138845,138847],{"class":230,"line":142},[228,138840,70585],{"class":287},[228,138842,51552],{"class":238},[228,138844,430],{"class":287},[228,138846,51671],{"class":287},[228,138848,1404],{"class":238},[228,138850,138851],{"class":230,"line":1293},[228,138852,1679],{"class":238},[19,138854,138855,138856,138859],{},"4 号盒子是 ",[30,138857,138858],{},"shopcar"," 购物车模块",[1245,138861,138862,138867,138870,138873],{},[186,138863,123450,138864,138866],{},[30,138865,138858],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[186,138868,138869],{},"count 统计部分用绝对定位做",[186,138871,138872],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[186,138874,138875],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,138877,138450],{},[220,138879,138880],{"className":126611,"code":132043,"language":126613,"meta":141,"style":141},[30,138881,138882,138886,138900,138904,138918,138922,138936,138940,138954,138958],{"__ignoreMap":141},[228,138883,138884],{"class":230,"line":231},[228,138885,132050],{"class":297},[228,138887,138888,138890,138892,138894,138896,138898],{"class":230,"line":142},[228,138889,132055],{"class":2077},[228,138891,79922],{"class":238},[228,138893,128971],{"class":287},[228,138895,51552],{"class":238},[228,138897,132064],{"class":287},[228,138899,129541],{"class":238},[228,138901,138902],{"class":230,"line":1293},[228,138903,132071],{"class":297},[228,138905,138906,138908,138910,138912,138914,138916],{"class":230,"line":1308},[228,138907,132076],{"class":2077},[228,138909,79922],{"class":238},[228,138911,128971],{"class":287},[228,138913,51552],{"class":238},[228,138915,54879],{"class":287},[228,138917,129541],{"class":238},[228,138919,138920],{"class":230,"line":1314},[228,138921,132091],{"class":297},[228,138923,138924,138926,138928,138930,138932,138934],{"class":230,"line":1328},[228,138925,132096],{"class":2077},[228,138927,79922],{"class":238},[228,138929,128971],{"class":287},[228,138931,51552],{"class":238},[228,138933,54946],{"class":287},[228,138935,129541],{"class":238},[228,138937,138938],{"class":230,"line":1334},[228,138939,132111],{"class":297},[228,138941,138942,138944,138946,138948,138950,138952],{"class":230,"line":1425},[228,138943,132116],{"class":2077},[228,138945,79922],{"class":238},[228,138947,128971],{"class":287},[228,138949,51552],{"class":238},[228,138951,86348],{"class":287},[228,138953,129541],{"class":238},[228,138955,138956],{"class":230,"line":1431},[228,138957,132131],{"class":297},[228,138959,138960,138962,138964,138966,138968,138970],{"class":230,"line":1443},[228,138961,132136],{"class":2077},[228,138963,79922],{"class":238},[228,138965,128971],{"class":287},[228,138967,51552],{"class":238},[228,138969,132145],{"class":287},[228,138971,129541],{"class":238},[19,138973,138490],{},[220,138975,138976],{"className":126611,"code":132043,"language":126613,"meta":141,"style":141},[30,138977,138978,138982,138996,139000,139014,139018,139032,139036,139050,139054],{"__ignoreMap":141},[228,138979,138980],{"class":230,"line":231},[228,138981,132050],{"class":297},[228,138983,138984,138986,138988,138990,138992,138994],{"class":230,"line":142},[228,138985,132055],{"class":2077},[228,138987,79922],{"class":238},[228,138989,128971],{"class":287},[228,138991,51552],{"class":238},[228,138993,132064],{"class":287},[228,138995,129541],{"class":238},[228,138997,138998],{"class":230,"line":1293},[228,138999,132071],{"class":297},[228,139001,139002,139004,139006,139008,139010,139012],{"class":230,"line":1308},[228,139003,132076],{"class":2077},[228,139005,79922],{"class":238},[228,139007,128971],{"class":287},[228,139009,51552],{"class":238},[228,139011,54879],{"class":287},[228,139013,129541],{"class":238},[228,139015,139016],{"class":230,"line":1314},[228,139017,132091],{"class":297},[228,139019,139020,139022,139024,139026,139028,139030],{"class":230,"line":1328},[228,139021,132096],{"class":2077},[228,139023,79922],{"class":238},[228,139025,128971],{"class":287},[228,139027,51552],{"class":238},[228,139029,54946],{"class":287},[228,139031,129541],{"class":238},[228,139033,139034],{"class":230,"line":1334},[228,139035,132111],{"class":297},[228,139037,139038,139040,139042,139044,139046,139048],{"class":230,"line":1425},[228,139039,132116],{"class":2077},[228,139041,79922],{"class":238},[228,139043,128971],{"class":287},[228,139045,51552],{"class":238},[228,139047,86348],{"class":287},[228,139049,129541],{"class":238},[228,139051,139052],{"class":230,"line":1431},[228,139053,132131],{"class":297},[228,139055,139056,139058,139060,139062,139064,139066],{"class":230,"line":1443},[228,139057,132136],{"class":2077},[228,139059,79922],{"class":238},[228,139061,128971],{"class":287},[228,139063,51552],{"class":238},[228,139065,132145],{"class":287},[228,139067,129541],{"class":238},[200,139069,139071,139072,139074],{"id":139070},"_1544-nav导航模块制作","15.4.4 ",[30,139073,53828],{},"导航模块制作",[1576,139076],{"style":126467,"src":139077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,139079,139080,139082],{},[30,139081,53828],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,139084,139085,139086],{},"1 号盒子左侧浮动，",[30,139087,139088],{},"dropdown",[1245,139090,139091,139101,139109,139115,139123,139133,139141,139152],{},[186,139092,139093,139094,101133,139097,139100],{},"1号盒子有讲究，根据相关性 里面包含 ",[30,139095,139096],{},".dt",[30,139098,139099],{},".dd"," 两个盒子",[186,139102,139103,139105,139106,139108],{},[30,139104,139096],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[30,139107,139099],{}," 挤到下面去了",[186,139110,139111,139112,139114],{},"给 ",[30,139113,139099],{}," 盒子设置宽度 和 高度，以及背景颜色",[186,139116,139111,139117,139119,139120,120352],{},[30,139118,139099],{}," 盒子里面定义 无序列表 （",[30,139121,139122],{},"ul > li > a",[186,139124,139125,139126,139128,139129,139132],{},"每个 ",[30,139127,186],{}," 都有一个高度（",[30,139130,139131],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[186,139134,139111,139135,139137,139138,120352],{},[30,139136,186],{}," 里面的a设置文字大小（",[30,139139,139140],{},"14px",[186,139142,139111,139143,139145,139146,139148,139149,139151],{},[30,139144,186],{}," 设置 ",[30,139147,127772],{},"，当鼠标移入的时候，让",[30,139150,186],{},"的背景变成白色，让里面的文字变成红色",[186,139153,139154,139156,139157,139159,139160,139162],{},[30,139155,186],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[30,139158,186],{},"的右侧，那么给",[30,139161,186],{},"设置相对定位",[19,139164,139165],{},"一定要注意相关性",[19,139167,138450],{},[220,139169,139170],{"className":126611,"code":138453,"language":126613,"meta":141,"style":141},[30,139171,139172,139180,139190,139200],{"__ignoreMap":141},[228,139173,139174,139176,139178],{"class":230,"line":231},[228,139175,51726],{"class":51415},[228,139177,137612],{"class":2077},[228,139179,15687],{"class":238},[228,139181,139182,139184,139186,139188],{"class":230,"line":142},[228,139183,137619],{"class":287},[228,139185,51552],{"class":238},[228,139187,7767],{"class":343},[228,139189,1404],{"class":238},[228,139191,139192,139194,139196,139198],{"class":230,"line":1293},[228,139193,128227],{"class":287},[228,139195,51552],{"class":238},[228,139197,60984],{"class":287},[228,139199,1404],{"class":238},[228,139201,139202],{"class":230,"line":1308},[228,139203,1679],{"class":238},[19,139205,138490],{},[220,139207,139208],{"className":126611,"code":138453,"language":126613,"meta":141,"style":141},[30,139209,139210,139218,139228,139238],{"__ignoreMap":141},[228,139211,139212,139214,139216],{"class":230,"line":231},[228,139213,51726],{"class":51415},[228,139215,137612],{"class":2077},[228,139217,15687],{"class":238},[228,139219,139220,139222,139224,139226],{"class":230,"line":142},[228,139221,137619],{"class":287},[228,139223,51552],{"class":238},[228,139225,7767],{"class":343},[228,139227,1404],{"class":238},[228,139229,139230,139232,139234,139236],{"class":230,"line":1293},[228,139231,128227],{"class":287},[228,139233,51552],{"class":238},[228,139235,60984],{"class":287},[228,139237,1404],{"class":238},[228,139239,139240],{"class":230,"line":1308},[228,139241,1679],{"class":238},[19,139243,139244],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,139246,139247,139248,139251],{},"2 号盒子左侧浮动，",[30,139249,139250],{},"navitems"," 导航栏组",[1245,139253,139254,139259,139268],{},[186,139255,139256,139257],{},"里面结构是 ",[30,139258,139122],{},[186,139260,139261,139262,139264,139265,139267],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[30,139263,476],{},"左右的",[30,139266,30998],{},"把两侧撑开",[186,139269,139270],{},"让文字垂直居中（行高等于高度）",[1576,139272],{"style":126467,"src":139273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,139275,139276],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,139278,138450],{},[220,139280,139282],{"className":126611,"code":139281,"language":126613,"meta":141,"style":141},".box {\n  float: left;\n}\n",[30,139283,139284,139290,139300],{"__ignoreMap":141},[228,139285,139286,139288],{"class":230,"line":231},[228,139287,130459],{"class":2077},[228,139289,15687],{"class":238},[228,139291,139292,139294,139296,139298],{"class":230,"line":142},[228,139293,131091],{"class":287},[228,139295,51552],{"class":238},[228,139297,23851],{"class":287},[228,139299,1404],{"class":238},[228,139301,139302],{"class":230,"line":1293},[228,139303,1679],{"class":238},[19,139305,138490],{},[220,139307,139308],{"className":126611,"code":139281,"language":126613,"meta":141,"style":141},[30,139309,139310,139316,139326],{"__ignoreMap":141},[228,139311,139312,139314],{"class":230,"line":231},[228,139313,130459],{"class":2077},[228,139315,15687],{"class":238},[228,139317,139318,139320,139322,139324],{"class":230,"line":142},[228,139319,131091],{"class":287},[228,139321,51552],{"class":238},[228,139323,23851],{"class":287},[228,139325,1404],{"class":238},[228,139327,139328],{"class":230,"line":1293},[228,139329,1679],{"class":238},[19,139331,139332],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[1576,139334],{"style":126467,"src":139335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[220,139337,139338],{"className":126611,"code":130768,"language":126613,"meta":141,"style":141},[30,139339,139340,139346,139362],{"__ignoreMap":141},[228,139341,139342,139344],{"class":230,"line":231},[228,139343,51726],{"class":51415},[228,139345,15687],{"class":238},[228,139347,139348,139350,139352,139354,139356,139358,139360],{"class":230,"line":142},[228,139349,71011],{"class":287},[228,139351,51552],{"class":238},[228,139353,456],{"class":287},[228,139355,51607],{"class":234},[228,139357,51636],{"class":287},[228,139359,130003],{"class":287},[228,139361,1404],{"class":238},[228,139363,139364],{"class":230,"line":1293},[228,139365,1679],{"class":238},[200,139367,139369],{"id":139368},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[1576,139371],{"style":126467,"src":139372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1245,139374,139375,139380,139385],{},[186,139376,139377,139379],{},[30,139378,131814],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[186,139381,139382,139384],{},[30,139383,131814],{}," 里面有一个大的版心",[186,139386,139387,139388,139391,139392],{},"版心里面包含 1 号盒子，",[30,139389,139390],{},"mod_service"," 是服务模块，mod 是模块的意思",[1245,139393,139394,139399,139412,139428,139433],{},[186,139395,139111,139396,139398],{},[30,139397,139390],{}," 设置高度（80px）和下边框",[186,139400,139401,139402,139405,139406,139408,139409,139411],{},"在里面定义 ",[30,139403,139404],{},"ul > li"," ,每个",[30,139407,186],{}," 宽度是300px 高度是 50px，给每个",[30,139410,186],{},"设置35px的左内边距",[186,139413,139414,139415,139417,139418,139420,139421,139423,139424,18525,139426,120352],{},"在每个",[30,139416,186],{},"里面，放一个 ",[30,139419,23025],{},"（里面放图标），一个",[30,139422,51726],{},"（里面放",[30,139425,51726],{},[30,139427,19],{},[186,139429,139111,139430,139432],{},[30,139431,23025],{},"设置浮动，让h5与这个div左右排列",[186,139434,139435],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,139437,138450],{},[220,139439,139441],{"className":126611,"code":139440,"language":126613,"meta":141,"style":141},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[30,139442,139443,139449,139461,139473,139500],{"__ignoreMap":141},[228,139444,139445,139447],{"class":230,"line":231},[228,139446,134368],{"class":2077},[228,139448,15687],{"class":238},[228,139450,139451,139453,139455,139457,139459],{"class":230,"line":142},[228,139452,70683],{"class":287},[228,139454,51552],{"class":238},[228,139456,938],{"class":287},[228,139458,51607],{"class":234},[228,139460,1404],{"class":238},[228,139462,139463,139465,139467,139469,139471],{"class":230,"line":1293},[228,139464,70903],{"class":287},[228,139466,51552],{"class":238},[228,139468,938],{"class":287},[228,139470,51607],{"class":234},[228,139472,1404],{"class":238},[228,139474,139475,139477,139479,139481,139483,139485,139487,139489,139492,139494,139496,139498],{"class":230,"line":1308},[228,139476,70726],{"class":287},[228,139478,51552],{"class":238},[228,139480,61841],{"class":287},[228,139482,239],{"class":238},[228,139484,134407],{"class":5331},[228,139486,13829],{"class":238},[228,139488,61851],{"class":287},[228,139490,139491],{"class":287}," -10",[228,139493,51607],{"class":234},[228,139495,134426],{"class":287},[228,139497,51607],{"class":234},[228,139499,1404],{"class":238},[228,139501,139502],{"class":230,"line":1314},[228,139503,1679],{"class":238},[19,139505,138490],{},[220,139507,139508],{"className":126611,"code":139440,"language":126613,"meta":141,"style":141},[30,139509,139510,139516,139528,139540,139566],{"__ignoreMap":141},[228,139511,139512,139514],{"class":230,"line":231},[228,139513,134368],{"class":2077},[228,139515,15687],{"class":238},[228,139517,139518,139520,139522,139524,139526],{"class":230,"line":142},[228,139519,70683],{"class":287},[228,139521,51552],{"class":238},[228,139523,938],{"class":287},[228,139525,51607],{"class":234},[228,139527,1404],{"class":238},[228,139529,139530,139532,139534,139536,139538],{"class":230,"line":1293},[228,139531,70903],{"class":287},[228,139533,51552],{"class":238},[228,139535,938],{"class":287},[228,139537,51607],{"class":234},[228,139539,1404],{"class":238},[228,139541,139542,139544,139546,139548,139550,139552,139554,139556,139558,139560,139562,139564],{"class":230,"line":1308},[228,139543,70726],{"class":287},[228,139545,51552],{"class":238},[228,139547,61841],{"class":287},[228,139549,239],{"class":238},[228,139551,134407],{"class":5331},[228,139553,13829],{"class":238},[228,139555,61851],{"class":287},[228,139557,139491],{"class":287},[228,139559,51607],{"class":234},[228,139561,134426],{"class":287},[228,139563,51607],{"class":234},[228,139565,1404],{"class":238},[228,139567,139568],{"class":230,"line":1314},[228,139569,1679],{"class":238},[19,139571,139572],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1245,139574,139575,139578,139584,139590,139602],{},[186,139576,139577],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[186,139579,139580,139581,120352],{},"里面的布局利用 自定义列表来实现（",[30,139582,139583],{},"dl > dt + dd",[186,139585,139111,139586,139589],{},[30,139587,139588],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[186,139591,139111,139592,139595,139596,18525,139598,139601],{},[30,139593,139594],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[30,139597,139594],{},[30,139599,139600],{},"dd","之间有些距离",[186,139603,139604],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,139606,138450],{},[220,139608,139609],{"className":126611,"code":138800,"language":126613,"meta":141,"style":141},[30,139610,139611,139617,139629],{"__ignoreMap":141},[228,139612,139613,139615],{"class":230,"line":231},[228,139614,51726],{"class":51415},[228,139616,15687],{"class":238},[228,139618,139619,139621,139623,139625,139627],{"class":230,"line":142},[228,139620,70585],{"class":287},[228,139622,51552],{"class":238},[228,139624,430],{"class":287},[228,139626,51671],{"class":287},[228,139628,1404],{"class":238},[228,139630,139631],{"class":230,"line":1293},[228,139632,1679],{"class":238},[19,139634,138490],{},[220,139636,139637],{"className":126611,"code":138800,"language":126613,"meta":141,"style":141},[30,139638,139639,139645,139657],{"__ignoreMap":141},[228,139640,139641,139643],{"class":230,"line":231},[228,139642,51726],{"class":51415},[228,139644,15687],{"class":238},[228,139646,139647,139649,139651,139653,139655],{"class":230,"line":142},[228,139648,70585],{"class":287},[228,139650,51552],{"class":238},[228,139652,430],{"class":287},[228,139654,51671],{"class":287},[228,139656,1404],{"class":238},[228,139658,139659],{"class":230,"line":1293},[228,139660,1679],{"class":238},[19,139662,139663],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1245,139665,139666,139675,139678,139689],{},[186,139667,139668,139669,139671,139672,139674],{},"分为上下两块，上面是 ",[30,139670,131831],{}," 友情链接，下面是 ",[30,139673,131824],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[186,139676,139677],{},"把内容分别复制到相应模块中",[186,139679,139111,139680,139682,139683,139685,139686,139688],{},[30,139681,131831],{}," 设置 15px 的下外边距，给",[30,139684,131831],{}," 里面 的 ",[30,139687,476],{}," 标签设置 左右 3px 的外边距",[186,139690,139691,139692,139694],{},"给",[30,139693,131824],{}," 设置 20px 的行高",[19,139696,138450],{},[220,139698,139699],{"className":126611,"code":138800,"language":126613,"meta":141,"style":141},[30,139700,139701,139707,139719],{"__ignoreMap":141},[228,139702,139703,139705],{"class":230,"line":231},[228,139704,51726],{"class":51415},[228,139706,15687],{"class":238},[228,139708,139709,139711,139713,139715,139717],{"class":230,"line":142},[228,139710,70585],{"class":287},[228,139712,51552],{"class":238},[228,139714,430],{"class":287},[228,139716,51671],{"class":287},[228,139718,1404],{"class":238},[228,139720,139721],{"class":230,"line":1293},[228,139722,1679],{"class":238},[19,139724,138490],{},[220,139726,139727],{"className":126611,"code":138800,"language":126613,"meta":141,"style":141},[30,139728,139729,139735,139747],{"__ignoreMap":141},[228,139730,139731,139733],{"class":230,"line":231},[228,139732,51726],{"class":51415},[228,139734,15687],{"class":238},[228,139736,139737,139739,139741,139743,139745],{"class":230,"line":142},[228,139738,70585],{"class":287},[228,139740,51552],{"class":238},[228,139742,430],{"class":287},[228,139744,51671],{"class":287},[228,139746,1404],{"class":238},[228,139748,139749],{"class":230,"line":1293},[228,139750,1679],{"class":238},[19,139752,139753],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[5241,139755,139756],{},"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":141,"searchDepth":142,"depth":142,"links":139758},[139759,139760,139761,139768],{"id":138039,"depth":142,"text":138040},{"id":138058,"depth":142,"text":138059},{"id":138085,"depth":142,"text":138086,"children":139762},[139763,139764,139765,139766,139767],{"id":138089,"depth":1293,"text":138090},{"id":138102,"depth":1293,"text":138103},{"id":138126,"depth":1293,"text":138127},{"id":138148,"depth":1293,"text":138149},{"id":138220,"depth":1293,"text":138221},{"id":138346,"depth":142,"text":138347,"children":139769},[139770,139771,139772,139773,139775],{"id":138350,"depth":1293,"text":138351},{"id":138357,"depth":1293,"text":138358},{"id":138529,"depth":1293,"text":138530},{"id":139070,"depth":1293,"text":139774},"15.4.4 nav导航模块制作",{"id":139368,"depth":1293,"text":139369},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138031,"description":154},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139782,"title":139783,"body":139784,"description":154,"extension":155,"meta":142186,"navigation":157,"path":142187,"seo":142188,"stem":142189,"__hash__":142190},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139785,"toc":142163},[139786,139789,139793,139797,139809,139812,139815,139818,139829,139831,139855,139857,139881,139886,139889,139891,139927,139929,139965,139968,139973,139976,139979,139982,140012,140019,140022,140032,140034,140068,140071,140105,140111,140128,140130,140166,140168,140204,140209,140234,140236,140262,140264,140288,140295,140298,140362,140364,140406,140408,140448,140455,140460,140462,140492,140494,140524,140528,140531,140538,140550,140552,140578,140580,140604,140607,140609,140633,140639,140649,140651,140681,140683,140713,140720,140761,140763,140799,140801,140837,140841,140844,140847,140850,140856,140861,140864,140887,140890,140914,140917,140941,140946,140949,140952,140955,140958,140961,141035,141037,141067,141069,141099,141102,141105,141137,141141,141145,141159,141168,141171,141176,141178,141272,141274,141368,141391,141393,141417,141419,141443,141450,141453,141463,141465,141489,141494,141502,141504,141534,141539,141579,141581,141607,141609,141635,141639,141642,141647,141650,141654,141662,141669,141677,141679,141709,141711,141741,141749,141752,141755,141757,141787,141789,141819,141822,141827,141829,141853,141855,141879,141882,141967,141969,141993,141995,142019,142023,142025,142049,142051,142085,142089,142103,142106,142111,142114,142119,142122,142152,142160],[10,139787,139783],{"id":139788},"_16-品优购项目下篇-主体与页面开发",[14,139790,139792],{"id":139791},"_161-项目主体模块制作","16.1 项目主体模块制作",[200,139794,139796],{"id":139795},"_1611-首页制作","16.1.1 首页制作",[19,139798,139799,139801,139802,139804,139805,139808],{},[388,139800,102173],{}," 主体模块是 ",[388,139803,74173],{}," 里面专有的，注意需要新的样式文件 ",[388,139806,139807],{},"index.css，"," 就不要写在common.css中了",[1576,139810],{"style":126467,"src":139811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[1576,139813],{"style":126467,"src":139814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,139816,139817],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1245,139819,139820,139823,139826],{},[186,139821,139822],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[186,139824,139825],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[186,139827,139828],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,139830,138450],{},[220,139832,139833],{"className":126611,"code":139281,"language":126613,"meta":141,"style":141},[30,139834,139835,139841,139851],{"__ignoreMap":141},[228,139836,139837,139839],{"class":230,"line":231},[228,139838,130459],{"class":2077},[228,139840,15687],{"class":238},[228,139842,139843,139845,139847,139849],{"class":230,"line":142},[228,139844,131091],{"class":287},[228,139846,51552],{"class":238},[228,139848,23851],{"class":287},[228,139850,1404],{"class":238},[228,139852,139853],{"class":230,"line":1293},[228,139854,1679],{"class":238},[19,139856,138490],{},[220,139858,139859],{"className":126611,"code":139281,"language":126613,"meta":141,"style":141},[30,139860,139861,139867,139877],{"__ignoreMap":141},[228,139862,139863,139865],{"class":230,"line":231},[228,139864,130459],{"class":2077},[228,139866,15687],{"class":238},[228,139868,139869,139871,139873,139875],{"class":230,"line":142},[228,139870,131091],{"class":287},[228,139872,51552],{"class":238},[228,139874,23851],{"class":287},[228,139876,1404],{"class":238},[228,139878,139879],{"class":230,"line":1293},[228,139880,1679],{"class":238},[183,139882,139883],{},[186,139884,139885],{},"左侧focus模块制作",[1576,139887],{"style":126467,"src":139888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,139890,138450],{},[220,139892,139893],{"className":126611,"code":127934,"language":126613,"meta":141,"style":141},[30,139894,139895,139903,139913,139923],{"__ignoreMap":141},[228,139896,139897,139899,139901],{"class":230,"line":231},[228,139898,53936],{"class":51415},[228,139900,62015],{"class":2077},[228,139902,15687],{"class":238},[228,139904,139905,139907,139909,139911],{"class":230,"line":142},[228,139906,127949],{"class":287},[228,139908,51552],{"class":238},[228,139910,55004],{"class":287},[228,139912,1404],{"class":238},[228,139914,139915,139917,139919,139921],{"class":230,"line":1293},[228,139916,70913],{"class":287},[228,139918,51552],{"class":238},[228,139920,54852],{"class":287},[228,139922,1404],{"class":238},[228,139924,139925],{"class":230,"line":1308},[228,139926,1679],{"class":238},[19,139928,138490],{},[220,139930,139931],{"className":126611,"code":127934,"language":126613,"meta":141,"style":141},[30,139932,139933,139941,139951,139961],{"__ignoreMap":141},[228,139934,139935,139937,139939],{"class":230,"line":231},[228,139936,53936],{"class":51415},[228,139938,62015],{"class":2077},[228,139940,15687],{"class":238},[228,139942,139943,139945,139947,139949],{"class":230,"line":142},[228,139944,127949],{"class":287},[228,139946,51552],{"class":238},[228,139948,55004],{"class":287},[228,139950,1404],{"class":238},[228,139952,139953,139955,139957,139959],{"class":230,"line":1293},[228,139954,70913],{"class":287},[228,139956,51552],{"class":238},[228,139958,54852],{"class":287},[228,139960,1404],{"class":238},[228,139962,139963],{"class":230,"line":1308},[228,139964,1679],{"class":238},[19,139966,139967],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[183,139969,139970],{"start":142},[186,139971,139972],{},"右侧newsflash模块制作",[1576,139974],{"style":126467,"src":139975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,139977,139978],{},"右侧的模块 分为上中下三个盒子",[19,139980,139981],{},"结构代码：",[220,139983,139984],{"className":127358,"code":134113,"language":127360,"meta":141,"style":141},[30,139985,139986],{"__ignoreMap":141},[228,139987,139988,139990,139992,139994,139996,139998,140000,140002,140004,140006,140008,140010],{"class":230,"line":231},[228,139989,1148],{"class":238},[228,139991,1576],{"class":51415},[228,139993,55354],{"class":2077},[228,139995,284],{"class":238},[228,139997,134128],{"class":343},[228,139999,55362],{"class":2077},[228,140001,284],{"class":238},[228,140003,134135],{"class":343},[228,140005,134138],{"class":2077},[228,140007,284],{"class":238},[228,140009,134143],{"class":343},[228,140011,51422],{"class":238},[19,140013,140014,140015,140018],{},"1 号盒子为 ",[30,140016,140017],{},"news"," 新闻模块 高度为 165px",[1576,140020],{"style":126467,"src":140021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,140023,140024,140025,140028,140029],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[30,140026,140027],{},"news-hd","，下面是 ",[30,140030,140031],{},"news-bd",[19,140033,139981],{},[220,140035,140036],{"className":127358,"code":130715,"language":127360,"meta":141,"style":141},[30,140037,140038,140042,140056,140060],{"__ignoreMap":141},[228,140039,140040],{"class":230,"line":231},[228,140041,130722],{"class":297},[228,140043,140044,140046,140048,140050,140052,140054],{"class":230,"line":142},[228,140045,1148],{"class":238},[228,140047,51726],{"class":51415},[228,140049,53601],{"class":2077},[228,140051,284],{"class":238},[228,140053,130735],{"class":343},[228,140055,51422],{"class":238},[228,140057,140058],{"class":230,"line":1293},[228,140059,130742],{"class":238},[228,140061,140062,140064,140066],{"class":230,"line":1308},[228,140063,51900],{"class":238},[228,140065,51726],{"class":51415},[228,140067,51422],{"class":238},[19,140069,140070],{},"样式代码：",[220,140072,140073],{"className":127358,"code":130715,"language":127360,"meta":141,"style":141},[30,140074,140075,140079,140093,140097],{"__ignoreMap":141},[228,140076,140077],{"class":230,"line":231},[228,140078,130722],{"class":297},[228,140080,140081,140083,140085,140087,140089,140091],{"class":230,"line":142},[228,140082,1148],{"class":238},[228,140084,51726],{"class":51415},[228,140086,53601],{"class":2077},[228,140088,284],{"class":238},[228,140090,130735],{"class":343},[228,140092,51422],{"class":238},[228,140094,140095],{"class":230,"line":1293},[228,140096,130742],{"class":238},[228,140098,140099,140101,140103],{"class":230,"line":1308},[228,140100,51900],{"class":238},[228,140102,51726],{"class":51415},[228,140104,51422],{"class":238},[19,140106,140107,140108,140110],{},"上面是",[30,140109,140027],{},"，设置高度是 33px，设置下边框",[1245,140112,140113,140119],{},[186,140114,140115,140116,140118],{},"里面放一个",[30,140117,23025],{}," 标题",[186,140120,140121,140122,140124,140125,140127],{},"放一个a",[30,140123,102808],{},"，内容是 更多，然后让 ",[30,140126,476],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,140129,139981],{},[220,140131,140132],{"className":126611,"code":138453,"language":126613,"meta":141,"style":141},[30,140133,140134,140142,140152,140162],{"__ignoreMap":141},[228,140135,140136,140138,140140],{"class":230,"line":231},[228,140137,51726],{"class":51415},[228,140139,137612],{"class":2077},[228,140141,15687],{"class":238},[228,140143,140144,140146,140148,140150],{"class":230,"line":142},[228,140145,137619],{"class":287},[228,140147,51552],{"class":238},[228,140149,7767],{"class":343},[228,140151,1404],{"class":238},[228,140153,140154,140156,140158,140160],{"class":230,"line":1293},[228,140155,128227],{"class":287},[228,140157,51552],{"class":238},[228,140159,60984],{"class":287},[228,140161,1404],{"class":238},[228,140163,140164],{"class":230,"line":1308},[228,140165,1679],{"class":238},[19,140167,140070],{},[220,140169,140170],{"className":126611,"code":138453,"language":126613,"meta":141,"style":141},[30,140171,140172,140180,140190,140200],{"__ignoreMap":141},[228,140173,140174,140176,140178],{"class":230,"line":231},[228,140175,51726],{"class":51415},[228,140177,137612],{"class":2077},[228,140179,15687],{"class":238},[228,140181,140182,140184,140186,140188],{"class":230,"line":142},[228,140183,137619],{"class":287},[228,140185,51552],{"class":238},[228,140187,7767],{"class":343},[228,140189,1404],{"class":238},[228,140191,140192,140194,140196,140198],{"class":230,"line":1293},[228,140193,128227],{"class":287},[228,140195,51552],{"class":238},[228,140197,60984],{"class":287},[228,140199,1404],{"class":238},[228,140201,140202],{"class":230,"line":1308},[228,140203,1679],{"class":238},[19,140205,140206,140207],{},"下面是",[30,140208,140031],{},[1245,140210,140211,140219],{},[186,140212,140213,140214,101133,140216,140218],{},"里面包含 ",[30,140215,1245],{},[30,140217,186],{}," 还有链接",[186,140220,139691,140221,140223,140224,140226,140227,140230,140231],{},[30,140222,186],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[30,140225,131277],{}," 2.设置 ",[30,140228,140229],{},"white-space: nowrap;"," 3. 设置 ",[30,140232,140233],{},"text-overflow: ellipsis;",[19,140235,139981],{},[220,140237,140239],{"className":126611,"code":140238,"language":126613,"meta":141,"style":141},"div {\n  overflow: hidden;\n}\n",[30,140240,140241,140247,140258],{"__ignoreMap":141},[228,140242,140243,140245],{"class":230,"line":231},[228,140244,51726],{"class":51415},[228,140246,15687],{"class":238},[228,140248,140249,140252,140254,140256],{"class":230,"line":142},[228,140250,140251],{"class":287},"  overflow",[228,140253,51552],{"class":238},[228,140255,61829],{"class":287},[228,140257,1404],{"class":238},[228,140259,140260],{"class":230,"line":1293},[228,140261,1679],{"class":238},[19,140263,140070],{},[220,140265,140266],{"className":126611,"code":140238,"language":126613,"meta":141,"style":141},[30,140267,140268,140274,140284],{"__ignoreMap":141},[228,140269,140270,140272],{"class":230,"line":231},[228,140271,51726],{"class":51415},[228,140273,15687],{"class":238},[228,140275,140276,140278,140280,140282],{"class":230,"line":142},[228,140277,140251],{"class":287},[228,140279,51552],{"class":238},[228,140281,61829],{"class":287},[228,140283,1404],{"class":238},[228,140285,140286],{"class":230,"line":1293},[228,140287,1679],{"class":238},[19,140289,140290,140291,140294],{},"2 号盒子为 ",[30,140292,140293],{},"lifeservice"," 生活服务模块 高度为 209px",[1576,140296],{"style":126467,"src":140297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1245,140299,140300,140303,140313,140337,140348],{},[186,140301,140302],{},"设置边框（左右下边框）",[186,140304,140305,140306,140309,140310,140312],{},"里面的内容 是 ",[30,140307,140308],{},"ul > 12*li","，给",[30,140311,186],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[186,140314,140315,140316],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1245,140317,140318,140323,140332],{},[186,140319,140320,140322],{},[30,140321,140293],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[186,140324,140325,140326,140328,140329,140331],{},"可以让 ",[30,140327,140293],{}," 里面的 ",[30,140330,1245],{}," 宽度为 252，就可以装的下 4 个 小 li",[186,140333,140334,140336],{},[30,140335,140293],{}," 盒子 overflow 隐藏多余的部分就可以了",[186,140338,116582,140339,140341,140342,140344,140345,140347],{},[30,140340,186],{}," 里面放一个 ",[30,140343,679],{},"（里面放图标），下面的文本用 ",[30,140346,19],{}," 标签包裹",[186,140349,139111,140350,140352,140353,140355,140356,139145,140358,140361],{},[30,140351,679],{}," 设置 24px宽和28px的高（注意 ",[30,140354,679],{}," 是行内元素， 转成行内块），给 ",[30,140357,186],{},[30,140359,140360],{},"text-align:center"," 让里面内容居中显示",[19,140363,139981],{},[220,140365,140367],{"className":126611,"code":140366,"language":126613,"meta":141,"style":141},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[30,140368,140369,140387,140392,140402],{"__ignoreMap":141},[228,140370,140371,140373,140375,140377,140379,140381,140383,140385],{"class":230,"line":231},[228,140372,228],{"class":51415},[228,140374,12550],{"class":238},[228,140376,476],{"class":51415},[228,140378,12550],{"class":238},[228,140380,23668],{"class":51415},[228,140382,12550],{"class":238},[228,140384,388],{"class":51415},[228,140386,15687],{"class":238},[228,140388,140389],{"class":230,"line":142},[228,140390,140391],{"class":297},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[228,140393,140394,140396,140398,140400],{"class":230,"line":1293},[228,140395,128227],{"class":287},[228,140397,51552],{"class":238},[228,140399,128289],{"class":287},[228,140401,1404],{"class":238},[228,140403,140404],{"class":230,"line":1308},[228,140405,1679],{"class":238},[19,140407,140070],{},[220,140409,140410],{"className":126611,"code":140366,"language":126613,"meta":141,"style":141},[30,140411,140412,140430,140434,140444],{"__ignoreMap":141},[228,140413,140414,140416,140418,140420,140422,140424,140426,140428],{"class":230,"line":231},[228,140415,228],{"class":51415},[228,140417,12550],{"class":238},[228,140419,476],{"class":51415},[228,140421,12550],{"class":238},[228,140423,23668],{"class":51415},[228,140425,12550],{"class":238},[228,140427,388],{"class":51415},[228,140429,15687],{"class":238},[228,140431,140432],{"class":230,"line":142},[228,140433,140391],{"class":297},[228,140435,140436,140438,140440,140442],{"class":230,"line":1293},[228,140437,128227],{"class":287},[228,140439,51552],{"class":238},[228,140441,128289],{"class":287},[228,140443,1404],{"class":238},[228,140445,140446],{"class":230,"line":1308},[228,140447,1679],{"class":238},[19,140449,140450,140451,140454],{},"3 号盒子为 ",[30,140452,140453],{},"bargain"," 特价商品",[1245,140456,140457],{},[186,140458,140459],{},"这个比较简单，直接插入一张图片即可",[19,140461,139981],{},[220,140463,140464],{"className":127358,"code":134113,"language":127360,"meta":141,"style":141},[30,140465,140466],{"__ignoreMap":141},[228,140467,140468,140470,140472,140474,140476,140478,140480,140482,140484,140486,140488,140490],{"class":230,"line":231},[228,140469,1148],{"class":238},[228,140471,1576],{"class":51415},[228,140473,55354],{"class":2077},[228,140475,284],{"class":238},[228,140477,134128],{"class":343},[228,140479,55362],{"class":2077},[228,140481,284],{"class":238},[228,140483,134135],{"class":343},[228,140485,134138],{"class":2077},[228,140487,284],{"class":238},[228,140489,134143],{"class":343},[228,140491,51422],{"class":238},[19,140493,140070],{},[220,140495,140496],{"className":127358,"code":134113,"language":127360,"meta":141,"style":141},[30,140497,140498],{"__ignoreMap":141},[228,140499,140500,140502,140504,140506,140508,140510,140512,140514,140516,140518,140520,140522],{"class":230,"line":231},[228,140501,1148],{"class":238},[228,140503,1576],{"class":51415},[228,140505,55354],{"class":2077},[228,140507,284],{"class":238},[228,140509,134128],{"class":343},[228,140511,55362],{"class":2077},[228,140513,284],{"class":238},[228,140515,134135],{"class":343},[228,140517,134138],{"class":2077},[228,140519,284],{"class":238},[228,140521,134143],{"class":343},[228,140523,51422],{"class":238},[200,140525,140527],{"id":140526},"_1612-推荐模块制作","16.1.2 推荐模块制作",[1576,140529],{"style":126467,"src":140530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,140532,140533,140534,140537],{},"大盒子 ",[30,140535,140536],{},"recom"," 推荐模块 recommend",[1245,140539,140540],{},[186,140541,140542,140543,140545,140546,140549],{},"给这个 ",[30,140544,140536],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[30,140547,140548],{},"#ebebeb","），设置距离上边 12px",[19,140551,139981],{},[220,140553,140555],{"className":126611,"code":140554,"language":126613,"meta":141,"style":141},"div {\n  background-color: #f0f0f0;\n}\n",[30,140556,140557,140563,140574],{"__ignoreMap":141},[228,140558,140559,140561],{"class":230,"line":231},[228,140560,51726],{"class":51415},[228,140562,15687],{"class":238},[228,140564,140565,140567,140569,140572],{"class":230,"line":142},[228,140566,70993],{"class":287},[228,140568,51552],{"class":238},[228,140570,140571],{"class":287},"#f0f0f0",[228,140573,1404],{"class":238},[228,140575,140576],{"class":230,"line":1293},[228,140577,1679],{"class":238},[19,140579,140070],{},[220,140581,140582],{"className":126611,"code":140554,"language":126613,"meta":141,"style":141},[30,140583,140584,140590,140600],{"__ignoreMap":141},[228,140585,140586,140588],{"class":230,"line":231},[228,140587,51726],{"class":51415},[228,140589,15687],{"class":238},[228,140591,140592,140594,140596,140598],{"class":230,"line":142},[228,140593,70993],{"class":287},[228,140595,51552],{"class":238},[228,140597,140571],{"class":287},[228,140599,1404],{"class":238},[228,140601,140602],{"class":230,"line":1293},[228,140603,1679],{"class":238},[19,140605,140606],{},"里面包含 2 个盒子， 浮动即可",[19,140608,139981],{},[220,140610,140611],{"className":126611,"code":139281,"language":126613,"meta":141,"style":141},[30,140612,140613,140619,140629],{"__ignoreMap":141},[228,140614,140615,140617],{"class":230,"line":231},[228,140616,130459],{"class":2077},[228,140618,15687],{"class":238},[228,140620,140621,140623,140625,140627],{"class":230,"line":142},[228,140622,131091],{"class":287},[228,140624,51552],{"class":238},[228,140626,23851],{"class":287},[228,140628,1404],{"class":238},[228,140630,140631],{"class":230,"line":1293},[228,140632,1679],{"class":238},[19,140634,140635,140636],{},"1 号盒子 ",[30,140637,140638],{},"recom_hd",[1245,140640,140641,140644],{},[186,140642,140643],{},"设置宽度205px，高度163px",[186,140645,140115,140646,140648],{},[30,140647,1576],{},"标签，插入图片即可",[19,140650,139981],{},[220,140652,140653],{"className":127358,"code":134113,"language":127360,"meta":141,"style":141},[30,140654,140655],{"__ignoreMap":141},[228,140656,140657,140659,140661,140663,140665,140667,140669,140671,140673,140675,140677,140679],{"class":230,"line":231},[228,140658,1148],{"class":238},[228,140660,1576],{"class":51415},[228,140662,55354],{"class":2077},[228,140664,284],{"class":238},[228,140666,134128],{"class":343},[228,140668,55362],{"class":2077},[228,140670,284],{"class":238},[228,140672,134135],{"class":343},[228,140674,134138],{"class":2077},[228,140676,284],{"class":238},[228,140678,134143],{"class":343},[228,140680,51422],{"class":238},[19,140682,140070],{},[220,140684,140685],{"className":127358,"code":134113,"language":127360,"meta":141,"style":141},[30,140686,140687],{"__ignoreMap":141},[228,140688,140689,140691,140693,140695,140697,140699,140701,140703,140705,140707,140709,140711],{"class":230,"line":231},[228,140690,1148],{"class":238},[228,140692,1576],{"class":51415},[228,140694,55354],{"class":2077},[228,140696,284],{"class":238},[228,140698,134128],{"class":343},[228,140700,55362],{"class":2077},[228,140702,284],{"class":238},[228,140704,134135],{"class":343},[228,140706,134138],{"class":2077},[228,140708,284],{"class":238},[228,140710,134143],{"class":343},[228,140712,51422],{"class":238},[19,140714,140715,140716,140719],{},"2 号盒子 ",[30,140717,140718],{},"recom_bd"," ，注意里面的小竖线",[1245,140721,140722,140733,140736,140741,140746],{},[186,140723,140724,140725,140727,140728,140730,140731],{},"右侧结构里面放 ",[30,140726,1245],{}," 包含 4个 ",[30,140729,186],{},"，每个li里面包含一个",[30,140732,1576],{},[186,140734,140735],{},"直接利用切片工具把里面的内容当成一张图片",[186,140737,139111,140738,140740],{},[30,140739,186],{}," 设置浮动",[186,140742,139111,140743,140745],{},[30,140744,1576],{}," 设置宽高，宽度 248px，高度 163px",[186,140747,140748,140749,140309,140752,140754,140755,140757,140758],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[30,140750,140751],{},"top 10px",[30,140753,186],{},"设置相对定位（注意，最后一个",[30,140756,186],{},"不用设置伪元素），可以利用 ",[30,140759,140760],{},"nth-child(-n+3){...}",[19,140762,139981],{},[220,140764,140765],{"className":126611,"code":138453,"language":126613,"meta":141,"style":141},[30,140766,140767,140775,140785,140795],{"__ignoreMap":141},[228,140768,140769,140771,140773],{"class":230,"line":231},[228,140770,51726],{"class":51415},[228,140772,137612],{"class":2077},[228,140774,15687],{"class":238},[228,140776,140777,140779,140781,140783],{"class":230,"line":142},[228,140778,137619],{"class":287},[228,140780,51552],{"class":238},[228,140782,7767],{"class":343},[228,140784,1404],{"class":238},[228,140786,140787,140789,140791,140793],{"class":230,"line":1293},[228,140788,128227],{"class":287},[228,140790,51552],{"class":238},[228,140792,60984],{"class":287},[228,140794,1404],{"class":238},[228,140796,140797],{"class":230,"line":1308},[228,140798,1679],{"class":238},[19,140800,140070],{},[220,140802,140803],{"className":126611,"code":138453,"language":126613,"meta":141,"style":141},[30,140804,140805,140813,140823,140833],{"__ignoreMap":141},[228,140806,140807,140809,140811],{"class":230,"line":231},[228,140808,51726],{"class":51415},[228,140810,137612],{"class":2077},[228,140812,15687],{"class":238},[228,140814,140815,140817,140819,140821],{"class":230,"line":142},[228,140816,137619],{"class":287},[228,140818,51552],{"class":238},[228,140820,7767],{"class":343},[228,140822,1404],{"class":238},[228,140824,140825,140827,140829,140831],{"class":230,"line":1293},[228,140826,128227],{"class":287},[228,140828,51552],{"class":238},[228,140830,60984],{"class":287},[228,140832,1404],{"class":238},[228,140834,140835],{"class":230,"line":1308},[228,140836,1679],{"class":238},[200,140838,140840],{"id":140839},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[1576,140842],{"style":126467,"src":140843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,140845,140846],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,140848,140849],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,140851,140852,140855],{},[30,140853,140854],{},"box_hd"," 制作",[19,140857,140635,140858,140860],{},[30,140859,140854],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[1576,140862],{"style":126467,"src":140863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1245,140865,140866,140871,140876,140879],{},[186,140867,140868,140870],{},[30,140869,140854],{}," 给 30px 的高度，2个像素的下边框",[186,140872,140873,140874],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[30,140875,139122],{},[186,140877,140878],{},"左侧盒左浮动，右侧盒子右浮动",[186,140880,140881,140883,140884,140886],{},[30,140882,476],{},"标签之间的距离用左右的",[30,140885,30998],{},"撑开即可",[19,140888,140889],{},"结构代码",[220,140891,140892],{"className":126611,"code":139281,"language":126613,"meta":141,"style":141},[30,140893,140894,140900,140910],{"__ignoreMap":141},[228,140895,140896,140898],{"class":230,"line":231},[228,140897,130459],{"class":2077},[228,140899,15687],{"class":238},[228,140901,140902,140904,140906,140908],{"class":230,"line":142},[228,140903,131091],{"class":287},[228,140905,51552],{"class":238},[228,140907,23851],{"class":287},[228,140909,1404],{"class":238},[228,140911,140912],{"class":230,"line":1293},[228,140913,1679],{"class":238},[19,140915,140916],{},"样式代码",[220,140918,140919],{"className":126611,"code":139281,"language":126613,"meta":141,"style":141},[30,140920,140921,140927,140937],{"__ignoreMap":141},[228,140922,140923,140925],{"class":230,"line":231},[228,140924,130459],{"class":2077},[228,140926,15687],{"class":238},[228,140928,140929,140931,140933,140935],{"class":230,"line":142},[228,140930,131091],{"class":287},[228,140932,51552],{"class":238},[228,140934,23851],{"class":287},[228,140936,1404],{"class":238},[228,140938,140939],{"class":230,"line":1293},[228,140940,1679],{"class":238},[19,140942,140943,140855],{},[30,140944,140945],{},"box_bd",[19,140947,140948],{},"2 号盒子 box_bd，不要给高度",[1576,140950],{"style":126467,"src":140951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,140953,140954],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,140956,140957],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,140959,140960],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1245,140962,140963,140975,140991],{},[186,140964,140965,140967,140968,140971,140972,140974],{},[30,140966,140945],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[30,140969,140970],{},"tab_content","，在",[30,140973,140970],{}," 里面包裹tab选项卡对应的内容",[186,140976,140977,140978,140981,140982,140984,140985,140987,140988,140990],{},"内容被一个大盒子包裹（",[30,140979,140980],{},"tab_list_item","），里面是 ",[30,140983,1245],{}," 包裹 5个 ",[30,140986,186],{},"，每个",[30,140989,186],{},"设置对应的宽度，然后设置浮动",[186,140992,140993,140994,140996,140997,140999,141000],{},"而这5个",[30,140995,186],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[30,140998,186],{},"设置",[1245,141001,141002,141020,141023],{},[186,141003,141004,141005,141007,141008,141010,141011,141013,141014,141016,141017,141019],{},"第一个小 ",[30,141006,186],{}," 分为上下结构，上面是 ",[30,141009,1245],{}," 包裹 ",[30,141012,186],{}," ，",[30,141015,186],{},"里面包裹 ",[30,141018,476],{},"，下面插入一张图片",[186,141021,141022],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[186,141024,141025,141026,141028,141029,141031,141032,141034],{},"后面的小 ",[30,141027,186],{}," 里面先放一个",[30,141030,476],{},"标签，然后在",[30,141033,476],{},"标签里面插入图片即可",[19,141036,140889],{},[220,141038,141039],{"className":127358,"code":134113,"language":127360,"meta":141,"style":141},[30,141040,141041],{"__ignoreMap":141},[228,141042,141043,141045,141047,141049,141051,141053,141055,141057,141059,141061,141063,141065],{"class":230,"line":231},[228,141044,1148],{"class":238},[228,141046,1576],{"class":51415},[228,141048,55354],{"class":2077},[228,141050,284],{"class":238},[228,141052,134128],{"class":343},[228,141054,55362],{"class":2077},[228,141056,284],{"class":238},[228,141058,134135],{"class":343},[228,141060,134138],{"class":2077},[228,141062,284],{"class":238},[228,141064,134143],{"class":343},[228,141066,51422],{"class":238},[19,141068,140916],{},[220,141070,141071],{"className":127358,"code":134113,"language":127360,"meta":141,"style":141},[30,141072,141073],{"__ignoreMap":141},[228,141074,141075,141077,141079,141081,141083,141085,141087,141089,141091,141093,141095,141097],{"class":230,"line":231},[228,141076,1148],{"class":238},[228,141078,1576],{"class":51415},[228,141080,55354],{"class":2077},[228,141082,284],{"class":238},[228,141084,134128],{"class":343},[228,141086,55362],{"class":2077},[228,141088,284],{"class":238},[228,141090,134135],{"class":343},[228,141092,134138],{"class":2077},[228,141094,284],{"class":238},[228,141096,134143],{"class":343},[228,141098,51422],{"class":238},[19,141100,141101],{},"tab栏切换需求！！！！！！介绍：",[1576,141103],{"style":126467,"src":141104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1245,141106,141107,141115,141121,141124],{},[186,141108,141109,141112,141113],{},[30,141110,141111],{},"tab","栏的布局是 ",[30,141114,139122],{},[186,141116,141117,141118,141120],{},"有多少个",[30,141119,141111],{},"选项卡，那么对应就有多少个内容",[186,141122,141123],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[186,141125,141126,141127,141130,141131,141133,141134,141136],{},"等后面我们学习了",[30,141128,141129],{},"js","之后，我们就会配合",[30,141132,141129],{},"来实现，",[30,141135,141111],{},"栏的切换",[14,141138,141140],{"id":141139},"_162-列表制作","16.2 列表制作",[200,141142,141144],{"id":141143},"_1621-准备工作","16.2.1 准备工作",[1245,141146,141147,141150,141153,141156],{},[186,141148,141149],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[186,141151,141152],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[186,141154,141155],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[186,141157,141158],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[200,141160,141162,141163,101133,141165,141167],{"id":141161},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[30,141164,131616],{},[30,141166,53828],{}," 修改",[1576,141169],{"style":126467,"src":141170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1245,141172,141173],{},[186,141174,141175],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,141177,139981],{},[220,141179,141180],{"className":126611,"code":132043,"language":126613,"meta":141,"style":141},[30,141181,141182,141186,141200,141204,141218,141222,141236,141240,141254,141258],{"__ignoreMap":141},[228,141183,141184],{"class":230,"line":231},[228,141185,132050],{"class":297},[228,141187,141188,141190,141192,141194,141196,141198],{"class":230,"line":142},[228,141189,132055],{"class":2077},[228,141191,79922],{"class":238},[228,141193,128971],{"class":287},[228,141195,51552],{"class":238},[228,141197,132064],{"class":287},[228,141199,129541],{"class":238},[228,141201,141202],{"class":230,"line":1293},[228,141203,132071],{"class":297},[228,141205,141206,141208,141210,141212,141214,141216],{"class":230,"line":1308},[228,141207,132076],{"class":2077},[228,141209,79922],{"class":238},[228,141211,128971],{"class":287},[228,141213,51552],{"class":238},[228,141215,54879],{"class":287},[228,141217,129541],{"class":238},[228,141219,141220],{"class":230,"line":1314},[228,141221,132091],{"class":297},[228,141223,141224,141226,141228,141230,141232,141234],{"class":230,"line":1328},[228,141225,132096],{"class":2077},[228,141227,79922],{"class":238},[228,141229,128971],{"class":287},[228,141231,51552],{"class":238},[228,141233,54946],{"class":287},[228,141235,129541],{"class":238},[228,141237,141238],{"class":230,"line":1334},[228,141239,132111],{"class":297},[228,141241,141242,141244,141246,141248,141250,141252],{"class":230,"line":1425},[228,141243,132116],{"class":2077},[228,141245,79922],{"class":238},[228,141247,128971],{"class":287},[228,141249,51552],{"class":238},[228,141251,86348],{"class":287},[228,141253,129541],{"class":238},[228,141255,141256],{"class":230,"line":1431},[228,141257,132131],{"class":297},[228,141259,141260,141262,141264,141266,141268,141270],{"class":230,"line":1443},[228,141261,132136],{"class":2077},[228,141263,79922],{"class":238},[228,141265,128971],{"class":287},[228,141267,51552],{"class":238},[228,141269,132145],{"class":287},[228,141271,129541],{"class":238},[19,141273,140070],{},[220,141275,141276],{"className":126611,"code":132043,"language":126613,"meta":141,"style":141},[30,141277,141278,141282,141296,141300,141314,141318,141332,141336,141350,141354],{"__ignoreMap":141},[228,141279,141280],{"class":230,"line":231},[228,141281,132050],{"class":297},[228,141283,141284,141286,141288,141290,141292,141294],{"class":230,"line":142},[228,141285,132055],{"class":2077},[228,141287,79922],{"class":238},[228,141289,128971],{"class":287},[228,141291,51552],{"class":238},[228,141293,132064],{"class":287},[228,141295,129541],{"class":238},[228,141297,141298],{"class":230,"line":1293},[228,141299,132071],{"class":297},[228,141301,141302,141304,141306,141308,141310,141312],{"class":230,"line":1308},[228,141303,132076],{"class":2077},[228,141305,79922],{"class":238},[228,141307,128971],{"class":287},[228,141309,51552],{"class":238},[228,141311,54879],{"class":287},[228,141313,129541],{"class":238},[228,141315,141316],{"class":230,"line":1314},[228,141317,132091],{"class":297},[228,141319,141320,141322,141324,141326,141328,141330],{"class":230,"line":1328},[228,141321,132096],{"class":2077},[228,141323,79922],{"class":238},[228,141325,128971],{"class":287},[228,141327,51552],{"class":238},[228,141329,54946],{"class":287},[228,141331,129541],{"class":238},[228,141333,141334],{"class":230,"line":1334},[228,141335,132111],{"class":297},[228,141337,141338,141340,141342,141344,141346,141348],{"class":230,"line":1425},[228,141339,132116],{"class":2077},[228,141341,79922],{"class":238},[228,141343,128971],{"class":287},[228,141345,51552],{"class":238},[228,141347,86348],{"class":287},[228,141349,129541],{"class":238},[228,141351,141352],{"class":230,"line":1431},[228,141353,132131],{"class":297},[228,141355,141356,141358,141360,141362,141364,141366],{"class":230,"line":1443},[228,141357,132136],{"class":2077},[228,141359,79922],{"class":238},[228,141361,128971],{"class":287},[228,141363,51552],{"class":238},[228,141365,132145],{"class":287},[228,141367,129541],{"class":238},[1245,141369,141370,141381],{},[186,141371,141372,141373,141376,141377,101133,141379],{},"1 号盒子左侧浮动 ",[30,141374,141375],{},"sk_list"," 里面包含 ",[30,141378,1245],{},[30,141380,186],{},[186,141382,141383,141384,141376,141387,101133,141389],{},"2 号盒子左侧浮动 ",[30,141385,141386],{},"sk_con",[30,141388,1245],{},[30,141390,186],{},[19,141392,139981],{},[220,141394,141395],{"className":126611,"code":139281,"language":126613,"meta":141,"style":141},[30,141396,141397,141403,141413],{"__ignoreMap":141},[228,141398,141399,141401],{"class":230,"line":231},[228,141400,130459],{"class":2077},[228,141402,15687],{"class":238},[228,141404,141405,141407,141409,141411],{"class":230,"line":142},[228,141406,131091],{"class":287},[228,141408,51552],{"class":238},[228,141410,23851],{"class":287},[228,141412,1404],{"class":238},[228,141414,141415],{"class":230,"line":1293},[228,141416,1679],{"class":238},[19,141418,140070],{},[220,141420,141421],{"className":126611,"code":139281,"language":126613,"meta":141,"style":141},[30,141422,141423,141429,141439],{"__ignoreMap":141},[228,141424,141425,141427],{"class":230,"line":231},[228,141426,130459],{"class":2077},[228,141428,15687],{"class":238},[228,141430,141431,141433,141435,141437],{"class":230,"line":142},[228,141432,131091],{"class":287},[228,141434,51552],{"class":238},[228,141436,23851],{"class":287},[228,141438,1404],{"class":238},[228,141440,141441],{"class":230,"line":1293},[228,141442,1679],{"class":238},[200,141444,141446,141447],{"id":141445},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[30,141448,141449],{},"sk_container",[1576,141451],{"style":126467,"src":141452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1245,141454,141455,141460],{},[186,141456,140635,141457,141459],{},[30,141458,141449],{}," 给宽度 1200，不要给高度",[186,141461,141462],{},"一定不要忘记清除浮动",[19,141464,139981],{},[220,141466,141467],{"className":126611,"code":139281,"language":126613,"meta":141,"style":141},[30,141468,141469,141475,141485],{"__ignoreMap":141},[228,141470,141471,141473],{"class":230,"line":231},[228,141472,130459],{"class":2077},[228,141474,15687],{"class":238},[228,141476,141477,141479,141481,141483],{"class":230,"line":142},[228,141478,131091],{"class":287},[228,141480,51552],{"class":238},[228,141482,23851],{"class":287},[228,141484,1404],{"class":238},[228,141486,141487],{"class":230,"line":1293},[228,141488,1679],{"class":238},[183,141490,141491],{},[186,141492,141493],{},"sk_hd制作",[1245,141495,141496],{},[186,141497,140715,141498,141501],{},[30,141499,141500],{},"sk_hd"," ，插入图片即可",[19,141503,139981],{},[220,141505,141506],{"className":127358,"code":134113,"language":127360,"meta":141,"style":141},[30,141507,141508],{"__ignoreMap":141},[228,141509,141510,141512,141514,141516,141518,141520,141522,141524,141526,141528,141530,141532],{"class":230,"line":231},[228,141511,1148],{"class":238},[228,141513,1576],{"class":51415},[228,141515,55354],{"class":2077},[228,141517,284],{"class":238},[228,141519,134128],{"class":343},[228,141521,55362],{"class":2077},[228,141523,284],{"class":238},[228,141525,134135],{"class":343},[228,141527,134138],{"class":2077},[228,141529,284],{"class":238},[228,141531,134143],{"class":343},[228,141533,51422],{"class":238},[183,141535,141536],{"start":142},[186,141537,141538],{},"sk_bd制作",[1245,141540,141541],{},[186,141542,141543,141544,141547,141548,101133,141550,141552],{},"3 号盒子 ",[30,141545,141546],{},"sk_bd"," ，里面包含很多的 ",[30,141549,1245],{},[30,141551,186],{},[1245,141553,141554,141563],{},[186,141555,141556,141557,141559,141560,141562],{},"当鼠标移入到 ",[30,141558,186],{}," 上面的时候显示红色的边框，在这里先给 ",[30,141561,186],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[186,141564,141565,141566,141568,141569,141571,141572,141575,141576,141578],{},"由于给每个 ",[30,141567,186],{}," 都设置了外边距，导致一行的最后一个 ",[30,141570,186],{}," 掉了下来，在这里我们利用 ",[30,141573,141574],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[30,141577,186],{},"，去掉外边距就好了",[19,141580,139981],{},[220,141582,141583],{"className":126611,"code":138800,"language":126613,"meta":141,"style":141},[30,141584,141585,141591,141603],{"__ignoreMap":141},[228,141586,141587,141589],{"class":230,"line":231},[228,141588,51726],{"class":51415},[228,141590,15687],{"class":238},[228,141592,141593,141595,141597,141599,141601],{"class":230,"line":142},[228,141594,70585],{"class":287},[228,141596,51552],{"class":238},[228,141598,430],{"class":287},[228,141600,51671],{"class":287},[228,141602,1404],{"class":238},[228,141604,141605],{"class":230,"line":1293},[228,141606,1679],{"class":238},[19,141608,140070],{},[220,141610,141611],{"className":126611,"code":138800,"language":126613,"meta":141,"style":141},[30,141612,141613,141619,141631],{"__ignoreMap":141},[228,141614,141615,141617],{"class":230,"line":231},[228,141616,51726],{"class":51415},[228,141618,15687],{"class":238},[228,141620,141621,141623,141625,141627,141629],{"class":230,"line":142},[228,141622,70585],{"class":287},[228,141624,51552],{"class":238},[228,141626,430],{"class":287},[228,141628,51671],{"class":287},[228,141630,1404],{"class":238},[228,141632,141633],{"class":230,"line":1293},[228,141634,1679],{"class":238},[14,141636,141638],{"id":141637},"_163-注册页面制作","16.3 注册页面制作",[1576,141640],{"style":126467,"src":141641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,141643,141644,141646],{},[388,141645,9140],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[1576,141648],{"style":126467,"src":141649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[200,141651,141653],{"id":141652},"_1631-准备工作","16.3.1 准备工作",[1245,141655,141656,141659],{},[186,141657,141658],{},"创建register.html，引入 base.css，引入favicon图标",[186,141660,141661],{},"创建register.css ，在html页面进行引入",[200,141663,141665,141666,141668],{"id":141664},"_1632-header-头部实现","16.3.2 ",[30,141667,131616],{}," 头部实现",[1245,141670,141671,141674],{},[186,141672,141673],{},"整个内容用 版心 进行包裹",[186,141675,141676],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,141678,139981],{},[220,141680,141681],{"className":127358,"code":134113,"language":127360,"meta":141,"style":141},[30,141682,141683],{"__ignoreMap":141},[228,141684,141685,141687,141689,141691,141693,141695,141697,141699,141701,141703,141705,141707],{"class":230,"line":231},[228,141686,1148],{"class":238},[228,141688,1576],{"class":51415},[228,141690,55354],{"class":2077},[228,141692,284],{"class":238},[228,141694,134128],{"class":343},[228,141696,55362],{"class":2077},[228,141698,284],{"class":238},[228,141700,134135],{"class":343},[228,141702,134138],{"class":2077},[228,141704,284],{"class":238},[228,141706,134143],{"class":343},[228,141708,51422],{"class":238},[19,141710,140070],{},[220,141712,141713],{"className":127358,"code":134113,"language":127360,"meta":141,"style":141},[30,141714,141715],{"__ignoreMap":141},[228,141716,141717,141719,141721,141723,141725,141727,141729,141731,141733,141735,141737,141739],{"class":230,"line":231},[228,141718,1148],{"class":238},[228,141720,1576],{"class":51415},[228,141722,55354],{"class":2077},[228,141724,284],{"class":238},[228,141726,134128],{"class":343},[228,141728,55362],{"class":2077},[228,141730,284],{"class":238},[228,141732,134135],{"class":343},[228,141734,134138],{"class":2077},[228,141736,284],{"class":238},[228,141738,134143],{"class":343},[228,141740,51422],{"class":238},[200,141742,141744,141745,141748],{"id":141743},"_1633-registerarea-主体模块实现","16.3.3 ",[30,141746,141747],{},"registerarea"," 主体模块实现",[1576,141750],{"style":126467,"src":141751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,141753,141754],{},"整个大盒子 高度为 522px，设置4个边框",[19,141756,139981],{},[220,141758,141759],{"className":126611,"code":130768,"language":126613,"meta":141,"style":141},[30,141760,141761,141767,141783],{"__ignoreMap":141},[228,141762,141763,141765],{"class":230,"line":231},[228,141764,51726],{"class":51415},[228,141766,15687],{"class":238},[228,141768,141769,141771,141773,141775,141777,141779,141781],{"class":230,"line":142},[228,141770,71011],{"class":287},[228,141772,51552],{"class":238},[228,141774,456],{"class":287},[228,141776,51607],{"class":234},[228,141778,51636],{"class":287},[228,141780,130003],{"class":287},[228,141782,1404],{"class":238},[228,141784,141785],{"class":230,"line":1293},[228,141786,1679],{"class":238},[19,141788,140070],{},[220,141790,141791],{"className":126611,"code":130768,"language":126613,"meta":141,"style":141},[30,141792,141793,141799,141815],{"__ignoreMap":141},[228,141794,141795,141797],{"class":230,"line":231},[228,141796,51726],{"class":51415},[228,141798,15687],{"class":238},[228,141800,141801,141803,141805,141807,141809,141811,141813],{"class":230,"line":142},[228,141802,71011],{"class":287},[228,141804,51552],{"class":238},[228,141806,456],{"class":287},[228,141808,51607],{"class":234},[228,141810,51636],{"class":287},[228,141812,130003],{"class":287},[228,141814,1404],{"class":238},[228,141816,141817],{"class":230,"line":1293},[228,141818,1679],{"class":238},[19,141820,141821],{},"1号盒子 是一个 h3 标签，放标题",[1245,141823,141824],{},[186,141825,141826],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,141828,139981],{},[220,141830,141831],{"className":126611,"code":139281,"language":126613,"meta":141,"style":141},[30,141832,141833,141839,141849],{"__ignoreMap":141},[228,141834,141835,141837],{"class":230,"line":231},[228,141836,130459],{"class":2077},[228,141838,15687],{"class":238},[228,141840,141841,141843,141845,141847],{"class":230,"line":142},[228,141842,131091],{"class":287},[228,141844,51552],{"class":238},[228,141846,23851],{"class":287},[228,141848,1404],{"class":238},[228,141850,141851],{"class":230,"line":1293},[228,141852,1679],{"class":238},[19,141854,140070],{},[220,141856,141857],{"className":126611,"code":139281,"language":126613,"meta":141,"style":141},[30,141858,141859,141865,141875],{"__ignoreMap":141},[228,141860,141861,141863],{"class":230,"line":231},[228,141862,130459],{"class":2077},[228,141864,15687],{"class":238},[228,141866,141867,141869,141871,141873],{"class":230,"line":142},[228,141868,131091],{"class":287},[228,141870,51552],{"class":238},[228,141872,23851],{"class":287},[228,141874,1404],{"class":238},[228,141876,141877],{"class":230,"line":1293},[228,141878,1679],{"class":238},[19,141880,141881],{},"2号盒子 里面放注册的内容",[1245,141883,141884,141887,141896,141910,141923,141926,141929,141947,141961],{},[186,141885,141886],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[186,141888,141889,141890,141892,141893,141895],{},"里面的内容利用 ",[30,141891,1245],{}," 包含 ",[30,141894,186],{}," 来实现的（不需要用表格）",[186,141897,139125,141898,141900,141901,141903,141904,141906,141907,141909],{},[30,141899,186],{}," 里面，左侧放 ",[30,141902,33723],{}," 标签， 中间放",[30,141905,53936],{}," 标签， 右侧放 ",[30,141908,228],{}," 提示信息",[186,141911,141912,141913,141915,141916,141918,141919,141922],{},"左侧 ",[30,141914,33723],{},"里面的文字都是右对齐，我们可以给",[30,141917,33723],{},"设置一个宽度（88px），然后利用",[30,141920,141921],{},"text-align"," 来设置右对齐",[186,141924,141925],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[186,141927,141928],{},"右侧 span修饰一下文字颜色",[186,141930,141931,141932],{},"提示信息的样式优化",[1245,141933,141934,141937,141940],{},[186,141935,141936],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[186,141938,141939],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[186,141941,141942,141943,141946],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[30,141944,141945],{},"vertical-algin"," 来设置 图片与文字对齐方式",[186,141948,141949,141950],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1245,141951,141952,141958],{},[186,141953,141954,141955,141957],{},"设置 ",[30,141956,23668],{}," 的 左右 12px 的内边距，设置一下文字颜色",[186,141959,141960],{},"分别设置 背景颜色",[186,141962,141963,141964,141966],{},"同意协议 和 完成注册 都是用 ",[30,141965,186],{}," 进行包裹",[19,141968,139981],{},[220,141970,141971],{"className":126611,"code":140554,"language":126613,"meta":141,"style":141},[30,141972,141973,141979,141989],{"__ignoreMap":141},[228,141974,141975,141977],{"class":230,"line":231},[228,141976,51726],{"class":51415},[228,141978,15687],{"class":238},[228,141980,141981,141983,141985,141987],{"class":230,"line":142},[228,141982,70993],{"class":287},[228,141984,51552],{"class":238},[228,141986,140571],{"class":287},[228,141988,1404],{"class":238},[228,141990,141991],{"class":230,"line":1293},[228,141992,1679],{"class":238},[19,141994,140070],{},[220,141996,141997],{"className":126611,"code":140554,"language":126613,"meta":141,"style":141},[30,141998,141999,142005,142015],{"__ignoreMap":141},[228,142000,142001,142003],{"class":230,"line":231},[228,142002,51726],{"class":51415},[228,142004,15687],{"class":238},[228,142006,142007,142009,142011,142013],{"class":230,"line":142},[228,142008,70993],{"class":287},[228,142010,51552],{"class":238},[228,142012,140571],{"class":287},[228,142014,1404],{"class":238},[228,142016,142017],{"class":230,"line":1293},[228,142018,1679],{"class":238},[200,142020,142022],{"id":142021},"_1634-底部实现","16.3.4 底部实现",[19,142024,139981],{},[220,142026,142027],{"className":126611,"code":140554,"language":126613,"meta":141,"style":141},[30,142028,142029,142035,142045],{"__ignoreMap":141},[228,142030,142031,142033],{"class":230,"line":231},[228,142032,51726],{"class":51415},[228,142034,15687],{"class":238},[228,142036,142037,142039,142041,142043],{"class":230,"line":142},[228,142038,70993],{"class":287},[228,142040,51552],{"class":238},[228,142042,140571],{"class":287},[228,142044,1404],{"class":238},[228,142046,142047],{"class":230,"line":1293},[228,142048,1679],{"class":238},[19,142050,140070],{},[220,142052,142053],{"className":127358,"code":130715,"language":127360,"meta":141,"style":141},[30,142054,142055,142059,142073,142077],{"__ignoreMap":141},[228,142056,142057],{"class":230,"line":231},[228,142058,130722],{"class":297},[228,142060,142061,142063,142065,142067,142069,142071],{"class":230,"line":142},[228,142062,1148],{"class":238},[228,142064,51726],{"class":51415},[228,142066,53601],{"class":2077},[228,142068,284],{"class":238},[228,142070,130735],{"class":343},[228,142072,51422],{"class":238},[228,142074,142075],{"class":230,"line":1293},[228,142076,130742],{"class":238},[228,142078,142079,142081,142083],{"class":230,"line":1308},[228,142080,51900],{"class":238},[228,142082,51726],{"class":51415},[228,142084,51422],{"class":238},[14,142086,142088],{"id":142087},"_164-项目总结","16.4 项目总结",[183,142090,142091,142094,142097,142100],{},[186,142092,142093],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[186,142095,142096],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[186,142098,142099],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[186,142101,142102],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[1576,142104],{"style":126467,"src":142105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[183,142107,142108],{"start":1314},[186,142109,142110],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[1576,142112],{"style":126467,"src":142113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[183,142115,142116],{"start":1328},[186,142117,142118],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[1576,142120],{"style":126467,"src":142121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[220,142123,142124],{"className":127358,"code":136768,"language":127360,"meta":141,"style":141},[30,142125,142126],{"__ignoreMap":141},[228,142127,142128,142130,142132,142134,142136,142138,142140,142142,142144,142146,142148,142150],{"class":230,"line":231},[228,142129,1148],{"class":238},[228,142131,53936],{"class":51415},[228,142133,53939],{"class":2077},[228,142135,284],{"class":238},[228,142137,62814],{"class":343},[228,142139,15035],{"class":2077},[228,142141,284],{"class":238},[228,142143,136789],{"class":343},[228,142145,61135],{"class":2077},[228,142147,284],{"class":238},[228,142149,136796],{"class":343},[228,142151,51422],{"class":238},[183,142153,142154,142157],{"start":1334},[186,142155,142156],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[186,142158,142159],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[5241,142161,142162],{},"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":141,"searchDepth":142,"depth":142,"links":142164},[142165,142170,142177,142185],{"id":139791,"depth":142,"text":139792,"children":142166},[142167,142168,142169],{"id":139795,"depth":1293,"text":139796},{"id":140526,"depth":1293,"text":140527},{"id":140839,"depth":1293,"text":140840},{"id":141139,"depth":142,"text":141140,"children":142171},[142172,142173,142175],{"id":141143,"depth":1293,"text":141144},{"id":141161,"depth":1293,"text":142174},"16.2.2 列表页 header 和 nav 修改",{"id":141445,"depth":1293,"text":142176},"16.2.3 列表页主体 sk_container",{"id":141637,"depth":142,"text":141638,"children":142178},[142179,142180,142182,142184],{"id":141652,"depth":1293,"text":141653},{"id":141664,"depth":1293,"text":142181},"16.3.2 header 头部实现",{"id":141743,"depth":1293,"text":142183},"16.3.3 registerarea 主体模块实现",{"id":142021,"depth":1293,"text":142022},{"id":142087,"depth":142,"text":142088},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139783,"description":154},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142192,"title":142193,"body":142194,"description":154,"extension":155,"meta":142302,"navigation":157,"path":142303,"seo":142304,"stem":142305,"__hash__":142306},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142195,"toc":142297},[142196,142199,142203,142206,142209,142218,142227,142231,142236,142243,142261,142264,142267,142270,142273,142276,142279,142282,142285,142288,142291,142294],[10,142197,142193],{"id":142198},"_17-web服务器与网站发布",[14,142200,142202],{"id":142201},"_171-web服务器","17.1 Web服务器",[19,142204,142205],{},"把自己网站上传到服务器上，可以让其他人访问",[1576,142207],{"style":126467,"src":142208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,142210,142211,142214,142215],{},[388,142212,142213],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[388,142216,142217],{},"Web 服务器等",[19,142219,142220,142221,101133,142224,25856],{},"根据服务器在网络中所在的位置不同，又可分为 ",[388,142222,142223],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[388,142225,142226],{},"远程服务器",[200,142228,142230],{"id":142229},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,142232,142233],{},[388,142234,142235],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,142237,142238,142239],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[476,142240,142241],{"href":142241,"rel":142242},"http:\u002F\u002Ffree.3v.do\u002F",[23980],[1245,142244,142245,142248,142251,142258],{},[186,142246,142247],{},"去免费空间网站注册账号。",[186,142249,142250],{},"记录下主机名、用户名、密码、域名。",[186,142252,142253,142254,142257],{},"利用 ",[30,142255,142256],{},"utftp"," 软件 上传网站到远程服务器",[186,142259,142260],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,142262,142263],{},"使用软件上传，对上传软件文件进行解压",[1576,142265],{"style":126467,"src":142266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[1576,142268],{"style":126467,"src":142269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,142271,142272],{},"输入刚刚申请的服务器账号信息：",[1576,142274],{"style":126467,"src":142275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[1576,142277],{"style":126467,"src":142278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[1576,142280],{"style":126467,"src":142281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[1576,142283],{"style":126467,"src":142284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,142286,142287],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[1576,142289],{"style":126467,"src":142290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,142292,142293],{},"浏览器输入域名即可访问",[19,142295,142296],{},"首页一定必须是index",{"title":141,"searchDepth":142,"depth":142,"links":142298},[142299],{"id":142201,"depth":142,"text":142202,"children":142300},[142301],{"id":142229,"depth":1293,"text":142230},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142193,"description":154},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142308,"title":142309,"body":142310,"description":154,"extension":155,"meta":143237,"navigation":157,"path":143238,"seo":143239,"stem":143240,"__hash__":143241},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142311,"toc":143220},[142312,142315,142319,142322,142325,142336,142339,142343,142347,142352,142355,142358,142361,142364,142368,142394,142398,142402,142405,142408,142412,142445,142449,142452,142455,142519,142523,142527,142530,142533,142536,142540,142585,142589,142592,142622,142626,142630,142633,142636,142640,142643,142712,142715,142823,142825,142831,142835,142838,142841,142937,142940,142944,142968,142972,142975,142979,142982,142986,142989,142992,142995,142998,143002,143005,143008,143012,143016,143019,143022,143025,143028,143032,143035,143039,143042,143045,143090,143094,143098,143101,143104,143107,143139,143143,143146,143180,143184,143187,143217],[10,142313,142309],{"id":142314},"_18-2d动画与3d转换",[14,142316,142318],{"id":142317},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,142320,142321],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,142323,142324],{},"转换（transform）你可以简单理解为变形",[1245,142326,142327,142330,142333],{},[186,142328,142329],{},"移动：translate",[186,142331,142332],{},"旋转：rotate",[186,142334,142335],{},"缩放：scale",[1576,142337],{"style":126467,"src":142338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[200,142340,142342],{"id":142341},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22113,142344,142346],{"id":142345},"_18111-translate介绍","18.1.1.1 translate介绍",[19,142348,142349,142350],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[388,142351,133270],{},[1576,142353],{"style":126467,"src":142354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,142356,142357],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,142359,142360],{},"对于行内元素无效",[19,142362,142363],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22113,142365,142367],{"id":142366},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[220,142369,142370],{"className":126611,"code":138800,"language":126613,"meta":141,"style":141},[30,142371,142372,142378,142390],{"__ignoreMap":141},[228,142373,142374,142376],{"class":230,"line":231},[228,142375,51726],{"class":51415},[228,142377,15687],{"class":238},[228,142379,142380,142382,142384,142386,142388],{"class":230,"line":142},[228,142381,70585],{"class":287},[228,142383,51552],{"class":238},[228,142385,430],{"class":287},[228,142387,51671],{"class":287},[228,142389,1404],{"class":238},[228,142391,142392],{"class":230,"line":1293},[228,142393,1679],{"class":238},[200,142395,142397],{"id":142396},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22113,142399,142401],{"id":142400},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,142403,142404],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[1576,142406],{"style":126467,"src":142407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22113,142409,142411],{"id":142410},"_18122-旋转效果","18.1.2.2 旋转效果",[220,142413,142415],{"className":126611,"code":142414,"language":126613,"meta":141,"style":141},"div {\n  transform: rotate(45deg);\n}\n",[30,142416,142417,142423,142441],{"__ignoreMap":141},[228,142418,142419,142421],{"class":230,"line":231},[228,142420,51726],{"class":51415},[228,142422,15687],{"class":238},[228,142424,142425,142427,142429,142432,142434,142436,142439],{"class":230,"line":142},[228,142426,136595],{"class":287},[228,142428,51552],{"class":238},[228,142430,142431],{"class":287},"rotate",[228,142433,239],{"class":238},[228,142435,767],{"class":287},[228,142437,142438],{"class":234},"deg",[228,142440,2833],{"class":238},[228,142442,142443],{"class":230,"line":1293},[228,142444,1679],{"class":238},[22113,142446,142448],{"id":142447},"_18123-三角做法","18.1.2.3 三角做法",[19,142450,142451],{},"该下标当经过最外层大盒子时会实现向上反转",[1576,142453],{"style":126467,"src":142454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[220,142456,142457],{"className":126611,"code":135131,"language":126613,"meta":141,"style":141},[30,142458,142459,142463,142469,142479,142489,142505,142515],{"__ignoreMap":141},[228,142460,142461],{"class":230,"line":231},[228,142462,135138],{"class":297},[228,142464,142465,142467],{"class":230,"line":142},[228,142466,135143],{"class":2077},[228,142468,15687],{"class":238},[228,142470,142471,142473,142475,142477],{"class":230,"line":1293},[228,142472,70683],{"class":287},[228,142474,51552],{"class":238},[228,142476,430],{"class":287},[228,142478,1404],{"class":238},[228,142480,142481,142483,142485,142487],{"class":230,"line":1308},[228,142482,70903],{"class":287},[228,142484,51552],{"class":238},[228,142486,430],{"class":287},[228,142488,1404],{"class":238},[228,142490,142491,142493,142495,142497,142499,142501,142503],{"class":230,"line":1314},[228,142492,71011],{"class":287},[228,142494,51552],{"class":238},[228,142496,684],{"class":287},[228,142498,51607],{"class":234},[228,142500,51636],{"class":287},[228,142502,64106],{"class":287},[228,142504,1404],{"class":238},[228,142506,142507,142509,142511,142513],{"class":230,"line":1328},[228,142508,135186],{"class":287},[228,142510,51552],{"class":238},[228,142512,62484],{"class":287},[228,142514,1404],{"class":238},[228,142516,142517],{"class":230,"line":1334},[228,142518,1679],{"class":238},[200,142520,142522],{"id":142521},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22113,142524,142526],{"id":142525},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,142528,142529],{},"设置中心点",[1576,142531],{"style":126467,"src":142532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,142534,142535],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22113,142537,142539],{"id":142538},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[220,142541,142543],{"className":126611,"code":142542,"language":126613,"meta":141,"style":141},"\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",[30,142544,142545,142550,142556,142571,142576,142581],{"__ignoreMap":141},[228,142546,142547],{"class":230,"line":231},[228,142548,142549],{"class":297},"\u002F* 转换中心点 *\u002F\n",[228,142551,142552,142554],{"class":230,"line":142},[228,142553,51726],{"class":51415},[228,142555,15687],{"class":238},[228,142557,142558,142561,142563,142565,142567,142569],{"class":230,"line":1293},[228,142559,142560],{"class":287},"  transform-origin",[228,142562,51552],{"class":238},[228,142564,51707],{"class":287},[228,142566,17259],{"class":287},[228,142568,130474],{"class":238},[228,142570,135284],{"class":297},[228,142572,142573],{"class":230,"line":1308},[228,142574,142575],{"class":297},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[228,142577,142578],{"class":230,"line":1314},[228,142579,142580],{"class":297},"  \u002F* transform-origin: left top; *\u002F\n",[228,142582,142583],{"class":230,"line":1328},[228,142584,1679],{"class":238},[22113,142586,142588],{"id":142587},"_18133-旋转案例","18.1.3.3 旋转案例",[1576,142590],{"style":126467,"src":142591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[220,142593,142594],{"className":126611,"code":142414,"language":126613,"meta":141,"style":141},[30,142595,142596,142602,142618],{"__ignoreMap":141},[228,142597,142598,142600],{"class":230,"line":231},[228,142599,51726],{"class":51415},[228,142601,15687],{"class":238},[228,142603,142604,142606,142608,142610,142612,142614,142616],{"class":230,"line":142},[228,142605,136595],{"class":287},[228,142607,51552],{"class":238},[228,142609,142431],{"class":287},[228,142611,239],{"class":238},[228,142613,767],{"class":287},[228,142615,142438],{"class":234},[228,142617,2833],{"class":238},[228,142619,142620],{"class":230,"line":1293},[228,142621,1679],{"class":238},[200,142623,142625],{"id":142624},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22113,142627,142629],{"id":142628},"_18141-scale介绍","18.1.4.1 scale介绍",[19,142631,142632],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[1576,142634],{"style":126467,"src":142635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22113,142637,142639],{"id":142638},"_18142-分页按钮","18.1.4.2 分页按钮",[1576,142641],{"style":126467,"src":142642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[220,142644,142646],{"className":126611,"code":142645,"language":126613,"meta":141,"style":141},"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",[30,142647,142648,142654,142670,142674,142678,142683,142689,142703,142708],{"__ignoreMap":141},[228,142649,142650,142652],{"class":230,"line":231},[228,142651,51726],{"class":51415},[228,142653,15687],{"class":238},[228,142655,142656,142658,142660,142663,142665,142668],{"class":230,"line":142},[228,142657,136595],{"class":287},[228,142659,51552],{"class":238},[228,142661,142662],{"class":287},"scale",[228,142664,239],{"class":238},[228,142666,142667],{"class":287},"1.2",[228,142669,2833],{"class":238},[228,142671,142672],{"class":230,"line":1293},[228,142673,1679],{"class":238},[228,142675,142676],{"class":230,"line":1308},[228,142677,136072],{"class":238},[228,142679,142680],{"class":230,"line":1314},[228,142681,142682],{"class":297},"\u002F* 2D 缩放 *\u002F\n",[228,142684,142685,142687],{"class":230,"line":1328},[228,142686,51726],{"class":51415},[228,142688,15687],{"class":238},[228,142690,142691,142693,142695,142697,142699,142701],{"class":230,"line":1334},[228,142692,136595],{"class":287},[228,142694,51552],{"class":238},[228,142696,142662],{"class":287},[228,142698,239],{"class":238},[228,142700,142667],{"class":287},[228,142702,2833],{"class":238},[228,142704,142705],{"class":230,"line":1425},[228,142706,142707],{"class":297},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[228,142709,142710],{"class":230,"line":1431},[228,142711,1679],{"class":238},[19,142713,142714],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[220,142716,142718],{"className":126611,"code":142717,"language":126613,"meta":141,"style":141},"\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",[30,142719,142720,142725,142735,142756,142777,142781,142786,142792,142819],{"__ignoreMap":141},[228,142721,142722],{"class":230,"line":231},[228,142723,142724],{"class":297},"\u002F* 定义动画 *\u002F\n",[228,142726,142727,142730,142733],{"class":230,"line":142},[228,142728,142729],{"class":234},"@keyframes",[228,142731,142732],{"class":5331}," move",[228,142734,15687],{"class":238},[228,142736,142737,142740,142742,142744,142746,142749,142751,142753],{"class":230,"line":1293},[228,142738,142739],{"class":2077},"  0%",[228,142741,79922],{"class":238},[228,142743,48249],{"class":287},[228,142745,51552],{"class":238},[228,142747,142748],{"class":287},"translateX",[228,142750,239],{"class":238},[228,142752,430],{"class":287},[228,142754,142755],{"class":238},"); }\n",[228,142757,142758,142761,142763,142765,142767,142769,142771,142773,142775],{"class":230,"line":1308},[228,142759,142760],{"class":2077},"  100%",[228,142762,79922],{"class":238},[228,142764,48249],{"class":287},[228,142766,51552],{"class":238},[228,142768,142748],{"class":287},[228,142770,239],{"class":238},[228,142772,549],{"class":287},[228,142774,51607],{"class":234},[228,142776,142755],{"class":238},[228,142778,142779],{"class":230,"line":1314},[228,142780,1679],{"class":238},[228,142782,142783],{"class":230,"line":1328},[228,142784,142785],{"class":297},"\u002F* 调用动画 *\u002F\n",[228,142787,142788,142790],{"class":230,"line":1334},[228,142789,51726],{"class":51415},[228,142791,15687],{"class":238},[228,142793,142794,142797,142799,142801,142803,142805,142807,142809,142811,142814,142817],{"class":230,"line":1425},[228,142795,142796],{"class":287},"  animation",[228,142798,51552],{"class":238},[228,142800,135297],{"class":287},[228,142802,25234],{"class":287},[228,142804,933],{"class":234},[228,142806,78795],{"class":287},[228,142808,4207],{"class":287},[228,142810,933],{"class":234},[228,142812,142813],{"class":287}," infinite",[228,142815,142816],{"class":287}," alternate",[228,142818,1404],{"class":238},[228,142820,142821],{"class":230,"line":1431},[228,142822,1679],{"class":238},[19,142824,142714],{},[220,142826,142829],{"className":142827,"code":142828,"language":5302},[5300],"\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",[30,142830,142828],{"__ignoreMap":141},[22113,142832,142834],{"id":142833},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,142836,142837],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[1576,142839],{"style":126467,"src":142840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[220,142842,142843],{"className":126611,"code":142717,"language":126613,"meta":141,"style":141},[30,142844,142845,142849,142857,142875,142895,142899,142903,142909,142933],{"__ignoreMap":141},[228,142846,142847],{"class":230,"line":231},[228,142848,142724],{"class":297},[228,142850,142851,142853,142855],{"class":230,"line":142},[228,142852,142729],{"class":234},[228,142854,142732],{"class":5331},[228,142856,15687],{"class":238},[228,142858,142859,142861,142863,142865,142867,142869,142871,142873],{"class":230,"line":1293},[228,142860,142739],{"class":2077},[228,142862,79922],{"class":238},[228,142864,48249],{"class":287},[228,142866,51552],{"class":238},[228,142868,142748],{"class":287},[228,142870,239],{"class":238},[228,142872,430],{"class":287},[228,142874,142755],{"class":238},[228,142876,142877,142879,142881,142883,142885,142887,142889,142891,142893],{"class":230,"line":1308},[228,142878,142760],{"class":2077},[228,142880,79922],{"class":238},[228,142882,48249],{"class":287},[228,142884,51552],{"class":238},[228,142886,142748],{"class":287},[228,142888,239],{"class":238},[228,142890,549],{"class":287},[228,142892,51607],{"class":234},[228,142894,142755],{"class":238},[228,142896,142897],{"class":230,"line":1314},[228,142898,1679],{"class":238},[228,142900,142901],{"class":230,"line":1328},[228,142902,142785],{"class":297},[228,142904,142905,142907],{"class":230,"line":1334},[228,142906,51726],{"class":51415},[228,142908,15687],{"class":238},[228,142910,142911,142913,142915,142917,142919,142921,142923,142925,142927,142929,142931],{"class":230,"line":1425},[228,142912,142796],{"class":287},[228,142914,51552],{"class":238},[228,142916,135297],{"class":287},[228,142918,25234],{"class":287},[228,142920,933],{"class":234},[228,142922,78795],{"class":287},[228,142924,4207],{"class":287},[228,142926,933],{"class":234},[228,142928,142813],{"class":287},[228,142930,142816],{"class":287},[228,142932,1404],{"class":238},[228,142934,142935],{"class":230,"line":1431},[228,142936,1679],{"class":238},[19,142938,142939],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[200,142941,142943],{"id":142942},"_1823-知识点回顾","18.2.3 知识点回顾",[220,142945,142946],{"className":126611,"code":128780,"language":126613,"meta":141,"style":141},[30,142947,142948,142954,142964],{"__ignoreMap":141},[228,142949,142950,142952],{"class":230,"line":231},[228,142951,51726],{"class":51415},[228,142953,15687],{"class":238},[228,142955,142956,142958,142960,142962],{"class":230,"line":142},[228,142957,128793],{"class":287},[228,142959,51552],{"class":238},[228,142961,61851],{"class":287},[228,142963,1404],{"class":238},[228,142965,142966],{"class":230,"line":1293},[228,142967,1679],{"class":238},[14,142969,142971],{"id":142970},"_183-3d-转换","18.3 3D 转换",[19,142973,142974],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[200,142976,142978],{"id":142977},"_1831-坐标轴认识","18.3.1 坐标轴认识",[1576,142980],{"style":126467,"src":142981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[200,142983,142985],{"id":142984},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[1576,142987],{"style":126467,"src":142988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,142990,142991],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,142993,142994],{},"translate3d的效果需要搭配透视perspective来使用",[1576,142996],{"style":126467,"src":142997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[200,142999,143001],{"id":143000},"_1833-透视-perspective","18.3.3 透视 perspective",[1576,143003],{"style":126467,"src":143004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,143006,143007],{},"透视写在父盒子上，单位为像素",[200,143009,143011],{"id":143010},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22113,143013,143015],{"id":143014},"_18341-分开解释","18.3.4.1 分开解释",[1576,143017],{"style":126467,"src":143018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[1576,143020],{"style":126467,"src":143021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[1576,143023],{"style":126467,"src":143024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,143026,143027],{},"总结来说就是左手原则",[22113,143029,143031],{"id":143030},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[1576,143033],{"style":126467,"src":143034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[200,143036,143038],{"id":143037},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[1576,143040],{"style":126467,"src":143041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[1576,143043],{"style":126467,"src":143044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[220,143046,143048],{"className":126611,"code":143047,"language":126613,"meta":141,"style":141},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[30,143049,143050,143056,143069,143086],{"__ignoreMap":141},[228,143051,143052,143054],{"class":230,"line":231},[228,143053,51726],{"class":51415},[228,143055,15687],{"class":238},[228,143057,143058,143061,143063,143065,143067],{"class":230,"line":142},[228,143059,143060],{"class":287},"  perspective",[228,143062,51552],{"class":238},[228,143064,65189],{"class":287},[228,143066,51607],{"class":234},[228,143068,1404],{"class":238},[228,143070,143071,143073,143075,143078,143080,143082,143084],{"class":230,"line":1293},[228,143072,136595],{"class":287},[228,143074,51552],{"class":238},[228,143076,143077],{"class":287},"rotateX",[228,143079,239],{"class":238},[228,143081,767],{"class":287},[228,143083,142438],{"class":234},[228,143085,2833],{"class":238},[228,143087,143088],{"class":230,"line":1308},[228,143089,1679],{"class":238},[200,143091,143093],{"id":143092},"_1836-案例","18.3.6 案例",[22113,143095,143097],{"id":143096},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[1576,143099],{"style":126467,"src":143100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[1576,143102],{"style":126467,"src":143103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[1576,143105],{"style":126467,"src":143106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[220,143108,143110],{"className":126611,"code":143109,"language":126613,"meta":141,"style":141},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[30,143111,143112,143117,143123,143135],{"__ignoreMap":141},[228,143113,143114],{"class":230,"line":231},[228,143115,143116],{"class":297},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[228,143118,143119,143121],{"class":230,"line":142},[228,143120,133608],{"class":2077},[228,143122,15687],{"class":238},[228,143124,143125,143127,143129,143131,143133],{"class":230,"line":1293},[228,143126,143060],{"class":287},[228,143128,51552],{"class":238},[228,143130,65189],{"class":287},[228,143132,51607],{"class":234},[228,143134,1404],{"class":238},[228,143136,143137],{"class":230,"line":1308},[228,143138,1679],{"class":238},[22113,143140,143142],{"id":143141},"_18362-3d导航栏","18.3.6.2 3D导航栏",[1576,143144],{"style":126467,"src":143145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[220,143147,143148],{"className":127358,"code":130715,"language":127360,"meta":141,"style":141},[30,143149,143150,143154,143168,143172],{"__ignoreMap":141},[228,143151,143152],{"class":230,"line":231},[228,143153,130722],{"class":297},[228,143155,143156,143158,143160,143162,143164,143166],{"class":230,"line":142},[228,143157,1148],{"class":238},[228,143159,51726],{"class":51415},[228,143161,53601],{"class":2077},[228,143163,284],{"class":238},[228,143165,130735],{"class":343},[228,143167,51422],{"class":238},[228,143169,143170],{"class":230,"line":1293},[228,143171,130742],{"class":238},[228,143173,143174,143176,143178],{"class":230,"line":1308},[228,143175,51900],{"class":238},[228,143177,51726],{"class":51415},[228,143179,51422],{"class":238},[22113,143181,143183],{"id":143182},"_18363-旋转木马","18.3.6.3 旋转木马",[1576,143185],{"style":126467,"src":143186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[220,143188,143189],{"className":126611,"code":142414,"language":126613,"meta":141,"style":141},[30,143190,143191,143197,143213],{"__ignoreMap":141},[228,143192,143193,143195],{"class":230,"line":231},[228,143194,51726],{"class":51415},[228,143196,15687],{"class":238},[228,143198,143199,143201,143203,143205,143207,143209,143211],{"class":230,"line":142},[228,143200,136595],{"class":287},[228,143202,51552],{"class":238},[228,143204,142431],{"class":287},[228,143206,239],{"class":238},[228,143208,767],{"class":287},[228,143210,142438],{"class":234},[228,143212,2833],{"class":238},[228,143214,143215],{"class":230,"line":1293},[228,143216,1679],{"class":238},[5241,143218,143219],{},"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":141,"searchDepth":142,"depth":142,"links":143221},[143222,143229],{"id":142317,"depth":142,"text":142318,"children":143223},[143224,143225,143226,143227,143228],{"id":142341,"depth":1293,"text":142342},{"id":142396,"depth":1293,"text":142397},{"id":142521,"depth":1293,"text":142522},{"id":142624,"depth":1293,"text":142625},{"id":142942,"depth":1293,"text":142943},{"id":142970,"depth":142,"text":142971,"children":143230},[143231,143232,143233,143234,143235,143236],{"id":142977,"depth":1293,"text":142978},{"id":142984,"depth":1293,"text":142985},{"id":143000,"depth":1293,"text":143001},{"id":143010,"depth":1293,"text":143011},{"id":143037,"depth":1293,"text":143038},{"id":143092,"depth":1293,"text":143093},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142309,"description":154},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143243,"title":143244,"body":143245,"description":154,"extension":155,"meta":143448,"navigation":157,"path":143449,"seo":143450,"stem":143451,"__hash__":143452},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143246,"toc":143437},[143247,143250,143254,143257,143260,143264,143267,143270,143273,143277,143280,143284,143287,143291,143294,143298,143312,143316,143341,143344,143347,143364,143368,143372,143375,143378,143382,143385,143388,143406,143410,143413,143427,143431,143434],[10,143248,143244],{"id":143249},"_19-移动端基础-前缀现状与视口",[14,143251,143253],{"id":143252},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[1576,143255],{"style":126467,"src":143256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,143258,143259],{},"意思就是加个前缀，增加兼容性",[14,143261,143263],{"id":143262},"_192-移动端现状认识","19.2 移动端现状认识",[1576,143265],{"style":126467,"src":143266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,143268,143269],{},"调试方法：",[1576,143271],{"style":126467,"src":143272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,143274,143276],{"id":143275},"_193-视口","19.3 视口",[19,143278,143279],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[200,143281,143283],{"id":143282},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[1576,143285],{"style":126467,"src":143286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[200,143288,143290],{"id":143289},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[1576,143292],{"style":126467,"src":143293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[200,143295,143297],{"id":143296},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1245,143299,143300,143303,143306,143309],{},[186,143301,143302],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[186,143304,143305],{},"理想视口，对设备来讲，是最理想的视口尺寸",[186,143307,143308],{},"需要手动添写meta视口标签通知浏览器操作",[186,143310,143311],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[200,143313,143315],{"id":143314},"_1934-meta视口标签","19.3.4 meta视口标签",[220,143317,143319],{"className":127358,"code":143318,"language":127360,"meta":141,"style":141},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[30,143320,143321],{"__ignoreMap":141},[228,143322,143323,143325,143327,143329,143331,143333,143335,143337,143339],{"class":230,"line":231},[228,143324,1148],{"class":238},[228,143326,51459],{"class":51415},[228,143328,15035],{"class":2077},[228,143330,284],{"class":238},[228,143332,51506],{"class":343},[228,143334,51486],{"class":2077},[228,143336,284],{"class":238},[228,143338,51513],{"class":343},[228,143340,51422],{"class":238},[1576,143342],{"style":126467,"src":143343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,143345,143346],{},"标准视口设置：",[183,143348,143349,143352,143355,143358,143361],{},[186,143350,143351],{},"视口宽度和设备保持一致",[186,143353,143354],{},"视口的默认缩放比例1.0",[186,143356,143357],{},"不允许用户自行缩放",[186,143359,143360],{},"最大允许的缩放比例1.0",[186,143362,143363],{},"最小允许的缩放比例1.0",[200,143365,143367],{"id":143366},"_1935-二倍图","19.3.5 二倍图",[22113,143369,143371],{"id":143370},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[1576,143373],{"style":126467,"src":143374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[1576,143376],{"style":126467,"src":143377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22113,143379,143381],{"id":143380},"_19352-多倍图","19.3.5.2 多倍图",[1576,143383],{"style":126467,"src":143384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,143386,143387],{},"二倍图法，代码如下：",[220,143389,143391],{"className":126611,"code":143390,"language":126613,"meta":141,"style":141},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[30,143392,143393,143398],{"__ignoreMap":141},[228,143394,143395],{"class":230,"line":231},[228,143396,143397],{"class":297},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[228,143399,143400,143403],{"class":230,"line":142},[228,143401,143402],{"class":51415},"background-size",[228,143404,143405],{"class":238},": 50% 50%;\n",[22113,143407,143409],{"id":143408},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[1576,143411],{"style":126467,"src":143412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[183,143414,143415,143418,143421,143424],{},[186,143416,143417],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[186,143419,143420],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[186,143422,143423],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[186,143425,143426],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22113,143428,143430],{"id":143429},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[1576,143432],{"style":126467,"src":143433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[5241,143435,143436],{},"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":141,"searchDepth":142,"depth":142,"links":143438},[143439,143440,143441],{"id":143252,"depth":142,"text":143253},{"id":143262,"depth":142,"text":143263},{"id":143275,"depth":142,"text":143276,"children":143442},[143443,143444,143445,143446,143447],{"id":143282,"depth":1293,"text":143283},{"id":143289,"depth":1293,"text":143290},{"id":143296,"depth":1293,"text":143297},{"id":143314,"depth":1293,"text":143315},{"id":143366,"depth":1293,"text":143367},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143244,"description":154},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143454,"title":143455,"body":143456,"description":154,"extension":155,"meta":144333,"navigation":157,"path":144334,"seo":144335,"stem":144336,"__hash__":144337},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143457,"toc":144317},[143458,143461,143465,143472,143475,143482,143485,143490,143493,143497,143501,143508,143511,143514,143518,143521,143524,143527,143530,143533,143537,143540,143544,143546,143549,143552,143555,143558,143560,143563,143565,143595,143597,143627,143631,143634,143638,143641,143658,143661,143664,143740,143742,143745,143748,143751,143754,143756,143759,143762,143766,143788,143791,143794,143798,143801,143807,143810,143814,143817,143820,143824,143827,143830,143833,143837,143840,143843,143846,143849,143853,143856,143860,143867,143870,143873,143876,143879,143889,143892,143895,143902,143905,143909,143912,143915,143919,143922,143925,143928,143973,143976,143979,143982,143984,144113,144115,144153,144156,144159,144161,144279,144281,144315],[10,143459,143455],{"id":143460},"_20-移动端布局实战上篇",[14,143462,143464],{"id":143463},"_201-移动端主流方案","20.1 移动端主流方案",[183,143466,143467],{},[186,143468,143469],{},[388,143470,143471],{},"单独移动端页面（主流）",[1576,143473],{"style":126467,"src":143474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[183,143476,143477],{"start":142},[186,143478,143479],{},[388,143480,143481],{},"响应式兼容PC移动端",[1576,143483],{"style":126467,"src":143484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[183,143486,143487],{"start":1293},[186,143488,143489],{},"两种页面选型布局方式",[1576,143491],{"style":126467,"src":143492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,143494,143496],{"id":143495},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[200,143498,143500],{"id":143499},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,143502,143503,143504],{},"官网地址： ",[476,143505,143506],{"href":143506,"rel":143507},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[23980],[1576,143509],{"style":126467,"src":143510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[1576,143512],{"style":126467,"src":143513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[200,143515,143517],{"id":143516},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[1576,143519],{"style":126467,"src":143520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[1576,143522],{"style":126467,"src":143523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,143525,143526],{},"去除高亮：",[19,143528,143529],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,143531,143532],{},"-webkit- tap-highlight-color: transparent;",[14,143534,143536],{"id":143535},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[1576,143538],{"style":126467,"src":143539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,143541,143543],{"id":143542},"_204-流式布局案例","20.4 流式布局案例",[19,143545,268],{},[19,143547,143548],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,143550,143551],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,143553,143554],{},"图片格式：",[1576,143556],{"style":126467,"src":143557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,143559,135654],{},[1576,143561],{"style":126467,"src":143562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,143564,139981],{},[220,143566,143567],{"className":127358,"code":134113,"language":127360,"meta":141,"style":141},[30,143568,143569],{"__ignoreMap":141},[228,143570,143571,143573,143575,143577,143579,143581,143583,143585,143587,143589,143591,143593],{"class":230,"line":231},[228,143572,1148],{"class":238},[228,143574,1576],{"class":51415},[228,143576,55354],{"class":2077},[228,143578,284],{"class":238},[228,143580,134128],{"class":343},[228,143582,55362],{"class":2077},[228,143584,284],{"class":238},[228,143586,134135],{"class":343},[228,143588,134138],{"class":2077},[228,143590,284],{"class":238},[228,143592,134143],{"class":343},[228,143594,51422],{"class":238},[19,143596,140070],{},[220,143598,143599],{"className":127358,"code":134113,"language":127360,"meta":141,"style":141},[30,143600,143601],{"__ignoreMap":141},[228,143602,143603,143605,143607,143609,143611,143613,143615,143617,143619,143621,143623,143625],{"class":230,"line":231},[228,143604,1148],{"class":238},[228,143606,1576],{"class":51415},[228,143608,55354],{"class":2077},[228,143610,284],{"class":238},[228,143612,134128],{"class":343},[228,143614,55362],{"class":2077},[228,143616,284],{"class":238},[228,143618,134135],{"class":343},[228,143620,134138],{"class":2077},[228,143622,284],{"class":238},[228,143624,134143],{"class":343},[228,143626,51422],{"class":238},[14,143628,143630],{"id":143629},"_205-flex布局","20.5 flex布局",[1576,143632],{"style":126467,"src":143633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[200,143635,143637],{"id":143636},"_2051-布局原理","20.5.1 布局原理",[19,143639,143640],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1245,143642,143643,143646,143649,143652,143655],{},[186,143644,143645],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[186,143647,143648],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[186,143650,143651],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[186,143653,143654],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[186,143656,143657],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,143659,143660],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,143662,143663],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[220,143665,143667],{"className":126611,"code":143666,"language":126613,"meta":141,"style":141},"\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",[30,143668,143669,143674,143681,143691,143703,143714,143725,143736],{"__ignoreMap":141},[228,143670,143671],{"class":230,"line":231},[228,143672,143673],{"class":297},"\u002F* Flex 弹性布局 *\u002F\n",[228,143675,143676,143679],{"class":230,"line":142},[228,143677,143678],{"class":2077},".container",[228,143680,15687],{"class":238},[228,143682,143683,143685,143687,143689],{"class":230,"line":1293},[228,143684,128227],{"class":287},[228,143686,51552],{"class":238},[228,143688,51592],{"class":287},[228,143690,1404],{"class":238},[228,143692,143693,143696,143698,143701],{"class":230,"line":1308},[228,143694,143695],{"class":287},"  flex-direction",[228,143697,51552],{"class":238},[228,143699,143700],{"class":287},"row",[228,143702,1404],{"class":238},[228,143704,143705,143708,143710,143712],{"class":230,"line":1314},[228,143706,143707],{"class":287},"  justify-content",[228,143709,51552],{"class":238},[228,143711,51783],{"class":287},[228,143713,1404],{"class":238},[228,143715,143716,143719,143721,143723],{"class":230,"line":1328},[228,143717,143718],{"class":287},"  align-items",[228,143720,51552],{"class":238},[228,143722,51707],{"class":287},[228,143724,1404],{"class":238},[228,143726,143727,143730,143732,143734],{"class":230,"line":1334},[228,143728,143729],{"class":287},"  flex-wrap",[228,143731,51552],{"class":238},[228,143733,78725],{"class":287},[228,143735,1404],{"class":238},[228,143737,143738],{"class":230,"line":1425},[228,143739,1679],{"class":238},[19,143741,70568],{},[19,143743,143744],{},".form-item .male-label {",[19,143746,143747],{},"   margin-right: 20px;",[19,143749,143750],{},"   display: inline-flex;",[19,143752,143753],{},"   align-items: center;",[19,143755,1184],{},[1576,143757],{"style":126467,"src":143758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[1576,143760],{"style":126467,"src":143761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[200,143763,143765],{"id":143764},"_2052-常见父项属性","20.5.2 常见父项属性",[183,143767,143768,143771,143774,143777,143780,143783,143786],{},[186,143769,143770],{},"flex-direction：设置主轴的方向",[186,143772,143773],{},"justify-content：设置主轴上的子元素排列方式",[186,143775,143776],{},"flex-wrap：设置子元素是否换行",[186,143778,143779],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[186,143781,143782],{},"align-items：设置侧轴上的子元素排列方式（单行）",[186,143784,143785],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[186,143787,143770],{},[1576,143789],{"style":126467,"src":143790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[1576,143792],{"style":126467,"src":143793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[183,143795,143796],{"start":142},[186,143797,143773],{},[1576,143799],{"style":126467,"src":143800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,143802,143803,143806],{},[30,143804,143805],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,143808,143809],{},"跟着主轴走",[183,143811,143812],{"start":1293},[186,143813,143776],{},[1576,143815],{"style":126467,"src":143816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,143818,143819],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[183,143821,143822],{"start":1308},[186,143823,143779],{},[1576,143825],{"style":126467,"src":143826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,143828,143829],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,143831,143832],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[183,143834,143835],{"start":1314},[186,143836,143782],{},[1576,143838],{"style":126467,"src":143839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,143841,143842],{},"align-items与align-content之间的区别：",[19,143844,143845],{},"单找items，多找content",[1576,143847],{"style":126467,"src":143848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[183,143850,143851],{"start":1328},[186,143852,143785],{},[1576,143854],{"style":126467,"src":143855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[200,143857,143859],{"id":143858},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[183,143861,143862],{},[186,143863,143864],{},[388,143865,143866],{},"flex 属性",[19,143868,143869],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[1576,143871],{"style":126467,"src":143872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,143874,143875],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,143877,143878],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[183,143880,143881],{"start":142},[186,143882,143883,13910,143886],{},[388,143884,143885],{},"align-self",[388,143887,143888],{},"控制子项自己在侧轴上的排列方式",[1576,143890],{"style":126467,"src":143891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,143893,143894],{},"单个子盒子在父盒子侧轴上的排列方式",[183,143896,143897],{"start":1293},[186,143898,143899,143901],{},[388,143900,95412],{}," 属性定义项目的排列顺序",[1576,143903],{"style":126467,"src":143904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[200,143906,143908],{"id":143907},"_2054-背景线性渐变","20.5.4 背景线性渐变",[1576,143910],{"style":126467,"src":143911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,143913,143914],{},"必须要添加浏览器的私有前缀",[200,143916,143918],{"id":143917},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,143920,143921],{},"学到最重要的知识：",[19,143923,143924],{},"flex处理这样的布局思路",[1576,143926],{"style":126467,"src":143927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[220,143929,143931],{"className":126611,"code":143930,"language":126613,"meta":141,"style":141},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[30,143932,143933,143939,143949,143959,143969],{"__ignoreMap":141},[228,143934,143935,143937],{"class":230,"line":231},[228,143936,143678],{"class":2077},[228,143938,15687],{"class":238},[228,143940,143941,143943,143945,143947],{"class":230,"line":142},[228,143942,128227],{"class":287},[228,143944,51552],{"class":238},[228,143946,51592],{"class":287},[228,143948,1404],{"class":238},[228,143950,143951,143953,143955,143957],{"class":230,"line":1293},[228,143952,143707],{"class":287},[228,143954,51552],{"class":238},[228,143956,51707],{"class":287},[228,143958,1404],{"class":238},[228,143960,143961,143963,143965,143967],{"class":230,"line":1308},[228,143962,143718],{"class":287},[228,143964,51552],{"class":238},[228,143966,51707],{"class":287},[228,143968,1404],{"class":238},[228,143970,143971],{"class":230,"line":1314},[228,143972,1679],{"class":238},[19,143974,143975],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,143977,143978],{},"使用属性选择器",[1576,143980],{"style":126467,"src":143981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,143983,69004],{},[220,143985,143987],{"className":127358,"code":143986,"language":127360,"meta":141,"style":141},"\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",[30,143988,143989,143994,144008,144013,144033,144038,144057,144062,144081,144086,144105],{"__ignoreMap":141},[228,143990,143991],{"class":230,"line":231},[228,143992,143993],{"class":297},"\u003C!-- 携程网移动端案例结构 -->\n",[228,143995,143996,143998,144000,144002,144004,144006],{"class":230,"line":142},[228,143997,1148],{"class":238},[228,143999,51726],{"class":51415},[228,144001,53601],{"class":2077},[228,144003,284],{"class":238},[228,144005,92438],{"class":343},[228,144007,51422],{"class":238},[228,144009,144010],{"class":230,"line":1293},[228,144011,144012],{"class":297},"  \u003C!-- 搜索栏 -->\n",[228,144014,144015,144017,144019,144021,144023,144026,144029,144031],{"class":230,"line":1308},[228,144016,52259],{"class":238},[228,144018,51726],{"class":51415},[228,144020,53601],{"class":2077},[228,144022,284],{"class":238},[228,144024,144025],{"class":343},"\"search-index\"",[228,144027,144028],{"class":238},">...\u003C\u002F",[228,144030,51726],{"class":51415},[228,144032,51422],{"class":238},[228,144034,144035],{"class":230,"line":1314},[228,144036,144037],{"class":297},"  \u003C!-- 焦点图 -->\n",[228,144039,144040,144042,144044,144046,144048,144051,144053,144055],{"class":230,"line":1328},[228,144041,52259],{"class":238},[228,144043,51726],{"class":51415},[228,144045,53601],{"class":2077},[228,144047,284],{"class":238},[228,144049,144050],{"class":343},"\"focus\"",[228,144052,144028],{"class":238},[228,144054,51726],{"class":51415},[228,144056,51422],{"class":238},[228,144058,144059],{"class":230,"line":1334},[228,144060,144061],{"class":297},"  \u003C!-- 主导航 -->\n",[228,144063,144064,144066,144068,144070,144072,144075,144077,144079],{"class":230,"line":1425},[228,144065,52259],{"class":238},[228,144067,51726],{"class":51415},[228,144069,53601],{"class":2077},[228,144071,284],{"class":238},[228,144073,144074],{"class":343},"\"local-nav\"",[228,144076,144028],{"class":238},[228,144078,51726],{"class":51415},[228,144080,51422],{"class":238},[228,144082,144083],{"class":230,"line":1431},[228,144084,144085],{"class":297},"  \u003C!-- 子导航 -->\n",[228,144087,144088,144090,144092,144094,144096,144099,144101,144103],{"class":230,"line":1443},[228,144089,52259],{"class":238},[228,144091,51726],{"class":51415},[228,144093,53601],{"class":2077},[228,144095,284],{"class":238},[228,144097,144098],{"class":343},"\"nav-common\"",[228,144100,144028],{"class":238},[228,144102,51726],{"class":51415},[228,144104,51422],{"class":238},[228,144106,144107,144109,144111],{"class":230,"line":1726},[228,144108,51900],{"class":238},[228,144110,51726],{"class":51415},[228,144112,51422],{"class":238},[19,144114,70568],{},[220,144116,144117],{"className":126611,"code":137063,"language":126613,"meta":141,"style":141},[30,144118,144119,144133,144149],{"__ignoreMap":141},[228,144120,144121,144123,144125,144127,144129,144131],{"class":230,"line":231},[228,144122,53936],{"class":51415},[228,144124,1128],{"class":238},[228,144126,103222],{"class":2077},[228,144128,284],{"class":234},[228,144130,62814],{"class":343},[228,144132,137080],{"class":238},[228,144134,144135,144137,144139,144141,144143,144145,144147],{"class":230,"line":142},[228,144136,71011],{"class":287},[228,144138,51552],{"class":238},[228,144140,456],{"class":287},[228,144142,51607],{"class":234},[228,144144,51636],{"class":287},[228,144146,130191],{"class":287},[228,144148,1404],{"class":238},[228,144150,144151],{"class":230,"line":1293},[228,144152,1679],{"class":238},[19,144154,144155],{},"总代码和效果展示：",[1576,144157],{"style":126467,"src":144158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,144160,69004],{},[220,144162,144163],{"className":127358,"code":143986,"language":127360,"meta":141,"style":141},[30,144164,144165,144169,144183,144187,144205,144209,144227,144231,144249,144253,144271],{"__ignoreMap":141},[228,144166,144167],{"class":230,"line":231},[228,144168,143993],{"class":297},[228,144170,144171,144173,144175,144177,144179,144181],{"class":230,"line":142},[228,144172,1148],{"class":238},[228,144174,51726],{"class":51415},[228,144176,53601],{"class":2077},[228,144178,284],{"class":238},[228,144180,92438],{"class":343},[228,144182,51422],{"class":238},[228,144184,144185],{"class":230,"line":1293},[228,144186,144012],{"class":297},[228,144188,144189,144191,144193,144195,144197,144199,144201,144203],{"class":230,"line":1308},[228,144190,52259],{"class":238},[228,144192,51726],{"class":51415},[228,144194,53601],{"class":2077},[228,144196,284],{"class":238},[228,144198,144025],{"class":343},[228,144200,144028],{"class":238},[228,144202,51726],{"class":51415},[228,144204,51422],{"class":238},[228,144206,144207],{"class":230,"line":1314},[228,144208,144037],{"class":297},[228,144210,144211,144213,144215,144217,144219,144221,144223,144225],{"class":230,"line":1328},[228,144212,52259],{"class":238},[228,144214,51726],{"class":51415},[228,144216,53601],{"class":2077},[228,144218,284],{"class":238},[228,144220,144050],{"class":343},[228,144222,144028],{"class":238},[228,144224,51726],{"class":51415},[228,144226,51422],{"class":238},[228,144228,144229],{"class":230,"line":1334},[228,144230,144061],{"class":297},[228,144232,144233,144235,144237,144239,144241,144243,144245,144247],{"class":230,"line":1425},[228,144234,52259],{"class":238},[228,144236,51726],{"class":51415},[228,144238,53601],{"class":2077},[228,144240,284],{"class":238},[228,144242,144074],{"class":343},[228,144244,144028],{"class":238},[228,144246,51726],{"class":51415},[228,144248,51422],{"class":238},[228,144250,144251],{"class":230,"line":1431},[228,144252,144085],{"class":297},[228,144254,144255,144257,144259,144261,144263,144265,144267,144269],{"class":230,"line":1443},[228,144256,52259],{"class":238},[228,144258,51726],{"class":51415},[228,144260,53601],{"class":2077},[228,144262,284],{"class":238},[228,144264,144098],{"class":343},[228,144266,144028],{"class":238},[228,144268,51726],{"class":51415},[228,144270,51422],{"class":238},[228,144272,144273,144275,144277],{"class":230,"line":1726},[228,144274,51900],{"class":238},[228,144276,51726],{"class":51415},[228,144278,51422],{"class":238},[19,144280,70568],{},[220,144282,144283],{"className":127358,"code":130715,"language":127360,"meta":141,"style":141},[30,144284,144285,144289,144303,144307],{"__ignoreMap":141},[228,144286,144287],{"class":230,"line":231},[228,144288,130722],{"class":297},[228,144290,144291,144293,144295,144297,144299,144301],{"class":230,"line":142},[228,144292,1148],{"class":238},[228,144294,51726],{"class":51415},[228,144296,53601],{"class":2077},[228,144298,284],{"class":238},[228,144300,130735],{"class":343},[228,144302,51422],{"class":238},[228,144304,144305],{"class":230,"line":1293},[228,144306,130742],{"class":238},[228,144308,144309,144311,144313],{"class":230,"line":1308},[228,144310,51900],{"class":238},[228,144312,51726],{"class":51415},[228,144314,51422],{"class":238},[5241,144316,138012],{},{"title":141,"searchDepth":142,"depth":142,"links":144318},[144319,144320,144324,144325,144326],{"id":143463,"depth":142,"text":143464},{"id":143495,"depth":142,"text":143496,"children":144321},[144322,144323],{"id":143499,"depth":1293,"text":143500},{"id":143516,"depth":1293,"text":143517},{"id":143535,"depth":142,"text":143536},{"id":143542,"depth":142,"text":143543},{"id":143629,"depth":142,"text":143630,"children":144327},[144328,144329,144330,144331,144332],{"id":143636,"depth":1293,"text":143637},{"id":143764,"depth":1293,"text":143765},{"id":143858,"depth":1293,"text":143859},{"id":143907,"depth":1293,"text":143908},{"id":143917,"depth":1293,"text":143918},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143455,"description":154},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144339,"title":144340,"body":144341,"description":154,"extension":155,"meta":145568,"navigation":157,"path":145569,"seo":145570,"stem":145571,"__hash__":145572},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144342,"toc":145546},[144343,144346,144350,144354,144357,144360,144364,144369,144372,144375,144378,144381,144384,144441,144444,144449,144452,144455,144459,144470,144474,144477,144480,144487,144492,144496,144499,144505,144508,144512,144515,144522,144525,144528,144535,144538,144545,144548,144551,144558,144561,144564,144566,144583,144587,144590,144593,144596,144600,144603,144606,144609,144612,144615,144618,144620,144623,144626,144688,144691,144801,144808,144814,144817,144820,144824,144827,144831,144836,144839,144846,144849,144855,144860,144863,144866,144869,144872,144875,144878,144881,144884,144940,144942,144968,144972,144975,144978,144981,144989,144992,144995,144999,145055,145058,145062,145068,145079,145082,145087,145090,145093,145099,145102,145105,145108,145111,145114,145117,145120,145123,145148,145154,145157,145160,145163,145166,145169,145172,145177,145180,145183,145186,145194,145197,145204,145207,145210,145212,145236,145238,145241,145244,145247,145250,145253,145256,145259,145293,145296,145299,145333,145340,145343,145346,145349,145352,145355,145358,145365,145368,145371,145374,145377,145384,145387,145390,145397,145400,145403,145407,145410,145413,145416,145419,145422,145425,145428,145431,145433,145457,145459,145483,145487,145498,145501,145504,145507,145510,145513,145516,145519,145522,145525,145528,145531,145534,145537,145540,145543],[10,144344,144340],{"id":144345},"_21-移动端布局实战下篇",[14,144347,144349],{"id":144348},"_211-rem适配布局","21.1 rem适配布局",[200,144351,144353],{"id":144352},"_2111-rem单位","21.1.1 rem单位",[1576,144355],{"style":126467,"src":144356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,144358,144359],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[200,144361,144363],{"id":144362},"_2112-媒体查询","21.1.2 媒体查询",[183,144365,144366],{},[186,144367,144368],{},"参数介绍",[1576,144370],{"style":126467,"src":144371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[1576,144373],{"style":126467,"src":144374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[1576,144376],{"style":126467,"src":144377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[1576,144379],{"style":126467,"src":144380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[1576,144382],{"style":126467,"src":144383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[220,144385,144387],{"className":126611,"code":144386,"language":126613,"meta":141,"style":141},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[30,144388,144389,144394,144413,144420,144433,144437],{"__ignoreMap":141},[228,144390,144391],{"class":230,"line":231},[228,144392,144393],{"class":297},"\u002F* 媒体查询 *\u002F\n",[228,144395,144396,144399,144401,144404,144406,144409,144411],{"class":230,"line":142},[228,144397,144398],{"class":234},"@media",[228,144400,1772],{"class":238},[228,144402,144403],{"class":287},"max-width",[228,144405,51552],{"class":238},[228,144407,144408],{"class":287},"768",[228,144410,51607],{"class":234},[228,144412,12557],{"class":238},[228,144414,144415,144418],{"class":230,"line":1293},[228,144416,144417],{"class":2077},"  .container",[228,144419,15687],{"class":238},[228,144421,144422,144425,144427,144429,144431],{"class":230,"line":1308},[228,144423,144424],{"class":287},"    width",[228,144426,51552],{"class":238},[228,144428,549],{"class":287},[228,144430,566],{"class":234},[228,144432,1404],{"class":238},[228,144434,144435],{"class":230,"line":1314},[228,144436,127407],{"class":238},[228,144438,144439],{"class":230,"line":1328},[228,144440,1679],{"class":238},[19,144442,144443],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[183,144445,144446],{"start":142},[186,144447,144448],{},"引入资源",[1576,144450],{"style":126467,"src":144451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,144453,144454],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[200,144456,144458],{"id":144457},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1245,144460,144461,144464,144467],{},[186,144462,144463],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[186,144465,144466],{},"媒体查询可以根据不同设备宽度来修改样式",[186,144468,144469],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,144471,144473],{"id":144472},"_212-less基础","21.2 Less基础",[19,144475,144476],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,144478,144479],{},"Less可以解决该问题，它是css的扩展语言",[19,144481,144482,144483],{},"Less中文网址： ",[476,144484,144485],{"href":144485,"rel":144486},"http:\u002F\u002Flesscss.cn\u002F",[23980],[19,144488,144489],{},[388,144490,144491],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[200,144493,144495],{"id":144494},"_2121-less安装","21.2.1 less安装",[19,144497,144498],{},"如果使用vscode，则无需进行下方安装步骤",[19,144500,144501],{},[476,144502,144503],{"href":144503,"rel":144504},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[23980],[1576,144506],{"style":126467,"src":144507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[200,144509,144511],{"id":144510},"_2122-less使用","21.2.2 less使用",[19,144513,144514],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[183,144516,144517],{},[186,144518,144519],{},[388,144520,144521],{},"Less 变量",[1576,144523],{"style":126467,"src":144524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[1576,144526],{"style":126467,"src":144527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[183,144529,144530],{"start":142},[186,144531,144532],{},[388,144533,144534],{},"Less 编译",[1576,144536],{"style":126467,"src":144537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[183,144539,144540],{"start":1293},[186,144541,144542],{},[388,144543,144544],{},"Less 嵌套",[1576,144546],{"style":126467,"src":144547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[1576,144549],{"style":126467,"src":144550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[183,144552,144553],{"start":1308},[186,144554,144555],{},[388,144556,144557],{},"Less 运算",[1576,144559],{"style":126467,"src":144560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,144562,144563],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,144565,268],{},[1245,144567,144568,144571,144574,144577,144580],{},[186,144569,144570],{},"乘号（*）和除号（\u002F）的写法",[186,144572,144573],{},"运算符中间左右有个空格隔开 1px + 5",[186,144575,144576],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[186,144578,144579],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[186,144581,144582],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,144584,144586],{"id":144585},"_213-rem-适配方案","21.3 rem 适配方案",[19,144588,144589],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,144591,144592],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[1576,144594],{"style":126467,"src":144595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[200,144597,144599],{"id":144598},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,144601,144602],{},"rem + 媒体查询 + less 技术",[1576,144604],{"style":126467,"src":144605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,144607,144608],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,144610,144611],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[1576,144613],{"style":126467,"src":144614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,144616,144617],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,144619,14748],{},[1576,144621],{"style":126467,"src":144622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,144624,144625],{},"index.html:",[220,144627,144629],{"className":126611,"code":144628,"language":126613,"meta":141,"style":141},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[30,144630,144631,144636,144642,144658,144662,144668,144684],{"__ignoreMap":141},[228,144632,144633],{"class":230,"line":231},[228,144634,144635],{"class":297},"\u002F* rem 适配方案 *\u002F\n",[228,144637,144638,144640],{"class":230,"line":142},[228,144639,50750],{"class":51415},[228,144641,15687],{"class":238},[228,144643,144644,144646,144648,144651,144653,144655],{"class":230,"line":1293},[228,144645,70741],{"class":287},[228,144647,51552],{"class":238},[228,144649,144650],{"class":287},"62.5",[228,144652,566],{"class":234},[228,144654,130474],{"class":238},[228,144656,144657],{"class":297},"\u002F* 1rem = 10px *\u002F\n",[228,144659,144660],{"class":230,"line":1308},[228,144661,1679],{"class":238},[228,144663,144664,144666],{"class":230,"line":1314},[228,144665,130459],{"class":2077},[228,144667,15687],{"class":238},[228,144669,144670,144672,144674,144676,144679,144681],{"class":230,"line":1328},[228,144671,70683],{"class":287},[228,144673,51552],{"class":238},[228,144675,684],{"class":287},[228,144677,144678],{"class":234},"rem",[228,144680,130474],{"class":238},[228,144682,144683],{"class":297},"\u002F* 100px *\u002F\n",[228,144685,144686],{"class":230,"line":1334},[228,144687,1679],{"class":238},[19,144689,144690],{},"common.less",[220,144692,144694],{"className":126611,"code":144693,"language":126613,"meta":141,"style":141},"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",[30,144695,144696,144702,144717,144721,144727,144741,144745,144749,144753,144759,144773,144777,144783,144797],{"__ignoreMap":141},[228,144697,144698,144700],{"class":230,"line":231},[228,144699,50750],{"class":51415},[228,144701,15687],{"class":238},[228,144703,144704,144706,144708,144710,144712,144714],{"class":230,"line":142},[228,144705,70741],{"class":287},[228,144707,51552],{"class":238},[228,144709,144650],{"class":287},[228,144711,566],{"class":234},[228,144713,26183],{"class":238},[228,144715,144716],{"class":297},"\u002F* 10px *\u002F\n",[228,144718,144719],{"class":230,"line":1293},[228,144720,1679],{"class":238},[228,144722,144723,144725],{"class":230,"line":1308},[228,144724,51726],{"class":51415},[228,144726,15687],{"class":238},[228,144728,144729,144731,144733,144735,144737,144739],{"class":230,"line":1314},[228,144730,70683],{"class":287},[228,144732,51552],{"class":238},[228,144734,684],{"class":287},[228,144736,144678],{"class":234},[228,144738,26183],{"class":238},[228,144740,144683],{"class":297},[228,144742,144743],{"class":230,"line":1328},[228,144744,1679],{"class":238},[228,144746,144747],{"class":230,"line":1334},[228,144748,136072],{"class":238},[228,144750,144751],{"class":230,"line":1425},[228,144752,144635],{"class":297},[228,144754,144755,144757],{"class":230,"line":1431},[228,144756,50750],{"class":51415},[228,144758,15687],{"class":238},[228,144760,144761,144763,144765,144767,144769,144771],{"class":230,"line":1443},[228,144762,70741],{"class":287},[228,144764,51552],{"class":238},[228,144766,144650],{"class":287},[228,144768,566],{"class":234},[228,144770,130474],{"class":238},[228,144772,144657],{"class":297},[228,144774,144775],{"class":230,"line":1726},[228,144776,1679],{"class":238},[228,144778,144779,144781],{"class":230,"line":1731},[228,144780,130459],{"class":2077},[228,144782,15687],{"class":238},[228,144784,144785,144787,144789,144791,144793,144795],{"class":230,"line":1737},[228,144786,70683],{"class":287},[228,144788,51552],{"class":238},[228,144790,684],{"class":287},[228,144792,144678],{"class":234},[228,144794,130474],{"class":238},[228,144796,144683],{"class":297},[228,144798,144799],{"class":230,"line":1742},[228,144800,1679],{"class":238},[19,144802,144803,144804,144807],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23668,144805,144806],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[220,144809,144812],{"className":144810,"code":144811,"language":5302},[5300],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[30,144813,144811],{"__ignoreMap":141},[19,144815,144816],{},"less保存时会自动变成.css文件",[19,144818,144819],{},"好好搞懂上述代码写法",[200,144821,144823],{"id":144822},"_2132-样式导入样式","21.3.2 样式导入样式",[1576,144825],{"style":126467,"src":144826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[200,144828,144830],{"id":144829},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[183,144832,144833],{},[186,144834,144835],{},"准备工作",[1576,144837],{"style":126467,"src":144838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,144840,144841,144842],{},"github地址：",[476,144843,144844],{"href":144844,"rel":144845},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[23980],[19,144847,144848],{},"下载之后，将index.js文件拖到项目中就可以了",[19,144850,144851,144852],{},"js文件引入到index.html中使用的是",[30,144853,144854],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[183,144856,144857],{"start":142},[186,144858,144859],{},"vscode插件",[1576,144861],{"style":126467,"src":144862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,144864,144865],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,144867,144868],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[1576,144870],{"style":126467,"src":144871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,144873,144874],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[1576,144876],{"style":126467,"src":144877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,144879,144880],{},"修改成75就可以，alt+z为快捷键",[19,144882,144883],{},"index.css：",[220,144885,144886],{"className":126611,"code":144628,"language":126613,"meta":141,"style":141},[30,144887,144888,144892,144898,144912,144916,144922,144936],{"__ignoreMap":141},[228,144889,144890],{"class":230,"line":231},[228,144891,144635],{"class":297},[228,144893,144894,144896],{"class":230,"line":142},[228,144895,50750],{"class":51415},[228,144897,15687],{"class":238},[228,144899,144900,144902,144904,144906,144908,144910],{"class":230,"line":1293},[228,144901,70741],{"class":287},[228,144903,51552],{"class":238},[228,144905,144650],{"class":287},[228,144907,566],{"class":234},[228,144909,130474],{"class":238},[228,144911,144657],{"class":297},[228,144913,144914],{"class":230,"line":1308},[228,144915,1679],{"class":238},[228,144917,144918,144920],{"class":230,"line":1314},[228,144919,130459],{"class":2077},[228,144921,15687],{"class":238},[228,144923,144924,144926,144928,144930,144932,144934],{"class":230,"line":1328},[228,144925,70683],{"class":287},[228,144927,51552],{"class":238},[228,144929,684],{"class":287},[228,144931,144678],{"class":234},[228,144933,130474],{"class":238},[228,144935,144683],{"class":297},[228,144937,144938],{"class":230,"line":1334},[228,144939,1679],{"class":238},[19,144941,144625],{},[220,144943,144944],{"className":126611,"code":127015,"language":126613,"meta":141,"style":141},[30,144945,144946,144952,144964],{"__ignoreMap":141},[228,144947,144948,144950],{"class":230,"line":231},[228,144949,51915],{"class":51415},[228,144951,15687],{"class":238},[228,144953,144954,144956,144958,144960,144962],{"class":230,"line":142},[228,144955,70741],{"class":287},[228,144957,51552],{"class":238},[228,144959,839],{"class":287},[228,144961,51607],{"class":234},[228,144963,1404],{"class":238},[228,144965,144966],{"class":230,"line":1293},[228,144967,1679],{"class":238},[14,144969,144971],{"id":144970},"_214-响应式开发","21.4 响应式开发",[19,144973,144974],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[1576,144976],{"style":126467,"src":144977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,144979,144980],{},"做法：",[1245,144982,144983,144986],{},[186,144984,144985],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[186,144987,144988],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[1576,144990],{"style":126467,"src":144991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,144993,144994],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[200,144996,144998],{"id":144997},"_2141-简单代码示范","21.4.1 简单代码示范",[220,145000,145001],{"className":126611,"code":144628,"language":126613,"meta":141,"style":141},[30,145002,145003,145007,145013,145027,145031,145037,145051],{"__ignoreMap":141},[228,145004,145005],{"class":230,"line":231},[228,145006,144635],{"class":297},[228,145008,145009,145011],{"class":230,"line":142},[228,145010,50750],{"class":51415},[228,145012,15687],{"class":238},[228,145014,145015,145017,145019,145021,145023,145025],{"class":230,"line":1293},[228,145016,70741],{"class":287},[228,145018,51552],{"class":238},[228,145020,144650],{"class":287},[228,145022,566],{"class":234},[228,145024,130474],{"class":238},[228,145026,144657],{"class":297},[228,145028,145029],{"class":230,"line":1308},[228,145030,1679],{"class":238},[228,145032,145033,145035],{"class":230,"line":1314},[228,145034,130459],{"class":2077},[228,145036,15687],{"class":238},[228,145038,145039,145041,145043,145045,145047,145049],{"class":230,"line":1328},[228,145040,70683],{"class":287},[228,145042,51552],{"class":238},[228,145044,684],{"class":287},[228,145046,144678],{"class":234},[228,145048,130474],{"class":238},[228,145050,144683],{"class":297},[228,145052,145053],{"class":230,"line":1334},[228,145054,1679],{"class":238},[19,145056,145057],{},"父盒子一般命名为container",[200,145059,145061],{"id":145060},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,145063,145064,145065],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[388,145066,145067],{},"使得 Web 开发更加快捷",[1245,145069,145070],{},[186,145071,145072,145073],{},"官网：",[388,145074,145075],{},[476,145076,145077],{"href":145077,"rel":145078},"http:\u002F\u002Fgetbootstrap.com\u002F",[23980],[19,145080,145081],{},"可以直接去官网拿现成的东西",[183,145083,145084],{},[186,145085,145086],{},"Bootstrap的使用",[19,145088,145089],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,145091,145092],{},"Bootstrap 使用四步曲：",[19,145094,145095,145098],{},[388,145096,145097],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[1576,145100],{"style":126467,"src":145101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,145103,145104],{},"打开Bootstrap官网，然后下载",[1576,145106],{"style":126467,"src":145107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[1576,145109],{"style":126467,"src":145110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,145112,145113],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,145115,145116],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,145118,145119],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[1576,145121],{"style":126467,"src":145122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[220,145124,145126],{"className":126611,"code":145125,"language":126613,"meta":141,"style":141},".center {\n  color: red;\n}\n",[30,145127,145128,145134,145144],{"__ignoreMap":141},[228,145129,145130,145132],{"class":230,"line":231},[228,145131,126902],{"class":2077},[228,145133,15687],{"class":238},[228,145135,145136,145138,145140,145142],{"class":230,"line":142},[228,145137,71020],{"class":287},[228,145139,51552],{"class":238},[228,145141,57536],{"class":287},[228,145143,1404],{"class":238},[228,145145,145146],{"class":230,"line":1293},[228,145147,1679],{"class":238},[19,145149,145150,145153],{},[30,145151,145152],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[1576,145155],{"style":126467,"src":145156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[1576,145158],{"style":126467,"src":145159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[1576,145161],{"style":126467,"src":145162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,145164,145165],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[1576,145167],{"style":126467,"src":145168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,145170,145171],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[183,145173,145174],{"start":142},[186,145175,145176],{},"布局容器",[1576,145178],{"style":126467,"src":145179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,145181,145182],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,145184,145185],{},"container-fluid用于移动式布局比较方便",[183,145187,145188],{"start":1293},[186,145189,145190,145191],{},"bootstrap ",[388,145192,145193],{},"栅格系统原理",[1576,145195],{"style":126467,"src":145196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[183,145198,145199],{"start":1308},[186,145200,145201],{},[388,145202,145203],{},"栅格选项参数",[1576,145205],{"style":126467,"src":145206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,145208,145209],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,145211,14748],{},[220,145213,145214],{"className":126611,"code":145125,"language":126613,"meta":141,"style":141},[30,145215,145216,145222,145232],{"__ignoreMap":141},[228,145217,145218,145220],{"class":230,"line":231},[228,145219,126902],{"class":2077},[228,145221,15687],{"class":238},[228,145223,145224,145226,145228,145230],{"class":230,"line":142},[228,145225,71020],{"class":287},[228,145227,51552],{"class":238},[228,145229,57536],{"class":287},[228,145231,1404],{"class":238},[228,145233,145234],{"class":230,"line":1293},[228,145235,1679],{"class":238},[19,145237,135654],{},[1576,145239],{"style":126467,"src":145240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,145242,145243],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,145245,145246],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,145248,145249],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,145251,145252],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,145254,145255],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,145257,145258],{},"汇总展示说明：",[220,145260,145261],{"className":127358,"code":130715,"language":127360,"meta":141,"style":141},[30,145262,145263,145267,145281,145285],{"__ignoreMap":141},[228,145264,145265],{"class":230,"line":231},[228,145266,130722],{"class":297},[228,145268,145269,145271,145273,145275,145277,145279],{"class":230,"line":142},[228,145270,1148],{"class":238},[228,145272,51726],{"class":51415},[228,145274,53601],{"class":2077},[228,145276,284],{"class":238},[228,145278,130735],{"class":343},[228,145280,51422],{"class":238},[228,145282,145283],{"class":230,"line":1293},[228,145284,130742],{"class":238},[228,145286,145287,145289,145291],{"class":230,"line":1308},[228,145288,51900],{"class":238},[228,145290,51726],{"class":51415},[228,145292,51422],{"class":238},[1576,145294],{"style":126467,"src":145295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,145297,145298],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[220,145300,145301],{"className":127358,"code":130715,"language":127360,"meta":141,"style":141},[30,145302,145303,145307,145321,145325],{"__ignoreMap":141},[228,145304,145305],{"class":230,"line":231},[228,145306,130722],{"class":297},[228,145308,145309,145311,145313,145315,145317,145319],{"class":230,"line":142},[228,145310,1148],{"class":238},[228,145312,51726],{"class":51415},[228,145314,53601],{"class":2077},[228,145316,284],{"class":238},[228,145318,130735],{"class":343},[228,145320,51422],{"class":238},[228,145322,145323],{"class":230,"line":1293},[228,145324,130742],{"class":238},[228,145326,145327,145329,145331],{"class":230,"line":1308},[228,145328,51900],{"class":238},[228,145330,51726],{"class":51415},[228,145332,51422],{"class":238},[183,145334,145335],{"start":1314},[186,145336,145337],{},[388,145338,145339],{},"列嵌套",[1576,145341],{"style":126467,"src":145342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,145344,145345],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,145347,145348],{},"没加row内部这样：",[1576,145350],{"style":126467,"src":145351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,145353,145354],{},"加上row之后内部为：",[1576,145356],{"style":126467,"src":145357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[183,145359,145360],{"start":1328},[186,145361,145362],{},[388,145363,145364],{},"列偏移",[1576,145366],{"style":126467,"src":145367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,145369,145370],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,145372,145373],{},"要加偏移量，即偏移份数",[19,145375,145376],{},"偏移的份数=12-两个盒子的份数",[183,145378,145379],{"start":1334},[186,145380,145381],{},[388,145382,145383],{},"列排序",[1576,145385],{"style":126467,"src":145386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,145388,145389],{},"pull拉左；push推右",[183,145391,145392],{"start":1425},[186,145393,145394],{},[388,145395,145396],{},"响应式工具",[1576,145398],{"style":126467,"src":145399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,145401,145402],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[200,145404,145406],{"id":145405},"_2143-响应式小项目","21.4.3 响应式小项目",[19,145408,145409],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,145411,145412],{},"ul {",[19,145414,145415],{},"list-style: none;",[19,145417,145418],{},"margin:0;",[19,145420,145421],{},"padding:0; }",[1576,145423],{"style":126467,"src":145424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[1576,145426],{"style":126467,"src":145427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,145429,145430],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,145432,69004],{},[220,145434,145435],{"className":126611,"code":139281,"language":126613,"meta":141,"style":141},[30,145436,145437,145443,145453],{"__ignoreMap":141},[228,145438,145439,145441],{"class":230,"line":231},[228,145440,130459],{"class":2077},[228,145442,15687],{"class":238},[228,145444,145445,145447,145449,145451],{"class":230,"line":142},[228,145446,131091],{"class":287},[228,145448,51552],{"class":238},[228,145450,23851],{"class":287},[228,145452,1404],{"class":238},[228,145454,145455],{"class":230,"line":1293},[228,145456,1679],{"class":238},[19,145458,70568],{},[220,145460,145461],{"className":126611,"code":139281,"language":126613,"meta":141,"style":141},[30,145462,145463,145469,145479],{"__ignoreMap":141},[228,145464,145465,145467],{"class":230,"line":231},[228,145466,130459],{"class":2077},[228,145468,15687],{"class":238},[228,145470,145471,145473,145475,145477],{"class":230,"line":142},[228,145472,131091],{"class":287},[228,145474,51552],{"class":238},[228,145476,23851],{"class":287},[228,145478,1404],{"class":238},[228,145480,145481],{"class":230,"line":1293},[228,145482,1679],{"class":238},[14,145484,145486],{"id":145485},"_215-swiper-插件使用","21.5 swiper 插件使用",[1245,145488,145489,145492,145495],{},[186,145490,145491],{},"下载需要的css和js文件html页面中 引入相关文件",[186,145493,145494],{},"官网找到类似案例，复制html结构，css样式 js 语法",[186,145496,145497],{},"根据需求定制修改模块",[1576,145499],{"style":126467,"src":145500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,145502,145503],{},"解压后将这两部分放到项目中",[1576,145505],{"style":126467,"src":145506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,145508,145509],{},"这个插件可以帮助我们实现轮播图效果",[19,145511,145512],{},"用法：",[1576,145514],{"style":126467,"src":145515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,145517,145518],{},"找到自己喜欢的",[1576,145520],{"style":126467,"src":145521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,145523,145524],{},"右键，查看网页源代码",[1576,145526],{"style":126467,"src":145527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,145529,145530],{},"复制人家的结构内容",[19,145532,145533],{},"然后去看API文档：",[1576,145535],{"style":126467,"src":145536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,145538,145539],{},"可以看看如何修改样式",[19,145541,145542],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[5241,145544,145545],{},"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":141,"searchDepth":142,"depth":142,"links":145547},[145548,145553,145557,145562,145567],{"id":144348,"depth":142,"text":144349,"children":145549},[145550,145551,145552],{"id":144352,"depth":1293,"text":144353},{"id":144362,"depth":1293,"text":144363},{"id":144457,"depth":1293,"text":144458},{"id":144472,"depth":142,"text":144473,"children":145554},[145555,145556],{"id":144494,"depth":1293,"text":144495},{"id":144510,"depth":1293,"text":144511},{"id":144585,"depth":142,"text":144586,"children":145558},[145559,145560,145561],{"id":144598,"depth":1293,"text":144599},{"id":144822,"depth":1293,"text":144823},{"id":144829,"depth":1293,"text":144830},{"id":144970,"depth":142,"text":144971,"children":145563},[145564,145565,145566],{"id":144997,"depth":1293,"text":144998},{"id":145060,"depth":1293,"text":145061},{"id":145405,"depth":1293,"text":145406},{"id":145485,"depth":142,"text":145486},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144340,"description":154},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145574,"title":145575,"body":145576,"description":154,"extension":155,"meta":145796,"navigation":157,"path":145797,"seo":145798,"stem":145799,"__hash__":145800},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145577,"toc":145792},[145578,145581,145585,145588,145603,145608,145611,145616,145651,145656,145668,145673,145686,145691,145708,145713,145733,145738,145756,145759,145762,145765,145768,145772,145775,145778,145781,145784,145787,145790],[10,145579,145575],{"id":145580},"_22-代码提交与新型相对单位",[14,145582,145584],{"id":145583},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,145586,145587],{},"法1：",[183,145589,145590,145597,145600],{},[186,145591,145592,145593],{},"登录网站注册：",[476,145594,145595],{"href":145595,"rel":145596},"https:\u002F\u002Fgitee.com\u002F",[23980],[186,145598,145599],{},"码云创建新的仓库",[186,145601,145602],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1245,145604,145605],{},[186,145606,145607],{},"在网站根目录右键-- Git Bash Here",[1576,145609],{"style":126467,"src":145610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1245,145612,145613],{},[186,145614,145615],{},"如果是第一次利用git提交，请配置好全局选项",[220,145617,145619],{"className":117411,"code":145618,"language":117413,"meta":141,"style":141},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[30,145620,145621,145637],{"__ignoreMap":141},[228,145622,145623,145626,145628,145631,145634],{"class":230,"line":231},[228,145624,145625],{"class":2077},"git",[228,145627,119834],{"class":343},[228,145629,145630],{"class":287}," --global",[228,145632,145633],{"class":343}," user.name",[228,145635,145636],{"class":343}," \"你的名字\"\n",[228,145638,145639,145641,145643,145645,145648],{"class":230,"line":142},[228,145640,145625],{"class":2077},[228,145642,119834],{"class":343},[228,145644,145630],{"class":287},[228,145646,145647],{"class":343}," user.email",[228,145649,145650],{"class":343}," \"你的邮箱\"\n",[1245,145652,145653],{},[186,145654,145655],{},"初始化仓库",[220,145657,145659],{"className":117411,"code":145658,"language":117413,"meta":141,"style":141},"git init\n",[30,145660,145661],{"__ignoreMap":141},[228,145662,145663,145665],{"class":230,"line":231},[228,145664,145625],{"class":2077},[228,145666,145667],{"class":343}," init\n",[1245,145669,145670],{},[186,145671,145672],{},"把本地文件放到暂存区",[220,145674,145676],{"className":117411,"code":145675,"language":117413,"meta":141,"style":141},"git add .\n",[30,145677,145678],{"__ignoreMap":141},[228,145679,145680,145682,145684],{"class":230,"line":231},[228,145681,145625],{"class":2077},[228,145683,5324],{"class":343},[228,145685,28856],{"class":343},[1245,145687,145688],{},[186,145689,145690],{},"把本地文件放到本地仓库里面",[220,145692,145694],{"className":117411,"code":145693,"language":117413,"meta":141,"style":141},"git commit -m \"first commit\"\n",[30,145695,145696],{"__ignoreMap":141},[228,145697,145698,145700,145703,145705],{"class":230,"line":231},[228,145699,145625],{"class":2077},[228,145701,145702],{"class":343}," commit",[228,145704,100997],{"class":287},[228,145706,145707],{"class":343}," \"first commit\"\n",[1245,145709,145710],{},[186,145711,145712],{},"链接远程仓库",[220,145714,145716],{"className":117411,"code":145715,"language":117413,"meta":141,"style":141},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[30,145717,145718],{"__ignoreMap":141},[228,145719,145720,145722,145725,145727,145730],{"class":230,"line":231},[228,145721,145625],{"class":2077},[228,145723,145724],{"class":343}," remote",[228,145726,5324],{"class":343},[228,145728,145729],{"class":343}," origin",[228,145731,145732],{"class":343}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1245,145734,145735],{},[186,145736,145737],{},"把本地仓库的文件推送到远程仓库 push",[220,145739,145741],{"className":117411,"code":145740,"language":117413,"meta":141,"style":141},"git push -u origin master\n",[30,145742,145743],{"__ignoreMap":141},[228,145744,145745,145747,145749,145751,145753],{"class":230,"line":231},[228,145746,145625],{"class":2077},[228,145748,29131],{"class":343},[228,145750,28406],{"class":287},[228,145752,145729],{"class":343},[228,145754,145755],{"class":343}," master\n",[1576,145757],{"style":126467,"src":145758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,145760,145761],{},"上方方法暂未实现，后边学完git后在整",[19,145763,145764],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[1576,145766],{"style":126467,"src":145767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,145769,145771],{"id":145770},"_222-新型相对单位","22.2 新型相对单位",[1576,145773],{"style":126467,"src":145774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[1576,145776],{"style":126467,"src":145777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,145779,145780],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,145782,145783],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[1576,145785],{"style":126467,"src":145786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,145788,145789],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[5241,145791,24073],{},{"title":141,"searchDepth":142,"depth":142,"links":145793},[145794,145795],{"id":145583,"depth":142,"text":145584},{"id":145770,"depth":142,"text":145771},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145575,"description":154},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145802,"title":145803,"body":145804,"description":145808,"extension":155,"meta":145809,"navigation":157,"path":145810,"seo":145811,"stem":145812,"__hash__":145813},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145805,"toc":145806},[],{"title":141,"searchDepth":142,"depth":142,"links":145807},[],"自己正经开始学编程的第一门语言！",{"category":92954},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145803,"description":145808},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145815,"title":145816,"body":145817,"description":154,"extension":155,"meta":146964,"navigation":157,"path":146965,"seo":146966,"stem":146967,"__hash__":146968},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145818,"toc":146940},[145819,145822,145826,145829,145832,145857,145860,145866,145870,145873,145900,145903,145943,145946,145958,145961,145967,145971,145975,146002,146019,146026,146030,146033,146059,146062,146066,146069,146109,146112,146129,146135,146139,146144,146188,146191,146209,146212,146280,146284,146291,146294,146309,146312,146321,146324,146335,146338,146347,146350,146367,146370,146385,146389,146393,146396,146398,146418,146422,146425,146428,146439,146442,146448,146452,146458,146485,146488,146500,146503,146514,146517,146523,146527,146533,146583,146586,146628,146631,146664,146667,146701,146705,146708,146728,146731,146767,146770,146783,146787,146791,146797,146800,146813,146817,146820,146826,146829,146833,146836,146839,146888,146892,146908,146914,146921,146927,146937],[10,145820,145816],{"id":145821},"_1-python环境与第一个程序",[14,145823,145825],{"id":145824},"_11-什么是python","1.1 什么是Python",[19,145827,145828],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,145830,145831],{},"理解 Python 时抓住三个关键词：",[183,145833,145834,145837,145840],{},[186,145835,145836],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[186,145838,145839],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[186,145841,145842,145843,451,145846,451,145849,451,145852,451,145854,78],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[30,145844,145845],{},"os",[30,145847,145848],{},"sys",[30,145850,145851],{},"json",[30,145853,57975],{},[30,145855,145856],{},"datetime",[19,145858,145859],{},"Python 程序的运行链路：",[220,145861,145864],{"className":145862,"code":145863,"language":5302,"meta":141},[5300],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[30,145865,145863],{"__ignoreMap":141},[14,145867,145869],{"id":145868},"_12-python解释器","1.2 Python解释器",[19,145871,145872],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[220,145874,145876],{"className":23937,"code":145875,"language":23939,"meta":141,"style":141},"python --version\npython3 --version\npython\npython3\n",[30,145877,145878,145884,145890,145895],{"__ignoreMap":141},[228,145879,145880,145882],{"class":230,"line":231},[228,145881,30495],{"class":2077},[228,145883,26409],{"class":287},[228,145885,145886,145888],{"class":230,"line":142},[228,145887,100994],{"class":2077},[228,145889,26409],{"class":287},[228,145891,145892],{"class":230,"line":1293},[228,145893,145894],{"class":2077},"python\n",[228,145896,145897],{"class":230,"line":1308},[228,145898,145899],{"class":2077},"python3\n",[19,145901,145902],{},"进入交互模式后，可以直接输入表达式：",[220,145904,145906],{"className":30493,"code":145905,"language":30495,"meta":141,"style":141},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[30,145907,145908,145919,145924,145938],{"__ignoreMap":141},[228,145909,145910,145913,145915,145917],{"class":230,"line":231},[228,145911,145912],{"class":234},">>>",[228,145914,25234],{"class":287},[228,145916,45681],{"class":234},[228,145918,47838],{"class":287},[228,145920,145921],{"class":230,"line":142},[228,145922,145923],{"class":287},"3\n",[228,145925,145926,145928,145931,145933,145936],{"class":230,"line":1293},[228,145927,145912],{"class":234},[228,145929,145930],{"class":287}," print",[228,145932,239],{"class":238},[228,145934,145935],{"class":343},"\"hello python\"",[228,145937,245],{"class":238},[228,145939,145940],{"class":230,"line":1308},[228,145941,145942],{"class":238},"hello python\n",[19,145944,145945],{},"退出交互模式：",[220,145947,145949],{"className":30493,"code":145948,"language":30495,"meta":141,"style":141},"exit()\n",[30,145950,145951],{"__ignoreMap":141},[228,145952,145953,145956],{"class":230,"line":231},[228,145954,145955],{"class":287},"exit",[228,145957,2090],{"class":238},[19,145959,145960],{},"或使用快捷键：",[220,145962,145965],{"className":145963,"code":145964,"language":5302,"meta":141},[5300],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[30,145966,145964],{"__ignoreMap":141},[14,145968,145970],{"id":145969},"_13-安装python","1.3 安装Python",[200,145972,145974],{"id":145973},"_131-windows安装","1.3.1 Windows安装",[183,145976,145977,145984,145987,145993,145999],{},[186,145978,145979,145980],{},"打开 Python 官网：",[476,145981,145982],{"href":145982,"rel":145983},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[23980],[186,145985,145986],{},"下载 Windows Installer。",[186,145988,145989,145990,78],{},"安装时勾选 ",[30,145991,145992],{},"Add Python to PATH",[186,145994,145995,145996,78],{},"点击 ",[30,145997,145998],{},"Install Now",[186,146000,146001],{},"安装完成后打开命令提示符验证：",[220,146003,146005],{"className":23937,"code":146004,"language":23939,"meta":141,"style":141},"python --version\npip --version\n",[30,146006,146007,146013],{"__ignoreMap":141},[228,146008,146009,146011],{"class":230,"line":231},[228,146010,30495],{"class":2077},[228,146012,26409],{"class":287},[228,146014,146015,146017],{"class":230,"line":142},[228,146016,23946],{"class":2077},[228,146018,26409],{"class":287},[19,146020,146021,146022,146025],{},"如果提示 ",[30,146023,146024],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[200,146027,146029],{"id":146028},"_132-macos安装","1.3.2 macOS安装",[19,146031,146032],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[220,146034,146036],{"className":23937,"code":146035,"language":23939,"meta":141,"style":141},"brew install python\npython3 --version\npip3 --version\n",[30,146037,146038,146047,146053],{"__ignoreMap":141},[228,146039,146040,146043,146045],{"class":230,"line":231},[228,146041,146042],{"class":2077},"brew",[228,146044,23949],{"class":343},[228,146046,124433],{"class":343},[228,146048,146049,146051],{"class":230,"line":142},[228,146050,100994],{"class":2077},[228,146052,26409],{"class":287},[228,146054,146055,146057],{"class":230,"line":1293},[228,146056,119815],{"class":2077},[228,146058,26409],{"class":287},[19,146060,146061],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[200,146063,146065],{"id":146064},"_133-linux安装","1.3.3 Linux安装",[19,146067,146068],{},"Ubuntu\u002FDebian：",[220,146070,146072],{"className":23937,"code":146071,"language":23939,"meta":141,"style":141},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[30,146073,146074,146082,146097,146103],{"__ignoreMap":141},[228,146075,146076,146078,146080],{"class":230,"line":231},[228,146077,24692],{"class":2077},[228,146079,117432],{"class":343},[228,146081,26358],{"class":343},[228,146083,146084,146086,146088,146090,146092,146094],{"class":230,"line":142},[228,146085,24692],{"class":2077},[228,146087,117432],{"class":343},[228,146089,23949],{"class":343},[228,146091,104518],{"class":343},[228,146093,100913],{"class":343},[228,146095,146096],{"class":343}," python3-venv\n",[228,146098,146099,146101],{"class":230,"line":1293},[228,146100,100994],{"class":2077},[228,146102,26409],{"class":287},[228,146104,146105,146107],{"class":230,"line":1308},[228,146106,119815],{"class":2077},[228,146108,26409],{"class":287},[19,146110,146111],{},"Fedora：",[220,146113,146115],{"className":23937,"code":146114,"language":23939,"meta":141,"style":141},"sudo dnf install python3 python3-pip\n",[30,146116,146117],{"__ignoreMap":141},[228,146118,146119,146121,146123,146125,146127],{"class":230,"line":231},[228,146120,24692],{"class":2077},[228,146122,26431],{"class":343},[228,146124,23949],{"class":343},[228,146126,104518],{"class":343},[228,146128,119880],{"class":343},[19,146130,146131,146132,146134],{},"Linux 上通常使用 ",[30,146133,100994],{}," 命令，避免和系统旧版本 Python 冲突。",[14,146136,146138],{"id":146137},"_14-pip包管理器","1.4 pip包管理器",[19,146140,146141,146143],{},[30,146142,23946],{}," 用来安装第三方库。",[220,146145,146147],{"className":23937,"code":146146,"language":23939,"meta":141,"style":141},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[30,146148,146149,146158,146167,146175,146181],{"__ignoreMap":141},[228,146150,146151,146153,146155],{"class":230,"line":231},[228,146152,23946],{"class":2077},[228,146154,23949],{"class":343},[228,146156,146157],{"class":343}," requests\n",[228,146159,146160,146162,146165],{"class":230,"line":142},[228,146161,23946],{"class":2077},[228,146163,146164],{"class":343}," uninstall",[228,146166,146157],{"class":343},[228,146168,146169,146171,146173],{"class":230,"line":1293},[228,146170,23946],{"class":2077},[228,146172,117689],{"class":343},[228,146174,146157],{"class":343},[228,146176,146177,146179],{"class":230,"line":1308},[228,146178,23946],{"class":2077},[228,146180,119070],{"class":343},[228,146182,146183,146185],{"class":230,"line":1314},[228,146184,23946],{"class":2077},[228,146186,146187],{"class":343}," freeze\n",[19,146189,146190],{},"国内网络较慢时可以临时使用镜像：",[220,146192,146194],{"className":23937,"code":146193,"language":23939,"meta":141,"style":141},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[30,146195,146196],{"__ignoreMap":141},[228,146197,146198,146200,146202,146205,146207],{"class":230,"line":231},[228,146199,23946],{"class":2077},[228,146201,23949],{"class":343},[228,146203,146204],{"class":343}," requests",[228,146206,26546],{"class":287},[228,146208,119843],{"class":343},[19,146210,146211],{},"常见第三方库：",[376,146213,146214,146223],{},[379,146215,146216],{},[382,146217,146218,146221],{},[385,146219,146220],{},"库",[385,146222,102811],{},[423,146224,146225,146233,146240,146248,146256,146264,146272],{},[382,146226,146227,146230],{},[428,146228,146229],{},"requests",[428,146231,146232],{},"网络请求",[382,146234,146235,146237],{},[428,146236,100741],{},[428,146238,146239],{},"数值计算",[382,146241,146242,146245],{},[428,146243,146244],{},"pandas",[428,146246,146247],{},"表格数据处理",[382,146249,146250,146253],{},[428,146251,146252],{},"matplotlib",[428,146254,146255],{},"绘图",[382,146257,146258,146261],{},[428,146259,146260],{},"pyecharts",[428,146262,146263],{},"ECharts 图表",[382,146265,146266,146269],{},[428,146267,146268],{},"flask",[428,146270,146271],{},"Web 后端",[382,146273,146274,146277],{},[428,146275,146276],{},"pytest",[428,146278,146279],{},"自动化测试",[14,146281,146283],{"id":146282},"_15-虚拟环境","1.5 虚拟环境",[19,146285,146286,146287,146290],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[30,146288,146289],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,146292,146293],{},"创建虚拟环境：",[220,146295,146297],{"className":23937,"code":146296,"language":23939,"meta":141,"style":141},"python -m venv .venv\n",[30,146298,146299],{"__ignoreMap":141},[228,146300,146301,146303,146305,146307],{"class":230,"line":231},[228,146302,30495],{"class":2077},[228,146304,100997],{"class":287},[228,146306,101000],{"class":343},[228,146308,101003],{"class":343},[19,146310,146311],{},"Windows 激活：",[220,146313,146315],{"className":23937,"code":146314,"language":23939,"meta":141,"style":141},".venv\\Scripts\\activate\n",[30,146316,146317],{"__ignoreMap":141},[228,146318,146319],{"class":230,"line":231},[228,146320,146314],{"class":2077},[19,146322,146323],{},"macOS\u002FLinux 激活：",[220,146325,146327],{"className":23937,"code":146326,"language":23939,"meta":141,"style":141},"source .venv\u002Fbin\u002Factivate\n",[30,146328,146329],{"__ignoreMap":141},[228,146330,146331,146333],{"class":230,"line":231},[228,146332,101008],{"class":287},[228,146334,101011],{"class":343},[19,146336,146337],{},"退出虚拟环境：",[220,146339,146341],{"className":23937,"code":146340,"language":23939,"meta":141,"style":141},"deactivate\n",[30,146342,146343],{"__ignoreMap":141},[228,146344,146345],{"class":230,"line":231},[228,146346,146340],{"class":2077},[19,146348,146349],{},"保存依赖：",[220,146351,146353],{"className":23937,"code":146352,"language":23939,"meta":141,"style":141},"pip freeze > requirements.txt\n",[30,146354,146355],{"__ignoreMap":141},[228,146356,146357,146359,146362,146364],{"class":230,"line":231},[228,146358,23946],{"class":2077},[228,146360,146361],{"class":343}," freeze",[228,146363,26338],{"class":234},[228,146365,146366],{"class":343}," requirements.txt\n",[19,146368,146369],{},"安装依赖：",[220,146371,146373],{"className":23937,"code":146372,"language":23939,"meta":141,"style":141},"pip install -r requirements.txt\n",[30,146374,146375],{"__ignoreMap":141},[228,146376,146377,146379,146381,146383],{"class":230,"line":231},[228,146378,23946],{"class":2077},[228,146380,23949],{"class":343},[228,146382,119754],{"class":287},[228,146384,146366],{"class":343},[14,146386,146388],{"id":146387},"_16-开发工具","1.6 开发工具",[200,146390,146392],{"id":146391},"_161-pycharm","1.6.1 PyCharm",[19,146394,146395],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,146397,122177],{},[183,146399,146400,146403,146406,146412,146415],{},[186,146401,146402],{},"New Project：创建项目。",[186,146404,146405],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[186,146407,146408,146409,89],{},"New Python File：创建 ",[30,146410,146411],{},".py",[186,146413,146414],{},"Run：运行当前文件。",[186,146416,146417],{},"Debug：断点调试。",[200,146419,146421],{"id":146420},"_162-vs-code","1.6.2 VS Code",[19,146423,146424],{},"VS Code 轻量，适合后续多语言开发。",[19,146426,146427],{},"建议安装插件：",[183,146429,146430,146433,146436],{},[186,146431,146432],{},"Python。",[186,146434,146435],{},"Pylance。",[186,146437,146438],{},"Jupyter。",[19,146440,146441],{},"选择解释器：",[220,146443,146446],{"className":146444,"code":146445,"language":5302,"meta":141},[5300],"Ctrl + Shift + P -> Python: Select Interpreter\n",[30,146447,146445],{"__ignoreMap":141},[14,146449,146451],{"id":146450},"_17-第一个python程序","1.7 第一个Python程序",[19,146453,146454,146455,24734],{},"创建文件 ",[30,146456,146457],{},"hello.py",[220,146459,146461],{"className":30493,"code":146460,"language":30495,"meta":141,"style":141},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[30,146462,146463,146474],{"__ignoreMap":141},[228,146464,146465,146467,146469,146472],{"class":230,"line":231},[228,146466,30530],{"class":287},[228,146468,239],{"class":238},[228,146470,146471],{"class":343},"\"Hello World\"",[228,146473,245],{"class":238},[228,146475,146476,146478,146480,146483],{"class":230,"line":142},[228,146477,30530],{"class":287},[228,146479,239],{"class":238},[228,146481,146482],{"class":343},"\"你好，Python\"",[228,146484,245],{"class":238},[19,146486,146487],{},"在终端运行：",[220,146489,146491],{"className":23937,"code":146490,"language":23939,"meta":141,"style":141},"python hello.py\n",[30,146492,146493],{"__ignoreMap":141},[228,146494,146495,146497],{"class":230,"line":231},[228,146496,30495],{"class":2077},[228,146498,146499],{"class":343}," hello.py\n",[19,146501,146502],{},"或：",[220,146504,146506],{"className":23937,"code":146505,"language":23939,"meta":141,"style":141},"python3 hello.py\n",[30,146507,146508],{"__ignoreMap":141},[228,146509,146510,146512],{"class":230,"line":231},[228,146511,100994],{"class":2077},[228,146513,146499],{"class":343},[19,146515,146516],{},"输出：",[220,146518,146521],{"className":146519,"code":146520,"language":5302,"meta":141},[5300],"Hello World\n你好，Python\n",[30,146522,146520],{"__ignoreMap":141},[14,146524,146526],{"id":146525},"_18-print函数","1.8 print函数",[19,146528,146529,146532],{},[30,146530,146531],{},"print()"," 用来输出内容。",[220,146534,146536],{"className":30493,"code":146535,"language":30495,"meta":141,"style":141},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[30,146537,146538,146548,146558,146568],{"__ignoreMap":141},[228,146539,146540,146542,146544,146546],{"class":230,"line":231},[228,146541,30530],{"class":287},[228,146543,239],{"class":238},[228,146545,5959],{"class":343},[228,146547,245],{"class":238},[228,146549,146550,146552,146554,146556],{"class":230,"line":142},[228,146551,30530],{"class":287},[228,146553,239],{"class":238},[228,146555,549],{"class":287},[228,146557,245],{"class":238},[228,146559,146560,146562,146564,146566],{"class":230,"line":1293},[228,146561,30530],{"class":287},[228,146563,239],{"class":238},[228,146565,288],{"class":287},[228,146567,245],{"class":238},[228,146569,146570,146572,146574,146577,146579,146581],{"class":230,"line":1308},[228,146571,30530],{"class":287},[228,146573,239],{"class":238},[228,146575,146576],{"class":343},"\"年龄:\"",[228,146578,12550],{"class":238},[228,146580,888],{"class":287},[228,146582,245],{"class":238},[19,146584,146585],{},"多个内容用逗号隔开，默认中间加空格：",[220,146587,146589],{"className":30493,"code":146588,"language":30495,"meta":141,"style":141},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[30,146590,146591,146601,146611],{"__ignoreMap":141},[228,146592,146593,146596,146598],{"class":230,"line":231},[228,146594,146595],{"class":238},"name ",[228,146597,284],{"class":234},[228,146599,146600],{"class":343}," \"张三\"\n",[228,146602,146603,146606,146608],{"class":230,"line":142},[228,146604,146605],{"class":238},"age ",[228,146607,284],{"class":234},[228,146609,146610],{"class":287}," 18\n",[228,146612,146613,146615,146617,146620,146623,146625],{"class":230,"line":1293},[228,146614,30530],{"class":287},[228,146616,239],{"class":238},[228,146618,146619],{"class":343},"\"姓名:\"",[228,146621,146622],{"class":238},", name, ",[228,146624,146576],{"class":343},[228,146626,146627],{"class":238},", age)\n",[19,146629,146630],{},"修改分隔符：",[220,146632,146634],{"className":30493,"code":146633,"language":30495,"meta":141,"style":141},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[30,146635,146636],{"__ignoreMap":141},[228,146637,146638,146640,146642,146645,146647,146649,146651,146653,146655,146658,146660,146662],{"class":230,"line":231},[228,146639,30530],{"class":287},[228,146641,239],{"class":238},[228,146643,146644],{"class":343},"\"2024\"",[228,146646,12550],{"class":238},[228,146648,54431],{"class":343},[228,146650,12550],{"class":238},[228,146652,54431],{"class":343},[228,146654,12550],{"class":238},[228,146656,146657],{"class":5331},"sep",[228,146659,284],{"class":234},[228,146661,32598],{"class":343},[228,146663,245],{"class":238},[19,146665,146666],{},"修改结尾符：",[220,146668,146670],{"className":30493,"code":146669,"language":30495,"meta":141,"style":141},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[30,146671,146672,146690],{"__ignoreMap":141},[228,146673,146674,146676,146678,146680,146682,146684,146686,146688],{"class":230,"line":231},[228,146675,30530],{"class":287},[228,146677,239],{"class":238},[228,146679,5959],{"class":343},[228,146681,12550],{"class":238},[228,146683,45916],{"class":5331},[228,146685,284],{"class":234},[228,146687,4473],{"class":343},[228,146689,245],{"class":238},[228,146691,146692,146694,146696,146699],{"class":230,"line":142},[228,146693,30530],{"class":287},[228,146695,239],{"class":238},[228,146697,146698],{"class":343},"\"python\"",[228,146700,245],{"class":238},[14,146702,146704],{"id":146703},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,146706,146707],{},"交互运行适合临时验证：",[220,146709,146711],{"className":30493,"code":146710,"language":30495,"meta":141,"style":141},">>> 10 * 3\n30\n",[30,146712,146713,146723],{"__ignoreMap":141},[228,146714,146715,146717,146719,146721],{"class":230,"line":231},[228,146716,145912],{"class":234},[228,146718,2152],{"class":287},[228,146720,6633],{"class":234},[228,146722,120151],{"class":287},[228,146724,146725],{"class":230,"line":142},[228,146726,146727],{"class":287},"30\n",[19,146729,146730],{},"脚本运行适合保存程序：",[220,146732,146734],{"className":30493,"code":146733,"language":30495,"meta":141,"style":141},"price = 8\ncount = 5\nprint(price * count)\n",[30,146735,146736,146746,146755],{"__ignoreMap":141},[228,146737,146738,146741,146743],{"class":230,"line":231},[228,146739,146740],{"class":238},"price ",[228,146742,284],{"class":234},[228,146744,146745],{"class":287}," 8\n",[228,146747,146748,146751,146753],{"class":230,"line":142},[228,146749,146750],{"class":238},"count ",[228,146752,284],{"class":234},[228,146754,54542],{"class":287},[228,146756,146757,146759,146762,146764],{"class":230,"line":1293},[228,146758,30530],{"class":287},[228,146760,146761],{"class":238},"(price ",[228,146763,693],{"class":234},[228,146765,146766],{"class":238}," count)\n",[19,146768,146769],{},"实际学习中推荐：",[183,146771,146772,146775,146780],{},[186,146773,146774],{},"临时试一个语法，用交互模式。",[186,146776,146777,146778,89],{},"写完整练习，用 ",[30,146779,146411],{},[186,146781,146782],{},"写项目，用独立目录和虚拟环境。",[14,146784,146786],{"id":146785},"_110-常见错误","1.10 常见错误",[200,146788,146790],{"id":146789},"_1101-命令找不到","1.10.1 命令找不到",[220,146792,146795],{"className":146793,"code":146794,"language":5302,"meta":141},[5300],"python: command not found\n",[30,146796,146794],{"__ignoreMap":141},[19,146798,146799],{},"原因：",[183,146801,146802,146805,146808],{},[186,146803,146804],{},"没安装 Python。",[186,146806,146807],{},"PATH 没配置。",[186,146809,146810,146811,78],{},"Linux\u002FmacOS 应该使用 ",[30,146812,100994],{},[200,146814,146816],{"id":146815},"_1102-文件名冲突","1.10.2 文件名冲突",[19,146818,146819],{},"不要把文件命名为：",[220,146821,146824],{"className":146822,"code":146823,"language":5302,"meta":141},[5300],"random.py\njson.py\ntime.py\nrequests.py\n",[30,146825,146823],{"__ignoreMap":141},[19,146827,146828],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[200,146830,146832],{"id":146831},"_1103-中文乱码","1.10.3 中文乱码",[19,146834,146835],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,146837,146838],{},"如果读写文件出现乱码，要明确指定编码：",[220,146840,146842],{"className":30493,"code":146841,"language":30495,"meta":141,"style":141},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[30,146843,146844,146878],{"__ignoreMap":141},[228,146845,146846,146848,146851,146853,146856,146858,146861,146863,146866,146868,146871,146873,146875],{"class":230,"line":231},[228,146847,107948],{"class":234},[228,146849,146850],{"class":287}," open",[228,146852,239],{"class":238},[228,146854,146855],{"class":343},"\"data.txt\"",[228,146857,12550],{"class":238},[228,146859,146860],{"class":343},"\"r\"",[228,146862,12550],{"class":238},[228,146864,146865],{"class":5331},"encoding",[228,146867,284],{"class":234},[228,146869,146870],{"class":343},"\"utf-8\"",[228,146872,13829],{"class":238},[228,146874,31498],{"class":234},[228,146876,146877],{"class":238}," f:\n",[228,146879,146880,146883,146885],{"class":230,"line":142},[228,146881,146882],{"class":238},"    content ",[228,146884,284],{"class":234},[228,146886,146887],{"class":238}," f.read()\n",[14,146889,146891],{"id":146890},"_111-本章练习","1.11 本章练习",[183,146893,146894,146897,146903],{},[186,146895,146896],{},"安装 Python，并在终端输出版本号。",[186,146898,146899,146900,146902],{},"新建 ",[30,146901,146457],{},"，输出自己的姓名、年龄、学习目标。",[186,146904,104481,146905,146907],{},[30,146906,146531],{}," 输出下面格式：",[220,146909,146912],{"className":146910,"code":146911,"language":5302,"meta":141},[5300],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[30,146913,146911],{"__ignoreMap":141},[183,146915,146916],{"start":1308},[186,146917,104481,146918,146920],{},[30,146919,146657],{}," 输出日期：",[220,146922,146925],{"className":146923,"code":146924,"language":5302,"meta":141},[5300],"2024-10-10\n",[30,146926,146924],{"__ignoreMap":141},[183,146928,146929],{"start":1314},[186,146930,104481,146931,146933,146934,146936],{},[30,146932,45916],{}," 让两次 ",[30,146935,146531],{}," 输出在同一行。",[5241,146938,146939],{},"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":141,"searchDepth":142,"depth":142,"links":146941},[146942,146943,146944,146949,146950,146951,146955,146956,146957,146958,146963],{"id":145824,"depth":142,"text":145825},{"id":145868,"depth":142,"text":145869},{"id":145969,"depth":142,"text":145970,"children":146945},[146946,146947,146948],{"id":145973,"depth":1293,"text":145974},{"id":146028,"depth":1293,"text":146029},{"id":146064,"depth":1293,"text":146065},{"id":146137,"depth":142,"text":146138},{"id":146282,"depth":142,"text":146283},{"id":146387,"depth":142,"text":146388,"children":146952},[146953,146954],{"id":146391,"depth":1293,"text":146392},{"id":146420,"depth":1293,"text":146421},{"id":146450,"depth":142,"text":146451},{"id":146525,"depth":142,"text":146526},{"id":146703,"depth":142,"text":146704},{"id":146785,"depth":142,"text":146786,"children":146959},[146960,146961,146962],{"id":146789,"depth":1293,"text":146790},{"id":146815,"depth":1293,"text":146816},{"id":146831,"depth":1293,"text":146832},{"id":146890,"depth":142,"text":146891},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145816,"description":154},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":146970,"title":146971,"body":146972,"description":154,"extension":155,"meta":149376,"navigation":157,"path":149377,"seo":149378,"stem":149379,"__hash__":149380},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":146973,"toc":149361},[146974,146977,146981,146984,146987,147004,147007,147049,147052,147056,147059,147062,147099,147102,147136,147139,147231,147235,147249,147252,147279,147282,147286,147389,147396,147399,147416,147420,147427,147616,147619,147692,147696,147699,147783,147786,147818,147822,148026,148029,148033,148039,148141,148144,148400,148404,148407,148410,148424,148426,148612,148616,148978,148984,148988,148991,149115,149118,149297,149300,149304,149337,149341,149358],[10,146975,146971],{"id":146976},"_10-json与pyecharts折线图",[14,146978,146980],{"id":146979},"_101-数据可视化","10.1 数据可视化",[19,146982,146983],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,146985,146986],{},"常见图表：",[183,146988,146989,146992,146995,146998,147001],{},[186,146990,146991],{},"折线图：看趋势。",[186,146993,146994],{},"柱状图：看分类对比。",[186,146996,146997],{},"饼图：看占比。",[186,146999,147000],{},"地图：看地域分布。",[186,147002,147003],{},"散点图：看两个变量之间的关系。",[19,147005,147006],{},"Python 可视化常用库：",[376,147008,147009,147017],{},[379,147010,147011],{},[382,147012,147013,147015],{},[385,147014,146220],{},[385,147016,23855],{},[423,147018,147019,147026,147034,147041],{},[382,147020,147021,147023],{},[428,147022,146252],{},[428,147024,147025],{},"基础、经典、可定制",[382,147027,147028,147031],{},[428,147029,147030],{},"seaborn",[428,147032,147033],{},"统计图表更美观",[382,147035,147036,147038],{},[428,147037,146260],{},[428,147039,147040],{},"生成交互式网页图表",[382,147042,147043,147046],{},[428,147044,147045],{},"plotly",[428,147047,147048],{},"交互图表能力强",[19,147050,147051],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,147053,147055],{"id":147054},"_102-json回顾","10.2 JSON回顾",[19,147057,147058],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,147060,147061],{},"Python 字典：",[220,147063,147065],{"className":30493,"code":147064,"language":30495,"meta":141,"style":141},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[30,147066,147067,147075,147086,147095],{"__ignoreMap":141},[228,147068,147069,147071,147073],{"class":230,"line":231},[228,147070,101773],{"class":238},[228,147072,284],{"class":234},[228,147074,15687],{"class":238},[228,147076,147077,147080,147082,147084],{"class":230,"line":142},[228,147078,147079],{"class":343},"    \"name\"",[228,147081,51552],{"class":238},[228,147083,69384],{"class":343},[228,147085,31581],{"class":238},[228,147087,147088,147091,147093],{"class":230,"line":1293},[228,147089,147090],{"class":343},"    \"value\"",[228,147092,51552],{"class":238},[228,147094,97573],{"class":287},[228,147096,147097],{"class":230,"line":1308},[228,147098,1679],{"class":238},[19,147100,147101],{},"JSON 字符串：",[220,147103,147106],{"className":147104,"code":147105,"language":145851,"meta":141,"style":141},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[30,147107,147108,147112,147123,147132],{"__ignoreMap":141},[228,147109,147110],{"class":230,"line":231},[228,147111,1660],{"class":238},[228,147113,147114,147117,147119,147121],{"class":230,"line":142},[228,147115,147116],{"class":287},"  \"name\"",[228,147118,51552],{"class":238},[228,147120,69384],{"class":343},[228,147122,31581],{"class":238},[228,147124,147125,147128,147130],{"class":230,"line":1293},[228,147126,147127],{"class":287},"  \"value\"",[228,147129,51552],{"class":238},[228,147131,97573],{"class":287},[228,147133,147134],{"class":230,"line":1308},[228,147135,1679],{"class":238},[19,147137,147138],{},"Python 与 JSON 的转换：",[220,147140,147142],{"className":30493,"code":147141,"language":30495,"meta":141,"style":141},"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",[30,147143,147144,147151,147155,147180,147184,147203,147210,147214,147224],{"__ignoreMap":141},[228,147145,147146,147148],{"class":230,"line":231},[228,147147,30507],{"class":234},[228,147149,147150],{"class":238}," json\n",[228,147152,147153],{"class":230,"line":142},[228,147154,2514],{"emptyLinePlaceholder":157},[228,147156,147157,147159,147161,147163,147165,147167,147169,147171,147174,147176,147178],{"class":230,"line":1293},[228,147158,101773],{"class":238},[228,147160,284],{"class":234},[228,147162,4562],{"class":238},[228,147164,62794],{"class":343},[228,147166,51552],{"class":238},[228,147168,69384],{"class":343},[228,147170,12550],{"class":238},[228,147172,147173],{"class":343},"\"value\"",[228,147175,51552],{"class":238},[228,147177,549],{"class":287},[228,147179,1679],{"class":238},[228,147181,147182],{"class":230,"line":1308},[228,147183,2514],{"emptyLinePlaceholder":157},[228,147185,147186,147189,147191,147194,147197,147199,147201],{"class":230,"line":1314},[228,147187,147188],{"class":238},"json_text ",[228,147190,284],{"class":234},[228,147192,147193],{"class":238}," json.dumps(data, ",[228,147195,147196],{"class":5331},"ensure_ascii",[228,147198,284],{"class":234},[228,147200,34102],{"class":287},[228,147202,245],{"class":238},[228,147204,147205,147207],{"class":230,"line":1328},[228,147206,30530],{"class":287},[228,147208,147209],{"class":238},"(json_text)\n",[228,147211,147212],{"class":230,"line":1334},[228,147213,2514],{"emptyLinePlaceholder":157},[228,147215,147216,147219,147221],{"class":230,"line":1425},[228,147217,147218],{"class":238},"new_data ",[228,147220,284],{"class":234},[228,147222,147223],{"class":238}," json.loads(json_text)\n",[228,147225,147226,147228],{"class":230,"line":1431},[228,147227,30530],{"class":287},[228,147229,147230],{"class":238},"(new_data)\n",[14,147232,147234],{"id":147233},"_103-安装pyecharts","10.3 安装pyecharts",[220,147236,147238],{"className":23937,"code":147237,"language":23939,"meta":141,"style":141},"pip install pyecharts\n",[30,147239,147240],{"__ignoreMap":141},[228,147241,147242,147244,147246],{"class":230,"line":231},[228,147243,23946],{"class":2077},[228,147245,23949],{"class":343},[228,147247,147248],{"class":343}," pyecharts\n",[19,147250,147251],{},"验证：",[220,147253,147255],{"className":30493,"code":147254,"language":30495,"meta":141,"style":141},"import pyecharts\n\nprint(pyecharts.__version__)\n",[30,147256,147257,147263,147267],{"__ignoreMap":141},[228,147258,147259,147261],{"class":230,"line":231},[228,147260,30507],{"class":234},[228,147262,147248],{"class":238},[228,147264,147265],{"class":230,"line":142},[228,147266,2514],{"emptyLinePlaceholder":157},[228,147268,147269,147271,147274,147277],{"class":230,"line":1293},[228,147270,30530],{"class":287},[228,147272,147273],{"class":238},"(pyecharts.",[228,147275,147276],{"class":287},"__version__",[228,147278,245],{"class":238},[19,147280,147281],{},"如果使用虚拟环境，要先激活环境再安装。",[14,147283,147285],{"id":147284},"_104-第一个折线图","10.4 第一个折线图",[220,147287,147289],{"className":30493,"code":147288,"language":30495,"meta":141,"style":141},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[30,147290,147291,147303,147307,147317,147347,147379],{"__ignoreMap":141},[228,147292,147293,147295,147298,147300],{"class":230,"line":231},[228,147294,30852],{"class":234},[228,147296,147297],{"class":238}," pyecharts.charts ",[228,147299,30507],{"class":234},[228,147301,147302],{"class":238}," Line\n",[228,147304,147305],{"class":230,"line":142},[228,147306,2514],{"emptyLinePlaceholder":157},[228,147308,147309,147312,147314],{"class":230,"line":1293},[228,147310,147311],{"class":238},"line ",[228,147313,284],{"class":234},[228,147315,147316],{"class":238}," Line()\n",[228,147318,147319,147322,147325,147327,147330,147332,147335,147337,147340,147342,147345],{"class":230,"line":1308},[228,147320,147321],{"class":238},"line.add_xaxis([",[228,147323,147324],{"class":343},"\"周一\"",[228,147326,12550],{"class":238},[228,147328,147329],{"class":343},"\"周二\"",[228,147331,12550],{"class":238},[228,147333,147334],{"class":343},"\"周三\"",[228,147336,12550],{"class":238},[228,147338,147339],{"class":343},"\"周四\"",[228,147341,12550],{"class":238},[228,147343,147344],{"class":343},"\"周五\"",[228,147346,4771],{"class":238},[228,147348,147349,147352,147355,147357,147359,147361,147363,147365,147367,147369,147372,147374,147377],{"class":230,"line":1314},[228,147350,147351],{"class":238},"line.add_yaxis(",[228,147353,147354],{"class":343},"\"销售额\"",[228,147356,77633],{"class":238},[228,147358,549],{"class":287},[228,147360,12550],{"class":238},[228,147362,1055],{"class":287},[228,147364,12550],{"class":238},[228,147366,1100],{"class":287},[228,147368,12550],{"class":238},[228,147370,147371],{"class":287},"150",[228,147373,12550],{"class":238},[228,147375,147376],{"class":287},"180",[228,147378,4771],{"class":238},[228,147380,147381,147384,147387],{"class":230,"line":1328},[228,147382,147383],{"class":238},"line.render(",[228,147385,147386],{"class":343},"\"line.html\"",[228,147388,245],{"class":238},[19,147390,147391,147392,147395],{},"运行后会生成 ",[30,147393,147394],{},"line.html","，用浏览器打开即可看到图表。",[19,147397,147398],{},"核心步骤：",[183,147400,147401,147404,147407,147410,147413],{},[186,147402,147403],{},"导入图表类。",[186,147405,147406],{},"创建图表对象。",[186,147408,147409],{},"添加 x 轴数据。",[186,147411,147412],{},"添加 y 轴数据。",[186,147414,147415],{},"渲染为 HTML。",[14,147417,147419],{"id":147418},"_105-全局配置","10.5 全局配置",[19,147421,147422,147423,147426],{},"常用配置在 ",[30,147424,147425],{},"pyecharts.options"," 中。",[220,147428,147430],{"className":30493,"code":147429,"language":30495,"meta":141,"style":141},"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",[30,147431,147432,147449,147459,147463,147471,147495,147523,147528,147547,147566,147584,147604,147608],{"__ignoreMap":141},[228,147433,147434,147436,147439,147441,147444,147446],{"class":230,"line":231},[228,147435,30852],{"class":234},[228,147437,147438],{"class":238}," pyecharts ",[228,147440,30507],{"class":234},[228,147442,147443],{"class":238}," options ",[228,147445,31498],{"class":234},[228,147447,147448],{"class":238}," opts\n",[228,147450,147451,147453,147455,147457],{"class":230,"line":142},[228,147452,30852],{"class":234},[228,147454,147297],{"class":238},[228,147456,30507],{"class":234},[228,147458,147302],{"class":238},[228,147460,147461],{"class":230,"line":1293},[228,147462,2514],{"emptyLinePlaceholder":157},[228,147464,147465,147467,147469],{"class":230,"line":1308},[228,147466,147311],{"class":238},[228,147468,284],{"class":234},[228,147470,147316],{"class":238},[228,147472,147473,147475,147477,147479,147481,147483,147485,147487,147489,147491,147493],{"class":230,"line":1314},[228,147474,147321],{"class":238},[228,147476,147324],{"class":343},[228,147478,12550],{"class":238},[228,147480,147329],{"class":343},[228,147482,12550],{"class":238},[228,147484,147334],{"class":343},[228,147486,12550],{"class":238},[228,147488,147339],{"class":343},[228,147490,12550],{"class":238},[228,147492,147344],{"class":343},[228,147494,4771],{"class":238},[228,147496,147497,147499,147501,147503,147505,147507,147509,147511,147513,147515,147517,147519,147521],{"class":230,"line":1328},[228,147498,147351],{"class":238},[228,147500,147354],{"class":343},[228,147502,77633],{"class":238},[228,147504,549],{"class":287},[228,147506,12550],{"class":238},[228,147508,1055],{"class":287},[228,147510,12550],{"class":238},[228,147512,1100],{"class":287},[228,147514,12550],{"class":238},[228,147516,147371],{"class":287},[228,147518,12550],{"class":238},[228,147520,147376],{"class":287},[228,147522,4771],{"class":238},[228,147524,147525],{"class":230,"line":1334},[228,147526,147527],{"class":238},"line.set_global_opts(\n",[228,147529,147530,147533,147535,147538,147540,147542,147545],{"class":230,"line":1425},[228,147531,147532],{"class":5331},"    title_opts",[228,147534,284],{"class":234},[228,147536,147537],{"class":238},"opts.TitleOpts(",[228,147539,51522],{"class":5331},[228,147541,284],{"class":234},[228,147543,147544],{"class":343},"\"一周销售额\"",[228,147546,38162],{"class":238},[228,147548,147549,147552,147554,147557,147559,147561,147564],{"class":230,"line":1431},[228,147550,147551],{"class":5331},"    xaxis_opts",[228,147553,284],{"class":234},[228,147555,147556],{"class":238},"opts.AxisOpts(",[228,147558,79925],{"class":5331},[228,147560,284],{"class":234},[228,147562,147563],{"class":343},"\"日期\"",[228,147565,38162],{"class":238},[228,147567,147568,147571,147573,147575,147577,147579,147582],{"class":230,"line":1443},[228,147569,147570],{"class":5331},"    yaxis_opts",[228,147572,284],{"class":234},[228,147574,147556],{"class":238},[228,147576,79925],{"class":5331},[228,147578,284],{"class":234},[228,147580,147581],{"class":343},"\"金额\"",[228,147583,38162],{"class":238},[228,147585,147586,147589,147591,147594,147597,147599,147602],{"class":230,"line":1726},[228,147587,147588],{"class":5331},"    tooltip_opts",[228,147590,284],{"class":234},[228,147592,147593],{"class":238},"opts.TooltipOpts(",[228,147595,147596],{"class":5331},"trigger",[228,147598,284],{"class":234},[228,147600,147601],{"class":343},"\"axis\"",[228,147603,38162],{"class":238},[228,147605,147606],{"class":230,"line":1731},[228,147607,245],{"class":238},[228,147609,147610,147612,147614],{"class":230,"line":1737},[228,147611,147383],{"class":238},[228,147613,147386],{"class":343},[228,147615,245],{"class":238},[19,147617,147618],{},"常见全局配置：",[376,147620,147621,147630],{},[379,147622,147623],{},[382,147624,147625,147628],{},[385,147626,147627],{},"配置",[385,147629,102811],{},[423,147631,147632,147642,147652,147662,147672,147682],{},[382,147633,147634,147639],{},[428,147635,147636],{},[30,147637,147638],{},"TitleOpts",[428,147640,147641],{},"标题",[382,147643,147644,147649],{},[428,147645,147646],{},[30,147647,147648],{},"LegendOpts",[428,147650,147651],{},"图例",[382,147653,147654,147659],{},[428,147655,147656],{},[30,147657,147658],{},"TooltipOpts",[428,147660,147661],{},"提示框",[382,147663,147664,147669],{},[428,147665,147666],{},[30,147667,147668],{},"AxisOpts",[428,147670,147671],{},"坐标轴",[382,147673,147674,147679],{},[428,147675,147676],{},[30,147677,147678],{},"VisualMapOpts",[428,147680,147681],{},"视觉映射",[382,147683,147684,147689],{},[428,147685,147686],{},[30,147687,147688],{},"DataZoomOpts",[428,147690,147691],{},"区域缩放",[14,147693,147695],{"id":147694},"_106-系列配置","10.6 系列配置",[19,147697,147698],{},"系列配置作用于某一组数据。",[220,147700,147702],{"className":30493,"code":147701,"language":30495,"meta":141,"style":141},"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",[30,147703,147704,147709,147720,147749,147760,147779],{"__ignoreMap":141},[228,147705,147706],{"class":230,"line":231},[228,147707,147708],{"class":238},"line.add_yaxis(\n",[228,147710,147711,147714,147716,147718],{"class":230,"line":142},[228,147712,147713],{"class":5331},"    series_name",[228,147715,284],{"class":234},[228,147717,147354],{"class":343},[228,147719,31581],{"class":238},[228,147721,147722,147725,147727,147729,147731,147733,147735,147737,147739,147741,147743,147745,147747],{"class":230,"line":1293},[228,147723,147724],{"class":5331},"    y_axis",[228,147726,284],{"class":234},[228,147728,1128],{"class":238},[228,147730,549],{"class":287},[228,147732,12550],{"class":238},[228,147734,1055],{"class":287},[228,147736,12550],{"class":238},[228,147738,1100],{"class":287},[228,147740,12550],{"class":238},[228,147742,147371],{"class":287},[228,147744,12550],{"class":238},[228,147746,147376],{"class":287},[228,147748,87951],{"class":238},[228,147750,147751,147754,147756,147758],{"class":230,"line":1308},[228,147752,147753],{"class":5331},"    is_smooth",[228,147755,284],{"class":234},[228,147757,31591],{"class":287},[228,147759,31581],{"class":238},[228,147761,147762,147765,147767,147770,147773,147775,147777],{"class":230,"line":1314},[228,147763,147764],{"class":5331},"    label_opts",[228,147766,284],{"class":234},[228,147768,147769],{"class":238},"opts.LabelOpts(",[228,147771,147772],{"class":5331},"is_show",[228,147774,284],{"class":234},[228,147776,31591],{"class":287},[228,147778,38162],{"class":238},[228,147780,147781],{"class":230,"line":1328},[228,147782,245],{"class":238},[19,147784,147785],{},"常用参数：",[183,147787,147788,147794,147800,147806,147812],{},[186,147789,147790,147793],{},[30,147791,147792],{},"series_name","：系列名称。",[186,147795,147796,147799],{},[30,147797,147798],{},"y_axis","：y 轴数据。",[186,147801,147802,147805],{},[30,147803,147804],{},"is_smooth","：是否平滑曲线。",[186,147807,147808,147811],{},[30,147809,147810],{},"label_opts","：标签配置。",[186,147813,147814,147817],{},[30,147815,147816],{},"symbol_size","：标记点大小。",[14,147819,147821],{"id":147820},"_107-多条折线","10.7 多条折线",[220,147823,147825],{"className":30493,"code":147824,"language":30495,"meta":141,"style":141},"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",[30,147826,147827,147841,147851,147855,147884,147888,147896,147901,147939,147976,147980,147997,148013,148017],{"__ignoreMap":141},[228,147828,147829,147831,147833,147835,147837,147839],{"class":230,"line":231},[228,147830,30852],{"class":234},[228,147832,147438],{"class":238},[228,147834,30507],{"class":234},[228,147836,147443],{"class":238},[228,147838,31498],{"class":234},[228,147840,147448],{"class":238},[228,147842,147843,147845,147847,147849],{"class":230,"line":142},[228,147844,30852],{"class":234},[228,147846,147297],{"class":238},[228,147848,30507],{"class":234},[228,147850,147302],{"class":238},[228,147852,147853],{"class":230,"line":1293},[228,147854,2514],{"emptyLinePlaceholder":157},[228,147856,147857,147860,147862,147864,147866,147868,147870,147872,147874,147876,147878,147880,147882],{"class":230,"line":1308},[228,147858,147859],{"class":238},"dates ",[228,147861,284],{"class":234},[228,147863,52341],{"class":238},[228,147865,147324],{"class":343},[228,147867,12550],{"class":238},[228,147869,147329],{"class":343},[228,147871,12550],{"class":238},[228,147873,147334],{"class":343},[228,147875,12550],{"class":238},[228,147877,147339],{"class":343},[228,147879,12550],{"class":238},[228,147881,147344],{"class":343},[228,147883,33361],{"class":238},[228,147885,147886],{"class":230,"line":1314},[228,147887,2514],{"emptyLinePlaceholder":157},[228,147889,147890,147892,147894],{"class":230,"line":1328},[228,147891,147311],{"class":238},[228,147893,284],{"class":234},[228,147895,147316],{"class":238},[228,147897,147898],{"class":230,"line":1334},[228,147899,147900],{"class":238},"line.add_xaxis(dates)\n",[228,147902,147903,147905,147908,147910,147912,147914,147917,147919,147921,147923,147925,147927,147929,147931,147933,147935,147937],{"class":230,"line":1425},[228,147904,147351],{"class":238},[228,147906,147907],{"class":343},"\"线上销售\"",[228,147909,77633],{"class":238},[228,147911,549],{"class":287},[228,147913,12550],{"class":238},[228,147915,147916],{"class":287},"130",[228,147918,12550],{"class":238},[228,147920,1055],{"class":287},[228,147922,12550],{"class":238},[228,147924,21163],{"class":287},[228,147926,12550],{"class":238},[228,147928,1836],{"class":287},[228,147930,112317],{"class":238},[228,147932,147804],{"class":5331},[228,147934,284],{"class":234},[228,147936,31591],{"class":287},[228,147938,245],{"class":238},[228,147940,147941,147943,147946,147948,147950,147952,147954,147956,147958,147960,147962,147964,147966,147968,147970,147972,147974],{"class":230,"line":1431},[228,147942,147351],{"class":238},[228,147944,147945],{"class":343},"\"线下销售\"",[228,147947,77633],{"class":238},[228,147949,850],{"class":287},[228,147951,12550],{"class":238},[228,147953,1100],{"class":287},[228,147955,12550],{"class":238},[228,147957,549],{"class":287},[228,147959,12550],{"class":238},[228,147961,1055],{"class":287},[228,147963,12550],{"class":238},[228,147965,147371],{"class":287},[228,147967,112317],{"class":238},[228,147969,147804],{"class":5331},[228,147971,284],{"class":234},[228,147973,31591],{"class":287},[228,147975,245],{"class":238},[228,147977,147978],{"class":230,"line":1443},[228,147979,147527],{"class":238},[228,147981,147982,147984,147986,147988,147990,147992,147995],{"class":230,"line":1726},[228,147983,147532],{"class":5331},[228,147985,284],{"class":234},[228,147987,147537],{"class":238},[228,147989,51522],{"class":5331},[228,147991,284],{"class":234},[228,147993,147994],{"class":343},"\"线上线下销售趋势\"",[228,147996,38162],{"class":238},[228,147998,147999,148001,148003,148005,148007,148009,148011],{"class":230,"line":1731},[228,148000,147588],{"class":5331},[228,148002,284],{"class":234},[228,148004,147593],{"class":238},[228,148006,147596],{"class":5331},[228,148008,284],{"class":234},[228,148010,147601],{"class":343},[228,148012,38162],{"class":238},[228,148014,148015],{"class":230,"line":1737},[228,148016,245],{"class":238},[228,148018,148019,148021,148024],{"class":230,"line":1742},[228,148020,147383],{"class":238},[228,148022,148023],{"class":343},"\"sales.html\"",[228,148025,245],{"class":238},[19,148027,148028],{},"多条折线适合比较不同指标或不同地区。",[14,148030,148032],{"id":148031},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,148034,148035,148036,24734],{},"假设 ",[30,148037,148038],{},"sales.json",[220,148040,148042],{"className":147104,"code":148041,"language":145851,"meta":141,"style":141},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[30,148043,148044,148049,148081,148109,148137],{"__ignoreMap":141},[228,148045,148046],{"class":230,"line":231},[228,148047,148048],{"class":238},"[\n",[228,148050,148051,148054,148057,148059,148061,148063,148066,148068,148070,148072,148075,148077,148079],{"class":230,"line":142},[228,148052,148053],{"class":238},"  {",[228,148055,148056],{"class":287},"\"date\"",[228,148058,51552],{"class":238},[228,148060,147324],{"class":343},[228,148062,12550],{"class":238},[228,148064,148065],{"class":287},"\"online\"",[228,148067,51552],{"class":238},[228,148069,549],{"class":287},[228,148071,12550],{"class":238},[228,148073,148074],{"class":287},"\"offline\"",[228,148076,51552],{"class":238},[228,148078,850],{"class":287},[228,148080,5044],{"class":238},[228,148082,148083,148085,148087,148089,148091,148093,148095,148097,148099,148101,148103,148105,148107],{"class":230,"line":1293},[228,148084,148053],{"class":238},[228,148086,148056],{"class":287},[228,148088,51552],{"class":238},[228,148090,147329],{"class":343},[228,148092,12550],{"class":238},[228,148094,148065],{"class":287},[228,148096,51552],{"class":238},[228,148098,147916],{"class":287},[228,148100,12550],{"class":238},[228,148102,148074],{"class":287},[228,148104,51552],{"class":238},[228,148106,1100],{"class":287},[228,148108,5044],{"class":238},[228,148110,148111,148113,148115,148117,148119,148121,148123,148125,148127,148129,148131,148133,148135],{"class":230,"line":1308},[228,148112,148053],{"class":238},[228,148114,148056],{"class":287},[228,148116,51552],{"class":238},[228,148118,147334],{"class":343},[228,148120,12550],{"class":238},[228,148122,148065],{"class":287},[228,148124,51552],{"class":238},[228,148126,1055],{"class":287},[228,148128,12550],{"class":238},[228,148130,148074],{"class":287},[228,148132,51552],{"class":238},[228,148134,549],{"class":287},[228,148136,1679],{"class":238},[228,148138,148139],{"class":230,"line":1314},[228,148140,33361],{"class":238},[19,148142,148143],{},"读取并绘图：",[220,148145,148147],{"className":30493,"code":148146,"language":30495,"meta":141,"style":141},"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",[30,148148,148149,148155,148169,148179,148183,148215,148228,148232,148240,148249,148258,148262,148274,148283,148292,148301,148305,148313,148317,148334,148351,148355,148372,148388,148392],{"__ignoreMap":141},[228,148150,148151,148153],{"class":230,"line":231},[228,148152,30507],{"class":234},[228,148154,147150],{"class":238},[228,148156,148157,148159,148161,148163,148165,148167],{"class":230,"line":142},[228,148158,30852],{"class":234},[228,148160,147438],{"class":238},[228,148162,30507],{"class":234},[228,148164,147443],{"class":238},[228,148166,31498],{"class":234},[228,148168,147448],{"class":238},[228,148170,148171,148173,148175,148177],{"class":230,"line":1293},[228,148172,30852],{"class":234},[228,148174,147297],{"class":238},[228,148176,30507],{"class":234},[228,148178,147302],{"class":238},[228,148180,148181],{"class":230,"line":1308},[228,148182,2514],{"emptyLinePlaceholder":157},[228,148184,148185,148187,148189,148191,148194,148196,148198,148200,148202,148204,148206,148208,148210,148213],{"class":230,"line":1314},[228,148186,107948],{"class":234},[228,148188,146850],{"class":287},[228,148190,239],{"class":238},[228,148192,148193],{"class":343},"\"sales.json\"",[228,148195,12550],{"class":238},[228,148197,146860],{"class":343},[228,148199,12550],{"class":238},[228,148201,146865],{"class":5331},[228,148203,284],{"class":234},[228,148205,146870],{"class":343},[228,148207,13829],{"class":238},[228,148209,31498],{"class":234},[228,148211,148212],{"class":5331}," file",[228,148214,3853],{"class":238},[228,148216,148217,148219,148221,148224,148226],{"class":230,"line":1328},[228,148218,101536],{"class":238},[228,148220,284],{"class":234},[228,148222,148223],{"class":238}," json.load(",[228,148225,45469],{"class":5331},[228,148227,245],{"class":238},[228,148229,148230],{"class":230,"line":1334},[228,148231,2514],{"emptyLinePlaceholder":157},[228,148233,148234,148236,148238],{"class":230,"line":1425},[228,148235,147859],{"class":238},[228,148237,284],{"class":234},[228,148239,51953],{"class":238},[228,148241,148242,148245,148247],{"class":230,"line":1431},[228,148243,148244],{"class":238},"online_sales ",[228,148246,284],{"class":234},[228,148248,51953],{"class":238},[228,148250,148251,148254,148256],{"class":230,"line":1443},[228,148252,148253],{"class":238},"offline_sales ",[228,148255,284],{"class":234},[228,148257,51953],{"class":238},[228,148259,148260],{"class":230,"line":1726},[228,148261,2514],{"emptyLinePlaceholder":157},[228,148263,148264,148266,148269,148271],{"class":230,"line":1731},[228,148265,3139],{"class":234},[228,148267,148268],{"class":238}," item ",[228,148270,26159],{"class":234},[228,148272,148273],{"class":238}," data:\n",[228,148275,148276,148279,148281],{"class":230,"line":1737},[228,148277,148278],{"class":238},"    dates.append(item[",[228,148280,148056],{"class":343},[228,148282,4771],{"class":238},[228,148284,148285,148288,148290],{"class":230,"line":1742},[228,148286,148287],{"class":238},"    online_sales.append(item[",[228,148289,148065],{"class":343},[228,148291,4771],{"class":238},[228,148293,148294,148297,148299],{"class":230,"line":1756},[228,148295,148296],{"class":238},"    offline_sales.append(item[",[228,148298,148074],{"class":343},[228,148300,4771],{"class":238},[228,148302,148303],{"class":230,"line":1761},[228,148304,2514],{"emptyLinePlaceholder":157},[228,148306,148307,148309,148311],{"class":230,"line":1767},[228,148308,147311],{"class":238},[228,148310,284],{"class":234},[228,148312,147316],{"class":238},[228,148314,148315],{"class":230,"line":1788},[228,148316,147900],{"class":238},[228,148318,148319,148321,148323,148326,148328,148330,148332],{"class":230,"line":1793},[228,148320,147351],{"class":238},[228,148322,147907],{"class":343},[228,148324,148325],{"class":238},", online_sales, ",[228,148327,147804],{"class":5331},[228,148329,284],{"class":234},[228,148331,31591],{"class":287},[228,148333,245],{"class":238},[228,148335,148336,148338,148340,148343,148345,148347,148349],{"class":230,"line":1807},[228,148337,147351],{"class":238},[228,148339,147945],{"class":343},[228,148341,148342],{"class":238},", offline_sales, ",[228,148344,147804],{"class":5331},[228,148346,284],{"class":234},[228,148348,31591],{"class":287},[228,148350,245],{"class":238},[228,148352,148353],{"class":230,"line":1812},[228,148354,147527],{"class":238},[228,148356,148357,148359,148361,148363,148365,148367,148370],{"class":230,"line":1841},[228,148358,147532],{"class":5331},[228,148360,284],{"class":234},[228,148362,147537],{"class":238},[228,148364,51522],{"class":5331},[228,148366,284],{"class":234},[228,148368,148369],{"class":343},"\"销售趋势\"",[228,148371,38162],{"class":238},[228,148373,148374,148376,148378,148380,148382,148384,148386],{"class":230,"line":1846},[228,148375,147588],{"class":5331},[228,148377,284],{"class":234},[228,148379,147593],{"class":238},[228,148381,147596],{"class":5331},[228,148383,284],{"class":234},[228,148385,147601],{"class":343},[228,148387,38162],{"class":238},[228,148389,148390],{"class":230,"line":1863},[228,148391,245],{"class":238},[228,148393,148394,148396,148398],{"class":230,"line":1868},[228,148395,147383],{"class":238},[228,148397,148023],{"class":343},[228,148399,245],{"class":238},[14,148401,148403],{"id":148402},"_109-数据清洗","10.9 数据清洗",[19,148405,148406],{},"真实数据经常不整齐，需要清洗。",[19,148408,148409],{},"常见问题：",[183,148411,148412,148415,148418,148421],{},[186,148413,148414],{},"数字是字符串。",[186,148416,148417],{},"字段缺失。",[186,148419,148420],{},"空值。",[186,148422,148423],{},"日期格式不统一。",[19,148425,15250],{},[220,148427,148429],{"className":30493,"code":148428,"language":30495,"meta":141,"style":141},"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",[30,148430,148431,148440,148463,148483,148504,148508,148512,148520,148529,148533,148544,148558,148567,148572,148576,148584,148594,148598,148605],{"__ignoreMap":141},[228,148432,148433,148436,148438],{"class":230,"line":231},[228,148434,148435],{"class":238},"raw_data ",[228,148437,284],{"class":234},[228,148439,55562],{"class":238},[228,148441,148442,148445,148447,148449,148451,148453,148456,148458,148461],{"class":230,"line":142},[228,148443,148444],{"class":238},"    {",[228,148446,148056],{"class":343},[228,148448,51552],{"class":238},[228,148450,147324],{"class":343},[228,148452,12550],{"class":238},[228,148454,148455],{"class":343},"\"sales\"",[228,148457,51552],{"class":238},[228,148459,148460],{"class":343},"\"100\"",[228,148462,5044],{"class":238},[228,148464,148465,148467,148469,148471,148473,148475,148477,148479,148481],{"class":230,"line":1293},[228,148466,148444],{"class":238},[228,148468,148056],{"class":343},[228,148470,51552],{"class":238},[228,148472,147329],{"class":343},[228,148474,12550],{"class":238},[228,148476,148455],{"class":343},[228,148478,51552],{"class":238},[228,148480,7767],{"class":343},[228,148482,5044],{"class":238},[228,148484,148485,148487,148489,148491,148493,148495,148497,148499,148502],{"class":230,"line":1308},[228,148486,148444],{"class":238},[228,148488,148056],{"class":343},[228,148490,51552],{"class":238},[228,148492,147334],{"class":343},[228,148494,12550],{"class":238},[228,148496,148455],{"class":343},[228,148498,51552],{"class":238},[228,148500,148501],{"class":343},"\"120\"",[228,148503,5044],{"class":238},[228,148505,148506],{"class":230,"line":1314},[228,148507,33361],{"class":238},[228,148509,148510],{"class":230,"line":1328},[228,148511,2514],{"emptyLinePlaceholder":157},[228,148513,148514,148516,148518],{"class":230,"line":1334},[228,148515,147859],{"class":238},[228,148517,284],{"class":234},[228,148519,51953],{"class":238},[228,148521,148522,148525,148527],{"class":230,"line":1425},[228,148523,148524],{"class":238},"sales ",[228,148526,284],{"class":234},[228,148528,51953],{"class":238},[228,148530,148531],{"class":230,"line":1431},[228,148532,2514],{"emptyLinePlaceholder":157},[228,148534,148535,148537,148539,148541],{"class":230,"line":1443},[228,148536,3139],{"class":234},[228,148538,148268],{"class":238},[228,148540,26159],{"class":234},[228,148542,148543],{"class":238}," raw_data:\n",[228,148545,148546,148549,148551,148554,148556],{"class":230,"line":1726},[228,148547,148548],{"class":238},"    value ",[228,148550,284],{"class":234},[228,148552,148553],{"class":238}," item.get(",[228,148555,148455],{"class":343},[228,148557,245],{"class":238},[228,148559,148560,148562,148564],{"class":230,"line":1731},[228,148561,3215],{"class":234},[228,148563,39045],{"class":234},[228,148565,148566],{"class":238}," value:\n",[228,148568,148569],{"class":230,"line":1737},[228,148570,148571],{"class":234},"        continue\n",[228,148573,148574],{"class":230,"line":1742},[228,148575,2514],{"emptyLinePlaceholder":157},[228,148577,148578,148580,148582],{"class":230,"line":1756},[228,148579,148278],{"class":238},[228,148581,148056],{"class":343},[228,148583,4771],{"class":238},[228,148585,148586,148589,148591],{"class":230,"line":1761},[228,148587,148588],{"class":238},"    sales.append(",[228,148590,242],{"class":287},[228,148592,148593],{"class":238},"(value))\n",[228,148595,148596],{"class":230,"line":1767},[228,148597,2514],{"emptyLinePlaceholder":157},[228,148599,148600,148602],{"class":230,"line":1788},[228,148601,30530],{"class":287},[228,148603,148604],{"class":238},"(dates)\n",[228,148606,148607,148609],{"class":230,"line":1793},[228,148608,30530],{"class":287},[228,148610,148611],{"class":238},"(sales)\n",[14,148613,148615],{"id":148614},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[220,148617,148619],{"className":30493,"code":148618,"language":30495,"meta":141,"style":141},"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",[30,148620,148621,148635,148645,148649,148657,148678,148700,148722,148744,148766,148770,148774,148796,148817,148821,148829,148833,148837,148847,148856,148866,148882,148886,148890,148907,148923,148939,148955,148965,148969],{"__ignoreMap":141},[228,148622,148623,148625,148627,148629,148631,148633],{"class":230,"line":231},[228,148624,30852],{"class":234},[228,148626,147438],{"class":238},[228,148628,30507],{"class":234},[228,148630,147443],{"class":238},[228,148632,31498],{"class":234},[228,148634,147448],{"class":238},[228,148636,148637,148639,148641,148643],{"class":230,"line":142},[228,148638,30852],{"class":234},[228,148640,147297],{"class":238},[228,148642,30507],{"class":234},[228,148644,147302],{"class":238},[228,148646,148647],{"class":230,"line":1293},[228,148648,2514],{"emptyLinePlaceholder":157},[228,148650,148651,148653,148655],{"class":230,"line":1308},[228,148652,148524],{"class":238},[228,148654,284],{"class":234},[228,148656,55562],{"class":238},[228,148658,148659,148661,148663,148665,148668,148670,148672,148674,148676],{"class":230,"line":1314},[228,148660,148444],{"class":238},[228,148662,148056],{"class":343},[228,148664,51552],{"class":238},[228,148666,148667],{"class":343},"\"2024-10-01\"",[228,148669,12550],{"class":238},[228,148671,84199],{"class":343},[228,148673,51552],{"class":238},[228,148675,92138],{"class":287},[228,148677,5044],{"class":238},[228,148679,148680,148682,148684,148686,148689,148691,148693,148695,148698],{"class":230,"line":1328},[228,148681,148444],{"class":238},[228,148683,148056],{"class":343},[228,148685,51552],{"class":238},[228,148687,148688],{"class":343},"\"2024-10-02\"",[228,148690,12550],{"class":238},[228,148692,84199],{"class":343},[228,148694,51552],{"class":238},[228,148696,148697],{"class":287},"1800",[228,148699,5044],{"class":238},[228,148701,148702,148704,148706,148708,148711,148713,148715,148717,148720],{"class":230,"line":1334},[228,148703,148444],{"class":238},[228,148705,148056],{"class":343},[228,148707,51552],{"class":238},[228,148709,148710],{"class":343},"\"2024-10-03\"",[228,148712,12550],{"class":238},[228,148714,84199],{"class":343},[228,148716,51552],{"class":238},[228,148718,148719],{"class":287},"1500",[228,148721,5044],{"class":238},[228,148723,148724,148726,148728,148730,148733,148735,148737,148739,148742],{"class":230,"line":1425},[228,148725,148444],{"class":238},[228,148727,148056],{"class":343},[228,148729,51552],{"class":238},[228,148731,148732],{"class":343},"\"2024-10-04\"",[228,148734,12550],{"class":238},[228,148736,84199],{"class":343},[228,148738,51552],{"class":238},[228,148740,148741],{"class":287},"2100",[228,148743,5044],{"class":238},[228,148745,148746,148748,148750,148752,148755,148757,148759,148761,148764],{"class":230,"line":1431},[228,148747,148444],{"class":238},[228,148749,148056],{"class":343},[228,148751,51552],{"class":238},[228,148753,148754],{"class":343},"\"2024-10-05\"",[228,148756,12550],{"class":238},[228,148758,84199],{"class":343},[228,148760,51552],{"class":238},[228,148762,148763],{"class":287},"2600",[228,148765,5044],{"class":238},[228,148767,148768],{"class":230,"line":1443},[228,148769,33361],{"class":238},[228,148771,148772],{"class":230,"line":1726},[228,148773,2514],{"emptyLinePlaceholder":157},[228,148775,148776,148778,148780,148783,148785,148787,148789,148791,148793],{"class":230,"line":1731},[228,148777,147859],{"class":238},[228,148779,284],{"class":234},[228,148781,148782],{"class":238}," [item[",[228,148784,148056],{"class":343},[228,148786,4557],{"class":238},[228,148788,3139],{"class":234},[228,148790,148268],{"class":238},[228,148792,26159],{"class":234},[228,148794,148795],{"class":238}," sales]\n",[228,148797,148798,148801,148803,148805,148807,148809,148811,148813,148815],{"class":230,"line":1737},[228,148799,148800],{"class":238},"amounts ",[228,148802,284],{"class":234},[228,148804,148782],{"class":238},[228,148806,84199],{"class":343},[228,148808,4557],{"class":238},[228,148810,3139],{"class":234},[228,148812,148268],{"class":238},[228,148814,26159],{"class":234},[228,148816,148795],{"class":238},[228,148818,148819],{"class":230,"line":1742},[228,148820,2514],{"emptyLinePlaceholder":157},[228,148822,148823,148825,148827],{"class":230,"line":1756},[228,148824,147311],{"class":238},[228,148826,284],{"class":234},[228,148828,147316],{"class":238},[228,148830,148831],{"class":230,"line":1761},[228,148832,147900],{"class":238},[228,148834,148835],{"class":230,"line":1767},[228,148836,147708],{"class":238},[228,148838,148839,148841,148843,148845],{"class":230,"line":1788},[228,148840,147713],{"class":5331},[228,148842,284],{"class":234},[228,148844,147354],{"class":343},[228,148846,31581],{"class":238},[228,148848,148849,148851,148853],{"class":230,"line":1793},[228,148850,147724],{"class":5331},[228,148852,284],{"class":234},[228,148854,148855],{"class":238},"amounts,\n",[228,148857,148858,148860,148862,148864],{"class":230,"line":1807},[228,148859,147753],{"class":5331},[228,148861,284],{"class":234},[228,148863,31591],{"class":287},[228,148865,31581],{"class":238},[228,148867,148868,148870,148872,148874,148876,148878,148880],{"class":230,"line":1812},[228,148869,147764],{"class":5331},[228,148871,284],{"class":234},[228,148873,147769],{"class":238},[228,148875,147772],{"class":5331},[228,148877,284],{"class":234},[228,148879,31591],{"class":287},[228,148881,38162],{"class":238},[228,148883,148884],{"class":230,"line":1841},[228,148885,245],{"class":238},[228,148887,148888],{"class":230,"line":1846},[228,148889,147527],{"class":238},[228,148891,148892,148894,148896,148898,148900,148902,148905],{"class":230,"line":1863},[228,148893,147532],{"class":5331},[228,148895,284],{"class":234},[228,148897,147537],{"class":238},[228,148899,51522],{"class":5331},[228,148901,284],{"class":234},[228,148903,148904],{"class":343},"\"每日销售额\"",[228,148906,38162],{"class":238},[228,148908,148909,148911,148913,148915,148917,148919,148921],{"class":230,"line":1868},[228,148910,147551],{"class":5331},[228,148912,284],{"class":234},[228,148914,147556],{"class":238},[228,148916,79925],{"class":5331},[228,148918,284],{"class":234},[228,148920,147563],{"class":343},[228,148922,38162],{"class":238},[228,148924,148925,148927,148929,148931,148933,148935,148937],{"class":230,"line":1873},[228,148926,147570],{"class":5331},[228,148928,284],{"class":234},[228,148930,147556],{"class":238},[228,148932,79925],{"class":5331},[228,148934,284],{"class":234},[228,148936,147581],{"class":343},[228,148938,38162],{"class":238},[228,148940,148941,148943,148945,148947,148949,148951,148953],{"class":230,"line":1878},[228,148942,147588],{"class":5331},[228,148944,284],{"class":234},[228,148946,147593],{"class":238},[228,148948,147596],{"class":5331},[228,148950,284],{"class":234},[228,148952,147601],{"class":343},[228,148954,38162],{"class":238},[228,148956,148957,148960,148962],{"class":230,"line":1892},[228,148958,148959],{"class":5331},"    datazoom_opts",[228,148961,284],{"class":234},[228,148963,148964],{"class":238},"[opts.DataZoomOpts()],\n",[228,148966,148967],{"class":230,"line":1897},[228,148968,245],{"class":238},[228,148970,148971,148973,148976],{"class":230,"line":2691},[228,148972,147383],{"class":238},[228,148974,148975],{"class":343},"\"daily_sales.html\"",[228,148977,245],{"class":238},[19,148979,148980,148983],{},[30,148981,148982],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,148985,148987],{"id":148986},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,148989,148990],{},"如果数据结构如下：",[220,148992,148994],{"className":30493,"code":148993,"language":30495,"meta":141,"style":141},"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",[30,148995,148996,149004,149012,149034,149055,149060,149067,149087,149107,149111],{"__ignoreMap":141},[228,148997,148998,149000,149002],{"class":230,"line":231},[228,148999,101773],{"class":238},[228,149001,284],{"class":234},[228,149003,15687],{"class":238},[228,149005,149006,149009],{"class":230,"line":142},[228,149007,149008],{"class":343},"    \"北京\"",[228,149010,149011],{"class":238},": [\n",[228,149013,149014,149016,149018,149020,149023,149025,149028,149030,149032],{"class":230,"line":1293},[228,149015,5031],{"class":238},[228,149017,148056],{"class":343},[228,149019,51552],{"class":238},[228,149021,149022],{"class":343},"\"2024-01-01\"",[228,149024,12550],{"class":238},[228,149026,149027],{"class":343},"\"confirm\"",[228,149029,51552],{"class":238},[228,149031,684],{"class":287},[228,149033,5044],{"class":238},[228,149035,149036,149038,149040,149042,149045,149047,149049,149051,149053],{"class":230,"line":1308},[228,149037,5031],{"class":238},[228,149039,148056],{"class":343},[228,149041,51552],{"class":238},[228,149043,149044],{"class":343},"\"2024-01-02\"",[228,149046,12550],{"class":238},[228,149048,149027],{"class":343},[228,149050,51552],{"class":238},[228,149052,736],{"class":287},[228,149054,5044],{"class":238},[228,149056,149057],{"class":230,"line":1314},[228,149058,149059],{"class":238},"    ],\n",[228,149061,149062,149065],{"class":230,"line":1328},[228,149063,149064],{"class":343},"    \"上海\"",[228,149066,149011],{"class":238},[228,149068,149069,149071,149073,149075,149077,149079,149081,149083,149085],{"class":230,"line":1334},[228,149070,5031],{"class":238},[228,149072,148056],{"class":343},[228,149074,51552],{"class":238},[228,149076,149022],{"class":343},[228,149078,12550],{"class":238},[228,149080,149027],{"class":343},[228,149082,51552],{"class":238},[228,149084,633],{"class":287},[228,149086,5044],{"class":238},[228,149088,149089,149091,149093,149095,149097,149099,149101,149103,149105],{"class":230,"line":1425},[228,149090,5031],{"class":238},[228,149092,148056],{"class":343},[228,149094,51552],{"class":238},[228,149096,149044],{"class":343},[228,149098,12550],{"class":238},[228,149100,149027],{"class":343},[228,149102,51552],{"class":238},[228,149104,761],{"class":287},[228,149106,5044],{"class":238},[228,149108,149109],{"class":230,"line":1431},[228,149110,149059],{"class":238},[228,149112,149113],{"class":230,"line":1443},[228,149114,1679],{"class":238},[19,149116,149117],{},"绘制多地区趋势：",[220,149119,149121],{"className":30493,"code":149120,"language":30495,"meta":141,"style":141},"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",[30,149122,149123,149137,149147,149151,149176,149180,149188,149192,149196,149208,149230,149243,149247,149251,149268,149284,149288],{"__ignoreMap":141},[228,149124,149125,149127,149129,149131,149133,149135],{"class":230,"line":231},[228,149126,30852],{"class":234},[228,149128,147438],{"class":238},[228,149130,30507],{"class":234},[228,149132,147443],{"class":238},[228,149134,31498],{"class":234},[228,149136,147448],{"class":238},[228,149138,149139,149141,149143,149145],{"class":230,"line":142},[228,149140,30852],{"class":234},[228,149142,147297],{"class":238},[228,149144,30507],{"class":234},[228,149146,147302],{"class":238},[228,149148,149149],{"class":230,"line":1293},[228,149150,2514],{"emptyLinePlaceholder":157},[228,149152,149153,149155,149157,149159,149161,149163,149165,149167,149169,149172,149174],{"class":230,"line":1308},[228,149154,147859],{"class":238},[228,149156,284],{"class":234},[228,149158,148782],{"class":238},[228,149160,148056],{"class":343},[228,149162,4557],{"class":238},[228,149164,3139],{"class":234},[228,149166,148268],{"class":238},[228,149168,26159],{"class":234},[228,149170,149171],{"class":238}," data[",[228,149173,69384],{"class":343},[228,149175,77642],{"class":238},[228,149177,149178],{"class":230,"line":1314},[228,149179,2514],{"emptyLinePlaceholder":157},[228,149181,149182,149184,149186],{"class":230,"line":1328},[228,149183,147311],{"class":238},[228,149185,284],{"class":234},[228,149187,147316],{"class":238},[228,149189,149190],{"class":230,"line":1334},[228,149191,147900],{"class":238},[228,149193,149194],{"class":230,"line":1425},[228,149195,2514],{"emptyLinePlaceholder":157},[228,149197,149198,149200,149203,149205],{"class":230,"line":1431},[228,149199,3139],{"class":234},[228,149201,149202],{"class":238}," city, records ",[228,149204,26159],{"class":234},[228,149206,149207],{"class":238}," data.items():\n",[228,149209,149210,149213,149215,149217,149219,149221,149223,149225,149227],{"class":230,"line":1443},[228,149211,149212],{"class":238},"    values ",[228,149214,284],{"class":234},[228,149216,148782],{"class":238},[228,149218,149027],{"class":343},[228,149220,4557],{"class":238},[228,149222,3139],{"class":234},[228,149224,148268],{"class":238},[228,149226,26159],{"class":234},[228,149228,149229],{"class":238}," records]\n",[228,149231,149232,149235,149237,149239,149241],{"class":230,"line":1726},[228,149233,149234],{"class":238},"    line.add_yaxis(city, values, ",[228,149236,147804],{"class":5331},[228,149238,284],{"class":234},[228,149240,31591],{"class":287},[228,149242,245],{"class":238},[228,149244,149245],{"class":230,"line":1731},[228,149246,2514],{"emptyLinePlaceholder":157},[228,149248,149249],{"class":230,"line":1737},[228,149250,147527],{"class":238},[228,149252,149253,149255,149257,149259,149261,149263,149266],{"class":230,"line":1742},[228,149254,147532],{"class":5331},[228,149256,284],{"class":234},[228,149258,147537],{"class":238},[228,149260,51522],{"class":5331},[228,149262,284],{"class":234},[228,149264,149265],{"class":343},"\"多地区趋势图\"",[228,149267,38162],{"class":238},[228,149269,149270,149272,149274,149276,149278,149280,149282],{"class":230,"line":1756},[228,149271,147588],{"class":5331},[228,149273,284],{"class":234},[228,149275,147593],{"class":238},[228,149277,147596],{"class":5331},[228,149279,284],{"class":234},[228,149281,147601],{"class":343},[228,149283,38162],{"class":238},[228,149285,149286],{"class":230,"line":1761},[228,149287,245],{"class":238},[228,149289,149290,149292,149295],{"class":230,"line":1767},[228,149291,147383],{"class":238},[228,149293,149294],{"class":343},"\"trend.html\"",[228,149296,245],{"class":238},[19,149298,149299],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,149301,149303],{"id":149302},"_1012-易错点","10.12 易错点",[183,149305,149306,149312,149318,149328,149334],{},[186,149307,149308,149311],{},[30,149309,149310],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[186,149313,149314,149317],{},[30,149315,149316],{},"render()"," 生成的是 HTML，不是图片。",[186,149319,149320,149321,149324,149325,78],{},"JSON 字符串用 ",[30,149322,149323],{},"json.loads()","，JSON 文件用 ",[30,149326,149327],{},"json.load()",[186,149329,149330,149331,78],{},"中文 JSON 保存时加 ",[30,149332,149333],{},"ensure_ascii=False",[186,149335,149336],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,149338,149340],{"id":149339},"_1013-本章练习","10.13 本章练习",[183,149342,149343,149346,149349,149352,149355],{},[186,149344,149345],{},"安装 pyecharts 并生成第一个折线图。",[186,149347,149348],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[186,149350,149351],{},"绘制两条折线，对比线上和线下销售额。",[186,149353,149354],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[186,149356,149357],{},"对含有空值的销售数据进行清洗后再绘图。",[5241,149359,149360],{},"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":141,"searchDepth":142,"depth":142,"links":149362},[149363,149364,149365,149366,149367,149368,149369,149370,149371,149372,149373,149374,149375],{"id":146979,"depth":142,"text":146980},{"id":147054,"depth":142,"text":147055},{"id":147233,"depth":142,"text":147234},{"id":147284,"depth":142,"text":147285},{"id":147418,"depth":142,"text":147419},{"id":147694,"depth":142,"text":147695},{"id":147820,"depth":142,"text":147821},{"id":148031,"depth":142,"text":148032},{"id":148402,"depth":142,"text":148403},{"id":148614,"depth":142,"text":148615},{"id":148986,"depth":142,"text":148987},{"id":149302,"depth":142,"text":149303},{"id":149339,"depth":142,"text":149340},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":146971,"description":154},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149382,"title":149383,"body":149384,"description":154,"extension":155,"meta":151744,"navigation":157,"path":151745,"seo":151746,"stem":151747,"__hash__":151748},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149385,"toc":151721},[149386,149389,149393,149396,149399,149475,149478,149569,149572,149576,149579,149623,149636,149640,149643,149710,149713,149717,149720,149804,149812,149816,149821,149962,149965,149976,149982,149988,150102,150106,150109,150112,150365,150368,150372,150375,150479,150482,150486,150637,150641,150648,150761,150765,150768,150874,150877,150881,150884,150915,150918,151023,151026,151030,151034,151044,151112,151116,151123,151187,151190,151194,151200,151296,151305,151309,151633,151642,151646,151674,151678,151718],[10,149387,149383],{"id":149388},"_11-面向对象基础",[14,149390,149392],{"id":149391},"_111-什么是面向对象","11.1 什么是面向对象",[19,149394,149395],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,149397,149398],{},"面向过程：",[220,149400,149402],{"className":30493,"code":149401,"language":30495,"meta":141,"style":141},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[30,149403,149404,149413,149421,149425,149435,149466,149470],{"__ignoreMap":141},[228,149405,149406,149408,149410],{"class":230,"line":231},[228,149407,146595],{"class":238},[228,149409,284],{"class":234},[228,149411,149412],{"class":343}," \"小明\"\n",[228,149414,149415,149417,149419],{"class":230,"line":142},[228,149416,146605],{"class":238},[228,149418,284],{"class":234},[228,149420,146610],{"class":287},[228,149422,149423],{"class":230,"line":1293},[228,149424,2514],{"emptyLinePlaceholder":157},[228,149426,149427,149429,149432],{"class":230,"line":1308},[228,149428,32062],{"class":234},[228,149430,149431],{"class":2077}," introduce",[228,149433,149434],{"class":238},"(name, age):\n",[228,149436,149437,149439,149441,149443,149446,149448,149450,149452,149455,149457,149459,149461,149464],{"class":230,"line":1314},[228,149438,31414],{"class":287},[228,149440,239],{"class":238},[228,149442,291],{"class":234},[228,149444,149445],{"class":343},"\"我叫",[228,149447,1134],{"class":287},[228,149449,79925],{"class":238},[228,149451,1184],{"class":287},[228,149453,149454],{"class":343},"，今年",[228,149456,1134],{"class":287},[228,149458,70336],{"class":238},[228,149460,1184],{"class":287},[228,149462,149463],{"class":343},"岁\"",[228,149465,245],{"class":238},[228,149467,149468],{"class":230,"line":1328},[228,149469,2514],{"emptyLinePlaceholder":157},[228,149471,149472],{"class":230,"line":1334},[228,149473,149474],{"class":238},"introduce(name, age)\n",[19,149476,149477],{},"面向对象：",[220,149479,149481],{"className":30493,"code":149480,"language":30495,"meta":141,"style":141},"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",[30,149482,149483,149491,149499,149528,149532,149536,149546,149555,149564],{"__ignoreMap":141},[228,149484,149485,149487,149489],{"class":230,"line":231},[228,149486,14809],{"class":234},[228,149488,8013],{"class":2077},[228,149490,3853],{"class":238},[228,149492,149493,149495,149497],{"class":230,"line":142},[228,149494,30916],{"class":234},[228,149496,149431],{"class":2077},[228,149498,30922],{"class":238},[228,149500,149501,149503,149505,149507,149509,149512,149514,149516,149518,149520,149522,149524,149526],{"class":230,"line":1293},[228,149502,32566],{"class":287},[228,149504,239],{"class":238},[228,149506,291],{"class":234},[228,149508,149445],{"class":343},[228,149510,149511],{"class":287},"{self",[228,149513,80416],{"class":238},[228,149515,1184],{"class":287},[228,149517,149454],{"class":343},[228,149519,149511],{"class":287},[228,149521,80428],{"class":238},[228,149523,1184],{"class":287},[228,149525,149463],{"class":343},[228,149527,245],{"class":238},[228,149529,149530],{"class":230,"line":1308},[228,149531,2514],{"emptyLinePlaceholder":157},[228,149533,149534],{"class":230,"line":1314},[228,149535,2514],{"emptyLinePlaceholder":157},[228,149537,149538,149541,149543],{"class":230,"line":1328},[228,149539,149540],{"class":238},"student ",[228,149542,284],{"class":234},[228,149544,149545],{"class":238}," Student()\n",[228,149547,149548,149551,149553],{"class":230,"line":1334},[228,149549,149550],{"class":238},"student.name ",[228,149552,284],{"class":234},[228,149554,149412],{"class":343},[228,149556,149557,149560,149562],{"class":230,"line":1425},[228,149558,149559],{"class":238},"student.age ",[228,149561,284],{"class":234},[228,149563,146610],{"class":287},[228,149565,149566],{"class":230,"line":1431},[228,149567,149568],{"class":238},"student.introduce()\n",[19,149570,149571],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,149573,149575],{"id":149574},"_112-类和对象","11.2 类和对象",[19,149577,149578],{},"类是模板，对象是根据模板创建出来的具体实例。",[220,149580,149582],{"className":30493,"code":149581,"language":30495,"meta":141,"style":141},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[30,149583,149584,149592,149597,149601,149605,149614],{"__ignoreMap":141},[228,149585,149586,149588,149590],{"class":230,"line":231},[228,149587,14809],{"class":234},[228,149589,8013],{"class":2077},[228,149591,3853],{"class":238},[228,149593,149594],{"class":230,"line":142},[228,149595,149596],{"class":234},"    pass\n",[228,149598,149599],{"class":230,"line":1293},[228,149600,2514],{"emptyLinePlaceholder":157},[228,149602,149603],{"class":230,"line":1308},[228,149604,2514],{"emptyLinePlaceholder":157},[228,149606,149607,149610,149612],{"class":230,"line":1314},[228,149608,149609],{"class":238},"student1 ",[228,149611,284],{"class":234},[228,149613,149545],{"class":238},[228,149615,149616,149619,149621],{"class":230,"line":1328},[228,149617,149618],{"class":238},"student2 ",[228,149620,284],{"class":234},[228,149622,149545],{"class":238},[19,149624,149625,149628,149629,101133,149632,149635],{},[30,149626,149627],{},"Student"," 是类，",[30,149630,149631],{},"student1",[30,149633,149634],{},"student2"," 是对象。",[14,149637,149639],{"id":149638},"_113-属性","11.3 属性",[19,149641,149642],{},"属性是对象保存的数据。",[220,149644,149646],{"className":30493,"code":149645,"language":30495,"meta":141,"style":141},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[30,149647,149648,149656,149660,149664,149668,149676,149684,149692,149696,149703],{"__ignoreMap":141},[228,149649,149650,149652,149654],{"class":230,"line":231},[228,149651,14809],{"class":234},[228,149653,8013],{"class":2077},[228,149655,3853],{"class":238},[228,149657,149658],{"class":230,"line":142},[228,149659,149596],{"class":234},[228,149661,149662],{"class":230,"line":1293},[228,149663,2514],{"emptyLinePlaceholder":157},[228,149665,149666],{"class":230,"line":1308},[228,149667,2514],{"emptyLinePlaceholder":157},[228,149669,149670,149672,149674],{"class":230,"line":1314},[228,149671,149540],{"class":238},[228,149673,284],{"class":234},[228,149675,149545],{"class":238},[228,149677,149678,149680,149682],{"class":230,"line":1328},[228,149679,149550],{"class":238},[228,149681,284],{"class":234},[228,149683,149412],{"class":343},[228,149685,149686,149688,149690],{"class":230,"line":1334},[228,149687,149559],{"class":238},[228,149689,284],{"class":234},[228,149691,146610],{"class":287},[228,149693,149694],{"class":230,"line":1425},[228,149695,2514],{"emptyLinePlaceholder":157},[228,149697,149698,149700],{"class":230,"line":1431},[228,149699,30530],{"class":287},[228,149701,149702],{"class":238},"(student.name)\n",[228,149704,149705,149707],{"class":230,"line":1443},[228,149706,30530],{"class":287},[228,149708,149709],{"class":238},"(student.age)\n",[19,149711,149712],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,149714,149716],{"id":149715},"_114-方法","11.4 方法",[19,149718,149719],{},"类中的函数叫方法。",[220,149721,149722],{"className":30493,"code":149480,"language":30495,"meta":141,"style":141},[30,149723,149724,149732,149740,149768,149772,149776,149784,149792,149800],{"__ignoreMap":141},[228,149725,149726,149728,149730],{"class":230,"line":231},[228,149727,14809],{"class":234},[228,149729,8013],{"class":2077},[228,149731,3853],{"class":238},[228,149733,149734,149736,149738],{"class":230,"line":142},[228,149735,30916],{"class":234},[228,149737,149431],{"class":2077},[228,149739,30922],{"class":238},[228,149741,149742,149744,149746,149748,149750,149752,149754,149756,149758,149760,149762,149764,149766],{"class":230,"line":1293},[228,149743,32566],{"class":287},[228,149745,239],{"class":238},[228,149747,291],{"class":234},[228,149749,149445],{"class":343},[228,149751,149511],{"class":287},[228,149753,80416],{"class":238},[228,149755,1184],{"class":287},[228,149757,149454],{"class":343},[228,149759,149511],{"class":287},[228,149761,80428],{"class":238},[228,149763,1184],{"class":287},[228,149765,149463],{"class":343},[228,149767,245],{"class":238},[228,149769,149770],{"class":230,"line":1308},[228,149771,2514],{"emptyLinePlaceholder":157},[228,149773,149774],{"class":230,"line":1314},[228,149775,2514],{"emptyLinePlaceholder":157},[228,149777,149778,149780,149782],{"class":230,"line":1328},[228,149779,149540],{"class":238},[228,149781,284],{"class":234},[228,149783,149545],{"class":238},[228,149785,149786,149788,149790],{"class":230,"line":1334},[228,149787,149550],{"class":238},[228,149789,284],{"class":234},[228,149791,149412],{"class":343},[228,149793,149794,149796,149798],{"class":230,"line":1425},[228,149795,149559],{"class":238},[228,149797,284],{"class":234},[228,149799,146610],{"class":287},[228,149801,149802],{"class":230,"line":1431},[228,149803,149568],{"class":238},[19,149805,149806,149808,149809,149811],{},[30,149807,30938],{}," 表示当前对象。调用方法时不需要手动传入 ",[30,149810,30938],{},"，Python 会自动传。",[14,149813,149815],{"id":149814},"_115-构造方法__init__","11.5 构造方法__init__",[19,149817,149818,149820],{},[30,149819,30944],{}," 在对象创建时自动执行，用于初始化属性。",[220,149822,149824],{"className":30493,"code":149823,"language":30495,"meta":141,"style":141},"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",[30,149825,149826,149834,149843,149855,149867,149878,149882,149890,149928,149932,149936,149958],{"__ignoreMap":141},[228,149827,149828,149830,149832],{"class":230,"line":231},[228,149829,14809],{"class":234},[228,149831,8013],{"class":2077},[228,149833,3853],{"class":238},[228,149835,149836,149838,149840],{"class":230,"line":142},[228,149837,30916],{"class":234},[228,149839,30919],{"class":287},[228,149841,149842],{"class":238},"(self, name, age, score):\n",[228,149844,149845,149847,149850,149852],{"class":230,"line":1293},[228,149846,30960],{"class":287},[228,149848,149849],{"class":238},".name ",[228,149851,284],{"class":234},[228,149853,149854],{"class":238}," name\n",[228,149856,149857,149859,149862,149864],{"class":230,"line":1308},[228,149858,30960],{"class":287},[228,149860,149861],{"class":238},".age ",[228,149863,284],{"class":234},[228,149865,149866],{"class":238}," age\n",[228,149868,149869,149871,149874,149876],{"class":230,"line":1314},[228,149870,30960],{"class":287},[228,149872,149873],{"class":238},".score ",[228,149875,284],{"class":234},[228,149877,1693],{"class":238},[228,149879,149880],{"class":230,"line":1328},[228,149881,2514],{"emptyLinePlaceholder":157},[228,149883,149884,149886,149888],{"class":230,"line":1334},[228,149885,30916],{"class":234},[228,149887,149431],{"class":2077},[228,149889,30922],{"class":238},[228,149891,149892,149894,149896,149898,149900,149902,149904,149906,149908,149910,149912,149914,149917,149919,149922,149924,149926],{"class":230,"line":1425},[228,149893,32566],{"class":287},[228,149895,239],{"class":238},[228,149897,291],{"class":234},[228,149899,149445],{"class":343},[228,149901,149511],{"class":287},[228,149903,80416],{"class":238},[228,149905,1184],{"class":287},[228,149907,149454],{"class":343},[228,149909,149511],{"class":287},[228,149911,80428],{"class":238},[228,149913,1184],{"class":287},[228,149915,149916],{"class":343},"岁，成绩",[228,149918,149511],{"class":287},[228,149920,149921],{"class":238},".score",[228,149923,1184],{"class":287},[228,149925,489],{"class":343},[228,149927,245],{"class":238},[228,149929,149930],{"class":230,"line":1431},[228,149931,2514],{"emptyLinePlaceholder":157},[228,149933,149934],{"class":230,"line":1443},[228,149935,2514],{"emptyLinePlaceholder":157},[228,149937,149938,149940,149942,149945,149948,149950,149952,149954,149956],{"class":230,"line":1726},[228,149939,149540],{"class":238},[228,149941,284],{"class":234},[228,149943,149944],{"class":238}," Student(",[228,149946,149947],{"class":343},"\"小明\"",[228,149949,12550],{"class":238},[228,149951,888],{"class":287},[228,149953,12550],{"class":238},[228,149955,1227],{"class":287},[228,149957,245],{"class":238},[228,149959,149960],{"class":230,"line":1731},[228,149961,149568],{"class":238},[19,149963,149964],{},"构造方法的好处：",[183,149966,149967,149970,149973],{},[186,149968,149969],{},"创建对象时必须提供必要数据。",[186,149971,149972],{},"属性初始化集中，不容易漏。",[186,149974,149975],{},"对象状态更完整。",[14,149977,149979,149980],{"id":149978},"_116-str","11.6 ",[388,149981,1413],{},[19,149983,149984,149985,78],{},"直接打印对象时，默认输出不直观。可以定义 ",[30,149986,149987],{},"__str__",[220,149989,149991],{"className":30493,"code":149990,"language":30495,"meta":141,"style":141},"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",[30,149992,149993,150001,150010,150020,150030,150034,150043,150071,150075,150079,150095],{"__ignoreMap":141},[228,149994,149995,149997,149999],{"class":230,"line":231},[228,149996,14809],{"class":234},[228,149998,8013],{"class":2077},[228,150000,3853],{"class":238},[228,150002,150003,150005,150007],{"class":230,"line":142},[228,150004,30916],{"class":234},[228,150006,30919],{"class":287},[228,150008,150009],{"class":238},"(self, name, age):\n",[228,150011,150012,150014,150016,150018],{"class":230,"line":1293},[228,150013,30960],{"class":287},[228,150015,149849],{"class":238},[228,150017,284],{"class":234},[228,150019,149854],{"class":238},[228,150021,150022,150024,150026,150028],{"class":230,"line":1308},[228,150023,30960],{"class":287},[228,150025,149861],{"class":238},[228,150027,284],{"class":234},[228,150029,149866],{"class":238},[228,150031,150032],{"class":230,"line":1314},[228,150033,2514],{"emptyLinePlaceholder":157},[228,150035,150036,150038,150041],{"class":230,"line":1328},[228,150037,30916],{"class":234},[228,150039,150040],{"class":287}," __str__",[228,150042,30922],{"class":238},[228,150044,150045,150047,150050,150053,150055,150057,150059,150062,150064,150066,150068],{"class":230,"line":1334},[228,150046,14867],{"class":234},[228,150048,150049],{"class":234}," f",[228,150051,150052],{"class":343},"\"Student(name=",[228,150054,149511],{"class":287},[228,150056,80416],{"class":238},[228,150058,1184],{"class":287},[228,150060,150061],{"class":343},", age=",[228,150063,149511],{"class":287},[228,150065,80428],{"class":238},[228,150067,1184],{"class":287},[228,150069,150070],{"class":343},")\"\n",[228,150072,150073],{"class":230,"line":1425},[228,150074,2514],{"emptyLinePlaceholder":157},[228,150076,150077],{"class":230,"line":1431},[228,150078,2514],{"emptyLinePlaceholder":157},[228,150080,150081,150083,150085,150087,150089,150091,150093],{"class":230,"line":1443},[228,150082,149540],{"class":238},[228,150084,284],{"class":234},[228,150086,149944],{"class":238},[228,150088,149947],{"class":343},[228,150090,12550],{"class":238},[228,150092,888],{"class":287},[228,150094,245],{"class":238},[228,150096,150097,150099],{"class":230,"line":1726},[228,150098,30530],{"class":287},[228,150100,150101],{"class":238},"(student)\n",[14,150103,150105],{"id":150104},"_117-封装","11.7 封装",[19,150107,150108],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,150110,150111],{},"Python 中以双下划线开头的属性通常视为私有属性。",[220,150113,150115],{"className":30493,"code":150114,"language":30495,"meta":141,"style":141},"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",[30,150116,150117,150126,150135,150147,150159,150163,150172,150181,150185,150195,150208,150219,150224,150235,150239,150248,150260,150271,150275,150288,150299,150303,150314,150318,150322,150340,150349,150358],{"__ignoreMap":141},[228,150118,150119,150121,150124],{"class":230,"line":231},[228,150120,14809],{"class":234},[228,150122,150123],{"class":2077}," Account",[228,150125,3853],{"class":238},[228,150127,150128,150130,150132],{"class":230,"line":142},[228,150129,30916],{"class":234},[228,150131,30919],{"class":287},[228,150133,150134],{"class":238},"(self, owner, balance):\n",[228,150136,150137,150139,150142,150144],{"class":230,"line":1293},[228,150138,30960],{"class":287},[228,150140,150141],{"class":238},".owner ",[228,150143,284],{"class":234},[228,150145,150146],{"class":238}," owner\n",[228,150148,150149,150151,150154,150156],{"class":230,"line":1308},[228,150150,30960],{"class":287},[228,150152,150153],{"class":238},".__balance ",[228,150155,284],{"class":234},[228,150157,150158],{"class":238}," balance\n",[228,150160,150161],{"class":230,"line":1314},[228,150162,2514],{"emptyLinePlaceholder":157},[228,150164,150165,150167,150170],{"class":230,"line":1328},[228,150166,30916],{"class":234},[228,150168,150169],{"class":2077}," get_balance",[228,150171,30922],{"class":238},[228,150173,150174,150176,150178],{"class":230,"line":1334},[228,150175,14867],{"class":234},[228,150177,38988],{"class":287},[228,150179,150180],{"class":238},".__balance\n",[228,150182,150183],{"class":230,"line":1425},[228,150184,2514],{"emptyLinePlaceholder":157},[228,150186,150187,150189,150192],{"class":230,"line":1431},[228,150188,30916],{"class":234},[228,150190,150191],{"class":2077}," deposit",[228,150193,150194],{"class":238},"(self, money):\n",[228,150196,150197,150199,150202,150204,150206],{"class":230,"line":1443},[228,150198,2611],{"class":234},[228,150200,150201],{"class":238}," money ",[228,150203,1702],{"class":234},[228,150205,4207],{"class":287},[228,150207,3853],{"class":238},[228,150209,150210,150212,150214,150217],{"class":230,"line":1726},[228,150211,34765],{"class":287},[228,150213,239],{"class":238},[228,150215,150216],{"class":343},"\"存款金额必须大于0\"",[228,150218,245],{"class":238},[228,150220,150221],{"class":230,"line":1731},[228,150222,150223],{"class":234},"            return\n",[228,150225,150226,150228,150230,150232],{"class":230,"line":1737},[228,150227,30960],{"class":287},[228,150229,150153],{"class":238},[228,150231,9592],{"class":234},[228,150233,150234],{"class":238}," money\n",[228,150236,150237],{"class":230,"line":1742},[228,150238,2514],{"emptyLinePlaceholder":157},[228,150240,150241,150243,150246],{"class":230,"line":1756},[228,150242,30916],{"class":234},[228,150244,150245],{"class":2077}," withdraw",[228,150247,150194],{"class":238},[228,150249,150250,150252,150254,150256,150258],{"class":230,"line":1761},[228,150251,2611],{"class":234},[228,150253,150201],{"class":238},[228,150255,1702],{"class":234},[228,150257,4207],{"class":287},[228,150259,3853],{"class":238},[228,150261,150262,150264,150266,150269],{"class":230,"line":1767},[228,150263,34765],{"class":287},[228,150265,239],{"class":238},[228,150267,150268],{"class":343},"\"取款金额必须大于0\"",[228,150270,245],{"class":238},[228,150272,150273],{"class":230,"line":1788},[228,150274,150223],{"class":234},[228,150276,150277,150279,150281,150283,150285],{"class":230,"line":1793},[228,150278,2611],{"class":234},[228,150280,150201],{"class":238},[228,150282,1198],{"class":234},[228,150284,38988],{"class":287},[228,150286,150287],{"class":238},".__balance:\n",[228,150289,150290,150292,150294,150297],{"class":230,"line":1807},[228,150291,34765],{"class":287},[228,150293,239],{"class":238},[228,150295,150296],{"class":343},"\"余额不足\"",[228,150298,245],{"class":238},[228,150300,150301],{"class":230,"line":1812},[228,150302,150223],{"class":234},[228,150304,150305,150307,150309,150312],{"class":230,"line":1841},[228,150306,30960],{"class":287},[228,150308,150153],{"class":238},[228,150310,150311],{"class":234},"-=",[228,150313,150234],{"class":238},[228,150315,150316],{"class":230,"line":1846},[228,150317,2514],{"emptyLinePlaceholder":157},[228,150319,150320],{"class":230,"line":1863},[228,150321,2514],{"emptyLinePlaceholder":157},[228,150323,150324,150327,150329,150332,150334,150336,150338],{"class":230,"line":1868},[228,150325,150326],{"class":238},"account ",[228,150328,284],{"class":234},[228,150330,150331],{"class":238}," Account(",[228,150333,149947],{"class":343},[228,150335,12550],{"class":238},[228,150337,6525],{"class":287},[228,150339,245],{"class":238},[228,150341,150342,150345,150347],{"class":230,"line":1873},[228,150343,150344],{"class":238},"account.deposit(",[228,150346,1836],{"class":287},[228,150348,245],{"class":238},[228,150350,150351,150354,150356],{"class":230,"line":1878},[228,150352,150353],{"class":238},"account.withdraw(",[228,150355,549],{"class":287},[228,150357,245],{"class":238},[228,150359,150360,150362],{"class":230,"line":1892},[228,150361,30530],{"class":287},[228,150363,150364],{"class":238},"(account.get_balance())\n",[19,150366,150367],{},"封装的意义是避免外部随意修改内部状态。",[14,150369,150371],{"id":150370},"_118-继承","11.8 继承",[19,150373,150374],{},"继承可以让子类复用父类的属性和方法。",[220,150376,150378],{"className":30493,"code":150377,"language":30495,"meta":141,"style":141},"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",[30,150379,150380,150389,150398,150409,150413,150417,150431,150440,150451,150455,150459,150469,150474],{"__ignoreMap":141},[228,150381,150382,150384,150387],{"class":230,"line":231},[228,150383,14809],{"class":234},[228,150385,150386],{"class":2077}," Animal",[228,150388,3853],{"class":238},[228,150390,150391,150393,150396],{"class":230,"line":142},[228,150392,30916],{"class":234},[228,150394,150395],{"class":2077}," eat",[228,150397,30922],{"class":238},[228,150399,150400,150402,150404,150407],{"class":230,"line":1293},[228,150401,32566],{"class":287},[228,150403,239],{"class":238},[228,150405,150406],{"class":343},"\"吃东西\"",[228,150408,245],{"class":238},[228,150410,150411],{"class":230,"line":1308},[228,150412,2514],{"emptyLinePlaceholder":157},[228,150414,150415],{"class":230,"line":1314},[228,150416,2514],{"emptyLinePlaceholder":157},[228,150418,150419,150421,150424,150426,150429],{"class":230,"line":1328},[228,150420,14809],{"class":234},[228,150422,150423],{"class":2077}," Dog",[228,150425,239],{"class":238},[228,150427,150428],{"class":2077},"Animal",[228,150430,30901],{"class":238},[228,150432,150433,150435,150438],{"class":230,"line":1334},[228,150434,30916],{"class":234},[228,150436,150437],{"class":2077}," bark",[228,150439,30922],{"class":238},[228,150441,150442,150444,150446,150449],{"class":230,"line":1425},[228,150443,32566],{"class":287},[228,150445,239],{"class":238},[228,150447,150448],{"class":343},"\"汪汪\"",[228,150450,245],{"class":238},[228,150452,150453],{"class":230,"line":1431},[228,150454,2514],{"emptyLinePlaceholder":157},[228,150456,150457],{"class":230,"line":1443},[228,150458,2514],{"emptyLinePlaceholder":157},[228,150460,150461,150464,150466],{"class":230,"line":1726},[228,150462,150463],{"class":238},"dog ",[228,150465,284],{"class":234},[228,150467,150468],{"class":238}," Dog()\n",[228,150470,150471],{"class":230,"line":1731},[228,150472,150473],{"class":238},"dog.eat()\n",[228,150475,150476],{"class":230,"line":1737},[228,150477,150478],{"class":238},"dog.bark()\n",[19,150480,150481],{},"子类可以扩展新方法，也可以重写父类方法。",[14,150483,150485],{"id":150484},"_119-方法重写","11.9 方法重写",[220,150487,150489],{"className":30493,"code":150488,"language":30495,"meta":141,"style":141},"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",[30,150490,150491,150499,150508,150519,150523,150527,150539,150547,150557,150561,150565,150578,150586,150597,150601,150605,150613,150623,150627,150632],{"__ignoreMap":141},[228,150492,150493,150495,150497],{"class":230,"line":231},[228,150494,14809],{"class":234},[228,150496,150386],{"class":2077},[228,150498,3853],{"class":238},[228,150500,150501,150503,150506],{"class":230,"line":142},[228,150502,30916],{"class":234},[228,150504,150505],{"class":2077}," speak",[228,150507,30922],{"class":238},[228,150509,150510,150512,150514,150517],{"class":230,"line":1293},[228,150511,32566],{"class":287},[228,150513,239],{"class":238},[228,150515,150516],{"class":343},"\"动物叫\"",[228,150518,245],{"class":238},[228,150520,150521],{"class":230,"line":1308},[228,150522,2514],{"emptyLinePlaceholder":157},[228,150524,150525],{"class":230,"line":1314},[228,150526,2514],{"emptyLinePlaceholder":157},[228,150528,150529,150531,150533,150535,150537],{"class":230,"line":1328},[228,150530,14809],{"class":234},[228,150532,150423],{"class":2077},[228,150534,239],{"class":238},[228,150536,150428],{"class":2077},[228,150538,30901],{"class":238},[228,150540,150541,150543,150545],{"class":230,"line":1334},[228,150542,30916],{"class":234},[228,150544,150505],{"class":2077},[228,150546,30922],{"class":238},[228,150548,150549,150551,150553,150555],{"class":230,"line":1425},[228,150550,32566],{"class":287},[228,150552,239],{"class":238},[228,150554,150448],{"class":343},[228,150556,245],{"class":238},[228,150558,150559],{"class":230,"line":1431},[228,150560,2514],{"emptyLinePlaceholder":157},[228,150562,150563],{"class":230,"line":1443},[228,150564,2514],{"emptyLinePlaceholder":157},[228,150566,150567,150569,150572,150574,150576],{"class":230,"line":1726},[228,150568,14809],{"class":234},[228,150570,150571],{"class":2077}," Cat",[228,150573,239],{"class":238},[228,150575,150428],{"class":2077},[228,150577,30901],{"class":238},[228,150579,150580,150582,150584],{"class":230,"line":1731},[228,150581,30916],{"class":234},[228,150583,150505],{"class":2077},[228,150585,30922],{"class":238},[228,150587,150588,150590,150592,150595],{"class":230,"line":1737},[228,150589,32566],{"class":287},[228,150591,239],{"class":238},[228,150593,150594],{"class":343},"\"喵喵\"",[228,150596,245],{"class":238},[228,150598,150599],{"class":230,"line":1742},[228,150600,2514],{"emptyLinePlaceholder":157},[228,150602,150603],{"class":230,"line":1756},[228,150604,2514],{"emptyLinePlaceholder":157},[228,150606,150607,150609,150611],{"class":230,"line":1761},[228,150608,150463],{"class":238},[228,150610,284],{"class":234},[228,150612,150468],{"class":238},[228,150614,150615,150618,150620],{"class":230,"line":1767},[228,150616,150617],{"class":238},"cat ",[228,150619,284],{"class":234},[228,150621,150622],{"class":238}," Cat()\n",[228,150624,150625],{"class":230,"line":1788},[228,150626,2514],{"emptyLinePlaceholder":157},[228,150628,150629],{"class":230,"line":1793},[228,150630,150631],{"class":238},"dog.speak()\n",[228,150633,150634],{"class":230,"line":1807},[228,150635,150636],{"class":238},"cat.speak()\n",[14,150638,150640],{"id":150639},"_1110-super","11.10 super",[19,150642,150643,150644,150647],{},"子类可以通过 ",[30,150645,150646],{},"super()"," 调用父类方法。",[220,150649,150651],{"className":30493,"code":150650,"language":30495,"meta":141,"style":141},"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",[30,150652,150653,150661,150670,150680,150684,150688,150700,150709,150720,150730,150734,150738,150754],{"__ignoreMap":141},[228,150654,150655,150657,150659],{"class":230,"line":231},[228,150656,14809],{"class":234},[228,150658,15684],{"class":2077},[228,150660,3853],{"class":238},[228,150662,150663,150665,150667],{"class":230,"line":142},[228,150664,30916],{"class":234},[228,150666,30919],{"class":287},[228,150668,150669],{"class":238},"(self, name):\n",[228,150671,150672,150674,150676,150678],{"class":230,"line":1293},[228,150673,30960],{"class":287},[228,150675,149849],{"class":238},[228,150677,284],{"class":234},[228,150679,149854],{"class":238},[228,150681,150682],{"class":230,"line":1308},[228,150683,2514],{"emptyLinePlaceholder":157},[228,150685,150686],{"class":230,"line":1314},[228,150687,2514],{"emptyLinePlaceholder":157},[228,150689,150690,150692,150694,150696,150698],{"class":230,"line":1328},[228,150691,14809],{"class":234},[228,150693,8013],{"class":2077},[228,150695,239],{"class":238},[228,150697,19161],{"class":2077},[228,150699,30901],{"class":238},[228,150701,150702,150704,150706],{"class":230,"line":1334},[228,150703,30916],{"class":234},[228,150705,30919],{"class":287},[228,150707,150708],{"class":238},"(self, name, score):\n",[228,150710,150711,150713,150715,150717],{"class":230,"line":1425},[228,150712,30932],{"class":287},[228,150714,17376],{"class":238},[228,150716,30944],{"class":287},[228,150718,150719],{"class":238},"(name)\n",[228,150721,150722,150724,150726,150728],{"class":230,"line":1431},[228,150723,30960],{"class":287},[228,150725,149873],{"class":238},[228,150727,284],{"class":234},[228,150729,1693],{"class":238},[228,150731,150732],{"class":230,"line":1443},[228,150733,2514],{"emptyLinePlaceholder":157},[228,150735,150736],{"class":230,"line":1726},[228,150737,2514],{"emptyLinePlaceholder":157},[228,150739,150740,150742,150744,150746,150748,150750,150752],{"class":230,"line":1731},[228,150741,149540],{"class":238},[228,150743,284],{"class":234},[228,150745,149944],{"class":238},[228,150747,149947],{"class":343},[228,150749,12550],{"class":238},[228,150751,1227],{"class":287},[228,150753,245],{"class":238},[228,150755,150756,150758],{"class":230,"line":1737},[228,150757,30530],{"class":287},[228,150759,150760],{"class":238},"(student.name, student.score)\n",[14,150762,150764],{"id":150763},"_1111-多态","11.11 多态",[19,150766,150767],{},"多态指不同对象响应同一个方法，表现出不同结果。",[220,150769,150771],{"className":30493,"code":150770,"language":30495,"meta":141,"style":141},"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",[30,150772,150773,150781,150789,150799,150803,150807,150815,150823,150833,150837,150841,150851,150856,150860,150864,150869],{"__ignoreMap":141},[228,150774,150775,150777,150779],{"class":230,"line":231},[228,150776,14809],{"class":234},[228,150778,150423],{"class":2077},[228,150780,3853],{"class":238},[228,150782,150783,150785,150787],{"class":230,"line":142},[228,150784,30916],{"class":234},[228,150786,150505],{"class":2077},[228,150788,30922],{"class":238},[228,150790,150791,150793,150795,150797],{"class":230,"line":1293},[228,150792,32566],{"class":287},[228,150794,239],{"class":238},[228,150796,150448],{"class":343},[228,150798,245],{"class":238},[228,150800,150801],{"class":230,"line":1308},[228,150802,2514],{"emptyLinePlaceholder":157},[228,150804,150805],{"class":230,"line":1314},[228,150806,2514],{"emptyLinePlaceholder":157},[228,150808,150809,150811,150813],{"class":230,"line":1328},[228,150810,14809],{"class":234},[228,150812,150571],{"class":2077},[228,150814,3853],{"class":238},[228,150816,150817,150819,150821],{"class":230,"line":1334},[228,150818,30916],{"class":234},[228,150820,150505],{"class":2077},[228,150822,30922],{"class":238},[228,150824,150825,150827,150829,150831],{"class":230,"line":1425},[228,150826,32566],{"class":287},[228,150828,239],{"class":238},[228,150830,150594],{"class":343},[228,150832,245],{"class":238},[228,150834,150835],{"class":230,"line":1431},[228,150836,2514],{"emptyLinePlaceholder":157},[228,150838,150839],{"class":230,"line":1443},[228,150840,2514],{"emptyLinePlaceholder":157},[228,150842,150843,150845,150848],{"class":230,"line":1726},[228,150844,32062],{"class":234},[228,150846,150847],{"class":2077}," make_sound",[228,150849,150850],{"class":238},"(animal):\n",[228,150852,150853],{"class":230,"line":1731},[228,150854,150855],{"class":238},"    animal.speak()\n",[228,150857,150858],{"class":230,"line":1737},[228,150859,2514],{"emptyLinePlaceholder":157},[228,150861,150862],{"class":230,"line":1742},[228,150863,2514],{"emptyLinePlaceholder":157},[228,150865,150866],{"class":230,"line":1756},[228,150867,150868],{"class":238},"make_sound(Dog())\n",[228,150870,150871],{"class":230,"line":1761},[228,150872,150873],{"class":238},"make_sound(Cat())\n",[19,150875,150876],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,150878,150880],{"id":150879},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,150882,150883],{},"实例属性属于对象：",[220,150885,150887],{"className":30493,"code":150886,"language":30495,"meta":141,"style":141},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[30,150888,150889,150897,150905],{"__ignoreMap":141},[228,150890,150891,150893,150895],{"class":230,"line":231},[228,150892,14809],{"class":234},[228,150894,8013],{"class":2077},[228,150896,3853],{"class":238},[228,150898,150899,150901,150903],{"class":230,"line":142},[228,150900,30916],{"class":234},[228,150902,30919],{"class":287},[228,150904,150669],{"class":238},[228,150906,150907,150909,150911,150913],{"class":230,"line":1293},[228,150908,30960],{"class":287},[228,150910,149849],{"class":238},[228,150912,284],{"class":234},[228,150914,149854],{"class":238},[19,150916,150917],{},"类属性属于类，所有对象共享：",[220,150919,150921],{"className":30493,"code":150920,"language":30495,"meta":141,"style":141},"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",[30,150922,150923,150931,150941,150945,150953,150963,150967,150971,150984,150998,151002,151009,151016],{"__ignoreMap":141},[228,150924,150925,150927,150929],{"class":230,"line":231},[228,150926,14809],{"class":234},[228,150928,8013],{"class":2077},[228,150930,3853],{"class":238},[228,150932,150933,150936,150938],{"class":230,"line":142},[228,150934,150935],{"class":238},"    school ",[228,150937,284],{"class":234},[228,150939,150940],{"class":343}," \"黑马学校\"\n",[228,150942,150943],{"class":230,"line":1293},[228,150944,2514],{"emptyLinePlaceholder":157},[228,150946,150947,150949,150951],{"class":230,"line":1308},[228,150948,30916],{"class":234},[228,150950,30919],{"class":287},[228,150952,150669],{"class":238},[228,150954,150955,150957,150959,150961],{"class":230,"line":1314},[228,150956,30960],{"class":287},[228,150958,149849],{"class":238},[228,150960,284],{"class":234},[228,150962,149854],{"class":238},[228,150964,150965],{"class":230,"line":1328},[228,150966,2514],{"emptyLinePlaceholder":157},[228,150968,150969],{"class":230,"line":1334},[228,150970,2514],{"emptyLinePlaceholder":157},[228,150972,150973,150976,150978,150980,150982],{"class":230,"line":1425},[228,150974,150975],{"class":238},"s1 ",[228,150977,284],{"class":234},[228,150979,149944],{"class":238},[228,150981,149947],{"class":343},[228,150983,245],{"class":238},[228,150985,150986,150989,150991,150993,150996],{"class":230,"line":1431},[228,150987,150988],{"class":238},"s2 ",[228,150990,284],{"class":234},[228,150992,149944],{"class":238},[228,150994,150995],{"class":343},"\"小红\"",[228,150997,245],{"class":238},[228,150999,151000],{"class":230,"line":1443},[228,151001,2514],{"emptyLinePlaceholder":157},[228,151003,151004,151006],{"class":230,"line":1726},[228,151005,30530],{"class":287},[228,151007,151008],{"class":238},"(s1.school)\n",[228,151010,151011,151013],{"class":230,"line":1731},[228,151012,30530],{"class":287},[228,151014,151015],{"class":238},"(s2.school)\n",[228,151017,151018,151020],{"class":230,"line":1737},[228,151019,30530],{"class":287},[228,151021,151022],{"class":238},"(Student.school)\n",[19,151024,151025],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,151027,151029],{"id":151028},"_1113-类方法和静态方法","11.13 类方法和静态方法",[200,151031,151033],{"id":151032},"_11131-类方法","11.13.1 类方法",[19,151035,151036,151037,151040,151041,78],{},"类方法使用 ",[30,151038,151039],{},"@classmethod","，第一个参数通常是 ",[30,151042,151043],{},"cls",[220,151045,151047],{"className":30493,"code":151046,"language":30495,"meta":141,"style":141},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[30,151048,151049,151057,151065,151069,151077,151087,151097,151101,151105],{"__ignoreMap":141},[228,151050,151051,151053,151055],{"class":230,"line":231},[228,151052,14809],{"class":234},[228,151054,8013],{"class":2077},[228,151056,3853],{"class":238},[228,151058,151059,151061,151063],{"class":230,"line":142},[228,151060,150935],{"class":238},[228,151062,284],{"class":234},[228,151064,150940],{"class":343},[228,151066,151067],{"class":230,"line":1293},[228,151068,2514],{"emptyLinePlaceholder":157},[228,151070,151071,151074],{"class":230,"line":1308},[228,151072,151073],{"class":2077},"    @",[228,151075,151076],{"class":287},"classmethod\n",[228,151078,151079,151081,151084],{"class":230,"line":1314},[228,151080,30916],{"class":234},[228,151082,151083],{"class":2077}," get_school",[228,151085,151086],{"class":238},"(cls):\n",[228,151088,151089,151091,151094],{"class":230,"line":1328},[228,151090,14867],{"class":234},[228,151092,151093],{"class":287}," cls",[228,151095,151096],{"class":238},".school\n",[228,151098,151099],{"class":230,"line":1334},[228,151100,2514],{"emptyLinePlaceholder":157},[228,151102,151103],{"class":230,"line":1425},[228,151104,2514],{"emptyLinePlaceholder":157},[228,151106,151107,151109],{"class":230,"line":1431},[228,151108,30530],{"class":287},[228,151110,151111],{"class":238},"(Student.get_school())\n",[200,151113,151115],{"id":151114},"_11132-静态方法","11.13.2 静态方法",[19,151117,151118,151119,151122],{},"静态方法使用 ",[30,151120,151121],{},"@staticmethod","，不需要访问实例和类。",[220,151124,151126],{"className":30493,"code":151125,"language":30495,"meta":141,"style":141},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[30,151127,151128,151137,151144,151153,151164,151168,151172],{"__ignoreMap":141},[228,151129,151130,151132,151135],{"class":230,"line":231},[228,151131,14809],{"class":234},[228,151133,151134],{"class":2077}," MathUtils",[228,151136,3853],{"class":238},[228,151138,151139,151141],{"class":230,"line":142},[228,151140,151073],{"class":2077},[228,151142,151143],{"class":287},"staticmethod\n",[228,151145,151146,151148,151150],{"class":230,"line":1293},[228,151147,30916],{"class":234},[228,151149,5324],{"class":2077},[228,151151,151152],{"class":238},"(a, b):\n",[228,151154,151155,151157,151159,151161],{"class":230,"line":1308},[228,151156,14867],{"class":234},[228,151158,10984],{"class":238},[228,151160,719],{"class":234},[228,151162,151163],{"class":238}," b\n",[228,151165,151166],{"class":230,"line":1314},[228,151167,2514],{"emptyLinePlaceholder":157},[228,151169,151170],{"class":230,"line":1328},[228,151171,2514],{"emptyLinePlaceholder":157},[228,151173,151174,151176,151179,151181,151183,151185],{"class":230,"line":1334},[228,151175,30530],{"class":287},[228,151177,151178],{"class":238},"(MathUtils.add(",[228,151180,456],{"class":287},[228,151182,12550],{"class":238},[228,151184,316],{"class":287},[228,151186,30612],{"class":238},[19,151188,151189],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,151191,151193],{"id":151192},"_1114-dataclass","11.14 dataclass",[19,151195,151196,151199],{},[30,151197,151198],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[220,151201,151203],{"className":30493,"code":151202,"language":30495,"meta":141,"style":141},"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",[30,151204,151205,151217,151221,151225,151230,151238,151246,151254,151262,151266,151270,151290],{"__ignoreMap":141},[228,151206,151207,151209,151212,151214],{"class":230,"line":231},[228,151208,30852],{"class":234},[228,151210,151211],{"class":238}," dataclasses ",[228,151213,30507],{"class":234},[228,151215,151216],{"class":238}," dataclass\n",[228,151218,151219],{"class":230,"line":142},[228,151220,2514],{"emptyLinePlaceholder":157},[228,151222,151223],{"class":230,"line":1293},[228,151224,2514],{"emptyLinePlaceholder":157},[228,151226,151227],{"class":230,"line":1308},[228,151228,151229],{"class":2077},"@dataclass\n",[228,151231,151232,151234,151236],{"class":230,"line":1314},[228,151233,14809],{"class":234},[228,151235,8013],{"class":2077},[228,151237,3853],{"class":238},[228,151239,151240,151243],{"class":230,"line":1328},[228,151241,151242],{"class":238},"    name: ",[228,151244,151245],{"class":287},"str\n",[228,151247,151248,151251],{"class":230,"line":1334},[228,151249,151250],{"class":238},"    age: ",[228,151252,151253],{"class":287},"int\n",[228,151255,151256,151259],{"class":230,"line":1425},[228,151257,151258],{"class":238},"    score: ",[228,151260,151261],{"class":287},"float\n",[228,151263,151264],{"class":230,"line":1431},[228,151265,2514],{"emptyLinePlaceholder":157},[228,151267,151268],{"class":230,"line":1443},[228,151269,2514],{"emptyLinePlaceholder":157},[228,151271,151272,151274,151276,151278,151280,151282,151284,151286,151288],{"class":230,"line":1726},[228,151273,149540],{"class":238},[228,151275,284],{"class":234},[228,151277,149944],{"class":238},[228,151279,149947],{"class":343},[228,151281,12550],{"class":238},[228,151283,888],{"class":287},[228,151285,12550],{"class":238},[228,151287,1227],{"class":287},[228,151289,245],{"class":238},[228,151291,151292,151294],{"class":230,"line":1731},[228,151293,30530],{"class":287},[228,151295,150101],{"class":238},[19,151297,151298,151299,451,151301,151304],{},"它会自动生成 ",[30,151300,30944],{},[30,151302,151303],{},"__repr__"," 等方法。适合数据模型类。",[14,151306,151308],{"id":151307},"_1115-小案例学生类","11.15 小案例：学生类",[220,151310,151312],{"className":30493,"code":151311,"language":30495,"meta":141,"style":141},"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",[30,151313,151314,151322,151331,151343,151353,151363,151373,151377,151386,151399,151403,151412,151418,151430,151442,151454,151466,151470,151474,151480,151490,151499,151509,151517,151525,151534,151538,151542,151550,151586,151590,151594,151619,151626],{"__ignoreMap":141},[228,151315,151316,151318,151320],{"class":230,"line":231},[228,151317,14809],{"class":234},[228,151319,8013],{"class":2077},[228,151321,3853],{"class":238},[228,151323,151324,151326,151328],{"class":230,"line":142},[228,151325,30916],{"class":234},[228,151327,30919],{"class":287},[228,151329,151330],{"class":238},"(self, student_id, name, age, score):\n",[228,151332,151333,151335,151338,151340],{"class":230,"line":1293},[228,151334,30960],{"class":287},[228,151336,151337],{"class":238},".student_id ",[228,151339,284],{"class":234},[228,151341,151342],{"class":238}," student_id\n",[228,151344,151345,151347,151349,151351],{"class":230,"line":1308},[228,151346,30960],{"class":287},[228,151348,149849],{"class":238},[228,151350,284],{"class":234},[228,151352,149854],{"class":238},[228,151354,151355,151357,151359,151361],{"class":230,"line":1314},[228,151356,30960],{"class":287},[228,151358,149861],{"class":238},[228,151360,284],{"class":234},[228,151362,149866],{"class":238},[228,151364,151365,151367,151369,151371],{"class":230,"line":1328},[228,151366,30960],{"class":287},[228,151368,149873],{"class":238},[228,151370,284],{"class":234},[228,151372,1693],{"class":238},[228,151374,151375],{"class":230,"line":1334},[228,151376,2514],{"emptyLinePlaceholder":157},[228,151378,151379,151381,151384],{"class":230,"line":1425},[228,151380,30916],{"class":234},[228,151382,151383],{"class":2077}," is_passed",[228,151385,30922],{"class":238},[228,151387,151388,151390,151392,151394,151396],{"class":230,"line":1431},[228,151389,14867],{"class":234},[228,151391,38988],{"class":287},[228,151393,149873],{"class":238},[228,151395,1824],{"class":234},[228,151397,151398],{"class":287}," 60\n",[228,151400,151401],{"class":230,"line":1443},[228,151402,2514],{"emptyLinePlaceholder":157},[228,151404,151405,151407,151410],{"class":230,"line":1726},[228,151406,30916],{"class":234},[228,151408,151409],{"class":2077}," to_dict",[228,151411,30922],{"class":238},[228,151413,151414,151416],{"class":230,"line":1731},[228,151415,14867],{"class":234},[228,151417,15687],{"class":238},[228,151419,151420,151423,151425,151427],{"class":230,"line":1737},[228,151421,151422],{"class":343},"            \"student_id\"",[228,151424,51552],{"class":238},[228,151426,30938],{"class":287},[228,151428,151429],{"class":238},".student_id,\n",[228,151431,151432,151435,151437,151439],{"class":230,"line":1742},[228,151433,151434],{"class":343},"            \"name\"",[228,151436,51552],{"class":238},[228,151438,30938],{"class":287},[228,151440,151441],{"class":238},".name,\n",[228,151443,151444,151447,151449,151451],{"class":230,"line":1756},[228,151445,151446],{"class":343},"            \"age\"",[228,151448,51552],{"class":238},[228,151450,30938],{"class":287},[228,151452,151453],{"class":238},".age,\n",[228,151455,151456,151459,151461,151463],{"class":230,"line":1761},[228,151457,151458],{"class":343},"            \"score\"",[228,151460,51552],{"class":238},[228,151462,30938],{"class":287},[228,151464,151465],{"class":238},".score,\n",[228,151467,151468],{"class":230,"line":1767},[228,151469,2643],{"class":238},[228,151471,151472],{"class":230,"line":1788},[228,151473,2514],{"emptyLinePlaceholder":157},[228,151475,151476,151478],{"class":230,"line":1793},[228,151477,151073],{"class":2077},[228,151479,151076],{"class":287},[228,151481,151482,151484,151487],{"class":230,"line":1807},[228,151483,30916],{"class":234},[228,151485,151486],{"class":2077}," from_dict",[228,151488,151489],{"class":238},"(cls, data):\n",[228,151491,151492,151494,151496],{"class":230,"line":1812},[228,151493,14867],{"class":234},[228,151495,151093],{"class":287},[228,151497,151498],{"class":238},"(\n",[228,151500,151501,151504,151507],{"class":230,"line":1841},[228,151502,151503],{"class":238},"            data[",[228,151505,151506],{"class":343},"\"student_id\"",[228,151508,87951],{"class":238},[228,151510,151511,151513,151515],{"class":230,"line":1846},[228,151512,151503],{"class":238},[228,151514,62794],{"class":343},[228,151516,87951],{"class":238},[228,151518,151519,151521,151523],{"class":230,"line":1863},[228,151520,151503],{"class":238},[228,151522,69239],{"class":343},[228,151524,87951],{"class":238},[228,151526,151527,151529,151532],{"class":230,"line":1868},[228,151528,151503],{"class":238},[228,151530,151531],{"class":343},"\"score\"",[228,151533,87951],{"class":238},[228,151535,151536],{"class":230,"line":1873},[228,151537,38241],{"class":238},[228,151539,151540],{"class":230,"line":1878},[228,151541,2514],{"emptyLinePlaceholder":157},[228,151543,151544,151546,151548],{"class":230,"line":1892},[228,151545,30916],{"class":234},[228,151547,150040],{"class":287},[228,151549,30922],{"class":238},[228,151551,151552,151554,151556,151558,151560,151563,151565,151568,151570,151572,151574,151576,151578,151580,151582,151584],{"class":230,"line":1897},[228,151553,14867],{"class":234},[228,151555,150049],{"class":234},[228,151557,489],{"class":343},[228,151559,149511],{"class":287},[228,151561,151562],{"class":238},".student_id",[228,151564,1184],{"class":287},[228,151566,151567],{"class":287}," {self",[228,151569,80416],{"class":238},[228,151571,1184],{"class":287},[228,151573,151567],{"class":287},[228,151575,80428],{"class":238},[228,151577,1184],{"class":287},[228,151579,151567],{"class":287},[228,151581,149921],{"class":238},[228,151583,1184],{"class":287},[228,151585,25249],{"class":343},[228,151587,151588],{"class":230,"line":2691},[228,151589,2514],{"emptyLinePlaceholder":157},[228,151591,151592],{"class":230,"line":2705},[228,151593,2514],{"emptyLinePlaceholder":157},[228,151595,151596,151598,151600,151602,151605,151607,151609,151611,151613,151615,151617],{"class":230,"line":2713},[228,151597,149540],{"class":238},[228,151599,284],{"class":234},[228,151601,149944],{"class":238},[228,151603,151604],{"class":343},"\"001\"",[228,151606,12550],{"class":238},[228,151608,149947],{"class":343},[228,151610,12550],{"class":238},[228,151612,888],{"class":287},[228,151614,12550],{"class":238},[228,151616,1227],{"class":287},[228,151618,245],{"class":238},[228,151620,151621,151623],{"class":230,"line":2718},[228,151622,30530],{"class":287},[228,151624,151625],{"class":238},"(student.is_passed())\n",[228,151627,151628,151630],{"class":230,"line":2724},[228,151629,30530],{"class":287},[228,151631,151632],{"class":238},"(student.to_dict())\n",[19,151634,151635,101133,151638,151641],{},[30,151636,151637],{},"to_dict()",[30,151639,151640],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,151643,151645],{"id":151644},"_1116-易错点","11.16 易错点",[183,151647,151648,151654,151660,151665,151668,151671],{},[186,151649,151650,151651,78],{},"类名推荐使用大驼峰，如 ",[30,151652,151653],{},"StudentManager",[186,151655,151656,151657,151659],{},"方法第一个参数必须写 ",[30,151658,30938],{},"，调用时不用传。",[186,151661,151662,151664],{},[30,151663,30944],{}," 不是普通方法，它在创建对象时自动执行。",[186,151666,151667],{},"私有属性不是绝对安全，只是约定和名称改写。",[186,151669,151670],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[186,151672,151673],{},"类中方法太多时，说明职责可能过重。",[14,151675,151677],{"id":151676},"_1117-本章练习","11.17 本章练习",[183,151679,151680,151686,151692,151697,151710],{},[186,151681,151682,151683,151685],{},"定义 ",[30,151684,149627],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[186,151687,151682,151688,151691],{},[30,151689,151690],{},"Account"," 类，实现存款、取款、查询余额。",[186,151693,151682,151694,151696],{},[30,151695,17341],{}," 类，计算圆的周长和面积。",[186,151698,151682,151699,451,151702,151705,151706,151709],{},[30,151700,151701],{},"Dog",[30,151703,151704],{},"Cat"," 类，并用同一个函数调用它们的 ",[30,151707,151708],{},"speak()"," 方法。",[186,151711,104481,151712,151714,151715,78],{},[30,151713,151198],{}," 定义一个商品类 ",[30,151716,151717],{},"Product",[5241,151719,151720],{},"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":141,"searchDepth":142,"depth":142,"links":151722},[151723,151724,151725,151726,151727,151728,151730,151731,151732,151733,151734,151735,151736,151740,151741,151742,151743],{"id":149391,"depth":142,"text":149392},{"id":149574,"depth":142,"text":149575},{"id":149638,"depth":142,"text":149639},{"id":149715,"depth":142,"text":149716},{"id":149814,"depth":142,"text":149815},{"id":149978,"depth":142,"text":151729},"11.6 str",{"id":150104,"depth":142,"text":150105},{"id":150370,"depth":142,"text":150371},{"id":150484,"depth":142,"text":150485},{"id":150639,"depth":142,"text":150640},{"id":150763,"depth":142,"text":150764},{"id":150879,"depth":142,"text":150880},{"id":151028,"depth":142,"text":151029,"children":151737},[151738,151739],{"id":151032,"depth":1293,"text":151033},{"id":151114,"depth":1293,"text":151115},{"id":151192,"depth":142,"text":151193},{"id":151307,"depth":142,"text":151308},{"id":151644,"depth":142,"text":151645},{"id":151676,"depth":142,"text":151677},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149383,"description":154},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151750,"title":151751,"body":151752,"description":154,"extension":155,"meta":155065,"navigation":157,"path":155066,"seo":155067,"stem":155068,"__hash__":155069},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151753,"toc":155041},[151754,151757,151761,151764,151767,151796,151799,151807,151811,151815,151818,151841,151844,151850,151854,153300,153303,153324,153328,153331,153343,153346,153530,153533,153659,153662,153666,153670,153806,153810,153896,153900,153982,153986,154023,154027,154216,154220,154223,154453,154457,154460,154641,154644,154648,154651,154657,154660,154686,154690,154693,154707,154710,154735,154738,154752,154755,154772,154775,154792,154795,154812,154816,154842,154846,154869,154873,154876,154878,154884,154886,154907,154910,154916,154922,154926,154929,155005,155008,155012,155038],[10,151755,151751],{"id":151756},"_12-综合案例与复习路线",[14,151758,151760],{"id":151759},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,151762,151763],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,151765,151766],{},"一个合格的入门综合项目最好覆盖：",[183,151768,151769,151772,151775,151778,151781,151784,151787,151790,151793],{},[186,151770,151771],{},"输入输出。",[186,151773,151774],{},"判断和循环。",[186,151776,151777],{},"函数拆分。",[186,151779,151780],{},"列表、字典等容器。",[186,151782,151783],{},"文件持久化。",[186,151785,151786],{},"异常处理。",[186,151788,151789],{},"模块拆分。",[186,151791,151792],{},"可选：面向对象。",[186,151794,151795],{},"可选：数据可视化。",[19,151797,151798],{},"本章整理两个方向：",[183,151800,151801,151804],{},[186,151802,151803],{},"学生管理系统。",[186,151805,151806],{},"销售数据统计和可视化。",[14,151808,151810],{"id":151809},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[200,151812,151814],{"id":151813},"_1221-需求","12.2.1 需求",[19,151816,151817],{},"实现一个命令行学生管理系统：",[183,151819,151820,151823,151826,151829,151832,151835,151838],{},[186,151821,151822],{},"添加学生。",[186,151824,151825],{},"删除学生。",[186,151827,151828],{},"修改学生。",[186,151830,151831],{},"查询学生。",[186,151833,151834],{},"显示所有学生。",[186,151836,151837],{},"保存到 JSON 文件。",[186,151839,151840],{},"程序启动时自动读取 JSON 文件。",[19,151842,151843],{},"学生字段：",[220,151845,151848],{"className":151846,"code":151847,"language":5302,"meta":141},[5300],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[30,151849,151847],{"__ignoreMap":141},[14,151851,151853],{"id":151852},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[220,151855,151857],{"className":30493,"code":151856,"language":30495,"meta":141,"style":141},"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",[30,151858,151859,151865,151875,151879,151893,151897,151901,151910,151922,151928,151932,151938,151969,151979,151986,151997,152003,152007,152011,152021,152052,152078,152082,152086,152095,152106,152117,152128,152139,152150,152161,152172,152176,152180,152190,152202,152218,152225,152232,152236,152240,152250,152258,152265,152278,152288,152299,152303,152307,152316,152324,152330,152342,152350,152361,152365,152369,152378,152394,152398,152405,152416,152421,152425,152441,152456,152471,152475,152480,152488,152496,152504,152512,152516,152521,152532,152536,152540,152549,152564,152574,152578,152590,152601,152605,152609,152614,152618,152629,152633,152637,152646,152661,152669,152673,152685,152695,152699,152703,152718,152731,152744,152748,152761,152773,152785,152789,152793,152804,152808,152812,152821,152836,152844,152848,152860,152870,152874,152878,152883,152887,152891,152901,152907,152929,152948,152967,152986,152991,152995,152999,153008,153016,153027,153031,153035,153061,153071,153076,153080,153084,153092,153102,153106,153114,153119,153135,153139,153153,153158,153172,153177,153190,153195,153208,153213,153226,153231,153244,153255,153259,153265,153276,153280,153284,153296],{"__ignoreMap":141},[228,151860,151861,151863],{"class":230,"line":231},[228,151862,30507],{"class":234},[228,151864,147150],{"class":238},[228,151866,151867,151869,151871,151873],{"class":230,"line":142},[228,151868,30852],{"class":234},[228,151870,108426],{"class":238},[228,151872,30507],{"class":234},[228,151874,108431],{"class":238},[228,151876,151877],{"class":230,"line":1293},[228,151878,2514],{"emptyLinePlaceholder":157},[228,151880,151881,151884,151886,151888,151891],{"class":230,"line":1308},[228,151882,151883],{"class":287},"DATA_FILE",[228,151885,13679],{"class":234},[228,151887,108660],{"class":238},[228,151889,151890],{"class":343},"\"students.json\"",[228,151892,245],{"class":238},[228,151894,151895],{"class":230,"line":1314},[228,151896,2514],{"emptyLinePlaceholder":157},[228,151898,151899],{"class":230,"line":1328},[228,151900,2514],{"emptyLinePlaceholder":157},[228,151902,151903,151905,151908],{"class":230,"line":1334},[228,151904,32062],{"class":234},[228,151906,151907],{"class":2077}," load_students",[228,151909,32068],{"class":238},[228,151911,151912,151914,151916,151919],{"class":230,"line":1425},[228,151913,3215],{"class":234},[228,151915,39045],{"class":234},[228,151917,151918],{"class":287}," DATA_FILE",[228,151920,151921],{"class":238},".exists():\n",[228,151923,151924,151926],{"class":230,"line":1431},[228,151925,14867],{"class":234},[228,151927,51953],{"class":238},[228,151929,151930],{"class":230,"line":1443},[228,151931,2514],{"emptyLinePlaceholder":157},[228,151933,151934,151936],{"class":230,"line":1726},[228,151935,125899],{"class":234},[228,151937,3853],{"class":238},[228,151939,151940,151943,151945,151947,151949,151951,151953,151955,151957,151959,151961,151963,151965,151967],{"class":230,"line":1731},[228,151941,151942],{"class":234},"        with",[228,151944,146850],{"class":287},[228,151946,239],{"class":238},[228,151948,151883],{"class":287},[228,151950,12550],{"class":238},[228,151952,146860],{"class":343},[228,151954,12550],{"class":238},[228,151956,146865],{"class":5331},[228,151958,284],{"class":234},[228,151960,146870],{"class":343},[228,151962,13829],{"class":238},[228,151964,31498],{"class":234},[228,151966,148212],{"class":5331},[228,151968,3853],{"class":238},[228,151970,151971,151973,151975,151977],{"class":230,"line":1737},[228,151972,15847],{"class":234},[228,151974,148223],{"class":238},[228,151976,45469],{"class":5331},[228,151978,245],{"class":238},[228,151980,151981,151983],{"class":230,"line":1742},[228,151982,125927],{"class":234},[228,151984,151985],{"class":238}," json.JSONDecodeError:\n",[228,151987,151988,151990,151992,151995],{"class":230,"line":1756},[228,151989,32566],{"class":287},[228,151991,239],{"class":238},[228,151993,151994],{"class":343},"\"数据文件格式错误，已使用空数据启动\"",[228,151996,245],{"class":238},[228,151998,151999,152001],{"class":230,"line":1761},[228,152000,14867],{"class":234},[228,152002,51953],{"class":238},[228,152004,152005],{"class":230,"line":1767},[228,152006,2514],{"emptyLinePlaceholder":157},[228,152008,152009],{"class":230,"line":1788},[228,152010,2514],{"emptyLinePlaceholder":157},[228,152012,152013,152015,152018],{"class":230,"line":1793},[228,152014,32062],{"class":234},[228,152016,152017],{"class":2077}," save_students",[228,152019,152020],{"class":238},"(students):\n",[228,152022,152023,152025,152027,152029,152031,152033,152036,152038,152040,152042,152044,152046,152048,152050],{"class":230,"line":1807},[228,152024,34293],{"class":234},[228,152026,146850],{"class":287},[228,152028,239],{"class":238},[228,152030,151883],{"class":287},[228,152032,12550],{"class":238},[228,152034,152035],{"class":343},"\"w\"",[228,152037,12550],{"class":238},[228,152039,146865],{"class":5331},[228,152041,284],{"class":234},[228,152043,146870],{"class":343},[228,152045,13829],{"class":238},[228,152047,31498],{"class":234},[228,152049,148212],{"class":5331},[228,152051,3853],{"class":238},[228,152053,152054,152057,152059,152061,152063,152065,152067,152069,152072,152074,152076],{"class":230,"line":1812},[228,152055,152056],{"class":238},"        json.dump(students, ",[228,152058,45469],{"class":5331},[228,152060,12550],{"class":238},[228,152062,147196],{"class":5331},[228,152064,284],{"class":234},[228,152066,34102],{"class":287},[228,152068,12550],{"class":238},[228,152070,152071],{"class":5331},"indent",[228,152073,284],{"class":234},[228,152075,316],{"class":287},[228,152077,245],{"class":238},[228,152079,152080],{"class":230,"line":1841},[228,152081,2514],{"emptyLinePlaceholder":157},[228,152083,152084],{"class":230,"line":1846},[228,152085,2514],{"emptyLinePlaceholder":157},[228,152087,152088,152090,152093],{"class":230,"line":1863},[228,152089,32062],{"class":234},[228,152091,152092],{"class":2077}," show_menu",[228,152094,32068],{"class":238},[228,152096,152097,152099,152101,152104],{"class":230,"line":1868},[228,152098,31414],{"class":287},[228,152100,239],{"class":238},[228,152102,152103],{"class":343},"\"====== 学生管理系统 ======\"",[228,152105,245],{"class":238},[228,152107,152108,152110,152112,152115],{"class":230,"line":1873},[228,152109,31414],{"class":287},[228,152111,239],{"class":238},[228,152113,152114],{"class":343},"\"1. 添加学生\"",[228,152116,245],{"class":238},[228,152118,152119,152121,152123,152126],{"class":230,"line":1878},[228,152120,31414],{"class":287},[228,152122,239],{"class":238},[228,152124,152125],{"class":343},"\"2. 删除学生\"",[228,152127,245],{"class":238},[228,152129,152130,152132,152134,152137],{"class":230,"line":1892},[228,152131,31414],{"class":287},[228,152133,239],{"class":238},[228,152135,152136],{"class":343},"\"3. 修改学生\"",[228,152138,245],{"class":238},[228,152140,152141,152143,152145,152148],{"class":230,"line":1897},[228,152142,31414],{"class":287},[228,152144,239],{"class":238},[228,152146,152147],{"class":343},"\"4. 查询学生\"",[228,152149,245],{"class":238},[228,152151,152152,152154,152156,152159],{"class":230,"line":2691},[228,152153,31414],{"class":287},[228,152155,239],{"class":238},[228,152157,152158],{"class":343},"\"5. 显示所有学生\"",[228,152160,245],{"class":238},[228,152162,152163,152165,152167,152170],{"class":230,"line":2705},[228,152164,31414],{"class":287},[228,152166,239],{"class":238},[228,152168,152169],{"class":343},"\"0. 退出系统\"",[228,152171,245],{"class":238},[228,152173,152174],{"class":230,"line":2713},[228,152175,2514],{"emptyLinePlaceholder":157},[228,152177,152178],{"class":230,"line":2718},[228,152179,2514],{"emptyLinePlaceholder":157},[228,152181,152182,152184,152187],{"class":230,"line":2724},[228,152183,32062],{"class":234},[228,152185,152186],{"class":2077}," find_student",[228,152188,152189],{"class":238},"(students, student_id):\n",[228,152191,152192,152194,152197,152199],{"class":230,"line":2730},[228,152193,3315],{"class":234},[228,152195,152196],{"class":238}," student ",[228,152198,26159],{"class":234},[228,152200,152201],{"class":238}," students:\n",[228,152203,152204,152206,152209,152211,152213,152215],{"class":230,"line":2735},[228,152205,2611],{"class":234},[228,152207,152208],{"class":238}," student[",[228,152210,151506],{"class":343},[228,152212,4557],{"class":238},[228,152214,3063],{"class":234},[228,152216,152217],{"class":238}," student_id:\n",[228,152219,152220,152222],{"class":230,"line":8063},[228,152221,15847],{"class":234},[228,152223,152224],{"class":238}," student\n",[228,152226,152227,152229],{"class":230,"line":8087},[228,152228,4204],{"class":234},[228,152230,152231],{"class":287}," None\n",[228,152233,152234],{"class":230,"line":8092},[228,152235,2514],{"emptyLinePlaceholder":157},[228,152237,152238],{"class":230,"line":8098},[228,152239,2514],{"emptyLinePlaceholder":157},[228,152241,152242,152244,152247],{"class":230,"line":8125},[228,152243,32062],{"class":234},[228,152245,152246],{"class":2077}," input_int",[228,152248,152249],{"class":238},"(prompt):\n",[228,152251,152252,152254,152256],{"class":230,"line":8130},[228,152253,2365],{"class":234},[228,152255,95407],{"class":287},[228,152257,3853],{"class":238},[228,152259,152260,152263],{"class":230,"line":8136},[228,152261,152262],{"class":234},"        try",[228,152264,3853],{"class":238},[228,152266,152267,152269,152271,152273,152275],{"class":230,"line":8148},[228,152268,15847],{"class":234},[228,152270,2496],{"class":287},[228,152272,239],{"class":238},[228,152274,53936],{"class":287},[228,152276,152277],{"class":238},"(prompt))\n",[228,152279,152280,152283,152286],{"class":230,"line":8160},[228,152281,152282],{"class":234},"        except",[228,152284,152285],{"class":287}," ValueError",[228,152287,3853],{"class":238},[228,152289,152290,152292,152294,152297],{"class":230,"line":8172},[228,152291,34765],{"class":287},[228,152293,239],{"class":238},[228,152295,152296],{"class":343},"\"请输入整数\"",[228,152298,245],{"class":238},[228,152300,152301],{"class":230,"line":9831},[228,152302,2514],{"emptyLinePlaceholder":157},[228,152304,152305],{"class":230,"line":9856},[228,152306,2514],{"emptyLinePlaceholder":157},[228,152308,152309,152311,152314],{"class":230,"line":9879},[228,152310,32062],{"class":234},[228,152312,152313],{"class":2077}," input_float",[228,152315,152249],{"class":238},[228,152317,152318,152320,152322],{"class":230,"line":9903},[228,152319,2365],{"class":234},[228,152321,95407],{"class":287},[228,152323,3853],{"class":238},[228,152325,152326,152328],{"class":230,"line":9908},[228,152327,152262],{"class":234},[228,152329,3853],{"class":238},[228,152331,152332,152334,152336,152338,152340],{"class":230,"line":9913},[228,152333,15847],{"class":234},[228,152335,109912],{"class":287},[228,152337,239],{"class":238},[228,152339,53936],{"class":287},[228,152341,152277],{"class":238},[228,152343,152344,152346,152348],{"class":230,"line":9918},[228,152345,152282],{"class":234},[228,152347,152285],{"class":287},[228,152349,3853],{"class":238},[228,152351,152352,152354,152356,152359],{"class":230,"line":9927},[228,152353,34765],{"class":287},[228,152355,239],{"class":238},[228,152357,152358],{"class":343},"\"请输入数字\"",[228,152360,245],{"class":238},[228,152362,152363],{"class":230,"line":9932},[228,152364,2514],{"emptyLinePlaceholder":157},[228,152366,152367],{"class":230,"line":9938},[228,152368,2514],{"emptyLinePlaceholder":157},[228,152370,152371,152373,152376],{"class":230,"line":9959},[228,152372,32062],{"class":234},[228,152374,152375],{"class":2077}," add_student",[228,152377,152020],{"class":238},[228,152379,152380,152383,152385,152387,152389,152392],{"class":230,"line":9965},[228,152381,152382],{"class":238},"    student_id ",[228,152384,284],{"class":234},[228,152386,60720],{"class":287},[228,152388,239],{"class":238},[228,152390,152391],{"class":343},"\"请输入学号:\"",[228,152393,245],{"class":238},[228,152395,152396],{"class":230,"line":9979},[228,152397,2514],{"emptyLinePlaceholder":157},[228,152399,152400,152402],{"class":230,"line":9985},[228,152401,3215],{"class":234},[228,152403,152404],{"class":238}," find_student(students, student_id):\n",[228,152406,152407,152409,152411,152414],{"class":230,"line":10012},[228,152408,32566],{"class":287},[228,152410,239],{"class":238},[228,152412,152413],{"class":343},"\"学号已存在\"",[228,152415,245],{"class":238},[228,152417,152418],{"class":230,"line":10021},[228,152419,152420],{"class":234},"        return\n",[228,152422,152423],{"class":230,"line":10027},[228,152424,2514],{"emptyLinePlaceholder":157},[228,152426,152427,152430,152432,152434,152436,152439],{"class":230,"line":10035},[228,152428,152429],{"class":238},"    name ",[228,152431,284],{"class":234},[228,152433,60720],{"class":287},[228,152435,239],{"class":238},[228,152437,152438],{"class":343},"\"请输入姓名:\"",[228,152440,245],{"class":238},[228,152442,152443,152446,152448,152451,152454],{"class":230,"line":10040},[228,152444,152445],{"class":238},"    age ",[228,152447,284],{"class":234},[228,152449,152450],{"class":238}," input_int(",[228,152452,152453],{"class":343},"\"请输入年龄:\"",[228,152455,245],{"class":238},[228,152457,152458,152461,152463,152466,152469],{"class":230,"line":16719},[228,152459,152460],{"class":238},"    score ",[228,152462,284],{"class":234},[228,152464,152465],{"class":238}," input_float(",[228,152467,152468],{"class":343},"\"请输入成绩:\"",[228,152470,245],{"class":238},[228,152472,152473],{"class":230,"line":16725},[228,152474,2514],{"emptyLinePlaceholder":157},[228,152476,152477],{"class":230,"line":16748},[228,152478,152479],{"class":238},"    students.append({\n",[228,152481,152482,152485],{"class":230,"line":16754},[228,152483,152484],{"class":343},"        \"student_id\"",[228,152486,152487],{"class":238},": student_id,\n",[228,152489,152490,152493],{"class":230,"line":16777},[228,152491,152492],{"class":343},"        \"name\"",[228,152494,152495],{"class":238},": name,\n",[228,152497,152498,152501],{"class":230,"line":16791},[228,152499,152500],{"class":343},"        \"age\"",[228,152502,152503],{"class":238},": age,\n",[228,152505,152506,152509],{"class":230,"line":16811},[228,152507,152508],{"class":343},"        \"score\"",[228,152510,152511],{"class":238},": score,\n",[228,152513,152514],{"class":230,"line":16817},[228,152515,33576],{"class":238},[228,152517,152518],{"class":230,"line":16828},[228,152519,152520],{"class":238},"    save_students(students)\n",[228,152522,152523,152525,152527,152530],{"class":230,"line":16851},[228,152524,31414],{"class":287},[228,152526,239],{"class":238},[228,152528,152529],{"class":343},"\"添加成功\"",[228,152531,245],{"class":238},[228,152533,152534],{"class":230,"line":16873},[228,152535,2514],{"emptyLinePlaceholder":157},[228,152537,152538],{"class":230,"line":16878},[228,152539,2514],{"emptyLinePlaceholder":157},[228,152541,152542,152544,152547],{"class":230,"line":16884},[228,152543,32062],{"class":234},[228,152545,152546],{"class":2077}," delete_student",[228,152548,152020],{"class":238},[228,152550,152551,152553,152555,152557,152559,152562],{"class":230,"line":16898},[228,152552,152382],{"class":238},[228,152554,284],{"class":234},[228,152556,60720],{"class":287},[228,152558,239],{"class":238},[228,152560,152561],{"class":343},"\"请输入要删除的学号:\"",[228,152563,245],{"class":238},[228,152565,152566,152569,152571],{"class":230,"line":16911},[228,152567,152568],{"class":238},"    student ",[228,152570,284],{"class":234},[228,152572,152573],{"class":238}," find_student(students, student_id)\n",[228,152575,152576],{"class":230,"line":16916},[228,152577,2514],{"emptyLinePlaceholder":157},[228,152579,152580,152582,152584,152586,152588],{"class":230,"line":16930},[228,152581,3215],{"class":234},[228,152583,152196],{"class":238},[228,152585,39042],{"class":234},[228,152587,39048],{"class":287},[228,152589,3853],{"class":238},[228,152591,152592,152594,152596,152599],{"class":230,"line":16935},[228,152593,32566],{"class":287},[228,152595,239],{"class":238},[228,152597,152598],{"class":343},"\"学生不存在\"",[228,152600,245],{"class":238},[228,152602,152603],{"class":230,"line":16941},[228,152604,152420],{"class":234},[228,152606,152607],{"class":230,"line":16946},[228,152608,2514],{"emptyLinePlaceholder":157},[228,152610,152611],{"class":230,"line":16960},[228,152612,152613],{"class":238},"    students.remove(student)\n",[228,152615,152616],{"class":230,"line":16965},[228,152617,152520],{"class":238},[228,152619,152620,152622,152624,152627],{"class":230,"line":16970},[228,152621,31414],{"class":287},[228,152623,239],{"class":238},[228,152625,152626],{"class":343},"\"删除成功\"",[228,152628,245],{"class":238},[228,152630,152631],{"class":230,"line":16984},[228,152632,2514],{"emptyLinePlaceholder":157},[228,152634,152635],{"class":230,"line":16996},[228,152636,2514],{"emptyLinePlaceholder":157},[228,152638,152639,152641,152644],{"class":230,"line":17001},[228,152640,32062],{"class":234},[228,152642,152643],{"class":2077}," update_student",[228,152645,152020],{"class":238},[228,152647,152648,152650,152652,152654,152656,152659],{"class":230,"line":17014},[228,152649,152382],{"class":238},[228,152651,284],{"class":234},[228,152653,60720],{"class":287},[228,152655,239],{"class":238},[228,152657,152658],{"class":343},"\"请输入要修改的学号:\"",[228,152660,245],{"class":238},[228,152662,152663,152665,152667],{"class":230,"line":17019},[228,152664,152568],{"class":238},[228,152666,284],{"class":234},[228,152668,152573],{"class":238},[228,152670,152671],{"class":230,"line":17024},[228,152672,2514],{"emptyLinePlaceholder":157},[228,152674,152675,152677,152679,152681,152683],{"class":230,"line":17029},[228,152676,3215],{"class":234},[228,152678,152196],{"class":238},[228,152680,39042],{"class":234},[228,152682,39048],{"class":287},[228,152684,3853],{"class":238},[228,152686,152687,152689,152691,152693],{"class":230,"line":17042},[228,152688,32566],{"class":287},[228,152690,239],{"class":238},[228,152692,152598],{"class":343},[228,152694,245],{"class":238},[228,152696,152697],{"class":230,"line":17047},[228,152698,152420],{"class":234},[228,152700,152701],{"class":230,"line":32748},[228,152702,2514],{"emptyLinePlaceholder":157},[228,152704,152705,152707,152709,152711,152713,152716],{"class":230,"line":32754},[228,152706,152429],{"class":238},[228,152708,284],{"class":234},[228,152710,60720],{"class":287},[228,152712,239],{"class":238},[228,152714,152715],{"class":343},"\"请输入新姓名:\"",[228,152717,245],{"class":238},[228,152719,152720,152722,152724,152726,152729],{"class":230,"line":32760},[228,152721,152445],{"class":238},[228,152723,284],{"class":234},[228,152725,152450],{"class":238},[228,152727,152728],{"class":343},"\"请输入新年龄:\"",[228,152730,245],{"class":238},[228,152732,152733,152735,152737,152739,152742],{"class":230,"line":32766},[228,152734,152460],{"class":238},[228,152736,284],{"class":234},[228,152738,152465],{"class":238},[228,152740,152741],{"class":343},"\"请输入新成绩:\"",[228,152743,245],{"class":238},[228,152745,152746],{"class":230,"line":32772},[228,152747,2514],{"emptyLinePlaceholder":157},[228,152749,152750,152753,152755,152757,152759],{"class":230,"line":32783},[228,152751,152752],{"class":238},"    student[",[228,152754,62794],{"class":343},[228,152756,4557],{"class":238},[228,152758,284],{"class":234},[228,152760,149854],{"class":238},[228,152762,152763,152765,152767,152769,152771],{"class":230,"line":32789},[228,152764,152752],{"class":238},[228,152766,69239],{"class":343},[228,152768,4557],{"class":238},[228,152770,284],{"class":234},[228,152772,149866],{"class":238},[228,152774,152775,152777,152779,152781,152783],{"class":230,"line":32809},[228,152776,152752],{"class":238},[228,152778,151531],{"class":343},[228,152780,4557],{"class":238},[228,152782,284],{"class":234},[228,152784,1693],{"class":238},[228,152786,152787],{"class":230,"line":32815},[228,152788,2514],{"emptyLinePlaceholder":157},[228,152790,152791],{"class":230,"line":32826},[228,152792,152520],{"class":238},[228,152794,152795,152797,152799,152802],{"class":230,"line":32832},[228,152796,31414],{"class":287},[228,152798,239],{"class":238},[228,152800,152801],{"class":343},"\"修改成功\"",[228,152803,245],{"class":238},[228,152805,152806],{"class":230,"line":32838},[228,152807,2514],{"emptyLinePlaceholder":157},[228,152809,152810],{"class":230,"line":32844},[228,152811,2514],{"emptyLinePlaceholder":157},[228,152813,152814,152816,152819],{"class":230,"line":32850},[228,152815,32062],{"class":234},[228,152817,152818],{"class":2077}," query_student",[228,152820,152020],{"class":238},[228,152822,152823,152825,152827,152829,152831,152834],{"class":230,"line":32856},[228,152824,152382],{"class":238},[228,152826,284],{"class":234},[228,152828,60720],{"class":287},[228,152830,239],{"class":238},[228,152832,152833],{"class":343},"\"请输入要查询的学号:\"",[228,152835,245],{"class":238},[228,152837,152838,152840,152842],{"class":230,"line":32862},[228,152839,152568],{"class":238},[228,152841,284],{"class":234},[228,152843,152573],{"class":238},[228,152845,152846],{"class":230,"line":32868},[228,152847,2514],{"emptyLinePlaceholder":157},[228,152849,152850,152852,152854,152856,152858],{"class":230,"line":32888},[228,152851,3215],{"class":234},[228,152853,152196],{"class":238},[228,152855,39042],{"class":234},[228,152857,39048],{"class":287},[228,152859,3853],{"class":238},[228,152861,152862,152864,152866,152868],{"class":230,"line":32894},[228,152863,32566],{"class":287},[228,152865,239],{"class":238},[228,152867,152598],{"class":343},[228,152869,245],{"class":238},[228,152871,152872],{"class":230,"line":32910},[228,152873,152420],{"class":234},[228,152875,152876],{"class":230,"line":32916},[228,152877,2514],{"emptyLinePlaceholder":157},[228,152879,152880],{"class":230,"line":32930},[228,152881,152882],{"class":238},"    print_student(student)\n",[228,152884,152885],{"class":230,"line":32936},[228,152886,2514],{"emptyLinePlaceholder":157},[228,152888,152889],{"class":230,"line":32951},[228,152890,2514],{"emptyLinePlaceholder":157},[228,152892,152893,152895,152898],{"class":230,"line":32957},[228,152894,32062],{"class":234},[228,152896,152897],{"class":2077}," print_student",[228,152899,152900],{"class":238},"(student):\n",[228,152902,152903,152905],{"class":230,"line":32966},[228,152904,31414],{"class":287},[228,152906,151498],{"class":238},[228,152908,152909,152912,152914,152916,152919,152922,152924,152927],{"class":230,"line":32972},[228,152910,152911],{"class":234},"        f",[228,152913,489],{"class":343},[228,152915,1134],{"class":287},[228,152917,152918],{"class":238},"student[",[228,152920,152921],{"class":343},"'student_id'",[228,152923,1178],{"class":238},[228,152925,152926],{"class":287},"}\\t",[228,152928,25249],{"class":343},[228,152930,152931,152933,152935,152937,152939,152942,152944,152946],{"class":230,"line":32981},[228,152932,152911],{"class":234},[228,152934,489],{"class":343},[228,152936,1134],{"class":287},[228,152938,152918],{"class":238},[228,152940,152941],{"class":343},"'name'",[228,152943,1178],{"class":238},[228,152945,152926],{"class":287},[228,152947,25249],{"class":343},[228,152949,152950,152952,152954,152956,152958,152961,152963,152965],{"class":230,"line":32987},[228,152951,152911],{"class":234},[228,152953,489],{"class":343},[228,152955,1134],{"class":287},[228,152957,152918],{"class":238},[228,152959,152960],{"class":343},"'age'",[228,152962,1178],{"class":238},[228,152964,152926],{"class":287},[228,152966,25249],{"class":343},[228,152968,152969,152971,152973,152975,152977,152980,152982,152984],{"class":230,"line":32993},[228,152970,152911],{"class":234},[228,152972,489],{"class":343},[228,152974,1134],{"class":287},[228,152976,152918],{"class":238},[228,152978,152979],{"class":343},"'score'",[228,152981,1178],{"class":238},[228,152983,1184],{"class":287},[228,152985,25249],{"class":343},[228,152987,152988],{"class":230,"line":33002},[228,152989,152990],{"class":238},"    )\n",[228,152992,152993],{"class":230,"line":33008},[228,152994,2514],{"emptyLinePlaceholder":157},[228,152996,152997],{"class":230,"line":33019},[228,152998,2514],{"emptyLinePlaceholder":157},[228,153000,153001,153003,153006],{"class":230,"line":33025},[228,153002,32062],{"class":234},[228,153004,153005],{"class":2077}," show_all_students",[228,153007,152020],{"class":238},[228,153009,153010,153012,153014],{"class":230,"line":33044},[228,153011,3215],{"class":234},[228,153013,39045],{"class":234},[228,153015,152201],{"class":238},[228,153017,153018,153020,153022,153025],{"class":230,"line":33050},[228,153019,32566],{"class":287},[228,153021,239],{"class":238},[228,153023,153024],{"class":343},"\"暂无学生\"",[228,153026,245],{"class":238},[228,153028,153029],{"class":230,"line":33061},[228,153030,152420],{"class":234},[228,153032,153033],{"class":230,"line":33067},[228,153034,2514],{"emptyLinePlaceholder":157},[228,153036,153037,153039,153041,153044,153046,153049,153051,153054,153056,153059],{"class":230,"line":33087},[228,153038,31414],{"class":287},[228,153040,239],{"class":238},[228,153042,153043],{"class":343},"\"学号",[228,153045,1344],{"class":287},[228,153047,153048],{"class":343},"姓名",[228,153050,1344],{"class":287},[228,153052,153053],{"class":343},"年龄",[228,153055,1344],{"class":287},[228,153057,153058],{"class":343},"成绩\"",[228,153060,245],{"class":238},[228,153062,153063,153065,153067,153069],{"class":230,"line":33103},[228,153064,3315],{"class":234},[228,153066,152196],{"class":238},[228,153068,26159],{"class":234},[228,153070,152201],{"class":238},[228,153072,153073],{"class":230,"line":33109},[228,153074,153075],{"class":238},"        print_student(student)\n",[228,153077,153078],{"class":230,"line":33123},[228,153079,2514],{"emptyLinePlaceholder":157},[228,153081,153082],{"class":230,"line":33129},[228,153083,2514],{"emptyLinePlaceholder":157},[228,153085,153086,153088,153090],{"class":230,"line":33135},[228,153087,32062],{"class":234},[228,153089,2087],{"class":2077},[228,153091,32068],{"class":238},[228,153093,153094,153097,153099],{"class":230,"line":33146},[228,153095,153096],{"class":238},"    students ",[228,153098,284],{"class":234},[228,153100,153101],{"class":238}," load_students()\n",[228,153103,153104],{"class":230,"line":33152},[228,153105,2514],{"emptyLinePlaceholder":157},[228,153107,153108,153110,153112],{"class":230,"line":33158},[228,153109,2365],{"class":234},[228,153111,95407],{"class":287},[228,153113,3853],{"class":238},[228,153115,153116],{"class":230,"line":33168},[228,153117,153118],{"class":238},"        show_menu()\n",[228,153120,153121,153124,153126,153128,153130,153133],{"class":230,"line":33174},[228,153122,153123],{"class":238},"        choice ",[228,153125,284],{"class":234},[228,153127,60720],{"class":287},[228,153129,239],{"class":238},[228,153131,153132],{"class":343},"\"请输入操作:\"",[228,153134,245],{"class":238},[228,153136,153137],{"class":230,"line":33185},[228,153138,2514],{"emptyLinePlaceholder":157},[228,153140,153141,153143,153146,153148,153151],{"class":230,"line":33191},[228,153142,2611],{"class":234},[228,153144,153145],{"class":238}," choice ",[228,153147,3063],{"class":234},[228,153149,153150],{"class":343}," \"1\"",[228,153152,3853],{"class":238},[228,153154,153155],{"class":230,"line":33201},[228,153156,153157],{"class":238},"            add_student(students)\n",[228,153159,153160,153163,153165,153167,153170],{"class":230,"line":33206},[228,153161,153162],{"class":234},"        elif",[228,153164,153145],{"class":238},[228,153166,3063],{"class":234},[228,153168,153169],{"class":343}," \"2\"",[228,153171,3853],{"class":238},[228,153173,153174],{"class":230,"line":33212},[228,153175,153176],{"class":238},"            delete_student(students)\n",[228,153178,153179,153181,153183,153185,153188],{"class":230,"line":33261},[228,153180,153162],{"class":234},[228,153182,153145],{"class":238},[228,153184,3063],{"class":234},[228,153186,153187],{"class":343}," \"3\"",[228,153189,3853],{"class":238},[228,153191,153192],{"class":230,"line":33308},[228,153193,153194],{"class":238},"            update_student(students)\n",[228,153196,153197,153199,153201,153203,153206],{"class":230,"line":33313},[228,153198,153162],{"class":234},[228,153200,153145],{"class":238},[228,153202,3063],{"class":234},[228,153204,153205],{"class":343}," \"4\"",[228,153207,3853],{"class":238},[228,153209,153210],{"class":230,"line":33319},[228,153211,153212],{"class":238},"            query_student(students)\n",[228,153214,153215,153217,153219,153221,153224],{"class":230,"line":33338},[228,153216,153162],{"class":234},[228,153218,153145],{"class":238},[228,153220,3063],{"class":234},[228,153222,153223],{"class":343}," \"5\"",[228,153225,3853],{"class":238},[228,153227,153228],{"class":230,"line":33344},[228,153229,153230],{"class":238},"            show_all_students(students)\n",[228,153232,153233,153235,153237,153239,153242],{"class":230,"line":33364},[228,153234,153162],{"class":234},[228,153236,153145],{"class":238},[228,153238,3063],{"class":234},[228,153240,153241],{"class":343}," \"0\"",[228,153243,3853],{"class":238},[228,153245,153246,153248,153250,153253],{"class":230,"line":33370},[228,153247,34765],{"class":287},[228,153249,239],{"class":238},[228,153251,153252],{"class":343},"\"退出系统\"",[228,153254,245],{"class":238},[228,153256,153257],{"class":230,"line":33376},[228,153258,115213],{"class":234},[228,153260,153261,153263],{"class":230,"line":33386},[228,153262,2648],{"class":234},[228,153264,3853],{"class":238},[228,153266,153267,153269,153271,153274],{"class":230,"line":33391},[228,153268,34765],{"class":287},[228,153270,239],{"class":238},[228,153272,153273],{"class":343},"\"输入错误\"",[228,153275,245],{"class":238},[228,153277,153278],{"class":230,"line":33397},[228,153279,2514],{"emptyLinePlaceholder":157},[228,153281,153282],{"class":230,"line":33413},[228,153283,2514],{"emptyLinePlaceholder":157},[228,153285,153286,153288,153290,153292,153294],{"class":230,"line":33458},[228,153287,1645],{"class":234},[228,153289,31335],{"class":287},[228,153291,101674],{"class":234},[228,153293,101677],{"class":343},[228,153295,3853],{"class":238},[228,153297,153298],{"class":230,"line":33464},[228,153299,101684],{"class":238},[19,153301,153302],{},"这个项目串联了：",[183,153304,153305,153308,153311,153314,153317,153319],{},[186,153306,153307],{},"菜单循环。",[186,153309,153310],{},"函数封装。",[186,153312,153313],{},"列表字典。",[186,153315,153316],{},"JSON 读写。",[186,153318,151786],{},[186,153320,153321,78],{},[30,153322,153323],{},"if __name__ == \"__main__\"",[14,153325,153327],{"id":153326},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,153329,153330],{},"可以进一步拆成两个类：",[183,153332,153333,153338],{},[186,153334,153335,153337],{},[30,153336,149627],{},"：表示单个学生。",[186,153339,153340,153342],{},[30,153341,151653],{},"：负责学生增删改查和文件保存。",[19,153344,153345],{},"示意代码：",[220,153347,153349],{"className":30493,"code":153348,"language":30495,"meta":141,"style":141},"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",[30,153350,153351,153361,153365,153369,153373,153381,153388,153394,153400,153406,153410,153418,153424,153434,153444,153454,153464,153468,153472,153478,153486,153494,153502,153510,153518,153526],{"__ignoreMap":141},[228,153352,153353,153355,153357,153359],{"class":230,"line":231},[228,153354,30852],{"class":234},[228,153356,151211],{"class":238},[228,153358,30507],{"class":234},[228,153360,151216],{"class":238},[228,153362,153363],{"class":230,"line":142},[228,153364,2514],{"emptyLinePlaceholder":157},[228,153366,153367],{"class":230,"line":1293},[228,153368,2514],{"emptyLinePlaceholder":157},[228,153370,153371],{"class":230,"line":1308},[228,153372,151229],{"class":2077},[228,153374,153375,153377,153379],{"class":230,"line":1314},[228,153376,14809],{"class":234},[228,153378,8013],{"class":2077},[228,153380,3853],{"class":238},[228,153382,153383,153386],{"class":230,"line":1328},[228,153384,153385],{"class":238},"    student_id: ",[228,153387,151245],{"class":287},[228,153389,153390,153392],{"class":230,"line":1334},[228,153391,151242],{"class":238},[228,153393,151245],{"class":287},[228,153395,153396,153398],{"class":230,"line":1425},[228,153397,151250],{"class":238},[228,153399,151253],{"class":287},[228,153401,153402,153404],{"class":230,"line":1431},[228,153403,151258],{"class":238},[228,153405,151261],{"class":287},[228,153407,153408],{"class":230,"line":1443},[228,153409,2514],{"emptyLinePlaceholder":157},[228,153411,153412,153414,153416],{"class":230,"line":1726},[228,153413,30916],{"class":234},[228,153415,151409],{"class":2077},[228,153417,30922],{"class":238},[228,153419,153420,153422],{"class":230,"line":1731},[228,153421,14867],{"class":234},[228,153423,15687],{"class":238},[228,153425,153426,153428,153430,153432],{"class":230,"line":1737},[228,153427,151422],{"class":343},[228,153429,51552],{"class":238},[228,153431,30938],{"class":287},[228,153433,151429],{"class":238},[228,153435,153436,153438,153440,153442],{"class":230,"line":1742},[228,153437,151434],{"class":343},[228,153439,51552],{"class":238},[228,153441,30938],{"class":287},[228,153443,151441],{"class":238},[228,153445,153446,153448,153450,153452],{"class":230,"line":1756},[228,153447,151446],{"class":343},[228,153449,51552],{"class":238},[228,153451,30938],{"class":287},[228,153453,151453],{"class":238},[228,153455,153456,153458,153460,153462],{"class":230,"line":1761},[228,153457,151458],{"class":343},[228,153459,51552],{"class":238},[228,153461,30938],{"class":287},[228,153463,151465],{"class":238},[228,153465,153466],{"class":230,"line":1767},[228,153467,2643],{"class":238},[228,153469,153470],{"class":230,"line":1788},[228,153471,2514],{"emptyLinePlaceholder":157},[228,153473,153474,153476],{"class":230,"line":1793},[228,153475,151073],{"class":2077},[228,153477,151076],{"class":287},[228,153479,153480,153482,153484],{"class":230,"line":1807},[228,153481,30916],{"class":234},[228,153483,151486],{"class":2077},[228,153485,151489],{"class":238},[228,153487,153488,153490,153492],{"class":230,"line":1812},[228,153489,14867],{"class":234},[228,153491,151093],{"class":287},[228,153493,151498],{"class":238},[228,153495,153496,153498,153500],{"class":230,"line":1841},[228,153497,151503],{"class":238},[228,153499,151506],{"class":343},[228,153501,87951],{"class":238},[228,153503,153504,153506,153508],{"class":230,"line":1846},[228,153505,151503],{"class":238},[228,153507,62794],{"class":343},[228,153509,87951],{"class":238},[228,153511,153512,153514,153516],{"class":230,"line":1863},[228,153513,151503],{"class":238},[228,153515,69239],{"class":343},[228,153517,87951],{"class":238},[228,153519,153520,153522,153524],{"class":230,"line":1868},[228,153521,151503],{"class":238},[228,153523,151531],{"class":343},[228,153525,87951],{"class":238},[228,153527,153528],{"class":230,"line":1873},[228,153529,38241],{"class":238},[19,153531,153532],{},"管理器示意：",[220,153534,153536],{"className":30493,"code":153535,"language":30495,"meta":141,"style":141},"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",[30,153537,153538,153547,153555,153566,153570,153580,153593,153604,153611,153617,153621,153630,153639,153645,153652],{"__ignoreMap":141},[228,153539,153540,153542,153545],{"class":230,"line":231},[228,153541,14809],{"class":234},[228,153543,153544],{"class":2077}," StudentManager",[228,153546,3853],{"class":238},[228,153548,153549,153551,153553],{"class":230,"line":142},[228,153550,30916],{"class":234},[228,153552,30919],{"class":287},[228,153554,30922],{"class":238},[228,153556,153557,153559,153562,153564],{"class":230,"line":1293},[228,153558,30960],{"class":287},[228,153560,153561],{"class":238},".students ",[228,153563,284],{"class":234},[228,153565,51953],{"class":238},[228,153567,153568],{"class":230,"line":1308},[228,153569,2514],{"emptyLinePlaceholder":157},[228,153571,153572,153574,153577],{"class":230,"line":1314},[228,153573,30916],{"class":234},[228,153575,153576],{"class":2077}," find_by_id",[228,153578,153579],{"class":238},"(self, student_id):\n",[228,153581,153582,153584,153586,153588,153590],{"class":230,"line":1328},[228,153583,3517],{"class":234},[228,153585,152196],{"class":238},[228,153587,26159],{"class":234},[228,153589,38988],{"class":287},[228,153591,153592],{"class":238},".students:\n",[228,153594,153595,153597,153600,153602],{"class":230,"line":1334},[228,153596,4756],{"class":234},[228,153598,153599],{"class":238}," student.student_id ",[228,153601,3063],{"class":234},[228,153603,152217],{"class":238},[228,153605,153606,153609],{"class":230,"line":1425},[228,153607,153608],{"class":234},"                return",[228,153610,152224],{"class":238},[228,153612,153613,153615],{"class":230,"line":1431},[228,153614,14867],{"class":234},[228,153616,152231],{"class":287},[228,153618,153619],{"class":230,"line":1443},[228,153620,2514],{"emptyLinePlaceholder":157},[228,153622,153623,153625,153627],{"class":230,"line":1726},[228,153624,30916],{"class":234},[228,153626,5324],{"class":2077},[228,153628,153629],{"class":238},"(self, student):\n",[228,153631,153632,153634,153636],{"class":230,"line":1731},[228,153633,2611],{"class":234},[228,153635,38988],{"class":287},[228,153637,153638],{"class":238},".find_by_id(student.student_id):\n",[228,153640,153641,153643],{"class":230,"line":1737},[228,153642,15847],{"class":234},[228,153644,125922],{"class":287},[228,153646,153647,153649],{"class":230,"line":1742},[228,153648,30960],{"class":287},[228,153650,153651],{"class":238},".students.append(student)\n",[228,153653,153654,153656],{"class":230,"line":1756},[228,153655,14867],{"class":234},[228,153657,153658],{"class":287}," True\n",[19,153660,153661],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,153663,153665],{"id":153664},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[200,153667,153669],{"id":153668},"_1251-数据结构","12.5.1 数据结构",[220,153671,153673],{"className":30493,"code":153672,"language":30495,"meta":141,"style":141},"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",[30,153674,153675,153683,153714,153744,153773,153802],{"__ignoreMap":141},[228,153676,153677,153679,153681],{"class":230,"line":231},[228,153678,148524],{"class":238},[228,153680,284],{"class":234},[228,153682,55562],{"class":238},[228,153684,153685,153687,153689,153691,153693,153695,153698,153700,153703,153705,153707,153709,153712],{"class":230,"line":142},[228,153686,148444],{"class":238},[228,153688,148056],{"class":343},[228,153690,51552],{"class":238},[228,153692,148667],{"class":343},[228,153694,12550],{"class":238},[228,153696,153697],{"class":343},"\"category\"",[228,153699,51552],{"class":238},[228,153701,153702],{"class":343},"\"手机\"",[228,153704,12550],{"class":238},[228,153706,84199],{"class":343},[228,153708,51552],{"class":238},[228,153710,153711],{"class":287},"12000",[228,153713,5044],{"class":238},[228,153715,153716,153718,153720,153722,153724,153726,153728,153730,153733,153735,153737,153739,153742],{"class":230,"line":1293},[228,153717,148444],{"class":238},[228,153719,148056],{"class":343},[228,153721,51552],{"class":238},[228,153723,148667],{"class":343},[228,153725,12550],{"class":238},[228,153727,153697],{"class":343},[228,153729,51552],{"class":238},[228,153731,153732],{"class":343},"\"电脑\"",[228,153734,12550],{"class":238},[228,153736,84199],{"class":343},[228,153738,51552],{"class":238},[228,153740,153741],{"class":287},"18000",[228,153743,5044],{"class":238},[228,153745,153746,153748,153750,153752,153754,153756,153758,153760,153762,153764,153766,153768,153771],{"class":230,"line":1308},[228,153747,148444],{"class":238},[228,153749,148056],{"class":343},[228,153751,51552],{"class":238},[228,153753,148688],{"class":343},[228,153755,12550],{"class":238},[228,153757,153697],{"class":343},[228,153759,51552],{"class":238},[228,153761,153702],{"class":343},[228,153763,12550],{"class":238},[228,153765,84199],{"class":343},[228,153767,51552],{"class":238},[228,153769,153770],{"class":287},"15000",[228,153772,5044],{"class":238},[228,153774,153775,153777,153779,153781,153783,153785,153787,153789,153791,153793,153795,153797,153800],{"class":230,"line":1314},[228,153776,148444],{"class":238},[228,153778,148056],{"class":343},[228,153780,51552],{"class":238},[228,153782,148688],{"class":343},[228,153784,12550],{"class":238},[228,153786,153697],{"class":343},[228,153788,51552],{"class":238},[228,153790,153732],{"class":343},[228,153792,12550],{"class":238},[228,153794,84199],{"class":343},[228,153796,51552],{"class":238},[228,153798,153799],{"class":287},"16000",[228,153801,5044],{"class":238},[228,153803,153804],{"class":230,"line":1328},[228,153805,33361],{"class":238},[200,153807,153809],{"id":153808},"_1252-按日期统计","12.5.2 按日期统计",[220,153811,153813],{"className":30493,"code":153812,"language":30495,"meta":141,"style":141},"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",[30,153814,153815,153824,153828,153839,153853,153866,153885,153889],{"__ignoreMap":141},[228,153816,153817,153820,153822],{"class":230,"line":231},[228,153818,153819],{"class":238},"daily_total ",[228,153821,284],{"class":234},[228,153823,87983],{"class":238},[228,153825,153826],{"class":230,"line":142},[228,153827,2514],{"emptyLinePlaceholder":157},[228,153829,153830,153832,153834,153836],{"class":230,"line":1293},[228,153831,3139],{"class":234},[228,153833,148268],{"class":238},[228,153835,26159],{"class":234},[228,153837,153838],{"class":238}," sales:\n",[228,153840,153841,153844,153846,153849,153851],{"class":230,"line":1308},[228,153842,153843],{"class":238},"    date ",[228,153845,284],{"class":234},[228,153847,153848],{"class":238}," item[",[228,153850,148056],{"class":343},[228,153852,33361],{"class":238},[228,153854,153855,153858,153860,153862,153864],{"class":230,"line":1314},[228,153856,153857],{"class":238},"    amount ",[228,153859,284],{"class":234},[228,153861,153848],{"class":238},[228,153863,84199],{"class":343},[228,153865,33361],{"class":238},[228,153867,153868,153871,153873,153876,153878,153880,153882],{"class":230,"line":1328},[228,153869,153870],{"class":238},"    daily_total[date] ",[228,153872,284],{"class":234},[228,153874,153875],{"class":238}," daily_total.get(date, ",[228,153877,430],{"class":287},[228,153879,13829],{"class":238},[228,153881,719],{"class":234},[228,153883,153884],{"class":238}," amount\n",[228,153886,153887],{"class":230,"line":1334},[228,153888,2514],{"emptyLinePlaceholder":157},[228,153890,153891,153893],{"class":230,"line":1425},[228,153892,30530],{"class":287},[228,153894,153895],{"class":238},"(daily_total)\n",[200,153897,153899],{"id":153898},"_1253-按类别统计","12.5.3 按类别统计",[220,153901,153903],{"className":30493,"code":153902,"language":30495,"meta":141,"style":141},"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",[30,153904,153905,153914,153918,153928,153941,153953,153971,153975],{"__ignoreMap":141},[228,153906,153907,153910,153912],{"class":230,"line":231},[228,153908,153909],{"class":238},"category_total ",[228,153911,284],{"class":234},[228,153913,87983],{"class":238},[228,153915,153916],{"class":230,"line":142},[228,153917,2514],{"emptyLinePlaceholder":157},[228,153919,153920,153922,153924,153926],{"class":230,"line":1293},[228,153921,3139],{"class":234},[228,153923,148268],{"class":238},[228,153925,26159],{"class":234},[228,153927,153838],{"class":238},[228,153929,153930,153933,153935,153937,153939],{"class":230,"line":1308},[228,153931,153932],{"class":238},"    category ",[228,153934,284],{"class":234},[228,153936,153848],{"class":238},[228,153938,153697],{"class":343},[228,153940,33361],{"class":238},[228,153942,153943,153945,153947,153949,153951],{"class":230,"line":1314},[228,153944,153857],{"class":238},[228,153946,284],{"class":234},[228,153948,153848],{"class":238},[228,153950,84199],{"class":343},[228,153952,33361],{"class":238},[228,153954,153955,153958,153960,153963,153965,153967,153969],{"class":230,"line":1328},[228,153956,153957],{"class":238},"    category_total[category] ",[228,153959,284],{"class":234},[228,153961,153962],{"class":238}," category_total.get(category, ",[228,153964,430],{"class":287},[228,153966,13829],{"class":238},[228,153968,719],{"class":234},[228,153970,153884],{"class":238},[228,153972,153973],{"class":230,"line":1334},[228,153974,2514],{"emptyLinePlaceholder":157},[228,153976,153977,153979],{"class":230,"line":1425},[228,153978,30530],{"class":287},[228,153980,153981],{"class":238},"(category_total)\n",[200,153983,153985],{"id":153984},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[220,153987,153989],{"className":30493,"code":153988,"language":30495,"meta":141,"style":141},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[30,153990,153991,154016],{"__ignoreMap":141},[228,153992,153993,153996,153998,154000,154003,154006,154009,154012,154014],{"class":230,"line":231},[228,153994,153995],{"class":238},"top_date, top_amount ",[228,153997,284],{"class":234},[228,153999,6066],{"class":287},[228,154001,154002],{"class":238},"(daily_total.items(), ",[228,154004,154005],{"class":5331},"key",[228,154007,154008],{"class":234},"=lambda",[228,154010,154011],{"class":238}," item: item[",[228,154013,456],{"class":287},[228,154015,4771],{"class":238},[228,154017,154018,154020],{"class":230,"line":142},[228,154019,30530],{"class":287},[228,154021,154022],{"class":238},"(top_date, top_amount)\n",[14,154024,154026],{"id":154025},"_126-绘制柱状图","12.6 绘制柱状图",[220,154028,154030],{"className":30493,"code":154029,"language":30495,"meta":141,"style":141},"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",[30,154031,154032,154046,154057,154061,154069,154081,154093,154104,154108,154112,154122,154133,154147,154152,154169,154186,154202,154206],{"__ignoreMap":141},[228,154033,154034,154036,154038,154040,154042,154044],{"class":230,"line":231},[228,154035,30852],{"class":234},[228,154037,147438],{"class":238},[228,154039,30507],{"class":234},[228,154041,147443],{"class":238},[228,154043,31498],{"class":234},[228,154045,147448],{"class":238},[228,154047,154048,154050,154052,154054],{"class":230,"line":142},[228,154049,30852],{"class":234},[228,154051,147297],{"class":238},[228,154053,30507],{"class":234},[228,154055,154056],{"class":238}," Bar\n",[228,154058,154059],{"class":230,"line":1293},[228,154060,2514],{"emptyLinePlaceholder":157},[228,154062,154063,154065,154067],{"class":230,"line":1308},[228,154064,153909],{"class":238},[228,154066,284],{"class":234},[228,154068,15687],{"class":238},[228,154070,154071,154074,154076,154079],{"class":230,"line":1314},[228,154072,154073],{"class":343},"    \"手机\"",[228,154075,51552],{"class":238},[228,154077,154078],{"class":287},"27000",[228,154080,31581],{"class":238},[228,154082,154083,154086,154088,154091],{"class":230,"line":1328},[228,154084,154085],{"class":343},"    \"电脑\"",[228,154087,51552],{"class":238},[228,154089,154090],{"class":287},"34000",[228,154092,31581],{"class":238},[228,154094,154095,154098,154100,154102],{"class":230,"line":1334},[228,154096,154097],{"class":343},"    \"耳机\"",[228,154099,51552],{"class":238},[228,154101,124514],{"class":287},[228,154103,31581],{"class":238},[228,154105,154106],{"class":230,"line":1425},[228,154107,1679],{"class":238},[228,154109,154110],{"class":230,"line":1431},[228,154111,2514],{"emptyLinePlaceholder":157},[228,154113,154114,154117,154119],{"class":230,"line":1443},[228,154115,154116],{"class":238},"bar ",[228,154118,284],{"class":234},[228,154120,154121],{"class":238}," Bar()\n",[228,154123,154124,154127,154130],{"class":230,"line":1726},[228,154125,154126],{"class":238},"bar.add_xaxis(",[228,154128,154129],{"class":287},"list",[228,154131,154132],{"class":238},"(category_total.keys()))\n",[228,154134,154135,154138,154140,154142,154144],{"class":230,"line":1731},[228,154136,154137],{"class":238},"bar.add_yaxis(",[228,154139,147354],{"class":343},[228,154141,12550],{"class":238},[228,154143,154129],{"class":287},[228,154145,154146],{"class":238},"(category_total.values()))\n",[228,154148,154149],{"class":230,"line":1737},[228,154150,154151],{"class":238},"bar.set_global_opts(\n",[228,154153,154154,154156,154158,154160,154162,154164,154167],{"class":230,"line":1742},[228,154155,147532],{"class":5331},[228,154157,284],{"class":234},[228,154159,147537],{"class":238},[228,154161,51522],{"class":5331},[228,154163,284],{"class":234},[228,154165,154166],{"class":343},"\"品类销售额\"",[228,154168,38162],{"class":238},[228,154170,154171,154173,154175,154177,154179,154181,154184],{"class":230,"line":1756},[228,154172,147551],{"class":5331},[228,154174,284],{"class":234},[228,154176,147556],{"class":238},[228,154178,79925],{"class":5331},[228,154180,284],{"class":234},[228,154182,154183],{"class":343},"\"品类\"",[228,154185,38162],{"class":238},[228,154187,154188,154190,154192,154194,154196,154198,154200],{"class":230,"line":1761},[228,154189,147570],{"class":5331},[228,154191,284],{"class":234},[228,154193,147556],{"class":238},[228,154195,79925],{"class":5331},[228,154197,284],{"class":234},[228,154199,147354],{"class":343},[228,154201,38162],{"class":238},[228,154203,154204],{"class":230,"line":1767},[228,154205,245],{"class":238},[228,154207,154208,154211,154214],{"class":230,"line":1788},[228,154209,154210],{"class":238},"bar.render(",[228,154212,154213],{"class":343},"\"category_sales.html\"",[228,154215,245],{"class":238},[14,154217,154219],{"id":154218},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,154221,154222],{},"时间线适合展示不同日期、月份、年份的数据变化。",[220,154224,154226],{"className":30493,"code":154225,"language":30495,"meta":141,"style":141},"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",[30,154227,154228,154242,154253,154257,154265,154289,154312,154337,154341,154345,154355,154359,154370,154379,154389,154403,154434,154439,154443],{"__ignoreMap":141},[228,154229,154230,154232,154234,154236,154238,154240],{"class":230,"line":231},[228,154231,30852],{"class":234},[228,154233,147438],{"class":238},[228,154235,30507],{"class":234},[228,154237,147443],{"class":238},[228,154239,31498],{"class":234},[228,154241,147448],{"class":238},[228,154243,154244,154246,154248,154250],{"class":230,"line":142},[228,154245,30852],{"class":234},[228,154247,147297],{"class":238},[228,154249,30507],{"class":234},[228,154251,154252],{"class":238}," Bar, Timeline\n",[228,154254,154255],{"class":230,"line":1293},[228,154256,2514],{"emptyLinePlaceholder":157},[228,154258,154259,154261,154263],{"class":230,"line":1308},[228,154260,101773],{"class":238},[228,154262,284],{"class":234},[228,154264,15687],{"class":238},[228,154266,154267,154270,154273,154275,154277,154279,154281,154283,154285,154287],{"class":230,"line":1314},[228,154268,154269],{"class":343},"    \"2024-10-01\"",[228,154271,154272],{"class":238},": {",[228,154274,153702],{"class":343},[228,154276,51552],{"class":238},[228,154278,153711],{"class":287},[228,154280,12550],{"class":238},[228,154282,153732],{"class":343},[228,154284,51552],{"class":238},[228,154286,153741],{"class":287},[228,154288,5044],{"class":238},[228,154290,154291,154294,154296,154298,154300,154302,154304,154306,154308,154310],{"class":230,"line":1328},[228,154292,154293],{"class":343},"    \"2024-10-02\"",[228,154295,154272],{"class":238},[228,154297,153702],{"class":343},[228,154299,51552],{"class":238},[228,154301,153770],{"class":287},[228,154303,12550],{"class":238},[228,154305,153732],{"class":343},[228,154307,51552],{"class":238},[228,154309,153799],{"class":287},[228,154311,5044],{"class":238},[228,154313,154314,154317,154319,154321,154323,154326,154328,154330,154332,154335],{"class":230,"line":1334},[228,154315,154316],{"class":343},"    \"2024-10-03\"",[228,154318,154272],{"class":238},[228,154320,153702],{"class":343},[228,154322,51552],{"class":238},[228,154324,154325],{"class":287},"17000",[228,154327,12550],{"class":238},[228,154329,153732],{"class":343},[228,154331,51552],{"class":238},[228,154333,154334],{"class":287},"19000",[228,154336,5044],{"class":238},[228,154338,154339],{"class":230,"line":1425},[228,154340,1679],{"class":238},[228,154342,154343],{"class":230,"line":1431},[228,154344,2514],{"emptyLinePlaceholder":157},[228,154346,154347,154350,154352],{"class":230,"line":1443},[228,154348,154349],{"class":238},"timeline ",[228,154351,284],{"class":234},[228,154353,154354],{"class":238}," Timeline()\n",[228,154356,154357],{"class":230,"line":1726},[228,154358,2514],{"emptyLinePlaceholder":157},[228,154360,154361,154363,154366,154368],{"class":230,"line":1731},[228,154362,3139],{"class":234},[228,154364,154365],{"class":238}," date, category_data ",[228,154367,26159],{"class":234},[228,154369,149207],{"class":238},[228,154371,154372,154375,154377],{"class":230,"line":1737},[228,154373,154374],{"class":238},"    bar ",[228,154376,284],{"class":234},[228,154378,154121],{"class":238},[228,154380,154381,154384,154386],{"class":230,"line":1742},[228,154382,154383],{"class":238},"    bar.add_xaxis(",[228,154385,154129],{"class":287},[228,154387,154388],{"class":238},"(category_data.keys()))\n",[228,154390,154391,154394,154396,154398,154400],{"class":230,"line":1756},[228,154392,154393],{"class":238},"    bar.add_yaxis(",[228,154395,147354],{"class":343},[228,154397,12550],{"class":238},[228,154399,154129],{"class":287},[228,154401,154402],{"class":238},"(category_data.values()))\n",[228,154404,154405,154408,154411,154413,154415,154417,154419,154421,154423,154425,154427,154429,154432],{"class":230,"line":1761},[228,154406,154407],{"class":238},"    bar.set_global_opts(",[228,154409,154410],{"class":5331},"title_opts",[228,154412,284],{"class":234},[228,154414,147537],{"class":238},[228,154416,51522],{"class":5331},[228,154418,284],{"class":234},[228,154420,291],{"class":234},[228,154422,489],{"class":343},[228,154424,1134],{"class":287},[228,154426,74041],{"class":238},[228,154428,1184],{"class":287},[228,154430,154431],{"class":343},"销售额\"",[228,154433,30612],{"class":238},[228,154435,154436],{"class":230,"line":1767},[228,154437,154438],{"class":238},"    timeline.add(bar, date)\n",[228,154440,154441],{"class":230,"line":1788},[228,154442,2514],{"emptyLinePlaceholder":157},[228,154444,154445,154448,154451],{"class":230,"line":1793},[228,154446,154447],{"class":238},"timeline.render(",[228,154449,154450],{"class":343},"\"timeline_sales.html\"",[228,154452,245],{"class":238},[14,154454,154456],{"id":154455},"_128-绘制地图","12.8 绘制地图",[19,154458,154459],{},"地图适合展示地区数据。",[220,154461,154463],{"className":30493,"code":154462,"language":30495,"meta":141,"style":141},"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",[30,154464,154465,154479,154490,154494,154502,154515,154527,154540,154553,154557,154561,154571,154586,154591,154608,154627,154631],{"__ignoreMap":141},[228,154466,154467,154469,154471,154473,154475,154477],{"class":230,"line":231},[228,154468,30852],{"class":234},[228,154470,147438],{"class":238},[228,154472,30507],{"class":234},[228,154474,147443],{"class":238},[228,154476,31498],{"class":234},[228,154478,147448],{"class":238},[228,154480,154481,154483,154485,154487],{"class":230,"line":142},[228,154482,30852],{"class":234},[228,154484,147297],{"class":238},[228,154486,30507],{"class":234},[228,154488,154489],{"class":238}," Map\n",[228,154491,154492],{"class":230,"line":1293},[228,154493,2514],{"emptyLinePlaceholder":157},[228,154495,154496,154498,154500],{"class":230,"line":1308},[228,154497,101773],{"class":238},[228,154499,284],{"class":234},[228,154501,55562],{"class":238},[228,154503,154504,154507,154509,154511,154513],{"class":230,"line":1314},[228,154505,154506],{"class":238},"    (",[228,154508,69384],{"class":343},[228,154510,12550],{"class":238},[228,154512,1055],{"class":287},[228,154514,38162],{"class":238},[228,154516,154517,154519,154521,154523,154525],{"class":230,"line":1328},[228,154518,154506],{"class":238},[228,154520,69404],{"class":343},[228,154522,12550],{"class":238},[228,154524,147371],{"class":287},[228,154526,38162],{"class":238},[228,154528,154529,154531,154534,154536,154538],{"class":230,"line":1334},[228,154530,154506],{"class":238},[228,154532,154533],{"class":343},"\"广东\"",[228,154535,12550],{"class":238},[228,154537,1836],{"class":287},[228,154539,38162],{"class":238},[228,154541,154542,154544,154547,154549,154551],{"class":230,"line":1425},[228,154543,154506],{"class":238},[228,154545,154546],{"class":343},"\"浙江\"",[228,154548,12550],{"class":238},[228,154550,147376],{"class":287},[228,154552,38162],{"class":238},[228,154554,154555],{"class":230,"line":1431},[228,154556,33361],{"class":238},[228,154558,154559],{"class":230,"line":1443},[228,154560,2514],{"emptyLinePlaceholder":157},[228,154562,154563,154566,154568],{"class":230,"line":1726},[228,154564,154565],{"class":238},"map_chart ",[228,154567,284],{"class":234},[228,154569,154570],{"class":238}," Map()\n",[228,154572,154573,154576,154578,154581,154584],{"class":230,"line":1731},[228,154574,154575],{"class":238},"map_chart.add(",[228,154577,147354],{"class":343},[228,154579,154580],{"class":238},", data, ",[228,154582,154583],{"class":343},"\"china\"",[228,154585,245],{"class":238},[228,154587,154588],{"class":230,"line":1737},[228,154589,154590],{"class":238},"map_chart.set_global_opts(\n",[228,154592,154593,154595,154597,154599,154601,154603,154606],{"class":230,"line":1742},[228,154594,147532],{"class":5331},[228,154596,284],{"class":234},[228,154598,147537],{"class":238},[228,154600,51522],{"class":5331},[228,154602,284],{"class":234},[228,154604,154605],{"class":343},"\"地区销售额\"",[228,154607,38162],{"class":238},[228,154609,154610,154613,154615,154618,154621,154623,154625],{"class":230,"line":1756},[228,154611,154612],{"class":5331},"    visualmap_opts",[228,154614,284],{"class":234},[228,154616,154617],{"class":238},"opts.VisualMapOpts(",[228,154619,154620],{"class":5331},"max_",[228,154622,284],{"class":234},[228,154624,1836],{"class":287},[228,154626,38162],{"class":238},[228,154628,154629],{"class":230,"line":1761},[228,154630,245],{"class":238},[228,154632,154633,154636,154639],{"class":230,"line":1767},[228,154634,154635],{"class":238},"map_chart.render(",[228,154637,154638],{"class":343},"\"map_sales.html\"",[228,154640,245],{"class":238},[19,154642,154643],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,154645,154647],{"id":154646},"_129-项目拆分建议","12.9 项目拆分建议",[19,154649,154650],{},"当代码超过一个文件时，可以这样组织：",[220,154652,154655],{"className":154653,"code":154654,"language":5302,"meta":141},[5300],"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",[30,154656,154654],{"__ignoreMap":141},[19,154658,154659],{},"职责：",[183,154661,154662,154668,154674,154680],{},[186,154663,154664,154667],{},[30,154665,154666],{},"main.py","：程序入口。",[186,154669,154670,154673],{},[30,154671,154672],{},"file_utils.py","：读写 JSON。",[186,154675,154676,154679],{},[30,154677,154678],{},"sales_service.py","：统计销售数据。",[186,154681,154682,154685],{},[30,154683,154684],{},"chart_builder.py","：生成图表。",[14,154687,154689],{"id":154688},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,154691,154692],{},"语法基础：",[183,154694,154695,154698,154701,154704],{},[186,154696,154697],{},"会写变量、注释、输入输出。",[186,154699,154700],{},"会使用 int、float、str、bool。",[186,154702,154703],{},"会做类型转换。",[186,154705,154706],{},"会使用 f-string 格式化输出。",[19,154708,154709],{},"流程控制：",[183,154711,154712,154718,154724,154732],{},[186,154713,154714,154715,78],{},"会写 ",[30,154716,154717],{},"if elif else",[186,154719,154714,154720,101133,154722,78],{},[30,154721,108778],{},[30,154723,3139],{},[186,154725,154726,154727,101133,154729,78],{},"理解 ",[30,154728,2167],{},[30,154730,154731],{},"continue",[186,154733,154734],{},"能写嵌套循环。",[19,154736,154737],{},"函数：",[183,154739,154740,154743,154746,154749],{},[186,154741,154742],{},"会定义和调用函数。",[186,154744,154745],{},"理解参数和返回值。",[186,154747,154748],{},"知道局部变量和全局变量。",[186,154750,154751],{},"会使用默认参数、关键字参数、不定长参数。",[19,154753,154754],{},"容器：",[183,154756,154757,154760,154763,154766,154769],{},[186,154758,154759],{},"会使用列表增删改查。",[186,154761,154762],{},"会遍历列表、字典。",[186,154764,154765],{},"会使用切片。",[186,154767,154768],{},"会用集合去重。",[186,154770,154771],{},"会处理列表嵌套字典。",[19,154773,154774],{},"文件和模块：",[183,154776,154777,154780,154783,154786,154789],{},[186,154778,154779],{},"会读写文本文件。",[186,154781,154782],{},"会读写 JSON。",[186,154784,154785],{},"会捕获常见异常。",[186,154787,154788],{},"会导入模块和第三方包。",[186,154790,154791],{},"会创建简单包结构。",[19,154793,154794],{},"项目能力：",[183,154796,154797,154800,154803,154806,154809],{},[186,154798,154799],{},"能把代码拆成函数。",[186,154801,154802],{},"能把数据保存到文件。",[186,154804,154805],{},"能处理用户输入错误。",[186,154807,154808],{},"能写一个完整菜单程序。",[186,154810,154811],{},"能用 pyecharts 生成图表。",[14,154813,154815],{"id":154814},"_1211-推荐练习顺序","12.11 推荐练习顺序",[183,154817,154818,154821,154824,154827,154830,154833,154836,154839],{},[186,154819,154820],{},"猜数字游戏。",[186,154822,154823],{},"ATM 菜单程序。",[186,154825,154826],{},"学生成绩统计。",[186,154828,154829],{},"学生管理系统函数版。",[186,154831,154832],{},"学生管理系统文件持久化版。",[186,154834,154835],{},"学生管理系统面向对象版。",[186,154837,154838],{},"销售数据统计。",[186,154840,154841],{},"销售数据可视化。",[14,154843,154845],{"id":154844},"_1212-常见学习误区","12.12 常见学习误区",[183,154847,154848,154851,154854,154857,154860,154863,154866],{},[186,154849,154850],{},"只看视频不敲代码。",[186,154852,154853],{},"一报错就复制错误去搜，不先读报错位置。",[186,154855,154856],{},"变量名随便写，后续自己看不懂。",[186,154858,154859],{},"所有代码都写在一个文件一个函数里。",[186,154861,154862],{},"不保存练习代码，复习时没有材料。",[186,154864,154865],{},"还没掌握列表字典就急着学框架。",[186,154867,154868],{},"不会读官方文档，只依赖教程。",[14,154870,154872],{"id":154871},"_1213-如何读报错","12.13 如何读报错",[19,154874,154875],{},"报错通常从下往上看最后几行。",[19,154877,15250],{},[220,154879,154882],{"className":154880,"code":154881,"language":5302,"meta":141},[5300],"ValueError: invalid literal for int() with base 10: 'abc'\n",[30,154883,154881],{"__ignoreMap":141},[19,154885,24715],{},[183,154887,154888,154894,154904],{},[186,154889,154890,154891,78],{},"异常类型是 ",[30,154892,154893],{},"ValueError",[186,154895,107460,154896,154899,154900,154903],{},[30,154897,154898],{},"int()"," 无法把 ",[30,154901,154902],{},"'abc'"," 转成整数。",[186,154905,154906],{},"应该检查输入内容或增加异常处理。",[19,154908,154909],{},"再看文件名和行号：",[220,154911,154914],{"className":154912,"code":154913,"language":5302,"meta":141},[5300],"File \"main.py\", line 10, in \u003Cmodule>\n",[30,154915,154913],{"__ignoreMap":141},[19,154917,154918,154919,154921],{},"表示错误发生在 ",[30,154920,154666],{}," 第 10 行。",[14,154923,154925],{"id":154924},"_1214-后续学习方向","12.14 后续学习方向",[19,154927,154928],{},"Python 基础完成后，可以按兴趣选择方向：",[183,154930,154931,154943,154952,154964,154975,154984,154994],{},[186,154932,154933,154934,451,154937,451,154940,78],{},"自动化办公：",[30,154935,154936],{},"openpyxl",[30,154938,154939],{},"python-docx",[30,154941,154942],{},"pdfplumber",[186,154944,154945,154946,451,154948,451,154950,78],{},"数据分析：",[30,154947,100741],{},[30,154949,146244],{},[30,154951,146252],{},[186,154953,154954,154955,451,154958,451,154961,78],{},"Web 后端：",[30,154956,154957],{},"Flask",[30,154959,154960],{},"FastAPI",[30,154962,154963],{},"Django",[186,154965,154966,154967,451,154969,451,154972,78],{},"爬虫：",[30,154968,146229],{},[30,154970,154971],{},"BeautifulSoup",[30,154973,154974],{},"Scrapy",[186,154976,154977,154978,451,154980,154983],{},"测试开发：",[30,154979,146276],{},[30,154981,154982],{},"selenium","、接口测试。",[186,154985,154986,154987,451,154989,451,154991,78],{},"人工智能：",[30,154988,100741],{},[30,154990,146244],{},[30,154992,154993],{},"pytorch",[186,154995,154996,154997,451,154999,451,155002,78],{},"运维脚本：",[30,154998,145845],{},[30,155000,155001],{},"subprocess",[30,155003,155004],{},"paramiko",[19,155006,155007],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,155009,155011],{"id":155010},"_1215-结课练习","12.15 结课练习",[183,155013,155014,155017,155020,155023,155026,155029,155032,155035],{},[186,155015,155016],{},"完成函数版学生管理系统。",[186,155018,155019],{},"给学生管理系统增加 JSON 持久化。",[186,155021,155022],{},"给学生管理系统增加异常处理。",[186,155024,155025],{},"把学生管理系统改成面向对象版。",[186,155027,155028],{},"使用 pyecharts 绘制学生成绩柱状图。",[186,155030,155031],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[186,155033,155034],{},"按品类统计销售额并绘制柱状图。",[186,155036,155037],{},"写一份自己的 Python 学习路线图。",[5241,155039,155040],{},"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":141,"searchDepth":142,"depth":142,"links":155042},[155043,155044,155047,155048,155049,155055,155056,155057,155058,155059,155060,155061,155062,155063,155064],{"id":151759,"depth":142,"text":151760},{"id":151809,"depth":142,"text":151810,"children":155045},[155046],{"id":151813,"depth":1293,"text":151814},{"id":151852,"depth":142,"text":151853},{"id":153326,"depth":142,"text":153327},{"id":153664,"depth":142,"text":153665,"children":155050},[155051,155052,155053,155054],{"id":153668,"depth":1293,"text":153669},{"id":153808,"depth":1293,"text":153809},{"id":153898,"depth":1293,"text":153899},{"id":153984,"depth":1293,"text":153985},{"id":154025,"depth":142,"text":154026},{"id":154218,"depth":142,"text":154219},{"id":154455,"depth":142,"text":154456},{"id":154646,"depth":142,"text":154647},{"id":154688,"depth":142,"text":154689},{"id":154814,"depth":142,"text":154815},{"id":154844,"depth":142,"text":154845},{"id":154871,"depth":142,"text":154872},{"id":154924,"depth":142,"text":154925},{"id":155010,"depth":142,"text":155011},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151751,"description":154},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155071,"title":155072,"body":155073,"description":154,"extension":155,"meta":157542,"navigation":157,"path":157543,"seo":157544,"stem":157545,"__hash__":157546},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155074,"toc":157517},[155075,155078,155082,155085,155088,155108,155111,155134,155137,155140,155162,155165,155187,155191,155194,155234,155237,155358,155362,155365,155405,155408,155432,155435,155439,155442,155456,155489,155492,155527,155530,155553,155556,155589,155592,155594,155600,155675,155678,155684,155701,155741,155745,155748,155794,155796,155834,155837,155872,155875,155910,155913,155945,155948,155967,155971,155975,156088,156090,156165,156169,156215,156218,156244,156253,156257,156260,156323,156331,156359,156363,156403,156468,156472,156475,156514,156517,156562,156565,156626,156630,156657,156660,156688,156691,156695,156699,156764,156767,156805,156808,156840,156844,156943,156947,156950,157023,157026,157074,157078,157084,157124,157127,157174,157177,157226,157230,157232,157246,157248,157429,157433,157460,157480,157487,157491,157508,157514],[10,155076,155072],{"id":155077},"_2-基础语法变量与字符串",[14,155079,155081],{"id":155080},"_21-注释","2.1 注释",[19,155083,155084],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,155086,155087],{},"单行注释：",[220,155089,155091],{"className":30493,"code":155090,"language":30495,"meta":141,"style":141},"# 这是单行注释\nprint(\"hello\")\n",[30,155092,155093,155098],{"__ignoreMap":141},[228,155094,155095],{"class":230,"line":231},[228,155096,155097],{"class":297},"# 这是单行注释\n",[228,155099,155100,155102,155104,155106],{"class":230,"line":142},[228,155101,30530],{"class":287},[228,155103,239],{"class":238},[228,155105,5959],{"class":343},[228,155107,245],{"class":238},[19,155109,155110],{},"多行说明常用三引号：",[220,155112,155114],{"className":30493,"code":155113,"language":30495,"meta":141,"style":141},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[30,155115,155116,155120,155125,155130],{"__ignoreMap":141},[228,155117,155118],{"class":230,"line":231},[228,155119,95813],{"class":343},[228,155121,155122],{"class":230,"line":142},[228,155123,155124],{"class":343},"这是多行说明。\n",[228,155126,155127],{"class":230,"line":1293},[228,155128,155129],{"class":343},"常用于文件顶部说明、函数说明等。\n",[228,155131,155132],{"class":230,"line":1308},[228,155133,95813],{"class":343},[19,155135,155136],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,155138,155139],{},"不好：",[220,155141,155143],{"className":30493,"code":155142,"language":30495,"meta":141,"style":141},"# age 加 1\nage = age + 1\n",[30,155144,155145,155150],{"__ignoreMap":141},[228,155146,155147],{"class":230,"line":231},[228,155148,155149],{"class":297},"# age 加 1\n",[228,155151,155152,155154,155156,155158,155160],{"class":230,"line":142},[228,155153,146605],{"class":238},[228,155155,284],{"class":234},[228,155157,15822],{"class":238},[228,155159,719],{"class":234},[228,155161,55814],{"class":287},[19,155163,155164],{},"较好：",[220,155166,155168],{"className":30493,"code":155167,"language":30495,"meta":141,"style":141},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[30,155169,155170,155175],{"__ignoreMap":141},[228,155171,155172],{"class":230,"line":231},[228,155173,155174],{"class":297},"# 用户过完生日后，年龄增加一岁\n",[228,155176,155177,155179,155181,155183,155185],{"class":230,"line":142},[228,155178,146605],{"class":238},[228,155180,284],{"class":234},[228,155182,15822],{"class":238},[228,155184,719],{"class":234},[228,155186,55814],{"class":287},[14,155188,155190],{"id":155189},"_22-字面量","2.2 字面量",[19,155192,155193],{},"字面量就是代码中直接写出来的数据。",[220,155195,155197],{"className":30493,"code":155196,"language":30495,"meta":141,"style":141},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[30,155198,155199,155206,155213,155220,155227],{"__ignoreMap":141},[228,155200,155201,155203],{"class":230,"line":231},[228,155202,549],{"class":287},[228,155204,155205],{"class":297},"          # 整数\n",[228,155207,155208,155210],{"class":230,"line":142},[228,155209,288],{"class":287},[228,155211,155212],{"class":297},"         # 小数\n",[228,155214,155215,155217],{"class":230,"line":1293},[228,155216,5959],{"class":343},[228,155218,155219],{"class":297},"      # 字符串\n",[228,155221,155222,155224],{"class":230,"line":1308},[228,155223,31591],{"class":287},[228,155225,155226],{"class":297},"         # 布尔值\n",[228,155228,155229,155231],{"class":230,"line":1314},[228,155230,95801],{"class":287},[228,155232,155233],{"class":297},"         # 空值\n",[19,155235,155236],{},"常见字面量类型：",[376,155238,155239,155249],{},[379,155240,155241],{},[382,155242,155243,155245,155247],{},[385,155244,23852],{},[385,155246,27608],{},[385,155248,25985],{},[423,155250,155251,155262,155273,155284,155296,155308,155320,155333,155345],{},[382,155252,155253,155255,155259],{},[428,155254,242],{},[428,155256,155257],{},[30,155258,549],{},[428,155260,155261],{},"整数",[382,155263,155264,155266,155270],{},[428,155265,278],{},[428,155267,155268],{},[30,155269,288],{},[428,155271,155272],{},"浮点数",[382,155274,155275,155277,155281],{},[428,155276,1413],{},[428,155278,155279],{},[30,155280,5959],{},[428,155282,155283],{},"字符串",[382,155285,155286,155288,155294],{},[428,155287,1468],{},[428,155289,155290,451,155292],{},[30,155291,31591],{},[30,155293,34102],{},[428,155295,66130],{},[382,155297,155298,155301,155305],{},[428,155299,155300],{},"NoneType",[428,155302,155303],{},[30,155304,95801],{},[428,155306,155307],{},"空值",[382,155309,155310,155312,155317],{},[428,155311,154129],{},[428,155313,155314],{},[30,155315,155316],{},"[1, 2, 3]",[428,155318,155319],{},"列表",[382,155321,155322,155325,155330],{},[428,155323,155324],{},"tuple",[428,155326,155327],{},[30,155328,155329],{},"(1, 2, 3)",[428,155331,155332],{},"元组",[382,155334,155335,155337,155342],{},[428,155336,114661],{},[428,155338,155339],{},[30,155340,155341],{},"{\"name\": \"张三\"}",[428,155343,155344],{},"字典",[382,155346,155347,155350,155355],{},[428,155348,155349],{},"set",[428,155351,155352],{},[30,155353,155354],{},"{1, 2, 3}",[428,155356,155357],{},"集合",[14,155359,155361],{"id":155360},"_23-变量","2.3 变量",[19,155363,155364],{},"变量是保存数据的名字。",[220,155366,155368],{"className":30493,"code":155367,"language":30495,"meta":141,"style":141},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[30,155369,155370,155378,155386,155396],{"__ignoreMap":141},[228,155371,155372,155374,155376],{"class":230,"line":231},[228,155373,146595],{"class":238},[228,155375,284],{"class":234},[228,155377,149412],{"class":343},[228,155379,155380,155382,155384],{"class":230,"line":142},[228,155381,146605],{"class":238},[228,155383,284],{"class":234},[228,155385,146610],{"class":287},[228,155387,155388,155391,155393],{"class":230,"line":1293},[228,155389,155390],{"class":238},"height ",[228,155392,284],{"class":234},[228,155394,155395],{"class":287}," 1.75\n",[228,155397,155398,155401,155403],{"class":230,"line":1308},[228,155399,155400],{"class":238},"is_student ",[228,155402,284],{"class":234},[228,155404,153658],{"class":287},[19,155406,155407],{},"Python 的变量不需要提前声明类型：",[220,155409,155411],{"className":30493,"code":155410,"language":30495,"meta":141,"style":141},"score = 100\nscore = \"满分\"\n",[30,155412,155413,155423],{"__ignoreMap":141},[228,155414,155415,155418,155420],{"class":230,"line":231},[228,155416,155417],{"class":238},"score ",[228,155419,284],{"class":234},[228,155421,155422],{"class":287}," 100\n",[228,155424,155425,155427,155429],{"class":230,"line":142},[228,155426,155417],{"class":238},[228,155428,284],{"class":234},[228,155430,155431],{"class":343}," \"满分\"\n",[19,155433,155434],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,155436,155438],{"id":155437},"_24-变量命名规则","2.4 变量命名规则",[19,155440,155441],{},"硬性规则：",[183,155443,155444,155447,155450,155453],{},[186,155445,155446],{},"只能由字母、数字、下划线组成。",[186,155448,155449],{},"不能以数字开头。",[186,155451,155452],{},"不能使用 Python 关键字。",[186,155454,155455],{},"区分大小写。",[220,155457,155459],{"className":30493,"code":155458,"language":30495,"meta":141,"style":141},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[30,155460,155461,155470,155479],{"__ignoreMap":141},[228,155462,155463,155466,155468],{"class":230,"line":231},[228,155464,155465],{"class":238},"user_name ",[228,155467,284],{"class":234},[228,155469,146600],{"class":343},[228,155471,155472,155475,155477],{"class":230,"line":142},[228,155473,155474],{"class":238},"age2 ",[228,155476,284],{"class":234},[228,155478,146610],{"class":287},[228,155480,155481,155484,155486],{"class":230,"line":1293},[228,155482,155483],{"class":238},"_token ",[228,155485,284],{"class":234},[228,155487,155488],{"class":343}," \"abc\"\n",[19,155490,155491],{},"错误写法：",[220,155493,155495],{"className":30493,"code":155494,"language":30495,"meta":141,"style":141},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[30,155496,155497,155506,155518],{"__ignoreMap":141},[228,155498,155499,155502,155504],{"class":230,"line":231},[228,155500,155501],{"class":77518},"2age",[228,155503,13679],{"class":234},[228,155505,146610],{"class":287},[228,155507,155508,155510,155512,155514,155516],{"class":230,"line":142},[228,155509,131643],{"class":238},[228,155511,770],{"class":234},[228,155513,146595],{"class":238},[228,155515,284],{"class":234},[228,155517,146600],{"class":343},[228,155519,155520,155522,155524],{"class":230,"line":1293},[228,155521,14809],{"class":234},[228,155523,13679],{"class":234},[228,155525,155526],{"class":343}," \"一班\"\n",[19,155528,155529],{},"查看关键字：",[220,155531,155533],{"className":30493,"code":155532,"language":30495,"meta":141,"style":141},"import keyword\n\nprint(keyword.kwlist)\n",[30,155534,155535,155542,155546],{"__ignoreMap":141},[228,155536,155537,155539],{"class":230,"line":231},[228,155538,30507],{"class":234},[228,155540,155541],{"class":238}," keyword\n",[228,155543,155544],{"class":230,"line":142},[228,155545,2514],{"emptyLinePlaceholder":157},[228,155547,155548,155550],{"class":230,"line":1293},[228,155549,30530],{"class":287},[228,155551,155552],{"class":238},"(keyword.kwlist)\n",[19,155554,155555],{},"推荐命名风格：",[220,155557,155559],{"className":30493,"code":155558,"language":30495,"meta":141,"style":141},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[30,155560,155561,155570,155580],{"__ignoreMap":141},[228,155562,155563,155566,155568],{"class":230,"line":231},[228,155564,155565],{"class":238},"student_name ",[228,155567,284],{"class":234},[228,155569,149412],{"class":343},[228,155571,155572,155575,155577],{"class":230,"line":142},[228,155573,155574],{"class":238},"total_price ",[228,155576,284],{"class":234},[228,155578,155579],{"class":287}," 99.8\n",[228,155581,155582,155585,155587],{"class":230,"line":1293},[228,155583,155584],{"class":238},"is_finished ",[228,155586,284],{"class":234},[228,155588,125922],{"class":287},[19,155590,155591],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,155593,50847],{"id":50846},[19,155595,104481,155596,155599],{},[30,155597,155598],{},"type()"," 查看数据类型：",[220,155601,155603],{"className":30493,"code":155602,"language":30495,"meta":141,"style":141},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[30,155604,155605,155619,155633,155647,155661],{"__ignoreMap":141},[228,155606,155607,155609,155611,155613,155615,155617],{"class":230,"line":231},[228,155608,30530],{"class":287},[228,155610,239],{"class":238},[228,155612,103222],{"class":287},[228,155614,239],{"class":238},[228,155616,549],{"class":287},[228,155618,30612],{"class":238},[228,155620,155621,155623,155625,155627,155629,155631],{"class":230,"line":142},[228,155622,30530],{"class":287},[228,155624,239],{"class":238},[228,155626,103222],{"class":287},[228,155628,239],{"class":238},[228,155630,288],{"class":287},[228,155632,30612],{"class":238},[228,155634,155635,155637,155639,155641,155643,155645],{"class":230,"line":1293},[228,155636,30530],{"class":287},[228,155638,239],{"class":238},[228,155640,103222],{"class":287},[228,155642,239],{"class":238},[228,155644,5959],{"class":343},[228,155646,30612],{"class":238},[228,155648,155649,155651,155653,155655,155657,155659],{"class":230,"line":1308},[228,155650,30530],{"class":287},[228,155652,239],{"class":238},[228,155654,103222],{"class":287},[228,155656,239],{"class":238},[228,155658,31591],{"class":287},[228,155660,30612],{"class":238},[228,155662,155663,155665,155667,155669,155671,155673],{"class":230,"line":1314},[228,155664,30530],{"class":287},[228,155666,239],{"class":238},[228,155668,103222],{"class":287},[228,155670,239],{"class":238},[228,155672,95801],{"class":287},[228,155674,30612],{"class":238},[19,155676,155677],{},"输出类似：",[220,155679,155682],{"className":155680,"code":155681,"language":5302,"meta":141},[5300],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[30,155683,155681],{"__ignoreMap":141},[19,155685,9140,155686,107398,155688,155690,155691,155693,155694,21615,155696,155693,155698,155700],{},[30,155687,1468],{},[30,155689,242],{}," 的子类，",[30,155692,31591],{}," 可以当作 ",[30,155695,456],{},[30,155697,34102],{},[30,155699,430],{},"，但业务代码中不要滥用。",[220,155702,155704],{"className":30493,"code":155703,"language":30495,"meta":141,"style":141},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[30,155705,155706,155724],{"__ignoreMap":141},[228,155707,155708,155710,155712,155714,155716,155718,155721],{"class":230,"line":231},[228,155709,30530],{"class":287},[228,155711,239],{"class":238},[228,155713,31591],{"class":287},[228,155715,45681],{"class":234},[228,155717,25234],{"class":287},[228,155719,155720],{"class":238},")   ",[228,155722,155723],{"class":297},"# 2\n",[228,155725,155726,155728,155730,155732,155734,155736,155738],{"class":230,"line":142},[228,155727,30530],{"class":287},[228,155729,239],{"class":238},[228,155731,34102],{"class":287},[228,155733,45681],{"class":234},[228,155735,25234],{"class":287},[228,155737,45923],{"class":238},[228,155739,155740],{"class":297},"# 1\n",[14,155742,155744],{"id":155743},"_26-类型转换","2.6 类型转换",[19,155746,155747],{},"常用转换函数：",[220,155749,155751],{"className":30493,"code":155750,"language":30495,"meta":141,"style":141},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[30,155752,155753,155763,155774,155784],{"__ignoreMap":141},[228,155754,155755,155757,155759,155761],{"class":230,"line":231},[228,155756,242],{"class":287},[228,155758,239],{"class":238},[228,155760,54431],{"class":343},[228,155762,245],{"class":238},[228,155764,155765,155767,155769,155772],{"class":230,"line":142},[228,155766,278],{"class":287},[228,155768,239],{"class":238},[228,155770,155771],{"class":343},"\"3.14\"",[228,155773,245],{"class":238},[228,155775,155776,155778,155780,155782],{"class":230,"line":1293},[228,155777,1413],{"class":287},[228,155779,239],{"class":238},[228,155781,549],{"class":287},[228,155783,245],{"class":238},[228,155785,155786,155788,155790,155792],{"class":230,"line":1308},[228,155787,1468],{"class":287},[228,155789,239],{"class":238},[228,155791,456],{"class":287},[228,155793,245],{"class":238},[19,155795,15250],{},[220,155797,155799],{"className":30493,"code":155798,"language":30495,"meta":141,"style":141},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[30,155800,155801,155810,155821],{"__ignoreMap":141},[228,155802,155803,155805,155807],{"class":230,"line":231},[228,155804,146605],{"class":238},[228,155806,284],{"class":234},[228,155808,155809],{"class":343}," \"18\"\n",[228,155811,155812,155814,155816,155818],{"class":230,"line":142},[228,155813,146605],{"class":238},[228,155815,284],{"class":234},[228,155817,2496],{"class":287},[228,155819,155820],{"class":238},"(age)\n",[228,155822,155823,155825,155828,155830,155832],{"class":230,"line":1293},[228,155824,30530],{"class":287},[228,155826,155827],{"class":238},"(age ",[228,155829,719],{"class":234},[228,155831,25234],{"class":287},[228,155833,245],{"class":238},[19,155835,155836],{},"输入得到的内容永远是字符串：",[220,155838,155840],{"className":30493,"code":155839,"language":30495,"meta":141,"style":141},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[30,155841,155842,155858],{"__ignoreMap":141},[228,155843,155844,155847,155849,155851,155853,155856],{"class":230,"line":231},[228,155845,155846],{"class":238},"num ",[228,155848,284],{"class":234},[228,155850,60720],{"class":287},[228,155852,239],{"class":238},[228,155854,155855],{"class":343},"\"请输入数字:\"",[228,155857,245],{"class":238},[228,155859,155860,155862,155864,155866,155869],{"class":230,"line":142},[228,155861,30530],{"class":287},[228,155863,239],{"class":238},[228,155865,103222],{"class":287},[228,155867,155868],{"class":238},"(num))  ",[228,155870,155871],{"class":297},"# str\n",[19,155873,155874],{},"如果要做数学运算，必须转换：",[220,155876,155878],{"className":30493,"code":155877,"language":30495,"meta":141,"style":141},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[30,155879,155880,155898],{"__ignoreMap":141},[228,155881,155882,155884,155886,155888,155890,155892,155894,155896],{"class":230,"line":231},[228,155883,155846],{"class":238},[228,155885,284],{"class":234},[228,155887,2496],{"class":287},[228,155889,239],{"class":238},[228,155891,53936],{"class":287},[228,155893,239],{"class":238},[228,155895,155855],{"class":343},[228,155897,30612],{"class":238},[228,155899,155900,155902,155904,155906,155908],{"class":230,"line":142},[228,155901,30530],{"class":287},[228,155903,45734],{"class":238},[228,155905,719],{"class":234},[228,155907,2152],{"class":287},[228,155909,245],{"class":238},[19,155911,155912],{},"常见错误：",[220,155914,155916],{"className":30493,"code":155915,"language":30495,"meta":141,"style":141},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[30,155917,155918,155931],{"__ignoreMap":141},[228,155919,155920,155922,155924,155926,155928],{"class":230,"line":231},[228,155921,242],{"class":287},[228,155923,239],{"class":238},[228,155925,155771],{"class":343},[228,155927,155720],{"class":238},[228,155929,155930],{"class":297},"# 错误\n",[228,155932,155933,155935,155937,155940,155943],{"class":230,"line":142},[228,155934,242],{"class":287},[228,155936,239],{"class":238},[228,155938,155939],{"class":343},"\"abc\"",[228,155941,155942],{"class":238},")    ",[228,155944,155930],{"class":297},[19,155946,155947],{},"正确写法：",[220,155949,155951],{"className":30493,"code":155950,"language":30495,"meta":141,"style":141},"num = float(\"3.14\")\n",[30,155952,155953],{"__ignoreMap":141},[228,155954,155955,155957,155959,155961,155963,155965],{"class":230,"line":231},[228,155956,155846],{"class":238},[228,155958,284],{"class":234},[228,155960,109912],{"class":287},[228,155962,239],{"class":238},[228,155964,155771],{"class":343},[228,155966,245],{"class":238},[14,155968,155970],{"id":155969},"_27-运算符","2.7 运算符",[200,155972,155974],{"id":155973},"_271-算术运算符","2.7.1 算术运算符",[376,155976,155977,155988],{},[379,155978,155979],{},[382,155980,155981,155984,155986],{},[385,155982,155983],{},"运算符",[385,155985,25985],{},[385,155987,27608],{},[423,155989,155990,156004,156018,156032,156046,156060,156074],{},[382,155991,155992,155996,155999],{},[428,155993,155994],{},[30,155995,719],{},[428,155997,155998],{},"加法",[428,156000,156001],{},[30,156002,156003],{},"1 + 2",[382,156005,156006,156010,156013],{},[428,156007,156008],{},[30,156009,770],{},[428,156011,156012],{},"减法",[428,156014,156015],{},[30,156016,156017],{},"5 - 3",[382,156019,156020,156024,156027],{},[428,156021,156022],{},[30,156023,693],{},[428,156025,156026],{},"乘法",[428,156028,156029],{},[30,156030,156031],{},"2 * 3",[382,156033,156034,156038,156041],{},[428,156035,156036],{},[30,156037,822],{},[428,156039,156040],{},"除法，结果是浮点数",[428,156042,156043],{},[30,156044,156045],{},"5 \u002F 2",[382,156047,156048,156052,156055],{},[428,156049,156050],{},[30,156051,33444],{},[428,156053,156054],{},"整除",[428,156056,156057],{},[30,156058,156059],{},"5 \u002F\u002F 2",[382,156061,156062,156066,156069],{},[428,156063,156064],{},[30,156065,566],{},[428,156067,156068],{},"取余",[428,156070,156071],{},[30,156072,156073],{},"5 % 2",[382,156075,156076,156080,156083],{},[428,156077,156078],{},[30,156079,10776],{},[428,156081,156082],{},"幂运算",[428,156084,156085],{},[30,156086,156087],{},"2 ** 3",[19,156089,15250],{},[220,156091,156093],{"className":30493,"code":156092,"language":30495,"meta":141,"style":141},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[30,156094,156095,156113,156130,156147],{"__ignoreMap":141},[228,156096,156097,156099,156101,156103,156106,156108,156110],{"class":230,"line":231},[228,156098,30530],{"class":287},[228,156100,239],{"class":238},[228,156102,557],{"class":287},[228,156104,156105],{"class":234}," \u002F",[228,156107,14870],{"class":287},[228,156109,155720],{"class":238},[228,156111,156112],{"class":297},"# 2.5\n",[228,156114,156115,156117,156119,156121,156124,156126,156128],{"class":230,"line":142},[228,156116,30530],{"class":287},[228,156118,239],{"class":238},[228,156120,557],{"class":287},[228,156122,156123],{"class":234}," \u002F\u002F",[228,156125,14870],{"class":287},[228,156127,45923],{"class":238},[228,156129,155723],{"class":297},[228,156131,156132,156134,156136,156138,156141,156143,156145],{"class":230,"line":1293},[228,156133,30530],{"class":287},[228,156135,239],{"class":238},[228,156137,557],{"class":287},[228,156139,156140],{"class":234}," %",[228,156142,14870],{"class":287},[228,156144,155720],{"class":238},[228,156146,155740],{"class":297},[228,156148,156149,156151,156153,156155,156158,156160,156162],{"class":230,"line":1308},[228,156150,30530],{"class":287},[228,156152,239],{"class":238},[228,156154,316],{"class":287},[228,156156,156157],{"class":234}," **",[228,156159,78185],{"class":287},[228,156161,45923],{"class":238},[228,156163,156164],{"class":297},"# 8\n",[200,156166,156168],{"id":156167},"_272-赋值运算符","2.7.2 赋值运算符",[220,156170,156172],{"className":30493,"code":156171,"language":30495,"meta":141,"style":141},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[30,156173,156174,156182,156190,156198,156206],{"__ignoreMap":141},[228,156175,156176,156178,156180],{"class":230,"line":231},[228,156177,155846],{"class":238},[228,156179,284],{"class":234},[228,156181,58543],{"class":287},[228,156183,156184,156186,156188],{"class":230,"line":142},[228,156185,155846],{"class":238},[228,156187,9592],{"class":234},[228,156189,54542],{"class":287},[228,156191,156192,156194,156196],{"class":230,"line":1293},[228,156193,155846],{"class":238},[228,156195,150311],{"class":234},[228,156197,47838],{"class":287},[228,156199,156200,156202,156204],{"class":230,"line":1308},[228,156201,155846],{"class":238},[228,156203,137207],{"class":234},[228,156205,120151],{"class":287},[228,156207,156208,156210,156213],{"class":230,"line":1314},[228,156209,155846],{"class":238},[228,156211,156212],{"class":234},"\u002F=",[228,156214,47838],{"class":287},[19,156216,156217],{},"等价关系：",[220,156219,156221],{"className":30493,"code":156220,"language":30495,"meta":141,"style":141},"num += 1\nnum = num + 1\n",[30,156222,156223,156231],{"__ignoreMap":141},[228,156224,156225,156227,156229],{"class":230,"line":231},[228,156226,155846],{"class":238},[228,156228,9592],{"class":234},[228,156230,55814],{"class":287},[228,156232,156233,156235,156237,156240,156242],{"class":230,"line":142},[228,156234,155846],{"class":238},[228,156236,284],{"class":234},[228,156238,156239],{"class":238}," num ",[228,156241,719],{"class":234},[228,156243,55814],{"class":287},[19,156245,156246,156247,101133,156250,78],{},"Python 没有 ",[30,156248,156249],{},"num++",[30,156251,156252],{},"num--",[200,156254,156256],{"id":156255},"_273-比较运算符","2.7.3 比较运算符",[19,156258,156259],{},"比较运算结果是布尔值。",[220,156261,156263],{"className":30493,"code":156262,"language":30495,"meta":141,"style":141},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[30,156264,156265,156279,156294,156308],{"__ignoreMap":141},[228,156266,156267,156269,156271,156273,156275,156277],{"class":230,"line":231},[228,156268,30530],{"class":287},[228,156270,239],{"class":238},[228,156272,684],{"class":287},[228,156274,26338],{"class":234},[228,156276,2262],{"class":287},[228,156278,245],{"class":238},[228,156280,156281,156283,156285,156287,156290,156292],{"class":230,"line":142},[228,156282,30530],{"class":287},[228,156284,239],{"class":238},[228,156286,684],{"class":287},[228,156288,156289],{"class":234}," >=",[228,156291,2152],{"class":287},[228,156293,245],{"class":238},[228,156295,156296,156298,156300,156302,156304,156306],{"class":230,"line":1293},[228,156297,30530],{"class":287},[228,156299,239],{"class":238},[228,156301,684],{"class":287},[228,156303,101674],{"class":234},[228,156305,2197],{"class":287},[228,156307,245],{"class":238},[228,156309,156310,156312,156314,156316,156319,156321],{"class":230,"line":1308},[228,156311,30530],{"class":287},[228,156313,239],{"class":238},[228,156315,684],{"class":287},[228,156317,156318],{"class":234}," !=",[228,156320,2197],{"class":287},[228,156322,245],{"class":238},[19,156324,156325,156326,156328,156329,78],{},"注意：判断相等用 ",[30,156327,3063],{},"，赋值用 ",[30,156330,284],{},[220,156332,156334],{"className":30493,"code":156333,"language":30495,"meta":141,"style":141},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[30,156335,156336,156348],{"__ignoreMap":141},[228,156337,156338,156340,156342,156345],{"class":230,"line":231},[228,156339,146605],{"class":238},[228,156341,284],{"class":234},[228,156343,156344],{"class":287}," 18",[228,156346,156347],{"class":297},"       # 赋值\n",[228,156349,156350,156352,156354,156356],{"class":230,"line":142},[228,156351,146605],{"class":238},[228,156353,3063],{"class":234},[228,156355,156344],{"class":287},[228,156357,156358],{"class":297},"      # 判断是否相等\n",[200,156360,156362],{"id":156361},"_274-逻辑运算符","2.7.4 逻辑运算符",[376,156364,156365,156373],{},[379,156366,156367],{},[382,156368,156369,156371],{},[385,156370,155983],{},[385,156372,25985],{},[423,156374,156375,156384,156393],{},[382,156376,156377,156381],{},[428,156378,156379],{},[30,156380,30577],{},[428,156382,156383],{},"并且",[382,156385,156386,156390],{},[428,156387,156388],{},[30,156389,115205],{},[428,156391,156392],{},"或者",[382,156394,156395,156400],{},[428,156396,156397],{},[30,156398,156399],{},"not",[428,156401,156402],{},"取反",[220,156404,156406],{"className":30493,"code":156405,"language":30495,"meta":141,"style":141},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[30,156407,156408,156416,156425,156429,156444,156458],{"__ignoreMap":141},[228,156409,156410,156412,156414],{"class":230,"line":231},[228,156411,146605],{"class":238},[228,156413,284],{"class":234},[228,156415,88180],{"class":287},[228,156417,156418,156421,156423],{"class":230,"line":142},[228,156419,156420],{"class":238},"has_ticket ",[228,156422,284],{"class":234},[228,156424,153658],{"class":287},[228,156426,156427],{"class":230,"line":1293},[228,156428,2514],{"emptyLinePlaceholder":157},[228,156430,156431,156433,156435,156437,156439,156441],{"class":230,"line":1308},[228,156432,30530],{"class":287},[228,156434,155827],{"class":238},[228,156436,1824],{"class":234},[228,156438,156344],{"class":287},[228,156440,120544],{"class":234},[228,156442,156443],{"class":238}," has_ticket)\n",[228,156445,156446,156448,156450,156452,156454,156456],{"class":230,"line":1314},[228,156447,30530],{"class":287},[228,156449,155827],{"class":238},[228,156451,1148],{"class":234},[228,156453,156344],{"class":287},[228,156455,114316],{"class":234},[228,156457,156443],{"class":238},[228,156459,156460,156462,156464,156466],{"class":230,"line":1328},[228,156461,30530],{"class":287},[228,156463,239],{"class":238},[228,156465,156399],{"class":234},[228,156467,156443],{"class":238},[14,156469,156471],{"id":156470},"_28-字符串定义","2.8 字符串定义",[19,156473,156474],{},"三种常见写法：",[220,156476,156478],{"className":30493,"code":156477,"language":30495,"meta":141,"style":141},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[30,156479,156480,156490,156499,156509],{"__ignoreMap":141},[228,156481,156482,156485,156487],{"class":230,"line":231},[228,156483,156484],{"class":238},"name1 ",[228,156486,284],{"class":234},[228,156488,156489],{"class":343}," '小明'\n",[228,156491,156492,156495,156497],{"class":230,"line":142},[228,156493,156494],{"class":238},"name2 ",[228,156496,284],{"class":234},[228,156498,149412],{"class":343},[228,156500,156501,156504,156506],{"class":230,"line":1293},[228,156502,156503],{"class":238},"text ",[228,156505,284],{"class":234},[228,156507,156508],{"class":343}," \"\"\"这是多行字符串\n",[228,156510,156511],{"class":230,"line":1308},[228,156512,156513],{"class":343},"可以换行\"\"\"\n",[19,156515,156516],{},"字符串中包含引号：",[220,156518,156520],{"className":30493,"code":156519,"language":30495,"meta":141,"style":141},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[30,156521,156522,156532,156542],{"__ignoreMap":141},[228,156523,156524,156527,156529],{"class":230,"line":231},[228,156525,156526],{"class":238},"msg ",[228,156528,284],{"class":234},[228,156530,156531],{"class":343}," \"他说:'你好'\"\n",[228,156533,156534,156537,156539],{"class":230,"line":142},[228,156535,156536],{"class":238},"msg2 ",[228,156538,284],{"class":234},[228,156540,156541],{"class":343}," '他说:\"你好\"'\n",[228,156543,156544,156547,156549,156552,156555,156558,156560],{"class":230,"line":1293},[228,156545,156546],{"class":238},"msg3 ",[228,156548,284],{"class":234},[228,156550,156551],{"class":343}," \"他说:",[228,156553,156554],{"class":287},"\\\"",[228,156556,156557],{"class":343},"你好",[228,156559,156554],{"class":287},[228,156561,25249],{"class":343},[19,156563,156564],{},"常见转义字符：",[376,156566,156567,156576],{},[379,156568,156569],{},[382,156570,156571,156574],{},[385,156572,156573],{},"写法",[385,156575,100815],{},[423,156577,156578,156588,156597,156607,156616],{},[382,156579,156580,156585],{},[428,156581,156582],{},[30,156583,156584],{},"\\n",[428,156586,156587],{},"换行",[382,156589,156590,156594],{},[428,156591,156592],{},[30,156593,1344],{},[428,156595,156596],{},"制表符",[382,156598,156599,156604],{},[428,156600,156601],{},[30,156602,156603],{},"\\\\",[428,156605,156606],{},"反斜杠",[382,156608,156609,156613],{},[428,156610,156611],{},[30,156612,156554],{},[428,156614,156615],{},"双引号",[382,156617,156618,156623],{},[428,156619,156620],{},[30,156621,156622],{},"\\'",[428,156624,156625],{},"单引号",[14,156627,156629],{"id":156628},"_29-字符串拼接","2.9 字符串拼接",[220,156631,156633],{"className":30493,"code":156632,"language":30495,"meta":141,"style":141},"name = \"小明\"\nprint(\"你好，\" + name)\n",[30,156634,156635,156643],{"__ignoreMap":141},[228,156636,156637,156639,156641],{"class":230,"line":231},[228,156638,146595],{"class":238},[228,156640,284],{"class":234},[228,156642,149412],{"class":343},[228,156644,156645,156647,156649,156652,156654],{"class":230,"line":142},[228,156646,30530],{"class":287},[228,156648,239],{"class":238},[228,156650,156651],{"class":343},"\"你好，\"",[228,156653,45681],{"class":234},[228,156655,156656],{"class":238}," name)\n",[19,156658,156659],{},"字符串只能和字符串拼接：",[220,156661,156663],{"className":30493,"code":156662,"language":30495,"meta":141,"style":141},"age = 18\nprint(\"年龄:\" + str(age))\n",[30,156664,156665,156673],{"__ignoreMap":141},[228,156666,156667,156669,156671],{"class":230,"line":231},[228,156668,146605],{"class":238},[228,156670,284],{"class":234},[228,156672,146610],{"class":287},[228,156674,156675,156677,156679,156681,156683,156685],{"class":230,"line":142},[228,156676,30530],{"class":287},[228,156678,239],{"class":238},[228,156680,146576],{"class":343},[228,156682,45681],{"class":234},[228,156684,74034],{"class":287},[228,156686,156687],{"class":238},"(age))\n",[19,156689,156690],{},"更推荐使用格式化字符串。",[14,156692,156694],{"id":156693},"_210-字符串格式化","2.10 字符串格式化",[200,156696,156698],{"id":156697},"_2101-百分号格式化","2.10.1 百分号格式化",[220,156700,156702],{"className":30493,"code":156701,"language":30495,"meta":141,"style":141},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[30,156703,156704,156712,156720,156729,156733],{"__ignoreMap":141},[228,156705,156706,156708,156710],{"class":230,"line":231},[228,156707,146595],{"class":238},[228,156709,284],{"class":234},[228,156711,149412],{"class":343},[228,156713,156714,156716,156718],{"class":230,"line":142},[228,156715,146605],{"class":238},[228,156717,284],{"class":234},[228,156719,146610],{"class":287},[228,156721,156722,156724,156726],{"class":230,"line":1293},[228,156723,155417],{"class":238},[228,156725,284],{"class":234},[228,156727,156728],{"class":287}," 95.5\n",[228,156730,156731],{"class":230,"line":1308},[228,156732,2514],{"emptyLinePlaceholder":157},[228,156734,156735,156737,156739,156742,156745,156748,156751,156754,156757,156759,156761],{"class":230,"line":1314},[228,156736,30530],{"class":287},[228,156738,239],{"class":238},[228,156740,156741],{"class":343},"\"姓名:",[228,156743,156744],{"class":287},"%s",[228,156746,156747],{"class":343}," 年龄:",[228,156749,156750],{"class":287},"%d",[228,156752,156753],{"class":343}," 分数:",[228,156755,156756],{"class":287},"%.1f",[228,156758,489],{"class":343},[228,156760,156140],{"class":234},[228,156762,156763],{"class":238}," (name, age, score))\n",[19,156765,156766],{},"常用占位符：",[376,156768,156769,156778],{},[379,156770,156771],{},[382,156772,156773,156776],{},[385,156774,156775],{},"占位符",[385,156777,25985],{},[423,156779,156780,156788,156796],{},[382,156781,156782,156786],{},[428,156783,156784],{},[30,156785,156744],{},[428,156787,155283],{},[382,156789,156790,156794],{},[428,156791,156792],{},[30,156793,156750],{},[428,156795,155261],{},[382,156797,156798,156803],{},[428,156799,156800],{},[30,156801,156802],{},"%f",[428,156804,155272],{},[19,156806,156807],{},"精度控制：",[220,156809,156811],{"className":30493,"code":156810,"language":30495,"meta":141,"style":141},"price = 12.3456\nprint(\"%.2f\" % price)\n",[30,156812,156813,156822],{"__ignoreMap":141},[228,156814,156815,156817,156819],{"class":230,"line":231},[228,156816,146740],{"class":238},[228,156818,284],{"class":234},[228,156820,156821],{"class":287}," 12.3456\n",[228,156823,156824,156826,156828,156830,156833,156835,156837],{"class":230,"line":142},[228,156825,30530],{"class":287},[228,156827,239],{"class":238},[228,156829,489],{"class":343},[228,156831,156832],{"class":287},"%.2f",[228,156834,489],{"class":343},[228,156836,156140],{"class":234},[228,156838,156839],{"class":238}," price)\n",[200,156841,156843],{"id":156842},"_2102-format方法","2.10.2 format方法",[220,156845,156847],{"className":30493,"code":156846,"language":30495,"meta":141,"style":141},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[30,156848,156849,156857,156865,156869,156888,156908],{"__ignoreMap":141},[228,156850,156851,156853,156855],{"class":230,"line":231},[228,156852,146595],{"class":238},[228,156854,284],{"class":234},[228,156856,149412],{"class":343},[228,156858,156859,156861,156863],{"class":230,"line":142},[228,156860,146605],{"class":238},[228,156862,284],{"class":234},[228,156864,146610],{"class":287},[228,156866,156867],{"class":230,"line":1293},[228,156868,2514],{"emptyLinePlaceholder":157},[228,156870,156871,156873,156875,156877,156879,156881,156883,156885],{"class":230,"line":1308},[228,156872,30530],{"class":287},[228,156874,239],{"class":238},[228,156876,156741],{"class":343},[228,156878,32574],{"class":287},[228,156880,156747],{"class":343},[228,156882,32574],{"class":287},[228,156884,489],{"class":343},[228,156886,156887],{"class":238},".format(name, age))\n",[228,156889,156890,156892,156894,156896,156899,156901,156904,156906],{"class":230,"line":1314},[228,156891,30530],{"class":287},[228,156893,239],{"class":238},[228,156895,156741],{"class":343},[228,156897,156898],{"class":287},"{0}",[228,156900,156747],{"class":343},[228,156902,156903],{"class":287},"{1}",[228,156905,489],{"class":343},[228,156907,156887],{"class":238},[228,156909,156910,156912,156914,156916,156919,156921,156924,156926,156929,156931,156933,156936,156938,156940],{"class":230,"line":1328},[228,156911,30530],{"class":287},[228,156913,239],{"class":238},[228,156915,156741],{"class":343},[228,156917,156918],{"class":287},"{name}",[228,156920,156747],{"class":343},[228,156922,156923],{"class":287},"{age}",[228,156925,489],{"class":343},[228,156927,156928],{"class":238},".format(",[228,156930,79925],{"class":5331},[228,156932,284],{"class":234},[228,156934,156935],{"class":238},"name, ",[228,156937,70336],{"class":5331},[228,156939,284],{"class":234},[228,156941,156942],{"class":238},"age))\n",[200,156944,156946],{"id":156945},"_2103-f-string","2.10.3 f-string",[19,156948,156949],{},"推荐写法：",[220,156951,156953],{"className":30493,"code":156952,"language":30495,"meta":141,"style":141},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[30,156954,156955,156963,156971,156979,156983],{"__ignoreMap":141},[228,156956,156957,156959,156961],{"class":230,"line":231},[228,156958,146595],{"class":238},[228,156960,284],{"class":234},[228,156962,149412],{"class":343},[228,156964,156965,156967,156969],{"class":230,"line":142},[228,156966,146605],{"class":238},[228,156968,284],{"class":234},[228,156970,146610],{"class":287},[228,156972,156973,156975,156977],{"class":230,"line":1293},[228,156974,155417],{"class":238},[228,156976,284],{"class":234},[228,156978,156728],{"class":287},[228,156980,156981],{"class":230,"line":1308},[228,156982,2514],{"emptyLinePlaceholder":157},[228,156984,156985,156987,156989,156991,156993,156995,156997,156999,157001,157003,157005,157007,157009,157011,157014,157017,157019,157021],{"class":230,"line":1314},[228,156986,30530],{"class":287},[228,156988,239],{"class":238},[228,156990,291],{"class":234},[228,156992,156741],{"class":343},[228,156994,1134],{"class":287},[228,156996,79925],{"class":238},[228,156998,1184],{"class":287},[228,157000,156747],{"class":343},[228,157002,1134],{"class":287},[228,157004,70336],{"class":238},[228,157006,1184],{"class":287},[228,157008,156753],{"class":343},[228,157010,1134],{"class":287},[228,157012,157013],{"class":238},"score",[228,157015,157016],{"class":234},":.1f",[228,157018,1184],{"class":287},[228,157020,489],{"class":343},[228,157022,245],{"class":238},[19,157024,157025],{},"表达式也可以放进去：",[220,157027,157029],{"className":30493,"code":157028,"language":30495,"meta":141,"style":141},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[30,157030,157031,157039,157047],{"__ignoreMap":141},[228,157032,157033,157035,157037],{"class":230,"line":231},[228,157034,146740],{"class":238},[228,157036,284],{"class":234},[228,157038,146745],{"class":287},[228,157040,157041,157043,157045],{"class":230,"line":142},[228,157042,146750],{"class":238},[228,157044,284],{"class":234},[228,157046,54542],{"class":287},[228,157048,157049,157051,157053,157055,157058,157060,157062,157064,157067,157069,157072],{"class":230,"line":1293},[228,157050,30530],{"class":287},[228,157052,239],{"class":238},[228,157054,291],{"class":234},[228,157056,157057],{"class":343},"\"总价:",[228,157059,1134],{"class":287},[228,157061,146740],{"class":238},[228,157063,693],{"class":234},[228,157065,157066],{"class":238}," count",[228,157068,1184],{"class":287},[228,157070,157071],{"class":343},"元\"",[228,157073,245],{"class":238},[14,157075,157077],{"id":157076},"_211-input输入","2.11 input输入",[19,157079,157080,157083],{},[30,157081,157082],{},"input()"," 会暂停程序，等待用户输入。",[220,157085,157087],{"className":30493,"code":157086,"language":30495,"meta":141,"style":141},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[30,157088,157089,157103],{"__ignoreMap":141},[228,157090,157091,157093,157095,157097,157099,157101],{"class":230,"line":231},[228,157092,146595],{"class":238},[228,157094,284],{"class":234},[228,157096,60720],{"class":287},[228,157098,239],{"class":238},[228,157100,152438],{"class":343},[228,157102,245],{"class":238},[228,157104,157105,157107,157109,157111,157114,157116,157118,157120,157122],{"class":230,"line":142},[228,157106,30530],{"class":287},[228,157108,239],{"class":238},[228,157110,291],{"class":234},[228,157112,157113],{"class":343},"\"你好，",[228,157115,1134],{"class":287},[228,157117,79925],{"class":238},[228,157119,1184],{"class":287},[228,157121,489],{"class":343},[228,157123,245],{"class":238},[19,157125,157126],{},"输入整数：",[220,157128,157130],{"className":30493,"code":157129,"language":30495,"meta":141,"style":141},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[30,157131,157132,157150],{"__ignoreMap":141},[228,157133,157134,157136,157138,157140,157142,157144,157146,157148],{"class":230,"line":231},[228,157135,146605],{"class":238},[228,157137,284],{"class":234},[228,157139,2496],{"class":287},[228,157141,239],{"class":238},[228,157143,53936],{"class":287},[228,157145,239],{"class":238},[228,157147,152453],{"class":343},[228,157149,30612],{"class":238},[228,157151,157152,157154,157156,157158,157161,157163,157165,157167,157170,157172],{"class":230,"line":142},[228,157153,30530],{"class":287},[228,157155,239],{"class":238},[228,157157,291],{"class":234},[228,157159,157160],{"class":343},"\"明年你",[228,157162,1134],{"class":287},[228,157164,146605],{"class":238},[228,157166,719],{"class":234},[228,157168,157169],{"class":287}," 1}",[228,157171,149463],{"class":343},[228,157173,245],{"class":238},[19,157175,157176],{},"输入小数：",[220,157178,157180],{"className":30493,"code":157179,"language":30495,"meta":141,"style":141},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[30,157181,157182,157201],{"__ignoreMap":141},[228,157183,157184,157186,157188,157190,157192,157194,157196,157199],{"class":230,"line":231},[228,157185,155390],{"class":238},[228,157187,284],{"class":234},[228,157189,109912],{"class":287},[228,157191,239],{"class":238},[228,157193,53936],{"class":287},[228,157195,239],{"class":238},[228,157197,157198],{"class":343},"\"请输入身高:\"",[228,157200,30612],{"class":238},[228,157202,157203,157205,157207,157209,157212,157214,157216,157219,157221,157224],{"class":230,"line":142},[228,157204,30530],{"class":287},[228,157206,239],{"class":238},[228,157208,291],{"class":234},[228,157210,157211],{"class":343},"\"身高:",[228,157213,1134],{"class":287},[228,157215,25097],{"class":238},[228,157217,157218],{"class":234},":.2f",[228,157220,1184],{"class":287},[228,157222,157223],{"class":343},"米\"",[228,157225,245],{"class":238},[14,157227,157229],{"id":157228},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,157231,123407],{},[183,157233,157234,157237,157240,157243],{},[186,157235,157236],{},"输入商品单价。",[186,157238,157239],{},"输入购买数量。",[186,157241,157242],{},"输入折扣，例如 0.8 表示八折。",[186,157244,157245],{},"输出最终金额，保留两位小数。",[19,157247,10150],{},[220,157249,157251],{"className":30493,"code":157250,"language":30495,"meta":141,"style":141},"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",[30,157252,157253,157272,157291,157311,157315,157335,157339,157362,157383,157405],{"__ignoreMap":141},[228,157254,157255,157257,157259,157261,157263,157265,157267,157270],{"class":230,"line":231},[228,157256,146740],{"class":238},[228,157258,284],{"class":234},[228,157260,109912],{"class":287},[228,157262,239],{"class":238},[228,157264,53936],{"class":287},[228,157266,239],{"class":238},[228,157268,157269],{"class":343},"\"请输入商品单价:\"",[228,157271,30612],{"class":238},[228,157273,157274,157276,157278,157280,157282,157284,157286,157289],{"class":230,"line":142},[228,157275,146750],{"class":238},[228,157277,284],{"class":234},[228,157279,2496],{"class":287},[228,157281,239],{"class":238},[228,157283,53936],{"class":287},[228,157285,239],{"class":238},[228,157287,157288],{"class":343},"\"请输入购买数量:\"",[228,157290,30612],{"class":238},[228,157292,157293,157296,157298,157300,157302,157304,157306,157309],{"class":230,"line":1293},[228,157294,157295],{"class":238},"discount ",[228,157297,284],{"class":234},[228,157299,109912],{"class":287},[228,157301,239],{"class":238},[228,157303,53936],{"class":287},[228,157305,239],{"class":238},[228,157307,157308],{"class":343},"\"请输入折扣:\"",[228,157310,30612],{"class":238},[228,157312,157313],{"class":230,"line":1308},[228,157314,2514],{"emptyLinePlaceholder":157},[228,157316,157317,157320,157322,157325,157327,157330,157332],{"class":230,"line":1314},[228,157318,157319],{"class":238},"total ",[228,157321,284],{"class":234},[228,157323,157324],{"class":238}," price ",[228,157326,693],{"class":234},[228,157328,157329],{"class":238}," count ",[228,157331,693],{"class":234},[228,157333,157334],{"class":238}," discount\n",[228,157336,157337],{"class":230,"line":1328},[228,157338,2514],{"emptyLinePlaceholder":157},[228,157340,157341,157343,157345,157347,157350,157352,157354,157356,157358,157360],{"class":230,"line":1334},[228,157342,30530],{"class":287},[228,157344,239],{"class":238},[228,157346,291],{"class":234},[228,157348,157349],{"class":343},"\"商品单价:",[228,157351,1134],{"class":287},[228,157353,79930],{"class":238},[228,157355,157218],{"class":234},[228,157357,1184],{"class":287},[228,157359,489],{"class":343},[228,157361,245],{"class":238},[228,157363,157364,157366,157368,157370,157373,157375,157377,157379,157381],{"class":230,"line":1425},[228,157365,30530],{"class":287},[228,157367,239],{"class":238},[228,157369,291],{"class":234},[228,157371,157372],{"class":343},"\"购买数量:",[228,157374,1134],{"class":287},[228,157376,84549],{"class":238},[228,157378,1184],{"class":287},[228,157380,489],{"class":343},[228,157382,245],{"class":238},[228,157384,157385,157387,157389,157391,157394,157396,157399,157401,157403],{"class":230,"line":1431},[228,157386,30530],{"class":287},[228,157388,239],{"class":238},[228,157390,291],{"class":234},[228,157392,157393],{"class":343},"\"折扣:",[228,157395,1134],{"class":287},[228,157397,157398],{"class":238},"discount",[228,157400,1184],{"class":287},[228,157402,489],{"class":343},[228,157404,245],{"class":238},[228,157406,157407,157409,157411,157413,157416,157418,157421,157423,157425,157427],{"class":230,"line":1443},[228,157408,30530],{"class":287},[228,157410,239],{"class":238},[228,157412,291],{"class":234},[228,157414,157415],{"class":343},"\"应付金额:",[228,157417,1134],{"class":287},[228,157419,157420],{"class":238},"total",[228,157422,157218],{"class":234},[228,157424,1184],{"class":287},[228,157426,157071],{"class":343},[228,157428,245],{"class":238},[14,157430,157432],{"id":157431},"_213-易错点","2.13 易错点",[183,157434,157435,157440,157446,157454,157457],{},[186,157436,157437,157439],{},[30,157438,157082],{}," 的结果是字符串，做运算前要转换。",[186,157441,157442,157443,78],{},"字符串拼接时，数字要先 ",[30,157444,157445],{},"str()",[186,157447,157448,157450,157451,157453],{},[30,157449,284],{}," 是赋值，",[30,157452,3063],{}," 是比较。",[186,157455,157456],{},"Python 没有自增自减运算符。",[186,157458,157459],{},"浮点数计算可能有精度误差：",[220,157461,157463],{"className":30493,"code":157462,"language":30495,"meta":141,"style":141},"print(0.1 + 0.2)\n",[30,157464,157465],{"__ignoreMap":141},[228,157466,157467,157469,157471,157473,157475,157478],{"class":230,"line":231},[228,157468,30530],{"class":287},[228,157470,239],{"class":238},[228,157472,86325],{"class":287},[228,157474,45681],{"class":234},[228,157476,157477],{"class":287}," 0.2",[228,157479,245],{"class":238},[19,157481,157482,157483,157486],{},"金额计算如果要求严格，可以后续学习 ",[30,157484,157485],{},"decimal"," 模块。",[14,157488,157490],{"id":157489},"_214-本章练习","2.14 本章练习",[183,157492,157493,157496,157499,157502,157505],{},[186,157494,157495],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[186,157497,157498],{},"输入圆的半径，计算面积，保留两位小数。",[186,157500,157501],{},"输入工资和奖金，计算总收入。",[186,157503,157504],{},"输入摄氏温度，转换为华氏温度。",[186,157506,157507],{},"写一个 BMI 计算程序：",[220,157509,157512],{"className":157510,"code":157511,"language":5302,"meta":141},[5300],"BMI = 体重kg \u002F 身高m ** 2\n",[30,157513,157511],{"__ignoreMap":141},[5241,157515,157516],{},"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":141,"searchDepth":142,"depth":142,"links":157518},[157519,157520,157521,157522,157523,157524,157525,157531,157532,157533,157538,157539,157540,157541],{"id":155080,"depth":142,"text":155081},{"id":155189,"depth":142,"text":155190},{"id":155360,"depth":142,"text":155361},{"id":155437,"depth":142,"text":155438},{"id":50846,"depth":142,"text":50847},{"id":155743,"depth":142,"text":155744},{"id":155969,"depth":142,"text":155970,"children":157526},[157527,157528,157529,157530],{"id":155973,"depth":1293,"text":155974},{"id":156167,"depth":1293,"text":156168},{"id":156255,"depth":1293,"text":156256},{"id":156361,"depth":1293,"text":156362},{"id":156470,"depth":142,"text":156471},{"id":156628,"depth":142,"text":156629},{"id":156693,"depth":142,"text":156694,"children":157534},[157535,157536,157537],{"id":156697,"depth":1293,"text":156698},{"id":156842,"depth":1293,"text":156843},{"id":156945,"depth":1293,"text":156946},{"id":157076,"depth":142,"text":157077},{"id":157228,"depth":142,"text":157229},{"id":157431,"depth":142,"text":157432},{"id":157489,"depth":142,"text":157490},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155072,"description":154},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157548,"title":157549,"body":157550,"description":154,"extension":155,"meta":159186,"navigation":157,"path":159187,"seo":159188,"stem":159189,"__hash__":159190},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157551,"toc":159167},[157552,157555,157559,157562,157577,157580,157608,157612,157662,157664,157680,157683,157709,157712,157716,157783,157786,157802,157806,157809,157927,157930,157937,157986,157992,157996,157999,158112,158115,158119,158123,158126,158176,158180,158183,158233,158237,158240,158278,158282,158285,158331,158334,158369,158373,158378,158381,158427,158429,158496,158500,158506,158617,158626,158630,158632,158643,158645,158811,158815,158817,158831,158833,159047,159051,159070,159087,159090,159136,159140,159164],[10,157553,157549],{"id":157554},"_3-判断语句",[14,157556,157558],{"id":157557},"_31-布尔值","3.1 布尔值",[19,157560,157561],{},"判断语句依赖布尔值：",[220,157563,157565],{"className":30493,"code":157564,"language":30495,"meta":141,"style":141},"True\nFalse\n",[30,157566,157567,157572],{"__ignoreMap":141},[228,157568,157569],{"class":230,"line":231},[228,157570,157571],{"class":287},"True\n",[228,157573,157574],{"class":230,"line":142},[228,157575,157576],{"class":287},"False\n",[19,157578,157579],{},"比较表达式会产生布尔值：",[220,157581,157583],{"className":30493,"code":157582,"language":30495,"meta":141,"style":141},"age = 18\nprint(age >= 18)  # True\n",[30,157584,157585,157593],{"__ignoreMap":141},[228,157586,157587,157589,157591],{"class":230,"line":231},[228,157588,146605],{"class":238},[228,157590,284],{"class":234},[228,157592,146610],{"class":287},[228,157594,157595,157597,157599,157601,157603,157605],{"class":230,"line":142},[228,157596,30530],{"class":287},[228,157598,155827],{"class":238},[228,157600,1824],{"class":234},[228,157602,156344],{"class":287},[228,157604,45923],{"class":238},[228,157606,157607],{"class":297},"# True\n",[14,157609,157611],{"id":157610},"_32-if基础语法","3.2 if基础语法",[220,157613,157615],{"className":30493,"code":157614,"language":30495,"meta":141,"style":141},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[30,157616,157617,157635,157639,157651],{"__ignoreMap":141},[228,157618,157619,157621,157623,157625,157627,157629,157631,157633],{"class":230,"line":231},[228,157620,146605],{"class":238},[228,157622,284],{"class":234},[228,157624,2496],{"class":287},[228,157626,239],{"class":238},[228,157628,53936],{"class":287},[228,157630,239],{"class":238},[228,157632,152453],{"class":343},[228,157634,30612],{"class":238},[228,157636,157637],{"class":230,"line":142},[228,157638,2514],{"emptyLinePlaceholder":157},[228,157640,157641,157643,157645,157647,157649],{"class":230,"line":1293},[228,157642,1645],{"class":234},[228,157644,15822],{"class":238},[228,157646,1824],{"class":234},[228,157648,156344],{"class":287},[228,157650,3853],{"class":238},[228,157652,157653,157655,157657,157660],{"class":230,"line":1308},[228,157654,31414],{"class":287},[228,157656,239],{"class":238},[228,157658,157659],{"class":343},"\"可以进入网吧\"",[228,157661,245],{"class":238},[19,157663,9140],{},[183,157665,157666,157671,157674,157677],{},[186,157667,157668,157670],{},[30,157669,1645],{}," 后面是条件表达式。",[186,157672,157673],{},"条件后面必须写冒号。",[186,157675,157676],{},"条件成立时执行缩进代码块。",[186,157678,157679],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,157681,157682],{},"错误示例：",[220,157684,157686],{"className":30493,"code":157685,"language":30495,"meta":141,"style":141},"if age >= 18\n    print(\"可以进入\")\n",[30,157687,157688,157698],{"__ignoreMap":141},[228,157689,157690,157692,157694,157696],{"class":230,"line":231},[228,157691,1645],{"class":234},[228,157693,15822],{"class":238},[228,157695,1824],{"class":234},[228,157697,146610],{"class":287},[228,157699,157700,157702,157704,157707],{"class":230,"line":142},[228,157701,31414],{"class":287},[228,157703,239],{"class":238},[228,157705,157706],{"class":343},"\"可以进入\"",[228,157708,245],{"class":238},[19,157710,157711],{},"缺少冒号。",[14,157713,157715],{"id":157714},"_33-if-else","3.3 if else",[220,157717,157719],{"className":30493,"code":157718,"language":30495,"meta":141,"style":141},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[30,157720,157721,157739,157743,157755,157766,157772],{"__ignoreMap":141},[228,157722,157723,157725,157727,157729,157731,157733,157735,157737],{"class":230,"line":231},[228,157724,146605],{"class":238},[228,157726,284],{"class":234},[228,157728,2496],{"class":287},[228,157730,239],{"class":238},[228,157732,53936],{"class":287},[228,157734,239],{"class":238},[228,157736,152453],{"class":343},[228,157738,30612],{"class":238},[228,157740,157741],{"class":230,"line":142},[228,157742,2514],{"emptyLinePlaceholder":157},[228,157744,157745,157747,157749,157751,157753],{"class":230,"line":1293},[228,157746,1645],{"class":234},[228,157748,15822],{"class":238},[228,157750,1824],{"class":234},[228,157752,156344],{"class":287},[228,157754,3853],{"class":238},[228,157756,157757,157759,157761,157764],{"class":230,"line":1308},[228,157758,31414],{"class":287},[228,157760,239],{"class":238},[228,157762,157763],{"class":343},"\"成年人\"",[228,157765,245],{"class":238},[228,157767,157768,157770],{"class":230,"line":1314},[228,157769,1815],{"class":234},[228,157771,3853],{"class":238},[228,157773,157774,157776,157778,157781],{"class":230,"line":1328},[228,157775,31414],{"class":287},[228,157777,239],{"class":238},[228,157779,157780],{"class":343},"\"未成年人\"",[228,157782,245],{"class":238},[19,157784,157785],{},"执行逻辑：",[183,157787,157788,157794,157799],{},[186,157789,157790,157791,157793],{},"条件成立，执行 ",[30,157792,1645],{}," 代码块。",[186,157795,157796,157797,157793],{},"条件不成立，执行 ",[30,157798,1815],{},[186,157800,157801],{},"两个代码块只会执行其中一个。",[14,157803,157805],{"id":157804},"_34-if-elif-else","3.4 if elif else",[19,157807,157808],{},"多条件判断：",[220,157810,157812],{"className":30493,"code":157811,"language":30495,"meta":141,"style":141},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[30,157813,157814,157832,157836,157850,157861,157875,157886,157899,157910,157916],{"__ignoreMap":141},[228,157815,157816,157818,157820,157822,157824,157826,157828,157830],{"class":230,"line":231},[228,157817,155417],{"class":238},[228,157819,284],{"class":234},[228,157821,2496],{"class":287},[228,157823,239],{"class":238},[228,157825,53936],{"class":287},[228,157827,239],{"class":238},[228,157829,152468],{"class":343},[228,157831,30612],{"class":238},[228,157833,157834],{"class":230,"line":142},[228,157835,2514],{"emptyLinePlaceholder":157},[228,157837,157838,157840,157843,157845,157848],{"class":230,"line":1293},[228,157839,1645],{"class":234},[228,157841,157842],{"class":238}," score ",[228,157844,1824],{"class":234},[228,157846,157847],{"class":287}," 90",[228,157849,3853],{"class":238},[228,157851,157852,157854,157856,157859],{"class":230,"line":1308},[228,157853,31414],{"class":287},[228,157855,239],{"class":238},[228,157857,157858],{"class":343},"\"优秀\"",[228,157860,245],{"class":238},[228,157862,157863,157866,157868,157870,157873],{"class":230,"line":1314},[228,157864,157865],{"class":234},"elif",[228,157867,157842],{"class":238},[228,157869,1824],{"class":234},[228,157871,157872],{"class":287}," 80",[228,157874,3853],{"class":238},[228,157876,157877,157879,157881,157884],{"class":230,"line":1328},[228,157878,31414],{"class":287},[228,157880,239],{"class":238},[228,157882,157883],{"class":343},"\"良好\"",[228,157885,245],{"class":238},[228,157887,157888,157890,157892,157894,157897],{"class":230,"line":1334},[228,157889,157865],{"class":234},[228,157891,157842],{"class":238},[228,157893,1824],{"class":234},[228,157895,157896],{"class":287}," 60",[228,157898,3853],{"class":238},[228,157900,157901,157903,157905,157908],{"class":230,"line":1425},[228,157902,31414],{"class":287},[228,157904,239],{"class":238},[228,157906,157907],{"class":343},"\"及格\"",[228,157909,245],{"class":238},[228,157911,157912,157914],{"class":230,"line":1431},[228,157913,1815],{"class":234},[228,157915,3853],{"class":238},[228,157917,157918,157920,157922,157925],{"class":230,"line":1443},[228,157919,31414],{"class":287},[228,157921,239],{"class":238},[228,157923,157924],{"class":343},"\"不及格\"",[228,157926,245],{"class":238},[19,157928,157929],{},"注意判断顺序很重要。",[19,157931,157932,157933,157936],{},"如果把 ",[30,157934,157935],{},"score >= 60"," 放在最前面：",[220,157938,157940],{"className":30493,"code":157939,"language":30495,"meta":141,"style":141},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[30,157941,157942,157954,157964,157976],{"__ignoreMap":141},[228,157943,157944,157946,157948,157950,157952],{"class":230,"line":231},[228,157945,1645],{"class":234},[228,157947,157842],{"class":238},[228,157949,1824],{"class":234},[228,157951,157896],{"class":287},[228,157953,3853],{"class":238},[228,157955,157956,157958,157960,157962],{"class":230,"line":142},[228,157957,31414],{"class":287},[228,157959,239],{"class":238},[228,157961,157907],{"class":343},[228,157963,245],{"class":238},[228,157965,157966,157968,157970,157972,157974],{"class":230,"line":1293},[228,157967,157865],{"class":234},[228,157969,157842],{"class":238},[228,157971,1824],{"class":234},[228,157973,157847],{"class":287},[228,157975,3853],{"class":238},[228,157977,157978,157980,157982,157984],{"class":230,"line":1308},[228,157979,31414],{"class":287},[228,157981,239],{"class":238},[228,157983,157858],{"class":343},[228,157985,245],{"class":238},[19,157987,157988,157989,157991],{},"成绩 95 会先满足 ",[30,157990,157935],{},"，后面的优秀分支就不会执行。",[14,157993,157995],{"id":157994},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,157997,157998],{},"嵌套判断就是在一个判断内部再写判断。",[220,158000,158002],{"className":30493,"code":158001,"language":30495,"meta":141,"style":141},"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",[30,158003,158004,158022,158037,158041,158053,158067,158077,158084,158095,158101],{"__ignoreMap":141},[228,158005,158006,158008,158010,158012,158014,158016,158018,158020],{"class":230,"line":231},[228,158007,146605],{"class":238},[228,158009,284],{"class":234},[228,158011,2496],{"class":287},[228,158013,239],{"class":238},[228,158015,53936],{"class":287},[228,158017,239],{"class":238},[228,158019,152453],{"class":343},[228,158021,30612],{"class":238},[228,158023,158024,158026,158028,158030,158032,158035],{"class":230,"line":142},[228,158025,156420],{"class":238},[228,158027,284],{"class":234},[228,158029,60720],{"class":287},[228,158031,239],{"class":238},[228,158033,158034],{"class":343},"\"是否有票(y\u002Fn):\"",[228,158036,245],{"class":238},[228,158038,158039],{"class":230,"line":1293},[228,158040,2514],{"emptyLinePlaceholder":157},[228,158042,158043,158045,158047,158049,158051],{"class":230,"line":1308},[228,158044,1645],{"class":234},[228,158046,15822],{"class":238},[228,158048,1824],{"class":234},[228,158050,156344],{"class":287},[228,158052,3853],{"class":238},[228,158054,158055,158057,158060,158062,158065],{"class":230,"line":1314},[228,158056,3215],{"class":234},[228,158058,158059],{"class":238}," has_ticket ",[228,158061,3063],{"class":234},[228,158063,158064],{"class":343}," \"y\"",[228,158066,3853],{"class":238},[228,158068,158069,158071,158073,158075],{"class":230,"line":1328},[228,158070,32566],{"class":287},[228,158072,239],{"class":238},[228,158074,157706],{"class":343},[228,158076,245],{"class":238},[228,158078,158079,158082],{"class":230,"line":1334},[228,158080,158081],{"class":234},"    else",[228,158083,3853],{"class":238},[228,158085,158086,158088,158090,158093],{"class":230,"line":1425},[228,158087,32566],{"class":287},[228,158089,239],{"class":238},[228,158091,158092],{"class":343},"\"请先买票\"",[228,158094,245],{"class":238},[228,158096,158097,158099],{"class":230,"line":1431},[228,158098,1815],{"class":234},[228,158100,3853],{"class":238},[228,158102,158103,158105,158107,158110],{"class":230,"line":1443},[228,158104,31414],{"class":287},[228,158106,239],{"class":238},[228,158108,158109],{"class":343},"\"未成年人禁止进入\"",[228,158111,245],{"class":238},[19,158113,158114],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,158116,158118],{"id":158117},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[200,158120,158122],{"id":158121},"_361-and","3.6.1 and",[19,158124,158125],{},"两个条件都成立才成立。",[220,158127,158129],{"className":30493,"code":158128,"language":30495,"meta":141,"style":141},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[30,158130,158131,158139,158147,158151,158166],{"__ignoreMap":141},[228,158132,158133,158135,158137],{"class":230,"line":231},[228,158134,146605],{"class":238},[228,158136,284],{"class":234},[228,158138,88180],{"class":287},[228,158140,158141,158143,158145],{"class":230,"line":142},[228,158142,156420],{"class":238},[228,158144,284],{"class":234},[228,158146,153658],{"class":287},[228,158148,158149],{"class":230,"line":1293},[228,158150,2514],{"emptyLinePlaceholder":157},[228,158152,158153,158155,158157,158159,158161,158163],{"class":230,"line":1308},[228,158154,1645],{"class":234},[228,158156,15822],{"class":238},[228,158158,1824],{"class":234},[228,158160,156344],{"class":287},[228,158162,120544],{"class":234},[228,158164,158165],{"class":238}," has_ticket:\n",[228,158167,158168,158170,158172,158174],{"class":230,"line":1314},[228,158169,31414],{"class":287},[228,158171,239],{"class":238},[228,158173,157706],{"class":343},[228,158175,245],{"class":238},[200,158177,158179],{"id":158178},"_362-or","3.6.2 or",[19,158181,158182],{},"只要一个条件成立就成立。",[220,158184,158186],{"className":30493,"code":158185,"language":30495,"meta":141,"style":141},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[30,158187,158188,158197,158206,158210,158222],{"__ignoreMap":141},[228,158189,158190,158193,158195],{"class":230,"line":231},[228,158191,158192],{"class":238},"is_vip ",[228,158194,284],{"class":234},[228,158196,125922],{"class":287},[228,158198,158199,158202,158204],{"class":230,"line":142},[228,158200,158201],{"class":238},"coupon ",[228,158203,284],{"class":234},[228,158205,153658],{"class":287},[228,158207,158208],{"class":230,"line":1293},[228,158209,2514],{"emptyLinePlaceholder":157},[228,158211,158212,158214,158217,158219],{"class":230,"line":1308},[228,158213,1645],{"class":234},[228,158215,158216],{"class":238}," is_vip ",[228,158218,115205],{"class":234},[228,158220,158221],{"class":238}," coupon:\n",[228,158223,158224,158226,158228,158231],{"class":230,"line":1314},[228,158225,31414],{"class":287},[228,158227,239],{"class":238},[228,158229,158230],{"class":343},"\"可以享受优惠\"",[228,158232,245],{"class":238},[200,158234,158236],{"id":158235},"_363-not","3.6.3 not",[19,158238,158239],{},"取反。",[220,158241,158243],{"className":30493,"code":158242,"language":30495,"meta":141,"style":141},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[30,158244,158245,158254,158258,158267],{"__ignoreMap":141},[228,158246,158247,158250,158252],{"class":230,"line":231},[228,158248,158249],{"class":238},"is_closed ",[228,158251,284],{"class":234},[228,158253,125922],{"class":287},[228,158255,158256],{"class":230,"line":142},[228,158257,2514],{"emptyLinePlaceholder":157},[228,158259,158260,158262,158264],{"class":230,"line":1293},[228,158261,1645],{"class":234},[228,158263,39045],{"class":234},[228,158265,158266],{"class":238}," is_closed:\n",[228,158268,158269,158271,158273,158276],{"class":230,"line":1308},[228,158270,31414],{"class":287},[228,158272,239],{"class":238},[228,158274,158275],{"class":343},"\"店铺营业中\"",[228,158277,245],{"class":238},[14,158279,158281],{"id":158280},"_37-链式比较","3.7 链式比较",[19,158283,158284],{},"Python 支持链式比较：",[220,158286,158288],{"className":30493,"code":158287,"language":30495,"meta":141,"style":141},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[30,158289,158290,158299,158303,158320],{"__ignoreMap":141},[228,158291,158292,158294,158296],{"class":230,"line":231},[228,158293,155417],{"class":238},[228,158295,284],{"class":234},[228,158297,158298],{"class":287}," 85\n",[228,158300,158301],{"class":230,"line":142},[228,158302,2514],{"emptyLinePlaceholder":157},[228,158304,158305,158307,158309,158312,158314,158316,158318],{"class":230,"line":1293},[228,158306,1645],{"class":234},[228,158308,4207],{"class":287},[228,158310,158311],{"class":234}," \u003C=",[228,158313,157842],{"class":238},[228,158315,1702],{"class":234},[228,158317,5869],{"class":287},[228,158319,3853],{"class":238},[228,158321,158322,158324,158326,158329],{"class":230,"line":1308},[228,158323,31414],{"class":287},[228,158325,239],{"class":238},[228,158327,158328],{"class":343},"\"成绩合法\"",[228,158330,245],{"class":238},[19,158332,158333],{},"等价于：",[220,158335,158337],{"className":30493,"code":158336,"language":30495,"meta":141,"style":141},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[30,158338,158339,158359],{"__ignoreMap":141},[228,158340,158341,158343,158345,158347,158349,158351,158353,158355,158357],{"class":230,"line":231},[228,158342,1645],{"class":234},[228,158344,157842],{"class":238},[228,158346,1824],{"class":234},[228,158348,4207],{"class":287},[228,158350,120544],{"class":234},[228,158352,157842],{"class":238},[228,158354,1702],{"class":234},[228,158356,5869],{"class":287},[228,158358,3853],{"class":238},[228,158360,158361,158363,158365,158367],{"class":230,"line":142},[228,158362,31414],{"class":287},[228,158364,239],{"class":238},[228,158366,158328],{"class":343},[228,158368,245],{"class":238},[14,158370,158372],{"id":158371},"_38-真值和假值","3.8 真值和假值",[19,158374,116582,158375,158377],{},[30,158376,1645],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,158379,158380],{},"假值：",[220,158382,158384],{"className":30493,"code":158383,"language":30495,"meta":141,"style":141},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[30,158385,158386,158390,158395,158399,158403,158408,158412,158416,158421],{"__ignoreMap":141},[228,158387,158388],{"class":230,"line":231},[228,158389,157576],{"class":287},[228,158391,158392],{"class":230,"line":142},[228,158393,158394],{"class":287},"None\n",[228,158396,158397],{"class":230,"line":1293},[228,158398,3199],{"class":287},[228,158400,158401],{"class":230,"line":1308},[228,158402,32457],{"class":287},[228,158404,158405],{"class":230,"line":1314},[228,158406,158407],{"class":343},"\"\"\n",[228,158409,158410],{"class":230,"line":1328},[228,158411,32472],{"class":238},[228,158413,158414],{"class":230,"line":1334},[228,158415,2090],{"class":238},[228,158417,158418],{"class":230,"line":1425},[228,158419,158420],{"class":238},"{}\n",[228,158422,158423,158425],{"class":230,"line":1431},[228,158424,155349],{"class":287},[228,158426,2090],{"class":238},[19,158428,15250],{},[220,158430,158432],{"className":30493,"code":158431,"language":30495,"meta":141,"style":141},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[30,158433,158434,158448,158452,158459,158479,158485],{"__ignoreMap":141},[228,158435,158436,158438,158440,158442,158444,158446],{"class":230,"line":231},[228,158437,146595],{"class":238},[228,158439,284],{"class":234},[228,158441,60720],{"class":287},[228,158443,239],{"class":238},[228,158445,152438],{"class":343},[228,158447,245],{"class":238},[228,158449,158450],{"class":230,"line":142},[228,158451,2514],{"emptyLinePlaceholder":157},[228,158453,158454,158456],{"class":230,"line":1293},[228,158455,1645],{"class":234},[228,158457,158458],{"class":238}," name:\n",[228,158460,158461,158463,158465,158467,158469,158471,158473,158475,158477],{"class":230,"line":1308},[228,158462,31414],{"class":287},[228,158464,239],{"class":238},[228,158466,291],{"class":234},[228,158468,157113],{"class":343},[228,158470,1134],{"class":287},[228,158472,79925],{"class":238},[228,158474,1184],{"class":287},[228,158476,489],{"class":343},[228,158478,245],{"class":238},[228,158480,158481,158483],{"class":230,"line":1314},[228,158482,1815],{"class":234},[228,158484,3853],{"class":238},[228,158486,158487,158489,158491,158494],{"class":230,"line":1328},[228,158488,31414],{"class":287},[228,158490,239],{"class":238},[228,158492,158493],{"class":343},"\"姓名不能为空\"",[228,158495,245],{"class":238},[14,158497,158499],{"id":158498},"_39-match语句","3.9 match语句",[19,158501,158502,158503,158505],{},"Python 3.10 开始支持 ",[30,158504,71380],{},"。它适合处理固定选项。",[220,158507,158509],{"className":30493,"code":158508,"language":30495,"meta":141,"style":141},"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",[30,158510,158511,158527,158531,158538,158548,158559,158568,158579,158588,158599,158606],{"__ignoreMap":141},[228,158512,158513,158516,158518,158520,158522,158525],{"class":230,"line":231},[228,158514,158515],{"class":238},"command ",[228,158517,284],{"class":234},[228,158519,60720],{"class":287},[228,158521,239],{"class":238},[228,158523,158524],{"class":343},"\"请输入命令:\"",[228,158526,245],{"class":238},[228,158528,158529],{"class":230,"line":142},[228,158530,2514],{"emptyLinePlaceholder":157},[228,158532,158533,158535],{"class":230,"line":1293},[228,158534,71380],{"class":234},[228,158536,158537],{"class":238}," command:\n",[228,158539,158540,158543,158546],{"class":230,"line":1308},[228,158541,158542],{"class":234},"    case",[228,158544,158545],{"class":343}," \"start\"",[228,158547,3853],{"class":238},[228,158549,158550,158552,158554,158557],{"class":230,"line":1314},[228,158551,32566],{"class":287},[228,158553,239],{"class":238},[228,158555,158556],{"class":343},"\"启动\"",[228,158558,245],{"class":238},[228,158560,158561,158563,158566],{"class":230,"line":1328},[228,158562,158542],{"class":234},[228,158564,158565],{"class":343}," \"stop\"",[228,158567,3853],{"class":238},[228,158569,158570,158572,158574,158577],{"class":230,"line":1334},[228,158571,32566],{"class":287},[228,158573,239],{"class":238},[228,158575,158576],{"class":343},"\"停止\"",[228,158578,245],{"class":238},[228,158580,158581,158583,158586],{"class":230,"line":1425},[228,158582,158542],{"class":234},[228,158584,158585],{"class":343}," \"restart\"",[228,158587,3853],{"class":238},[228,158589,158590,158592,158594,158597],{"class":230,"line":1431},[228,158591,32566],{"class":287},[228,158593,239],{"class":238},[228,158595,158596],{"class":343},"\"重启\"",[228,158598,245],{"class":238},[228,158600,158601,158603],{"class":230,"line":1443},[228,158602,158542],{"class":234},[228,158604,158605],{"class":238}," _:\n",[228,158607,158608,158610,158612,158615],{"class":230,"line":1726},[228,158609,32566],{"class":287},[228,158611,239],{"class":238},[228,158613,158614],{"class":343},"\"未知命令\"",[228,158616,245],{"class":238},[19,158618,158619,158620,158622,158623,158625],{},"入门阶段掌握 ",[30,158621,154717],{}," 更重要，",[30,158624,71380],{}," 可以作为补充。",[14,158627,158629],{"id":158628},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,158631,123407],{},[183,158633,158634,158637,158640],{},[186,158635,158636],{},"输入成绩。",[186,158638,158639],{},"判断成绩是否合法。",[186,158641,158642],{},"输出等级。",[19,158644,10150],{},[220,158646,158648],{"className":30493,"code":158647,"language":30495,"meta":141,"style":141},"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",[30,158649,158650,158668,158672,158690,158701,158713,158724,158736,158747,158760,158771,158783,158794,158800],{"__ignoreMap":141},[228,158651,158652,158654,158656,158658,158660,158662,158664,158666],{"class":230,"line":231},[228,158653,155417],{"class":238},[228,158655,284],{"class":234},[228,158657,109912],{"class":287},[228,158659,239],{"class":238},[228,158661,53936],{"class":287},[228,158663,239],{"class":238},[228,158665,152468],{"class":343},[228,158667,30612],{"class":238},[228,158669,158670],{"class":230,"line":142},[228,158671,2514],{"emptyLinePlaceholder":157},[228,158673,158674,158676,158678,158680,158682,158684,158686,158688],{"class":230,"line":1293},[228,158675,1645],{"class":234},[228,158677,39045],{"class":234},[228,158679,4207],{"class":287},[228,158681,158311],{"class":234},[228,158683,157842],{"class":238},[228,158685,1702],{"class":234},[228,158687,5869],{"class":287},[228,158689,3853],{"class":238},[228,158691,158692,158694,158696,158699],{"class":230,"line":1308},[228,158693,31414],{"class":287},[228,158695,239],{"class":238},[228,158697,158698],{"class":343},"\"成绩不合法\"",[228,158700,245],{"class":238},[228,158702,158703,158705,158707,158709,158711],{"class":230,"line":1314},[228,158704,157865],{"class":234},[228,158706,157842],{"class":238},[228,158708,1824],{"class":234},[228,158710,157847],{"class":287},[228,158712,3853],{"class":238},[228,158714,158715,158717,158719,158722],{"class":230,"line":1328},[228,158716,31414],{"class":287},[228,158718,239],{"class":238},[228,158720,158721],{"class":343},"\"等级:A\"",[228,158723,245],{"class":238},[228,158725,158726,158728,158730,158732,158734],{"class":230,"line":1334},[228,158727,157865],{"class":234},[228,158729,157842],{"class":238},[228,158731,1824],{"class":234},[228,158733,157872],{"class":287},[228,158735,3853],{"class":238},[228,158737,158738,158740,158742,158745],{"class":230,"line":1425},[228,158739,31414],{"class":287},[228,158741,239],{"class":238},[228,158743,158744],{"class":343},"\"等级:B\"",[228,158746,245],{"class":238},[228,158748,158749,158751,158753,158755,158758],{"class":230,"line":1431},[228,158750,157865],{"class":234},[228,158752,157842],{"class":238},[228,158754,1824],{"class":234},[228,158756,158757],{"class":287}," 70",[228,158759,3853],{"class":238},[228,158761,158762,158764,158766,158769],{"class":230,"line":1443},[228,158763,31414],{"class":287},[228,158765,239],{"class":238},[228,158767,158768],{"class":343},"\"等级:C\"",[228,158770,245],{"class":238},[228,158772,158773,158775,158777,158779,158781],{"class":230,"line":1726},[228,158774,157865],{"class":234},[228,158776,157842],{"class":238},[228,158778,1824],{"class":234},[228,158780,157896],{"class":287},[228,158782,3853],{"class":238},[228,158784,158785,158787,158789,158792],{"class":230,"line":1731},[228,158786,31414],{"class":287},[228,158788,239],{"class":238},[228,158790,158791],{"class":343},"\"等级:D\"",[228,158793,245],{"class":238},[228,158795,158796,158798],{"class":230,"line":1737},[228,158797,1815],{"class":234},[228,158799,3853],{"class":238},[228,158801,158802,158804,158806,158809],{"class":230,"line":1742},[228,158803,31414],{"class":287},[228,158805,239],{"class":238},[228,158807,158808],{"class":343},"\"等级:E\"",[228,158810,245],{"class":238},[14,158812,158814],{"id":158813},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,158816,123407],{},[183,158818,158819,158822,158825,158828],{},[186,158820,158821],{},"输入消费金额。",[186,158823,158824],{},"输入会员等级，普通、银卡、金卡。",[186,158826,158827],{},"普通不打折，银卡 9 折，金卡 8 折。",[186,158829,158830],{},"满 500 再减 50。",[19,158832,10150],{},[220,158834,158836],{"className":30493,"code":158835,"language":30495,"meta":141,"style":141},"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",[30,158837,158838,158858,158874,158878,158886,158890,158904,158914,158927,158936,158949,158957,158963,158974,158978,158992,158996,159010,159020,159024],{"__ignoreMap":141},[228,158839,158840,158843,158845,158847,158849,158851,158853,158856],{"class":230,"line":231},[228,158841,158842],{"class":238},"amount ",[228,158844,284],{"class":234},[228,158846,109912],{"class":287},[228,158848,239],{"class":238},[228,158850,53936],{"class":287},[228,158852,239],{"class":238},[228,158854,158855],{"class":343},"\"请输入消费金额:\"",[228,158857,30612],{"class":238},[228,158859,158860,158863,158865,158867,158869,158872],{"class":230,"line":142},[228,158861,158862],{"class":238},"level ",[228,158864,284],{"class":234},[228,158866,60720],{"class":287},[228,158868,239],{"class":238},[228,158870,158871],{"class":343},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[228,158873,245],{"class":238},[228,158875,158876],{"class":230,"line":1293},[228,158877,2514],{"emptyLinePlaceholder":157},[228,158879,158880,158882,158884],{"class":230,"line":1308},[228,158881,157295],{"class":238},[228,158883,284],{"class":234},[228,158885,55814],{"class":287},[228,158887,158888],{"class":230,"line":1314},[228,158889,2514],{"emptyLinePlaceholder":157},[228,158891,158892,158894,158897,158899,158902],{"class":230,"line":1328},[228,158893,1645],{"class":234},[228,158895,158896],{"class":238}," level ",[228,158898,3063],{"class":234},[228,158900,158901],{"class":343}," \"银卡\"",[228,158903,3853],{"class":238},[228,158905,158906,158909,158911],{"class":230,"line":1334},[228,158907,158908],{"class":238},"    discount ",[228,158910,284],{"class":234},[228,158912,158913],{"class":287}," 0.9\n",[228,158915,158916,158918,158920,158922,158925],{"class":230,"line":1425},[228,158917,157865],{"class":234},[228,158919,158896],{"class":238},[228,158921,3063],{"class":234},[228,158923,158924],{"class":343}," \"金卡\"",[228,158926,3853],{"class":238},[228,158928,158929,158931,158933],{"class":230,"line":1431},[228,158930,158908],{"class":238},[228,158932,284],{"class":234},[228,158934,158935],{"class":287}," 0.8\n",[228,158937,158938,158940,158942,158944,158947],{"class":230,"line":1443},[228,158939,157865],{"class":234},[228,158941,158896],{"class":238},[228,158943,3063],{"class":234},[228,158945,158946],{"class":343}," \"普通\"",[228,158948,3853],{"class":238},[228,158950,158951,158953,158955],{"class":230,"line":1726},[228,158952,158908],{"class":238},[228,158954,284],{"class":234},[228,158956,55814],{"class":287},[228,158958,158959,158961],{"class":230,"line":1731},[228,158960,1815],{"class":234},[228,158962,3853],{"class":238},[228,158964,158965,158967,158969,158972],{"class":230,"line":1737},[228,158966,31414],{"class":287},[228,158968,239],{"class":238},[228,158970,158971],{"class":343},"\"会员等级输入错误，按普通会员计算\"",[228,158973,245],{"class":238},[228,158975,158976],{"class":230,"line":1742},[228,158977,2514],{"emptyLinePlaceholder":157},[228,158979,158980,158983,158985,158988,158990],{"class":230,"line":1756},[228,158981,158982],{"class":238},"pay ",[228,158984,284],{"class":234},[228,158986,158987],{"class":238}," amount ",[228,158989,693],{"class":234},[228,158991,157334],{"class":238},[228,158993,158994],{"class":230,"line":1761},[228,158995,2514],{"emptyLinePlaceholder":157},[228,158997,158998,159000,159003,159005,159008],{"class":230,"line":1767},[228,158999,1645],{"class":234},[228,159001,159002],{"class":238}," pay ",[228,159004,1824],{"class":234},[228,159006,159007],{"class":287}," 500",[228,159009,3853],{"class":238},[228,159011,159012,159015,159017],{"class":230,"line":1788},[228,159013,159014],{"class":238},"    pay ",[228,159016,150311],{"class":234},[228,159018,159019],{"class":287}," 50\n",[228,159021,159022],{"class":230,"line":1793},[228,159023,2514],{"emptyLinePlaceholder":157},[228,159025,159026,159028,159030,159032,159034,159036,159039,159041,159043,159045],{"class":230,"line":1807},[228,159027,30530],{"class":287},[228,159029,239],{"class":238},[228,159031,291],{"class":234},[228,159033,157415],{"class":343},[228,159035,1134],{"class":287},[228,159037,159038],{"class":238},"pay",[228,159040,157218],{"class":234},[228,159042,1184],{"class":287},[228,159044,157071],{"class":343},[228,159046,245],{"class":238},[14,159048,159050],{"id":159049},"_312-易错点","3.12 易错点",[183,159052,159053,159056,159059,159062,159067],{},[186,159054,159055],{},"冒号不能漏。",[186,159057,159058],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[186,159060,159061],{},"多分支判断要注意顺序。",[186,159063,159064,159065,78],{},"判断相等用 ",[30,159066,3063],{},[186,159068,159069],{},"字符串比较区分大小写：",[220,159071,159073],{"className":30493,"code":159072,"language":30495,"meta":141,"style":141},"\"Y\" == \"y\"  # False\n",[30,159074,159075],{"__ignoreMap":141},[228,159076,159077,159080,159082,159084],{"class":230,"line":231},[228,159078,159079],{"class":343},"\"Y\"",[228,159081,101674],{"class":234},[228,159083,158064],{"class":343},[228,159085,159086],{"class":297},"  # False\n",[19,159088,159089],{},"可转换后再判断：",[220,159091,159093],{"className":30493,"code":159092,"language":30495,"meta":141,"style":141},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[30,159094,159095,159112,159125],{"__ignoreMap":141},[228,159096,159097,159100,159102,159104,159106,159109],{"class":230,"line":231},[228,159098,159099],{"class":238},"answer ",[228,159101,284],{"class":234},[228,159103,60720],{"class":287},[228,159105,239],{"class":238},[228,159107,159108],{"class":343},"\"是否继续(y\u002Fn):\"",[228,159110,159111],{"class":238},").lower()\n",[228,159113,159114,159116,159119,159121,159123],{"class":230,"line":142},[228,159115,1645],{"class":234},[228,159117,159118],{"class":238}," answer ",[228,159120,3063],{"class":234},[228,159122,158064],{"class":343},[228,159124,3853],{"class":238},[228,159126,159127,159129,159131,159134],{"class":230,"line":1293},[228,159128,31414],{"class":287},[228,159130,239],{"class":238},[228,159132,159133],{"class":343},"\"继续\"",[228,159135,245],{"class":238},[14,159137,159139],{"id":159138},"_313-本章练习","3.13 本章练习",[183,159141,159142,159145,159148,159151,159161],{},[186,159143,159144],{},"输入年龄，判断是否成年。",[186,159146,159147],{},"输入年份，判断是否为闰年。",[186,159149,159150],{},"输入三个数字，输出最大值。",[186,159152,159153,159154,159157,159158,159160],{},"写登录判断：用户名是 ",[30,159155,159156],{},"admin"," 且密码是 ",[30,159159,15199],{}," 才登录成功。",[186,159162,159163],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[5241,159165,159166],{},"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":141,"searchDepth":142,"depth":142,"links":159168},[159169,159170,159171,159172,159173,159174,159179,159180,159181,159182,159183,159184,159185],{"id":157557,"depth":142,"text":157558},{"id":157610,"depth":142,"text":157611},{"id":157714,"depth":142,"text":157715},{"id":157804,"depth":142,"text":157805},{"id":157994,"depth":142,"text":157995},{"id":158117,"depth":142,"text":158118,"children":159175},[159176,159177,159178],{"id":158121,"depth":1293,"text":158122},{"id":158178,"depth":1293,"text":158179},{"id":158235,"depth":1293,"text":158236},{"id":158280,"depth":142,"text":158281},{"id":158371,"depth":142,"text":158372},{"id":158498,"depth":142,"text":158499},{"id":158628,"depth":142,"text":158629},{"id":158813,"depth":142,"text":158814},{"id":159049,"depth":142,"text":159050},{"id":159138,"depth":142,"text":159139},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157549,"description":154},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159192,"title":159193,"body":159194,"description":154,"extension":155,"meta":160963,"navigation":157,"path":160964,"seo":160965,"stem":160966,"__hash__":160967},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159195,"toc":160943},[159196,159199,159203,159209,159212,159229,159233,159235,159252,159254,159299,159301,159318,159322,159325,159391,159394,159412,159416,159577,159586,159590,159594,159599,159646,159648,159654,159658,159663,159710,159712,159718,159722,159727,159763,159766,159813,159817,159823,159881,159886,159917,159922,159926,159981,159984,160056,160059,160118,160122,160125,160200,160203,160207,160313,160316,160342,160346,160358,160427,160430,160522,160526,160528,160539,160541,160671,160675,160877,160885,160889,160919,160923,160940],[10,159197,159193],{"id":159198},"_4-循环语句",[14,159200,159202],{"id":159201},"_41-为什么需要循环","4.1 为什么需要循环",[19,159204,159205,159206,159208],{},"如果要输出 1 到 100，不应该写 100 行 ",[30,159207,146531],{},"，而应该用循环。",[19,159210,159211],{},"循环适合处理重复任务：",[183,159213,159214,159217,159220,159223,159226],{},[186,159215,159216],{},"重复输出。",[186,159218,159219],{},"重复输入。",[186,159221,159222],{},"遍历数据。",[186,159224,159225],{},"持续执行菜单。",[186,159227,159228],{},"批量处理文件或数据。",[14,159230,159232],{"id":159231},"_42-while循环","4.2 while循环",[19,159234,5296],{},[220,159236,159238],{"className":30493,"code":159237,"language":30495,"meta":141,"style":141},"while 条件:\n    循环体\n",[30,159239,159240,159247],{"__ignoreMap":141},[228,159241,159242,159244],{"class":230,"line":231},[228,159243,108778],{"class":234},[228,159245,159246],{"class":238}," 条件:\n",[228,159248,159249],{"class":230,"line":142},[228,159250,159251],{"class":238},"    循环体\n",[19,159253,15250],{},[220,159255,159257],{"className":30493,"code":159256,"language":30495,"meta":141,"style":141},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[30,159258,159259,159267,159271,159283,159290],{"__ignoreMap":141},[228,159260,159261,159263,159265],{"class":230,"line":231},[228,159262,100263],{"class":238},[228,159264,284],{"class":234},[228,159266,55814],{"class":287},[228,159268,159269],{"class":230,"line":142},[228,159270,2514],{"emptyLinePlaceholder":157},[228,159272,159273,159275,159277,159279,159281],{"class":230,"line":1293},[228,159274,108778],{"class":234},[228,159276,9553],{"class":238},[228,159278,1702],{"class":234},[228,159280,2262],{"class":287},[228,159282,3853],{"class":238},[228,159284,159285,159287],{"class":230,"line":1308},[228,159286,31414],{"class":287},[228,159288,159289],{"class":238},"(i)\n",[228,159291,159292,159295,159297],{"class":230,"line":1314},[228,159293,159294],{"class":238},"    i ",[228,159296,9592],{"class":234},[228,159298,55814],{"class":287},[19,159300,81044],{},[183,159302,159303,159309,159312,159315],{},[186,159304,159305,159306,78],{},"判断条件 ",[30,159307,159308],{},"i \u003C= 5",[186,159310,159311],{},"条件成立，执行循环体。",[186,159313,159314],{},"执行完后回到条件判断。",[186,159316,159317],{},"条件不成立，退出循环。",[14,159319,159321],{"id":159320},"_43-while累加","4.3 while累加",[19,159323,159324],{},"计算 1 到 100 的和：",[220,159326,159328],{"className":30493,"code":159327,"language":30495,"meta":141,"style":141},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[30,159329,159330,159338,159346,159350,159362,159372,159380,159384],{"__ignoreMap":141},[228,159331,159332,159334,159336],{"class":230,"line":231},[228,159333,100263],{"class":238},[228,159335,284],{"class":234},[228,159337,55814],{"class":287},[228,159339,159340,159342,159344],{"class":230,"line":142},[228,159341,157319],{"class":238},[228,159343,284],{"class":234},[228,159345,47448],{"class":287},[228,159347,159348],{"class":230,"line":1293},[228,159349,2514],{"emptyLinePlaceholder":157},[228,159351,159352,159354,159356,159358,159360],{"class":230,"line":1308},[228,159353,108778],{"class":234},[228,159355,9553],{"class":238},[228,159357,1702],{"class":234},[228,159359,5869],{"class":287},[228,159361,3853],{"class":238},[228,159363,159364,159367,159369],{"class":230,"line":1314},[228,159365,159366],{"class":238},"    total ",[228,159368,9592],{"class":234},[228,159370,159371],{"class":238}," i\n",[228,159373,159374,159376,159378],{"class":230,"line":1328},[228,159375,159294],{"class":238},[228,159377,9592],{"class":234},[228,159379,55814],{"class":287},[228,159381,159382],{"class":230,"line":1334},[228,159383,2514],{"emptyLinePlaceholder":157},[228,159385,159386,159388],{"class":230,"line":1425},[228,159387,30530],{"class":287},[228,159389,159390],{"class":238},"(total)\n",[19,159392,159393],{},"核心思想：",[183,159395,159396,159401,159406],{},[186,159397,159398,159400],{},[30,159399,679],{}," 控制循环次数。",[186,159402,159403,159405],{},[30,159404,157420],{}," 保存累加结果。",[186,159407,159408,159409,159411],{},"每轮循环都要更新 ",[30,159410,679],{},"，否则可能死循环。",[14,159413,159415],{"id":159414},"_44-while猜数字","4.4 while猜数字",[220,159417,159419],{"className":30493,"code":159418,"language":30495,"meta":141,"style":141},"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",[30,159420,159421,159427,159431,159448,159456,159460,159468,159488,159497,159501,159513,159524,159534,159545,159551,159573],{"__ignoreMap":141},[228,159422,159423,159425],{"class":230,"line":231},[228,159424,30507],{"class":234},[228,159426,45443],{"class":238},[228,159428,159429],{"class":230,"line":142},[228,159430,2514],{"emptyLinePlaceholder":157},[228,159432,159433,159435,159437,159440,159442,159444,159446],{"class":230,"line":1293},[228,159434,159099],{"class":238},[228,159436,284],{"class":234},[228,159438,159439],{"class":238}," random.randint(",[228,159441,456],{"class":287},[228,159443,12550],{"class":238},[228,159445,549],{"class":287},[228,159447,245],{"class":238},[228,159449,159450,159452,159454],{"class":230,"line":1308},[228,159451,146750],{"class":238},[228,159453,284],{"class":234},[228,159455,47448],{"class":287},[228,159457,159458],{"class":230,"line":1314},[228,159459,2514],{"emptyLinePlaceholder":157},[228,159461,159462,159464,159466],{"class":230,"line":1328},[228,159463,108778],{"class":234},[228,159465,95407],{"class":287},[228,159467,3853],{"class":238},[228,159469,159470,159473,159475,159477,159479,159481,159483,159486],{"class":230,"line":1334},[228,159471,159472],{"class":238},"    guess ",[228,159474,284],{"class":234},[228,159476,2496],{"class":287},[228,159478,239],{"class":238},[228,159480,53936],{"class":287},[228,159482,239],{"class":238},[228,159484,159485],{"class":343},"\"请输入1到100之间的数字:\"",[228,159487,30612],{"class":238},[228,159489,159490,159493,159495],{"class":230,"line":1425},[228,159491,159492],{"class":238},"    count ",[228,159494,9592],{"class":234},[228,159496,55814],{"class":287},[228,159498,159499],{"class":230,"line":1431},[228,159500,2514],{"emptyLinePlaceholder":157},[228,159502,159503,159505,159508,159510],{"class":230,"line":1443},[228,159504,3215],{"class":234},[228,159506,159507],{"class":238}," guess ",[228,159509,1198],{"class":234},[228,159511,159512],{"class":238}," answer:\n",[228,159514,159515,159517,159519,159522],{"class":230,"line":1726},[228,159516,32566],{"class":287},[228,159518,239],{"class":238},[228,159520,159521],{"class":343},"\"猜大了\"",[228,159523,245],{"class":238},[228,159525,159526,159528,159530,159532],{"class":230,"line":1731},[228,159527,39408],{"class":234},[228,159529,159507],{"class":238},[228,159531,1148],{"class":234},[228,159533,159512],{"class":238},[228,159535,159536,159538,159540,159543],{"class":230,"line":1737},[228,159537,32566],{"class":287},[228,159539,239],{"class":238},[228,159541,159542],{"class":343},"\"猜小了\"",[228,159544,245],{"class":238},[228,159546,159547,159549],{"class":230,"line":1742},[228,159548,158081],{"class":234},[228,159550,3853],{"class":238},[228,159552,159553,159555,159557,159559,159562,159564,159566,159568,159571],{"class":230,"line":1756},[228,159554,32566],{"class":287},[228,159556,239],{"class":238},[228,159558,291],{"class":234},[228,159560,159561],{"class":343},"\"猜对了，一共猜了",[228,159563,1134],{"class":287},[228,159565,84549],{"class":238},[228,159567,1184],{"class":287},[228,159569,159570],{"class":343},"次\"",[228,159572,245],{"class":238},[228,159574,159575],{"class":230,"line":1761},[228,159576,31742],{"class":234},[19,159578,159579,159582,159583,159585],{},[30,159580,159581],{},"while True"," 表示无限循环，通常配合 ",[30,159584,2167],{}," 使用。",[14,159587,159589],{"id":159588},"_45-break和continue","4.5 break和continue",[200,159591,159593],{"id":159592},"_451-break","4.5.1 break",[19,159595,159596,159598],{},[30,159597,2167],{}," 直接结束整个循环。",[220,159600,159602],{"className":30493,"code":159601,"language":30495,"meta":141,"style":141},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[30,159603,159604,159624,159636,159640],{"__ignoreMap":141},[228,159605,159606,159608,159610,159612,159614,159616,159618,159620,159622],{"class":230,"line":231},[228,159607,3139],{"class":234},[228,159609,9553],{"class":238},[228,159611,26159],{"class":234},[228,159613,32558],{"class":287},[228,159615,239],{"class":238},[228,159617,456],{"class":287},[228,159619,12550],{"class":238},[228,159621,582],{"class":287},[228,159623,30901],{"class":238},[228,159625,159626,159628,159630,159632,159634],{"class":230,"line":142},[228,159627,3215],{"class":234},[228,159629,9553],{"class":238},[228,159631,3063],{"class":234},[228,159633,78185],{"class":287},[228,159635,3853],{"class":238},[228,159637,159638],{"class":230,"line":1293},[228,159639,31742],{"class":234},[228,159641,159642,159644],{"class":230,"line":1308},[228,159643,31414],{"class":287},[228,159645,159289],{"class":238},[19,159647,146516],{},[220,159649,159652],{"className":159650,"code":159651,"language":5302,"meta":141},[5300],"1\n2\n",[30,159653,159651],{"__ignoreMap":141},[200,159655,159657],{"id":159656},"_452-continue","4.5.2 continue",[19,159659,159660,159662],{},[30,159661,154731],{}," 跳过本轮剩余代码，进入下一轮循环。",[220,159664,159666],{"className":30493,"code":159665,"language":30495,"meta":141,"style":141},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[30,159667,159668,159688,159700,159704],{"__ignoreMap":141},[228,159669,159670,159672,159674,159676,159678,159680,159682,159684,159686],{"class":230,"line":231},[228,159671,3139],{"class":234},[228,159673,9553],{"class":238},[228,159675,26159],{"class":234},[228,159677,32558],{"class":287},[228,159679,239],{"class":238},[228,159681,456],{"class":287},[228,159683,12550],{"class":238},[228,159685,582],{"class":287},[228,159687,30901],{"class":238},[228,159689,159690,159692,159694,159696,159698],{"class":230,"line":142},[228,159691,3215],{"class":234},[228,159693,9553],{"class":238},[228,159695,3063],{"class":234},[228,159697,78185],{"class":287},[228,159699,3853],{"class":238},[228,159701,159702],{"class":230,"line":1293},[228,159703,148571],{"class":234},[228,159705,159706,159708],{"class":230,"line":1308},[228,159707,31414],{"class":287},[228,159709,159289],{"class":238},[19,159711,146516],{},[220,159713,159716],{"className":159714,"code":159715,"language":5302,"meta":141},[5300],"1\n2\n4\n5\n",[30,159717,159715],{"__ignoreMap":141},[14,159719,159721],{"id":159720},"_46-for循环","4.6 for循环",[19,159723,159724,159726],{},[30,159725,3139],{}," 常用于遍历序列。",[220,159728,159730],{"className":30493,"code":159729,"language":30495,"meta":141,"style":141},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[30,159731,159732,159741,159745,159756],{"__ignoreMap":141},[228,159733,159734,159736,159738],{"class":230,"line":231},[228,159735,146595],{"class":238},[228,159737,284],{"class":234},[228,159739,159740],{"class":343}," \"python\"\n",[228,159742,159743],{"class":230,"line":142},[228,159744,2514],{"emptyLinePlaceholder":157},[228,159746,159747,159749,159752,159754],{"class":230,"line":1293},[228,159748,3139],{"class":234},[228,159750,159751],{"class":238}," ch ",[228,159753,26159],{"class":234},[228,159755,158458],{"class":238},[228,159757,159758,159760],{"class":230,"line":1308},[228,159759,31414],{"class":287},[228,159761,159762],{"class":238},"(ch)\n",[19,159764,159765],{},"遍历列表：",[220,159767,159769],{"className":30493,"code":159768,"language":30495,"meta":141,"style":141},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[30,159770,159771,159793,159797,159807],{"__ignoreMap":141},[228,159772,159773,159776,159778,159780,159782,159784,159786,159788,159791],{"class":230,"line":231},[228,159774,159775],{"class":238},"students ",[228,159777,284],{"class":234},[228,159779,52341],{"class":238},[228,159781,149947],{"class":343},[228,159783,12550],{"class":238},[228,159785,150995],{"class":343},[228,159787,12550],{"class":238},[228,159789,159790],{"class":343},"\"小刚\"",[228,159792,33361],{"class":238},[228,159794,159795],{"class":230,"line":142},[228,159796,2514],{"emptyLinePlaceholder":157},[228,159798,159799,159801,159803,159805],{"class":230,"line":1293},[228,159800,3139],{"class":234},[228,159802,152196],{"class":238},[228,159804,26159],{"class":234},[228,159806,152201],{"class":238},[228,159808,159809,159811],{"class":230,"line":1308},[228,159810,31414],{"class":287},[228,159812,150101],{"class":238},[14,159814,159816],{"id":159815},"_47-range函数","4.7 range函数",[19,159818,159819,159822],{},[30,159820,159821],{},"range()"," 用于生成整数序列。",[220,159824,159826],{"className":30493,"code":159825,"language":30495,"meta":141,"style":141},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[30,159827,159828,159842,159860],{"__ignoreMap":141},[228,159829,159830,159832,159834,159836,159839],{"class":230,"line":231},[228,159831,33531],{"class":287},[228,159833,239],{"class":238},[228,159835,557],{"class":287},[228,159837,159838],{"class":238},")          ",[228,159840,159841],{"class":297},"# 0,1,2,3,4\n",[228,159843,159844,159846,159848,159850,159852,159854,159857],{"class":230,"line":142},[228,159845,33531],{"class":287},[228,159847,239],{"class":238},[228,159849,456],{"class":287},[228,159851,12550],{"class":238},[228,159853,557],{"class":287},[228,159855,159856],{"class":238},")       ",[228,159858,159859],{"class":297},"# 1,2,3,4\n",[228,159861,159862,159864,159866,159868,159870,159872,159874,159876,159878],{"class":230,"line":1293},[228,159863,33531],{"class":287},[228,159865,239],{"class":238},[228,159867,456],{"class":287},[228,159869,12550],{"class":238},[228,159871,684],{"class":287},[228,159873,12550],{"class":238},[228,159875,316],{"class":287},[228,159877,155720],{"class":238},[228,159879,159880],{"class":297},"# 1,3,5,7,9\n",[19,159882,159883,159884,24734],{},"配合 ",[30,159885,3139],{},[220,159887,159889],{"className":30493,"code":159888,"language":30495,"meta":141,"style":141},"for i in range(1, 6):\n    print(i)\n",[30,159890,159891,159911],{"__ignoreMap":141},[228,159892,159893,159895,159897,159899,159901,159903,159905,159907,159909],{"class":230,"line":231},[228,159894,3139],{"class":234},[228,159896,9553],{"class":238},[228,159898,26159],{"class":234},[228,159900,32558],{"class":287},[228,159902,239],{"class":238},[228,159904,456],{"class":287},[228,159906,12550],{"class":238},[228,159908,582],{"class":287},[228,159910,30901],{"class":238},[228,159912,159913,159915],{"class":230,"line":142},[228,159914,31414],{"class":287},[228,159916,159289],{"class":238},[19,159918,9140,159919,159921],{},[30,159920,33531],{}," 的结束值不包含在内。",[14,159923,159925],{"id":159924},"_48-for循环求和","4.8 for循环求和",[220,159927,159929],{"className":30493,"code":159928,"language":30495,"meta":141,"style":141},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[30,159930,159931,159939,159943,159963,159971,159975],{"__ignoreMap":141},[228,159932,159933,159935,159937],{"class":230,"line":231},[228,159934,157319],{"class":238},[228,159936,284],{"class":234},[228,159938,47448],{"class":287},[228,159940,159941],{"class":230,"line":142},[228,159942,2514],{"emptyLinePlaceholder":157},[228,159944,159945,159947,159949,159951,159953,159955,159957,159959,159961],{"class":230,"line":1293},[228,159946,3139],{"class":234},[228,159948,9553],{"class":238},[228,159950,26159],{"class":234},[228,159952,32558],{"class":287},[228,159954,239],{"class":238},[228,159956,456],{"class":287},[228,159958,12550],{"class":238},[228,159960,575],{"class":287},[228,159962,30901],{"class":238},[228,159964,159965,159967,159969],{"class":230,"line":1308},[228,159966,159366],{"class":238},[228,159968,9592],{"class":234},[228,159970,159371],{"class":238},[228,159972,159973],{"class":230,"line":1314},[228,159974,2514],{"emptyLinePlaceholder":157},[228,159976,159977,159979],{"class":230,"line":1328},[228,159978,30530],{"class":287},[228,159980,159390],{"class":238},[19,159982,159983],{},"求偶数和：",[220,159985,159987],{"className":30493,"code":159986,"language":30495,"meta":141,"style":141},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[30,159988,159989,159997,160001,160021,160037,160046,160050],{"__ignoreMap":141},[228,159990,159991,159993,159995],{"class":230,"line":231},[228,159992,157319],{"class":238},[228,159994,284],{"class":234},[228,159996,47448],{"class":287},[228,159998,159999],{"class":230,"line":142},[228,160000,2514],{"emptyLinePlaceholder":157},[228,160002,160003,160005,160007,160009,160011,160013,160015,160017,160019],{"class":230,"line":1293},[228,160004,3139],{"class":234},[228,160006,9553],{"class":238},[228,160008,26159],{"class":234},[228,160010,32558],{"class":287},[228,160012,239],{"class":238},[228,160014,456],{"class":287},[228,160016,12550],{"class":238},[228,160018,575],{"class":287},[228,160020,30901],{"class":238},[228,160022,160023,160025,160027,160029,160031,160033,160035],{"class":230,"line":1308},[228,160024,3215],{"class":234},[228,160026,9553],{"class":238},[228,160028,566],{"class":234},[228,160030,14870],{"class":287},[228,160032,101674],{"class":234},[228,160034,4207],{"class":287},[228,160036,3853],{"class":238},[228,160038,160039,160042,160044],{"class":230,"line":1314},[228,160040,160041],{"class":238},"        total ",[228,160043,9592],{"class":234},[228,160045,159371],{"class":238},[228,160047,160048],{"class":230,"line":1328},[228,160049,2514],{"emptyLinePlaceholder":157},[228,160051,160052,160054],{"class":230,"line":1334},[228,160053,30530],{"class":287},[228,160055,159390],{"class":238},[19,160057,160058],{},"也可以：",[220,160060,160062],{"className":30493,"code":160061,"language":30495,"meta":141,"style":141},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[30,160063,160064,160072,160076,160100,160108,160112],{"__ignoreMap":141},[228,160065,160066,160068,160070],{"class":230,"line":231},[228,160067,157319],{"class":238},[228,160069,284],{"class":234},[228,160071,47448],{"class":287},[228,160073,160074],{"class":230,"line":142},[228,160075,2514],{"emptyLinePlaceholder":157},[228,160077,160078,160080,160082,160084,160086,160088,160090,160092,160094,160096,160098],{"class":230,"line":1293},[228,160079,3139],{"class":234},[228,160081,9553],{"class":238},[228,160083,26159],{"class":234},[228,160085,32558],{"class":287},[228,160087,239],{"class":238},[228,160089,316],{"class":287},[228,160091,12550],{"class":238},[228,160093,575],{"class":287},[228,160095,12550],{"class":238},[228,160097,316],{"class":287},[228,160099,30901],{"class":238},[228,160101,160102,160104,160106],{"class":230,"line":1308},[228,160103,159366],{"class":238},[228,160105,9592],{"class":234},[228,160107,159371],{"class":238},[228,160109,160110],{"class":230,"line":1314},[228,160111,2514],{"emptyLinePlaceholder":157},[228,160113,160114,160116],{"class":230,"line":1328},[228,160115,30530],{"class":287},[228,160117,159390],{"class":238},[14,160119,160121],{"id":160120},"_49-循环嵌套","4.9 循环嵌套",[19,160123,160124],{},"嵌套循环就是循环里面再写循环。",[220,160126,160128],{"className":30493,"code":160127,"language":30495,"meta":141,"style":141},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[30,160129,160130,160150,160170],{"__ignoreMap":141},[228,160131,160132,160134,160136,160138,160140,160142,160144,160146,160148],{"class":230,"line":231},[228,160133,3139],{"class":234},[228,160135,9553],{"class":238},[228,160137,26159],{"class":234},[228,160139,32558],{"class":287},[228,160141,239],{"class":238},[228,160143,456],{"class":287},[228,160145,12550],{"class":238},[228,160147,531],{"class":287},[228,160149,30901],{"class":238},[228,160151,160152,160154,160156,160158,160160,160162,160164,160166,160168],{"class":230,"line":142},[228,160153,3315],{"class":234},[228,160155,9615],{"class":238},[228,160157,26159],{"class":234},[228,160159,32558],{"class":287},[228,160161,239],{"class":238},[228,160163,456],{"class":287},[228,160165,12550],{"class":238},[228,160167,531],{"class":287},[228,160169,30901],{"class":238},[228,160171,160172,160174,160176,160178,160181,160183,160185,160187,160190,160192,160194,160196,160198],{"class":230,"line":1293},[228,160173,32566],{"class":287},[228,160175,239],{"class":238},[228,160177,291],{"class":234},[228,160179,160180],{"class":343},"\"i=",[228,160182,1134],{"class":287},[228,160184,679],{"class":238},[228,160186,1184],{"class":287},[228,160188,160189],{"class":343},", j=",[228,160191,1134],{"class":287},[228,160193,705],{"class":238},[228,160195,1184],{"class":287},[228,160197,489],{"class":343},[228,160199,245],{"class":238},[19,160201,160202],{},"外层循环执行一次，内层循环执行完整一轮。",[14,160204,160206],{"id":160205},"_410-九九乘法表","4.10 九九乘法表",[220,160208,160210],{"className":30493,"code":160209,"language":30495,"meta":141,"style":141},"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",[30,160211,160212,160232,160255,160307],{"__ignoreMap":141},[228,160213,160214,160216,160218,160220,160222,160224,160226,160228,160230],{"class":230,"line":231},[228,160215,3139],{"class":234},[228,160217,9553],{"class":238},[228,160219,26159],{"class":234},[228,160221,32558],{"class":287},[228,160223,239],{"class":238},[228,160225,456],{"class":287},[228,160227,12550],{"class":238},[228,160229,684],{"class":287},[228,160231,30901],{"class":238},[228,160233,160234,160236,160238,160240,160242,160244,160246,160249,160251,160253],{"class":230,"line":142},[228,160235,3315],{"class":234},[228,160237,9615],{"class":238},[228,160239,26159],{"class":234},[228,160241,32558],{"class":287},[228,160243,239],{"class":238},[228,160245,456],{"class":287},[228,160247,160248],{"class":238},", i ",[228,160250,719],{"class":234},[228,160252,25234],{"class":287},[228,160254,30901],{"class":238},[228,160256,160257,160259,160261,160263,160265,160267,160269,160271,160273,160275,160277,160279,160281,160283,160285,160287,160289,160291,160293,160295,160297,160299,160301,160303,160305],{"class":230,"line":1293},[228,160258,32566],{"class":287},[228,160260,239],{"class":238},[228,160262,291],{"class":234},[228,160264,489],{"class":343},[228,160266,1134],{"class":287},[228,160268,705],{"class":238},[228,160270,1184],{"class":287},[228,160272,693],{"class":343},[228,160274,1134],{"class":287},[228,160276,679],{"class":238},[228,160278,1184],{"class":287},[228,160280,284],{"class":343},[228,160282,1134],{"class":287},[228,160284,100263],{"class":238},[228,160286,693],{"class":234},[228,160288,3524],{"class":238},[228,160290,1184],{"class":287},[228,160292,489],{"class":343},[228,160294,12550],{"class":238},[228,160296,45916],{"class":5331},[228,160298,284],{"class":234},[228,160300,489],{"class":343},[228,160302,1344],{"class":287},[228,160304,489],{"class":343},[228,160306,245],{"class":238},[228,160308,160309,160311],{"class":230,"line":1308},[228,160310,31414],{"class":287},[228,160312,2090],{"class":238},[19,160314,160315],{},"关键点：",[183,160317,160318,160324,160330,160336],{},[186,160319,160320,160321,160323],{},"外层 ",[30,160322,679],{}," 控制行。",[186,160325,160326,160327,160329],{},"内层 ",[30,160328,705],{}," 控制列。",[186,160331,160332,160333,160335],{},"每行结束后用 ",[30,160334,146531],{}," 换行。",[186,160337,160338,160341],{},[30,160339,160340],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,160343,160345],{"id":160344},"_411-循环else","4.11 循环else",[19,160347,160348,160349,160351,160352,160354,160355,160357],{},"Python 的循环可以带 ",[30,160350,1815],{},"。当循环正常结束时执行 ",[30,160353,1815],{},"，如果被 ",[30,160356,2167],{}," 打断，则不执行。",[220,160359,160361],{"className":30493,"code":160360,"language":30495,"meta":141,"style":141},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[30,160362,160363,160383,160395,160406,160410,160416],{"__ignoreMap":141},[228,160364,160365,160367,160369,160371,160373,160375,160377,160379,160381],{"class":230,"line":231},[228,160366,3139],{"class":234},[228,160368,9553],{"class":238},[228,160370,26159],{"class":234},[228,160372,32558],{"class":287},[228,160374,239],{"class":238},[228,160376,456],{"class":287},[228,160378,12550],{"class":238},[228,160380,582],{"class":287},[228,160382,30901],{"class":238},[228,160384,160385,160387,160389,160391,160393],{"class":230,"line":142},[228,160386,3215],{"class":234},[228,160388,9553],{"class":238},[228,160390,3063],{"class":234},[228,160392,2152],{"class":287},[228,160394,3853],{"class":238},[228,160396,160397,160399,160401,160404],{"class":230,"line":1293},[228,160398,32566],{"class":287},[228,160400,239],{"class":238},[228,160402,160403],{"class":343},"\"找到了\"",[228,160405,245],{"class":238},[228,160407,160408],{"class":230,"line":1308},[228,160409,31742],{"class":234},[228,160411,160412,160414],{"class":230,"line":1314},[228,160413,1815],{"class":234},[228,160415,3853],{"class":238},[228,160417,160418,160420,160422,160425],{"class":230,"line":1328},[228,160419,31414],{"class":287},[228,160421,239],{"class":238},[228,160423,160424],{"class":343},"\"没找到\"",[228,160426,245],{"class":238},[19,160428,160429],{},"常用于搜索。",[220,160431,160433],{"className":30493,"code":160432,"language":30495,"meta":141,"style":141},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[30,160434,160435,160456,160465,160469,160481,160492,160502,160506,160512],{"__ignoreMap":141},[228,160436,160437,160440,160442,160444,160446,160448,160450,160452,160454],{"class":230,"line":231},[228,160438,160439],{"class":238},"names ",[228,160441,284],{"class":234},[228,160443,52341],{"class":238},[228,160445,149947],{"class":343},[228,160447,12550],{"class":238},[228,160449,150995],{"class":343},[228,160451,12550],{"class":238},[228,160453,159790],{"class":343},[228,160455,33361],{"class":238},[228,160457,160458,160460,160462],{"class":230,"line":142},[228,160459,111693],{"class":238},[228,160461,284],{"class":234},[228,160463,160464],{"class":343}," \"小李\"\n",[228,160466,160467],{"class":230,"line":1293},[228,160468,2514],{"emptyLinePlaceholder":157},[228,160470,160471,160473,160476,160478],{"class":230,"line":1308},[228,160472,3139],{"class":234},[228,160474,160475],{"class":238}," name ",[228,160477,26159],{"class":234},[228,160479,160480],{"class":238}," names:\n",[228,160482,160483,160485,160487,160489],{"class":230,"line":1314},[228,160484,3215],{"class":234},[228,160486,160475],{"class":238},[228,160488,3063],{"class":234},[228,160490,160491],{"class":238}," target:\n",[228,160493,160494,160496,160498,160500],{"class":230,"line":1328},[228,160495,32566],{"class":287},[228,160497,239],{"class":238},[228,160499,160403],{"class":343},[228,160501,245],{"class":238},[228,160503,160504],{"class":230,"line":1334},[228,160505,31742],{"class":234},[228,160507,160508,160510],{"class":230,"line":1425},[228,160509,1815],{"class":234},[228,160511,3853],{"class":238},[228,160513,160514,160516,160518,160520],{"class":230,"line":1431},[228,160515,31414],{"class":287},[228,160517,239],{"class":238},[228,160519,160424],{"class":343},[228,160521,245],{"class":238},[14,160523,160525],{"id":160524},"_412-小案例登录重试","4.12 小案例：登录重试",[19,160527,123407],{},[183,160529,160530,160533,160536],{},[186,160531,160532],{},"用户最多输入 3 次密码。",[186,160534,160535],{},"密码正确则登录成功。",[186,160537,160538],{},"3 次都错误则锁定账号。",[19,160540,10150],{},[220,160542,160544],{"className":30493,"code":160543,"language":30495,"meta":141,"style":141},"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",[30,160545,160546,160556,160560,160576,160592,160596,160608,160619,160623,160629,160654,160660],{"__ignoreMap":141},[228,160547,160548,160551,160553],{"class":230,"line":231},[228,160549,160550],{"class":238},"password ",[228,160552,284],{"class":234},[228,160554,160555],{"class":343}," \"123456\"\n",[228,160557,160558],{"class":230,"line":142},[228,160559,2514],{"emptyLinePlaceholder":157},[228,160561,160562,160564,160566,160568,160570,160572,160574],{"class":230,"line":1293},[228,160563,3139],{"class":234},[228,160565,9553],{"class":238},[228,160567,26159],{"class":234},[228,160569,32558],{"class":287},[228,160571,239],{"class":238},[228,160573,310],{"class":287},[228,160575,30901],{"class":238},[228,160577,160578,160581,160583,160585,160587,160590],{"class":230,"line":1308},[228,160579,160580],{"class":238},"    user_password ",[228,160582,284],{"class":234},[228,160584,60720],{"class":287},[228,160586,239],{"class":238},[228,160588,160589],{"class":343},"\"请输入密码:\"",[228,160591,245],{"class":238},[228,160593,160594],{"class":230,"line":1314},[228,160595,2514],{"emptyLinePlaceholder":157},[228,160597,160598,160600,160603,160605],{"class":230,"line":1328},[228,160599,3215],{"class":234},[228,160601,160602],{"class":238}," user_password ",[228,160604,3063],{"class":234},[228,160606,160607],{"class":238}," password:\n",[228,160609,160610,160612,160614,160617],{"class":230,"line":1334},[228,160611,32566],{"class":287},[228,160613,239],{"class":238},[228,160615,160616],{"class":343},"\"登录成功\"",[228,160618,245],{"class":238},[228,160620,160621],{"class":230,"line":1425},[228,160622,31742],{"class":234},[228,160624,160625,160627],{"class":230,"line":1431},[228,160626,158081],{"class":234},[228,160628,3853],{"class":238},[228,160630,160631,160633,160635,160637,160640,160643,160645,160647,160649,160652],{"class":230,"line":1443},[228,160632,32566],{"class":287},[228,160634,239],{"class":238},[228,160636,291],{"class":234},[228,160638,160639],{"class":343},"\"密码错误，还剩",[228,160641,160642],{"class":287},"{2",[228,160644,52386],{"class":234},[228,160646,3146],{"class":238},[228,160648,1184],{"class":287},[228,160650,160651],{"class":343},"次机会\"",[228,160653,245],{"class":238},[228,160655,160656,160658],{"class":230,"line":1726},[228,160657,1815],{"class":234},[228,160659,3853],{"class":238},[228,160661,160662,160664,160666,160669],{"class":230,"line":1731},[228,160663,31414],{"class":287},[228,160665,239],{"class":238},[228,160667,160668],{"class":343},"\"账号已锁定\"",[228,160670,245],{"class":238},[14,160672,160674],{"id":160673},"_413-小案例菜单程序","4.13 小案例：菜单程序",[220,160676,160678],{"className":30493,"code":160677,"language":30495,"meta":141,"style":141},"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",[30,160679,160680,160688,160699,160710,160721,160732,160743,160747,160762,160766,160778,160789,160801,160812,160824,160835,160847,160857,160861,160867],{"__ignoreMap":141},[228,160681,160682,160684,160686],{"class":230,"line":231},[228,160683,108778],{"class":234},[228,160685,95407],{"class":287},[228,160687,3853],{"class":238},[228,160689,160690,160692,160694,160697],{"class":230,"line":142},[228,160691,31414],{"class":287},[228,160693,239],{"class":238},[228,160695,160696],{"class":343},"\"====== 菜单 ======\"",[228,160698,245],{"class":238},[228,160700,160701,160703,160705,160708],{"class":230,"line":1293},[228,160702,31414],{"class":287},[228,160704,239],{"class":238},[228,160706,160707],{"class":343},"\"1. 查询余额\"",[228,160709,245],{"class":238},[228,160711,160712,160714,160716,160719],{"class":230,"line":1308},[228,160713,31414],{"class":287},[228,160715,239],{"class":238},[228,160717,160718],{"class":343},"\"2. 存款\"",[228,160720,245],{"class":238},[228,160722,160723,160725,160727,160730],{"class":230,"line":1314},[228,160724,31414],{"class":287},[228,160726,239],{"class":238},[228,160728,160729],{"class":343},"\"3. 取款\"",[228,160731,245],{"class":238},[228,160733,160734,160736,160738,160741],{"class":230,"line":1328},[228,160735,31414],{"class":287},[228,160737,239],{"class":238},[228,160739,160740],{"class":343},"\"0. 退出\"",[228,160742,245],{"class":238},[228,160744,160745],{"class":230,"line":1334},[228,160746,2514],{"emptyLinePlaceholder":157},[228,160748,160749,160752,160754,160756,160758,160760],{"class":230,"line":1425},[228,160750,160751],{"class":238},"    choice ",[228,160753,284],{"class":234},[228,160755,60720],{"class":287},[228,160757,239],{"class":238},[228,160759,153132],{"class":343},[228,160761,245],{"class":238},[228,160763,160764],{"class":230,"line":1431},[228,160765,2514],{"emptyLinePlaceholder":157},[228,160767,160768,160770,160772,160774,160776],{"class":230,"line":1443},[228,160769,3215],{"class":234},[228,160771,153145],{"class":238},[228,160773,3063],{"class":234},[228,160775,153150],{"class":343},[228,160777,3853],{"class":238},[228,160779,160780,160782,160784,160787],{"class":230,"line":1726},[228,160781,32566],{"class":287},[228,160783,239],{"class":238},[228,160785,160786],{"class":343},"\"余额为1000元\"",[228,160788,245],{"class":238},[228,160790,160791,160793,160795,160797,160799],{"class":230,"line":1731},[228,160792,39408],{"class":234},[228,160794,153145],{"class":238},[228,160796,3063],{"class":234},[228,160798,153169],{"class":343},[228,160800,3853],{"class":238},[228,160802,160803,160805,160807,160810],{"class":230,"line":1737},[228,160804,32566],{"class":287},[228,160806,239],{"class":238},[228,160808,160809],{"class":343},"\"存款功能\"",[228,160811,245],{"class":238},[228,160813,160814,160816,160818,160820,160822],{"class":230,"line":1742},[228,160815,39408],{"class":234},[228,160817,153145],{"class":238},[228,160819,3063],{"class":234},[228,160821,153187],{"class":343},[228,160823,3853],{"class":238},[228,160825,160826,160828,160830,160833],{"class":230,"line":1756},[228,160827,32566],{"class":287},[228,160829,239],{"class":238},[228,160831,160832],{"class":343},"\"取款功能\"",[228,160834,245],{"class":238},[228,160836,160837,160839,160841,160843,160845],{"class":230,"line":1761},[228,160838,39408],{"class":234},[228,160840,153145],{"class":238},[228,160842,3063],{"class":234},[228,160844,153241],{"class":343},[228,160846,3853],{"class":238},[228,160848,160849,160851,160853,160855],{"class":230,"line":1767},[228,160850,32566],{"class":287},[228,160852,239],{"class":238},[228,160854,153252],{"class":343},[228,160856,245],{"class":238},[228,160858,160859],{"class":230,"line":1788},[228,160860,31742],{"class":234},[228,160862,160863,160865],{"class":230,"line":1793},[228,160864,158081],{"class":234},[228,160866,3853],{"class":238},[228,160868,160869,160871,160873,160875],{"class":230,"line":1807},[228,160870,32566],{"class":287},[228,160872,239],{"class":238},[228,160874,153273],{"class":343},[228,160876,245],{"class":238},[19,160878,160879,160880,160882,160883,78],{},"菜单类程序通常使用 ",[30,160881,159581],{},"，用户选择退出时 ",[30,160884,2167],{},[14,160886,160888],{"id":160887},"_414-易错点","4.14 易错点",[183,160890,160891,160896,160902,160910,160916],{},[186,160892,160893,160895],{},[30,160894,108778],{}," 循环必须更新控制变量。",[186,160897,160898,160901],{},[30,160899,160900],{},"range(1, 10)"," 不包含 10。",[186,160903,160904,160906,160907,160909],{},[30,160905,2167],{}," 结束整个循环，",[30,160908,154731],{}," 只跳过本轮。",[186,160911,160912,160913,160915],{},"嵌套循环中，",[30,160914,2167],{}," 只跳出当前所在的一层循环。",[186,160917,160918],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,160920,160922],{"id":160921},"_415-本章练习","4.15 本章练习",[183,160924,160925,160928,160931,160934,160937],{},[186,160926,160927],{},"输出 1 到 100。",[186,160929,160930],{},"计算 1 到 100 的偶数和。",[186,160932,160933],{},"输出 100 以内能被 3 和 5 同时整除的数。",[186,160935,160936],{},"编写猜数字游戏，限制最多猜 7 次。",[186,160938,160939],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[5241,160941,160942],{},"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":141,"searchDepth":142,"depth":142,"links":160944},[160945,160946,160947,160948,160949,160953,160954,160955,160956,160957,160958,160959,160960,160961,160962],{"id":159201,"depth":142,"text":159202},{"id":159231,"depth":142,"text":159232},{"id":159320,"depth":142,"text":159321},{"id":159414,"depth":142,"text":159415},{"id":159588,"depth":142,"text":159589,"children":160950},[160951,160952],{"id":159592,"depth":1293,"text":159593},{"id":159656,"depth":1293,"text":159657},{"id":159720,"depth":142,"text":159721},{"id":159815,"depth":142,"text":159816},{"id":159924,"depth":142,"text":159925},{"id":160120,"depth":142,"text":160121},{"id":160205,"depth":142,"text":160206},{"id":160344,"depth":142,"text":160345},{"id":160524,"depth":142,"text":160525},{"id":160673,"depth":142,"text":160674},{"id":160887,"depth":142,"text":160888},{"id":160921,"depth":142,"text":160922},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159193,"description":154},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":160969,"title":160970,"body":160971,"description":154,"extension":155,"meta":162976,"navigation":157,"path":162977,"seo":162978,"stem":162979,"__hash__":162980},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":160972,"toc":162956},[160973,160976,160980,160983,160986,161000,161003,161017,161021,161023,161042,161044,161091,161093,161107,161111,161185,161188,161192,161195,161254,161262,161265,161318,161321,161325,161330,161385,161393,161443,161447,161452,161460,161559,161565,161569,161574,161577,161588,161629,161642,161646,161649,161685,161688,161701,161704,161764,161768,161772,161775,161826,161830,161833,161880,161886,161952,161955,161959,161962,162078,162081,162085,162088,162194,162198,162201,162239,162242,162284,162287,162347,162350,162354,162818,162821,162825,162852,162858,162919,162923,162953],[10,160974,160970],{"id":160975},"_5-函数基础",[14,160977,160979],{"id":160978},"_51-为什么需要函数","5.1 为什么需要函数",[19,160981,160982],{},"函数用于封装一段可以重复使用的代码。",[19,160984,160985],{},"不使用函数的问题：",[183,160987,160988,160991,160994,160997],{},[186,160989,160990],{},"重复代码多。",[186,160992,160993],{},"修改逻辑时容易漏改。",[186,160995,160996],{},"主流程不清晰。",[186,160998,160999],{},"程序越写越长，难以维护。",[19,161001,161002],{},"使用函数后的好处：",[183,161004,161005,161008,161011,161014],{},[186,161006,161007],{},"提高复用性。",[186,161009,161010],{},"提高可读性。",[186,161012,161013],{},"便于调试。",[186,161015,161016],{},"便于分工。",[14,161018,161020],{"id":161019},"_52-函数定义","5.2 函数定义",[19,161022,5296],{},[220,161024,161026],{"className":30493,"code":161025,"language":30495,"meta":141,"style":141},"def 函数名():\n    函数体\n",[30,161027,161028,161037],{"__ignoreMap":141},[228,161029,161030,161032,161035],{"class":230,"line":231},[228,161031,32062],{"class":234},[228,161033,161034],{"class":2077}," 函数名",[228,161036,32068],{"class":238},[228,161038,161039],{"class":230,"line":142},[228,161040,161041],{"class":238},"    函数体\n",[19,161043,15250],{},[220,161045,161047],{"className":30493,"code":161046,"language":30495,"meta":141,"style":141},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[30,161048,161049,161058,161068,161078,161082,161086],{"__ignoreMap":141},[228,161050,161051,161053,161056],{"class":230,"line":231},[228,161052,32062],{"class":234},[228,161054,161055],{"class":2077}," say_hello",[228,161057,32068],{"class":238},[228,161059,161060,161062,161064,161066],{"class":230,"line":142},[228,161061,31414],{"class":287},[228,161063,239],{"class":238},[228,161065,5959],{"class":343},[228,161067,245],{"class":238},[228,161069,161070,161072,161074,161076],{"class":230,"line":1293},[228,161071,31414],{"class":287},[228,161073,239],{"class":238},[228,161075,146698],{"class":343},[228,161077,245],{"class":238},[228,161079,161080],{"class":230,"line":1308},[228,161081,2514],{"emptyLinePlaceholder":157},[228,161083,161084],{"class":230,"line":1314},[228,161085,2514],{"emptyLinePlaceholder":157},[228,161087,161088],{"class":230,"line":1328},[228,161089,161090],{"class":238},"say_hello()\n",[19,161092,9140],{},[183,161094,161095,161098,161101,161104],{},[186,161096,161097],{},"函数必须先定义，再调用。",[186,161099,161100],{},"函数名遵循变量命名规则。",[186,161102,161103],{},"函数体需要缩进。",[186,161105,161106],{},"函数不调用就不会执行。",[14,161108,161110],{"id":161109},"_53-函数调用","5.3 函数调用",[220,161112,161114],{"className":30493,"code":161113,"language":30495,"meta":141,"style":141},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[30,161115,161116,161125,161136,161147,161158,161168,161172,161176,161181],{"__ignoreMap":141},[228,161117,161118,161120,161123],{"class":230,"line":231},[228,161119,32062],{"class":234},[228,161121,161122],{"class":2077}," print_menu",[228,161124,32068],{"class":238},[228,161126,161127,161129,161131,161134],{"class":230,"line":142},[228,161128,31414],{"class":287},[228,161130,239],{"class":238},[228,161132,161133],{"class":343},"\"1. 查询\"",[228,161135,245],{"class":238},[228,161137,161138,161140,161142,161145],{"class":230,"line":1293},[228,161139,31414],{"class":287},[228,161141,239],{"class":238},[228,161143,161144],{"class":343},"\"2. 添加\"",[228,161146,245],{"class":238},[228,161148,161149,161151,161153,161156],{"class":230,"line":1308},[228,161150,31414],{"class":287},[228,161152,239],{"class":238},[228,161154,161155],{"class":343},"\"3. 删除\"",[228,161157,245],{"class":238},[228,161159,161160,161162,161164,161166],{"class":230,"line":1314},[228,161161,31414],{"class":287},[228,161163,239],{"class":238},[228,161165,160740],{"class":343},[228,161167,245],{"class":238},[228,161169,161170],{"class":230,"line":1328},[228,161171,2514],{"emptyLinePlaceholder":157},[228,161173,161174],{"class":230,"line":1334},[228,161175,2514],{"emptyLinePlaceholder":157},[228,161177,161178],{"class":230,"line":1425},[228,161179,161180],{"class":238},"print_menu()\n",[228,161182,161183],{"class":230,"line":1431},[228,161184,161180],{"class":238},[19,161186,161187],{},"函数可以多次调用，每次调用都会执行函数体。",[14,161189,161191],{"id":161190},"_54-参数","5.4 参数",[19,161193,161194],{},"参数用于向函数传递数据。",[220,161196,161198],{"className":30493,"code":161197,"language":30495,"meta":141,"style":141},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[30,161199,161200,161209,161229,161233,161237,161246],{"__ignoreMap":141},[228,161201,161202,161204,161206],{"class":230,"line":231},[228,161203,32062],{"class":234},[228,161205,161055],{"class":2077},[228,161207,161208],{"class":238},"(name):\n",[228,161210,161211,161213,161215,161217,161219,161221,161223,161225,161227],{"class":230,"line":142},[228,161212,31414],{"class":287},[228,161214,239],{"class":238},[228,161216,291],{"class":234},[228,161218,157113],{"class":343},[228,161220,1134],{"class":287},[228,161222,79925],{"class":238},[228,161224,1184],{"class":287},[228,161226,489],{"class":343},[228,161228,245],{"class":238},[228,161230,161231],{"class":230,"line":1293},[228,161232,2514],{"emptyLinePlaceholder":157},[228,161234,161235],{"class":230,"line":1308},[228,161236,2514],{"emptyLinePlaceholder":157},[228,161238,161239,161242,161244],{"class":230,"line":1314},[228,161240,161241],{"class":238},"say_hello(",[228,161243,149947],{"class":343},[228,161245,245],{"class":238},[228,161247,161248,161250,161252],{"class":230,"line":1328},[228,161249,161241],{"class":238},[228,161251,150995],{"class":343},[228,161253,245],{"class":238},[19,161255,161256,161258,161259,161261],{},[30,161257,79925],{}," 是形参，",[30,161260,149947],{}," 是实参。",[19,161263,161264],{},"多个参数：",[220,161266,161268],{"className":30493,"code":161267,"language":30495,"meta":141,"style":141},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[30,161269,161270,161278,161291,161297,161301,161305],{"__ignoreMap":141},[228,161271,161272,161274,161276],{"class":230,"line":231},[228,161273,32062],{"class":234},[228,161275,5324],{"class":2077},[228,161277,151152],{"class":238},[228,161279,161280,161283,161285,161287,161289],{"class":230,"line":142},[228,161281,161282],{"class":238},"    result ",[228,161284,284],{"class":234},[228,161286,10984],{"class":238},[228,161288,719],{"class":234},[228,161290,151163],{"class":238},[228,161292,161293,161295],{"class":230,"line":1293},[228,161294,31414],{"class":287},[228,161296,76700],{"class":238},[228,161298,161299],{"class":230,"line":1308},[228,161300,2514],{"emptyLinePlaceholder":157},[228,161302,161303],{"class":230,"line":1314},[228,161304,2514],{"emptyLinePlaceholder":157},[228,161306,161307,161310,161312,161314,161316],{"class":230,"line":1328},[228,161308,161309],{"class":238},"add(",[228,161311,684],{"class":287},[228,161313,12550],{"class":238},[228,161315,938],{"class":287},[228,161317,245],{"class":238},[19,161319,161320],{},"调用时参数数量必须匹配。",[14,161322,161324],{"id":161323},"_55-返回值","5.5 返回值",[19,161326,161327,161329],{},[30,161328,17161],{}," 用于把函数内部的结果返回给调用者。",[220,161331,161333],{"className":30493,"code":161332,"language":30495,"meta":141,"style":141},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[30,161334,161335,161343,161353,161357,161361,161379],{"__ignoreMap":141},[228,161336,161337,161339,161341],{"class":230,"line":231},[228,161338,32062],{"class":234},[228,161340,5324],{"class":2077},[228,161342,151152],{"class":238},[228,161344,161345,161347,161349,161351],{"class":230,"line":142},[228,161346,4204],{"class":234},[228,161348,10984],{"class":238},[228,161350,719],{"class":234},[228,161352,151163],{"class":238},[228,161354,161355],{"class":230,"line":1293},[228,161356,2514],{"emptyLinePlaceholder":157},[228,161358,161359],{"class":230,"line":1308},[228,161360,2514],{"emptyLinePlaceholder":157},[228,161362,161363,161366,161368,161371,161373,161375,161377],{"class":230,"line":1314},[228,161364,161365],{"class":238},"result ",[228,161367,284],{"class":234},[228,161369,161370],{"class":238}," add(",[228,161372,684],{"class":287},[228,161374,12550],{"class":238},[228,161376,938],{"class":287},[228,161378,245],{"class":238},[228,161380,161381,161383],{"class":230,"line":1328},[228,161382,30530],{"class":287},[228,161384,76700],{"class":238},[19,161386,161387,161388,161390,161391,78],{},"如果函数没有写 ",[30,161389,17161],{},"，默认返回 ",[30,161392,95801],{},[220,161394,161396],{"className":30493,"code":161395,"language":30495,"meta":141,"style":141},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[30,161397,161398,161406,161416,161420,161424,161433],{"__ignoreMap":141},[228,161399,161400,161402,161404],{"class":230,"line":231},[228,161401,32062],{"class":234},[228,161403,161055],{"class":2077},[228,161405,32068],{"class":238},[228,161407,161408,161410,161412,161414],{"class":230,"line":142},[228,161409,31414],{"class":287},[228,161411,239],{"class":238},[228,161413,5959],{"class":343},[228,161415,245],{"class":238},[228,161417,161418],{"class":230,"line":1293},[228,161419,2514],{"emptyLinePlaceholder":157},[228,161421,161422],{"class":230,"line":1308},[228,161423,2514],{"emptyLinePlaceholder":157},[228,161425,161426,161428,161430],{"class":230,"line":1314},[228,161427,161365],{"class":238},[228,161429,284],{"class":234},[228,161431,161432],{"class":238}," say_hello()\n",[228,161434,161435,161437,161440],{"class":230,"line":1328},[228,161436,30530],{"class":287},[228,161438,161439],{"class":238},"(result)  ",[228,161441,161442],{"class":297},"# None\n",[14,161444,161446],{"id":161445},"_56-return的作用","5.6 return的作用",[19,161448,161449,161451],{},[30,161450,17161],{}," 有两个作用：",[183,161453,161454,161457],{},[186,161455,161456],{},"返回结果。",[186,161458,161459],{},"结束函数。",[220,161461,161463],{"className":30493,"code":161462,"language":30495,"meta":141,"style":141},"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",[30,161464,161465,161475,161487,161494,161498,161510,161517,161521,161528,161532,161536,161547],{"__ignoreMap":141},[228,161466,161467,161469,161472],{"class":230,"line":231},[228,161468,32062],{"class":234},[228,161470,161471],{"class":2077}," check_age",[228,161473,161474],{"class":238},"(age):\n",[228,161476,161477,161479,161481,161483,161485],{"class":230,"line":142},[228,161478,3215],{"class":234},[228,161480,15822],{"class":238},[228,161482,1148],{"class":234},[228,161484,4207],{"class":287},[228,161486,3853],{"class":238},[228,161488,161489,161491],{"class":230,"line":1293},[228,161490,14867],{"class":234},[228,161492,161493],{"class":343}," \"年龄不合法\"\n",[228,161495,161496],{"class":230,"line":1308},[228,161497,2514],{"emptyLinePlaceholder":157},[228,161499,161500,161502,161504,161506,161508],{"class":230,"line":1314},[228,161501,3215],{"class":234},[228,161503,15822],{"class":238},[228,161505,1824],{"class":234},[228,161507,156344],{"class":287},[228,161509,3853],{"class":238},[228,161511,161512,161514],{"class":230,"line":1328},[228,161513,14867],{"class":234},[228,161515,161516],{"class":343}," \"成年人\"\n",[228,161518,161519],{"class":230,"line":1334},[228,161520,2514],{"emptyLinePlaceholder":157},[228,161522,161523,161525],{"class":230,"line":1425},[228,161524,4204],{"class":234},[228,161526,161527],{"class":343}," \"未成年人\"\n",[228,161529,161530],{"class":230,"line":1431},[228,161531,2514],{"emptyLinePlaceholder":157},[228,161533,161534],{"class":230,"line":1443},[228,161535,2514],{"emptyLinePlaceholder":157},[228,161537,161538,161540,161543,161545],{"class":230,"line":1726},[228,161539,30530],{"class":287},[228,161541,161542],{"class":238},"(check_age(",[228,161544,938],{"class":287},[228,161546,30612],{"class":238},[228,161548,161549,161551,161553,161555,161557],{"class":230,"line":1731},[228,161550,30530],{"class":287},[228,161552,161542],{"class":238},[228,161554,770],{"class":234},[228,161556,456],{"class":287},[228,161558,30612],{"class":238},[19,161560,161561,161562,161564],{},"函数执行到 ",[30,161563,17161],{}," 后，后面的代码不会继续执行。",[14,161566,161568],{"id":161567},"_57-none","5.7 None",[19,161570,161571,161573],{},[30,161572,95801],{}," 表示空值或没有结果。",[19,161575,161576],{},"常见使用场景：",[183,161578,161579,161582,161585],{},[186,161580,161581],{},"函数没有返回值。",[186,161583,161584],{},"变量暂时没有具体值。",[186,161586,161587],{},"表示查询不到结果。",[220,161589,161591],{"className":30493,"code":161590,"language":30495,"meta":141,"style":141},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[30,161592,161593,161601,161605,161618],{"__ignoreMap":141},[228,161594,161595,161597,161599],{"class":230,"line":231},[228,161596,161365],{"class":238},[228,161598,284],{"class":234},[228,161600,152231],{"class":287},[228,161602,161603],{"class":230,"line":142},[228,161604,2514],{"emptyLinePlaceholder":157},[228,161606,161607,161609,161612,161614,161616],{"class":230,"line":1293},[228,161608,1645],{"class":234},[228,161610,161611],{"class":238}," result ",[228,161613,39042],{"class":234},[228,161615,39048],{"class":287},[228,161617,3853],{"class":238},[228,161619,161620,161622,161624,161627],{"class":230,"line":1308},[228,161621,31414],{"class":287},[228,161623,239],{"class":238},[228,161625,161626],{"class":343},"\"没有数据\"",[228,161628,245],{"class":238},[19,161630,161631,161632,161634,161635,161638,161639,78],{},"判断 ",[30,161633,95801],{}," 推荐使用 ",[30,161636,161637],{},"is None","，不要写成 ",[30,161640,161641],{},"== None",[14,161643,161645],{"id":161644},"_58-函数文档字符串","5.8 函数文档字符串",[19,161647,161648],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[220,161650,161652],{"className":30493,"code":161651,"language":30495,"meta":141,"style":141},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[30,161653,161654,161664,161669],{"__ignoreMap":141},[228,161655,161656,161658,161661],{"class":230,"line":231},[228,161657,32062],{"class":234},[228,161659,161660],{"class":2077}," calculate_bmi",[228,161662,161663],{"class":238},"(weight, height):\n",[228,161665,161666],{"class":230,"line":142},[228,161667,161668],{"class":343},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[228,161670,161671,161673,161676,161678,161681,161683],{"class":230,"line":1293},[228,161672,4204],{"class":234},[228,161674,161675],{"class":238}," weight ",[228,161677,822],{"class":234},[228,161679,161680],{"class":238}," height ",[228,161682,10776],{"class":234},[228,161684,47838],{"class":287},[19,161686,161687],{},"查看说明：",[220,161689,161691],{"className":30493,"code":161690,"language":30495,"meta":141,"style":141},"help(calculate_bmi)\n",[30,161692,161693],{"__ignoreMap":141},[228,161694,161695,161698],{"class":230,"line":231},[228,161696,161697],{"class":287},"help",[228,161699,161700],{"class":238},"(calculate_bmi)\n",[19,161702,161703],{},"较完整的写法：",[220,161705,161707],{"className":30493,"code":161706,"language":30495,"meta":141,"style":141},"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",[30,161708,161709,161717,161722,161727,161731,161736,161741,161746,161750],{"__ignoreMap":141},[228,161710,161711,161713,161715],{"class":230,"line":231},[228,161712,32062],{"class":234},[228,161714,161660],{"class":2077},[228,161716,161663],{"class":238},[228,161718,161719],{"class":230,"line":142},[228,161720,161721],{"class":343},"    \"\"\"\n",[228,161723,161724],{"class":230,"line":1293},[228,161725,161726],{"class":343},"    计算BMI。\n",[228,161728,161729],{"class":230,"line":1308},[228,161730,2514],{"emptyLinePlaceholder":157},[228,161732,161733],{"class":230,"line":1314},[228,161734,161735],{"class":343},"    :param weight: 体重，单位kg\n",[228,161737,161738],{"class":230,"line":1328},[228,161739,161740],{"class":343},"    :param height: 身高，单位m\n",[228,161742,161743],{"class":230,"line":1334},[228,161744,161745],{"class":343},"    :return: BMI数值\n",[228,161747,161748],{"class":230,"line":1425},[228,161749,161721],{"class":343},[228,161751,161752,161754,161756,161758,161760,161762],{"class":230,"line":1431},[228,161753,4204],{"class":234},[228,161755,161675],{"class":238},[228,161757,822],{"class":234},[228,161759,161680],{"class":238},[228,161761,10776],{"class":234},[228,161763,47838],{"class":287},[14,161765,161767],{"id":161766},"_59-变量作用域","5.9 变量作用域",[200,161769,161771],{"id":161770},"_591-局部变量","5.9.1 局部变量",[19,161773,161774],{},"在函数内部定义的变量，只能在函数内部使用。",[220,161776,161778],{"className":30493,"code":161777,"language":30495,"meta":141,"style":141},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[30,161779,161780,161789,161797,161803,161807,161811,161816],{"__ignoreMap":141},[228,161781,161782,161784,161787],{"class":230,"line":231},[228,161783,32062],{"class":234},[228,161785,161786],{"class":2077}," test",[228,161788,32068],{"class":238},[228,161790,161791,161793,161795],{"class":230,"line":142},[228,161792,45708],{"class":238},[228,161794,284],{"class":234},[228,161796,58543],{"class":287},[228,161798,161799,161801],{"class":230,"line":1293},[228,161800,31414],{"class":287},[228,161802,252],{"class":238},[228,161804,161805],{"class":230,"line":1308},[228,161806,2514],{"emptyLinePlaceholder":157},[228,161808,161809],{"class":230,"line":1314},[228,161810,2514],{"emptyLinePlaceholder":157},[228,161812,161813],{"class":230,"line":1328},[228,161814,161815],{"class":238},"test()\n",[228,161817,161818,161820,161823],{"class":230,"line":1334},[228,161819,30530],{"class":287},[228,161821,161822],{"class":238},"(num)  ",[228,161824,161825],{"class":297},"# 报错\n",[200,161827,161829],{"id":161828},"_592-全局变量","5.9.2 全局变量",[19,161831,161832],{},"在函数外部定义的变量，可以在函数内部读取。",[220,161834,161836],{"className":30493,"code":161835,"language":30495,"meta":141,"style":141},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[30,161837,161838,161846,161850,161854,161862,161868,161872,161876],{"__ignoreMap":141},[228,161839,161840,161842,161844],{"class":230,"line":231},[228,161841,146595],{"class":238},[228,161843,284],{"class":234},[228,161845,149412],{"class":343},[228,161847,161848],{"class":230,"line":142},[228,161849,2514],{"emptyLinePlaceholder":157},[228,161851,161852],{"class":230,"line":1293},[228,161853,2514],{"emptyLinePlaceholder":157},[228,161855,161856,161858,161860],{"class":230,"line":1308},[228,161857,32062],{"class":234},[228,161859,161055],{"class":2077},[228,161861,32068],{"class":238},[228,161863,161864,161866],{"class":230,"line":1314},[228,161865,31414],{"class":287},[228,161867,150719],{"class":238},[228,161869,161870],{"class":230,"line":1328},[228,161871,2514],{"emptyLinePlaceholder":157},[228,161873,161874],{"class":230,"line":1334},[228,161875,2514],{"emptyLinePlaceholder":157},[228,161877,161878],{"class":230,"line":1425},[228,161879,161090],{"class":238},[19,161881,161882,161883,78],{},"如果要在函数内部修改全局变量，需要 ",[30,161884,161885],{},"global",[220,161887,161889],{"className":30493,"code":161888,"language":30495,"meta":141,"style":141},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[30,161890,161891,161899,161903,161907,161916,161924,161932,161936,161940,161945],{"__ignoreMap":141},[228,161892,161893,161895,161897],{"class":230,"line":231},[228,161894,146750],{"class":238},[228,161896,284],{"class":234},[228,161898,47448],{"class":287},[228,161900,161901],{"class":230,"line":142},[228,161902,2514],{"emptyLinePlaceholder":157},[228,161904,161905],{"class":230,"line":1293},[228,161906,2514],{"emptyLinePlaceholder":157},[228,161908,161909,161911,161914],{"class":230,"line":1308},[228,161910,32062],{"class":234},[228,161912,161913],{"class":2077}," add_count",[228,161915,32068],{"class":238},[228,161917,161918,161921],{"class":230,"line":1314},[228,161919,161920],{"class":234},"    global",[228,161922,161923],{"class":238}," count\n",[228,161925,161926,161928,161930],{"class":230,"line":1328},[228,161927,159492],{"class":238},[228,161929,9592],{"class":234},[228,161931,55814],{"class":287},[228,161933,161934],{"class":230,"line":1334},[228,161935,2514],{"emptyLinePlaceholder":157},[228,161937,161938],{"class":230,"line":1425},[228,161939,2514],{"emptyLinePlaceholder":157},[228,161941,161942],{"class":230,"line":1431},[228,161943,161944],{"class":238},"add_count()\n",[228,161946,161947,161949],{"class":230,"line":1443},[228,161948,30530],{"class":287},[228,161950,161951],{"class":238},"(count)\n",[19,161953,161954],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,161956,161958],{"id":161957},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,161960,161961],{},"一个函数中可以调用另一个函数。",[220,161963,161965],{"className":30493,"code":161964,"language":30495,"meta":141,"style":141},"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",[30,161966,161967,161976,161990,161994,161998,162007,162012,162032,162053,162057,162061,162065],{"__ignoreMap":141},[228,161968,161969,161971,161974],{"class":230,"line":231},[228,161970,32062],{"class":234},[228,161972,161973],{"class":2077}," print_line",[228,161975,32068],{"class":238},[228,161977,161978,161980,161982,161984,161986,161988],{"class":230,"line":142},[228,161979,31414],{"class":287},[228,161981,239],{"class":238},[228,161983,32598],{"class":343},[228,161985,6633],{"class":234},[228,161987,78780],{"class":287},[228,161989,245],{"class":238},[228,161991,161992],{"class":230,"line":1293},[228,161993,2514],{"emptyLinePlaceholder":157},[228,161995,161996],{"class":230,"line":1308},[228,161997,2514],{"emptyLinePlaceholder":157},[228,161999,162000,162002,162005],{"class":230,"line":1314},[228,162001,32062],{"class":234},[228,162003,162004],{"class":2077}," print_info",[228,162006,149434],{"class":238},[228,162008,162009],{"class":230,"line":1328},[228,162010,162011],{"class":238},"    print_line()\n",[228,162013,162014,162016,162018,162020,162022,162024,162026,162028,162030],{"class":230,"line":1334},[228,162015,31414],{"class":287},[228,162017,239],{"class":238},[228,162019,291],{"class":234},[228,162021,156741],{"class":343},[228,162023,1134],{"class":287},[228,162025,79925],{"class":238},[228,162027,1184],{"class":287},[228,162029,489],{"class":343},[228,162031,245],{"class":238},[228,162033,162034,162036,162038,162040,162043,162045,162047,162049,162051],{"class":230,"line":1425},[228,162035,31414],{"class":287},[228,162037,239],{"class":238},[228,162039,291],{"class":234},[228,162041,162042],{"class":343},"\"年龄:",[228,162044,1134],{"class":287},[228,162046,70336],{"class":238},[228,162048,1184],{"class":287},[228,162050,489],{"class":343},[228,162052,245],{"class":238},[228,162054,162055],{"class":230,"line":1431},[228,162056,162011],{"class":238},[228,162058,162059],{"class":230,"line":1443},[228,162060,2514],{"emptyLinePlaceholder":157},[228,162062,162063],{"class":230,"line":1726},[228,162064,2514],{"emptyLinePlaceholder":157},[228,162066,162067,162070,162072,162074,162076],{"class":230,"line":1731},[228,162068,162069],{"class":238},"print_info(",[228,162071,149947],{"class":343},[228,162073,12550],{"class":238},[228,162075,888],{"class":287},[228,162077,245],{"class":238},[19,162079,162080],{},"这种方式可以把小功能组合成大功能。",[14,162082,162084],{"id":162083},"_511-参数检查","5.11 参数检查",[19,162086,162087],{},"函数内部可以检查参数是否合法。",[220,162089,162091],{"className":30493,"code":162090,"language":30495,"meta":141,"style":141},"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",[30,162092,162093,162102,162114,162120,162130,162134,162138,162155,162159,162171,162182,162188],{"__ignoreMap":141},[228,162094,162095,162097,162100],{"class":230,"line":231},[228,162096,32062],{"class":234},[228,162098,162099],{"class":2077}," divide",[228,162101,151152],{"class":238},[228,162103,162104,162106,162108,162110,162112],{"class":230,"line":142},[228,162105,3215],{"class":234},[228,162107,10997],{"class":238},[228,162109,3063],{"class":234},[228,162111,4207],{"class":287},[228,162113,3853],{"class":238},[228,162115,162116,162118],{"class":230,"line":1293},[228,162117,14867],{"class":234},[228,162119,152231],{"class":287},[228,162121,162122,162124,162126,162128],{"class":230,"line":1308},[228,162123,4204],{"class":234},[228,162125,10984],{"class":238},[228,162127,822],{"class":234},[228,162129,151163],{"class":238},[228,162131,162132],{"class":230,"line":1314},[228,162133,2514],{"emptyLinePlaceholder":157},[228,162135,162136],{"class":230,"line":1328},[228,162137,2514],{"emptyLinePlaceholder":157},[228,162139,162140,162142,162144,162147,162149,162151,162153],{"class":230,"line":1334},[228,162141,161365],{"class":238},[228,162143,284],{"class":234},[228,162145,162146],{"class":238}," divide(",[228,162148,684],{"class":287},[228,162150,12550],{"class":238},[228,162152,430],{"class":287},[228,162154,245],{"class":238},[228,162156,162157],{"class":230,"line":1425},[228,162158,2514],{"emptyLinePlaceholder":157},[228,162160,162161,162163,162165,162167,162169],{"class":230,"line":1431},[228,162162,1645],{"class":234},[228,162164,161611],{"class":238},[228,162166,39042],{"class":234},[228,162168,39048],{"class":287},[228,162170,3853],{"class":238},[228,162172,162173,162175,162177,162180],{"class":230,"line":1443},[228,162174,31414],{"class":287},[228,162176,239],{"class":238},[228,162178,162179],{"class":343},"\"除数不能为0\"",[228,162181,245],{"class":238},[228,162183,162184,162186],{"class":230,"line":1726},[228,162185,1815],{"class":234},[228,162187,3853],{"class":238},[228,162189,162190,162192],{"class":230,"line":1731},[228,162191,31414],{"class":287},[228,162193,76700],{"class":238},[14,162195,162197],{"id":162196},"_512-类型提示","5.12 类型提示",[19,162199,162200],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[220,162202,162204],{"className":30493,"code":162203,"language":30495,"meta":141,"style":141},"def add(a: int, b: int) -> int:\n    return a + b\n",[30,162205,162206,162229],{"__ignoreMap":141},[228,162207,162208,162210,162212,162215,162217,162220,162222,162225,162227],{"class":230,"line":231},[228,162209,32062],{"class":234},[228,162211,5324],{"class":2077},[228,162213,162214],{"class":238},"(a: ",[228,162216,242],{"class":287},[228,162218,162219],{"class":238},", b: ",[228,162221,242],{"class":287},[228,162223,162224],{"class":238},") -> ",[228,162226,242],{"class":287},[228,162228,3853],{"class":238},[228,162230,162231,162233,162235,162237],{"class":230,"line":142},[228,162232,4204],{"class":234},[228,162234,10984],{"class":238},[228,162236,719],{"class":234},[228,162238,151163],{"class":238},[19,162240,162241],{},"字符串参数：",[220,162243,162245],{"className":30493,"code":162244,"language":30495,"meta":141,"style":141},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[30,162246,162247,162264],{"__ignoreMap":141},[228,162248,162249,162251,162253,162256,162258,162260,162262],{"class":230,"line":231},[228,162250,32062],{"class":234},[228,162252,161055],{"class":2077},[228,162254,162255],{"class":238},"(name: ",[228,162257,1413],{"class":287},[228,162259,162224],{"class":238},[228,162261,95801],{"class":287},[228,162263,3853],{"class":238},[228,162265,162266,162268,162270,162272,162274,162276,162278,162280,162282],{"class":230,"line":142},[228,162267,31414],{"class":287},[228,162269,239],{"class":238},[228,162271,291],{"class":234},[228,162273,157113],{"class":343},[228,162275,1134],{"class":287},[228,162277,79925],{"class":238},[228,162279,1184],{"class":287},[228,162281,489],{"class":343},[228,162283,245],{"class":238},[19,162285,162286],{},"列表参数：",[220,162288,162290],{"className":30493,"code":162289,"language":30495,"meta":141,"style":141},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[30,162291,162292,162311,162319,162331,162340],{"__ignoreMap":141},[228,162293,162294,162296,162299,162302,162304,162307,162309],{"class":230,"line":231},[228,162295,32062],{"class":234},[228,162297,162298],{"class":2077}," get_total",[228,162300,162301],{"class":238},"(numbers: list[",[228,162303,242],{"class":287},[228,162305,162306],{"class":238},"]) -> ",[228,162308,242],{"class":287},[228,162310,3853],{"class":238},[228,162312,162313,162315,162317],{"class":230,"line":142},[228,162314,159366],{"class":238},[228,162316,284],{"class":234},[228,162318,47448],{"class":287},[228,162320,162321,162323,162326,162328],{"class":230,"line":1293},[228,162322,3315],{"class":234},[228,162324,162325],{"class":238}," number ",[228,162327,26159],{"class":234},[228,162329,162330],{"class":238}," numbers:\n",[228,162332,162333,162335,162337],{"class":230,"line":1308},[228,162334,160041],{"class":238},[228,162336,9592],{"class":234},[228,162338,162339],{"class":238}," number\n",[228,162341,162342,162344],{"class":230,"line":1314},[228,162343,4204],{"class":234},[228,162345,162346],{"class":238}," total\n",[19,162348,162349],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,162351,162353],{"id":162352},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[220,162355,162357],{"className":30493,"code":162356,"language":30495,"meta":141,"style":141},"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",[30,162358,162359,162369,162373,162377,162385,162396,162406,162416,162426,162436,162440,162444,162453,162475,162479,162483,162492,162498,162518,162530,162541,162545,162554,162565,162570,162574,162578,162587,162593,162612,162624,162634,162638,162649,162659,162663,162671,162682,162686,162690,162694,162702,162707,162721,162725,162737,162742,162754,162759,162771,162776,162788,162798,162802,162808],{"__ignoreMap":141},[228,162360,162361,162364,162366],{"class":230,"line":231},[228,162362,162363],{"class":238},"balance ",[228,162365,284],{"class":234},[228,162367,162368],{"class":287}," 1000\n",[228,162370,162371],{"class":230,"line":142},[228,162372,2514],{"emptyLinePlaceholder":157},[228,162374,162375],{"class":230,"line":1293},[228,162376,2514],{"emptyLinePlaceholder":157},[228,162378,162379,162381,162383],{"class":230,"line":1308},[228,162380,32062],{"class":234},[228,162382,152092],{"class":2077},[228,162384,32068],{"class":238},[228,162386,162387,162389,162391,162394],{"class":230,"line":1314},[228,162388,31414],{"class":287},[228,162390,239],{"class":238},[228,162392,162393],{"class":343},"\"====== ATM ======\"",[228,162395,245],{"class":238},[228,162397,162398,162400,162402,162404],{"class":230,"line":1328},[228,162399,31414],{"class":287},[228,162401,239],{"class":238},[228,162403,160707],{"class":343},[228,162405,245],{"class":238},[228,162407,162408,162410,162412,162414],{"class":230,"line":1334},[228,162409,31414],{"class":287},[228,162411,239],{"class":238},[228,162413,160718],{"class":343},[228,162415,245],{"class":238},[228,162417,162418,162420,162422,162424],{"class":230,"line":1425},[228,162419,31414],{"class":287},[228,162421,239],{"class":238},[228,162423,160729],{"class":343},[228,162425,245],{"class":238},[228,162427,162428,162430,162432,162434],{"class":230,"line":1431},[228,162429,31414],{"class":287},[228,162431,239],{"class":238},[228,162433,160740],{"class":343},[228,162435,245],{"class":238},[228,162437,162438],{"class":230,"line":1443},[228,162439,2514],{"emptyLinePlaceholder":157},[228,162441,162442],{"class":230,"line":1726},[228,162443,2514],{"emptyLinePlaceholder":157},[228,162445,162446,162448,162451],{"class":230,"line":1731},[228,162447,32062],{"class":234},[228,162449,162450],{"class":2077}," show_balance",[228,162452,32068],{"class":238},[228,162454,162455,162457,162459,162461,162464,162466,162469,162471,162473],{"class":230,"line":1737},[228,162456,31414],{"class":287},[228,162458,239],{"class":238},[228,162460,291],{"class":234},[228,162462,162463],{"class":343},"\"当前余额:",[228,162465,1134],{"class":287},[228,162467,162468],{"class":238},"balance",[228,162470,1184],{"class":287},[228,162472,157071],{"class":343},[228,162474,245],{"class":238},[228,162476,162477],{"class":230,"line":1742},[228,162478,2514],{"emptyLinePlaceholder":157},[228,162480,162481],{"class":230,"line":1756},[228,162482,2514],{"emptyLinePlaceholder":157},[228,162484,162485,162487,162490],{"class":230,"line":1761},[228,162486,32062],{"class":234},[228,162488,162489],{"class":2077}," save_money",[228,162491,32068],{"class":238},[228,162493,162494,162496],{"class":230,"line":1767},[228,162495,161920],{"class":234},[228,162497,150158],{"class":238},[228,162499,162500,162503,162505,162507,162509,162511,162513,162516],{"class":230,"line":1788},[228,162501,162502],{"class":238},"    money ",[228,162504,284],{"class":234},[228,162506,109912],{"class":287},[228,162508,239],{"class":238},[228,162510,53936],{"class":287},[228,162512,239],{"class":238},[228,162514,162515],{"class":343},"\"请输入存款金额:\"",[228,162517,30612],{"class":238},[228,162519,162520,162522,162524,162526,162528],{"class":230,"line":1793},[228,162521,3215],{"class":234},[228,162523,150201],{"class":238},[228,162525,1702],{"class":234},[228,162527,4207],{"class":287},[228,162529,3853],{"class":238},[228,162531,162532,162534,162536,162539],{"class":230,"line":1807},[228,162533,32566],{"class":287},[228,162535,239],{"class":238},[228,162537,162538],{"class":343},"\"金额必须大于0\"",[228,162540,245],{"class":238},[228,162542,162543],{"class":230,"line":1812},[228,162544,152420],{"class":234},[228,162546,162547,162550,162552],{"class":230,"line":1841},[228,162548,162549],{"class":238},"    balance ",[228,162551,9592],{"class":234},[228,162553,150234],{"class":238},[228,162555,162556,162558,162560,162563],{"class":230,"line":1846},[228,162557,31414],{"class":287},[228,162559,239],{"class":238},[228,162561,162562],{"class":343},"\"存款成功\"",[228,162564,245],{"class":238},[228,162566,162567],{"class":230,"line":1863},[228,162568,162569],{"class":238},"    show_balance()\n",[228,162571,162572],{"class":230,"line":1868},[228,162573,2514],{"emptyLinePlaceholder":157},[228,162575,162576],{"class":230,"line":1873},[228,162577,2514],{"emptyLinePlaceholder":157},[228,162579,162580,162582,162585],{"class":230,"line":1878},[228,162581,32062],{"class":234},[228,162583,162584],{"class":2077}," withdraw_money",[228,162586,32068],{"class":238},[228,162588,162589,162591],{"class":230,"line":1892},[228,162590,161920],{"class":234},[228,162592,150158],{"class":238},[228,162594,162595,162597,162599,162601,162603,162605,162607,162610],{"class":230,"line":1897},[228,162596,162502],{"class":238},[228,162598,284],{"class":234},[228,162600,109912],{"class":287},[228,162602,239],{"class":238},[228,162604,53936],{"class":287},[228,162606,239],{"class":238},[228,162608,162609],{"class":343},"\"请输入取款金额:\"",[228,162611,30612],{"class":238},[228,162613,162614,162616,162618,162620,162622],{"class":230,"line":2691},[228,162615,3215],{"class":234},[228,162617,150201],{"class":238},[228,162619,1702],{"class":234},[228,162621,4207],{"class":287},[228,162623,3853],{"class":238},[228,162625,162626,162628,162630,162632],{"class":230,"line":2705},[228,162627,32566],{"class":287},[228,162629,239],{"class":238},[228,162631,162538],{"class":343},[228,162633,245],{"class":238},[228,162635,162636],{"class":230,"line":2713},[228,162637,152420],{"class":234},[228,162639,162640,162642,162644,162646],{"class":230,"line":2718},[228,162641,3215],{"class":234},[228,162643,150201],{"class":238},[228,162645,1198],{"class":234},[228,162647,162648],{"class":238}," balance:\n",[228,162650,162651,162653,162655,162657],{"class":230,"line":2724},[228,162652,32566],{"class":287},[228,162654,239],{"class":238},[228,162656,150296],{"class":343},[228,162658,245],{"class":238},[228,162660,162661],{"class":230,"line":2730},[228,162662,152420],{"class":234},[228,162664,162665,162667,162669],{"class":230,"line":2735},[228,162666,162549],{"class":238},[228,162668,150311],{"class":234},[228,162670,150234],{"class":238},[228,162672,162673,162675,162677,162680],{"class":230,"line":8063},[228,162674,31414],{"class":287},[228,162676,239],{"class":238},[228,162678,162679],{"class":343},"\"取款成功\"",[228,162681,245],{"class":238},[228,162683,162684],{"class":230,"line":8087},[228,162685,162569],{"class":238},[228,162687,162688],{"class":230,"line":8092},[228,162689,2514],{"emptyLinePlaceholder":157},[228,162691,162692],{"class":230,"line":8098},[228,162693,2514],{"emptyLinePlaceholder":157},[228,162695,162696,162698,162700],{"class":230,"line":8125},[228,162697,108778],{"class":234},[228,162699,95407],{"class":287},[228,162701,3853],{"class":238},[228,162703,162704],{"class":230,"line":8130},[228,162705,162706],{"class":238},"    show_menu()\n",[228,162708,162709,162711,162713,162715,162717,162719],{"class":230,"line":8136},[228,162710,160751],{"class":238},[228,162712,284],{"class":234},[228,162714,60720],{"class":287},[228,162716,239],{"class":238},[228,162718,153132],{"class":343},[228,162720,245],{"class":238},[228,162722,162723],{"class":230,"line":8148},[228,162724,2514],{"emptyLinePlaceholder":157},[228,162726,162727,162729,162731,162733,162735],{"class":230,"line":8160},[228,162728,3215],{"class":234},[228,162730,153145],{"class":238},[228,162732,3063],{"class":234},[228,162734,153150],{"class":343},[228,162736,3853],{"class":238},[228,162738,162739],{"class":230,"line":8172},[228,162740,162741],{"class":238},"        show_balance()\n",[228,162743,162744,162746,162748,162750,162752],{"class":230,"line":9831},[228,162745,39408],{"class":234},[228,162747,153145],{"class":238},[228,162749,3063],{"class":234},[228,162751,153169],{"class":343},[228,162753,3853],{"class":238},[228,162755,162756],{"class":230,"line":9856},[228,162757,162758],{"class":238},"        save_money()\n",[228,162760,162761,162763,162765,162767,162769],{"class":230,"line":9879},[228,162762,39408],{"class":234},[228,162764,153145],{"class":238},[228,162766,3063],{"class":234},[228,162768,153187],{"class":343},[228,162770,3853],{"class":238},[228,162772,162773],{"class":230,"line":9903},[228,162774,162775],{"class":238},"        withdraw_money()\n",[228,162777,162778,162780,162782,162784,162786],{"class":230,"line":9908},[228,162779,39408],{"class":234},[228,162781,153145],{"class":238},[228,162783,3063],{"class":234},[228,162785,153241],{"class":343},[228,162787,3853],{"class":238},[228,162789,162790,162792,162794,162796],{"class":230,"line":9913},[228,162791,32566],{"class":287},[228,162793,239],{"class":238},[228,162795,153252],{"class":343},[228,162797,245],{"class":238},[228,162799,162800],{"class":230,"line":9918},[228,162801,31742],{"class":234},[228,162803,162804,162806],{"class":230,"line":9927},[228,162805,158081],{"class":234},[228,162807,3853],{"class":238},[228,162809,162810,162812,162814,162816],{"class":230,"line":9932},[228,162811,32566],{"class":287},[228,162813,239],{"class":238},[228,162815,153273],{"class":343},[228,162817,245],{"class":238},[19,162819,162820],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,162822,162824],{"id":162823},"_514-易错点","5.14 易错点",[183,162826,162827,162830,162833,162838,162843,162846],{},[186,162828,162829],{},"函数定义后必须调用才会执行。",[186,162831,162832],{},"函数名后面有括号才是调用。",[186,162834,162835,162837],{},[30,162836,17161],{}," 后面的代码不会执行。",[186,162839,162840,162841,78],{},"没有返回值的函数默认返回 ",[30,162842,95801],{},[186,162844,162845],{},"局部变量不能在函数外部访问。",[186,162847,162848,162849,162851],{},"不要滥用 ",[30,162850,161885],{},"，更好的方式是让函数返回新值。",[19,162853,162854,162855,162857],{},"例如不用 ",[30,162856,161885],{}," 改写存款：",[220,162859,162861],{"className":30493,"code":162860,"language":30495,"meta":141,"style":141},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[30,162862,162863,162872,162883,162887,162891,162899,162912],{"__ignoreMap":141},[228,162864,162865,162867,162869],{"class":230,"line":231},[228,162866,32062],{"class":234},[228,162868,162489],{"class":2077},[228,162870,162871],{"class":238},"(balance, money):\n",[228,162873,162874,162876,162879,162881],{"class":230,"line":142},[228,162875,4204],{"class":234},[228,162877,162878],{"class":238}," balance ",[228,162880,719],{"class":234},[228,162882,150234],{"class":238},[228,162884,162885],{"class":230,"line":1293},[228,162886,2514],{"emptyLinePlaceholder":157},[228,162888,162889],{"class":230,"line":1308},[228,162890,2514],{"emptyLinePlaceholder":157},[228,162892,162893,162895,162897],{"class":230,"line":1314},[228,162894,162363],{"class":238},[228,162896,284],{"class":234},[228,162898,162368],{"class":287},[228,162900,162901,162903,162905,162908,162910],{"class":230,"line":1328},[228,162902,162363],{"class":238},[228,162904,284],{"class":234},[228,162906,162907],{"class":238}," save_money(balance, ",[228,162909,1836],{"class":287},[228,162911,245],{"class":238},[228,162913,162914,162916],{"class":230,"line":1334},[228,162915,30530],{"class":287},[228,162917,162918],{"class":238},"(balance)\n",[14,162920,162922],{"id":162921},"_515-本章练习","5.15 本章练习",[183,162924,162925,162932,162938,162944,162950],{},[186,162926,162927,162928,162931],{},"定义函数 ",[30,162929,162930],{},"print_student(name, age)","，输出学生信息。",[186,162933,162927,162934,162937],{},[30,162935,162936],{},"get_max(a, b, c)","，返回三个数中的最大值。",[186,162939,162927,162940,162943],{},[30,162941,162942],{},"is_even(num)","，判断一个数是否为偶数。",[186,162945,162927,162946,162949],{},[30,162947,162948],{},"calculate_bmi(weight, height)","，返回 BMI。",[186,162951,162952],{},"把第 4 章的菜单程序拆分成多个函数。",[5241,162954,162955],{},"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":141,"searchDepth":142,"depth":142,"links":162957},[162958,162959,162960,162961,162962,162963,162964,162965,162966,162970,162971,162972,162973,162974,162975],{"id":160978,"depth":142,"text":160979},{"id":161019,"depth":142,"text":161020},{"id":161109,"depth":142,"text":161110},{"id":161190,"depth":142,"text":161191},{"id":161323,"depth":142,"text":161324},{"id":161445,"depth":142,"text":161446},{"id":161567,"depth":142,"text":161568},{"id":161644,"depth":142,"text":161645},{"id":161766,"depth":142,"text":161767,"children":162967},[162968,162969],{"id":161770,"depth":1293,"text":161771},{"id":161828,"depth":1293,"text":161829},{"id":161957,"depth":142,"text":161958},{"id":162083,"depth":142,"text":162084},{"id":162196,"depth":142,"text":162197},{"id":162352,"depth":142,"text":162353},{"id":162823,"depth":142,"text":162824},{"id":162921,"depth":142,"text":162922},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":160970,"description":154},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":162982,"title":162983,"body":162984,"description":154,"extension":155,"meta":166028,"navigation":157,"path":166029,"seo":166030,"stem":166031,"__hash__":166032},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":162985,"toc":166009},[162986,162989,162993,162996,162999,163103,163106,163110,163113,163193,163196,163200,163203,163263,163266,163302,163305,163320,163324,163397,163400,163455,163458,163528,163531,163615,163625,163683,163687,163732,163735,163761,163764,163870,163874,163877,163919,163922,163986,163989,163993,163996,164057,164060,164090,164093,164131,164135,164138,164147,164150,164274,164277,164318,164322,164325,164336,164376,164379,164394,164399,164402,164469,164472,164562,164566,164569,164617,164620,164647,164649,164679,164682,164702,164705,164736,164739,164772,164776,164779,164803,164806,164830,164833,164857,164861,164864,164994,164997,165077,165080,165155,165159,165162,165212,165215,165257,165260,165284,165286,165310,165313,165368,165371,165437,165441,165444,165447,165485,165488,165541,165544,165590,165593,165626,165629,165633,165952,165956,165985,165989,166006],[10,162987,162983],{"id":162988},"_6-数据容器",[14,162990,162992],{"id":162991},"_61-什么是数据容器","6.1 什么是数据容器",[19,162994,162995],{},"数据容器用于一次保存多个数据。",[19,162997,162998],{},"常见容器：",[376,163000,163001,163018],{},[379,163002,163003],{},[382,163004,163005,163007,163010,163013,163016],{},[385,163006,25887],{},[385,163008,163009],{},"是否有序",[385,163011,163012],{},"是否可变",[385,163014,163015],{},"是否允许重复",[385,163017,27608],{},[423,163019,163020,163038,163054,163069,163086],{},[382,163021,163022,163025,163028,163031,163034],{},[428,163023,163024],{},"list列表",[428,163026,163027],{},"有序",[428,163029,163030],{},"可变",[428,163032,163033],{},"允许",[428,163035,163036],{},[30,163037,155316],{},[382,163039,163040,163043,163045,163048,163050],{},[428,163041,163042],{},"tuple元组",[428,163044,163027],{},[428,163046,163047],{},"不可变",[428,163049,163033],{},[428,163051,163052],{},[30,163053,155329],{},[382,163055,163056,163059,163061,163063,163065],{},[428,163057,163058],{},"str字符串",[428,163060,163027],{},[428,163062,163047],{},[428,163064,163033],{},[428,163066,163067],{},[30,163068,155939],{},[382,163070,163071,163074,163077,163079,163082],{},[428,163072,163073],{},"set集合",[428,163075,163076],{},"无序",[428,163078,163030],{},[428,163080,163081],{},"不允许",[428,163083,163084],{},[30,163085,155354],{},[382,163087,163088,163091,163093,163095,163098],{},[428,163089,163090],{},"dict字典",[428,163092,163027],{},[428,163094,163030],{},[428,163096,163097],{},"key不允许重复",[428,163099,163100],{},[30,163101,163102],{},"{\"name\": \"小明\"}",[19,163104,163105],{},"Python 3.7 之后，字典保持插入顺序。",[14,163107,163109],{"id":163108},"_62-列表list","6.2 列表list",[19,163111,163112],{},"列表用于保存一组有顺序的数据。",[220,163114,163116],{"className":30493,"code":163115,"language":30495,"meta":141,"style":141},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[30,163117,163118,163138,163163,163184],{"__ignoreMap":141},[228,163119,163120,163122,163124,163126,163128,163130,163132,163134,163136],{"class":230,"line":231},[228,163121,160439],{"class":238},[228,163123,284],{"class":234},[228,163125,52341],{"class":238},[228,163127,149947],{"class":343},[228,163129,12550],{"class":238},[228,163131,150995],{"class":343},[228,163133,12550],{"class":238},[228,163135,159790],{"class":343},[228,163137,33361],{"class":238},[228,163139,163140,163143,163145,163147,163149,163151,163153,163155,163157,163159,163161],{"class":230,"line":142},[228,163141,163142],{"class":238},"numbers ",[228,163144,284],{"class":234},[228,163146,52341],{"class":238},[228,163148,456],{"class":287},[228,163150,12550],{"class":238},[228,163152,316],{"class":287},[228,163154,12550],{"class":238},[228,163156,310],{"class":287},[228,163158,12550],{"class":238},[228,163160,531],{"class":287},[228,163162,33361],{"class":238},[228,163164,163165,163168,163170,163172,163174,163176,163178,163180,163182],{"class":230,"line":1293},[228,163166,163167],{"class":238},"mixed ",[228,163169,284],{"class":234},[228,163171,52341],{"class":238},[228,163173,149947],{"class":343},[228,163175,12550],{"class":238},[228,163177,888],{"class":287},[228,163179,12550],{"class":238},[228,163181,31591],{"class":287},[228,163183,33361],{"class":238},[228,163185,163186,163189,163191],{"class":230,"line":1308},[228,163187,163188],{"class":238},"empty ",[228,163190,284],{"class":234},[228,163192,51953],{"class":238},[19,163194,163195],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,163197,163199],{"id":163198},"_63-列表索引","6.3 列表索引",[19,163201,163202],{},"正向索引从 0 开始：",[220,163204,163206],{"className":30493,"code":163205,"language":30495,"meta":141,"style":141},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[30,163207,163208,163228,163232,163243,163253],{"__ignoreMap":141},[228,163209,163210,163212,163214,163216,163218,163220,163222,163224,163226],{"class":230,"line":231},[228,163211,160439],{"class":238},[228,163213,284],{"class":234},[228,163215,52341],{"class":238},[228,163217,149947],{"class":343},[228,163219,12550],{"class":238},[228,163221,150995],{"class":343},[228,163223,12550],{"class":238},[228,163225,159790],{"class":343},[228,163227,33361],{"class":238},[228,163229,163230],{"class":230,"line":142},[228,163231,2514],{"emptyLinePlaceholder":157},[228,163233,163234,163236,163239,163241],{"class":230,"line":1293},[228,163235,30530],{"class":287},[228,163237,163238],{"class":238},"(names[",[228,163240,430],{"class":287},[228,163242,4771],{"class":238},[228,163244,163245,163247,163249,163251],{"class":230,"line":1308},[228,163246,30530],{"class":287},[228,163248,163238],{"class":238},[228,163250,456],{"class":287},[228,163252,4771],{"class":238},[228,163254,163255,163257,163259,163261],{"class":230,"line":1314},[228,163256,30530],{"class":287},[228,163258,163238],{"class":238},[228,163260,316],{"class":287},[228,163262,4771],{"class":238},[19,163264,163265],{},"反向索引从 -1 开始：",[220,163267,163269],{"className":30493,"code":163268,"language":30495,"meta":141,"style":141},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[30,163270,163271,163287],{"__ignoreMap":141},[228,163272,163273,163275,163277,163279,163281,163284],{"class":230,"line":231},[228,163274,30530],{"class":287},[228,163276,163238],{"class":238},[228,163278,770],{"class":234},[228,163280,456],{"class":287},[228,163282,163283],{"class":238},"])  ",[228,163285,163286],{"class":297},"# 小刚\n",[228,163288,163289,163291,163293,163295,163297,163299],{"class":230,"line":142},[228,163290,30530],{"class":287},[228,163292,163238],{"class":238},[228,163294,770],{"class":234},[228,163296,316],{"class":287},[228,163298,163283],{"class":238},[228,163300,163301],{"class":297},"# 小红\n",[19,163303,163304],{},"索引越界会报错：",[220,163306,163308],{"className":30493,"code":163307,"language":30495,"meta":141,"style":141},"print(names[3])\n",[30,163309,163310],{"__ignoreMap":141},[228,163311,163312,163314,163316,163318],{"class":230,"line":231},[228,163313,30530],{"class":287},[228,163315,163238],{"class":238},[228,163317,310],{"class":287},[228,163319,4771],{"class":238},[14,163321,163323],{"id":163322},"_64-列表常用方法","6.4 列表常用方法",[220,163325,163327],{"className":30493,"code":163326,"language":30495,"meta":141,"style":141},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[30,163328,163329,163345,163349,163358,163372,163386,163390],{"__ignoreMap":141},[228,163330,163331,163333,163335,163337,163339,163341,163343],{"class":230,"line":231},[228,163332,160439],{"class":238},[228,163334,284],{"class":234},[228,163336,52341],{"class":238},[228,163338,149947],{"class":343},[228,163340,12550],{"class":238},[228,163342,150995],{"class":343},[228,163344,33361],{"class":238},[228,163346,163347],{"class":230,"line":142},[228,163348,2514],{"emptyLinePlaceholder":157},[228,163350,163351,163354,163356],{"class":230,"line":1293},[228,163352,163353],{"class":238},"names.append(",[228,163355,159790],{"class":343},[228,163357,245],{"class":238},[228,163359,163360,163363,163365,163367,163370],{"class":230,"line":1308},[228,163361,163362],{"class":238},"names.insert(",[228,163364,456],{"class":287},[228,163366,12550],{"class":238},[228,163368,163369],{"class":343},"\"小李\"",[228,163371,245],{"class":238},[228,163373,163374,163377,163379,163381,163384],{"class":230,"line":1314},[228,163375,163376],{"class":238},"names.extend([",[228,163378,8798],{"class":343},[228,163380,12550],{"class":238},[228,163382,163383],{"class":343},"\"小赵\"",[228,163385,4771],{"class":238},[228,163387,163388],{"class":230,"line":1328},[228,163389,2514],{"emptyLinePlaceholder":157},[228,163391,163392,163394],{"class":230,"line":1334},[228,163393,30530],{"class":287},[228,163395,163396],{"class":238},"(names)\n",[19,163398,163399],{},"删除元素：",[220,163401,163403],{"className":30493,"code":163402,"language":30495,"meta":141,"style":141},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[30,163404,163405,163414,163424,163438,163450],{"__ignoreMap":141},[228,163406,163407,163410,163412],{"class":230,"line":231},[228,163408,163409],{"class":238},"names.remove(",[228,163411,150995],{"class":343},[228,163413,245],{"class":238},[228,163415,163416,163419,163421],{"class":230,"line":142},[228,163417,163418],{"class":238},"last ",[228,163420,284],{"class":234},[228,163422,163423],{"class":238}," names.pop()\n",[228,163425,163426,163429,163431,163434,163436],{"class":230,"line":1293},[228,163427,163428],{"class":238},"first ",[228,163430,284],{"class":234},[228,163432,163433],{"class":238}," names.pop(",[228,163435,430],{"class":287},[228,163437,245],{"class":238},[228,163439,163440,163443,163446,163448],{"class":230,"line":1308},[228,163441,163442],{"class":234},"del",[228,163444,163445],{"class":238}," names[",[228,163447,430],{"class":287},[228,163449,33361],{"class":238},[228,163451,163452],{"class":230,"line":1314},[228,163453,163454],{"class":238},"names.clear()\n",[19,163456,163457],{},"查询和统计：",[220,163459,163461],{"className":30493,"code":163460,"language":30495,"meta":141,"style":141},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[30,163462,163463,163491,163495,163506,163517],{"__ignoreMap":141},[228,163464,163465,163467,163469,163471,163473,163475,163477,163479,163481,163483,163485,163487,163489],{"class":230,"line":231},[228,163466,163142],{"class":238},[228,163468,284],{"class":234},[228,163470,52341],{"class":238},[228,163472,456],{"class":287},[228,163474,12550],{"class":238},[228,163476,316],{"class":287},[228,163478,12550],{"class":238},[228,163480,310],{"class":287},[228,163482,12550],{"class":238},[228,163484,316],{"class":287},[228,163486,12550],{"class":238},[228,163488,531],{"class":287},[228,163490,33361],{"class":238},[228,163492,163493],{"class":230,"line":142},[228,163494,2514],{"emptyLinePlaceholder":157},[228,163496,163497,163499,163502,163504],{"class":230,"line":1293},[228,163498,30530],{"class":287},[228,163500,163501],{"class":238},"(numbers.index(",[228,163503,310],{"class":287},[228,163505,30612],{"class":238},[228,163507,163508,163510,163513,163515],{"class":230,"line":1308},[228,163509,30530],{"class":287},[228,163511,163512],{"class":238},"(numbers.count(",[228,163514,316],{"class":287},[228,163516,30612],{"class":238},[228,163518,163519,163521,163523,163525],{"class":230,"line":1314},[228,163520,30530],{"class":287},[228,163522,239],{"class":238},[228,163524,7473],{"class":287},[228,163526,163527],{"class":238},"(numbers))\n",[19,163529,163530],{},"排序：",[220,163532,163534],{"className":30493,"code":163533,"language":30495,"meta":141,"style":141},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[30,163535,163536,163560,163564,163569,163576,163580,163594,163600,163604,163609],{"__ignoreMap":141},[228,163537,163538,163540,163542,163544,163546,163548,163550,163552,163554,163556,163558],{"class":230,"line":231},[228,163539,163142],{"class":238},[228,163541,284],{"class":234},[228,163543,52341],{"class":238},[228,163545,310],{"class":287},[228,163547,12550],{"class":238},[228,163549,456],{"class":287},[228,163551,12550],{"class":238},[228,163553,557],{"class":287},[228,163555,12550],{"class":238},[228,163557,316],{"class":287},[228,163559,33361],{"class":238},[228,163561,163562],{"class":230,"line":142},[228,163563,2514],{"emptyLinePlaceholder":157},[228,163565,163566],{"class":230,"line":1293},[228,163567,163568],{"class":238},"numbers.sort()\n",[228,163570,163571,163573],{"class":230,"line":1308},[228,163572,30530],{"class":287},[228,163574,163575],{"class":238},"(numbers)\n",[228,163577,163578],{"class":230,"line":1314},[228,163579,2514],{"emptyLinePlaceholder":157},[228,163581,163582,163585,163588,163590,163592],{"class":230,"line":1328},[228,163583,163584],{"class":238},"numbers.sort(",[228,163586,163587],{"class":5331},"reverse",[228,163589,284],{"class":234},[228,163591,31591],{"class":287},[228,163593,245],{"class":238},[228,163595,163596,163598],{"class":230,"line":1334},[228,163597,30530],{"class":287},[228,163599,163575],{"class":238},[228,163601,163602],{"class":230,"line":1425},[228,163603,2514],{"emptyLinePlaceholder":157},[228,163605,163606],{"class":230,"line":1431},[228,163607,163608],{"class":238},"numbers.reverse()\n",[228,163610,163611,163613],{"class":230,"line":1443},[228,163612,30530],{"class":287},[228,163614,163575],{"class":238},[19,163616,163617,163620,163621,163624],{},[30,163618,163619],{},"sort()"," 会修改原列表，",[30,163622,163623],{},"sorted()"," 返回新列表。",[220,163626,163628],{"className":30493,"code":163627,"language":30495,"meta":141,"style":141},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[30,163629,163630,163654,163666,163670,163676],{"__ignoreMap":141},[228,163631,163632,163634,163636,163638,163640,163642,163644,163646,163648,163650,163652],{"class":230,"line":231},[228,163633,163142],{"class":238},[228,163635,284],{"class":234},[228,163637,52341],{"class":238},[228,163639,310],{"class":287},[228,163641,12550],{"class":238},[228,163643,456],{"class":287},[228,163645,12550],{"class":238},[228,163647,557],{"class":287},[228,163649,12550],{"class":238},[228,163651,316],{"class":287},[228,163653,33361],{"class":238},[228,163655,163656,163659,163661,163664],{"class":230,"line":142},[228,163657,163658],{"class":238},"new_numbers ",[228,163660,284],{"class":234},[228,163662,163663],{"class":287}," sorted",[228,163665,163575],{"class":238},[228,163667,163668],{"class":230,"line":1293},[228,163669,2514],{"emptyLinePlaceholder":157},[228,163671,163672,163674],{"class":230,"line":1308},[228,163673,30530],{"class":287},[228,163675,163575],{"class":238},[228,163677,163678,163680],{"class":230,"line":1314},[228,163679,30530],{"class":287},[228,163681,163682],{"class":238},"(new_numbers)\n",[14,163684,163686],{"id":163685},"_65-列表遍历","6.5 列表遍历",[220,163688,163690],{"className":30493,"code":163689,"language":30495,"meta":141,"style":141},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[30,163691,163692,163712,163716,163726],{"__ignoreMap":141},[228,163693,163694,163696,163698,163700,163702,163704,163706,163708,163710],{"class":230,"line":231},[228,163695,160439],{"class":238},[228,163697,284],{"class":234},[228,163699,52341],{"class":238},[228,163701,149947],{"class":343},[228,163703,12550],{"class":238},[228,163705,150995],{"class":343},[228,163707,12550],{"class":238},[228,163709,159790],{"class":343},[228,163711,33361],{"class":238},[228,163713,163714],{"class":230,"line":142},[228,163715,2514],{"emptyLinePlaceholder":157},[228,163717,163718,163720,163722,163724],{"class":230,"line":1293},[228,163719,3139],{"class":234},[228,163721,160475],{"class":238},[228,163723,26159],{"class":234},[228,163725,160480],{"class":238},[228,163727,163728,163730],{"class":230,"line":1308},[228,163729,31414],{"class":287},[228,163731,150719],{"class":238},[19,163733,163734],{},"需要索引时：",[220,163736,163738],{"className":30493,"code":163737,"language":30495,"meta":141,"style":141},"for index, name in enumerate(names):\n    print(index, name)\n",[30,163739,163740,163754],{"__ignoreMap":141},[228,163741,163742,163744,163747,163749,163751],{"class":230,"line":231},[228,163743,3139],{"class":234},[228,163745,163746],{"class":238}," index, name ",[228,163748,26159],{"class":234},[228,163750,31721],{"class":287},[228,163752,163753],{"class":238},"(names):\n",[228,163755,163756,163758],{"class":230,"line":142},[228,163757,31414],{"class":287},[228,163759,163760],{"class":238},"(index, name)\n",[19,163762,163763],{},"统计总分：",[220,163765,163767],{"className":30493,"code":163766,"language":30495,"meta":141,"style":141},"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",[30,163768,163769,163794,163802,163806,163817,163825,163829,163846],{"__ignoreMap":141},[228,163770,163771,163774,163776,163778,163780,163782,163784,163786,163788,163790,163792],{"class":230,"line":231},[228,163772,163773],{"class":238},"scores ",[228,163775,284],{"class":234},[228,163777,52341],{"class":238},[228,163779,1100],{"class":287},[228,163781,12550],{"class":238},[228,163783,974],{"class":287},[228,163785,12550],{"class":238},[228,163787,492],{"class":287},[228,163789,12550],{"class":238},[228,163791,799],{"class":287},[228,163793,33361],{"class":238},[228,163795,163796,163798,163800],{"class":230,"line":142},[228,163797,157319],{"class":238},[228,163799,284],{"class":234},[228,163801,47448],{"class":287},[228,163803,163804],{"class":230,"line":1293},[228,163805,2514],{"emptyLinePlaceholder":157},[228,163807,163808,163810,163812,163814],{"class":230,"line":1308},[228,163809,3139],{"class":234},[228,163811,157842],{"class":238},[228,163813,26159],{"class":234},[228,163815,163816],{"class":238}," scores:\n",[228,163818,163819,163821,163823],{"class":230,"line":1314},[228,163820,159366],{"class":238},[228,163822,9592],{"class":234},[228,163824,1693],{"class":238},[228,163826,163827],{"class":230,"line":1328},[228,163828,2514],{"emptyLinePlaceholder":157},[228,163830,163831,163834,163836,163839,163841,163843],{"class":230,"line":1334},[228,163832,163833],{"class":238},"avg ",[228,163835,284],{"class":234},[228,163837,163838],{"class":238}," total ",[228,163840,822],{"class":234},[228,163842,7446],{"class":287},[228,163844,163845],{"class":238},"(scores)\n",[228,163847,163848,163850,163852,163854,163857,163859,163862,163864,163866,163868],{"class":230,"line":1425},[228,163849,30530],{"class":287},[228,163851,239],{"class":238},[228,163853,291],{"class":234},[228,163855,163856],{"class":343},"\"平均分:",[228,163858,1134],{"class":287},[228,163860,163861],{"class":238},"avg",[228,163863,157218],{"class":234},[228,163865,1184],{"class":287},[228,163867,489],{"class":343},[228,163869,245],{"class":238},[14,163871,163873],{"id":163872},"_66-元组tuple","6.6 元组tuple",[19,163875,163876],{},"元组和列表类似，但不可修改。",[220,163878,163880],{"className":30493,"code":163879,"language":30495,"meta":141,"style":141},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[30,163881,163882,163899],{"__ignoreMap":141},[228,163883,163884,163887,163889,163891,163893,163895,163897],{"class":230,"line":231},[228,163885,163886],{"class":238},"point ",[228,163888,284],{"class":234},[228,163890,1772],{"class":238},[228,163892,684],{"class":287},[228,163894,12550],{"class":238},[228,163896,938],{"class":287},[228,163898,245],{"class":238},[228,163900,163901,163903,163905,163907,163909,163911,163913,163915,163917],{"class":230,"line":142},[228,163902,116429],{"class":238},[228,163904,284],{"class":234},[228,163906,1772],{"class":238},[228,163908,149947],{"class":343},[228,163910,12550],{"class":238},[228,163912,888],{"class":287},[228,163914,12550],{"class":238},[228,163916,69384],{"class":343},[228,163918,245],{"class":238},[19,163920,163921],{},"单元素元组必须加逗号：",[220,163923,163925],{"className":30493,"code":163924,"language":30495,"meta":141,"style":141},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[30,163926,163927,163941,163954,163958,163972],{"__ignoreMap":141},[228,163928,163929,163932,163934,163936,163938],{"class":230,"line":231},[228,163930,163931],{"class":238},"t1 ",[228,163933,284],{"class":234},[228,163935,1772],{"class":238},[228,163937,684],{"class":287},[228,163939,163940],{"class":238},",)\n",[228,163942,163943,163946,163948,163950,163952],{"class":230,"line":142},[228,163944,163945],{"class":238},"t2 ",[228,163947,284],{"class":234},[228,163949,1772],{"class":238},[228,163951,684],{"class":287},[228,163953,245],{"class":238},[228,163955,163956],{"class":230,"line":1293},[228,163957,2514],{"emptyLinePlaceholder":157},[228,163959,163960,163962,163964,163966,163969],{"class":230,"line":1308},[228,163961,30530],{"class":287},[228,163963,239],{"class":238},[228,163965,103222],{"class":287},[228,163967,163968],{"class":238},"(t1))  ",[228,163970,163971],{"class":297},"# tuple\n",[228,163973,163974,163976,163978,163980,163983],{"class":230,"line":1314},[228,163975,30530],{"class":287},[228,163977,239],{"class":238},[228,163979,103222],{"class":287},[228,163981,163982],{"class":238},"(t2))  ",[228,163984,163985],{"class":297},"# int\n",[19,163987,163988],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,163990,163992],{"id":163991},"_67-字符串str","6.7 字符串str",[19,163994,163995],{},"字符串也是序列，可以索引、切片和遍历。",[220,163997,163999],{"className":30493,"code":163998,"language":30495,"meta":141,"style":141},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[30,164000,164001,164009,164013,164024,164036,164040,164051],{"__ignoreMap":141},[228,164002,164003,164005,164007],{"class":230,"line":231},[228,164004,156503],{"class":238},[228,164006,284],{"class":234},[228,164008,159740],{"class":343},[228,164010,164011],{"class":230,"line":142},[228,164012,2514],{"emptyLinePlaceholder":157},[228,164014,164015,164017,164020,164022],{"class":230,"line":1293},[228,164016,30530],{"class":287},[228,164018,164019],{"class":238},"(text[",[228,164021,430],{"class":287},[228,164023,4771],{"class":238},[228,164025,164026,164028,164030,164032,164034],{"class":230,"line":1308},[228,164027,30530],{"class":287},[228,164029,164019],{"class":238},[228,164031,770],{"class":234},[228,164033,456],{"class":287},[228,164035,4771],{"class":238},[228,164037,164038],{"class":230,"line":1314},[228,164039,2514],{"emptyLinePlaceholder":157},[228,164041,164042,164044,164046,164048],{"class":230,"line":1328},[228,164043,3139],{"class":234},[228,164045,159751],{"class":238},[228,164047,26159],{"class":234},[228,164049,164050],{"class":238}," text:\n",[228,164052,164053,164055],{"class":230,"line":1334},[228,164054,31414],{"class":287},[228,164056,159762],{"class":238},[19,164058,164059],{},"字符串不可变：",[220,164061,164063],{"className":30493,"code":164062,"language":30495,"meta":141,"style":141},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[30,164064,164065,164073],{"__ignoreMap":141},[228,164066,164067,164069,164071],{"class":230,"line":231},[228,164068,156503],{"class":238},[228,164070,284],{"class":234},[228,164072,159740],{"class":343},[228,164074,164075,164078,164080,164082,164084,164087],{"class":230,"line":142},[228,164076,164077],{"class":238},"text[",[228,164079,430],{"class":287},[228,164081,4557],{"class":238},[228,164083,284],{"class":234},[228,164085,164086],{"class":343}," \"P\"",[228,164088,164089],{"class":297},"  # 报错\n",[19,164091,164092],{},"如果要得到新字符串：",[220,164094,164096],{"className":30493,"code":164095,"language":30495,"meta":141,"style":141},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[30,164097,164098,164106,164124],{"__ignoreMap":141},[228,164099,164100,164102,164104],{"class":230,"line":231},[228,164101,156503],{"class":238},[228,164103,284],{"class":234},[228,164105,159740],{"class":343},[228,164107,164108,164110,164112,164114,164116,164119,164121],{"class":230,"line":142},[228,164109,156503],{"class":238},[228,164111,284],{"class":234},[228,164113,164086],{"class":343},[228,164115,45681],{"class":234},[228,164117,164118],{"class":238}," text[",[228,164120,456],{"class":287},[228,164122,164123],{"class":238},":]\n",[228,164125,164126,164128],{"class":230,"line":1293},[228,164127,30530],{"class":287},[228,164129,164130],{"class":238},"(text)\n",[14,164132,164134],{"id":164133},"_68-切片","6.8 切片",[19,164136,164137],{},"切片用于从序列中取一部分。",[220,164139,164141],{"className":30493,"code":164140,"language":30495,"meta":141,"style":141},"序列[开始:结束:步长]\n",[30,164142,164143],{"__ignoreMap":141},[228,164144,164145],{"class":230,"line":231},[228,164146,164140],{"class":238},[19,164148,164149],{},"结束位置不包含。",[220,164151,164153],{"className":30493,"code":164152,"language":30495,"meta":141,"style":141},"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",[30,164154,164155,164192,164196,164215,164230,164244,164258],{"__ignoreMap":141},[228,164156,164157,164160,164162,164164,164166,164168,164170,164172,164174,164176,164178,164180,164182,164184,164186,164188,164190],{"class":230,"line":231},[228,164158,164159],{"class":238},"nums ",[228,164161,284],{"class":234},[228,164163,52341],{"class":238},[228,164165,430],{"class":287},[228,164167,12550],{"class":238},[228,164169,456],{"class":287},[228,164171,12550],{"class":238},[228,164173,316],{"class":287},[228,164175,12550],{"class":238},[228,164177,310],{"class":287},[228,164179,12550],{"class":238},[228,164181,531],{"class":287},[228,164183,12550],{"class":238},[228,164185,557],{"class":287},[228,164187,12550],{"class":238},[228,164189,582],{"class":287},[228,164191,33361],{"class":238},[228,164193,164194],{"class":230,"line":142},[228,164195,2514],{"emptyLinePlaceholder":157},[228,164197,164198,164200,164203,164205,164207,164209,164212],{"class":230,"line":1293},[228,164199,30530],{"class":287},[228,164201,164202],{"class":238},"(nums[",[228,164204,456],{"class":287},[228,164206,1097],{"class":238},[228,164208,531],{"class":287},[228,164210,164211],{"class":238},"])    ",[228,164213,164214],{"class":297},"# [1, 2, 3]\n",[228,164216,164217,164219,164222,164224,164227],{"class":230,"line":1308},[228,164218,30530],{"class":287},[228,164220,164221],{"class":238},"(nums[:",[228,164223,310],{"class":287},[228,164225,164226],{"class":238},"])     ",[228,164228,164229],{"class":297},"# [0, 1, 2]\n",[228,164231,164232,164234,164236,164238,164241],{"class":230,"line":1314},[228,164233,30530],{"class":287},[228,164235,164202],{"class":238},[228,164237,310],{"class":287},[228,164239,164240],{"class":238},":])     ",[228,164242,164243],{"class":297},"# [3, 4, 5, 6]\n",[228,164245,164246,164248,164251,164253,164255],{"class":230,"line":1328},[228,164247,30530],{"class":287},[228,164249,164250],{"class":238},"(nums[::",[228,164252,316],{"class":287},[228,164254,164211],{"class":238},[228,164256,164257],{"class":297},"# [0, 2, 4, 6]\n",[228,164259,164260,164262,164264,164266,164268,164271],{"class":230,"line":1334},[228,164261,30530],{"class":287},[228,164263,164250],{"class":238},[228,164265,770],{"class":234},[228,164267,456],{"class":287},[228,164269,164270],{"class":238},"])   ",[228,164272,164273],{"class":297},"# 反转\n",[19,164275,164276],{},"字符串切片：",[220,164278,164280],{"className":30493,"code":164279,"language":30495,"meta":141,"style":141},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[30,164281,164282,164291,164305],{"__ignoreMap":141},[228,164283,164284,164286,164288],{"class":230,"line":231},[228,164285,156503],{"class":238},[228,164287,284],{"class":234},[228,164289,164290],{"class":343}," \"abcdef\"\n",[228,164292,164293,164295,164297,164299,164301,164303],{"class":230,"line":142},[228,164294,30530],{"class":287},[228,164296,164019],{"class":238},[228,164298,456],{"class":287},[228,164300,1097],{"class":238},[228,164302,531],{"class":287},[228,164304,4771],{"class":238},[228,164306,164307,164309,164312,164314,164316],{"class":230,"line":1293},[228,164308,30530],{"class":287},[228,164310,164311],{"class":238},"(text[::",[228,164313,770],{"class":234},[228,164315,456],{"class":287},[228,164317,4771],{"class":238},[14,164319,164321],{"id":164320},"_69-集合set","6.9 集合set",[19,164323,164324],{},"集合特点：",[183,164326,164327,164330,164333],{},[186,164328,164329],{},"无序。",[186,164331,164332],{},"元素不重复。",[186,164334,164335],{},"可以做交集、并集、差集。",[220,164337,164339],{"className":30493,"code":164338,"language":30495,"meta":141,"style":141},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[30,164340,164341,164369],{"__ignoreMap":141},[228,164342,164343,164345,164347,164349,164351,164353,164355,164357,164359,164361,164363,164365,164367],{"class":230,"line":231},[228,164344,164159],{"class":238},[228,164346,284],{"class":234},[228,164348,4562],{"class":238},[228,164350,456],{"class":287},[228,164352,12550],{"class":238},[228,164354,316],{"class":287},[228,164356,12550],{"class":238},[228,164358,310],{"class":287},[228,164360,12550],{"class":238},[228,164362,310],{"class":287},[228,164364,12550],{"class":238},[228,164366,531],{"class":287},[228,164368,1679],{"class":238},[228,164370,164371,164373],{"class":230,"line":142},[228,164372,30530],{"class":287},[228,164374,164375],{"class":238},"(nums)\n",[19,164377,164378],{},"创建空集合：",[220,164380,164382],{"className":30493,"code":164381,"language":30495,"meta":141,"style":141},"s = set()\n",[30,164383,164384],{"__ignoreMap":141},[228,164385,164386,164388,164390,164392],{"class":230,"line":231},[228,164387,10694],{"class":238},[228,164389,284],{"class":234},[228,164391,119837],{"class":287},[228,164393,2090],{"class":238},[19,164395,9140,164396,164398],{},[30,164397,32574],{}," 是空字典，不是空集合。",[19,164400,164401],{},"集合常用操作：",[220,164403,164405],{"className":30493,"code":164404,"language":30495,"meta":141,"style":141},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[30,164406,164407,164427,164431,164440,164449,164458],{"__ignoreMap":141},[228,164408,164409,164411,164413,164415,164417,164419,164421,164423,164425],{"class":230,"line":231},[228,164410,10694],{"class":238},[228,164412,284],{"class":234},[228,164414,4562],{"class":238},[228,164416,456],{"class":287},[228,164418,12550],{"class":238},[228,164420,316],{"class":287},[228,164422,12550],{"class":238},[228,164424,310],{"class":287},[228,164426,1679],{"class":238},[228,164428,164429],{"class":230,"line":142},[228,164430,2514],{"emptyLinePlaceholder":157},[228,164432,164433,164436,164438],{"class":230,"line":1293},[228,164434,164435],{"class":238},"s.add(",[228,164437,531],{"class":287},[228,164439,245],{"class":238},[228,164441,164442,164445,164447],{"class":230,"line":1308},[228,164443,164444],{"class":238},"s.remove(",[228,164446,316],{"class":287},[228,164448,245],{"class":238},[228,164450,164451,164454,164456],{"class":230,"line":1314},[228,164452,164453],{"class":238},"s.discard(",[228,164455,684],{"class":287},[228,164457,245],{"class":238},[228,164459,164460,164462,164464,164466],{"class":230,"line":1328},[228,164461,30530],{"class":287},[228,164463,239],{"class":238},[228,164465,7473],{"class":287},[228,164467,164468],{"class":238},"(s))\n",[19,164470,164471],{},"交并差：",[220,164473,164475],{"className":30493,"code":164474,"language":30495,"meta":141,"style":141},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[30,164476,164477,164497,164517,164521,164536,164549],{"__ignoreMap":141},[228,164478,164479,164481,164483,164485,164487,164489,164491,164493,164495],{"class":230,"line":231},[228,164480,11034],{"class":238},[228,164482,284],{"class":234},[228,164484,4562],{"class":238},[228,164486,456],{"class":287},[228,164488,12550],{"class":238},[228,164490,316],{"class":287},[228,164492,12550],{"class":238},[228,164494,310],{"class":287},[228,164496,1679],{"class":238},[228,164498,164499,164501,164503,164505,164507,164509,164511,164513,164515],{"class":230,"line":142},[228,164500,11060],{"class":238},[228,164502,284],{"class":234},[228,164504,4562],{"class":238},[228,164506,310],{"class":287},[228,164508,12550],{"class":238},[228,164510,531],{"class":287},[228,164512,12550],{"class":238},[228,164514,557],{"class":287},[228,164516,1679],{"class":238},[228,164518,164519],{"class":230,"line":1293},[228,164520,2514],{"emptyLinePlaceholder":157},[228,164522,164523,164525,164528,164530,164533],{"class":230,"line":1308},[228,164524,30530],{"class":287},[228,164526,164527],{"class":238},"(a ",[228,164529,591],{"class":234},[228,164531,164532],{"class":238}," b)  ",[228,164534,164535],{"class":297},"# 交集\n",[228,164537,164538,164540,164542,164544,164546],{"class":230,"line":1314},[228,164539,30530],{"class":287},[228,164541,164527],{"class":238},[228,164543,1159],{"class":234},[228,164545,164532],{"class":238},[228,164547,164548],{"class":297},"# 并集\n",[228,164550,164551,164553,164555,164557,164559],{"class":230,"line":1328},[228,164552,30530],{"class":287},[228,164554,164527],{"class":238},[228,164556,770],{"class":234},[228,164558,164532],{"class":238},[228,164560,164561],{"class":297},"# 差集\n",[14,164563,164565],{"id":164564},"_610-字典dict","6.10 字典dict",[19,164567,164568],{},"字典通过 key-value 保存数据。",[220,164570,164572],{"className":30493,"code":164571,"language":30495,"meta":141,"style":141},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[30,164573,164574,164582,164592,164603,164613],{"__ignoreMap":141},[228,164575,164576,164578,164580],{"class":230,"line":231},[228,164577,149540],{"class":238},[228,164579,284],{"class":234},[228,164581,15687],{"class":238},[228,164583,164584,164586,164588,164590],{"class":230,"line":142},[228,164585,147079],{"class":343},[228,164587,51552],{"class":238},[228,164589,149947],{"class":343},[228,164591,31581],{"class":238},[228,164593,164594,164597,164599,164601],{"class":230,"line":1293},[228,164595,164596],{"class":343},"    \"age\"",[228,164598,51552],{"class":238},[228,164600,888],{"class":287},[228,164602,31581],{"class":238},[228,164604,164605,164608,164610],{"class":230,"line":1308},[228,164606,164607],{"class":343},"    \"score\"",[228,164609,51552],{"class":238},[228,164611,164612],{"class":287},"95\n",[228,164614,164615],{"class":230,"line":1314},[228,164616,1679],{"class":238},[19,164618,164619],{},"获取值：",[220,164621,164623],{"className":30493,"code":164622,"language":30495,"meta":141,"style":141},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[30,164624,164625,164636],{"__ignoreMap":141},[228,164626,164627,164629,164632,164634],{"class":230,"line":231},[228,164628,30530],{"class":287},[228,164630,164631],{"class":238},"(student[",[228,164633,62794],{"class":343},[228,164635,4771],{"class":238},[228,164637,164638,164640,164643,164645],{"class":230,"line":142},[228,164639,30530],{"class":287},[228,164641,164642],{"class":238},"(student.get(",[228,164644,62794],{"class":343},[228,164646,30612],{"class":238},[19,164648,15503],{},[220,164650,164652],{"className":30493,"code":164651,"language":30495,"meta":141,"style":141},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[30,164653,164654,164667],{"__ignoreMap":141},[228,164655,164656,164658,164661,164664],{"class":230,"line":231},[228,164657,152918],{"class":238},[228,164659,164660],{"class":343},"\"address\"",[228,164662,164663],{"class":238},"]     ",[228,164665,164666],{"class":297},"# key不存在会报错\n",[228,164668,164669,164672,164674,164676],{"class":230,"line":142},[228,164670,164671],{"class":238},"student.get(",[228,164673,164660],{"class":343},[228,164675,13829],{"class":238},[228,164677,164678],{"class":297},"# key不存在返回None\n",[19,164680,164681],{},"设置默认值：",[220,164683,164685],{"className":30493,"code":164684,"language":30495,"meta":141,"style":141},"print(student.get(\"address\", \"未知\"))\n",[30,164686,164687],{"__ignoreMap":141},[228,164688,164689,164691,164693,164695,164697,164700],{"class":230,"line":231},[228,164690,30530],{"class":287},[228,164692,164642],{"class":238},[228,164694,164660],{"class":343},[228,164696,12550],{"class":238},[228,164698,164699],{"class":343},"\"未知\"",[228,164701,30612],{"class":238},[19,164703,164704],{},"新增和修改：",[220,164706,164708],{"className":30493,"code":164707,"language":30495,"meta":141,"style":141},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[30,164709,164710,164723],{"__ignoreMap":141},[228,164711,164712,164714,164716,164718,164720],{"class":230,"line":231},[228,164713,152918],{"class":238},[228,164715,69239],{"class":343},[228,164717,4557],{"class":238},[228,164719,284],{"class":234},[228,164721,164722],{"class":287}," 19\n",[228,164724,164725,164727,164729,164731,164733],{"class":230,"line":142},[228,164726,152918],{"class":238},[228,164728,164660],{"class":343},[228,164730,4557],{"class":238},[228,164732,284],{"class":234},[228,164734,164735],{"class":343}," \"北京\"\n",[19,164737,164738],{},"删除：",[220,164740,164742],{"className":30493,"code":164741,"language":30495,"meta":141,"style":141},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[30,164743,164744,164757,164767],{"__ignoreMap":141},[228,164745,164746,164748,164750,164753,164755],{"class":230,"line":231},[228,164747,155417],{"class":238},[228,164749,284],{"class":234},[228,164751,164752],{"class":238}," student.pop(",[228,164754,151531],{"class":343},[228,164756,245],{"class":238},[228,164758,164759,164761,164763,164765],{"class":230,"line":142},[228,164760,163442],{"class":234},[228,164762,152208],{"class":238},[228,164764,69239],{"class":343},[228,164766,33361],{"class":238},[228,164768,164769],{"class":230,"line":1293},[228,164770,164771],{"class":238},"student.clear()\n",[14,164773,164775],{"id":164774},"_611-字典遍历","6.11 字典遍历",[19,164777,164778],{},"遍历 key：",[220,164780,164782],{"className":30493,"code":164781,"language":30495,"meta":141,"style":141},"for key in student:\n    print(key, student[key])\n",[30,164783,164784,164796],{"__ignoreMap":141},[228,164785,164786,164788,164791,164793],{"class":230,"line":231},[228,164787,3139],{"class":234},[228,164789,164790],{"class":238}," key ",[228,164792,26159],{"class":234},[228,164794,164795],{"class":238}," student:\n",[228,164797,164798,164800],{"class":230,"line":142},[228,164799,31414],{"class":287},[228,164801,164802],{"class":238},"(key, student[key])\n",[19,164804,164805],{},"遍历 value：",[220,164807,164809],{"className":30493,"code":164808,"language":30495,"meta":141,"style":141},"for value in student.values():\n    print(value)\n",[30,164810,164811,164823],{"__ignoreMap":141},[228,164812,164813,164815,164818,164820],{"class":230,"line":231},[228,164814,3139],{"class":234},[228,164816,164817],{"class":238}," value ",[228,164819,26159],{"class":234},[228,164821,164822],{"class":238}," student.values():\n",[228,164824,164825,164827],{"class":230,"line":142},[228,164826,31414],{"class":287},[228,164828,164829],{"class":238},"(value)\n",[19,164831,164832],{},"遍历 key 和 value：",[220,164834,164836],{"className":30493,"code":164835,"language":30495,"meta":141,"style":141},"for key, value in student.items():\n    print(key, value)\n",[30,164837,164838,164850],{"__ignoreMap":141},[228,164839,164840,164842,164845,164847],{"class":230,"line":231},[228,164841,3139],{"class":234},[228,164843,164844],{"class":238}," key, value ",[228,164846,26159],{"class":234},[228,164848,164849],{"class":238}," student.items():\n",[228,164851,164852,164854],{"class":230,"line":142},[228,164853,31414],{"class":287},[228,164855,164856],{"class":238},"(key, value)\n",[14,164858,164860],{"id":164859},"_612-嵌套容器","6.12 嵌套容器",[19,164862,164863],{},"列表中保存字典，是项目中最常见的结构之一。",[220,164865,164867],{"className":30493,"code":164866,"language":30495,"meta":141,"style":141},"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",[30,164868,164869,164877,164905,164933,164961,164965,164969,164979],{"__ignoreMap":141},[228,164870,164871,164873,164875],{"class":230,"line":231},[228,164872,159775],{"class":238},[228,164874,284],{"class":234},[228,164876,55562],{"class":238},[228,164878,164879,164881,164883,164885,164887,164889,164891,164893,164895,164897,164899,164901,164903],{"class":230,"line":142},[228,164880,148444],{"class":238},[228,164882,62794],{"class":343},[228,164884,51552],{"class":238},[228,164886,149947],{"class":343},[228,164888,12550],{"class":238},[228,164890,69239],{"class":343},[228,164892,51552],{"class":238},[228,164894,888],{"class":287},[228,164896,12550],{"class":238},[228,164898,151531],{"class":343},[228,164900,51552],{"class":238},[228,164902,1227],{"class":287},[228,164904,5044],{"class":238},[228,164906,164907,164909,164911,164913,164915,164917,164919,164921,164923,164925,164927,164929,164931],{"class":230,"line":1293},[228,164908,148444],{"class":238},[228,164910,62794],{"class":343},[228,164912,51552],{"class":238},[228,164914,150995],{"class":343},[228,164916,12550],{"class":238},[228,164918,69239],{"class":343},[228,164920,51552],{"class":238},[228,164922,863],{"class":287},[228,164924,12550],{"class":238},[228,164926,151531],{"class":343},[228,164928,51552],{"class":238},[228,164930,1049],{"class":287},[228,164932,5044],{"class":238},[228,164934,164935,164937,164939,164941,164943,164945,164947,164949,164951,164953,164955,164957,164959],{"class":230,"line":1308},[228,164936,148444],{"class":238},[228,164938,62794],{"class":343},[228,164940,51552],{"class":238},[228,164942,159790],{"class":343},[228,164944,12550],{"class":238},[228,164946,69239],{"class":343},[228,164948,51552],{"class":238},[228,164950,913],{"class":287},[228,164952,12550],{"class":238},[228,164954,151531],{"class":343},[228,164956,51552],{"class":238},[228,164958,644],{"class":287},[228,164960,5044],{"class":238},[228,164962,164963],{"class":230,"line":1314},[228,164964,33361],{"class":238},[228,164966,164967],{"class":230,"line":1328},[228,164968,2514],{"emptyLinePlaceholder":157},[228,164970,164971,164973,164975,164977],{"class":230,"line":1334},[228,164972,3139],{"class":234},[228,164974,152196],{"class":238},[228,164976,26159],{"class":234},[228,164978,152201],{"class":238},[228,164980,164981,164983,164985,164987,164990,164992],{"class":230,"line":1425},[228,164982,31414],{"class":287},[228,164984,164631],{"class":238},[228,164986,62794],{"class":343},[228,164988,164989],{"class":238},"], student[",[228,164991,151531],{"class":343},[228,164993,4771],{"class":238},[19,164995,164996],{},"统计平均分：",[220,164998,165000],{"className":30493,"code":164999,"language":30495,"meta":141,"style":141},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[30,165001,165002,165010,165014,165024,165036,165040,165055],{"__ignoreMap":141},[228,165003,165004,165006,165008],{"class":230,"line":231},[228,165005,157319],{"class":238},[228,165007,284],{"class":234},[228,165009,47448],{"class":287},[228,165011,165012],{"class":230,"line":142},[228,165013,2514],{"emptyLinePlaceholder":157},[228,165015,165016,165018,165020,165022],{"class":230,"line":1293},[228,165017,3139],{"class":234},[228,165019,152196],{"class":238},[228,165021,26159],{"class":234},[228,165023,152201],{"class":238},[228,165025,165026,165028,165030,165032,165034],{"class":230,"line":1308},[228,165027,159366],{"class":238},[228,165029,9592],{"class":234},[228,165031,152208],{"class":238},[228,165033,151531],{"class":343},[228,165035,33361],{"class":238},[228,165037,165038],{"class":230,"line":1314},[228,165039,2514],{"emptyLinePlaceholder":157},[228,165041,165042,165044,165046,165048,165050,165052],{"class":230,"line":1328},[228,165043,163833],{"class":238},[228,165045,284],{"class":234},[228,165047,163838],{"class":238},[228,165049,822],{"class":234},[228,165051,7446],{"class":287},[228,165053,165054],{"class":238},"(students)\n",[228,165056,165057,165059,165061,165063,165065,165067,165069,165071,165073,165075],{"class":230,"line":1334},[228,165058,30530],{"class":287},[228,165060,239],{"class":238},[228,165062,291],{"class":234},[228,165064,163856],{"class":343},[228,165066,1134],{"class":287},[228,165068,163861],{"class":238},[228,165070,157218],{"class":234},[228,165072,1184],{"class":287},[228,165074,489],{"class":343},[228,165076,245],{"class":238},[19,165078,165079],{},"查找学生：",[220,165081,165083],{"className":30493,"code":165082,"language":30495,"meta":141,"style":141},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[30,165084,165085,165100,165104,165114,165128,165134,165138,165144],{"__ignoreMap":141},[228,165086,165087,165089,165091,165093,165095,165098],{"class":230,"line":231},[228,165088,111693],{"class":238},[228,165090,284],{"class":234},[228,165092,60720],{"class":287},[228,165094,239],{"class":238},[228,165096,165097],{"class":343},"\"请输入学生姓名:\"",[228,165099,245],{"class":238},[228,165101,165102],{"class":230,"line":142},[228,165103,2514],{"emptyLinePlaceholder":157},[228,165105,165106,165108,165110,165112],{"class":230,"line":1293},[228,165107,3139],{"class":234},[228,165109,152196],{"class":238},[228,165111,26159],{"class":234},[228,165113,152201],{"class":238},[228,165115,165116,165118,165120,165122,165124,165126],{"class":230,"line":1308},[228,165117,3215],{"class":234},[228,165119,152208],{"class":238},[228,165121,62794],{"class":343},[228,165123,4557],{"class":238},[228,165125,3063],{"class":234},[228,165127,160491],{"class":238},[228,165129,165130,165132],{"class":230,"line":1314},[228,165131,32566],{"class":287},[228,165133,150101],{"class":238},[228,165135,165136],{"class":230,"line":1328},[228,165137,31742],{"class":234},[228,165139,165140,165142],{"class":230,"line":1334},[228,165141,1815],{"class":234},[228,165143,3853],{"class":238},[228,165145,165146,165148,165150,165153],{"class":230,"line":1425},[228,165147,31414],{"class":287},[228,165149,239],{"class":238},[228,165151,165152],{"class":343},"\"没有找到\"",[228,165154,245],{"class":238},[14,165156,165158],{"id":165157},"_613-容器通用操作","6.13 容器通用操作",[19,165160,165161],{},"长度：",[220,165163,165165],{"className":30493,"code":165164,"language":30495,"meta":141,"style":141},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[30,165166,165167,165186,165196],{"__ignoreMap":141},[228,165168,165169,165171,165174,165176,165178,165180,165182,165184],{"class":230,"line":231},[228,165170,7473],{"class":287},[228,165172,165173],{"class":238},"([",[228,165175,456],{"class":287},[228,165177,12550],{"class":238},[228,165179,316],{"class":287},[228,165181,12550],{"class":238},[228,165183,310],{"class":287},[228,165185,4771],{"class":238},[228,165187,165188,165190,165192,165194],{"class":230,"line":142},[228,165189,7473],{"class":287},[228,165191,239],{"class":238},[228,165193,155939],{"class":343},[228,165195,245],{"class":238},[228,165197,165198,165200,165203,165205,165207,165209],{"class":230,"line":1293},[228,165199,7473],{"class":287},[228,165201,165202],{"class":238},"({",[228,165204,62794],{"class":343},[228,165206,51552],{"class":238},[228,165208,149947],{"class":343},[228,165210,165211],{"class":238},"})\n",[19,165213,165214],{},"最大最小：",[220,165216,165218],{"className":30493,"code":165217,"language":30495,"meta":141,"style":141},"max([1, 2, 3])\nmin([1, 2, 3])\n",[30,165219,165220,165238],{"__ignoreMap":141},[228,165221,165222,165224,165226,165228,165230,165232,165234,165236],{"class":230,"line":231},[228,165223,6130],{"class":287},[228,165225,165173],{"class":238},[228,165227,456],{"class":287},[228,165229,12550],{"class":238},[228,165231,316],{"class":287},[228,165233,12550],{"class":238},[228,165235,310],{"class":287},[228,165237,4771],{"class":238},[228,165239,165240,165243,165245,165247,165249,165251,165253,165255],{"class":230,"line":142},[228,165241,165242],{"class":287},"min",[228,165244,165173],{"class":238},[228,165246,456],{"class":287},[228,165248,12550],{"class":238},[228,165250,316],{"class":287},[228,165252,12550],{"class":238},[228,165254,310],{"class":287},[228,165256,4771],{"class":238},[19,165258,165259],{},"求和：",[220,165261,165263],{"className":30493,"code":165262,"language":30495,"meta":141,"style":141},"sum([1, 2, 3])\n",[30,165264,165265],{"__ignoreMap":141},[228,165266,165267,165270,165272,165274,165276,165278,165280,165282],{"class":230,"line":231},[228,165268,165269],{"class":287},"sum",[228,165271,165173],{"class":238},[228,165273,456],{"class":287},[228,165275,12550],{"class":238},[228,165277,316],{"class":287},[228,165279,12550],{"class":238},[228,165281,310],{"class":287},[228,165283,4771],{"class":238},[19,165285,163530],{},[220,165287,165289],{"className":30493,"code":165288,"language":30495,"meta":141,"style":141},"sorted([3, 1, 2])\n",[30,165290,165291],{"__ignoreMap":141},[228,165292,165293,165296,165298,165300,165302,165304,165306,165308],{"class":230,"line":231},[228,165294,165295],{"class":287},"sorted",[228,165297,165173],{"class":238},[228,165299,310],{"class":287},[228,165301,12550],{"class":238},[228,165303,456],{"class":287},[228,165305,12550],{"class":238},[228,165307,316],{"class":287},[228,165309,4771],{"class":238},[19,165311,165312],{},"类型转换：",[220,165314,165316],{"className":30493,"code":165315,"language":30495,"meta":141,"style":141},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[30,165317,165318,165328,165346],{"__ignoreMap":141},[228,165319,165320,165322,165324,165326],{"class":230,"line":231},[228,165321,154129],{"class":287},[228,165323,239],{"class":238},[228,165325,155939],{"class":343},[228,165327,245],{"class":238},[228,165329,165330,165332,165334,165336,165338,165340,165342,165344],{"class":230,"line":142},[228,165331,155324],{"class":287},[228,165333,165173],{"class":238},[228,165335,456],{"class":287},[228,165337,12550],{"class":238},[228,165339,316],{"class":287},[228,165341,12550],{"class":238},[228,165343,310],{"class":287},[228,165345,4771],{"class":238},[228,165347,165348,165350,165352,165354,165356,165358,165360,165362,165364,165366],{"class":230,"line":1293},[228,165349,155349],{"class":287},[228,165351,165173],{"class":238},[228,165353,456],{"class":287},[228,165355,12550],{"class":238},[228,165357,456],{"class":287},[228,165359,12550],{"class":238},[228,165361,316],{"class":287},[228,165363,12550],{"class":238},[228,165365,310],{"class":287},[228,165367,4771],{"class":238},[19,165369,165370],{},"成员判断：",[220,165372,165374],{"className":30493,"code":165373,"language":30495,"meta":141,"style":141},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[30,165375,165376,165393,165417],{"__ignoreMap":141},[228,165377,165378,165380,165382,165385,165388,165391],{"class":230,"line":231},[228,165379,30530],{"class":287},[228,165381,239],{"class":238},[228,165383,165384],{"class":343},"\"a\"",[228,165386,165387],{"class":234}," in",[228,165389,165390],{"class":343}," \"abc\"",[228,165392,245],{"class":238},[228,165394,165395,165397,165399,165401,165403,165405,165407,165409,165411,165413,165415],{"class":230,"line":142},[228,165396,30530],{"class":287},[228,165398,239],{"class":238},[228,165400,456],{"class":287},[228,165402,165387],{"class":234},[228,165404,52341],{"class":238},[228,165406,456],{"class":287},[228,165408,12550],{"class":238},[228,165410,316],{"class":287},[228,165412,12550],{"class":238},[228,165414,310],{"class":287},[228,165416,4771],{"class":238},[228,165418,165419,165421,165423,165425,165427,165429,165431,165433,165435],{"class":230,"line":1293},[228,165420,30530],{"class":287},[228,165422,239],{"class":238},[228,165424,62794],{"class":343},[228,165426,165387],{"class":234},[228,165428,4562],{"class":238},[228,165430,62794],{"class":343},[228,165432,51552],{"class":238},[228,165434,149947],{"class":343},[228,165436,165211],{"class":238},[14,165438,165440],{"id":165439},"_614-推导式","6.14 推导式",[19,165442,165443],{},"推导式用于快速生成容器。",[19,165445,165446],{},"列表推导式：",[220,165448,165450],{"className":30493,"code":165449,"language":30495,"meta":141,"style":141},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[30,165451,165452,165479],{"__ignoreMap":141},[228,165453,165454,165456,165458,165461,165463,165465,165467,165469,165471,165473,165475,165477],{"class":230,"line":231},[228,165455,164159],{"class":238},[228,165457,284],{"class":234},[228,165459,165460],{"class":238}," [i ",[228,165462,3139],{"class":234},[228,165464,9553],{"class":238},[228,165466,26159],{"class":234},[228,165468,32558],{"class":287},[228,165470,239],{"class":238},[228,165472,456],{"class":287},[228,165474,12550],{"class":238},[228,165476,582],{"class":287},[228,165478,97415],{"class":238},[228,165480,165481,165483],{"class":230,"line":142},[228,165482,30530],{"class":287},[228,165484,164375],{"class":238},[19,165486,165487],{},"带条件：",[220,165489,165491],{"className":30493,"code":165490,"language":30495,"meta":141,"style":141},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[30,165492,165493,165534],{"__ignoreMap":141},[228,165494,165495,165498,165500,165502,165504,165506,165508,165510,165512,165514,165516,165518,165520,165522,165524,165526,165528,165530,165532],{"class":230,"line":231},[228,165496,165497],{"class":238},"even_nums ",[228,165499,284],{"class":234},[228,165501,165460],{"class":238},[228,165503,3139],{"class":234},[228,165505,9553],{"class":238},[228,165507,26159],{"class":234},[228,165509,32558],{"class":287},[228,165511,239],{"class":238},[228,165513,456],{"class":287},[228,165515,12550],{"class":238},[228,165517,575],{"class":287},[228,165519,13829],{"class":238},[228,165521,1645],{"class":234},[228,165523,9553],{"class":238},[228,165525,566],{"class":234},[228,165527,14870],{"class":287},[228,165529,101674],{"class":234},[228,165531,4207],{"class":287},[228,165533,33361],{"class":238},[228,165535,165536,165538],{"class":230,"line":142},[228,165537,30530],{"class":287},[228,165539,165540],{"class":238},"(even_nums)\n",[19,165542,165543],{},"字典推导式：",[220,165545,165547],{"className":30493,"code":165546,"language":30495,"meta":141,"style":141},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[30,165548,165549,165583],{"__ignoreMap":141},[228,165550,165551,165554,165556,165559,165561,165563,165566,165568,165570,165572,165574,165576,165578,165580],{"class":230,"line":231},[228,165552,165553],{"class":238},"squares ",[228,165555,284],{"class":234},[228,165557,165558],{"class":238}," {i: i ",[228,165560,10776],{"class":234},[228,165562,14870],{"class":287},[228,165564,165565],{"class":234}," for",[228,165567,9553],{"class":238},[228,165569,26159],{"class":234},[228,165571,32558],{"class":287},[228,165573,239],{"class":238},[228,165575,456],{"class":287},[228,165577,12550],{"class":238},[228,165579,582],{"class":287},[228,165581,165582],{"class":238},")}\n",[228,165584,165585,165587],{"class":230,"line":142},[228,165586,30530],{"class":287},[228,165588,165589],{"class":238},"(squares)\n",[19,165591,165592],{},"集合推导式：",[220,165594,165596],{"className":30493,"code":165595,"language":30495,"meta":141,"style":141},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[30,165597,165598,165619],{"__ignoreMap":141},[228,165599,165600,165603,165605,165608,165610,165612,165614,165617],{"class":230,"line":231},[228,165601,165602],{"class":238},"chars ",[228,165604,284],{"class":234},[228,165606,165607],{"class":238}," {ch ",[228,165609,3139],{"class":234},[228,165611,159751],{"class":238},[228,165613,26159],{"class":234},[228,165615,165616],{"class":343}," \"hello\"",[228,165618,1679],{"class":238},[228,165620,165621,165623],{"class":230,"line":142},[228,165622,30530],{"class":287},[228,165624,165625],{"class":238},"(chars)\n",[19,165627,165628],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,165630,165632],{"id":165631},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[220,165634,165636],{"className":30493,"code":165635,"language":30495,"meta":141,"style":141},"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",[30,165637,165638,165646,165666,165686,165706,165726,165730,165734,165742,165756,165765,165769,165779,165791,165795,165815,165824,165828,165844,165849,165853,165867,165871,165893,165929],{"__ignoreMap":141},[228,165639,165640,165642,165644],{"class":230,"line":231},[228,165641,159775],{"class":238},[228,165643,284],{"class":234},[228,165645,55562],{"class":238},[228,165647,165648,165650,165652,165654,165656,165658,165660,165662,165664],{"class":230,"line":142},[228,165649,148444],{"class":238},[228,165651,62794],{"class":343},[228,165653,51552],{"class":238},[228,165655,149947],{"class":343},[228,165657,12550],{"class":238},[228,165659,151531],{"class":343},[228,165661,51552],{"class":238},[228,165663,1227],{"class":287},[228,165665,5044],{"class":238},[228,165667,165668,165670,165672,165674,165676,165678,165680,165682,165684],{"class":230,"line":1293},[228,165669,148444],{"class":238},[228,165671,62794],{"class":343},[228,165673,51552],{"class":238},[228,165675,150995],{"class":343},[228,165677,12550],{"class":238},[228,165679,151531],{"class":343},[228,165681,51552],{"class":238},[228,165683,1049],{"class":287},[228,165685,5044],{"class":238},[228,165687,165688,165690,165692,165694,165696,165698,165700,165702,165704],{"class":230,"line":1308},[228,165689,148444],{"class":238},[228,165691,62794],{"class":343},[228,165693,51552],{"class":238},[228,165695,159790],{"class":343},[228,165697,12550],{"class":238},[228,165699,151531],{"class":343},[228,165701,51552],{"class":238},[228,165703,644],{"class":287},[228,165705,5044],{"class":238},[228,165707,165708,165710,165712,165714,165716,165718,165720,165722,165724],{"class":230,"line":1314},[228,165709,148444],{"class":238},[228,165711,62794],{"class":343},[228,165713,51552],{"class":238},[228,165715,163369],{"class":343},[228,165717,12550],{"class":238},[228,165719,151531],{"class":343},[228,165721,51552],{"class":238},[228,165723,1120],{"class":287},[228,165725,5044],{"class":238},[228,165727,165728],{"class":230,"line":1328},[228,165729,33361],{"class":238},[228,165731,165732],{"class":230,"line":1334},[228,165733,2514],{"emptyLinePlaceholder":157},[228,165735,165736,165738,165740],{"class":230,"line":1425},[228,165737,157319],{"class":238},[228,165739,284],{"class":234},[228,165741,47448],{"class":287},[228,165743,165744,165747,165749,165752,165754],{"class":230,"line":1431},[228,165745,165746],{"class":238},"max_student ",[228,165748,284],{"class":234},[228,165750,165751],{"class":238}," students[",[228,165753,430],{"class":287},[228,165755,33361],{"class":238},[228,165757,165758,165761,165763],{"class":230,"line":1443},[228,165759,165760],{"class":238},"passed ",[228,165762,284],{"class":234},[228,165764,51953],{"class":238},[228,165766,165767],{"class":230,"line":1726},[228,165768,2514],{"emptyLinePlaceholder":157},[228,165770,165771,165773,165775,165777],{"class":230,"line":1731},[228,165772,3139],{"class":234},[228,165774,152196],{"class":238},[228,165776,26159],{"class":234},[228,165778,152201],{"class":238},[228,165780,165781,165783,165785,165787,165789],{"class":230,"line":1737},[228,165782,159366],{"class":238},[228,165784,9592],{"class":234},[228,165786,152208],{"class":238},[228,165788,151531],{"class":343},[228,165790,33361],{"class":238},[228,165792,165793],{"class":230,"line":1742},[228,165794,2514],{"emptyLinePlaceholder":157},[228,165796,165797,165799,165801,165803,165805,165807,165810,165812],{"class":230,"line":1756},[228,165798,3215],{"class":234},[228,165800,152208],{"class":238},[228,165802,151531],{"class":343},[228,165804,4557],{"class":238},[228,165806,1198],{"class":234},[228,165808,165809],{"class":238}," max_student[",[228,165811,151531],{"class":343},[228,165813,165814],{"class":238},"]:\n",[228,165816,165817,165820,165822],{"class":230,"line":1761},[228,165818,165819],{"class":238},"        max_student ",[228,165821,284],{"class":234},[228,165823,152224],{"class":238},[228,165825,165826],{"class":230,"line":1767},[228,165827,2514],{"emptyLinePlaceholder":157},[228,165829,165830,165832,165834,165836,165838,165840,165842],{"class":230,"line":1788},[228,165831,3215],{"class":234},[228,165833,152208],{"class":238},[228,165835,151531],{"class":343},[228,165837,4557],{"class":238},[228,165839,1824],{"class":234},[228,165841,157896],{"class":287},[228,165843,3853],{"class":238},[228,165845,165846],{"class":230,"line":1793},[228,165847,165848],{"class":238},"        passed.append(student)\n",[228,165850,165851],{"class":230,"line":1807},[228,165852,2514],{"emptyLinePlaceholder":157},[228,165854,165855,165857,165859,165861,165863,165865],{"class":230,"line":1812},[228,165856,163833],{"class":238},[228,165858,284],{"class":234},[228,165860,163838],{"class":238},[228,165862,822],{"class":234},[228,165864,7446],{"class":287},[228,165866,165054],{"class":238},[228,165868,165869],{"class":230,"line":1841},[228,165870,2514],{"emptyLinePlaceholder":157},[228,165872,165873,165875,165877,165879,165881,165883,165885,165887,165889,165891],{"class":230,"line":1846},[228,165874,30530],{"class":287},[228,165876,239],{"class":238},[228,165878,291],{"class":234},[228,165880,163856],{"class":343},[228,165882,1134],{"class":287},[228,165884,163861],{"class":238},[228,165886,157218],{"class":234},[228,165888,1184],{"class":287},[228,165890,489],{"class":343},[228,165892,245],{"class":238},[228,165894,165895,165897,165899,165901,165904,165906,165909,165911,165913,165915,165917,165919,165921,165923,165925,165927],{"class":230,"line":1863},[228,165896,30530],{"class":287},[228,165898,239],{"class":238},[228,165900,291],{"class":234},[228,165902,165903],{"class":343},"\"最高分学生:",[228,165905,1134],{"class":287},[228,165907,165908],{"class":238},"max_student[",[228,165910,152941],{"class":343},[228,165912,1178],{"class":238},[228,165914,1184],{"class":287},[228,165916,4562],{"class":287},[228,165918,165908],{"class":238},[228,165920,152979],{"class":343},[228,165922,1178],{"class":238},[228,165924,1184],{"class":287},[228,165926,489],{"class":343},[228,165928,245],{"class":238},[228,165930,165931,165933,165935,165937,165940,165943,165946,165948,165950],{"class":230,"line":1868},[228,165932,30530],{"class":287},[228,165934,239],{"class":238},[228,165936,291],{"class":234},[228,165938,165939],{"class":343},"\"及格人数:",[228,165941,165942],{"class":287},"{len",[228,165944,165945],{"class":238},"(passed)",[228,165947,1184],{"class":287},[228,165949,489],{"class":343},[228,165951,245],{"class":238},[14,165953,165955],{"id":165954},"_616-易错点","6.16 易错点",[183,165957,165958,165961,165964,165967,165973,165982],{},[186,165959,165960],{},"列表可变，元组和字符串不可变。",[186,165962,165963],{},"切片结束位置不包含。",[186,165965,165966],{},"字典通过 key 取值，不是通过索引。",[186,165968,165969,165970,78],{},"空集合要用 ",[30,165971,165972],{},"set()",[186,165974,104481,165975,165978,165979,78],{},[30,165976,165977],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[30,165980,165981],{},"get()",[186,165983,165984],{},"嵌套容器要先看清楚每一层是什么类型。",[14,165986,165988],{"id":165987},"_617-本章练习","6.17 本章练习",[183,165990,165991,165994,165997,166000,166003],{},[186,165992,165993],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[186,165995,165996],{},"输入一句话，统计每个字符出现次数。",[186,165998,165999],{},"使用集合去除列表中的重复元素。",[186,166001,166002],{},"使用字典保存一个学生的信息，并实现修改成绩。",[186,166004,166005],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[5241,166007,166008],{},"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":141,"searchDepth":142,"depth":142,"links":166010},[166011,166012,166013,166014,166015,166016,166017,166018,166019,166020,166021,166022,166023,166024,166025,166026,166027],{"id":162991,"depth":142,"text":162992},{"id":163108,"depth":142,"text":163109},{"id":163198,"depth":142,"text":163199},{"id":163322,"depth":142,"text":163323},{"id":163685,"depth":142,"text":163686},{"id":163872,"depth":142,"text":163873},{"id":163991,"depth":142,"text":163992},{"id":164133,"depth":142,"text":164134},{"id":164320,"depth":142,"text":164321},{"id":164564,"depth":142,"text":164565},{"id":164774,"depth":142,"text":164775},{"id":164859,"depth":142,"text":164860},{"id":165157,"depth":142,"text":165158},{"id":165439,"depth":142,"text":165440},{"id":165631,"depth":142,"text":165632},{"id":165954,"depth":142,"text":165955},{"id":165987,"depth":142,"text":165988},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":162983,"description":154},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166034,"title":166035,"body":166036,"description":154,"extension":155,"meta":168208,"navigation":157,"path":168209,"seo":168210,"stem":168211,"__hash__":168212},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166037,"toc":168183},[166038,166041,166045,166048,166128,166131,166152,166155,166159,166162,166224,166227,166244,166248,166251,166296,166298,166306,166310,166313,166395,166398,166401,166426,166429,166452,166456,166459,166461,166523,166526,166528,166579,166583,166587,166593,166698,166702,166708,166779,166783,166786,166854,166857,166937,166941,166947,166983,166986,166989,167099,167105,167109,167112,167184,167187,167191,167195,167200,167262,167266,167271,167339,167343,167348,167464,167468,167471,167551,167554,167558,167561,167665,167667,167682,167685,167689,167827,167835,167839,167841,167852,167854,168112,168116,168148,168152,168180],[10,166039,166035],{"id":166040},"_7-函数进阶",[14,166042,166044],{"id":166043},"_71-多返回值","7.1 多返回值",[19,166046,166047],{},"Python 函数可以返回多个值，本质上返回的是元组。",[220,166049,166051],{"className":30493,"code":166050,"language":30495,"meta":141,"style":141},"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",[30,166052,166053,166062,166070,166078,166087,166094,166098,166102,166111,166117],{"__ignoreMap":141},[228,166054,166055,166057,166060],{"class":230,"line":231},[228,166056,32062],{"class":234},[228,166058,166059],{"class":2077}," get_info",[228,166061,32068],{"class":238},[228,166063,166064,166066,166068],{"class":230,"line":142},[228,166065,152429],{"class":238},[228,166067,284],{"class":234},[228,166069,149412],{"class":343},[228,166071,166072,166074,166076],{"class":230,"line":1293},[228,166073,152445],{"class":238},[228,166075,284],{"class":234},[228,166077,146610],{"class":287},[228,166079,166080,166082,166084],{"class":230,"line":1308},[228,166081,152460],{"class":238},[228,166083,284],{"class":234},[228,166085,166086],{"class":287}," 95\n",[228,166088,166089,166091],{"class":230,"line":1314},[228,166090,4204],{"class":234},[228,166092,166093],{"class":238}," name, age, score\n",[228,166095,166096],{"class":230,"line":1328},[228,166097,2514],{"emptyLinePlaceholder":157},[228,166099,166100],{"class":230,"line":1334},[228,166101,2514],{"emptyLinePlaceholder":157},[228,166103,166104,166106,166108],{"class":230,"line":1425},[228,166105,161365],{"class":238},[228,166107,284],{"class":234},[228,166109,166110],{"class":238}," get_info()\n",[228,166112,166113,166115],{"class":230,"line":1431},[228,166114,30530],{"class":287},[228,166116,76700],{"class":238},[228,166118,166119,166121,166123,166125],{"class":230,"line":1443},[228,166120,30530],{"class":287},[228,166122,239],{"class":238},[228,166124,103222],{"class":287},[228,166126,166127],{"class":238},"(result))\n",[19,166129,166130],{},"可以直接解包：",[220,166132,166134],{"className":30493,"code":166133,"language":30495,"meta":141,"style":141},"name, age, score = get_info()\nprint(name, age, score)\n",[30,166135,166136,166145],{"__ignoreMap":141},[228,166137,166138,166141,166143],{"class":230,"line":231},[228,166139,166140],{"class":238},"name, age, score ",[228,166142,284],{"class":234},[228,166144,166110],{"class":238},[228,166146,166147,166149],{"class":230,"line":142},[228,166148,30530],{"class":287},[228,166150,166151],{"class":238},"(name, age, score)\n",[19,166153,166154],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,166156,166158],{"id":166157},"_72-位置参数","7.2 位置参数",[19,166160,166161],{},"位置参数按顺序传递。",[220,166163,166165],{"className":30493,"code":166164,"language":30495,"meta":141,"style":141},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[30,166166,166167,166175,166203,166207,166211],{"__ignoreMap":141},[228,166168,166169,166171,166173],{"class":230,"line":231},[228,166170,32062],{"class":234},[228,166172,149431],{"class":2077},[228,166174,149434],{"class":238},[228,166176,166177,166179,166181,166183,166185,166187,166189,166191,166193,166195,166197,166199,166201],{"class":230,"line":142},[228,166178,31414],{"class":287},[228,166180,239],{"class":238},[228,166182,291],{"class":234},[228,166184,149445],{"class":343},[228,166186,1134],{"class":287},[228,166188,79925],{"class":238},[228,166190,1184],{"class":287},[228,166192,149454],{"class":343},[228,166194,1134],{"class":287},[228,166196,70336],{"class":238},[228,166198,1184],{"class":287},[228,166200,149463],{"class":343},[228,166202,245],{"class":238},[228,166204,166205],{"class":230,"line":1293},[228,166206,2514],{"emptyLinePlaceholder":157},[228,166208,166209],{"class":230,"line":1308},[228,166210,2514],{"emptyLinePlaceholder":157},[228,166212,166213,166216,166218,166220,166222],{"class":230,"line":1314},[228,166214,166215],{"class":238},"introduce(",[228,166217,149947],{"class":343},[228,166219,12550],{"class":238},[228,166221,888],{"class":287},[228,166223,245],{"class":238},[19,166225,166226],{},"顺序错了就会得到错误含义：",[220,166228,166230],{"className":30493,"code":166229,"language":30495,"meta":141,"style":141},"introduce(18, \"小明\")\n",[30,166231,166232],{"__ignoreMap":141},[228,166233,166234,166236,166238,166240,166242],{"class":230,"line":231},[228,166235,166215],{"class":238},[228,166237,888],{"class":287},[228,166239,12550],{"class":238},[228,166241,149947],{"class":343},[228,166243,245],{"class":238},[14,166245,166247],{"id":166246},"_73-关键字参数","7.3 关键字参数",[19,166249,166250],{},"关键字参数按参数名传递。",[220,166252,166254],{"className":30493,"code":166253,"language":30495,"meta":141,"style":141},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[30,166255,166256,166276],{"__ignoreMap":141},[228,166257,166258,166260,166262,166264,166266,166268,166270,166272,166274],{"class":230,"line":231},[228,166259,166215],{"class":238},[228,166261,79925],{"class":5331},[228,166263,284],{"class":234},[228,166265,149947],{"class":343},[228,166267,12550],{"class":238},[228,166269,70336],{"class":5331},[228,166271,284],{"class":234},[228,166273,888],{"class":287},[228,166275,245],{"class":238},[228,166277,166278,166280,166282,166284,166286,166288,166290,166292,166294],{"class":230,"line":142},[228,166279,166215],{"class":238},[228,166281,70336],{"class":5331},[228,166283,284],{"class":234},[228,166285,888],{"class":287},[228,166287,12550],{"class":238},[228,166289,79925],{"class":5331},[228,166291,284],{"class":234},[228,166293,149947],{"class":343},[228,166295,245],{"class":238},[19,166297,118049],{},[183,166299,166300,166303],{},[186,166301,166302],{},"顺序不容易错。",[186,166304,166305],{},"调用时可读性更强。",[14,166307,166309],{"id":166308},"_74-默认参数","7.4 默认参数",[19,166311,166312],{},"默认参数给参数设置默认值。",[220,166314,166316],{"className":30493,"code":166315,"language":30495,"meta":141,"style":141},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[30,166317,166318,166334,166364,166368,166372,166382],{"__ignoreMap":141},[228,166319,166320,166322,166324,166327,166329,166332],{"class":230,"line":231},[228,166321,32062],{"class":234},[228,166323,122208],{"class":2077},[228,166325,166326],{"class":238},"(host, port",[228,166328,284],{"class":234},[228,166330,166331],{"class":287},"3306",[228,166333,30901],{"class":238},[228,166335,166336,166338,166340,166342,166345,166347,166349,166351,166353,166355,166358,166360,166362],{"class":230,"line":142},[228,166337,31414],{"class":287},[228,166339,239],{"class":238},[228,166341,291],{"class":234},[228,166343,166344],{"class":343},"\"连接",[228,166346,1134],{"class":287},[228,166348,27511],{"class":238},[228,166350,1184],{"class":287},[228,166352,1097],{"class":343},[228,166354,1134],{"class":287},[228,166356,166357],{"class":238},"port",[228,166359,1184],{"class":287},[228,166361,489],{"class":343},[228,166363,245],{"class":238},[228,166365,166366],{"class":230,"line":1293},[228,166367,2514],{"emptyLinePlaceholder":157},[228,166369,166370],{"class":230,"line":1308},[228,166371,2514],{"emptyLinePlaceholder":157},[228,166373,166374,166377,166380],{"class":230,"line":1314},[228,166375,166376],{"class":238},"connect(",[228,166378,166379],{"class":343},"\"localhost\"",[228,166381,245],{"class":238},[228,166383,166384,166386,166388,166390,166393],{"class":230,"line":1328},[228,166385,166376],{"class":238},[228,166387,166379],{"class":343},[228,166389,12550],{"class":238},[228,166391,166392],{"class":287},"6379",[228,166394,245],{"class":238},[19,166396,166397],{},"注意：默认参数必须放在非默认参数后面。",[19,166399,166400],{},"错误：",[220,166402,166404],{"className":30493,"code":166403,"language":30495,"meta":141,"style":141},"def connect(port=3306, host):\n    pass\n",[30,166405,166406,166422],{"__ignoreMap":141},[228,166407,166408,166410,166412,166415,166417,166419],{"class":230,"line":231},[228,166409,32062],{"class":234},[228,166411,122208],{"class":2077},[228,166413,166414],{"class":238},"(port",[228,166416,284],{"class":234},[228,166418,166331],{"class":287},[228,166420,166421],{"class":238},", host):\n",[228,166423,166424],{"class":230,"line":142},[228,166425,149596],{"class":234},[19,166427,166428],{},"正确：",[220,166430,166432],{"className":30493,"code":166431,"language":30495,"meta":141,"style":141},"def connect(host, port=3306):\n    pass\n",[30,166433,166434,166448],{"__ignoreMap":141},[228,166435,166436,166438,166440,166442,166444,166446],{"class":230,"line":231},[228,166437,32062],{"class":234},[228,166439,122208],{"class":2077},[228,166441,166326],{"class":238},[228,166443,284],{"class":234},[228,166445,166331],{"class":287},[228,166447,30901],{"class":238},[228,166449,166450],{"class":230,"line":142},[228,166451,149596],{"class":234},[14,166453,166455],{"id":166454},"_75-默认参数的坑","7.5 默认参数的坑",[19,166457,166458],{},"不要使用可变对象作为默认参数。",[19,166460,157682],{},[220,166462,166464],{"className":30493,"code":166463,"language":30495,"meta":141,"style":141},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[30,166465,166466,166481,166486,166493,166497,166501,166512],{"__ignoreMap":141},[228,166467,166468,166470,166473,166476,166478],{"class":230,"line":231},[228,166469,32062],{"class":234},[228,166471,166472],{"class":2077}," add_item",[228,166474,166475],{"class":238},"(item, items",[228,166477,284],{"class":234},[228,166479,166480],{"class":238},"[]):\n",[228,166482,166483],{"class":230,"line":142},[228,166484,166485],{"class":238},"    items.append(item)\n",[228,166487,166488,166490],{"class":230,"line":1293},[228,166489,4204],{"class":234},[228,166491,166492],{"class":238}," items\n",[228,166494,166495],{"class":230,"line":1308},[228,166496,2514],{"emptyLinePlaceholder":157},[228,166498,166499],{"class":230,"line":1314},[228,166500,2514],{"emptyLinePlaceholder":157},[228,166502,166503,166505,166508,166510],{"class":230,"line":1328},[228,166504,30530],{"class":287},[228,166506,166507],{"class":238},"(add_item(",[228,166509,165384],{"class":343},[228,166511,30612],{"class":238},[228,166513,166514,166516,166518,166521],{"class":230,"line":1334},[228,166515,30530],{"class":287},[228,166517,166507],{"class":238},[228,166519,166520],{"class":343},"\"b\"",[228,166522,30612],{"class":238},[19,166524,166525],{},"第二次调用会复用第一次的列表。",[19,166527,155947],{},[220,166529,166531],{"className":30493,"code":166530,"language":30495,"meta":141,"style":141},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[30,166532,166533,166547,166560,166569,166573],{"__ignoreMap":141},[228,166534,166535,166537,166539,166541,166543,166545],{"class":230,"line":231},[228,166536,32062],{"class":234},[228,166538,166472],{"class":2077},[228,166540,166475],{"class":238},[228,166542,284],{"class":234},[228,166544,95801],{"class":287},[228,166546,30901],{"class":238},[228,166548,166549,166551,166554,166556,166558],{"class":230,"line":142},[228,166550,3215],{"class":234},[228,166552,166553],{"class":238}," items ",[228,166555,39042],{"class":234},[228,166557,39048],{"class":287},[228,166559,3853],{"class":238},[228,166561,166562,166565,166567],{"class":230,"line":1293},[228,166563,166564],{"class":238},"        items ",[228,166566,284],{"class":234},[228,166568,51953],{"class":238},[228,166570,166571],{"class":230,"line":1308},[228,166572,166485],{"class":238},[228,166574,166575,166577],{"class":230,"line":1314},[228,166576,4204],{"class":234},[228,166578,166492],{"class":238},[14,166580,166582],{"id":166581},"_76-不定长参数","7.6 不定长参数",[200,166584,166586],{"id":166585},"_761-args","7.6.1 *args",[19,166588,166589,166592],{},[30,166590,166591],{},"*args"," 接收任意数量的位置参数，得到元组。",[220,166594,166596],{"className":30493,"code":166595,"language":30495,"meta":141,"style":141},"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",[30,166597,166598,166611,166619,166630,166639,166645,166649,166653,166672],{"__ignoreMap":141},[228,166599,166600,166602,166604,166606,166608],{"class":230,"line":231},[228,166601,32062],{"class":234},[228,166603,5324],{"class":2077},[228,166605,239],{"class":238},[228,166607,693],{"class":234},[228,166609,166610],{"class":238},"args):\n",[228,166612,166613,166615,166617],{"class":230,"line":142},[228,166614,159366],{"class":238},[228,166616,284],{"class":234},[228,166618,47448],{"class":287},[228,166620,166621,166623,166625,166627],{"class":230,"line":1293},[228,166622,3315],{"class":234},[228,166624,156239],{"class":238},[228,166626,26159],{"class":234},[228,166628,166629],{"class":238}," args:\n",[228,166631,166632,166634,166636],{"class":230,"line":1308},[228,166633,160041],{"class":238},[228,166635,9592],{"class":234},[228,166637,166638],{"class":238}," num\n",[228,166640,166641,166643],{"class":230,"line":1314},[228,166642,4204],{"class":234},[228,166644,162346],{"class":238},[228,166646,166647],{"class":230,"line":1328},[228,166648,2514],{"emptyLinePlaceholder":157},[228,166650,166651],{"class":230,"line":1334},[228,166652,2514],{"emptyLinePlaceholder":157},[228,166654,166655,166657,166660,166662,166664,166666,166668,166670],{"class":230,"line":1425},[228,166656,30530],{"class":287},[228,166658,166659],{"class":238},"(add(",[228,166661,456],{"class":287},[228,166663,12550],{"class":238},[228,166665,316],{"class":287},[228,166667,12550],{"class":238},[228,166669,310],{"class":287},[228,166671,30612],{"class":238},[228,166673,166674,166676,166678,166680,166682,166684,166686,166688,166690,166692,166694,166696],{"class":230,"line":1431},[228,166675,30530],{"class":287},[228,166677,166659],{"class":238},[228,166679,456],{"class":287},[228,166681,12550],{"class":238},[228,166683,316],{"class":287},[228,166685,12550],{"class":238},[228,166687,310],{"class":287},[228,166689,12550],{"class":238},[228,166691,531],{"class":287},[228,166693,12550],{"class":238},[228,166695,557],{"class":287},[228,166697,30612],{"class":238},[200,166699,166701],{"id":166700},"_762-kwargs","7.6.2 **kwargs",[19,166703,166704,166707],{},[30,166705,166706],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[220,166709,166711],{"className":30493,"code":166710,"language":30495,"meta":141,"style":141},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[30,166712,166713,166726,166737,166743,166747,166751],{"__ignoreMap":141},[228,166714,166715,166717,166719,166721,166723],{"class":230,"line":231},[228,166716,32062],{"class":234},[228,166718,162004],{"class":2077},[228,166720,239],{"class":238},[228,166722,10776],{"class":234},[228,166724,166725],{"class":238},"kwargs):\n",[228,166727,166728,166730,166732,166734],{"class":230,"line":142},[228,166729,3315],{"class":234},[228,166731,164844],{"class":238},[228,166733,26159],{"class":234},[228,166735,166736],{"class":238}," kwargs.items():\n",[228,166738,166739,166741],{"class":230,"line":1293},[228,166740,32566],{"class":287},[228,166742,164856],{"class":238},[228,166744,166745],{"class":230,"line":1308},[228,166746,2514],{"emptyLinePlaceholder":157},[228,166748,166749],{"class":230,"line":1314},[228,166750,2514],{"emptyLinePlaceholder":157},[228,166752,166753,166755,166757,166759,166761,166763,166765,166767,166769,166771,166773,166775,166777],{"class":230,"line":1328},[228,166754,162069],{"class":238},[228,166756,79925],{"class":5331},[228,166758,284],{"class":234},[228,166760,149947],{"class":343},[228,166762,12550],{"class":238},[228,166764,70336],{"class":5331},[228,166766,284],{"class":234},[228,166768,888],{"class":287},[228,166770,12550],{"class":238},[228,166772,70387],{"class":5331},[228,166774,284],{"class":234},[228,166776,69384],{"class":343},[228,166778,245],{"class":238},[14,166780,166782],{"id":166781},"_77-参数解包","7.7 参数解包",[19,166784,166785],{},"列表或元组解包为位置参数：",[220,166787,166789],{"className":30493,"code":166788,"language":30495,"meta":141,"style":141},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[30,166790,166791,166800,166815,166819,166823,166843],{"__ignoreMap":141},[228,166792,166793,166795,166797],{"class":230,"line":231},[228,166794,32062],{"class":234},[228,166796,5324],{"class":2077},[228,166798,166799],{"class":238},"(a, b, c):\n",[228,166801,166802,166804,166806,166808,166810,166812],{"class":230,"line":142},[228,166803,4204],{"class":234},[228,166805,10984],{"class":238},[228,166807,719],{"class":234},[228,166809,10997],{"class":238},[228,166811,719],{"class":234},[228,166813,166814],{"class":238}," c\n",[228,166816,166817],{"class":230,"line":1293},[228,166818,2514],{"emptyLinePlaceholder":157},[228,166820,166821],{"class":230,"line":1308},[228,166822,2514],{"emptyLinePlaceholder":157},[228,166824,166825,166827,166829,166831,166833,166835,166837,166839,166841],{"class":230,"line":1314},[228,166826,164159],{"class":238},[228,166828,284],{"class":234},[228,166830,52341],{"class":238},[228,166832,456],{"class":287},[228,166834,12550],{"class":238},[228,166836,316],{"class":287},[228,166838,12550],{"class":238},[228,166840,310],{"class":287},[228,166842,33361],{"class":238},[228,166844,166845,166847,166849,166851],{"class":230,"line":1328},[228,166846,30530],{"class":287},[228,166848,166659],{"class":238},[228,166850,693],{"class":234},[228,166852,166853],{"class":238},"nums))\n",[19,166855,166856],{},"字典解包为关键字参数：",[220,166858,166860],{"className":30493,"code":166859,"language":30495,"meta":141,"style":141},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[30,166861,166862,166870,166896,166900,166904,166928],{"__ignoreMap":141},[228,166863,166864,166866,166868],{"class":230,"line":231},[228,166865,32062],{"class":234},[228,166867,149431],{"class":2077},[228,166869,149434],{"class":238},[228,166871,166872,166874,166876,166878,166880,166882,166884,166886,166888,166890,166892,166894],{"class":230,"line":142},[228,166873,31414],{"class":287},[228,166875,239],{"class":238},[228,166877,291],{"class":234},[228,166879,489],{"class":343},[228,166881,1134],{"class":287},[228,166883,79925],{"class":238},[228,166885,1184],{"class":287},[228,166887,4562],{"class":287},[228,166889,70336],{"class":238},[228,166891,1184],{"class":287},[228,166893,489],{"class":343},[228,166895,245],{"class":238},[228,166897,166898],{"class":230,"line":1293},[228,166899,2514],{"emptyLinePlaceholder":157},[228,166901,166902],{"class":230,"line":1308},[228,166903,2514],{"emptyLinePlaceholder":157},[228,166905,166906,166908,166910,166912,166914,166916,166918,166920,166922,166924,166926],{"class":230,"line":1314},[228,166907,116429],{"class":238},[228,166909,284],{"class":234},[228,166911,4562],{"class":238},[228,166913,62794],{"class":343},[228,166915,51552],{"class":238},[228,166917,149947],{"class":343},[228,166919,12550],{"class":238},[228,166921,69239],{"class":343},[228,166923,51552],{"class":238},[228,166925,888],{"class":287},[228,166927,1679],{"class":238},[228,166929,166930,166932,166934],{"class":230,"line":1328},[228,166931,166215],{"class":238},[228,166933,10776],{"class":234},[228,166935,166936],{"class":238},"info)\n",[14,166938,166940],{"id":166939},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,166942,166943,166946],{},[30,166944,166945],{},"lambda"," 用于定义简单匿名函数。",[220,166948,166950],{"className":30493,"code":166949,"language":30495,"meta":141,"style":141},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[30,166951,166952,166969],{"__ignoreMap":141},[228,166953,166954,166957,166959,166962,166965,166967],{"class":230,"line":231},[228,166955,166956],{"class":238},"add ",[228,166958,284],{"class":234},[228,166960,166961],{"class":234}," lambda",[228,166963,166964],{"class":238}," a, b: a ",[228,166966,719],{"class":234},[228,166968,151163],{"class":238},[228,166970,166971,166973,166975,166977,166979,166981],{"class":230,"line":142},[228,166972,30530],{"class":287},[228,166974,166659],{"class":238},[228,166976,456],{"class":287},[228,166978,12550],{"class":238},[228,166980,316],{"class":287},[228,166982,30612],{"class":238},[19,166984,166985],{},"常和排序、过滤等函数一起使用。",[19,166987,166988],{},"按分数排序：",[220,166990,166992],{"className":30493,"code":166991,"language":30495,"meta":141,"style":141},"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",[30,166993,166994,167002,167022,167042,167062,167066,167070,167093],{"__ignoreMap":141},[228,166995,166996,166998,167000],{"class":230,"line":231},[228,166997,159775],{"class":238},[228,166999,284],{"class":234},[228,167001,55562],{"class":238},[228,167003,167004,167006,167008,167010,167012,167014,167016,167018,167020],{"class":230,"line":142},[228,167005,148444],{"class":238},[228,167007,62794],{"class":343},[228,167009,51552],{"class":238},[228,167011,149947],{"class":343},[228,167013,12550],{"class":238},[228,167015,151531],{"class":343},[228,167017,51552],{"class":238},[228,167019,1227],{"class":287},[228,167021,5044],{"class":238},[228,167023,167024,167026,167028,167030,167032,167034,167036,167038,167040],{"class":230,"line":1293},[228,167025,148444],{"class":238},[228,167027,62794],{"class":343},[228,167029,51552],{"class":238},[228,167031,150995],{"class":343},[228,167033,12550],{"class":238},[228,167035,151531],{"class":343},[228,167037,51552],{"class":238},[228,167039,1049],{"class":287},[228,167041,5044],{"class":238},[228,167043,167044,167046,167048,167050,167052,167054,167056,167058,167060],{"class":230,"line":1308},[228,167045,148444],{"class":238},[228,167047,62794],{"class":343},[228,167049,51552],{"class":238},[228,167051,159790],{"class":343},[228,167053,12550],{"class":238},[228,167055,151531],{"class":343},[228,167057,51552],{"class":238},[228,167059,644],{"class":287},[228,167061,5044],{"class":238},[228,167063,167064],{"class":230,"line":1314},[228,167065,33361],{"class":238},[228,167067,167068],{"class":230,"line":1328},[228,167069,2514],{"emptyLinePlaceholder":157},[228,167071,167072,167075,167077,167079,167081,167083,167085,167087,167089,167091],{"class":230,"line":1334},[228,167073,167074],{"class":238},"students.sort(",[228,167076,154005],{"class":5331},[228,167078,154008],{"class":234},[228,167080,154011],{"class":238},[228,167082,151531],{"class":343},[228,167084,112317],{"class":238},[228,167086,163587],{"class":5331},[228,167088,284],{"class":234},[228,167090,31591],{"class":287},[228,167092,245],{"class":238},[228,167094,167095,167097],{"class":230,"line":1425},[228,167096,30530],{"class":287},[228,167098,165054],{"class":238},[19,167100,167101,167102,167104],{},"如果逻辑复杂，不要硬写 ",[30,167103,166945],{},"，定义普通函数更清晰。",[14,167106,167108],{"id":167107},"_79-函数作为参数","7.9 函数作为参数",[19,167110,167111],{},"函数可以作为参数传给另一个函数。",[220,167113,167115],{"className":30493,"code":167114,"language":30495,"meta":141,"style":141},"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",[30,167116,167117,167125,167135,167139,167143,167153,167160,167164,167168],{"__ignoreMap":141},[228,167118,167119,167121,167123],{"class":230,"line":231},[228,167120,32062],{"class":234},[228,167122,5324],{"class":2077},[228,167124,151152],{"class":238},[228,167126,167127,167129,167131,167133],{"class":230,"line":142},[228,167128,4204],{"class":234},[228,167130,10984],{"class":238},[228,167132,719],{"class":234},[228,167134,151163],{"class":238},[228,167136,167137],{"class":230,"line":1293},[228,167138,2514],{"emptyLinePlaceholder":157},[228,167140,167141],{"class":230,"line":1308},[228,167142,2514],{"emptyLinePlaceholder":157},[228,167144,167145,167147,167150],{"class":230,"line":1314},[228,167146,32062],{"class":234},[228,167148,167149],{"class":2077}," calculate",[228,167151,167152],{"class":238},"(a, b, func):\n",[228,167154,167155,167157],{"class":230,"line":1328},[228,167156,4204],{"class":234},[228,167158,167159],{"class":238}," func(a, b)\n",[228,167161,167162],{"class":230,"line":1334},[228,167163,2514],{"emptyLinePlaceholder":157},[228,167165,167166],{"class":230,"line":1425},[228,167167,2514],{"emptyLinePlaceholder":157},[228,167169,167170,167172,167175,167177,167179,167181],{"class":230,"line":1431},[228,167171,30530],{"class":287},[228,167173,167174],{"class":238},"(calculate(",[228,167176,684],{"class":287},[228,167178,12550],{"class":238},[228,167180,938],{"class":287},[228,167182,167183],{"class":238},", add))\n",[19,167185,167186],{},"这种思想在排序、回调、框架中经常出现。",[14,167188,167190],{"id":167189},"_710-mapfiltersorted","7.10 map、filter、sorted",[200,167192,167194],{"id":167193},"_7101-map","7.10.1 map",[19,167196,167197,167199],{},[30,167198,74159],{}," 对每个元素执行函数。",[220,167201,167203],{"className":30493,"code":167202,"language":30495,"meta":141,"style":141},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[30,167204,167205,167229,167252],{"__ignoreMap":141},[228,167206,167207,167209,167211,167213,167215,167217,167219,167221,167223,167225,167227],{"class":230,"line":231},[228,167208,164159],{"class":238},[228,167210,284],{"class":234},[228,167212,52341],{"class":238},[228,167214,456],{"class":287},[228,167216,12550],{"class":238},[228,167218,316],{"class":287},[228,167220,12550],{"class":238},[228,167222,310],{"class":287},[228,167224,12550],{"class":238},[228,167226,531],{"class":287},[228,167228,33361],{"class":238},[228,167230,167231,167233,167235,167238,167240,167242,167245,167247,167249],{"class":230,"line":142},[228,167232,161365],{"class":238},[228,167234,284],{"class":234},[228,167236,167237],{"class":287}," map",[228,167239,239],{"class":238},[228,167241,166945],{"class":234},[228,167243,167244],{"class":238}," x: x ",[228,167246,693],{"class":234},[228,167248,14870],{"class":287},[228,167250,167251],{"class":238},", nums)\n",[228,167253,167254,167256,167258,167260],{"class":230,"line":1293},[228,167255,30530],{"class":287},[228,167257,239],{"class":238},[228,167259,154129],{"class":287},[228,167261,166127],{"class":238},[200,167263,167265],{"id":167264},"_7102-filter","7.10.2 filter",[19,167267,167268,167270],{},[30,167269,80166],{}," 保留满足条件的元素。",[220,167272,167274],{"className":30493,"code":167273,"language":30495,"meta":141,"style":141},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[30,167275,167276,167304,167329],{"__ignoreMap":141},[228,167277,167278,167280,167282,167284,167286,167288,167290,167292,167294,167296,167298,167300,167302],{"class":230,"line":231},[228,167279,164159],{"class":238},[228,167281,284],{"class":234},[228,167283,52341],{"class":238},[228,167285,456],{"class":287},[228,167287,12550],{"class":238},[228,167289,316],{"class":287},[228,167291,12550],{"class":238},[228,167293,310],{"class":287},[228,167295,12550],{"class":238},[228,167297,531],{"class":287},[228,167299,12550],{"class":238},[228,167301,557],{"class":287},[228,167303,33361],{"class":238},[228,167305,167306,167308,167310,167313,167315,167317,167319,167321,167323,167325,167327],{"class":230,"line":142},[228,167307,161365],{"class":238},[228,167309,284],{"class":234},[228,167311,167312],{"class":287}," filter",[228,167314,239],{"class":238},[228,167316,166945],{"class":234},[228,167318,167244],{"class":238},[228,167320,566],{"class":234},[228,167322,14870],{"class":287},[228,167324,101674],{"class":234},[228,167326,4207],{"class":287},[228,167328,167251],{"class":238},[228,167330,167331,167333,167335,167337],{"class":230,"line":1293},[228,167332,30530],{"class":287},[228,167334,239],{"class":238},[228,167336,154129],{"class":287},[228,167338,166127],{"class":238},[200,167340,167342],{"id":167341},"_7103-sorted","7.10.3 sorted",[19,167344,167345,167347],{},[30,167346,165295],{}," 返回排序后的新列表。",[220,167349,167351],{"className":30493,"code":167350,"language":30495,"meta":141,"style":141},"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",[30,167352,167353,167361,167381,167401,167421,167425,167429,167458],{"__ignoreMap":141},[228,167354,167355,167357,167359],{"class":230,"line":231},[228,167356,159775],{"class":238},[228,167358,284],{"class":234},[228,167360,55562],{"class":238},[228,167362,167363,167365,167367,167369,167371,167373,167375,167377,167379],{"class":230,"line":142},[228,167364,148444],{"class":238},[228,167366,62794],{"class":343},[228,167368,51552],{"class":238},[228,167370,149947],{"class":343},[228,167372,12550],{"class":238},[228,167374,151531],{"class":343},[228,167376,51552],{"class":238},[228,167378,1227],{"class":287},[228,167380,5044],{"class":238},[228,167382,167383,167385,167387,167389,167391,167393,167395,167397,167399],{"class":230,"line":1293},[228,167384,148444],{"class":238},[228,167386,62794],{"class":343},[228,167388,51552],{"class":238},[228,167390,150995],{"class":343},[228,167392,12550],{"class":238},[228,167394,151531],{"class":343},[228,167396,51552],{"class":238},[228,167398,1049],{"class":287},[228,167400,5044],{"class":238},[228,167402,167403,167405,167407,167409,167411,167413,167415,167417,167419],{"class":230,"line":1308},[228,167404,148444],{"class":238},[228,167406,62794],{"class":343},[228,167408,51552],{"class":238},[228,167410,159790],{"class":343},[228,167412,12550],{"class":238},[228,167414,151531],{"class":343},[228,167416,51552],{"class":238},[228,167418,644],{"class":287},[228,167420,5044],{"class":238},[228,167422,167423],{"class":230,"line":1314},[228,167424,33361],{"class":238},[228,167426,167427],{"class":230,"line":1328},[228,167428,2514],{"emptyLinePlaceholder":157},[228,167430,167431,167433,167435,167437,167440,167442,167444,167446,167448,167450,167452,167454,167456],{"class":230,"line":1334},[228,167432,161365],{"class":238},[228,167434,284],{"class":234},[228,167436,163663],{"class":287},[228,167438,167439],{"class":238},"(students, ",[228,167441,154005],{"class":5331},[228,167443,154008],{"class":234},[228,167445,154011],{"class":238},[228,167447,151531],{"class":343},[228,167449,112317],{"class":238},[228,167451,163587],{"class":5331},[228,167453,284],{"class":234},[228,167455,31591],{"class":287},[228,167457,245],{"class":238},[228,167459,167460,167462],{"class":230,"line":1425},[228,167461,30530],{"class":287},[228,167463,76700],{"class":238},[14,167465,167467],{"id":167466},"_711-闭包入门","7.11 闭包入门",[19,167469,167470],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[220,167472,167474],{"className":30493,"code":167473,"language":30495,"meta":141,"style":141},"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",[30,167475,167476,167486,167496,167507,167511,167518,167522,167526,167540],{"__ignoreMap":141},[228,167477,167478,167480,167483],{"class":230,"line":231},[228,167479,32062],{"class":234},[228,167481,167482],{"class":2077}," outer",[228,167484,167485],{"class":238},"(base):\n",[228,167487,167488,167490,167493],{"class":230,"line":142},[228,167489,30916],{"class":234},[228,167491,167492],{"class":2077}," inner",[228,167494,167495],{"class":238},"(num):\n",[228,167497,167498,167500,167503,167505],{"class":230,"line":1293},[228,167499,14867],{"class":234},[228,167501,167502],{"class":238}," base ",[228,167504,719],{"class":234},[228,167506,166638],{"class":238},[228,167508,167509],{"class":230,"line":1308},[228,167510,2514],{"emptyLinePlaceholder":157},[228,167512,167513,167515],{"class":230,"line":1314},[228,167514,4204],{"class":234},[228,167516,167517],{"class":238}," inner\n",[228,167519,167520],{"class":230,"line":1328},[228,167521,2514],{"emptyLinePlaceholder":157},[228,167523,167524],{"class":230,"line":1334},[228,167525,2514],{"emptyLinePlaceholder":157},[228,167527,167528,167531,167533,167536,167538],{"class":230,"line":1425},[228,167529,167530],{"class":238},"add_10 ",[228,167532,284],{"class":234},[228,167534,167535],{"class":238}," outer(",[228,167537,684],{"class":287},[228,167539,245],{"class":238},[228,167541,167542,167544,167547,167549],{"class":230,"line":1431},[228,167543,30530],{"class":287},[228,167545,167546],{"class":238},"(add_10(",[228,167548,557],{"class":287},[228,167550,30612],{"class":238},[19,167552,167553],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,167555,167557],{"id":167556},"_712-装饰器入门","7.12 装饰器入门",[19,167559,167560],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[220,167562,167564],{"className":30493,"code":167563,"language":30495,"meta":141,"style":141},"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",[30,167565,167566,167575,167584,167595,167600,167611,167615,167622,167626,167630,167635,167643,167653,167657,167661],{"__ignoreMap":141},[228,167567,167568,167570,167572],{"class":230,"line":231},[228,167569,32062],{"class":234},[228,167571,87306],{"class":2077},[228,167573,167574],{"class":238},"(func):\n",[228,167576,167577,167579,167582],{"class":230,"line":142},[228,167578,30916],{"class":234},[228,167580,167581],{"class":2077}," wrapper",[228,167583,32068],{"class":238},[228,167585,167586,167588,167590,167593],{"class":230,"line":1293},[228,167587,32566],{"class":287},[228,167589,239],{"class":238},[228,167591,167592],{"class":343},"\"函数开始执行\"",[228,167594,245],{"class":238},[228,167596,167597],{"class":230,"line":1308},[228,167598,167599],{"class":238},"        func()\n",[228,167601,167602,167604,167606,167609],{"class":230,"line":1314},[228,167603,32566],{"class":287},[228,167605,239],{"class":238},[228,167607,167608],{"class":343},"\"函数执行结束\"",[228,167610,245],{"class":238},[228,167612,167613],{"class":230,"line":1328},[228,167614,2514],{"emptyLinePlaceholder":157},[228,167616,167617,167619],{"class":230,"line":1334},[228,167618,4204],{"class":234},[228,167620,167621],{"class":238}," wrapper\n",[228,167623,167624],{"class":230,"line":1425},[228,167625,2514],{"emptyLinePlaceholder":157},[228,167627,167628],{"class":230,"line":1431},[228,167629,2514],{"emptyLinePlaceholder":157},[228,167631,167632],{"class":230,"line":1443},[228,167633,167634],{"class":2077},"@log\n",[228,167636,167637,167639,167641],{"class":230,"line":1726},[228,167638,32062],{"class":234},[228,167640,161055],{"class":2077},[228,167642,32068],{"class":238},[228,167644,167645,167647,167649,167651],{"class":230,"line":1731},[228,167646,31414],{"class":287},[228,167648,239],{"class":238},[228,167650,5959],{"class":343},[228,167652,245],{"class":238},[228,167654,167655],{"class":230,"line":1737},[228,167656,2514],{"emptyLinePlaceholder":157},[228,167658,167659],{"class":230,"line":1742},[228,167660,2514],{"emptyLinePlaceholder":157},[228,167662,167663],{"class":230,"line":1756},[228,167664,161090],{"class":238},[19,167666,158333],{},[220,167668,167670],{"className":30493,"code":167669,"language":30495,"meta":141,"style":141},"say_hello = log(say_hello)\n",[30,167671,167672],{"__ignoreMap":141},[228,167673,167674,167677,167679],{"class":230,"line":231},[228,167675,167676],{"class":238},"say_hello ",[228,167678,284],{"class":234},[228,167680,167681],{"class":238}," log(say_hello)\n",[19,167683,167684],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,167686,167688],{"id":167687},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[220,167690,167692],{"className":30493,"code":167691,"language":30495,"meta":141,"style":141},"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",[30,167693,167694,167702,167719,167729,167748,167758,167765,167769,167775,167779,167783,167787,167795,167805,167809,167813],{"__ignoreMap":141},[228,167695,167696,167698,167700],{"class":230,"line":231},[228,167697,32062],{"class":234},[228,167699,87306],{"class":2077},[228,167701,167574],{"class":238},[228,167703,167704,167706,167708,167710,167712,167715,167717],{"class":230,"line":142},[228,167705,30916],{"class":234},[228,167707,167581],{"class":2077},[228,167709,239],{"class":238},[228,167711,693],{"class":234},[228,167713,167714],{"class":238},"args, ",[228,167716,10776],{"class":234},[228,167718,166725],{"class":238},[228,167720,167721,167723,167725,167727],{"class":230,"line":1293},[228,167722,32566],{"class":287},[228,167724,239],{"class":238},[228,167726,167592],{"class":343},[228,167728,245],{"class":238},[228,167730,167731,167734,167736,167739,167741,167743,167745],{"class":230,"line":1308},[228,167732,167733],{"class":238},"        result ",[228,167735,284],{"class":234},[228,167737,167738],{"class":238}," func(",[228,167740,693],{"class":234},[228,167742,167714],{"class":238},[228,167744,10776],{"class":234},[228,167746,167747],{"class":238},"kwargs)\n",[228,167749,167750,167752,167754,167756],{"class":230,"line":1314},[228,167751,32566],{"class":287},[228,167753,239],{"class":238},[228,167755,167608],{"class":343},[228,167757,245],{"class":238},[228,167759,167760,167762],{"class":230,"line":1328},[228,167761,14867],{"class":234},[228,167763,167764],{"class":238}," result\n",[228,167766,167767],{"class":230,"line":1334},[228,167768,2514],{"emptyLinePlaceholder":157},[228,167770,167771,167773],{"class":230,"line":1425},[228,167772,4204],{"class":234},[228,167774,167621],{"class":238},[228,167776,167777],{"class":230,"line":1431},[228,167778,2514],{"emptyLinePlaceholder":157},[228,167780,167781],{"class":230,"line":1443},[228,167782,2514],{"emptyLinePlaceholder":157},[228,167784,167785],{"class":230,"line":1726},[228,167786,167634],{"class":2077},[228,167788,167789,167791,167793],{"class":230,"line":1731},[228,167790,32062],{"class":234},[228,167792,5324],{"class":2077},[228,167794,151152],{"class":238},[228,167796,167797,167799,167801,167803],{"class":230,"line":1737},[228,167798,4204],{"class":234},[228,167800,10984],{"class":238},[228,167802,719],{"class":234},[228,167804,151163],{"class":238},[228,167806,167807],{"class":230,"line":1742},[228,167808,2514],{"emptyLinePlaceholder":157},[228,167810,167811],{"class":230,"line":1756},[228,167812,2514],{"emptyLinePlaceholder":157},[228,167814,167815,167817,167819,167821,167823,167825],{"class":230,"line":1761},[228,167816,30530],{"class":287},[228,167818,166659],{"class":238},[228,167820,684],{"class":287},[228,167822,12550],{"class":238},[228,167824,938],{"class":287},[228,167826,30612],{"class":238},[19,167828,167829,167830,101133,167832,167834],{},"这个写法使用 ",[30,167831,166591],{},[30,167833,166706],{}," 接收原函数的所有参数。",[14,167836,167838],{"id":167837},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,167840,123407],{},[183,167842,167843,167846,167849],{},[186,167844,167845],{},"给定一组学生数据。",[186,167847,167848],{},"封装函数，根据传入规则筛选学生。",[186,167850,167851],{},"筛选及格、优秀、未成年学生。",[19,167853,10150],{},[220,167855,167857],{"className":30493,"code":167856,"language":30495,"meta":141,"style":141},"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",[30,167858,167859,167867,167895,167923,167951,167955,167959,167963,167973,167981,167991,167998,168003,168009,168013,168017,168041,168064,168087,168091,168098,168105],{"__ignoreMap":141},[228,167860,167861,167863,167865],{"class":230,"line":231},[228,167862,159775],{"class":238},[228,167864,284],{"class":234},[228,167866,55562],{"class":238},[228,167868,167869,167871,167873,167875,167877,167879,167881,167883,167885,167887,167889,167891,167893],{"class":230,"line":142},[228,167870,148444],{"class":238},[228,167872,62794],{"class":343},[228,167874,51552],{"class":238},[228,167876,149947],{"class":343},[228,167878,12550],{"class":238},[228,167880,69239],{"class":343},[228,167882,51552],{"class":238},[228,167884,888],{"class":287},[228,167886,12550],{"class":238},[228,167888,151531],{"class":343},[228,167890,51552],{"class":238},[228,167892,1227],{"class":287},[228,167894,5044],{"class":238},[228,167896,167897,167899,167901,167903,167905,167907,167909,167911,167913,167915,167917,167919,167921],{"class":230,"line":1293},[228,167898,148444],{"class":238},[228,167900,62794],{"class":343},[228,167902,51552],{"class":238},[228,167904,150995],{"class":343},[228,167906,12550],{"class":238},[228,167908,69239],{"class":343},[228,167910,51552],{"class":238},[228,167912,863],{"class":287},[228,167914,12550],{"class":238},[228,167916,151531],{"class":343},[228,167918,51552],{"class":238},[228,167920,1049],{"class":287},[228,167922,5044],{"class":238},[228,167924,167925,167927,167929,167931,167933,167935,167937,167939,167941,167943,167945,167947,167949],{"class":230,"line":1308},[228,167926,148444],{"class":238},[228,167928,62794],{"class":343},[228,167930,51552],{"class":238},[228,167932,159790],{"class":343},[228,167934,12550],{"class":238},[228,167936,69239],{"class":343},[228,167938,51552],{"class":238},[228,167940,913],{"class":287},[228,167942,12550],{"class":238},[228,167944,151531],{"class":343},[228,167946,51552],{"class":238},[228,167948,1120],{"class":287},[228,167950,5044],{"class":238},[228,167952,167953],{"class":230,"line":1314},[228,167954,33361],{"class":238},[228,167956,167957],{"class":230,"line":1328},[228,167958,2514],{"emptyLinePlaceholder":157},[228,167960,167961],{"class":230,"line":1334},[228,167962,2514],{"emptyLinePlaceholder":157},[228,167964,167965,167967,167970],{"class":230,"line":1425},[228,167966,32062],{"class":234},[228,167968,167969],{"class":2077}," filter_students",[228,167971,167972],{"class":238},"(students, condition):\n",[228,167974,167975,167977,167979],{"class":230,"line":1431},[228,167976,161282],{"class":238},[228,167978,284],{"class":234},[228,167980,51953],{"class":238},[228,167982,167983,167985,167987,167989],{"class":230,"line":1443},[228,167984,3315],{"class":234},[228,167986,152196],{"class":238},[228,167988,26159],{"class":234},[228,167990,152201],{"class":238},[228,167992,167993,167995],{"class":230,"line":1726},[228,167994,2611],{"class":234},[228,167996,167997],{"class":238}," condition(student):\n",[228,167999,168000],{"class":230,"line":1731},[228,168001,168002],{"class":238},"            result.append(student)\n",[228,168004,168005,168007],{"class":230,"line":1737},[228,168006,4204],{"class":234},[228,168008,167764],{"class":238},[228,168010,168011],{"class":230,"line":1742},[228,168012,2514],{"emptyLinePlaceholder":157},[228,168014,168015],{"class":230,"line":1756},[228,168016,2514],{"emptyLinePlaceholder":157},[228,168018,168019,168021,168023,168026,168028,168031,168033,168035,168037,168039],{"class":230,"line":1761},[228,168020,165760],{"class":238},[228,168022,284],{"class":234},[228,168024,168025],{"class":238}," filter_students(students, ",[228,168027,166945],{"class":234},[228,168029,168030],{"class":238}," s: s[",[228,168032,151531],{"class":343},[228,168034,4557],{"class":238},[228,168036,1824],{"class":234},[228,168038,157896],{"class":287},[228,168040,245],{"class":238},[228,168042,168043,168046,168048,168050,168052,168054,168056,168058,168060,168062],{"class":230,"line":1767},[228,168044,168045],{"class":238},"excellent ",[228,168047,284],{"class":234},[228,168049,168025],{"class":238},[228,168051,166945],{"class":234},[228,168053,168030],{"class":238},[228,168055,151531],{"class":343},[228,168057,4557],{"class":238},[228,168059,1824],{"class":234},[228,168061,157847],{"class":287},[228,168063,245],{"class":238},[228,168065,168066,168069,168071,168073,168075,168077,168079,168081,168083,168085],{"class":230,"line":1788},[228,168067,168068],{"class":238},"under_age ",[228,168070,284],{"class":234},[228,168072,168025],{"class":238},[228,168074,166945],{"class":234},[228,168076,168030],{"class":238},[228,168078,69239],{"class":343},[228,168080,4557],{"class":238},[228,168082,1148],{"class":234},[228,168084,156344],{"class":287},[228,168086,245],{"class":238},[228,168088,168089],{"class":230,"line":1793},[228,168090,2514],{"emptyLinePlaceholder":157},[228,168092,168093,168095],{"class":230,"line":1807},[228,168094,30530],{"class":287},[228,168096,168097],{"class":238},"(passed)\n",[228,168099,168100,168102],{"class":230,"line":1812},[228,168101,30530],{"class":287},[228,168103,168104],{"class":238},"(excellent)\n",[228,168106,168107,168109],{"class":230,"line":1841},[228,168108,30530],{"class":287},[228,168110,168111],{"class":238},"(under_age)\n",[14,168113,168115],{"id":168114},"_715-易错点","7.15 易错点",[183,168117,168118,168121,168129,168134,168145],{},[186,168119,168120],{},"默认参数不要写可变对象。",[186,168122,168123,168125,168126,168128],{},[30,168124,166591],{}," 是元组，",[30,168127,166706],{}," 是字典。",[186,168130,168131,168133],{},[30,168132,166945],{}," 只适合简单表达式。",[186,168135,168136,101133,168138,168140,168141,168144],{},[30,168137,74159],{},[30,168139,80166],{}," 的结果是迭代器，常用 ",[30,168142,168143],{},"list()"," 转换查看。",[186,168146,168147],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,168149,168151],{"id":168150},"_716-本章练习","7.16 本章练习",[183,168153,168154,168161,168167,168172,168177],{},[186,168155,168156,168157,168160],{},"写函数 ",[30,168158,168159],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[186,168162,168156,168163,168166],{},[30,168164,168165],{},"print_user(**kwargs)","，输出用户所有字段。",[186,168168,104481,168169,168171],{},[30,168170,166945],{}," 对学生列表按年龄排序。",[186,168173,104481,168174,168176],{},[30,168175,80166],{}," 找出成绩不及格的学生。",[186,168178,168179],{},"写一个装饰器，统计函数执行前后的提示信息。",[5241,168181,168182],{},"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":141,"searchDepth":142,"depth":142,"links":168184},[168185,168186,168187,168188,168189,168190,168194,168195,168196,168197,168202,168203,168204,168205,168206,168207],{"id":166043,"depth":142,"text":166044},{"id":166157,"depth":142,"text":166158},{"id":166246,"depth":142,"text":166247},{"id":166308,"depth":142,"text":166309},{"id":166454,"depth":142,"text":166455},{"id":166581,"depth":142,"text":166582,"children":168191},[168192,168193],{"id":166585,"depth":1293,"text":166586},{"id":166700,"depth":1293,"text":166701},{"id":166781,"depth":142,"text":166782},{"id":166939,"depth":142,"text":166940},{"id":167107,"depth":142,"text":167108},{"id":167189,"depth":142,"text":167190,"children":168198},[168199,168200,168201],{"id":167193,"depth":1293,"text":167194},{"id":167264,"depth":1293,"text":167265},{"id":167341,"depth":1293,"text":167342},{"id":167466,"depth":142,"text":167467},{"id":167556,"depth":142,"text":167557},{"id":167687,"depth":142,"text":167688},{"id":167837,"depth":142,"text":167838},{"id":168114,"depth":142,"text":168115},{"id":168150,"depth":142,"text":168151},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166035,"description":154},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168214,"title":168215,"body":168216,"description":154,"extension":155,"meta":170735,"navigation":157,"path":170736,"seo":170737,"stem":170738,"__hash__":170739},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168217,"toc":170710},[168218,168221,168225,168228,168231,168262,168266,168270,168273,168300,168304,168307,168358,168361,168376,168379,168414,168418,168420,168444,168447,168507,168511,168515,168518,168575,168578,168598,168602,168605,168668,168672,168675,168731,168738,168762,168766,168769,168832,168836,168841,168892,168895,168899,168904,168971,168974,169056,169060,169065,169116,169119,169123,169126,169129,169137,169140,169186,169189,169235,169239,169245,169289,169292,169338,169341,169381,169384,169445,169449,169452,169542,169545,169687,169690,169757,169761,169764,169767,169908,169911,169989,169992,170168,170172,170174,170185,170187,170386,170390,170634,170638,170672,170676,170707],[10,168219,168215],{"id":168220},"_8-文件操作",[14,168222,168224],{"id":168223},"_81-文件操作的意义","8.1 文件操作的意义",[19,168226,168227],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,168229,168230],{},"常见文件类型：",[183,168232,168233,168239,168245,168251,168257],{},[186,168234,168235,168238],{},[30,168236,168237],{},".txt","：普通文本。",[186,168240,168241,168244],{},[30,168242,168243],{},".csv","：表格文本。",[186,168246,168247,168250],{},[30,168248,168249],{},".json","：结构化数据。",[186,168252,168253,168256],{},[30,168254,168255],{},".log","：日志文件。",[186,168258,168259,168261],{},[30,168260,146411],{},"：Python 源代码。",[14,168263,168265],{"id":168264},"_82-路径","8.2 路径",[200,168267,168269],{"id":168268},"_821-相对路径","8.2.1 相对路径",[19,168271,168272],{},"相对当前运行目录：",[220,168274,168276],{"className":30493,"code":168275,"language":30495,"meta":141,"style":141},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[30,168277,168278],{"__ignoreMap":141},[228,168279,168280,168282,168284,168286,168288,168290,168292,168294,168296,168298],{"class":230,"line":231},[228,168281,87030],{"class":287},[228,168283,239],{"class":238},[228,168285,146855],{"class":343},[228,168287,12550],{"class":238},[228,168289,146860],{"class":343},[228,168291,12550],{"class":238},[228,168293,146865],{"class":5331},[228,168295,284],{"class":234},[228,168297,146870],{"class":343},[228,168299,245],{"class":238},[200,168301,168303],{"id":168302},"_822-绝对路径","8.2.2 绝对路径",[19,168305,168306],{},"从根目录或盘符开始：",[220,168308,168310],{"className":30493,"code":168309,"language":30495,"meta":141,"style":141},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[30,168311,168312,168335],{"__ignoreMap":141},[228,168313,168314,168316,168318,168321,168323,168325,168327,168329,168331,168333],{"class":230,"line":231},[228,168315,87030],{"class":287},[228,168317,239],{"class":238},[228,168319,168320],{"class":343},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[228,168322,12550],{"class":238},[228,168324,146860],{"class":343},[228,168326,12550],{"class":238},[228,168328,146865],{"class":5331},[228,168330,284],{"class":234},[228,168332,146870],{"class":343},[228,168334,245],{"class":238},[228,168336,168337,168339,168341,168344,168346,168348,168350,168352,168354,168356],{"class":230,"line":142},[228,168338,87030],{"class":287},[228,168340,239],{"class":238},[228,168342,168343],{"class":343},"\"D:\u002Fdata\u002Fdata.txt\"",[228,168345,12550],{"class":238},[228,168347,146860],{"class":343},[228,168349,12550],{"class":238},[228,168351,146865],{"class":5331},[228,168353,284],{"class":234},[228,168355,146870],{"class":343},[228,168357,245],{"class":238},[19,168359,168360],{},"Windows 路径建议写成：",[220,168362,168364],{"className":30493,"code":168363,"language":30495,"meta":141,"style":141},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[30,168365,168366],{"__ignoreMap":141},[228,168367,168368,168371,168373],{"class":230,"line":231},[228,168369,168370],{"class":238},"path ",[228,168372,284],{"class":234},[228,168374,168375],{"class":343}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,168377,168378],{},"或原始字符串：",[220,168380,168382],{"className":30493,"code":168381,"language":30495,"meta":141,"style":141},"path = r\"D:\\data\\data.txt\"\n",[30,168383,168384],{"__ignoreMap":141},[228,168385,168386,168388,168390,168392,168394,168397,168400,168403,168405,168407,168409,168412],{"class":230,"line":231},[228,168387,168370],{"class":238},[228,168389,284],{"class":234},[228,168391,17236],{"class":234},[228,168393,489],{"class":343},[228,168395,168396],{"class":48092},"D:",[228,168398,168399],{"class":287},"\\d",[228,168401,168402],{"class":48092},"ata",[228,168404,168399],{"class":287},[228,168406,168402],{"class":48092},[228,168408,796],{"class":287},[228,168410,168411],{"class":48092},"txt",[228,168413,25249],{"class":343},[14,168415,168417],{"id":168416},"_83-open函数","8.3 open函数",[19,168419,5296],{},[220,168421,168423],{"className":30493,"code":168422,"language":30495,"meta":141,"style":141},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[30,168424,168425],{"__ignoreMap":141},[228,168426,168427,168429,168431,168433,168436,168438,168440,168442],{"class":230,"line":231},[228,168428,45469],{"class":5331},[228,168430,13679],{"class":234},[228,168432,146850],{"class":287},[228,168434,168435],{"class":238},"(文件路径, 打开模式, ",[228,168437,146865],{"class":5331},[228,168439,284],{"class":234},[228,168441,146870],{"class":343},[228,168443,245],{"class":238},[19,168445,168446],{},"常见模式：",[376,168448,168449,168458],{},[379,168450,168451],{},[382,168452,168453,168456],{},[385,168454,168455],{},"模式",[385,168457,25985],{},[423,168459,168460,168469,168478,168487,168497],{},[382,168461,168462,168466],{},[428,168463,168464],{},[30,168465,908],{},[428,168467,168468],{},"只读，文件不存在会报错",[382,168470,168471,168475],{},[428,168472,168473],{},[30,168474,1033],{},[428,168476,168477],{},"只写，文件不存在会创建，存在会清空",[382,168479,168480,168484],{},[428,168481,168482],{},[30,168483,476],{},[428,168485,168486],{},"追加，文件不存在会创建",[382,168488,168489,168494],{},[428,168490,168491],{},[30,168492,168493],{},"rb",[428,168495,168496],{},"二进制只读",[382,168498,168499,168504],{},[428,168500,168501],{},[30,168502,168503],{},"wb",[428,168505,168506],{},"二进制只写",[14,168508,168510],{"id":168509},"_84-读取文件","8.4 读取文件",[200,168512,168514],{"id":168513},"_841-read","8.4.1 read",[19,168516,168517],{},"一次读取全部内容：",[220,168519,168521],{"className":30493,"code":168520,"language":30495,"meta":141,"style":141},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[30,168522,168523,168549,168561,168568],{"__ignoreMap":141},[228,168524,168525,168527,168529,168531,168533,168535,168537,168539,168541,168543,168545,168547],{"class":230,"line":231},[228,168526,45469],{"class":5331},[228,168528,13679],{"class":234},[228,168530,146850],{"class":287},[228,168532,239],{"class":238},[228,168534,146855],{"class":343},[228,168536,12550],{"class":238},[228,168538,146860],{"class":343},[228,168540,12550],{"class":238},[228,168542,146865],{"class":5331},[228,168544,284],{"class":234},[228,168546,146870],{"class":343},[228,168548,245],{"class":238},[228,168550,168551,168554,168556,168558],{"class":230,"line":142},[228,168552,168553],{"class":238},"content ",[228,168555,284],{"class":234},[228,168557,148212],{"class":5331},[228,168559,168560],{"class":238},".read()\n",[228,168562,168563,168565],{"class":230,"line":1293},[228,168564,30530],{"class":287},[228,168566,168567],{"class":238},"(content)\n",[228,168569,168570,168572],{"class":230,"line":1308},[228,168571,45469],{"class":5331},[228,168573,168574],{"class":238},".close()\n",[19,168576,168577],{},"可以指定读取字符数：",[220,168579,168581],{"className":30493,"code":168580,"language":30495,"meta":141,"style":141},"content = file.read(10)\n",[30,168582,168583],{"__ignoreMap":141},[228,168584,168585,168587,168589,168591,168594,168596],{"class":230,"line":231},[228,168586,168553],{"class":238},[228,168588,284],{"class":234},[228,168590,148212],{"class":5331},[228,168592,168593],{"class":238},".read(",[228,168595,684],{"class":287},[228,168597,245],{"class":238},[200,168599,168601],{"id":168600},"_842-readline","8.4.2 readline",[19,168603,168604],{},"一次读取一行：",[220,168606,168608],{"className":30493,"code":168607,"language":30495,"meta":141,"style":141},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[30,168609,168610,168636,168640,168651,168658,168662],{"__ignoreMap":141},[228,168611,168612,168614,168616,168618,168620,168622,168624,168626,168628,168630,168632,168634],{"class":230,"line":231},[228,168613,45469],{"class":5331},[228,168615,13679],{"class":234},[228,168617,146850],{"class":287},[228,168619,239],{"class":238},[228,168621,146855],{"class":343},[228,168623,12550],{"class":238},[228,168625,146860],{"class":343},[228,168627,12550],{"class":238},[228,168629,146865],{"class":5331},[228,168631,284],{"class":234},[228,168633,146870],{"class":343},[228,168635,245],{"class":238},[228,168637,168638],{"class":230,"line":142},[228,168639,2514],{"emptyLinePlaceholder":157},[228,168641,168642,168644,168646,168648],{"class":230,"line":1293},[228,168643,147311],{"class":238},[228,168645,284],{"class":234},[228,168647,148212],{"class":5331},[228,168649,168650],{"class":238},".readline()\n",[228,168652,168653,168655],{"class":230,"line":1308},[228,168654,30530],{"class":287},[228,168656,168657],{"class":238},"(line)\n",[228,168659,168660],{"class":230,"line":1314},[228,168661,2514],{"emptyLinePlaceholder":157},[228,168663,168664,168666],{"class":230,"line":1328},[228,168665,45469],{"class":5331},[228,168667,168574],{"class":238},[200,168669,168671],{"id":168670},"_843-readlines","8.4.3 readlines",[19,168673,168674],{},"读取所有行，返回列表：",[220,168676,168678],{"className":30493,"code":168677,"language":30495,"meta":141,"style":141},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[30,168679,168680,168706,168718,168725],{"__ignoreMap":141},[228,168681,168682,168684,168686,168688,168690,168692,168694,168696,168698,168700,168702,168704],{"class":230,"line":231},[228,168683,45469],{"class":5331},[228,168685,13679],{"class":234},[228,168687,146850],{"class":287},[228,168689,239],{"class":238},[228,168691,146855],{"class":343},[228,168693,12550],{"class":238},[228,168695,146860],{"class":343},[228,168697,12550],{"class":238},[228,168699,146865],{"class":5331},[228,168701,284],{"class":234},[228,168703,146870],{"class":343},[228,168705,245],{"class":238},[228,168707,168708,168711,168713,168715],{"class":230,"line":142},[228,168709,168710],{"class":238},"lines ",[228,168712,284],{"class":234},[228,168714,148212],{"class":5331},[228,168716,168717],{"class":238},".readlines()\n",[228,168719,168720,168722],{"class":230,"line":1293},[228,168721,30530],{"class":287},[228,168723,168724],{"class":238},"(lines)\n",[228,168726,168727,168729],{"class":230,"line":1308},[228,168728,45469],{"class":5331},[228,168730,168574],{"class":238},[19,168732,168733,168734,168737],{},"每一行通常带有换行符，可以用 ",[30,168735,168736],{},"strip()"," 去掉：",[220,168739,168741],{"className":30493,"code":168740,"language":30495,"meta":141,"style":141},"for line in lines:\n    print(line.strip())\n",[30,168742,168743,168755],{"__ignoreMap":141},[228,168744,168745,168747,168750,168752],{"class":230,"line":231},[228,168746,3139],{"class":234},[228,168748,168749],{"class":238}," line ",[228,168751,26159],{"class":234},[228,168753,168754],{"class":238}," lines:\n",[228,168756,168757,168759],{"class":230,"line":142},[228,168758,31414],{"class":287},[228,168760,168761],{"class":238},"(line.strip())\n",[200,168763,168765],{"id":168764},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,168767,168768],{},"推荐读取大文件时使用：",[220,168770,168772],{"className":30493,"code":168771,"language":30495,"meta":141,"style":141},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[30,168773,168774,168800,168804,168816,168822,168826],{"__ignoreMap":141},[228,168775,168776,168778,168780,168782,168784,168786,168788,168790,168792,168794,168796,168798],{"class":230,"line":231},[228,168777,45469],{"class":5331},[228,168779,13679],{"class":234},[228,168781,146850],{"class":287},[228,168783,239],{"class":238},[228,168785,146855],{"class":343},[228,168787,12550],{"class":238},[228,168789,146860],{"class":343},[228,168791,12550],{"class":238},[228,168793,146865],{"class":5331},[228,168795,284],{"class":234},[228,168797,146870],{"class":343},[228,168799,245],{"class":238},[228,168801,168802],{"class":230,"line":142},[228,168803,2514],{"emptyLinePlaceholder":157},[228,168805,168806,168808,168810,168812,168814],{"class":230,"line":1293},[228,168807,3139],{"class":234},[228,168809,168749],{"class":238},[228,168811,26159],{"class":234},[228,168813,148212],{"class":5331},[228,168815,3853],{"class":238},[228,168817,168818,168820],{"class":230,"line":1308},[228,168819,31414],{"class":287},[228,168821,168761],{"class":238},[228,168823,168824],{"class":230,"line":1314},[228,168825,2514],{"emptyLinePlaceholder":157},[228,168827,168828,168830],{"class":230,"line":1328},[228,168829,45469],{"class":5331},[228,168831,168574],{"class":238},[14,168833,168835],{"id":168834},"_85-with语句","8.5 with语句",[19,168837,168838,168840],{},[30,168839,107948],{}," 会自动关闭文件，推荐使用。",[220,168842,168844],{"className":30493,"code":168843,"language":30495,"meta":141,"style":141},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[30,168845,168846,168876,168886],{"__ignoreMap":141},[228,168847,168848,168850,168852,168854,168856,168858,168860,168862,168864,168866,168868,168870,168872,168874],{"class":230,"line":231},[228,168849,107948],{"class":234},[228,168851,146850],{"class":287},[228,168853,239],{"class":238},[228,168855,146855],{"class":343},[228,168857,12550],{"class":238},[228,168859,146860],{"class":343},[228,168861,12550],{"class":238},[228,168863,146865],{"class":5331},[228,168865,284],{"class":234},[228,168867,146870],{"class":343},[228,168869,13829],{"class":238},[228,168871,31498],{"class":234},[228,168873,148212],{"class":5331},[228,168875,3853],{"class":238},[228,168877,168878,168880,168882,168884],{"class":230,"line":142},[228,168879,146882],{"class":238},[228,168881,284],{"class":234},[228,168883,148212],{"class":5331},[228,168885,168560],{"class":238},[228,168887,168888,168890],{"class":230,"line":1293},[228,168889,31414],{"class":287},[228,168891,168567],{"class":238},[19,168893,168894],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,168896,168898],{"id":168897},"_86-写入文件","8.6 写入文件",[19,168900,168901,168903],{},[30,168902,1033],{}," 模式会清空原文件。",[220,168905,168907],{"className":30493,"code":168906,"language":30495,"meta":141,"style":141},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[30,168908,168909,168939,168956],{"__ignoreMap":141},[228,168910,168911,168913,168915,168917,168919,168921,168923,168925,168927,168929,168931,168933,168935,168937],{"class":230,"line":231},[228,168912,107948],{"class":234},[228,168914,146850],{"class":287},[228,168916,239],{"class":238},[228,168918,146855],{"class":343},[228,168920,12550],{"class":238},[228,168922,152035],{"class":343},[228,168924,12550],{"class":238},[228,168926,146865],{"class":5331},[228,168928,284],{"class":234},[228,168930,146870],{"class":343},[228,168932,13829],{"class":238},[228,168934,31498],{"class":234},[228,168936,148212],{"class":5331},[228,168938,3853],{"class":238},[228,168940,168941,168944,168947,168950,168952,168954],{"class":230,"line":142},[228,168942,168943],{"class":5331},"    file",[228,168945,168946],{"class":238},".write(",[228,168948,168949],{"class":343},"\"hello",[228,168951,156584],{"class":287},[228,168953,489],{"class":343},[228,168955,245],{"class":238},[228,168957,168958,168960,168962,168965,168967,168969],{"class":230,"line":1293},[228,168959,168943],{"class":5331},[228,168961,168946],{"class":238},[228,168963,168964],{"class":343},"\"python",[228,168966,156584],{"class":287},[228,168968,489],{"class":343},[228,168970,245],{"class":238},[19,168972,168973],{},"写入多行：",[220,168975,168977],{"className":30493,"code":168976,"language":30495,"meta":141,"style":141},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[30,168978,168979,169014,169018,169049],{"__ignoreMap":141},[228,168980,168981,168983,168985,168987,168990,168992,168994,168996,168999,169001,169003,169005,169008,169010,169012],{"class":230,"line":231},[228,168982,168710],{"class":238},[228,168984,284],{"class":234},[228,168986,52341],{"class":238},[228,168988,168989],{"class":343},"\"小明,18",[228,168991,156584],{"class":287},[228,168993,489],{"class":343},[228,168995,12550],{"class":238},[228,168997,168998],{"class":343},"\"小红,17",[228,169000,156584],{"class":287},[228,169002,489],{"class":343},[228,169004,12550],{"class":238},[228,169006,169007],{"class":343},"\"小刚,19",[228,169009,156584],{"class":287},[228,169011,489],{"class":343},[228,169013,33361],{"class":238},[228,169015,169016],{"class":230,"line":142},[228,169017,2514],{"emptyLinePlaceholder":157},[228,169019,169020,169022,169024,169026,169029,169031,169033,169035,169037,169039,169041,169043,169045,169047],{"class":230,"line":1293},[228,169021,107948],{"class":234},[228,169023,146850],{"class":287},[228,169025,239],{"class":238},[228,169027,169028],{"class":343},"\"students.txt\"",[228,169030,12550],{"class":238},[228,169032,152035],{"class":343},[228,169034,12550],{"class":238},[228,169036,146865],{"class":5331},[228,169038,284],{"class":234},[228,169040,146870],{"class":343},[228,169042,13829],{"class":238},[228,169044,31498],{"class":234},[228,169046,148212],{"class":5331},[228,169048,3853],{"class":238},[228,169050,169051,169053],{"class":230,"line":1308},[228,169052,168943],{"class":5331},[228,169054,169055],{"class":238},".writelines(lines)\n",[14,169057,169059],{"id":169058},"_87-追加文件","8.7 追加文件",[19,169061,169062,169064],{},[30,169063,476],{}," 模式不会清空原内容，而是在末尾追加。",[220,169066,169068],{"className":30493,"code":169067,"language":30495,"meta":141,"style":141},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[30,169069,169070,169101],{"__ignoreMap":141},[228,169071,169072,169074,169076,169078,169081,169083,169085,169087,169089,169091,169093,169095,169097,169099],{"class":230,"line":231},[228,169073,107948],{"class":234},[228,169075,146850],{"class":287},[228,169077,239],{"class":238},[228,169079,169080],{"class":343},"\"log.txt\"",[228,169082,12550],{"class":238},[228,169084,165384],{"class":343},[228,169086,12550],{"class":238},[228,169088,146865],{"class":5331},[228,169090,284],{"class":234},[228,169092,146870],{"class":343},[228,169094,13829],{"class":238},[228,169096,31498],{"class":234},[228,169098,148212],{"class":5331},[228,169100,3853],{"class":238},[228,169102,169103,169105,169107,169110,169112,169114],{"class":230,"line":142},[228,169104,168943],{"class":5331},[228,169106,168946],{"class":238},[228,169108,169109],{"class":343},"\"程序启动",[228,169111,156584],{"class":287},[228,169113,489],{"class":343},[228,169115,245],{"class":238},[19,169117,169118],{},"日志类文件常用追加模式。",[14,169120,169122],{"id":169121},"_88-文件编码","8.8 文件编码",[19,169124,169125],{},"编码决定文字如何保存为字节。",[19,169127,169128],{},"常见编码：",[183,169130,169131,169134],{},[186,169132,169133],{},"UTF-8：推荐。",[186,169135,169136],{},"GBK：部分 Windows 中文文件常见。",[19,169138,169139],{},"读取文件乱码时，可以尝试：",[220,169141,169143],{"className":30493,"code":169142,"language":30495,"meta":141,"style":141},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[30,169144,169145,169176],{"__ignoreMap":141},[228,169146,169147,169149,169151,169153,169155,169157,169159,169161,169163,169165,169168,169170,169172,169174],{"class":230,"line":231},[228,169148,107948],{"class":234},[228,169150,146850],{"class":287},[228,169152,239],{"class":238},[228,169154,146855],{"class":343},[228,169156,12550],{"class":238},[228,169158,146860],{"class":343},[228,169160,12550],{"class":238},[228,169162,146865],{"class":5331},[228,169164,284],{"class":234},[228,169166,169167],{"class":343},"\"gbk\"",[228,169169,13829],{"class":238},[228,169171,31498],{"class":234},[228,169173,148212],{"class":5331},[228,169175,3853],{"class":238},[228,169177,169178,169180,169182,169184],{"class":230,"line":142},[228,169179,146882],{"class":238},[228,169181,284],{"class":234},[228,169183,148212],{"class":5331},[228,169185,168560],{"class":238},[19,169187,169188],{},"写文件时建议统一 UTF-8：",[220,169190,169192],{"className":30493,"code":169191,"language":30495,"meta":141,"style":141},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[30,169193,169194,169224],{"__ignoreMap":141},[228,169195,169196,169198,169200,169202,169204,169206,169208,169210,169212,169214,169216,169218,169220,169222],{"class":230,"line":231},[228,169197,107948],{"class":234},[228,169199,146850],{"class":287},[228,169201,239],{"class":238},[228,169203,146855],{"class":343},[228,169205,12550],{"class":238},[228,169207,152035],{"class":343},[228,169209,12550],{"class":238},[228,169211,146865],{"class":5331},[228,169213,284],{"class":234},[228,169215,146870],{"class":343},[228,169217,13829],{"class":238},[228,169219,31498],{"class":234},[228,169221,148212],{"class":5331},[228,169223,3853],{"class":238},[228,169225,169226,169228,169230,169233],{"class":230,"line":142},[228,169227,168943],{"class":5331},[228,169229,168946],{"class":238},[228,169231,169232],{"class":343},"\"中文内容\"",[228,169234,245],{"class":238},[14,169236,169238],{"id":169237},"_89-pathlib","8.9 pathlib",[19,169240,169241,169244],{},[30,169242,169243],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[220,169246,169248],{"className":30493,"code":169247,"language":30495,"meta":141,"style":141},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[30,169249,169250,169260,169264,169282],{"__ignoreMap":141},[228,169251,169252,169254,169256,169258],{"class":230,"line":231},[228,169253,30852],{"class":234},[228,169255,108426],{"class":238},[228,169257,30507],{"class":234},[228,169259,108431],{"class":238},[228,169261,169262],{"class":230,"line":142},[228,169263,2514],{"emptyLinePlaceholder":157},[228,169265,169266,169268,169270,169272,169275,169277,169279],{"class":230,"line":1293},[228,169267,168370],{"class":238},[228,169269,284],{"class":234},[228,169271,108660],{"class":238},[228,169273,169274],{"class":343},"\"data\"",[228,169276,13829],{"class":238},[228,169278,822],{"class":234},[228,169280,169281],{"class":343}," \"students.txt\"\n",[228,169283,169284,169286],{"class":230,"line":1308},[228,169285,30530],{"class":287},[228,169287,169288],{"class":238},"(path)\n",[19,169290,169291],{},"创建目录：",[220,169293,169295],{"className":30493,"code":169294,"language":30495,"meta":141,"style":141},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[30,169296,169297,169307,169311,169324],{"__ignoreMap":141},[228,169298,169299,169301,169303,169305],{"class":230,"line":231},[228,169300,30852],{"class":234},[228,169302,108426],{"class":238},[228,169304,30507],{"class":234},[228,169306,108431],{"class":238},[228,169308,169309],{"class":230,"line":142},[228,169310,2514],{"emptyLinePlaceholder":157},[228,169312,169313,169316,169318,169320,169322],{"class":230,"line":1293},[228,169314,169315],{"class":238},"data_dir ",[228,169317,284],{"class":234},[228,169319,108660],{"class":238},[228,169321,169274],{"class":343},[228,169323,245],{"class":238},[228,169325,169326,169329,169332,169334,169336],{"class":230,"line":1308},[228,169327,169328],{"class":238},"data_dir.mkdir(",[228,169330,169331],{"class":5331},"exist_ok",[228,169333,284],{"class":234},[228,169335,31591],{"class":287},[228,169337,245],{"class":238},[19,169339,169340],{},"判断文件是否存在：",[220,169342,169344],{"className":30493,"code":169343,"language":30495,"meta":141,"style":141},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[30,169345,169346,169359,169363,169370],{"__ignoreMap":141},[228,169347,169348,169350,169352,169354,169357],{"class":230,"line":231},[228,169349,168370],{"class":238},[228,169351,284],{"class":234},[228,169353,108660],{"class":238},[228,169355,169356],{"class":343},"\"data\u002Fstudents.txt\"",[228,169358,245],{"class":238},[228,169360,169361],{"class":230,"line":142},[228,169362,2514],{"emptyLinePlaceholder":157},[228,169364,169365,169367],{"class":230,"line":1293},[228,169366,1645],{"class":234},[228,169368,169369],{"class":238}," path.exists():\n",[228,169371,169372,169374,169376,169379],{"class":230,"line":1308},[228,169373,31414],{"class":287},[228,169375,239],{"class":238},[228,169377,169378],{"class":343},"\"文件存在\"",[228,169380,245],{"class":238},[19,169382,169383],{},"读写文本：",[220,169385,169387],{"className":30493,"code":169386,"language":30495,"meta":141,"style":141},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[30,169388,169389,169401,169405,169422,169439],{"__ignoreMap":141},[228,169390,169391,169393,169395,169397,169399],{"class":230,"line":231},[228,169392,168370],{"class":238},[228,169394,284],{"class":234},[228,169396,108660],{"class":238},[228,169398,146855],{"class":343},[228,169400,245],{"class":238},[228,169402,169403],{"class":230,"line":142},[228,169404,2514],{"emptyLinePlaceholder":157},[228,169406,169407,169410,169412,169414,169416,169418,169420],{"class":230,"line":1293},[228,169408,169409],{"class":238},"path.write_text(",[228,169411,145935],{"class":343},[228,169413,12550],{"class":238},[228,169415,146865],{"class":5331},[228,169417,284],{"class":234},[228,169419,146870],{"class":343},[228,169421,245],{"class":238},[228,169423,169424,169426,169428,169431,169433,169435,169437],{"class":230,"line":1308},[228,169425,168553],{"class":238},[228,169427,284],{"class":234},[228,169429,169430],{"class":238}," path.read_text(",[228,169432,146865],{"class":5331},[228,169434,284],{"class":234},[228,169436,146870],{"class":343},[228,169438,245],{"class":238},[228,169440,169441,169443],{"class":230,"line":1314},[228,169442,30530],{"class":287},[228,169444,168567],{"class":238},[14,169446,169448],{"id":169447},"_810-json文件","8.10 JSON文件",[19,169450,169451],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[220,169453,169455],{"className":30493,"code":169454,"language":30495,"meta":141,"style":141},"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",[30,169456,169457,169463,169467,169475,169485,169495,169503,169507,169511,169536],{"__ignoreMap":141},[228,169458,169459,169461],{"class":230,"line":231},[228,169460,30507],{"class":234},[228,169462,147150],{"class":238},[228,169464,169465],{"class":230,"line":142},[228,169466,2514],{"emptyLinePlaceholder":157},[228,169468,169469,169471,169473],{"class":230,"line":1293},[228,169470,149540],{"class":238},[228,169472,284],{"class":234},[228,169474,15687],{"class":238},[228,169476,169477,169479,169481,169483],{"class":230,"line":1308},[228,169478,147079],{"class":343},[228,169480,51552],{"class":238},[228,169482,149947],{"class":343},[228,169484,31581],{"class":238},[228,169486,169487,169489,169491,169493],{"class":230,"line":1314},[228,169488,164596],{"class":343},[228,169490,51552],{"class":238},[228,169492,888],{"class":287},[228,169494,31581],{"class":238},[228,169496,169497,169499,169501],{"class":230,"line":1328},[228,169498,164607],{"class":343},[228,169500,51552],{"class":238},[228,169502,164612],{"class":287},[228,169504,169505],{"class":230,"line":1334},[228,169506,1679],{"class":238},[228,169508,169509],{"class":230,"line":1425},[228,169510,2514],{"emptyLinePlaceholder":157},[228,169512,169513,169515,169517,169520,169522,169524,169526,169528,169530,169532,169534],{"class":230,"line":1431},[228,169514,156503],{"class":238},[228,169516,284],{"class":234},[228,169518,169519],{"class":238}," json.dumps(student, ",[228,169521,147196],{"class":5331},[228,169523,284],{"class":234},[228,169525,34102],{"class":287},[228,169527,12550],{"class":238},[228,169529,152071],{"class":5331},[228,169531,284],{"class":234},[228,169533,316],{"class":287},[228,169535,245],{"class":238},[228,169537,169538,169540],{"class":230,"line":1443},[228,169539,30530],{"class":287},[228,169541,164130],{"class":238},[19,169543,169544],{},"写入 JSON 文件：",[220,169546,169548],{"className":30493,"code":169547,"language":30495,"meta":141,"style":141},"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",[30,169549,169550,169556,169560,169568,169596,169624,169628,169632,169662],{"__ignoreMap":141},[228,169551,169552,169554],{"class":230,"line":231},[228,169553,30507],{"class":234},[228,169555,147150],{"class":238},[228,169557,169558],{"class":230,"line":142},[228,169559,2514],{"emptyLinePlaceholder":157},[228,169561,169562,169564,169566],{"class":230,"line":1293},[228,169563,159775],{"class":238},[228,169565,284],{"class":234},[228,169567,55562],{"class":238},[228,169569,169570,169572,169574,169576,169578,169580,169582,169584,169586,169588,169590,169592,169594],{"class":230,"line":1308},[228,169571,148444],{"class":238},[228,169573,62794],{"class":343},[228,169575,51552],{"class":238},[228,169577,149947],{"class":343},[228,169579,12550],{"class":238},[228,169581,69239],{"class":343},[228,169583,51552],{"class":238},[228,169585,888],{"class":287},[228,169587,12550],{"class":238},[228,169589,151531],{"class":343},[228,169591,51552],{"class":238},[228,169593,1227],{"class":287},[228,169595,5044],{"class":238},[228,169597,169598,169600,169602,169604,169606,169608,169610,169612,169614,169616,169618,169620,169622],{"class":230,"line":1314},[228,169599,148444],{"class":238},[228,169601,62794],{"class":343},[228,169603,51552],{"class":238},[228,169605,150995],{"class":343},[228,169607,12550],{"class":238},[228,169609,69239],{"class":343},[228,169611,51552],{"class":238},[228,169613,863],{"class":287},[228,169615,12550],{"class":238},[228,169617,151531],{"class":343},[228,169619,51552],{"class":238},[228,169621,1049],{"class":287},[228,169623,5044],{"class":238},[228,169625,169626],{"class":230,"line":1328},[228,169627,33361],{"class":238},[228,169629,169630],{"class":230,"line":1334},[228,169631,2514],{"emptyLinePlaceholder":157},[228,169633,169634,169636,169638,169640,169642,169644,169646,169648,169650,169652,169654,169656,169658,169660],{"class":230,"line":1425},[228,169635,107948],{"class":234},[228,169637,146850],{"class":287},[228,169639,239],{"class":238},[228,169641,151890],{"class":343},[228,169643,12550],{"class":238},[228,169645,152035],{"class":343},[228,169647,12550],{"class":238},[228,169649,146865],{"class":5331},[228,169651,284],{"class":234},[228,169653,146870],{"class":343},[228,169655,13829],{"class":238},[228,169657,31498],{"class":234},[228,169659,148212],{"class":5331},[228,169661,3853],{"class":238},[228,169663,169664,169667,169669,169671,169673,169675,169677,169679,169681,169683,169685],{"class":230,"line":1431},[228,169665,169666],{"class":238},"    json.dump(students, ",[228,169668,45469],{"class":5331},[228,169670,12550],{"class":238},[228,169672,147196],{"class":5331},[228,169674,284],{"class":234},[228,169676,34102],{"class":287},[228,169678,12550],{"class":238},[228,169680,152071],{"class":5331},[228,169682,284],{"class":234},[228,169684,316],{"class":287},[228,169686,245],{"class":238},[19,169688,169689],{},"读取 JSON 文件：",[220,169691,169693],{"className":30493,"code":169692,"language":30495,"meta":141,"style":141},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[30,169694,169695,169701,169705,169735,169747,169751],{"__ignoreMap":141},[228,169696,169697,169699],{"class":230,"line":231},[228,169698,30507],{"class":234},[228,169700,147150],{"class":238},[228,169702,169703],{"class":230,"line":142},[228,169704,2514],{"emptyLinePlaceholder":157},[228,169706,169707,169709,169711,169713,169715,169717,169719,169721,169723,169725,169727,169729,169731,169733],{"class":230,"line":1293},[228,169708,107948],{"class":234},[228,169710,146850],{"class":287},[228,169712,239],{"class":238},[228,169714,151890],{"class":343},[228,169716,12550],{"class":238},[228,169718,146860],{"class":343},[228,169720,12550],{"class":238},[228,169722,146865],{"class":5331},[228,169724,284],{"class":234},[228,169726,146870],{"class":343},[228,169728,13829],{"class":238},[228,169730,31498],{"class":234},[228,169732,148212],{"class":5331},[228,169734,3853],{"class":238},[228,169736,169737,169739,169741,169743,169745],{"class":230,"line":1308},[228,169738,153096],{"class":238},[228,169740,284],{"class":234},[228,169742,148223],{"class":238},[228,169744,45469],{"class":5331},[228,169746,245],{"class":238},[228,169748,169749],{"class":230,"line":1314},[228,169750,2514],{"emptyLinePlaceholder":157},[228,169752,169753,169755],{"class":230,"line":1328},[228,169754,30530],{"class":287},[228,169756,165054],{"class":238},[14,169758,169760],{"id":169759},"_811-csv文件","8.11 CSV文件",[19,169762,169763],{},"CSV 是逗号分隔值，常用于表格数据。",[19,169765,169766],{},"写入 CSV：",[220,169768,169770],{"className":30493,"code":169769,"language":30495,"meta":141,"style":141},"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",[30,169771,169772,169779,169783,169791,169809,169825,169841,169845,169849,169889,169903],{"__ignoreMap":141},[228,169773,169774,169776],{"class":230,"line":231},[228,169775,30507],{"class":234},[228,169777,169778],{"class":238}," csv\n",[228,169780,169781],{"class":230,"line":142},[228,169782,2514],{"emptyLinePlaceholder":157},[228,169784,169785,169787,169789],{"class":230,"line":1293},[228,169786,159775],{"class":238},[228,169788,284],{"class":234},[228,169790,55562],{"class":238},[228,169792,169793,169796,169798,169800,169802,169804,169807],{"class":230,"line":1308},[228,169794,169795],{"class":238},"    [",[228,169797,73214],{"class":343},[228,169799,12550],{"class":238},[228,169801,73247],{"class":343},[228,169803,12550],{"class":238},[228,169805,169806],{"class":343},"\"成绩\"",[228,169808,87951],{"class":238},[228,169810,169811,169813,169815,169817,169819,169821,169823],{"class":230,"line":1314},[228,169812,169795],{"class":238},[228,169814,149947],{"class":343},[228,169816,12550],{"class":238},[228,169818,888],{"class":287},[228,169820,12550],{"class":238},[228,169822,1227],{"class":287},[228,169824,87951],{"class":238},[228,169826,169827,169829,169831,169833,169835,169837,169839],{"class":230,"line":1328},[228,169828,169795],{"class":238},[228,169830,150995],{"class":343},[228,169832,12550],{"class":238},[228,169834,863],{"class":287},[228,169836,12550],{"class":238},[228,169838,1049],{"class":287},[228,169840,87951],{"class":238},[228,169842,169843],{"class":230,"line":1334},[228,169844,33361],{"class":238},[228,169846,169847],{"class":230,"line":1425},[228,169848,2514],{"emptyLinePlaceholder":157},[228,169850,169851,169853,169855,169857,169860,169862,169864,169866,169868,169870,169872,169874,169877,169879,169881,169883,169885,169887],{"class":230,"line":1431},[228,169852,107948],{"class":234},[228,169854,146850],{"class":287},[228,169856,239],{"class":238},[228,169858,169859],{"class":343},"\"students.csv\"",[228,169861,12550],{"class":238},[228,169863,152035],{"class":343},[228,169865,12550],{"class":238},[228,169867,146865],{"class":5331},[228,169869,284],{"class":234},[228,169871,146870],{"class":343},[228,169873,12550],{"class":238},[228,169875,169876],{"class":5331},"newline",[228,169878,284],{"class":234},[228,169880,7767],{"class":343},[228,169882,13829],{"class":238},[228,169884,31498],{"class":234},[228,169886,148212],{"class":5331},[228,169888,3853],{"class":238},[228,169890,169891,169894,169896,169899,169901],{"class":230,"line":1443},[228,169892,169893],{"class":238},"    writer ",[228,169895,284],{"class":234},[228,169897,169898],{"class":238}," csv.writer(",[228,169900,45469],{"class":5331},[228,169902,245],{"class":238},[228,169904,169905],{"class":230,"line":1726},[228,169906,169907],{"class":238},"    writer.writerows(students)\n",[19,169909,169910],{},"读取 CSV：",[220,169912,169914],{"className":30493,"code":169913,"language":30495,"meta":141,"style":141},"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",[30,169915,169916,169922,169926,169956,169970,169982],{"__ignoreMap":141},[228,169917,169918,169920],{"class":230,"line":231},[228,169919,30507],{"class":234},[228,169921,169778],{"class":238},[228,169923,169924],{"class":230,"line":142},[228,169925,2514],{"emptyLinePlaceholder":157},[228,169927,169928,169930,169932,169934,169936,169938,169940,169942,169944,169946,169948,169950,169952,169954],{"class":230,"line":1293},[228,169929,107948],{"class":234},[228,169931,146850],{"class":287},[228,169933,239],{"class":238},[228,169935,169859],{"class":343},[228,169937,12550],{"class":238},[228,169939,146860],{"class":343},[228,169941,12550],{"class":238},[228,169943,146865],{"class":5331},[228,169945,284],{"class":234},[228,169947,146870],{"class":343},[228,169949,13829],{"class":238},[228,169951,31498],{"class":234},[228,169953,148212],{"class":5331},[228,169955,3853],{"class":238},[228,169957,169958,169961,169963,169966,169968],{"class":230,"line":1308},[228,169959,169960],{"class":238},"    reader ",[228,169962,284],{"class":234},[228,169964,169965],{"class":238}," csv.reader(",[228,169967,45469],{"class":5331},[228,169969,245],{"class":238},[228,169971,169972,169974,169977,169979],{"class":230,"line":1314},[228,169973,3315],{"class":234},[228,169975,169976],{"class":238}," row ",[228,169978,26159],{"class":234},[228,169980,169981],{"class":238}," reader:\n",[228,169983,169984,169986],{"class":230,"line":1328},[228,169985,32566],{"class":287},[228,169987,169988],{"class":238},"(row)\n",[19,169990,169991],{},"使用字典写入：",[220,169993,169995],{"className":30493,"code":169994,"language":30495,"meta":141,"style":141},"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",[30,169996,169997,170003,170007,170015,170043,170071,170075,170079,170117,170138,170159,170164],{"__ignoreMap":141},[228,169998,169999,170001],{"class":230,"line":231},[228,170000,30507],{"class":234},[228,170002,169778],{"class":238},[228,170004,170005],{"class":230,"line":142},[228,170006,2514],{"emptyLinePlaceholder":157},[228,170008,170009,170011,170013],{"class":230,"line":1293},[228,170010,159775],{"class":238},[228,170012,284],{"class":234},[228,170014,55562],{"class":238},[228,170016,170017,170019,170021,170023,170025,170027,170029,170031,170033,170035,170037,170039,170041],{"class":230,"line":1308},[228,170018,148444],{"class":238},[228,170020,62794],{"class":343},[228,170022,51552],{"class":238},[228,170024,149947],{"class":343},[228,170026,12550],{"class":238},[228,170028,69239],{"class":343},[228,170030,51552],{"class":238},[228,170032,888],{"class":287},[228,170034,12550],{"class":238},[228,170036,151531],{"class":343},[228,170038,51552],{"class":238},[228,170040,1227],{"class":287},[228,170042,5044],{"class":238},[228,170044,170045,170047,170049,170051,170053,170055,170057,170059,170061,170063,170065,170067,170069],{"class":230,"line":1314},[228,170046,148444],{"class":238},[228,170048,62794],{"class":343},[228,170050,51552],{"class":238},[228,170052,150995],{"class":343},[228,170054,12550],{"class":238},[228,170056,69239],{"class":343},[228,170058,51552],{"class":238},[228,170060,863],{"class":287},[228,170062,12550],{"class":238},[228,170064,151531],{"class":343},[228,170066,51552],{"class":238},[228,170068,1049],{"class":287},[228,170070,5044],{"class":238},[228,170072,170073],{"class":230,"line":1328},[228,170074,33361],{"class":238},[228,170076,170077],{"class":230,"line":1334},[228,170078,2514],{"emptyLinePlaceholder":157},[228,170080,170081,170083,170085,170087,170089,170091,170093,170095,170097,170099,170101,170103,170105,170107,170109,170111,170113,170115],{"class":230,"line":1425},[228,170082,107948],{"class":234},[228,170084,146850],{"class":287},[228,170086,239],{"class":238},[228,170088,169859],{"class":343},[228,170090,12550],{"class":238},[228,170092,152035],{"class":343},[228,170094,12550],{"class":238},[228,170096,146865],{"class":5331},[228,170098,284],{"class":234},[228,170100,146870],{"class":343},[228,170102,12550],{"class":238},[228,170104,169876],{"class":5331},[228,170106,284],{"class":234},[228,170108,7767],{"class":343},[228,170110,13829],{"class":238},[228,170112,31498],{"class":234},[228,170114,148212],{"class":5331},[228,170116,3853],{"class":238},[228,170118,170119,170122,170124,170126,170128,170130,170132,170134,170136],{"class":230,"line":1431},[228,170120,170121],{"class":238},"    fieldnames ",[228,170123,284],{"class":234},[228,170125,52341],{"class":238},[228,170127,62794],{"class":343},[228,170129,12550],{"class":238},[228,170131,69239],{"class":343},[228,170133,12550],{"class":238},[228,170135,151531],{"class":343},[228,170137,33361],{"class":238},[228,170139,170140,170142,170144,170147,170149,170151,170154,170156],{"class":230,"line":1443},[228,170141,169893],{"class":238},[228,170143,284],{"class":234},[228,170145,170146],{"class":238}," csv.DictWriter(",[228,170148,45469],{"class":5331},[228,170150,12550],{"class":238},[228,170152,170153],{"class":5331},"fieldnames",[228,170155,284],{"class":234},[228,170157,170158],{"class":238},"fieldnames)\n",[228,170160,170161],{"class":230,"line":1726},[228,170162,170163],{"class":238},"    writer.writeheader()\n",[228,170165,170166],{"class":230,"line":1731},[228,170167,169907],{"class":238},[14,170169,170171],{"id":170170},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,170173,123407],{},[183,170175,170176,170179,170182],{},[186,170177,170178],{},"读取文本文件。",[186,170180,170181],{},"统计每个单词出现次数。",[186,170183,170184],{},"输出出现次数最多的前 10 个单词。",[19,170186,10150],{},[220,170188,170190],{"className":30493,"code":170189,"language":30495,"meta":141,"style":141},"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",[30,170191,170192,170202,170206,170219,170235,170239,170249,170258,170262,170274,170294,170303,170307,170325,170329,170359,170363,170379],{"__ignoreMap":141},[228,170193,170194,170196,170198,170200],{"class":230,"line":231},[228,170195,30852],{"class":234},[228,170197,108426],{"class":238},[228,170199,30507],{"class":234},[228,170201,108431],{"class":238},[228,170203,170204],{"class":230,"line":142},[228,170205,2514],{"emptyLinePlaceholder":157},[228,170207,170208,170210,170212,170214,170217],{"class":230,"line":1293},[228,170209,168370],{"class":238},[228,170211,284],{"class":234},[228,170213,108660],{"class":238},[228,170215,170216],{"class":343},"\"article.txt\"",[228,170218,245],{"class":238},[228,170220,170221,170223,170225,170227,170229,170231,170233],{"class":230,"line":1308},[228,170222,168553],{"class":238},[228,170224,284],{"class":234},[228,170226,169430],{"class":238},[228,170228,146865],{"class":5331},[228,170230,284],{"class":234},[228,170232,146870],{"class":343},[228,170234,245],{"class":238},[228,170236,170237],{"class":230,"line":1314},[228,170238,2514],{"emptyLinePlaceholder":157},[228,170240,170241,170244,170246],{"class":230,"line":1328},[228,170242,170243],{"class":238},"words ",[228,170245,284],{"class":234},[228,170247,170248],{"class":238}," content.lower().split()\n",[228,170250,170251,170254,170256],{"class":230,"line":1334},[228,170252,170253],{"class":238},"counter ",[228,170255,284],{"class":234},[228,170257,87983],{"class":238},[228,170259,170260],{"class":230,"line":1425},[228,170261,2514],{"emptyLinePlaceholder":157},[228,170263,170264,170266,170269,170271],{"class":230,"line":1431},[228,170265,3139],{"class":234},[228,170267,170268],{"class":238}," word ",[228,170270,26159],{"class":234},[228,170272,170273],{"class":238}," words:\n",[228,170275,170276,170279,170281,170284,170287,170289,170292],{"class":230,"line":1443},[228,170277,170278],{"class":238},"    word ",[228,170280,284],{"class":234},[228,170282,170283],{"class":238}," word.strip(",[228,170285,170286],{"class":343},"\".,!?;:",[228,170288,156554],{"class":287},[228,170290,170291],{"class":343},"'()[]\"",[228,170293,245],{"class":238},[228,170295,170296,170298,170300],{"class":230,"line":1726},[228,170297,3215],{"class":234},[228,170299,39045],{"class":234},[228,170301,170302],{"class":238}," word:\n",[228,170304,170305],{"class":230,"line":1731},[228,170306,148571],{"class":234},[228,170308,170309,170312,170314,170317,170319,170321,170323],{"class":230,"line":1737},[228,170310,170311],{"class":238},"    counter[word] ",[228,170313,284],{"class":234},[228,170315,170316],{"class":238}," counter.get(word, ",[228,170318,430],{"class":287},[228,170320,13829],{"class":238},[228,170322,719],{"class":234},[228,170324,55814],{"class":287},[228,170326,170327],{"class":230,"line":1742},[228,170328,2514],{"emptyLinePlaceholder":157},[228,170330,170331,170334,170336,170338,170341,170343,170345,170347,170349,170351,170353,170355,170357],{"class":230,"line":1756},[228,170332,170333],{"class":238},"items ",[228,170335,284],{"class":234},[228,170337,163663],{"class":287},[228,170339,170340],{"class":238},"(counter.items(), ",[228,170342,154005],{"class":5331},[228,170344,154008],{"class":234},[228,170346,154011],{"class":238},[228,170348,456],{"class":287},[228,170350,112317],{"class":238},[228,170352,163587],{"class":5331},[228,170354,284],{"class":234},[228,170356,31591],{"class":287},[228,170358,245],{"class":238},[228,170360,170361],{"class":230,"line":1761},[228,170362,2514],{"emptyLinePlaceholder":157},[228,170364,170365,170367,170370,170372,170375,170377],{"class":230,"line":1767},[228,170366,3139],{"class":234},[228,170368,170369],{"class":238}," word, count ",[228,170371,26159],{"class":234},[228,170373,170374],{"class":238}," items[:",[228,170376,684],{"class":287},[228,170378,165814],{"class":238},[228,170380,170381,170383],{"class":230,"line":1788},[228,170382,31414],{"class":287},[228,170384,170385],{"class":238},"(word, count)\n",[14,170387,170389],{"id":170388},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[220,170391,170393],{"className":30493,"code":170392,"language":30495,"meta":141,"style":141},"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",[30,170394,170395,170401,170411,170415,170427,170431,170435,170443,170453,170459,170463,170493,170503,170507,170511,170519,170549,170573,170577,170581,170589,170618,170623],{"__ignoreMap":141},[228,170396,170397,170399],{"class":230,"line":231},[228,170398,30507],{"class":234},[228,170400,147150],{"class":238},[228,170402,170403,170405,170407,170409],{"class":230,"line":142},[228,170404,30852],{"class":234},[228,170406,108426],{"class":238},[228,170408,30507],{"class":234},[228,170410,108431],{"class":238},[228,170412,170413],{"class":230,"line":1293},[228,170414,2514],{"emptyLinePlaceholder":157},[228,170416,170417,170419,170421,170423,170425],{"class":230,"line":1308},[228,170418,151883],{"class":287},[228,170420,13679],{"class":234},[228,170422,108660],{"class":238},[228,170424,151890],{"class":343},[228,170426,245],{"class":238},[228,170428,170429],{"class":230,"line":1314},[228,170430,2514],{"emptyLinePlaceholder":157},[228,170432,170433],{"class":230,"line":1328},[228,170434,2514],{"emptyLinePlaceholder":157},[228,170436,170437,170439,170441],{"class":230,"line":1334},[228,170438,32062],{"class":234},[228,170440,151907],{"class":2077},[228,170442,32068],{"class":238},[228,170444,170445,170447,170449,170451],{"class":230,"line":1425},[228,170446,3215],{"class":234},[228,170448,39045],{"class":234},[228,170450,151918],{"class":287},[228,170452,151921],{"class":238},[228,170454,170455,170457],{"class":230,"line":1431},[228,170456,14867],{"class":234},[228,170458,51953],{"class":238},[228,170460,170461],{"class":230,"line":1443},[228,170462,2514],{"emptyLinePlaceholder":157},[228,170464,170465,170467,170469,170471,170473,170475,170477,170479,170481,170483,170485,170487,170489,170491],{"class":230,"line":1726},[228,170466,34293],{"class":234},[228,170468,146850],{"class":287},[228,170470,239],{"class":238},[228,170472,151883],{"class":287},[228,170474,12550],{"class":238},[228,170476,146860],{"class":343},[228,170478,12550],{"class":238},[228,170480,146865],{"class":5331},[228,170482,284],{"class":234},[228,170484,146870],{"class":343},[228,170486,13829],{"class":238},[228,170488,31498],{"class":234},[228,170490,148212],{"class":5331},[228,170492,3853],{"class":238},[228,170494,170495,170497,170499,170501],{"class":230,"line":1731},[228,170496,14867],{"class":234},[228,170498,148223],{"class":238},[228,170500,45469],{"class":5331},[228,170502,245],{"class":238},[228,170504,170505],{"class":230,"line":1737},[228,170506,2514],{"emptyLinePlaceholder":157},[228,170508,170509],{"class":230,"line":1742},[228,170510,2514],{"emptyLinePlaceholder":157},[228,170512,170513,170515,170517],{"class":230,"line":1756},[228,170514,32062],{"class":234},[228,170516,152017],{"class":2077},[228,170518,152020],{"class":238},[228,170520,170521,170523,170525,170527,170529,170531,170533,170535,170537,170539,170541,170543,170545,170547],{"class":230,"line":1761},[228,170522,34293],{"class":234},[228,170524,146850],{"class":287},[228,170526,239],{"class":238},[228,170528,151883],{"class":287},[228,170530,12550],{"class":238},[228,170532,152035],{"class":343},[228,170534,12550],{"class":238},[228,170536,146865],{"class":5331},[228,170538,284],{"class":234},[228,170540,146870],{"class":343},[228,170542,13829],{"class":238},[228,170544,31498],{"class":234},[228,170546,148212],{"class":5331},[228,170548,3853],{"class":238},[228,170550,170551,170553,170555,170557,170559,170561,170563,170565,170567,170569,170571],{"class":230,"line":1767},[228,170552,152056],{"class":238},[228,170554,45469],{"class":5331},[228,170556,12550],{"class":238},[228,170558,147196],{"class":5331},[228,170560,284],{"class":234},[228,170562,34102],{"class":287},[228,170564,12550],{"class":238},[228,170566,152071],{"class":5331},[228,170568,284],{"class":234},[228,170570,316],{"class":287},[228,170572,245],{"class":238},[228,170574,170575],{"class":230,"line":1788},[228,170576,2514],{"emptyLinePlaceholder":157},[228,170578,170579],{"class":230,"line":1793},[228,170580,2514],{"emptyLinePlaceholder":157},[228,170582,170583,170585,170587],{"class":230,"line":1807},[228,170584,159775],{"class":238},[228,170586,284],{"class":234},[228,170588,153101],{"class":238},[228,170590,170591,170594,170596,170598,170600,170602,170604,170606,170608,170610,170612,170614,170616],{"class":230,"line":1812},[228,170592,170593],{"class":238},"students.append({",[228,170595,62794],{"class":343},[228,170597,51552],{"class":238},[228,170599,149947],{"class":343},[228,170601,12550],{"class":238},[228,170603,69239],{"class":343},[228,170605,51552],{"class":238},[228,170607,888],{"class":287},[228,170609,12550],{"class":238},[228,170611,151531],{"class":343},[228,170613,51552],{"class":238},[228,170615,1227],{"class":287},[228,170617,165211],{"class":238},[228,170619,170620],{"class":230,"line":1841},[228,170621,170622],{"class":238},"save_students(students)\n",[228,170624,170625,170627,170629,170632],{"class":230,"line":1846},[228,170626,30530],{"class":287},[228,170628,239],{"class":238},[228,170630,170631],{"class":343},"\"保存成功\"",[228,170633,245],{"class":238},[14,170635,170637],{"id":170636},"_814-易错点","8.14 易错点",[183,170639,170640,170644,170650,170655,170662,170669],{},[186,170641,170642,168903],{},[30,170643,1033],{},[186,170645,170646,170647,78],{},"读写中文要指定 ",[30,170648,170649],{},"encoding=\"utf-8\"",[186,170651,170652,170653,78],{},"打开文件后要关闭，推荐使用 ",[30,170654,107948],{},[186,170656,170657,170658,170661],{},"读取大文件不要直接 ",[30,170659,170660],{},"read()"," 全部内容。",[186,170663,170664,170665,170668],{},"Windows 写 CSV 时建议加 ",[30,170666,170667],{},"newline=\"\"","，避免空行。",[186,170670,170671],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,170673,170675],{"id":170674},"_815-本章练习","8.15 本章练习",[183,170677,170678,170685,170690,170693,170696],{},[186,170679,170680,170681,170684],{},"写入一个 ",[30,170682,170683],{},"students.txt","，每行保存一个学生姓名。",[186,170686,104470,170687,170689],{},[30,170688,170683],{}," 并输出所有学生。",[186,170691,170692],{},"把学生列表保存为 JSON 文件。",[186,170694,170695],{},"从 JSON 文件读取学生数据，计算平均分。",[186,170697,170698,170699,170702,170703,170706],{},"写一个日志函数 ",[30,170700,170701],{},"write_log(message)","，每次调用向 ",[30,170704,170705],{},"app.log"," 追加一行。",[5241,170708,170709],{},"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":141,"searchDepth":142,"depth":142,"links":170711},[170712,170713,170717,170718,170724,170725,170726,170727,170728,170729,170730,170731,170732,170733,170734],{"id":168223,"depth":142,"text":168224},{"id":168264,"depth":142,"text":168265,"children":170714},[170715,170716],{"id":168268,"depth":1293,"text":168269},{"id":168302,"depth":1293,"text":168303},{"id":168416,"depth":142,"text":168417},{"id":168509,"depth":142,"text":168510,"children":170719},[170720,170721,170722,170723],{"id":168513,"depth":1293,"text":168514},{"id":168600,"depth":1293,"text":168601},{"id":168670,"depth":1293,"text":168671},{"id":168764,"depth":1293,"text":168765},{"id":168834,"depth":142,"text":168835},{"id":168897,"depth":142,"text":168898},{"id":169058,"depth":142,"text":169059},{"id":169121,"depth":142,"text":169122},{"id":169237,"depth":142,"text":169238},{"id":169447,"depth":142,"text":169448},{"id":169759,"depth":142,"text":169760},{"id":170170,"depth":142,"text":170171},{"id":170388,"depth":142,"text":170389},{"id":170636,"depth":142,"text":170637},{"id":170674,"depth":142,"text":170675},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168215,"description":154},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170741,"title":170742,"body":170743,"description":154,"extension":155,"meta":172929,"navigation":157,"path":172930,"seo":172931,"stem":172932,"__hash__":172933},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170744,"toc":172896},[170745,170748,170752,170755,170758,170850,170852,170871,170876,170880,170883,170886,170915,170922,170925,170929,170932,170961,170963,171015,171021,171074,171078,171176,171179,171246,171250,171307,171309,171315,171319,171324,171330,171421,171426,171430,171433,171511,171514,171552,171556,171674,171677,171681,171684,171729,171732,171736,171741,171747,171797,171800,171831,171835,171839,171869,171873,171908,171912,171947,171987,171991,172007,172010,172014,172018,172097,172101,172142,172146,172201,172205,172239,172243,172273,172282,172289,172295,172352,172355,172363,172366,172370,172377,172380,172386,172389,172406,172411,172415,172421,172434,172437,172474,172477,172488,172491,172505,172508,172522,172526,172533,172566,172569,172571,172577,172580,172584,172586,172592,172597,172770,172774,172837,172841,172865,172869,172893],[10,170746,170742],{"id":170747},"_9-异常模块与包",[14,170749,170751],{"id":170750},"_91-什么是异常","9.1 什么是异常",[19,170753,170754],{},"异常是程序运行过程中出现的错误。",[19,170756,170757],{},"常见异常：",[376,170759,170760,170769],{},[379,170761,170762],{},[382,170763,170764,170767],{},[385,170765,170766],{},"异常",[385,170768,25985],{},[423,170770,170771,170781,170791,170800,170810,170820,170830,170840],{},[382,170772,170773,170778],{},[428,170774,170775],{},[30,170776,170777],{},"NameError",[428,170779,170780],{},"使用了未定义变量",[382,170782,170783,170788],{},[428,170784,170785],{},[30,170786,170787],{},"TypeError",[428,170789,170790],{},"类型不匹配",[382,170792,170793,170797],{},[428,170794,170795],{},[30,170796,154893],{},[428,170798,170799],{},"值不合法",[382,170801,170802,170807],{},[428,170803,170804],{},[30,170805,170806],{},"IndexError",[428,170808,170809],{},"列表索引越界",[382,170811,170812,170817],{},[428,170813,170814],{},[30,170815,170816],{},"KeyError",[428,170818,170819],{},"字典 key 不存在",[382,170821,170822,170827],{},[428,170823,170824],{},[30,170825,170826],{},"FileNotFoundError",[428,170828,170829],{},"文件不存在",[382,170831,170832,170837],{},[428,170833,170834],{},[30,170835,170836],{},"ZeroDivisionError",[428,170838,170839],{},"除数为 0",[382,170841,170842,170847],{},[428,170843,170844],{},[30,170845,170846],{},"ImportError",[428,170848,170849],{},"导入失败",[19,170851,15250],{},[220,170853,170855],{"className":30493,"code":170854,"language":30495,"meta":141,"style":141},"num = int(\"abc\")\n",[30,170856,170857],{"__ignoreMap":141},[228,170858,170859,170861,170863,170865,170867,170869],{"class":230,"line":231},[228,170860,155846],{"class":238},[228,170862,284],{"class":234},[228,170864,2496],{"class":287},[228,170866,239],{"class":238},[228,170868,155939],{"class":343},[228,170870,245],{"class":238},[19,170872,170873,170874,78],{},"会触发 ",[30,170875,154893],{},[14,170877,170879],{"id":170878},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,170881,170882],{},"如果不处理异常，程序会直接终止。",[19,170884,170885],{},"例如用户输入年龄：",[220,170887,170889],{"className":30493,"code":170888,"language":30495,"meta":141,"style":141},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[30,170890,170891,170909],{"__ignoreMap":141},[228,170892,170893,170895,170897,170899,170901,170903,170905,170907],{"class":230,"line":231},[228,170894,146605],{"class":238},[228,170896,284],{"class":234},[228,170898,2496],{"class":287},[228,170900,239],{"class":238},[228,170902,53936],{"class":287},[228,170904,239],{"class":238},[228,170906,152453],{"class":343},[228,170908,30612],{"class":238},[228,170910,170911,170913],{"class":230,"line":142},[228,170912,30530],{"class":287},[228,170914,155820],{"class":238},[19,170916,170917,170918,170921],{},"用户输入 ",[30,170919,170920],{},"abc","，程序就会报错退出。",[19,170923,170924],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,170926,170928],{"id":170927},"_93-try-except","9.3 try except",[19,170930,170931],{},"基础语法：",[220,170933,170935],{"className":30493,"code":170934,"language":30495,"meta":141,"style":141},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[30,170936,170937,170944,170949,170956],{"__ignoreMap":141},[228,170938,170939,170942],{"class":230,"line":231},[228,170940,170941],{"class":234},"try",[228,170943,3853],{"class":238},[228,170945,170946],{"class":230,"line":142},[228,170947,170948],{"class":238},"    可能出错的代码\n",[228,170950,170951,170954],{"class":230,"line":1293},[228,170952,170953],{"class":234},"except",[228,170955,3853],{"class":238},[228,170957,170958],{"class":230,"line":1308},[228,170959,170960],{"class":238},"    出错后的处理代码\n",[19,170962,15250],{},[220,170964,170966],{"className":30493,"code":170965,"language":30495,"meta":141,"style":141},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[30,170967,170968,170974,170992,170998,171004],{"__ignoreMap":141},[228,170969,170970,170972],{"class":230,"line":231},[228,170971,170941],{"class":234},[228,170973,3853],{"class":238},[228,170975,170976,170978,170980,170982,170984,170986,170988,170990],{"class":230,"line":142},[228,170977,152445],{"class":238},[228,170979,284],{"class":234},[228,170981,2496],{"class":287},[228,170983,239],{"class":238},[228,170985,53936],{"class":287},[228,170987,239],{"class":238},[228,170989,152453],{"class":343},[228,170991,30612],{"class":238},[228,170993,170994,170996],{"class":230,"line":1293},[228,170995,31414],{"class":287},[228,170997,155820],{"class":238},[228,170999,171000,171002],{"class":230,"line":1308},[228,171001,170953],{"class":234},[228,171003,3853],{"class":238},[228,171005,171006,171008,171010,171013],{"class":230,"line":1314},[228,171007,31414],{"class":287},[228,171009,239],{"class":238},[228,171011,171012],{"class":343},"\"年龄必须是数字\"",[228,171014,245],{"class":238},[19,171016,171017,171018,171020],{},"不建议裸写 ",[30,171019,170953],{},"，最好指定异常类型。",[220,171022,171024],{"className":30493,"code":171023,"language":30495,"meta":141,"style":141},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[30,171025,171026,171032,171050,171056,171064],{"__ignoreMap":141},[228,171027,171028,171030],{"class":230,"line":231},[228,171029,170941],{"class":234},[228,171031,3853],{"class":238},[228,171033,171034,171036,171038,171040,171042,171044,171046,171048],{"class":230,"line":142},[228,171035,152445],{"class":238},[228,171037,284],{"class":234},[228,171039,2496],{"class":287},[228,171041,239],{"class":238},[228,171043,53936],{"class":287},[228,171045,239],{"class":238},[228,171047,152453],{"class":343},[228,171049,30612],{"class":238},[228,171051,171052,171054],{"class":230,"line":1293},[228,171053,31414],{"class":287},[228,171055,155820],{"class":238},[228,171057,171058,171060,171062],{"class":230,"line":1308},[228,171059,170953],{"class":234},[228,171061,152285],{"class":287},[228,171063,3853],{"class":238},[228,171065,171066,171068,171070,171072],{"class":230,"line":1314},[228,171067,31414],{"class":287},[228,171069,239],{"class":238},[228,171071,171012],{"class":343},[228,171073,245],{"class":238},[14,171075,171077],{"id":171076},"_94-捕获多个异常","9.4 捕获多个异常",[220,171079,171081],{"className":30493,"code":171080,"language":30495,"meta":141,"style":141},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[30,171082,171083,171089,171110,171130,171137,171145,171156,171165],{"__ignoreMap":141},[228,171084,171085,171087],{"class":230,"line":231},[228,171086,170941],{"class":234},[228,171088,3853],{"class":238},[228,171090,171091,171094,171096,171098,171100,171102,171104,171106,171108],{"class":230,"line":142},[228,171092,171093],{"class":238},"    nums ",[228,171095,284],{"class":234},[228,171097,52341],{"class":238},[228,171099,456],{"class":287},[228,171101,12550],{"class":238},[228,171103,316],{"class":287},[228,171105,12550],{"class":238},[228,171107,310],{"class":287},[228,171109,33361],{"class":238},[228,171111,171112,171115,171117,171119,171121,171123,171125,171128],{"class":230,"line":1293},[228,171113,171114],{"class":238},"    index ",[228,171116,284],{"class":234},[228,171118,2496],{"class":287},[228,171120,239],{"class":238},[228,171122,53936],{"class":287},[228,171124,239],{"class":238},[228,171126,171127],{"class":343},"\"请输入索引:\"",[228,171129,30612],{"class":238},[228,171131,171132,171134],{"class":230,"line":1308},[228,171133,31414],{"class":287},[228,171135,171136],{"class":238},"(nums[index])\n",[228,171138,171139,171141,171143],{"class":230,"line":1314},[228,171140,170953],{"class":234},[228,171142,152285],{"class":287},[228,171144,3853],{"class":238},[228,171146,171147,171149,171151,171154],{"class":230,"line":1328},[228,171148,31414],{"class":287},[228,171150,239],{"class":238},[228,171152,171153],{"class":343},"\"索引必须是整数\"",[228,171155,245],{"class":238},[228,171157,171158,171160,171163],{"class":230,"line":1334},[228,171159,170953],{"class":234},[228,171161,171162],{"class":287}," IndexError",[228,171164,3853],{"class":238},[228,171166,171167,171169,171171,171174],{"class":230,"line":1425},[228,171168,31414],{"class":287},[228,171170,239],{"class":238},[228,171172,171173],{"class":343},"\"索引越界\"",[228,171175,245],{"class":238},[19,171177,171178],{},"多个异常使用相同处理逻辑：",[220,171180,171182],{"className":30493,"code":171181,"language":30495,"meta":141,"style":141},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[30,171183,171184,171190,171208,171221,171235],{"__ignoreMap":141},[228,171185,171186,171188],{"class":230,"line":231},[228,171187,170941],{"class":234},[228,171189,3853],{"class":238},[228,171191,171192,171194,171196,171198,171200,171202,171204,171206],{"class":230,"line":142},[228,171193,45708],{"class":238},[228,171195,284],{"class":234},[228,171197,2496],{"class":287},[228,171199,239],{"class":238},[228,171201,53936],{"class":287},[228,171203,239],{"class":238},[228,171205,155855],{"class":343},[228,171207,30612],{"class":238},[228,171209,171210,171212,171214,171216,171218],{"class":230,"line":1293},[228,171211,31414],{"class":287},[228,171213,239],{"class":238},[228,171215,684],{"class":287},[228,171217,156105],{"class":234},[228,171219,171220],{"class":238}," num)\n",[228,171222,171223,171225,171227,171229,171231,171233],{"class":230,"line":1308},[228,171224,170953],{"class":234},[228,171226,1772],{"class":238},[228,171228,154893],{"class":287},[228,171230,12550],{"class":238},[228,171232,170836],{"class":287},[228,171234,30901],{"class":238},[228,171236,171237,171239,171241,171244],{"class":230,"line":1314},[228,171238,31414],{"class":287},[228,171240,239],{"class":238},[228,171242,171243],{"class":343},"\"输入不合法\"",[228,171245,245],{"class":238},[14,171247,171249],{"id":171248},"_95-获取异常信息","9.5 获取异常信息",[220,171251,171253],{"className":30493,"code":171252,"language":30495,"meta":141,"style":141},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[30,171254,171255,171261,171275,171286],{"__ignoreMap":141},[228,171256,171257,171259],{"class":230,"line":231},[228,171258,170941],{"class":234},[228,171260,3853],{"class":238},[228,171262,171263,171265,171267,171269,171271,171273],{"class":230,"line":142},[228,171264,45708],{"class":238},[228,171266,284],{"class":234},[228,171268,2496],{"class":287},[228,171270,239],{"class":238},[228,171272,155939],{"class":343},[228,171274,245],{"class":238},[228,171276,171277,171279,171281,171283],{"class":230,"line":1293},[228,171278,170953],{"class":234},[228,171280,152285],{"class":287},[228,171282,64719],{"class":234},[228,171284,171285],{"class":238}," e:\n",[228,171287,171288,171290,171292,171294,171297,171299,171301,171303,171305],{"class":230,"line":1308},[228,171289,31414],{"class":287},[228,171291,239],{"class":238},[228,171293,291],{"class":234},[228,171295,171296],{"class":343},"\"出错了:",[228,171298,1134],{"class":287},[228,171300,313],{"class":238},[228,171302,1184],{"class":287},[228,171304,489],{"class":343},[228,171306,245],{"class":238},[19,171308,146516],{},[220,171310,171313],{"className":171311,"code":171312,"language":5302,"meta":141},[5300],"出错了:invalid literal for int() with base 10: 'abc'\n",[30,171314,171312],{"__ignoreMap":141},[14,171316,171318],{"id":171317},"_96-else和finally","9.6 else和finally",[19,171320,171321,171323],{},[30,171322,1815],{},"：没有异常时执行。",[19,171325,171326,171329],{},[30,171327,171328],{},"finally","：无论是否异常都会执行。",[220,171331,171333],{"className":30493,"code":171332,"language":30495,"meta":141,"style":141},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[30,171334,171335,171341,171359,171367,171377,171383,171404,171410],{"__ignoreMap":141},[228,171336,171337,171339],{"class":230,"line":231},[228,171338,170941],{"class":234},[228,171340,3853],{"class":238},[228,171342,171343,171345,171347,171349,171351,171353,171355,171357],{"class":230,"line":142},[228,171344,45708],{"class":238},[228,171346,284],{"class":234},[228,171348,2496],{"class":287},[228,171350,239],{"class":238},[228,171352,53936],{"class":287},[228,171354,239],{"class":238},[228,171356,155855],{"class":343},[228,171358,30612],{"class":238},[228,171360,171361,171363,171365],{"class":230,"line":1293},[228,171362,170953],{"class":234},[228,171364,152285],{"class":287},[228,171366,3853],{"class":238},[228,171368,171369,171371,171373,171375],{"class":230,"line":1308},[228,171370,31414],{"class":287},[228,171372,239],{"class":238},[228,171374,153273],{"class":343},[228,171376,245],{"class":238},[228,171378,171379,171381],{"class":230,"line":1314},[228,171380,1815],{"class":234},[228,171382,3853],{"class":238},[228,171384,171385,171387,171389,171391,171394,171396,171398,171400,171402],{"class":230,"line":1328},[228,171386,31414],{"class":287},[228,171388,239],{"class":238},[228,171390,291],{"class":234},[228,171392,171393],{"class":343},"\"输入正确:",[228,171395,1134],{"class":287},[228,171397,1779],{"class":238},[228,171399,1184],{"class":287},[228,171401,489],{"class":343},[228,171403,245],{"class":238},[228,171405,171406,171408],{"class":230,"line":1334},[228,171407,171328],{"class":234},[228,171409,3853],{"class":238},[228,171411,171412,171414,171416,171419],{"class":230,"line":1425},[228,171413,31414],{"class":287},[228,171415,239],{"class":238},[228,171417,171418],{"class":343},"\"程序结束\"",[228,171420,245],{"class":238},[19,171422,171423,171425],{},[30,171424,171328],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,171427,171429],{"id":171428},"_97-抛出异常","9.7 抛出异常",[19,171431,171432],{},"程序可以主动抛出异常。",[220,171434,171436],{"className":30493,"code":171435,"language":30495,"meta":141,"style":141},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[30,171437,171438,171447,171459,171472,171492,171496,171500],{"__ignoreMap":141},[228,171439,171440,171442,171445],{"class":230,"line":231},[228,171441,32062],{"class":234},[228,171443,171444],{"class":2077}," set_age",[228,171446,161474],{"class":238},[228,171448,171449,171451,171453,171455,171457],{"class":230,"line":142},[228,171450,3215],{"class":234},[228,171452,15822],{"class":238},[228,171454,1148],{"class":234},[228,171456,4207],{"class":287},[228,171458,3853],{"class":238},[228,171460,171461,171463,171465,171467,171470],{"class":230,"line":1293},[228,171462,103547],{"class":234},[228,171464,152285],{"class":287},[228,171466,239],{"class":238},[228,171468,171469],{"class":343},"\"年龄不能为负数\"",[228,171471,245],{"class":238},[228,171473,171474,171476,171478,171480,171482,171484,171486,171488,171490],{"class":230,"line":1308},[228,171475,31414],{"class":287},[228,171477,239],{"class":238},[228,171479,291],{"class":234},[228,171481,162042],{"class":343},[228,171483,1134],{"class":287},[228,171485,70336],{"class":238},[228,171487,1184],{"class":287},[228,171489,489],{"class":343},[228,171491,245],{"class":238},[228,171493,171494],{"class":230,"line":1314},[228,171495,2514],{"emptyLinePlaceholder":157},[228,171497,171498],{"class":230,"line":1328},[228,171499,2514],{"emptyLinePlaceholder":157},[228,171501,171502,171505,171507,171509],{"class":230,"line":1334},[228,171503,171504],{"class":238},"set_age(",[228,171506,770],{"class":234},[228,171508,456],{"class":287},[228,171510,245],{"class":238},[19,171512,171513],{},"调用者可以捕获：",[220,171515,171517],{"className":30493,"code":171516,"language":30495,"meta":141,"style":141},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[30,171518,171519,171525,171536,171546],{"__ignoreMap":141},[228,171520,171521,171523],{"class":230,"line":231},[228,171522,170941],{"class":234},[228,171524,3853],{"class":238},[228,171526,171527,171530,171532,171534],{"class":230,"line":142},[228,171528,171529],{"class":238},"    set_age(",[228,171531,770],{"class":234},[228,171533,456],{"class":287},[228,171535,245],{"class":238},[228,171537,171538,171540,171542,171544],{"class":230,"line":1293},[228,171539,170953],{"class":234},[228,171541,152285],{"class":287},[228,171543,64719],{"class":234},[228,171545,171285],{"class":238},[228,171547,171548,171550],{"class":230,"line":1308},[228,171549,31414],{"class":287},[228,171551,67114],{"class":238},[14,171553,171555],{"id":171554},"_98-自定义异常","9.8 自定义异常",[220,171557,171559],{"className":30493,"code":171558,"language":30495,"meta":141,"style":141},"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",[30,171560,171561,171575,171579,171583,171587,171595,171605,171616,171626,171630,171634,171640,171657,171668],{"__ignoreMap":141},[228,171562,171563,171565,171568,171570,171573],{"class":230,"line":231},[228,171564,14809],{"class":234},[228,171566,171567],{"class":2077}," BalanceNotEnoughError",[228,171569,239],{"class":238},[228,171571,171572],{"class":287},"Exception",[228,171574,30901],{"class":238},[228,171576,171577],{"class":230,"line":142},[228,171578,149596],{"class":234},[228,171580,171581],{"class":230,"line":1293},[228,171582,2514],{"emptyLinePlaceholder":157},[228,171584,171585],{"class":230,"line":1308},[228,171586,2514],{"emptyLinePlaceholder":157},[228,171588,171589,171591,171593],{"class":230,"line":1314},[228,171590,32062],{"class":234},[228,171592,150245],{"class":2077},[228,171594,162871],{"class":238},[228,171596,171597,171599,171601,171603],{"class":230,"line":1328},[228,171598,3215],{"class":234},[228,171600,150201],{"class":238},[228,171602,1198],{"class":234},[228,171604,162648],{"class":238},[228,171606,171607,171609,171612,171614],{"class":230,"line":1334},[228,171608,103547],{"class":234},[228,171610,171611],{"class":238}," BalanceNotEnoughError(",[228,171613,150296],{"class":343},[228,171615,245],{"class":238},[228,171617,171618,171620,171622,171624],{"class":230,"line":1425},[228,171619,4204],{"class":234},[228,171621,162878],{"class":238},[228,171623,770],{"class":234},[228,171625,150234],{"class":238},[228,171627,171628],{"class":230,"line":1431},[228,171629,2514],{"emptyLinePlaceholder":157},[228,171631,171632],{"class":230,"line":1443},[228,171633,2514],{"emptyLinePlaceholder":157},[228,171635,171636,171638],{"class":230,"line":1726},[228,171637,170941],{"class":234},[228,171639,3853],{"class":238},[228,171641,171642,171644,171646,171649,171651,171653,171655],{"class":230,"line":1731},[228,171643,162549],{"class":238},[228,171645,284],{"class":234},[228,171647,171648],{"class":238}," withdraw(",[228,171650,549],{"class":287},[228,171652,12550],{"class":238},[228,171654,1836],{"class":287},[228,171656,245],{"class":238},[228,171658,171659,171661,171664,171666],{"class":230,"line":1737},[228,171660,170953],{"class":234},[228,171662,171663],{"class":238}," BalanceNotEnoughError ",[228,171665,31498],{"class":234},[228,171667,171285],{"class":238},[228,171669,171670,171672],{"class":230,"line":1742},[228,171671,31414],{"class":287},[228,171673,67114],{"class":238},[19,171675,171676],{},"入门阶段大多数情况使用内置异常即可。",[14,171678,171680],{"id":171679},"_99-traceback","9.9 traceback",[19,171682,171683],{},"调试时可以输出完整异常堆栈。",[220,171685,171687],{"className":30493,"code":171686,"language":30495,"meta":141,"style":141},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[30,171688,171689,171696,171700,171706,171716,171724],{"__ignoreMap":141},[228,171690,171691,171693],{"class":230,"line":231},[228,171692,30507],{"class":234},[228,171694,171695],{"class":238}," traceback\n",[228,171697,171698],{"class":230,"line":142},[228,171699,2514],{"emptyLinePlaceholder":157},[228,171701,171702,171704],{"class":230,"line":1293},[228,171703,170941],{"class":234},[228,171705,3853],{"class":238},[228,171707,171708,171710,171712,171714],{"class":230,"line":1308},[228,171709,2099],{"class":287},[228,171711,239],{"class":238},[228,171713,155939],{"class":343},[228,171715,245],{"class":238},[228,171717,171718,171720,171722],{"class":230,"line":1314},[228,171719,170953],{"class":234},[228,171721,152285],{"class":287},[228,171723,3853],{"class":238},[228,171725,171726],{"class":230,"line":1328},[228,171727,171728],{"class":238},"    traceback.print_exc()\n",[19,171730,171731],{},"日志系统中常把异常堆栈记录到文件。",[14,171733,171735],{"id":171734},"_910-什么是模块","9.10 什么是模块",[19,171737,171738,171739,89],{},"模块就是一个 ",[30,171740,146411],{},[19,171742,171743,171744,24734],{},"例如创建 ",[30,171745,171746],{},"my_math.py",[220,171748,171750],{"className":30493,"code":171749,"language":30495,"meta":141,"style":141},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[30,171751,171752,171760,171770,171774,171778,171787],{"__ignoreMap":141},[228,171753,171754,171756,171758],{"class":230,"line":231},[228,171755,32062],{"class":234},[228,171757,5324],{"class":2077},[228,171759,151152],{"class":238},[228,171761,171762,171764,171766,171768],{"class":230,"line":142},[228,171763,4204],{"class":234},[228,171765,10984],{"class":238},[228,171767,719],{"class":234},[228,171769,151163],{"class":238},[228,171771,171772],{"class":230,"line":1293},[228,171773,2514],{"emptyLinePlaceholder":157},[228,171775,171776],{"class":230,"line":1308},[228,171777,2514],{"emptyLinePlaceholder":157},[228,171779,171780,171782,171785],{"class":230,"line":1314},[228,171781,32062],{"class":234},[228,171783,171784],{"class":2077}," sub",[228,171786,151152],{"class":238},[228,171788,171789,171791,171793,171795],{"class":230,"line":1328},[228,171790,4204],{"class":234},[228,171792,10984],{"class":238},[228,171794,770],{"class":234},[228,171796,151163],{"class":238},[19,171798,171799],{},"在另一个文件中导入：",[220,171801,171803],{"className":30493,"code":171802,"language":30495,"meta":141,"style":141},"import my_math\n\nprint(my_math.add(1, 2))\n",[30,171804,171805,171812,171816],{"__ignoreMap":141},[228,171806,171807,171809],{"class":230,"line":231},[228,171808,30507],{"class":234},[228,171810,171811],{"class":238}," my_math\n",[228,171813,171814],{"class":230,"line":142},[228,171815,2514],{"emptyLinePlaceholder":157},[228,171817,171818,171820,171823,171825,171827,171829],{"class":230,"line":1293},[228,171819,30530],{"class":287},[228,171821,171822],{"class":238},"(my_math.add(",[228,171824,456],{"class":287},[228,171826,12550],{"class":238},[228,171828,316],{"class":287},[228,171830,30612],{"class":238},[14,171832,171834],{"id":171833},"_911-import导入","9.11 import导入",[200,171836,171838],{"id":171837},"_9111-导入模块","9.11.1 导入模块",[220,171840,171842],{"className":30493,"code":171841,"language":30495,"meta":141,"style":141},"import random\n\nprint(random.randint(1, 10))\n",[30,171843,171844,171850,171854],{"__ignoreMap":141},[228,171845,171846,171848],{"class":230,"line":231},[228,171847,30507],{"class":234},[228,171849,45443],{"class":238},[228,171851,171852],{"class":230,"line":142},[228,171853,2514],{"emptyLinePlaceholder":157},[228,171855,171856,171858,171861,171863,171865,171867],{"class":230,"line":1293},[228,171857,30530],{"class":287},[228,171859,171860],{"class":238},"(random.randint(",[228,171862,456],{"class":287},[228,171864,12550],{"class":238},[228,171866,684],{"class":287},[228,171868,30612],{"class":238},[200,171870,171872],{"id":171871},"_9112-导入指定内容","9.11.2 导入指定内容",[220,171874,171876],{"className":30493,"code":171875,"language":30495,"meta":141,"style":141},"from random import randint\n\nprint(randint(1, 10))\n",[30,171877,171878,171889,171893],{"__ignoreMap":141},[228,171879,171880,171882,171884,171886],{"class":230,"line":231},[228,171881,30852],{"class":234},[228,171883,57911],{"class":238},[228,171885,30507],{"class":234},[228,171887,171888],{"class":238}," randint\n",[228,171890,171891],{"class":230,"line":142},[228,171892,2514],{"emptyLinePlaceholder":157},[228,171894,171895,171897,171900,171902,171904,171906],{"class":230,"line":1293},[228,171896,30530],{"class":287},[228,171898,171899],{"class":238},"(randint(",[228,171901,456],{"class":287},[228,171903,12550],{"class":238},[228,171905,684],{"class":287},[228,171907,30612],{"class":238},[200,171909,171911],{"id":171910},"_9113-起别名","9.11.3 起别名",[220,171913,171915],{"className":30493,"code":171914,"language":30495,"meta":141,"style":141},"import random as rd\n\nprint(rd.randint(1, 10))\n",[30,171916,171917,171928,171932],{"__ignoreMap":141},[228,171918,171919,171921,171923,171925],{"class":230,"line":231},[228,171920,30507],{"class":234},[228,171922,57911],{"class":238},[228,171924,31498],{"class":234},[228,171926,171927],{"class":238}," rd\n",[228,171929,171930],{"class":230,"line":142},[228,171931,2514],{"emptyLinePlaceholder":157},[228,171933,171934,171936,171939,171941,171943,171945],{"class":230,"line":1293},[228,171935,30530],{"class":287},[228,171937,171938],{"class":238},"(rd.randint(",[228,171940,456],{"class":287},[228,171942,12550],{"class":238},[228,171944,684],{"class":287},[228,171946,30612],{"class":238},[220,171948,171950],{"className":30493,"code":171949,"language":30495,"meta":141,"style":141},"from random import randint as rint\n\nprint(rint(1, 10))\n",[30,171951,171952,171968,171972],{"__ignoreMap":141},[228,171953,171954,171956,171958,171960,171963,171965],{"class":230,"line":231},[228,171955,30852],{"class":234},[228,171957,57911],{"class":238},[228,171959,30507],{"class":234},[228,171961,171962],{"class":238}," randint ",[228,171964,31498],{"class":234},[228,171966,171967],{"class":238}," rint\n",[228,171969,171970],{"class":230,"line":142},[228,171971,2514],{"emptyLinePlaceholder":157},[228,171973,171974,171976,171979,171981,171983,171985],{"class":230,"line":1293},[228,171975,30530],{"class":287},[228,171977,171978],{"class":238},"(rint(",[228,171980,456],{"class":287},[228,171982,12550],{"class":238},[228,171984,684],{"class":287},[228,171986,30612],{"class":238},[200,171988,171990],{"id":171989},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[220,171992,171994],{"className":30493,"code":171993,"language":30495,"meta":141,"style":141},"from random import *\n",[30,171995,171996],{"__ignoreMap":141},[228,171997,171998,172000,172002,172004],{"class":230,"line":231},[228,171999,30852],{"class":234},[228,172001,57911],{"class":238},[228,172003,30507],{"class":234},[228,172005,172006],{"class":234}," *\n",[19,172008,172009],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,172011,172013],{"id":172012},"_912-常用内置模块","9.12 常用内置模块",[200,172015,172017],{"id":172016},"_9121-random","9.12.1 random",[220,172019,172021],{"className":30493,"code":172020,"language":30495,"meta":141,"style":141},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[30,172022,172023,172029,172033,172047,172066],{"__ignoreMap":141},[228,172024,172025,172027],{"class":230,"line":231},[228,172026,30507],{"class":234},[228,172028,45443],{"class":238},[228,172030,172031],{"class":230,"line":142},[228,172032,2514],{"emptyLinePlaceholder":157},[228,172034,172035,172037,172039,172041,172043,172045],{"class":230,"line":1293},[228,172036,30530],{"class":287},[228,172038,171860],{"class":238},[228,172040,456],{"class":287},[228,172042,12550],{"class":238},[228,172044,684],{"class":287},[228,172046,30612],{"class":238},[228,172048,172049,172051,172054,172056,172058,172060,172062,172064],{"class":230,"line":1308},[228,172050,30530],{"class":287},[228,172052,172053],{"class":238},"(random.choice([",[228,172055,149947],{"class":343},[228,172057,12550],{"class":238},[228,172059,150995],{"class":343},[228,172061,12550],{"class":238},[228,172063,159790],{"class":343},[228,172065,33258],{"class":238},[228,172067,172068,172070,172073,172075,172077,172079,172081,172083,172085,172087,172089,172091,172093,172095],{"class":230,"line":1314},[228,172069,30530],{"class":287},[228,172071,172072],{"class":238},"(random.sample([",[228,172074,456],{"class":287},[228,172076,12550],{"class":238},[228,172078,316],{"class":287},[228,172080,12550],{"class":238},[228,172082,310],{"class":287},[228,172084,12550],{"class":238},[228,172086,531],{"class":287},[228,172088,12550],{"class":238},[228,172090,557],{"class":287},[228,172092,112317],{"class":238},[228,172094,316],{"class":287},[228,172096,30612],{"class":238},[200,172098,172100],{"id":172099},"_9122-time","9.12.2 time",[220,172102,172104],{"className":30493,"code":172103,"language":30495,"meta":141,"style":141},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[30,172105,172106,172112,172116,172123,172131],{"__ignoreMap":141},[228,172107,172108,172110],{"class":230,"line":231},[228,172109,30507],{"class":234},[228,172111,31944],{"class":238},[228,172113,172114],{"class":230,"line":142},[228,172115,2514],{"emptyLinePlaceholder":157},[228,172117,172118,172120],{"class":230,"line":1293},[228,172119,30530],{"class":287},[228,172121,172122],{"class":238},"(time.time())\n",[228,172124,172125,172127,172129],{"class":230,"line":1308},[228,172126,95186],{"class":238},[228,172128,456],{"class":287},[228,172130,245],{"class":238},[228,172132,172133,172135,172137,172140],{"class":230,"line":1314},[228,172134,30530],{"class":287},[228,172136,239],{"class":238},[228,172138,172139],{"class":343},"\"1秒后执行\"",[228,172141,245],{"class":238},[200,172143,172145],{"id":172144},"_9123-datetime","9.12.3 datetime",[220,172147,172149],{"className":30493,"code":172148,"language":30495,"meta":141,"style":141},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[30,172150,172151,172163,172167,172177,172184],{"__ignoreMap":141},[228,172152,172153,172155,172158,172160],{"class":230,"line":231},[228,172154,30852],{"class":234},[228,172156,172157],{"class":238}," datetime ",[228,172159,30507],{"class":234},[228,172161,172162],{"class":238}," datetime\n",[228,172164,172165],{"class":230,"line":142},[228,172166,2514],{"emptyLinePlaceholder":157},[228,172168,172169,172172,172174],{"class":230,"line":1293},[228,172170,172171],{"class":238},"now ",[228,172173,284],{"class":234},[228,172175,172176],{"class":238}," datetime.now()\n",[228,172178,172179,172181],{"class":230,"line":1308},[228,172180,30530],{"class":287},[228,172182,172183],{"class":238},"(now)\n",[228,172185,172186,172188,172191,172194,172196,172199],{"class":230,"line":1314},[228,172187,30530],{"class":287},[228,172189,172190],{"class":238},"(now.strftime(",[228,172192,172193],{"class":343},"\"%Y-%m-",[228,172195,156750],{"class":287},[228,172197,172198],{"class":343}," %H:%M:%S\"",[228,172200,30612],{"class":238},[200,172202,172204],{"id":172203},"_9124-os","9.12.4 os",[220,172206,172208],{"className":30493,"code":172207,"language":30495,"meta":141,"style":141},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[30,172209,172210,172216,172220,172227],{"__ignoreMap":141},[228,172211,172212,172214],{"class":230,"line":231},[228,172213,30507],{"class":234},[228,172215,45420],{"class":238},[228,172217,172218],{"class":230,"line":142},[228,172219,2514],{"emptyLinePlaceholder":157},[228,172221,172222,172224],{"class":230,"line":1293},[228,172223,30530],{"class":287},[228,172225,172226],{"class":238},"(os.getcwd())\n",[228,172228,172229,172231,172234,172237],{"class":230,"line":1308},[228,172230,30530],{"class":287},[228,172232,172233],{"class":238},"(os.listdir(",[228,172235,172236],{"class":343},"\".\"",[228,172238,30612],{"class":238},[200,172240,172242],{"id":172241},"_9125-sys","9.12.5 sys",[220,172244,172246],{"className":30493,"code":172245,"language":30495,"meta":141,"style":141},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[30,172247,172248,172255,172259,172266],{"__ignoreMap":141},[228,172249,172250,172252],{"class":230,"line":231},[228,172251,30507],{"class":234},[228,172253,172254],{"class":238}," sys\n",[228,172256,172257],{"class":230,"line":142},[228,172258,2514],{"emptyLinePlaceholder":157},[228,172260,172261,172263],{"class":230,"line":1293},[228,172262,30530],{"class":287},[228,172264,172265],{"class":238},"(sys.version)\n",[228,172267,172268,172270],{"class":230,"line":1308},[228,172269,30530],{"class":287},[228,172271,172272],{"class":238},"(sys.path)\n",[14,172274,172276,172277,172279,172280,489],{"id":172275},"_913-if-name-main","9.13 if ",[388,172278,79925],{}," == \"",[388,172281,102173],{},[19,172283,172284,172285,172288],{},"模块被直接运行和被导入时，",[30,172286,172287],{},"__name__"," 的值不同。",[19,172290,172291,172292,24734],{},"创建 ",[30,172293,172294],{},"my_module.py",[220,172296,172298],{"className":30493,"code":172297,"language":30495,"meta":141,"style":141},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[30,172299,172300,172308,172318,172322,172326,172338],{"__ignoreMap":141},[228,172301,172302,172304,172306],{"class":230,"line":231},[228,172303,32062],{"class":234},[228,172305,5324],{"class":2077},[228,172307,151152],{"class":238},[228,172309,172310,172312,172314,172316],{"class":230,"line":142},[228,172311,4204],{"class":234},[228,172313,10984],{"class":238},[228,172315,719],{"class":234},[228,172317,151163],{"class":238},[228,172319,172320],{"class":230,"line":1293},[228,172321,2514],{"emptyLinePlaceholder":157},[228,172323,172324],{"class":230,"line":1308},[228,172325,2514],{"emptyLinePlaceholder":157},[228,172327,172328,172330,172332,172334,172336],{"class":230,"line":1314},[228,172329,1645],{"class":234},[228,172331,31335],{"class":287},[228,172333,101674],{"class":234},[228,172335,101677],{"class":343},[228,172337,3853],{"class":238},[228,172339,172340,172342,172344,172346,172348,172350],{"class":230,"line":1328},[228,172341,31414],{"class":287},[228,172343,166659],{"class":238},[228,172345,456],{"class":287},[228,172347,12550],{"class":238},[228,172349,316],{"class":287},[228,172351,30612],{"class":238},[19,172353,172354],{},"作用：",[183,172356,172357,172360],{},[186,172358,172359],{},"直接运行该文件时，执行测试代码。",[186,172361,172362],{},"被其他文件导入时，不执行测试代码。",[19,172364,172365],{},"这是写模块时很常用的习惯。",[14,172367,172369],{"id":172368},"_914-包","9.14 包",[19,172371,172372,172373,172376],{},"包是包含 ",[30,172374,172375],{},"__init__.py"," 的目录，用于组织多个模块。",[19,172378,172379],{},"目录结构：",[220,172381,172384],{"className":172382,"code":172383,"language":5302,"meta":141},[5300],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[30,172385,172383],{"__ignoreMap":141},[19,172387,172388],{},"导入：",[220,172390,172392],{"className":30493,"code":172391,"language":30495,"meta":141,"style":141},"from utils.file_utils import read_file\n",[30,172393,172394],{"__ignoreMap":141},[228,172395,172396,172398,172401,172403],{"class":230,"line":231},[228,172397,30852],{"class":234},[228,172399,172400],{"class":238}," utils.file_utils ",[228,172402,30507],{"class":234},[228,172404,172405],{"class":238}," read_file\n",[19,172407,172408,172410],{},[30,172409,172375],{}," 可以为空，也可以写包初始化逻辑。",[14,172412,172414],{"id":172413},"_915-第三方包","9.15 第三方包",[19,172416,172417,172418,172420],{},"第三方包通过 ",[30,172419,23946],{}," 安装。",[220,172422,172424],{"className":23937,"code":172423,"language":23939,"meta":141,"style":141},"pip install requests\n",[30,172425,172426],{"__ignoreMap":141},[228,172427,172428,172430,172432],{"class":230,"line":231},[228,172429,23946],{"class":2077},[228,172431,23949],{"class":343},[228,172433,146157],{"class":343},[19,172435,172436],{},"使用：",[220,172438,172440],{"className":30493,"code":172439,"language":30495,"meta":141,"style":141},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[30,172441,172442,172448,172452,172467],{"__ignoreMap":141},[228,172443,172444,172446],{"class":230,"line":231},[228,172445,30507],{"class":234},[228,172447,146157],{"class":238},[228,172449,172450],{"class":230,"line":142},[228,172451,2514],{"emptyLinePlaceholder":157},[228,172453,172454,172457,172459,172462,172465],{"class":230,"line":1293},[228,172455,172456],{"class":238},"response ",[228,172458,284],{"class":234},[228,172460,172461],{"class":238}," requests.get(",[228,172463,172464],{"class":343},"\"https:\u002F\u002Fwww.example.com\"",[228,172466,245],{"class":238},[228,172468,172469,172471],{"class":230,"line":1308},[228,172470,30530],{"class":287},[228,172472,172473],{"class":238},"(response.status_code)\n",[19,172475,172476],{},"查看已安装包：",[220,172478,172480],{"className":23937,"code":172479,"language":23939,"meta":141,"style":141},"pip list\n",[30,172481,172482],{"__ignoreMap":141},[228,172483,172484,172486],{"class":230,"line":231},[228,172485,23946],{"class":2077},[228,172487,119070],{"class":343},[19,172489,172490],{},"导出项目依赖：",[220,172492,172493],{"className":23937,"code":146352,"language":23939,"meta":141,"style":141},[30,172494,172495],{"__ignoreMap":141},[228,172496,172497,172499,172501,172503],{"class":230,"line":231},[228,172498,23946],{"class":2077},[228,172500,146361],{"class":343},[228,172502,26338],{"class":234},[228,172504,146366],{"class":343},[19,172506,172507],{},"安装项目依赖：",[220,172509,172510],{"className":23937,"code":146372,"language":23939,"meta":141,"style":141},[30,172511,172512],{"__ignoreMap":141},[228,172513,172514,172516,172518,172520],{"class":230,"line":231},[228,172515,23946],{"class":2077},[228,172517,23949],{"class":343},[228,172519,119754],{"class":287},[228,172521,146366],{"class":343},[14,172523,172525],{"id":172524},"_916-模块搜索路径","9.16 模块搜索路径",[19,172527,172528,172529,172532],{},"Python 导入模块时会在 ",[30,172530,172531],{},"sys.path"," 中查找。",[220,172534,172536],{"className":30493,"code":172535,"language":30495,"meta":141,"style":141},"import sys\n\nfor path in sys.path:\n    print(path)\n",[30,172537,172538,172544,172548,172560],{"__ignoreMap":141},[228,172539,172540,172542],{"class":230,"line":231},[228,172541,30507],{"class":234},[228,172543,172254],{"class":238},[228,172545,172546],{"class":230,"line":142},[228,172547,2514],{"emptyLinePlaceholder":157},[228,172549,172550,172552,172555,172557],{"class":230,"line":1293},[228,172551,3139],{"class":234},[228,172553,172554],{"class":238}," path ",[228,172556,26159],{"class":234},[228,172558,172559],{"class":238}," sys.path:\n",[228,172561,172562,172564],{"class":230,"line":1308},[228,172563,31414],{"class":287},[228,172565,169288],{"class":238},[19,172567,172568],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,172570,157682],{},[220,172572,172575],{"className":172573,"code":172574,"language":5302,"meta":141},[5300],"random.py\njson.py\ntime.py\n",[30,172576,172574],{"__ignoreMap":141},[19,172578,172579],{},"这些文件名可能导致导入异常。",[14,172581,172583],{"id":172582},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,172585,172379],{},[220,172587,172590],{"className":172588,"code":172589,"language":5302,"meta":141},[5300],"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",[30,172591,172589],{"__ignoreMap":141},[19,172593,172594,24734],{},[30,172595,172596],{},"utils\u002Ffile_utils.py",[220,172598,172600],{"className":30493,"code":172599,"language":30495,"meta":141,"style":141},"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",[30,172601,172602,172608,172618,172622,172626,172636,172646,172654,172660,172664,172691,172701,172705,172709,172719,172745],{"__ignoreMap":141},[228,172603,172604,172606],{"class":230,"line":231},[228,172605,30507],{"class":234},[228,172607,147150],{"class":238},[228,172609,172610,172612,172614,172616],{"class":230,"line":142},[228,172611,30852],{"class":234},[228,172613,108426],{"class":238},[228,172615,30507],{"class":234},[228,172617,108431],{"class":238},[228,172619,172620],{"class":230,"line":1293},[228,172621,2514],{"emptyLinePlaceholder":157},[228,172623,172624],{"class":230,"line":1308},[228,172625,2514],{"emptyLinePlaceholder":157},[228,172627,172628,172630,172633],{"class":230,"line":1314},[228,172629,32062],{"class":234},[228,172631,172632],{"class":2077}," read_json",[228,172634,172635],{"class":238},"(path):\n",[228,172637,172638,172641,172643],{"class":230,"line":1328},[228,172639,172640],{"class":238},"    path ",[228,172642,284],{"class":234},[228,172644,172645],{"class":238}," Path(path)\n",[228,172647,172648,172650,172652],{"class":230,"line":1334},[228,172649,3215],{"class":234},[228,172651,39045],{"class":234},[228,172653,169369],{"class":238},[228,172655,172656,172658],{"class":230,"line":1425},[228,172657,14867],{"class":234},[228,172659,51953],{"class":238},[228,172661,172662],{"class":230,"line":1431},[228,172663,2514],{"emptyLinePlaceholder":157},[228,172665,172666,172668,172670,172673,172675,172677,172679,172681,172683,172685,172687,172689],{"class":230,"line":1443},[228,172667,34293],{"class":234},[228,172669,146850],{"class":287},[228,172671,172672],{"class":238},"(path, ",[228,172674,146860],{"class":343},[228,172676,12550],{"class":238},[228,172678,146865],{"class":5331},[228,172680,284],{"class":234},[228,172682,146870],{"class":343},[228,172684,13829],{"class":238},[228,172686,31498],{"class":234},[228,172688,148212],{"class":5331},[228,172690,3853],{"class":238},[228,172692,172693,172695,172697,172699],{"class":230,"line":1726},[228,172694,14867],{"class":234},[228,172696,148223],{"class":238},[228,172698,45469],{"class":5331},[228,172700,245],{"class":238},[228,172702,172703],{"class":230,"line":1731},[228,172704,2514],{"emptyLinePlaceholder":157},[228,172706,172707],{"class":230,"line":1737},[228,172708,2514],{"emptyLinePlaceholder":157},[228,172710,172711,172713,172716],{"class":230,"line":1742},[228,172712,32062],{"class":234},[228,172714,172715],{"class":2077}," write_json",[228,172717,172718],{"class":238},"(path, data):\n",[228,172720,172721,172723,172725,172727,172729,172731,172733,172735,172737,172739,172741,172743],{"class":230,"line":1756},[228,172722,34293],{"class":234},[228,172724,146850],{"class":287},[228,172726,172672],{"class":238},[228,172728,152035],{"class":343},[228,172730,12550],{"class":238},[228,172732,146865],{"class":5331},[228,172734,284],{"class":234},[228,172736,146870],{"class":343},[228,172738,13829],{"class":238},[228,172740,31498],{"class":234},[228,172742,148212],{"class":5331},[228,172744,3853],{"class":238},[228,172746,172747,172750,172752,172754,172756,172758,172760,172762,172764,172766,172768],{"class":230,"line":1761},[228,172748,172749],{"class":238},"        json.dump(data, ",[228,172751,45469],{"class":5331},[228,172753,12550],{"class":238},[228,172755,147196],{"class":5331},[228,172757,284],{"class":234},[228,172759,34102],{"class":287},[228,172761,12550],{"class":238},[228,172763,152071],{"class":5331},[228,172765,284],{"class":234},[228,172767,316],{"class":287},[228,172769,245],{"class":238},[19,172771,172772,24734],{},[30,172773,154666],{},[220,172775,172777],{"className":30493,"code":172776,"language":30495,"meta":141,"style":141},"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",[30,172778,172779,172790,172794,172807,172827],{"__ignoreMap":141},[228,172780,172781,172783,172785,172787],{"class":230,"line":231},[228,172782,30852],{"class":234},[228,172784,172400],{"class":238},[228,172786,30507],{"class":234},[228,172788,172789],{"class":238}," read_json, write_json\n",[228,172791,172792],{"class":230,"line":142},[228,172793,2514],{"emptyLinePlaceholder":157},[228,172795,172796,172798,172800,172803,172805],{"class":230,"line":1293},[228,172797,159775],{"class":238},[228,172799,284],{"class":234},[228,172801,172802],{"class":238}," read_json(",[228,172804,151890],{"class":343},[228,172806,245],{"class":238},[228,172808,172809,172811,172813,172815,172817,172819,172821,172823,172825],{"class":230,"line":1308},[228,172810,170593],{"class":238},[228,172812,62794],{"class":343},[228,172814,51552],{"class":238},[228,172816,149947],{"class":343},[228,172818,12550],{"class":238},[228,172820,151531],{"class":343},[228,172822,51552],{"class":238},[228,172824,1227],{"class":287},[228,172826,165211],{"class":238},[228,172828,172829,172832,172834],{"class":230,"line":1314},[228,172830,172831],{"class":238},"write_json(",[228,172833,151890],{"class":343},[228,172835,172836],{"class":238},", students)\n",[14,172838,172840],{"id":172839},"_918-易错点","9.18 易错点",[183,172842,172843,172846,172851,172856,172859,172862],{},[186,172844,172845],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[186,172847,172848,172849,78],{},"能指定异常类型就不要裸写 ",[30,172850,170953],{},[186,172852,172853,172855],{},[30,172854,171328],{}," 无论是否出错都会执行。",[186,172857,172858],{},"模块文件名不要和标准库重名。",[186,172860,172861],{},"导入自己写的模块时，要注意运行目录。",[186,172863,172864],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,172866,172868],{"id":172867},"_919-本章练习","9.19 本章练习",[183,172870,172871,172874,172877,172883,172890],{},[186,172872,172873],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[186,172875,172876],{},"写函数读取文件，如果文件不存在则返回空字符串。",[186,172878,172291,172879,172882],{},[30,172880,172881],{},"math_utils.py","，实现加减乘除函数并导入使用。",[186,172884,172885,172886,172889],{},"创建一个 ",[30,172887,172888],{},"utils"," 包，把 JSON 读写函数放进去。",[186,172891,172892],{},"写一个程序，捕获除零异常和输入格式异常。",[5241,172894,172895],{},"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":141,"searchDepth":142,"depth":142,"links":172897},[172898,172899,172900,172901,172902,172903,172904,172905,172906,172907,172908,172914,172921,172923,172924,172925,172926,172927,172928],{"id":170750,"depth":142,"text":170751},{"id":170878,"depth":142,"text":170879},{"id":170927,"depth":142,"text":170928},{"id":171076,"depth":142,"text":171077},{"id":171248,"depth":142,"text":171249},{"id":171317,"depth":142,"text":171318},{"id":171428,"depth":142,"text":171429},{"id":171554,"depth":142,"text":171555},{"id":171679,"depth":142,"text":171680},{"id":171734,"depth":142,"text":171735},{"id":171833,"depth":142,"text":171834,"children":172909},[172910,172911,172912,172913],{"id":171837,"depth":1293,"text":171838},{"id":171871,"depth":1293,"text":171872},{"id":171910,"depth":1293,"text":171911},{"id":171989,"depth":1293,"text":171990},{"id":172012,"depth":142,"text":172013,"children":172915},[172916,172917,172918,172919,172920],{"id":172016,"depth":1293,"text":172017},{"id":172099,"depth":1293,"text":172100},{"id":172144,"depth":1293,"text":172145},{"id":172203,"depth":1293,"text":172204},{"id":172241,"depth":1293,"text":172242},{"id":172275,"depth":142,"text":172922},"9.13 if name == \"main\"",{"id":172368,"depth":142,"text":172369},{"id":172413,"depth":142,"text":172414},{"id":172524,"depth":142,"text":172525},{"id":172582,"depth":142,"text":172583},{"id":172839,"depth":142,"text":172840},{"id":172867,"depth":142,"text":172868},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170742,"description":154},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":172935,"title":172936,"body":172937,"description":173100,"extension":155,"meta":173101,"navigation":157,"path":173102,"seo":173103,"stem":173104,"__hash__":173105},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":172938,"toc":173095},[172939,172942,172945,172948,172959,172961,173035,173038,173041,173044,173047,173050,173053,173056,173059,173062,173065],[10,172940,172936],{"id":172941},"python教程",[19,172943,172944],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,172946,172947],{},"建议学习环境：",[183,172949,172950,172953,172956],{},[186,172951,172952],{},"Python 版本：Python 3.10 及以上。",[186,172954,172955],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[186,172957,172958],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,172960,117193],{"id":117193},[183,172962,172963,172969,172975,172981,172987,172993,172999,173005,173011,173017,173023,173029],{},[186,172964,172965],{},[476,172966,172968],{"href":172967},".\u002Fch1-Python","Python环境与第一个程序",[186,172970,172971],{},[476,172972,172974],{"href":172973},".\u002Fch2","基础语法、变量与字符串",[186,172976,172977],{},[476,172978,172980],{"href":172979},".\u002Fch3","判断语句",[186,172982,172983],{},[476,172984,172986],{"href":172985},".\u002Fch4","循环语句",[186,172988,172989],{},[476,172990,172992],{"href":172991},".\u002Fch5","函数基础",[186,172994,172995],{},[476,172996,172998],{"href":172997},".\u002Fch6","数据容器",[186,173000,173001],{},[476,173002,173004],{"href":173003},".\u002Fch7","函数进阶",[186,173006,173007],{},[476,173008,173010],{"href":173009},".\u002Fch8","文件操作",[186,173012,173013],{},[476,173014,173016],{"href":173015},".\u002Fch9","异常、模块与包",[186,173018,173019],{},[476,173020,173022],{"href":173021},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[186,173024,173025],{},[476,173026,173028],{"href":173027},".\u002Fch11","面向对象基础",[186,173030,173031],{},[476,173032,173034],{"href":173033},".\u002Fch12","综合案例与复习路线",[14,173036,173037],{"id":173037},"学习路线",[19,173039,173040],{},"第一阶段：能运行程序。",[19,173042,173043],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,173045,173046],{},"第二阶段：能组织数据。",[19,173048,173049],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,173051,173052],{},"第三阶段：能封装逻辑。",[19,173054,173055],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,173057,173058],{},"第四阶段：能做小项目。",[19,173060,173061],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,173063,173064],{"id":173064},"参考资料",[183,173066,173067,173074,173081,173088],{},[186,173068,173069,173070],{},"黑马程序员 Python 入门教程推荐：",[476,173071,173072],{"href":173072,"rel":173073},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[23980],[186,173075,173076,173077],{},"Python 官方中文教程：",[476,173078,173079],{"href":173079,"rel":173080},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[23980],[186,173082,173083,173084],{},"Python 标准库文档：",[476,173085,173086],{"href":173086,"rel":173087},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[23980],[186,173089,173090,173091],{},"pyecharts 文档：",[476,173092,173093],{"href":173093,"rel":173094},"https:\u002F\u002Fpyecharts.org\u002F",[23980],{"title":141,"searchDepth":142,"depth":142,"links":173096},[173097,173098,173099],{"id":117193,"depth":142,"text":117193},{"id":173037,"depth":142,"text":173037},{"id":173064,"depth":142,"text":173064},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23493},"\u002Fwiki\u002F2024-10-10-python",{"title":172936,"description":173100},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331426776]