[{"data":1,"prerenderedAt":173101},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-12-01-lerobot101-act-suan-fa-fu-xian\u002Fch2-huan-jing-zhun-bei-yu-she-bei-lian-jie":3,"wiki-doc-nav":150},{"id":4,"title":5,"body":6,"description":142,"extension":143,"meta":144,"navigation":145,"path":146,"seo":147,"stem":148,"__hash__":149},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":8,"toc":137},"minimark",[9,13,18,22,30,34,37,54,65,69,102,105,133],[10,11,5],"h1",{"id":12},"_2-环境准备与设备连接",[14,15,17],"h2",{"id":16},"_21-系统与环境","2.1 系统与环境",[19,20,21],"p",{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,23,24,25,29],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[26,27,28],"code",{},"lerobot"," 依赖。",[14,31,33],{"id":32},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,35,36],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[38,39,44],"pre",{"className":40,"code":41,"language":42,"meta":43,"style":43},"language-bash shiki shiki-themes github-light github-dark","lerobot-find-out\n","bash","",[26,45,46],{"__ignoreMap":43},[47,48,51],"span",{"class":49,"line":50},"line",1,[47,52,41],{"class":53},"sScJk",[19,55,56,57,60,61,64],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[26,58,59],{},"\u002Fdev\u002FttyACM0","、",[26,62,63],{},"\u002Fdev\u002FttyACM1","）。",[14,66,68],{"id":67},"_23-串口授权","2.3 串口授权",[38,70,72],{"className":40,"code":71,"language":42,"meta":43,"style":43},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[26,73,74,90],{"__ignoreMap":43},[47,75,76,79,83,87],{"class":49,"line":50},[47,77,78],{"class":53},"sudo",[47,80,82],{"class":81},"sZZnC"," chmod",[47,84,86],{"class":85},"sj4cs"," 666",[47,88,89],{"class":81}," \u002Fdev\u002FttyACM0\n",[47,91,93,95,97,99],{"class":49,"line":92},2,[47,94,78],{"class":53},[47,96,82],{"class":81},[47,98,86],{"class":85},[47,100,101],{"class":81}," \u002Fdev\u002FttyACM1\n",[19,103,104],{},"说明：",[106,107,108,114,120,130],"ul",{},[109,110,111,113],"li",{},[26,112,78],{},"：以 root 权限执行命令。",[109,115,116,119],{},[26,117,118],{},"chmod","：修改设备节点权限。",[109,121,122,125,126,129],{},[26,123,124],{},"666","：",[26,127,128],{},"rw-rw-rw-","，所有用户可读写。",[109,131,132],{},"串口号必须替换为你机器上的真实端口。",[134,135,136],"style",{},"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":43,"searchDepth":92,"depth":92,"links":138},[139,140,141],{"id":16,"depth":92,"text":17},{"id":32,"depth":92,"text":33},{"id":67,"depth":92,"text":68},null,"md",{},true,"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":5,"description":142},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",[151,5255,6363,7783,10772,12123,13612,14701,23464,23476,24073,24099,24223,24464,24529,24547,24560,24607,24693,24862,25061,25241,25446,25582,25677,25714,25727,26037,26778,27486,27507,28527,30158,30309,30322,30334,30635,50447,50462,50479,50512,53384,76732,92877,92898,93011,93132,93902,94565,94926,94964,95070,95170,95213,95239,95300,96954,97055,97080,97571,98071,99151,99434,100176,100678,100690,102706,104370,105873,107571,109488,111407,113429,116899,117331,117794,118543,121487,121835,121857,122213,125520,125532,125935,125958,126105,126272,126477,126778,127335,127992,129923,131521,132170,133664,135095,136330,138024,139776,142186,142302,143237,143448,144333,145568,145796,145809,146964,149376,151744,155065,157542,159186,160963,162976,166028,168208,170735,172929],{"id":152,"title":153,"body":154,"description":43,"extension":143,"meta":5250,"navigation":145,"path":5251,"seo":5252,"stem":5253,"__hash__":5254},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":155,"toc":5222},[156,159,163,166,170,182,186,191,194,197,200,203,206,236,240,243,246,249,252,304,308,326,328,342,345,353,356,1218,1225,1241,1245,1336,1340,1346,1435,1439,1477,1481,1545,1549,1553,1560,1571,1575,1580,1584,1589,1593,1598,1602,1606,1611,1881,1886,2024,2029,2285,2288,2296,2300,2305,2408,2411,2717,2726,2827,2830,2833,2836,2839,3099,3104,3244,3247,3426,3429,3557,3560,3712,3716,3721,3724,3735,3743,3746,3853,3857,3861,3866,3916,3921,3926,3950,3955,4008,4011,4016,4193,4198,4483,4488,4885,4889,4894,4951,4956,4964,4967,5107,5110,5219],[10,157,153],{"id":158},"_1基础入门",[14,160,162],{"id":161},"_11注释","1.1注释",[19,164,165],{},"\u002F\u002F或者\u002F* *\u002F",[14,167,169],{"id":168},"_12命名","1.2命名",[171,172,173,176,179],"ol",{},[109,174,175],{},"字母数字下划线",[109,177,178],{},"开头必须是字母或_",[109,180,181],{},"不能使用关键词",[14,183,185],{"id":184},"_13数据类型","1.3数据类型",[187,188,190],"h3",{"id":189},"_131整形","1.3.1整形",[19,192,193],{},"short 短整形 2",[19,195,196],{},"int 整形 4",[19,198,199],{},"long 长整形 win4 linux32位4 linux64位8",[19,201,202],{},"long long 长长整形 8",[19,204,205],{},"利用sizeof可以求数据类型占用的内存空间大小",[38,207,211],{"className":208,"code":209,"language":210,"meta":43,"style":43},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[26,212,213,229],{"__ignoreMap":43},[47,214,215,219,223,226],{"class":49,"line":50},[47,216,218],{"class":217},"szBVR","sizeof",[47,220,222],{"class":221},"sVt8B","(",[47,224,225],{"class":217},"int",[47,227,228],{"class":221},")\n",[47,230,231,233],{"class":49,"line":92},[47,232,218],{"class":217},[47,234,235],{"class":221},"(num)\n",[187,237,239],{"id":238},"_132浮点型","1.3.2浮点型",[19,241,242],{},"float 单精度 4节 7位有效数字",[19,244,245],{},"double 双精度 8节 15-16有效数字",[19,247,248],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,250,251],{},"注意点：",[38,253,255],{"className":208,"code":254,"language":210,"meta":43,"style":43},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[26,256,257,281],{"__ignoreMap":43},[47,258,259,262,265,268,271,274,277],{"class":49,"line":50},[47,260,261],{"class":217},"float",[47,263,264],{"class":221}," f1",[47,266,267],{"class":217},"=",[47,269,270],{"class":85},"3.14",[47,272,273],{"class":217},"f",[47,275,276],{"class":221},";",[47,278,280],{"class":279},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[47,282,283,285,288,290,293,296,299,301],{"class":49,"line":92},[47,284,261],{"class":217},[47,286,287],{"class":221}," f2",[47,289,267],{"class":217},[47,291,292],{"class":85},"3",[47,294,295],{"class":217},"e",[47,297,298],{"class":85},"2",[47,300,276],{"class":221},[47,302,303],{"class":279}," \u002F\u002F科学记数法\n",[187,305,307],{"id":306},"_133字符型","1.3.3字符型",[38,309,311],{"className":208,"code":310,"language":210,"meta":43,"style":43},"char ch='a'\n",[26,312,313],{"__ignoreMap":43},[47,314,315,318,321,323],{"class":49,"line":50},[47,316,317],{"class":217},"char",[47,319,320],{"class":221}," ch",[47,322,267],{"class":217},[47,324,325],{"class":81},"'a'\n",[19,327,251],{},[171,329,330,333,336,339],{},[109,331,332],{},"在显示字符型变量时，只能单引号，双引号x",[109,334,335],{},"单引号内只能一个字符，不能字符串",[109,337,338],{},"c和c++字符型变量只占用一个字符",[109,340,341],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,343,344],{},"ASCII码大致由以下两部分组成：",[171,346,347,350],{},[109,348,349],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[109,351,352],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,354,355],{},"ASCII码表格：",[357,358,359,403],"table",{},[360,361,362],"thead",{},[363,364,365,373,378,382,387,391,395,399],"tr",{},[366,367,368,372],"th",{},[369,370,371],"strong",{},"ASCII","值",[366,374,375],{},[369,376,377],{},"控制字符",[366,379,380,372],{},[369,381,371],{},[366,383,384],{},[369,385,386],{},"字符",[366,388,389,372],{},[369,390,371],{},[366,392,393],{},[369,394,386],{},[366,396,397,372],{},[369,398,371],{},[366,400,401],{},[369,402,386],{},[404,405,406,432,458,483,508,534,559,584,610,635,661,687,713,738,764,790,816,840,865,890,915,940,965,990,1015,1040,1065,1091,1116,1141,1166,1192],"tbody",{},[363,407,408,412,415,418,421,424,427,430],{},[409,410,411],"td",{},"0",[409,413,414],{},"NUT",[409,416,417],{},"32",[409,419,420],{},"(space)",[409,422,423],{},"64",[409,425,426],{},"@",[409,428,429],{},"96",[409,431,60],{},[363,433,434,437,440,443,446,449,452,455],{},[409,435,436],{},"1",[409,438,439],{},"SOH",[409,441,442],{},"33",[409,444,445],{},"!",[409,447,448],{},"65",[409,450,451],{},"A",[409,453,454],{},"97",[409,456,457],{},"a",[363,459,460,462,465,468,471,474,477,480],{},[409,461,298],{},[409,463,464],{},"STX",[409,466,467],{},"34",[409,469,470],{},"\"",[409,472,473],{},"66",[409,475,476],{},"B",[409,478,479],{},"98",[409,481,482],{},"b",[363,484,485,487,490,493,496,499,502,505],{},[409,486,292],{},[409,488,489],{},"ETX",[409,491,492],{},"35",[409,494,495],{},"#",[409,497,498],{},"67",[409,500,501],{},"C",[409,503,504],{},"99",[409,506,507],{},"c",[363,509,510,513,516,519,522,525,528,531],{},[409,511,512],{},"4",[409,514,515],{},"EOT",[409,517,518],{},"36",[409,520,521],{},"$",[409,523,524],{},"68",[409,526,527],{},"D",[409,529,530],{},"100",[409,532,533],{},"d",[363,535,536,539,542,545,548,551,554,557],{},[409,537,538],{},"5",[409,540,541],{},"ENQ",[409,543,544],{},"37",[409,546,547],{},"%",[409,549,550],{},"69",[409,552,553],{},"E",[409,555,556],{},"101",[409,558,295],{},[363,560,561,564,567,570,573,576,579,582],{},[409,562,563],{},"6",[409,565,566],{},"ACK",[409,568,569],{},"38",[409,571,572],{},"&",[409,574,575],{},"70",[409,577,578],{},"F",[409,580,581],{},"102",[409,583,273],{},[363,585,586,589,592,595,598,601,604,607],{},[409,587,588],{},"7",[409,590,591],{},"BEL",[409,593,594],{},"39",[409,596,597],{},",",[409,599,600],{},"71",[409,602,603],{},"G",[409,605,606],{},"103",[409,608,609],{},"g",[363,611,612,615,618,621,623,626,629,632],{},[409,613,614],{},"8",[409,616,617],{},"BS",[409,619,620],{},"40",[409,622,222],{},[409,624,625],{},"72",[409,627,628],{},"H",[409,630,631],{},"104",[409,633,634],{},"h",[363,636,637,640,643,646,649,652,655,658],{},[409,638,639],{},"9",[409,641,642],{},"HT",[409,644,645],{},"41",[409,647,648],{},")",[409,650,651],{},"73",[409,653,654],{},"I",[409,656,657],{},"105",[409,659,660],{},"i",[363,662,663,666,669,672,675,678,681,684],{},[409,664,665],{},"10",[409,667,668],{},"LF",[409,670,671],{},"42",[409,673,674],{},"*",[409,676,677],{},"74",[409,679,680],{},"J",[409,682,683],{},"106",[409,685,686],{},"j",[363,688,689,692,695,698,701,704,707,710],{},[409,690,691],{},"11",[409,693,694],{},"VT",[409,696,697],{},"43",[409,699,700],{},"+",[409,702,703],{},"75",[409,705,706],{},"K",[409,708,709],{},"107",[409,711,712],{},"k",[363,714,715,718,721,724,726,729,732,735],{},[409,716,717],{},"12",[409,719,720],{},"FF",[409,722,723],{},"44",[409,725,597],{},[409,727,728],{},"76",[409,730,731],{},"L",[409,733,734],{},"108",[409,736,737],{},"l",[363,739,740,743,746,749,752,755,758,761],{},[409,741,742],{},"13",[409,744,745],{},"CR",[409,747,748],{},"45",[409,750,751],{},"-",[409,753,754],{},"77",[409,756,757],{},"M",[409,759,760],{},"109",[409,762,763],{},"m",[363,765,766,769,772,775,778,781,784,787],{},[409,767,768],{},"14",[409,770,771],{},"SO",[409,773,774],{},"46",[409,776,777],{},".",[409,779,780],{},"78",[409,782,783],{},"N",[409,785,786],{},"110",[409,788,789],{},"n",[363,791,792,795,798,801,804,807,810,813],{},[409,793,794],{},"15",[409,796,797],{},"SI",[409,799,800],{},"47",[409,802,803],{},"\u002F",[409,805,806],{},"79",[409,808,809],{},"O",[409,811,812],{},"111",[409,814,815],{},"o",[363,817,818,821,824,827,829,832,835,838],{},[409,819,820],{},"16",[409,822,823],{},"DLE",[409,825,826],{},"48",[409,828,411],{},[409,830,831],{},"80",[409,833,834],{},"P",[409,836,837],{},"112",[409,839,19],{},[363,841,842,845,848,851,853,856,859,862],{},[409,843,844],{},"17",[409,846,847],{},"DCI",[409,849,850],{},"49",[409,852,436],{},[409,854,855],{},"81",[409,857,858],{},"Q",[409,860,861],{},"113",[409,863,864],{},"q",[363,866,867,870,873,876,878,881,884,887],{},[409,868,869],{},"18",[409,871,872],{},"DC2",[409,874,875],{},"50",[409,877,298],{},[409,879,880],{},"82",[409,882,883],{},"R",[409,885,886],{},"114",[409,888,889],{},"r",[363,891,892,895,898,901,903,906,909,912],{},[409,893,894],{},"19",[409,896,897],{},"DC3",[409,899,900],{},"51",[409,902,292],{},[409,904,905],{},"83",[409,907,908],{},"S",[409,910,911],{},"115",[409,913,914],{},"s",[363,916,917,920,923,926,928,931,934,937],{},[409,918,919],{},"20",[409,921,922],{},"DC4",[409,924,925],{},"52",[409,927,512],{},[409,929,930],{},"84",[409,932,933],{},"T",[409,935,936],{},"116",[409,938,939],{},"t",[363,941,942,945,948,951,953,956,959,962],{},[409,943,944],{},"21",[409,946,947],{},"NAK",[409,949,950],{},"53",[409,952,538],{},[409,954,955],{},"85",[409,957,958],{},"U",[409,960,961],{},"117",[409,963,964],{},"u",[363,966,967,970,973,976,978,981,984,987],{},[409,968,969],{},"22",[409,971,972],{},"SYN",[409,974,975],{},"54",[409,977,563],{},[409,979,980],{},"86",[409,982,983],{},"V",[409,985,986],{},"118",[409,988,989],{},"v",[363,991,992,995,998,1001,1003,1006,1009,1012],{},[409,993,994],{},"23",[409,996,997],{},"TB",[409,999,1000],{},"55",[409,1002,588],{},[409,1004,1005],{},"87",[409,1007,1008],{},"W",[409,1010,1011],{},"119",[409,1013,1014],{},"w",[363,1016,1017,1020,1023,1026,1028,1031,1034,1037],{},[409,1018,1019],{},"24",[409,1021,1022],{},"CAN",[409,1024,1025],{},"56",[409,1027,614],{},[409,1029,1030],{},"88",[409,1032,1033],{},"X",[409,1035,1036],{},"120",[409,1038,1039],{},"x",[363,1041,1042,1045,1048,1051,1053,1056,1059,1062],{},[409,1043,1044],{},"25",[409,1046,1047],{},"EM",[409,1049,1050],{},"57",[409,1052,639],{},[409,1054,1055],{},"89",[409,1057,1058],{},"Y",[409,1060,1061],{},"121",[409,1063,1064],{},"y",[363,1066,1067,1070,1073,1076,1079,1082,1085,1088],{},[409,1068,1069],{},"26",[409,1071,1072],{},"SUB",[409,1074,1075],{},"58",[409,1077,1078],{},":",[409,1080,1081],{},"90",[409,1083,1084],{},"Z",[409,1086,1087],{},"122",[409,1089,1090],{},"z",[363,1092,1093,1096,1099,1102,1104,1107,1110,1113],{},[409,1094,1095],{},"27",[409,1097,1098],{},"ESC",[409,1100,1101],{},"59",[409,1103,276],{},[409,1105,1106],{},"91",[409,1108,1109],{},"[",[409,1111,1112],{},"123",[409,1114,1115],{},"{",[363,1117,1118,1121,1124,1127,1130,1133,1135,1138],{},[409,1119,1120],{},"28",[409,1122,1123],{},"FS",[409,1125,1126],{},"60",[409,1128,1129],{},"\u003C",[409,1131,1132],{},"92",[409,1134,803],{},[409,1136,1137],{},"124",[409,1139,1140],{},"|",[363,1142,1143,1146,1149,1152,1154,1157,1160,1163],{},[409,1144,1145],{},"29",[409,1147,1148],{},"GS",[409,1150,1151],{},"61",[409,1153,267],{},[409,1155,1156],{},"93",[409,1158,1159],{},"]",[409,1161,1162],{},"125",[409,1164,1165],{},"}",[363,1167,1168,1171,1174,1177,1180,1183,1186,1189],{},[409,1169,1170],{},"30",[409,1172,1173],{},"RS",[409,1175,1176],{},"62",[409,1178,1179],{},">",[409,1181,1182],{},"94",[409,1184,1185],{},"^",[409,1187,1188],{},"126",[409,1190,1191],{},"`",[363,1193,1194,1197,1200,1203,1206,1209,1212,1215],{},[409,1195,1196],{},"31",[409,1198,1199],{},"US",[409,1201,1202],{},"63",[409,1204,1205],{},"?",[409,1207,1208],{},"95",[409,1210,1211],{},"_",[409,1213,1214],{},"127",[409,1216,1217],{},"DEL",[19,1219,1220,1221,1224],{},"ASCII 码大致由以下",[369,1222,1223],{},"两部分组","成：",[106,1226,1227,1234],{},[109,1228,1229,1230,1233],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[369,1231,1232],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[109,1235,1236,1237,1240],{},"ASCII 打印字符：数字 ",[369,1238,1239],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[187,1242,1244],{"id":1243},"_134转义字符","1.3.4转义字符",[38,1246,1248],{"className":208,"code":1247,"language":210,"meta":43,"style":43},"\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",[26,1249,1250,1255,1271,1286,1292,1306,1312],{"__ignoreMap":43},[47,1251,1252],{"class":49,"line":50},[47,1253,1254],{"class":279},"\u002F\u002F换行符\n",[47,1256,1257,1260,1263,1266,1268],{"class":49,"line":92},[47,1258,1259],{"class":221},"cout ",[47,1261,1262],{"class":217},"\u003C\u003C",[47,1264,1265],{"class":81},"\"hello world\u002Fn\"",[47,1267,276],{"class":221},[47,1269,1270],{"class":279}," \u002F\u002F就等同于如下：\n",[47,1272,1274,1276,1278,1281,1283],{"class":49,"line":1273},3,[47,1275,1259],{"class":221},[47,1277,1262],{"class":217},[47,1279,1280],{"class":81},"\"hello world\"",[47,1282,1262],{"class":217},[47,1284,1285],{"class":221},"endl;\n",[47,1287,1289],{"class":49,"line":1288},4,[47,1290,1291],{"class":279},"\u002F\u002F反斜杠\n",[47,1293,1295,1297,1299,1302,1304],{"class":49,"line":1294},5,[47,1296,1259],{"class":221},[47,1298,1262],{"class":217},[47,1300,1301],{"class":81},"\"\u002F\u002F\"",[47,1303,1262],{"class":217},[47,1305,1285],{"class":221},[47,1307,1309],{"class":49,"line":1308},6,[47,1310,1311],{"class":279},"\u002F\u002F水平制表符\n",[47,1313,1315,1317,1319,1322,1325,1328,1330,1333],{"class":49,"line":1314},7,[47,1316,1259],{"class":221},[47,1318,1262],{"class":217},[47,1320,1321],{"class":81},"\"aaaa",[47,1323,1324],{"class":85},"\\t",[47,1326,1327],{"class":81},"helloworld\"",[47,1329,1262],{"class":217},[47,1331,1332],{"class":221},"endl;",[47,1334,1335],{"class":279}," \u002F\u002F输出窗口时有对齐效果\n",[187,1337,1339],{"id":1338},"_135字符串型","1.3.5字符串型",[19,1341,1342,1343,1345],{},"char 变量名",[47,1344],{},"=\"字符串值\"",[38,1347,1349],{"className":208,"code":1348,"language":210,"meta":43,"style":43},"\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",[26,1350,1351,1356,1361,1366,1371,1385,1398,1403,1409,1421],{"__ignoreMap":43},[47,1352,1353],{"class":49,"line":50},[47,1354,1355],{"class":279},"\u002F\u002Fc风格字符串\n",[47,1357,1358],{"class":49,"line":92},[47,1359,1360],{"class":279},"\u002F\u002F注意事项：\n",[47,1362,1363],{"class":49,"line":1273},[47,1364,1365],{"class":279},"\u002F\u002F1.char字符串名[]\n",[47,1367,1368],{"class":49,"line":1288},[47,1369,1370],{"class":279},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[47,1372,1373,1375,1378,1380,1382],{"class":49,"line":1294},[47,1374,317],{"class":217},[47,1376,1377],{"class":221}," str[]",[47,1379,267],{"class":217},[47,1381,1280],{"class":81},[47,1383,1384],{"class":221},";\n",[47,1386,1387,1389,1391,1394,1396],{"class":49,"line":1308},[47,1388,1259],{"class":221},[47,1390,1262],{"class":217},[47,1392,1393],{"class":221},"str",[47,1395,1262],{"class":217},[47,1397,1285],{"class":221},[47,1399,1400],{"class":49,"line":1314},[47,1401,1402],{"class":279},"\u002F\u002Fc++风格字符串\n",[47,1404,1406],{"class":49,"line":1405},8,[47,1407,1408],{"class":279},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[47,1410,1412,1415,1417,1419],{"class":49,"line":1411},9,[47,1413,1414],{"class":221},"string str2",[47,1416,267],{"class":217},[47,1418,1280],{"class":81},[47,1420,1384],{"class":221},[47,1422,1424,1426,1428,1431,1433],{"class":49,"line":1423},10,[47,1425,1259],{"class":221},[47,1427,1262],{"class":217},[47,1429,1430],{"class":221},"str2",[47,1432,1262],{"class":217},[47,1434,1285],{"class":221},[187,1436,1438],{"id":1437},"_136布尔类型bool","1.3.6布尔类型bool",[38,1440,1442],{"className":208,"code":1441,"language":210,"meta":43,"style":43},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[26,1443,1444,1459],{"__ignoreMap":43},[47,1445,1446,1449,1452,1454,1457],{"class":49,"line":50},[47,1447,1448],{"class":217},"bool",[47,1450,1451],{"class":221}," flag",[47,1453,267],{"class":217},[47,1455,1456],{"class":85},"true",[47,1458,1384],{"class":221},[47,1460,1461,1464,1467,1470,1472,1474],{"class":49,"line":92},[47,1462,1463],{"class":221},"cout",[47,1465,1466],{"class":217},"\u003C\u003Csizeof",[47,1468,1469],{"class":221},"(flag)",[47,1471,1262],{"class":217},[47,1473,1332],{"class":221},[47,1475,1476],{"class":279}," \u002F\u002F查看布尔占内存空间\n",[14,1478,1480],{"id":1479},"_14键盘输入cin","1.4键盘输入cin",[38,1482,1484],{"className":208,"code":1483,"language":210,"meta":43,"style":43},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[26,1485,1486,1499,1516,1527],{"__ignoreMap":43},[47,1487,1488,1490,1493,1495,1497],{"class":49,"line":50},[47,1489,225],{"class":217},[47,1491,1492],{"class":221}," a",[47,1494,267],{"class":217},[47,1496,411],{"class":85},[47,1498,1384],{"class":221},[47,1500,1501,1503,1505,1508,1510,1512,1514],{"class":49,"line":92},[47,1502,1463],{"class":221},[47,1504,1262],{"class":217},[47,1506,1507],{"class":81},"\"请给整型变量a赋值\"",[47,1509,1262],{"class":217},[47,1511,457],{"class":221},[47,1513,1262],{"class":217},[47,1515,1285],{"class":221},[47,1517,1518,1521,1524],{"class":49,"line":1273},[47,1519,1520],{"class":221},"cin ",[47,1522,1523],{"class":217},">>",[47,1525,1526],{"class":221}," a;\n",[47,1528,1529,1531,1533,1536,1539,1541,1543],{"class":49,"line":1288},[47,1530,1259],{"class":221},[47,1532,1262],{"class":217},[47,1534,1535],{"class":81}," \"整型变量a=\"",[47,1537,1538],{"class":217}," \u003C\u003C",[47,1540,457],{"class":221},[47,1542,1262],{"class":217},[47,1544,1285],{"class":221},[14,1546,1548],{"id":1547},"_15运算符","1.5运算符",[187,1550,1552],{"id":1551},"_151算术运算符","1.5.1算术运算符",[19,1554,1555,1559],{},[1556,1557],"img",{"alt":43,"src":1558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[171,1561,1562,1565,1568],{},[109,1563,1564],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[109,1566,1567],{},"两个小数不可以做取模运算",[109,1569,1570],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[187,1572,1574],{"id":1573},"_152赋值运算符","1.5.2赋值运算符",[19,1576,1577],{},[1556,1578],{"alt":43,"src":1579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[187,1581,1583],{"id":1582},"_153比较运算符","1.5.3比较运算符",[19,1585,1586],{},[1556,1587],{"alt":43,"src":1588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[187,1590,1592],{"id":1591},"_154逻辑运算符","1.5.4逻辑运算符",[19,1594,1595],{},[1556,1596],{"alt":43,"src":1597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,1599,1601],{"id":1600},"_16程序流程结构","1.6程序流程结构",[187,1603,1605],{"id":1604},"_161选择结构","1.6.1选择结构",[171,1607,1608],{},[109,1609,1610],{},"if语句\n单行、多行、多条件if语句",[38,1612,1614],{"className":208,"code":1613,"language":210,"meta":43,"style":43},"\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",[26,1615,1616,1621,1636,1641,1655,1660,1665,1674,1687,1691,1704,1709,1715,1720,1734,1739,1745,1766,1771,1785,1790,1819,1824,1841,1846,1851,1856,1870,1875],{"__ignoreMap":43},[47,1617,1618],{"class":49,"line":50},[47,1619,1620],{"class":279},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[47,1622,1623,1626,1629,1631,1634],{"class":49,"line":92},[47,1624,1625],{"class":217},"if",[47,1627,1628],{"class":221},"(score",[47,1630,1179],{"class":217},[47,1632,1633],{"class":85},"600",[47,1635,228],{"class":221},[47,1637,1638],{"class":49,"line":1273},[47,1639,1640],{"class":221},"{\n",[47,1642,1643,1646,1648,1651,1653],{"class":49,"line":1288},[47,1644,1645],{"class":221},"    cout",[47,1647,1262],{"class":217},[47,1649,1650],{"class":81},"'这是单行if语句'",[47,1652,1262],{"class":217},[47,1654,1285],{"class":221},[47,1656,1657],{"class":49,"line":1294},[47,1658,1659],{"class":221},"}\n",[47,1661,1662],{"class":49,"line":1308},[47,1663,1664],{"class":279},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[47,1666,1667,1669,1671],{"class":49,"line":1314},[47,1668,1520],{"class":221},[47,1670,1523],{"class":217},[47,1672,1673],{"class":221}," score\n",[47,1675,1676,1678,1680,1683,1685],{"class":49,"line":1405},[47,1677,1625],{"class":217},[47,1679,1628],{"class":221},[47,1681,1682],{"class":217},"\u003C=",[47,1684,1633],{"class":85},[47,1686,228],{"class":221},[47,1688,1689],{"class":49,"line":1411},[47,1690,1640],{"class":221},[47,1692,1693,1695,1697,1700,1702],{"class":49,"line":1423},[47,1694,1645],{"class":221},[47,1696,1523],{"class":217},[47,1698,1699],{"class":81},"\"小于等于600\"",[47,1701,1262],{"class":217},[47,1703,1285],{"class":221},[47,1705,1707],{"class":49,"line":1706},11,[47,1708,1659],{"class":221},[47,1710,1712],{"class":49,"line":1711},12,[47,1713,1714],{"class":217},"else\n",[47,1716,1718],{"class":49,"line":1717},13,[47,1719,1640],{"class":221},[47,1721,1723,1725,1727,1730,1732],{"class":49,"line":1722},14,[47,1724,1645],{"class":221},[47,1726,1523],{"class":217},[47,1728,1729],{"class":81},"\"大于600\"",[47,1731,1523],{"class":217},[47,1733,1285],{"class":221},[47,1735,1737],{"class":49,"line":1736},15,[47,1738,1659],{"class":221},[47,1740,1742],{"class":49,"line":1741},16,[47,1743,1744],{"class":279},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[47,1746,1748,1750,1753,1755,1757,1760,1762,1764],{"class":49,"line":1747},17,[47,1749,1625],{"class":217},[47,1751,1752],{"class":221}," (",[47,1754,411],{"class":85},[47,1756,1129],{"class":217},[47,1758,1759],{"class":221},"num",[47,1761,1129],{"class":217},[47,1763,530],{"class":85},[47,1765,228],{"class":221},[47,1767,1769],{"class":49,"line":1768},18,[47,1770,1640],{"class":221},[47,1772,1774,1776,1778,1781,1783],{"class":49,"line":1773},19,[47,1775,1645],{"class":221},[47,1777,1262],{"class":217},[47,1779,1780],{"class":81},"\"小于100\"",[47,1782,1262],{"class":217},[47,1784,1285],{"class":221},[47,1786,1788],{"class":49,"line":1787},20,[47,1789,1659],{"class":221},[47,1791,1793,1796,1799,1802,1805,1807,1810,1812,1814,1817],{"class":49,"line":1792},21,[47,1794,1795],{"class":217},"else",[47,1797,1798],{"class":217}," if",[47,1800,1801],{"class":221}," (nmu",[47,1803,1804],{"class":217},">=",[47,1806,530],{"class":85},[47,1808,1809],{"class":217},"&&",[47,1811,1759],{"class":221},[47,1813,1129],{"class":217},[47,1815,1816],{"class":85},"200",[47,1818,228],{"class":221},[47,1820,1822],{"class":49,"line":1821},22,[47,1823,1640],{"class":221},[47,1825,1827,1829,1831,1834,1836,1838],{"class":49,"line":1826},23,[47,1828,1645],{"class":221},[47,1830,1262],{"class":217},[47,1832,1833],{"class":81},"\"不小于100且小于200\"",[47,1835,1262],{"class":217},[47,1837,1332],{"class":221},[47,1839,1840],{"class":279}," \u002F\u002F可以无限else if,python中是elif：\n",[47,1842,1844],{"class":49,"line":1843},24,[47,1845,1659],{"class":221},[47,1847,1849],{"class":49,"line":1848},25,[47,1850,1714],{"class":217},[47,1852,1854],{"class":49,"line":1853},26,[47,1855,1640],{"class":221},[47,1857,1859,1861,1863,1866,1868],{"class":49,"line":1858},27,[47,1860,1645],{"class":221},[47,1862,1262],{"class":217},[47,1864,1865],{"class":81},"\"不小于200\"",[47,1867,1262],{"class":217},[47,1869,1285],{"class":221},[47,1871,1873],{"class":49,"line":1872},28,[47,1874,1659],{"class":221},[47,1876,1878],{"class":49,"line":1877},29,[47,1879,1880],{"class":279},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[171,1882,1883],{"start":92},[109,1884,1885],{},"三目运算符",[38,1887,1889],{"className":208,"code":1888,"language":210,"meta":43,"style":43},"\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",[26,1890,1891,1896,1901,1927,1949,1966,1971,1994,2009],{"__ignoreMap":43},[47,1892,1893],{"class":49,"line":50},[47,1894,1895],{"class":279},"\u002F\u002F创建三个变量a,b,c\n",[47,1897,1898],{"class":49,"line":92},[47,1899,1900],{"class":279},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[47,1902,1903,1905,1907,1909,1911,1914,1916,1918,1921,1923,1925],{"class":49,"line":1273},[47,1904,225],{"class":217},[47,1906,1492],{"class":221},[47,1908,267],{"class":217},[47,1910,919],{"class":85},[47,1912,1913],{"class":221},",b",[47,1915,267],{"class":217},[47,1917,665],{"class":85},[47,1919,1920],{"class":221},",c",[47,1922,267],{"class":217},[47,1924,411],{"class":85},[47,1926,1384],{"class":221},[47,1928,1929,1931,1933,1936,1938,1940,1942,1944,1946],{"class":49,"line":1288},[47,1930,507],{"class":221},[47,1932,267],{"class":217},[47,1934,1935],{"class":221},"(a",[47,1937,1179],{"class":217},[47,1939,482],{"class":221},[47,1941,1205],{"class":217},[47,1943,457],{"class":221},[47,1945,1078],{"class":217},[47,1947,1948],{"class":221},"b)\n",[47,1950,1951,1953,1955,1958,1960,1962,1964],{"class":49,"line":1294},[47,1952,1463],{"class":221},[47,1954,1262],{"class":217},[47,1956,1957],{"class":81},"\"c=\"",[47,1959,1262],{"class":217},[47,1961,507],{"class":221},[47,1963,1262],{"class":217},[47,1965,1285],{"class":221},[47,1967,1968],{"class":49,"line":1308},[47,1969,1970],{"class":279},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[47,1972,1973,1975,1977,1979,1981,1983,1985,1988,1990,1992],{"class":49,"line":1314},[47,1974,1935],{"class":221},[47,1976,1179],{"class":217},[47,1978,482],{"class":221},[47,1980,1205],{"class":217},[47,1982,457],{"class":221},[47,1984,1078],{"class":217},[47,1986,1987],{"class":221},"b)",[47,1989,267],{"class":217},[47,1991,530],{"class":85},[47,1993,1384],{"class":221},[47,1995,1996,1998,2000,2002,2004,2006],{"class":49,"line":1405},[47,1997,1463],{"class":221},[47,1999,1262],{"class":217},[47,2001,457],{"class":221},[47,2003,1262],{"class":217},[47,2005,1332],{"class":221},[47,2007,2008],{"class":279}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[47,2010,2011,2013,2015,2017,2019,2021],{"class":49,"line":1411},[47,2012,1463],{"class":221},[47,2014,1262],{"class":217},[47,2016,482],{"class":221},[47,2018,1262],{"class":217},[47,2020,1332],{"class":221},[47,2022,2023],{"class":279}," \u002F\u002F10   a>b,b还是原值\n",[171,2025,2026],{"start":1273},[109,2027,2028],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[38,2030,2032],{"className":208,"code":2031,"language":210,"meta":43,"style":43},"\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",[26,2033,2034,2039,2047,2060,2070,2074,2088,2101,2111,2119,2124,2149,2170,2192,2213,2235,2256,2276,2281],{"__ignoreMap":43},[47,2035,2036],{"class":49,"line":50},[47,2037,2038],{"class":279},"\u002F\u002F案例-电影打分\n",[47,2040,2041,2044],{"class":49,"line":92},[47,2042,2043],{"class":217},"#include",[47,2045,2046],{"class":81},"\u003Ciostream>\n",[47,2048,2049,2052,2055,2058],{"class":49,"line":1273},[47,2050,2051],{"class":217},"using",[47,2053,2054],{"class":217}," namespace",[47,2056,2057],{"class":53}," std",[47,2059,1384],{"class":221},[47,2061,2062,2064,2067],{"class":49,"line":1288},[47,2063,225],{"class":217},[47,2065,2066],{"class":53}," main",[47,2068,2069],{"class":221},"()\n",[47,2071,2072],{"class":49,"line":1294},[47,2073,1640],{"class":221},[47,2075,2076,2079,2082,2084,2086],{"class":49,"line":1308},[47,2077,2078],{"class":217},"    int",[47,2080,2081],{"class":221}," score",[47,2083,267],{"class":217},[47,2085,411],{"class":85},[47,2087,1384],{"class":221},[47,2089,2090,2092,2094,2097,2099],{"class":49,"line":1314},[47,2091,1645],{"class":221},[47,2093,1262],{"class":217},[47,2095,2096],{"class":81},"\"电影打分：\"",[47,2098,1262],{"class":217},[47,2100,1285],{"class":221},[47,2102,2103,2106,2108],{"class":49,"line":1405},[47,2104,2105],{"class":221},"    cin",[47,2107,1523],{"class":217},[47,2109,2110],{"class":221},"score;\n",[47,2112,2113,2116],{"class":49,"line":1411},[47,2114,2115],{"class":217},"    switch",[47,2117,2118],{"class":221},"(score)\n",[47,2120,2121],{"class":49,"line":1423},[47,2122,2123],{"class":221},"    {\n",[47,2125,2126,2129,2132,2135,2137,2140,2142,2144,2147],{"class":49,"line":1706},[47,2127,2128],{"class":217},"        case",[47,2130,2131],{"class":85}," 10",[47,2133,2134],{"class":221},":cout",[47,2136,1262],{"class":217},[47,2138,2139],{"class":81},"\"经典\"",[47,2141,1262],{"class":217},[47,2143,1332],{"class":221},[47,2145,2146],{"class":217},"break",[47,2148,1384],{"class":221},[47,2150,2151,2153,2156,2158,2160,2162,2164,2166,2168],{"class":49,"line":1711},[47,2152,2128],{"class":217},[47,2154,2155],{"class":85}," 9",[47,2157,2134],{"class":221},[47,2159,1262],{"class":217},[47,2161,2139],{"class":81},[47,2163,1262],{"class":217},[47,2165,1332],{"class":221},[47,2167,2146],{"class":217},[47,2169,1384],{"class":221},[47,2171,2172,2174,2177,2179,2181,2184,2186,2188,2190],{"class":49,"line":1717},[47,2173,2128],{"class":217},[47,2175,2176],{"class":85}," 8",[47,2178,2134],{"class":221},[47,2180,1262],{"class":217},[47,2182,2183],{"class":81},"\"非常好\"",[47,2185,1262],{"class":217},[47,2187,1332],{"class":221},[47,2189,2146],{"class":217},[47,2191,1384],{"class":221},[47,2193,2194,2196,2199,2201,2203,2205,2207,2209,2211],{"class":49,"line":1722},[47,2195,2128],{"class":217},[47,2197,2198],{"class":85}," 7",[47,2200,2134],{"class":221},[47,2202,1262],{"class":217},[47,2204,2183],{"class":81},[47,2206,1262],{"class":217},[47,2208,1332],{"class":221},[47,2210,2146],{"class":217},[47,2212,1384],{"class":221},[47,2214,2215,2217,2220,2222,2224,2227,2229,2231,2233],{"class":49,"line":1736},[47,2216,2128],{"class":217},[47,2218,2219],{"class":85}," 6",[47,2221,2134],{"class":221},[47,2223,1262],{"class":217},[47,2225,2226],{"class":81},"\"一般\"",[47,2228,1262],{"class":217},[47,2230,1332],{"class":221},[47,2232,2146],{"class":217},[47,2234,1384],{"class":221},[47,2236,2237,2239,2242,2244,2246,2248,2250,2252,2254],{"class":49,"line":1741},[47,2238,2128],{"class":217},[47,2240,2241],{"class":85}," 5",[47,2243,2134],{"class":221},[47,2245,1262],{"class":217},[47,2247,2226],{"class":81},[47,2249,1262],{"class":217},[47,2251,1332],{"class":221},[47,2253,2146],{"class":217},[47,2255,1384],{"class":221},[47,2257,2258,2261,2263,2265,2268,2270,2272,2274],{"class":49,"line":1747},[47,2259,2260],{"class":217},"        default",[47,2262,2134],{"class":221},[47,2264,1262],{"class":217},[47,2266,2267],{"class":81},"\"烂片\"",[47,2269,1262],{"class":217},[47,2271,1332],{"class":221},[47,2273,2146],{"class":217},[47,2275,1384],{"class":221},[47,2277,2278],{"class":49,"line":1768},[47,2279,2280],{"class":221},"    }\n",[47,2282,2283],{"class":49,"line":1773},[47,2284,1659],{"class":221},[19,2286,2287],{},"if和switch区别：",[106,2289,2290,2293],{},[109,2291,2292],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[109,2294,2295],{},"switch优点：结构清晰，执行效率高",[187,2297,2299],{"id":2298},"_162循环结构","1.6.2循环结构",[171,2301,2302],{},[109,2303,2304],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[38,2306,2308],{"className":208,"code":2307,"language":210,"meta":43,"style":43},"\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",[26,2309,2310,2315,2323,2327,2340,2354,2358,2378,2388,2392,2404],{"__ignoreMap":43},[47,2311,2312],{"class":49,"line":50},[47,2313,2314],{"class":279},"\u002F\u002F打印0-9数字\n",[47,2316,2317,2319,2321],{"class":49,"line":92},[47,2318,225],{"class":217},[47,2320,2066],{"class":53},[47,2322,2069],{"class":221},[47,2324,2325],{"class":49,"line":1273},[47,2326,1640],{"class":221},[47,2328,2329,2331,2334,2336,2338],{"class":49,"line":1288},[47,2330,2078],{"class":217},[47,2332,2333],{"class":221}," num",[47,2335,267],{"class":217},[47,2337,411],{"class":85},[47,2339,1384],{"class":221},[47,2341,2342,2345,2348,2350,2352],{"class":49,"line":1294},[47,2343,2344],{"class":217},"    while",[47,2346,2347],{"class":221},"(num",[47,2349,1129],{"class":217},[47,2351,665],{"class":85},[47,2353,228],{"class":221},[47,2355,2356],{"class":49,"line":1308},[47,2357,2123],{"class":221},[47,2359,2360,2363,2366,2368,2370,2372,2375],{"class":49,"line":1314},[47,2361,2362],{"class":53},"       std",[47,2364,2365],{"class":221},"::cout",[47,2367,1262],{"class":217},[47,2369,1759],{"class":221},[47,2371,1262],{"class":217},[47,2373,2374],{"class":53},"std",[47,2376,2377],{"class":221},"::endl;\n",[47,2379,2380,2383,2386],{"class":49,"line":1405},[47,2381,2382],{"class":221},"        num",[47,2384,2385],{"class":217},"++",[47,2387,1384],{"class":221},[47,2389,2390],{"class":49,"line":1411},[47,2391,2280],{"class":221},[47,2393,2394,2397,2399,2402],{"class":49,"line":1423},[47,2395,2396],{"class":53},"    system",[47,2398,222],{"class":221},[47,2400,2401],{"class":81},"\"pause\"",[47,2403,228],{"class":221},[47,2405,2406],{"class":49,"line":1706},[47,2407,1659],{"class":221},[19,2409,2410],{},"注意：写好循环条件，避免死循环情况",[38,2412,2414],{"className":208,"code":2413,"language":210,"meta":43,"style":43},"\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",[26,2415,2416,2421,2428,2435,2445,2453,2457,2462,2489,2494,2499,2507,2534,2539,2544,2557,2567,2571,2581,2586,2599,2604,2618,2623,2638,2642,2655,2659,2664,2668,2682,2690,2695,2701,2707,2712],{"__ignoreMap":43},[47,2417,2418],{"class":49,"line":50},[47,2419,2420],{"class":279},"\u002F\u002F循环结构-猜数字\n",[47,2422,2423,2425],{"class":49,"line":92},[47,2424,2043],{"class":217},[47,2426,2427],{"class":81}," \u003Ciostream>\n",[47,2429,2430,2432],{"class":49,"line":1273},[47,2431,2043],{"class":217},[47,2433,2434],{"class":81}," \u003Cctime>\n",[47,2436,2437,2439,2441,2443],{"class":49,"line":1288},[47,2438,2051],{"class":217},[47,2440,2054],{"class":217},[47,2442,2057],{"class":53},[47,2444,1384],{"class":221},[47,2446,2447,2449,2451],{"class":49,"line":1294},[47,2448,225],{"class":217},[47,2450,2066],{"class":53},[47,2452,2069],{"class":221},[47,2454,2455],{"class":49,"line":1308},[47,2456,1640],{"class":221},[47,2458,2459],{"class":49,"line":1314},[47,2460,2461],{"class":279},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[47,2463,2464,2467,2470,2473,2476,2478,2481,2483,2486],{"class":49,"line":1405},[47,2465,2466],{"class":53},"    srand",[47,2468,2469],{"class":221},"((",[47,2471,2472],{"class":217},"unsigned",[47,2474,2475],{"class":217}," int",[47,2477,648],{"class":221},[47,2479,2480],{"class":53},"time",[47,2482,222],{"class":221},[47,2484,2485],{"class":85},"NULL",[47,2487,2488],{"class":221},"));\n",[47,2490,2491],{"class":49,"line":1411},[47,2492,2493],{"emptyLinePlaceholder":145},"\n",[47,2495,2496],{"class":49,"line":1423},[47,2497,2498],{"class":279},"    \u002F\u002F1.系统生成随机数\n",[47,2500,2501,2504],{"class":49,"line":1706},[47,2502,2503],{"class":279},"    \u002F\u002Frand()%100",[47,2505,2506],{"class":279}," \u002F\u002F生成0-99的随机数\n",[47,2508,2509,2511,2513,2515,2518,2521,2523,2525,2527,2529,2531],{"class":49,"line":1711},[47,2510,2078],{"class":217},[47,2512,2333],{"class":221},[47,2514,267],{"class":217},[47,2516,2517],{"class":53},"rand",[47,2519,2520],{"class":221},"()",[47,2522,547],{"class":217},[47,2524,530],{"class":85},[47,2526,700],{"class":217},[47,2528,436],{"class":85},[47,2530,276],{"class":221},[47,2532,2533],{"class":279}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[47,2535,2536],{"class":49,"line":1717},[47,2537,2538],{"class":279},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[47,2540,2541],{"class":49,"line":1722},[47,2542,2543],{"class":279},"    \u002F\u002F2.玩家猜测\n",[47,2545,2546,2548,2551,2553,2555],{"class":49,"line":1736},[47,2547,2078],{"class":217},[47,2549,2550],{"class":221}," val",[47,2552,267],{"class":217},[47,2554,411],{"class":85},[47,2556,1384],{"class":221},[47,2558,2559,2561,2563,2565],{"class":49,"line":1741},[47,2560,2344],{"class":217},[47,2562,1752],{"class":221},[47,2564,436],{"class":85},[47,2566,228],{"class":221},[47,2568,2569],{"class":49,"line":1747},[47,2570,2123],{"class":221},[47,2572,2573,2576,2578],{"class":49,"line":1768},[47,2574,2575],{"class":221},"        cin",[47,2577,1523],{"class":217},[47,2579,2580],{"class":221},"val;\n",[47,2582,2583],{"class":49,"line":1773},[47,2584,2585],{"class":279},"        \u002F\u002F3.判断玩家猜测\n",[47,2587,2588,2591,2594,2596],{"class":49,"line":1787},[47,2589,2590],{"class":217},"        if",[47,2592,2593],{"class":221},"(val",[47,2595,1129],{"class":217},[47,2597,2598],{"class":221},"num) \n",[47,2600,2601],{"class":49,"line":1792},[47,2602,2603],{"class":221},"        {\n",[47,2605,2606,2609,2611,2614,2616],{"class":49,"line":1821},[47,2607,2608],{"class":221},"            cout",[47,2610,1262],{"class":217},[47,2612,2613],{"class":81},"\"猜小了！\"",[47,2615,1262],{"class":217},[47,2617,1285],{"class":221},[47,2619,2620],{"class":49,"line":1826},[47,2621,2622],{"class":221},"        }\n",[47,2624,2625,2628,2630,2633,2635],{"class":49,"line":1843},[47,2626,2627],{"class":217},"        else",[47,2629,1798],{"class":217},[47,2631,2632],{"class":221}," (val",[47,2634,1179],{"class":217},[47,2636,2637],{"class":221},"num)\n",[47,2639,2640],{"class":49,"line":1848},[47,2641,2603],{"class":221},[47,2643,2644,2646,2648,2651,2653],{"class":49,"line":1853},[47,2645,2608],{"class":221},[47,2647,1262],{"class":217},[47,2649,2650],{"class":81},"\"猜大了！\"",[47,2652,1262],{"class":217},[47,2654,1285],{"class":221},[47,2656,2657],{"class":49,"line":1858},[47,2658,2622],{"class":221},[47,2660,2661],{"class":49,"line":1872},[47,2662,2663],{"class":217},"        else\n",[47,2665,2666],{"class":49,"line":1877},[47,2667,2603],{"class":221},[47,2669,2671,2673,2675,2678,2680],{"class":49,"line":2670},30,[47,2672,2608],{"class":221},[47,2674,1262],{"class":217},[47,2676,2677],{"class":81},"\"猜对了！\"",[47,2679,1262],{"class":217},[47,2681,1285],{"class":221},[47,2683,2685,2688],{"class":49,"line":2684},31,[47,2686,2687],{"class":217},"            break",[47,2689,1384],{"class":221},[47,2691,2693],{"class":49,"line":2692},32,[47,2694,2622],{"class":221},[47,2696,2698],{"class":49,"line":2697},33,[47,2699,2700],{"class":279},"        \u002F\u002F猜对 退出游戏\n",[47,2702,2704],{"class":49,"line":2703},34,[47,2705,2706],{"class":279},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[47,2708,2710],{"class":49,"line":2709},35,[47,2711,2280],{"class":221},[47,2713,2715],{"class":49,"line":2714},36,[47,2716,1659],{"class":221},[171,2718,2719],{"start":92},[109,2720,2721,2722,2725],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[369,2723,2724],{},"do...while会先执行一次循环语句","，在判断循环语句",[38,2727,2729],{"className":208,"code":2728,"language":210,"meta":43,"style":43},"\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",[26,2730,2731,2736,2744,2748,2760,2768,2772,2789,2796,2800,2813,2823],{"__ignoreMap":43},[47,2732,2733],{"class":49,"line":50},[47,2734,2735],{"class":279},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[47,2737,2738,2740,2742],{"class":49,"line":92},[47,2739,225],{"class":217},[47,2741,2066],{"class":53},[47,2743,2069],{"class":221},[47,2745,2746],{"class":49,"line":1273},[47,2747,1640],{"class":221},[47,2749,2750,2752,2754,2756,2758],{"class":49,"line":1288},[47,2751,2078],{"class":217},[47,2753,2333],{"class":221},[47,2755,267],{"class":217},[47,2757,411],{"class":85},[47,2759,1384],{"class":221},[47,2761,2762,2765],{"class":49,"line":1294},[47,2763,2764],{"class":217},"    do",[47,2766,2767],{"class":221}," \n",[47,2769,2770],{"class":49,"line":1308},[47,2771,2123],{"class":221},[47,2773,2774,2777,2779,2781,2783,2785,2787],{"class":49,"line":1314},[47,2775,2776],{"class":53},"        std",[47,2778,2365],{"class":221},[47,2780,1262],{"class":217},[47,2782,1759],{"class":221},[47,2784,1262],{"class":217},[47,2786,2374],{"class":53},[47,2788,2377],{"class":221},[47,2790,2791,2793],{"class":49,"line":1405},[47,2792,2382],{"class":221},[47,2794,2795],{"class":217},"++\n",[47,2797,2798],{"class":49,"line":1411},[47,2799,2280],{"class":221},[47,2801,2802,2804,2806,2808,2810],{"class":49,"line":1423},[47,2803,2344],{"class":217},[47,2805,2347],{"class":221},[47,2807,1129],{"class":217},[47,2809,665],{"class":85},[47,2811,2812],{"class":221},");\n",[47,2814,2815,2817,2819,2821],{"class":49,"line":1706},[47,2816,2396],{"class":53},[47,2818,222],{"class":221},[47,2820,2401],{"class":81},[47,2822,2812],{"class":221},[47,2824,2825],{"class":49,"line":1711},[47,2826,1659],{"class":221},[19,2828,2829],{},"案例-水仙花数",[19,2831,2832],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,2834,2835],{},"例如：1^3+5^3+3^3=153",[19,2837,2838],{},"请用do...while语句，求出所有3位数的水仙花数",[38,2840,2842],{"className":208,"code":2841,"language":210,"meta":43,"style":43},"#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",[26,2843,2844,2850,2860,2868,2872,2877,2889,2895,2899,2904,2920,2936,2952,2967,2986,3001,3049,3053,3065,3069,3077,3081,3095],{"__ignoreMap":43},[47,2845,2846,2848],{"class":49,"line":50},[47,2847,2043],{"class":217},[47,2849,2427],{"class":81},[47,2851,2852,2854,2856,2858],{"class":49,"line":92},[47,2853,2051],{"class":217},[47,2855,2054],{"class":217},[47,2857,2057],{"class":53},[47,2859,1384],{"class":221},[47,2861,2862,2864,2866],{"class":49,"line":1273},[47,2863,225],{"class":217},[47,2865,2066],{"class":53},[47,2867,2069],{"class":221},[47,2869,2870],{"class":49,"line":1288},[47,2871,1640],{"class":221},[47,2873,2874],{"class":49,"line":1294},[47,2875,2876],{"class":279},"    \u002F\u002F1.先打印所有三位数字\n",[47,2878,2879,2881,2883,2885,2887],{"class":49,"line":1308},[47,2880,2078],{"class":217},[47,2882,2333],{"class":221},[47,2884,267],{"class":217},[47,2886,530],{"class":85},[47,2888,1384],{"class":221},[47,2890,2891,2893],{"class":49,"line":1314},[47,2892,2764],{"class":217},[47,2894,2767],{"class":221},[47,2896,2897],{"class":49,"line":1405},[47,2898,2123],{"class":221},[47,2900,2901],{"class":49,"line":1411},[47,2902,2903],{"class":279},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[47,2905,2906,2909,2911,2913,2915,2917],{"class":49,"line":1423},[47,2907,2908],{"class":217},"        int",[47,2910,1492],{"class":221},[47,2912,267],{"class":217},[47,2914,411],{"class":85},[47,2916,276],{"class":221},[47,2918,2919],{"class":279}," \u002F\u002F个位\n",[47,2921,2922,2924,2927,2929,2931,2933],{"class":49,"line":1706},[47,2923,2908],{"class":217},[47,2925,2926],{"class":221}," b",[47,2928,267],{"class":217},[47,2930,411],{"class":85},[47,2932,276],{"class":221},[47,2934,2935],{"class":279}," \u002F\u002F十位\n",[47,2937,2938,2940,2943,2945,2947,2949],{"class":49,"line":1711},[47,2939,2908],{"class":217},[47,2941,2942],{"class":221}," c",[47,2944,267],{"class":217},[47,2946,411],{"class":85},[47,2948,276],{"class":221},[47,2950,2951],{"class":279}," \u002F\u002F百位\n",[47,2953,2954,2957,2959,2961,2963,2965],{"class":49,"line":1717},[47,2955,2956],{"class":221},"        a",[47,2958,267],{"class":217},[47,2960,1759],{"class":221},[47,2962,547],{"class":217},[47,2964,665],{"class":85},[47,2966,1384],{"class":221},[47,2968,2969,2972,2974,2976,2978,2980,2982,2984],{"class":49,"line":1722},[47,2970,2971],{"class":221},"        b",[47,2973,267],{"class":217},[47,2975,1759],{"class":221},[47,2977,803],{"class":217},[47,2979,665],{"class":85},[47,2981,547],{"class":217},[47,2983,665],{"class":85},[47,2985,1384],{"class":221},[47,2987,2988,2991,2993,2995,2997,2999],{"class":49,"line":1736},[47,2989,2990],{"class":221},"        c",[47,2992,267],{"class":217},[47,2994,1759],{"class":221},[47,2996,803],{"class":217},[47,2998,530],{"class":85},[47,3000,1384],{"class":221},[47,3002,3003,3005,3007,3009,3011,3013,3015,3017,3019,3021,3023,3025,3027,3029,3031,3033,3035,3037,3040,3043,3046],{"class":49,"line":1741},[47,3004,2590],{"class":217},[47,3006,1935],{"class":221},[47,3008,674],{"class":217},[47,3010,457],{"class":221},[47,3012,674],{"class":217},[47,3014,457],{"class":221},[47,3016,700],{"class":217},[47,3018,482],{"class":221},[47,3020,674],{"class":217},[47,3022,482],{"class":221},[47,3024,674],{"class":217},[47,3026,482],{"class":221},[47,3028,700],{"class":217},[47,3030,507],{"class":221},[47,3032,674],{"class":217},[47,3034,507],{"class":221},[47,3036,674],{"class":217},[47,3038,3039],{"class":221},"c ",[47,3041,3042],{"class":217},"==",[47,3044,3045],{"class":221}," num)",[47,3047,3048],{"class":279}," \u002F\u002F如果是水仙花数，才打印\n",[47,3050,3051],{"class":49,"line":1747},[47,3052,2603],{"class":221},[47,3054,3055,3057,3059,3061,3063],{"class":49,"line":1768},[47,3056,2608],{"class":221},[47,3058,1262],{"class":217},[47,3060,1759],{"class":221},[47,3062,1262],{"class":217},[47,3064,1285],{"class":221},[47,3066,3067],{"class":49,"line":1773},[47,3068,2622],{"class":221},[47,3070,3071,3073,3075],{"class":49,"line":1787},[47,3072,2382],{"class":221},[47,3074,2385],{"class":217},[47,3076,1384],{"class":221},[47,3078,3079],{"class":49,"line":1792},[47,3080,2280],{"class":221},[47,3082,3083,3085,3088,3090,3093],{"class":49,"line":1821},[47,3084,2344],{"class":217},[47,3086,3087],{"class":221}," (num ",[47,3089,1129],{"class":217},[47,3091,3092],{"class":85}," 1000",[47,3094,2812],{"class":221},[47,3096,3097],{"class":49,"line":1826},[47,3098,1659],{"class":221},[171,3100,3101],{"start":1273},[109,3102,3103],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[38,3105,3107],{"className":208,"code":3106,"language":210,"meta":43,"style":43},"\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",[26,3108,3109,3114,3143,3147,3159,3163,3168,3179,3186,3190,3204,3208,3215,3219,3231,3240],{"__ignoreMap":43},[47,3110,3111],{"class":49,"line":50},[47,3112,3113],{"class":279},"\u002F\u002F从数字0-9打印\n",[47,3115,3116,3119,3121,3123,3126,3128,3130,3133,3135,3137,3139,3141],{"class":49,"line":92},[47,3117,3118],{"class":217},"for",[47,3120,222],{"class":221},[47,3122,225],{"class":217},[47,3124,3125],{"class":221}," i",[47,3127,267],{"class":217},[47,3129,411],{"class":85},[47,3131,3132],{"class":221},";i",[47,3134,1129],{"class":217},[47,3136,665],{"class":85},[47,3138,3132],{"class":221},[47,3140,2385],{"class":217},[47,3142,228],{"class":221},[47,3144,3145],{"class":49,"line":1273},[47,3146,1640],{"class":221},[47,3148,3149,3151,3153,3155,3157],{"class":49,"line":1288},[47,3150,1645],{"class":221},[47,3152,1262],{"class":217},[47,3154,660],{"class":221},[47,3156,1262],{"class":217},[47,3158,1285],{"class":221},[47,3160,3161],{"class":49,"line":1294},[47,3162,1659],{"class":221},[47,3164,3165],{"class":49,"line":1308},[47,3166,3167],{"class":279},"\u002F\u002F上式可以进行拆分\n",[47,3169,3170,3172,3174,3176],{"class":49,"line":1314},[47,3171,225],{"class":217},[47,3173,3125],{"class":221},[47,3175,267],{"class":217},[47,3177,3178],{"class":85},"0\n",[47,3180,3181,3183],{"class":49,"line":1405},[47,3182,3118],{"class":217},[47,3184,3185],{"class":221},"(;;;)\n",[47,3187,3188],{"class":49,"line":1411},[47,3189,1640],{"class":221},[47,3191,3192,3195,3198,3200,3202],{"class":49,"line":1423},[47,3193,3194],{"class":217},"    if",[47,3196,3197],{"class":221},"(i",[47,3199,1804],{"class":217},[47,3201,665],{"class":85},[47,3203,228],{"class":221},[47,3205,3206],{"class":49,"line":1706},[47,3207,2123],{"class":221},[47,3209,3210,3213],{"class":49,"line":1711},[47,3211,3212],{"class":217},"        break",[47,3214,1384],{"class":221},[47,3216,3217],{"class":49,"line":1717},[47,3218,2280],{"class":221},[47,3220,3221,3223,3225,3227,3229],{"class":49,"line":1722},[47,3222,1645],{"class":221},[47,3224,1262],{"class":217},[47,3226,660],{"class":221},[47,3228,1262],{"class":217},[47,3230,1285],{"class":221},[47,3232,3233,3236,3238],{"class":49,"line":1736},[47,3234,3235],{"class":221},"    i",[47,3237,2385],{"class":217},[47,3239,1384],{"class":221},[47,3241,3242],{"class":49,"line":1741},[47,3243,1659],{"class":221},[19,3245,3246],{},"小练习",[38,3248,3250],{"className":208,"code":3249,"language":210,"meta":43,"style":43},"#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",[26,3251,3252,3258,3268,3276,3280,3285,3290,3318,3322,3327,3332,3373,3377,3390,3394,3398,3402,3414,3418,3422],{"__ignoreMap":43},[47,3253,3254,3256],{"class":49,"line":50},[47,3255,2043],{"class":217},[47,3257,2046],{"class":81},[47,3259,3260,3262,3264,3266],{"class":49,"line":92},[47,3261,2051],{"class":217},[47,3263,2054],{"class":217},[47,3265,2057],{"class":53},[47,3267,1384],{"class":221},[47,3269,3270,3272,3274],{"class":49,"line":1273},[47,3271,225],{"class":217},[47,3273,2066],{"class":53},[47,3275,2069],{"class":221},[47,3277,3278],{"class":49,"line":1288},[47,3279,1640],{"class":221},[47,3281,3282],{"class":49,"line":1294},[47,3283,3284],{"class":279},"    \u002F\u002F敲桌子案例\n",[47,3286,3287],{"class":49,"line":1308},[47,3288,3289],{"class":279},"    \u002F\u002F1.先输出1-100的数字\n",[47,3291,3292,3295,3297,3299,3301,3303,3305,3308,3310,3312,3314,3316],{"class":49,"line":1314},[47,3293,3294],{"class":217},"    for",[47,3296,222],{"class":221},[47,3298,225],{"class":217},[47,3300,3125],{"class":221},[47,3302,267],{"class":217},[47,3304,436],{"class":85},[47,3306,3307],{"class":221},"; i",[47,3309,1682],{"class":217},[47,3311,530],{"class":85},[47,3313,3307],{"class":221},[47,3315,2385],{"class":217},[47,3317,228],{"class":221},[47,3319,3320],{"class":49,"line":1405},[47,3321,2123],{"class":221},[47,3323,3324],{"class":49,"line":1411},[47,3325,3326],{"class":279},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[47,3328,3329],{"class":49,"line":1423},[47,3330,3331],{"class":279},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[47,3333,3334,3336,3338,3340,3342,3344,3346,3349,3351,3353,3355,3357,3359,3361,3363,3365,3367,3369,3371],{"class":49,"line":1706},[47,3335,2590],{"class":217},[47,3337,3197],{"class":221},[47,3339,547],{"class":217},[47,3341,588],{"class":85},[47,3343,3042],{"class":217},[47,3345,411],{"class":85},[47,3347,3348],{"class":217}," ||",[47,3350,3125],{"class":221},[47,3352,547],{"class":217},[47,3354,665],{"class":85},[47,3356,3042],{"class":217},[47,3358,588],{"class":85},[47,3360,3348],{"class":217},[47,3362,3125],{"class":221},[47,3364,803],{"class":217},[47,3366,665],{"class":85},[47,3368,3042],{"class":217},[47,3370,588],{"class":85},[47,3372,228],{"class":221},[47,3374,3375],{"class":49,"line":1711},[47,3376,2603],{"class":221},[47,3378,3379,3381,3383,3386,3388],{"class":49,"line":1717},[47,3380,2608],{"class":221},[47,3382,1262],{"class":217},[47,3384,3385],{"class":81},"\"敲桌子\"",[47,3387,1262],{"class":217},[47,3389,1285],{"class":221},[47,3391,3392],{"class":49,"line":1722},[47,3393,2622],{"class":221},[47,3395,3396],{"class":49,"line":1736},[47,3397,2663],{"class":217},[47,3399,3400],{"class":49,"line":1741},[47,3401,2603],{"class":221},[47,3403,3404,3406,3408,3410,3412],{"class":49,"line":1747},[47,3405,2608],{"class":221},[47,3407,1262],{"class":217},[47,3409,660],{"class":221},[47,3411,1262],{"class":217},[47,3413,1285],{"class":221},[47,3415,3416],{"class":49,"line":1768},[47,3417,2622],{"class":221},[47,3419,3420],{"class":49,"line":1773},[47,3421,2280],{"class":221},[47,3423,3424],{"class":49,"line":1787},[47,3425,1659],{"class":221},[19,3427,3428],{},"嵌套实现星图",[38,3430,3432],{"className":208,"code":3431,"language":210,"meta":43,"style":43},"#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",[26,3433,3434,3440,3450,3458,3462,3488,3492,3521,3525,3536,3540,3549,3553],{"__ignoreMap":43},[47,3435,3436,3438],{"class":49,"line":50},[47,3437,2043],{"class":217},[47,3439,2046],{"class":81},[47,3441,3442,3444,3446,3448],{"class":49,"line":92},[47,3443,2051],{"class":217},[47,3445,2054],{"class":217},[47,3447,2057],{"class":53},[47,3449,1384],{"class":221},[47,3451,3452,3454,3456],{"class":49,"line":1273},[47,3453,225],{"class":217},[47,3455,2066],{"class":53},[47,3457,2069],{"class":221},[47,3459,3460],{"class":49,"line":1288},[47,3461,1640],{"class":221},[47,3463,3464,3466,3468,3470,3472,3474,3476,3478,3480,3482,3484,3486],{"class":49,"line":1294},[47,3465,3294],{"class":217},[47,3467,1752],{"class":221},[47,3469,225],{"class":217},[47,3471,3125],{"class":221},[47,3473,267],{"class":217},[47,3475,411],{"class":85},[47,3477,3132],{"class":221},[47,3479,1129],{"class":217},[47,3481,665],{"class":85},[47,3483,3132],{"class":221},[47,3485,2385],{"class":217},[47,3487,228],{"class":221},[47,3489,3490],{"class":49,"line":1308},[47,3491,2123],{"class":221},[47,3493,3494,3497,3499,3501,3504,3506,3508,3511,3513,3515,3517,3519],{"class":49,"line":1314},[47,3495,3496],{"class":217},"        for",[47,3498,1752],{"class":221},[47,3500,225],{"class":217},[47,3502,3503],{"class":221}," j",[47,3505,267],{"class":217},[47,3507,411],{"class":85},[47,3509,3510],{"class":221},";j",[47,3512,1129],{"class":217},[47,3514,665],{"class":85},[47,3516,3510],{"class":221},[47,3518,2385],{"class":217},[47,3520,228],{"class":221},[47,3522,3523],{"class":49,"line":1405},[47,3524,2603],{"class":221},[47,3526,3527,3529,3531,3534],{"class":49,"line":1411},[47,3528,2608],{"class":221},[47,3530,1262],{"class":217},[47,3532,3533],{"class":81},"\"*\"",[47,3535,1384],{"class":221},[47,3537,3538],{"class":49,"line":1423},[47,3539,2622],{"class":221},[47,3541,3542,3545,3547],{"class":49,"line":1706},[47,3543,3544],{"class":221},"        cout",[47,3546,1262],{"class":217},[47,3548,1285],{"class":221},[47,3550,3551],{"class":49,"line":1711},[47,3552,2280],{"class":221},[47,3554,3555],{"class":49,"line":1717},[47,3556,1659],{"class":221},[19,3558,3559],{},"乘法口诀表",[38,3561,3563],{"className":208,"code":3562,"language":210,"meta":43,"style":43},"#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",[26,3564,3565,3571,3581,3589,3593,3619,3623,3648,3652,3692,3696,3704,3708],{"__ignoreMap":43},[47,3566,3567,3569],{"class":49,"line":50},[47,3568,2043],{"class":217},[47,3570,2427],{"class":81},[47,3572,3573,3575,3577,3579],{"class":49,"line":92},[47,3574,2051],{"class":217},[47,3576,2054],{"class":217},[47,3578,2057],{"class":53},[47,3580,1384],{"class":221},[47,3582,3583,3585,3587],{"class":49,"line":1273},[47,3584,225],{"class":217},[47,3586,2066],{"class":53},[47,3588,2069],{"class":221},[47,3590,3591],{"class":49,"line":1288},[47,3592,1640],{"class":221},[47,3594,3595,3597,3599,3601,3603,3605,3607,3609,3611,3613,3615,3617],{"class":49,"line":1294},[47,3596,3294],{"class":217},[47,3598,222],{"class":221},[47,3600,225],{"class":217},[47,3602,3125],{"class":221},[47,3604,267],{"class":217},[47,3606,436],{"class":85},[47,3608,3132],{"class":221},[47,3610,1129],{"class":217},[47,3612,665],{"class":85},[47,3614,3132],{"class":221},[47,3616,2385],{"class":217},[47,3618,228],{"class":221},[47,3620,3621],{"class":49,"line":1308},[47,3622,2123],{"class":221},[47,3624,3625,3627,3629,3631,3633,3635,3637,3639,3641,3644,3646],{"class":49,"line":1314},[47,3626,3496],{"class":217},[47,3628,222],{"class":221},[47,3630,225],{"class":217},[47,3632,3503],{"class":221},[47,3634,267],{"class":217},[47,3636,436],{"class":85},[47,3638,3510],{"class":221},[47,3640,1682],{"class":217},[47,3642,3643],{"class":221},"i;j",[47,3645,2385],{"class":217},[47,3647,228],{"class":221},[47,3649,3650],{"class":49,"line":1405},[47,3651,2603],{"class":221},[47,3653,3654,3656,3658,3660,3662,3664,3666,3668,3670,3673,3675,3677,3679,3681,3683,3686,3688,3690],{"class":49,"line":1411},[47,3655,2608],{"class":221},[47,3657,1262],{"class":217},[47,3659,686],{"class":221},[47,3661,1262],{"class":217},[47,3663,3533],{"class":81},[47,3665,1262],{"class":217},[47,3667,660],{"class":221},[47,3669,1262],{"class":217},[47,3671,3672],{"class":81},"\"=\"",[47,3674,1262],{"class":217},[47,3676,660],{"class":221},[47,3678,674],{"class":217},[47,3680,686],{"class":221},[47,3682,1262],{"class":217},[47,3684,3685],{"class":81},"'",[47,3687,1324],{"class":85},[47,3689,3685],{"class":81},[47,3691,1384],{"class":221},[47,3693,3694],{"class":49,"line":1423},[47,3695,2622],{"class":221},[47,3697,3698,3700,3702],{"class":49,"line":1706},[47,3699,3544],{"class":221},[47,3701,1262],{"class":217},[47,3703,1285],{"class":221},[47,3705,3706],{"class":49,"line":1711},[47,3707,2280],{"class":221},[47,3709,3710],{"class":49,"line":1717},[47,3711,1659],{"class":221},[187,3713,3715],{"id":3714},"_163跳出语句","1.6.3跳出语句",[171,3717,3718],{},[109,3719,3720],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,3722,3723],{},"break使用时机：",[106,3725,3726,3729,3732],{},[109,3727,3728],{},"出现在switch条件语句中，作用是终止case并跳出switch",[109,3730,3731],{},"出现在循环结构中，作用是跳出当前的循环结构",[109,3733,3734],{},"出现在嵌套循环中，跳出最近的内层循环语句",[171,3736,3737,3740],{"start":92},[109,3738,3739],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[109,3741,3742],{},"goto语句\n语法：goto 标记;",[19,3744,3745],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[38,3747,3749],{"className":208,"code":3748,"language":210,"meta":43,"style":43},"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",[26,3750,3751,3759,3763,3776,3786,3799,3812,3825,3833,3849],{"__ignoreMap":43},[47,3752,3753,3755,3757],{"class":49,"line":50},[47,3754,225],{"class":217},[47,3756,2066],{"class":53},[47,3758,2069],{"class":221},[47,3760,3761],{"class":49,"line":92},[47,3762,1640],{"class":221},[47,3764,3765,3767,3769,3772,3774],{"class":49,"line":1273},[47,3766,1645],{"class":221},[47,3768,1262],{"class":217},[47,3770,3771],{"class":81},"\"1\"",[47,3773,1262],{"class":217},[47,3775,1285],{"class":221},[47,3777,3778,3781,3784],{"class":49,"line":1288},[47,3779,3780],{"class":217},"    goto",[47,3782,3783],{"class":53}," FLAG",[47,3785,1384],{"class":221},[47,3787,3788,3790,3792,3795,3797],{"class":49,"line":1294},[47,3789,1645],{"class":221},[47,3791,1262],{"class":217},[47,3793,3794],{"class":81},"\"2\"",[47,3796,1262],{"class":217},[47,3798,1285],{"class":221},[47,3800,3801,3803,3805,3808,3810],{"class":49,"line":1308},[47,3802,1645],{"class":221},[47,3804,1262],{"class":217},[47,3806,3807],{"class":81},"\"3\"",[47,3809,1262],{"class":217},[47,3811,1285],{"class":221},[47,3813,3814,3816,3818,3821,3823],{"class":49,"line":1314},[47,3815,1645],{"class":221},[47,3817,1262],{"class":217},[47,3819,3820],{"class":81},"\"4\"",[47,3822,1262],{"class":217},[47,3824,1285],{"class":221},[47,3826,3827,3830],{"class":49,"line":1405},[47,3828,3829],{"class":53},"    FLAG",[47,3831,3832],{"class":221},":\n",[47,3834,3835,3837,3839,3842,3844,3846],{"class":49,"line":1411},[47,3836,1645],{"class":221},[47,3838,1262],{"class":217},[47,3840,3841],{"class":81},"\"5\"",[47,3843,1262],{"class":217},[47,3845,1332],{"class":221},[47,3847,3848],{"class":279},"\u002F\u002F跳过了2,3,4,直接到5\n",[47,3850,3851],{"class":49,"line":1423},[47,3852,1659],{"class":221},[14,3854,3856],{"id":3855},"_17数组","1.7数组",[187,3858,3860],{"id":3859},"_171一维数组","1.7.1一维数组",[171,3862,3863],{},[109,3864,3865],{},"一维数组定义方式",[357,3867,3868,3878],{},[360,3869,3870],{},[363,3871,3872,3875],{},[366,3873,3874],{},"方式",[366,3876,3877],{},"注意事项",[404,3879,3880,3894,3904],{},[363,3881,3882,3888],{},[409,3883,3884,3885,276],{},"数据类型 数组名",[47,3886,3887],{},"数组长度",[409,3889,3890,3891,3893],{},"这种方式是先定义再arr",[47,3892,660],{},"赋值",[363,3895,3896,3901],{},[409,3897,3884,3898,3900],{},[47,3899,3887],{},"={值1,值2....};",[409,3902,3903],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[363,3905,3906,3910],{},[409,3907,3884,3908,3900],{},[47,3909],{},[409,3911,3912,3913,3915],{},"int arr",[47,3914],{},";这是不正确的，按照这样的方式定义必须有初始长度",[171,3917,3918],{"start":92},[109,3919,3920],{},"一维数组数组名\n用途：",[106,3922,3923],{},[109,3924,3925],{},"1.可以统计整个数组在内存中的长度：",[38,3927,3929],{"className":208,"code":3928,"language":210,"meta":43,"style":43},"sizeof(arr);\nsizeof(arr[0]);\n",[26,3930,3931,3938],{"__ignoreMap":43},[47,3932,3933,3935],{"class":49,"line":50},[47,3934,218],{"class":217},[47,3936,3937],{"class":221},"(arr);\n",[47,3939,3940,3942,3945,3947],{"class":49,"line":92},[47,3941,218],{"class":217},[47,3943,3944],{"class":221},"(arr[",[47,3946,411],{"class":85},[47,3948,3949],{"class":221},"]);\n",[106,3951,3952],{},[109,3953,3954],{},"2.可以获取数组在内存中的首地址:",[38,3956,3958],{"className":208,"code":3957,"language":210,"meta":43,"style":43},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[26,3959,3960,3965,3978,3983],{"__ignoreMap":43},[47,3961,3962],{"class":49,"line":50},[47,3963,3964],{"class":279},"\u002F\u002F查看16进制的首地址\n",[47,3966,3967,3969,3971,3974,3976],{"class":49,"line":92},[47,3968,1463],{"class":221},[47,3970,1262],{"class":217},[47,3972,3973],{"class":221},"arr",[47,3975,1262],{"class":217},[47,3977,1285],{"class":221},[47,3979,3980],{"class":49,"line":1273},[47,3981,3982],{"class":279},"\u002F\u002F看10进制数\n",[47,3984,3985,3987,3989,3991,3993,3995,3997,4000,4002,4004,4006],{"class":49,"line":1288},[47,3986,1463],{"class":221},[47,3988,1262],{"class":217},[47,3990,222],{"class":221},[47,3992,225],{"class":217},[47,3994,648],{"class":221},[47,3996,572],{"class":217},[47,3998,3999],{"class":221},"arr[",[47,4001,411],{"class":85},[47,4003,1159],{"class":221},[47,4005,1262],{"class":217},[47,4007,1285],{"class":221},[19,4009,4010],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[106,4012,4013],{},[109,4014,4015],{},"1️⃣五只小猪称体重",[38,4017,4019],{"className":208,"code":4018,"language":210,"meta":43,"style":43},"#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",[26,4020,4021,4027,4037,4045,4049,4089,4102,4128,4132,4144,4148,4158,4162,4166,4179,4189],{"__ignoreMap":43},[47,4022,4023,4025],{"class":49,"line":50},[47,4024,2043],{"class":217},[47,4026,2046],{"class":81},[47,4028,4029,4031,4033,4035],{"class":49,"line":92},[47,4030,2051],{"class":217},[47,4032,2054],{"class":217},[47,4034,2057],{"class":53},[47,4036,1384],{"class":221},[47,4038,4039,4041,4043],{"class":49,"line":1273},[47,4040,225],{"class":217},[47,4042,2066],{"class":53},[47,4044,2069],{"class":221},[47,4046,4047],{"class":49,"line":1288},[47,4048,1640],{"class":221},[47,4050,4051,4053,4056,4058,4060,4062,4064,4067,4069,4072,4074,4076,4078,4081,4083,4086],{"class":49,"line":1294},[47,4052,2078],{"class":217},[47,4054,4055],{"class":221}," arr[",[47,4057,538],{"class":85},[47,4059,1159],{"class":221},[47,4061,267],{"class":217},[47,4063,1115],{"class":221},[47,4065,4066],{"class":85},"300",[47,4068,597],{"class":221},[47,4070,4071],{"class":85},"350",[47,4073,597],{"class":221},[47,4075,1816],{"class":85},[47,4077,597],{"class":221},[47,4079,4080],{"class":85},"400",[47,4082,597],{"class":221},[47,4084,4085],{"class":85},"250",[47,4087,4088],{"class":221},"};\n",[47,4090,4091,4093,4096,4098,4100],{"class":49,"line":1308},[47,4092,2078],{"class":217},[47,4094,4095],{"class":221}," tmp",[47,4097,267],{"class":217},[47,4099,411],{"class":85},[47,4101,1384],{"class":221},[47,4103,4104,4106,4108,4110,4112,4114,4116,4118,4120,4122,4124,4126],{"class":49,"line":1314},[47,4105,3294],{"class":217},[47,4107,1752],{"class":221},[47,4109,225],{"class":217},[47,4111,3125],{"class":221},[47,4113,267],{"class":217},[47,4115,411],{"class":85},[47,4117,3132],{"class":221},[47,4119,1129],{"class":217},[47,4121,538],{"class":85},[47,4123,3132],{"class":221},[47,4125,2385],{"class":217},[47,4127,228],{"class":221},[47,4129,4130],{"class":49,"line":1405},[47,4131,2123],{"class":221},[47,4133,4134,4136,4139,4141],{"class":49,"line":1411},[47,4135,2590],{"class":217},[47,4137,4138],{"class":221},"(tmp",[47,4140,1129],{"class":217},[47,4142,4143],{"class":221},"arr[i])\n",[47,4145,4146],{"class":49,"line":1423},[47,4147,2603],{"class":221},[47,4149,4150,4153,4155],{"class":49,"line":1706},[47,4151,4152],{"class":221},"            tmp",[47,4154,267],{"class":217},[47,4156,4157],{"class":221},"arr[i];\n",[47,4159,4160],{"class":49,"line":1711},[47,4161,2622],{"class":221},[47,4163,4164],{"class":49,"line":1717},[47,4165,2280],{"class":221},[47,4167,4168,4170,4172,4175,4177],{"class":49,"line":1722},[47,4169,1645],{"class":221},[47,4171,1262],{"class":217},[47,4173,4174],{"class":221},"tmp",[47,4176,1262],{"class":217},[47,4178,1285],{"class":221},[47,4180,4181,4184,4187],{"class":49,"line":1736},[47,4182,4183],{"class":217},"    return",[47,4185,4186],{"class":85}," 0",[47,4188,1384],{"class":221},[47,4190,4191],{"class":49,"line":1741},[47,4192,1659],{"class":221},[106,4194,4195],{},[109,4196,4197],{},"2️⃣数组元素逆置",[38,4199,4201],{"className":208,"code":4200,"language":210,"meta":43,"style":43},"\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",[26,4202,4203,4208,4214,4224,4232,4236,4271,4287,4319,4332,4337,4342,4354,4364,4374,4379,4388,4398,4403,4408,4435,4439,4455,4459,4470,4479],{"__ignoreMap":43},[47,4204,4205],{"class":49,"line":50},[47,4206,4207],{"class":279},"\u002F\u002F元素逆置\n",[47,4209,4210,4212],{"class":49,"line":92},[47,4211,2043],{"class":217},[47,4213,2046],{"class":81},[47,4215,4216,4218,4220,4222],{"class":49,"line":1273},[47,4217,2051],{"class":217},[47,4219,2054],{"class":217},[47,4221,2057],{"class":53},[47,4223,1384],{"class":221},[47,4225,4226,4228,4230],{"class":49,"line":1288},[47,4227,225],{"class":217},[47,4229,2066],{"class":53},[47,4231,2069],{"class":221},[47,4233,4234],{"class":49,"line":1294},[47,4235,1640],{"class":221},[47,4237,4238,4241,4243,4245,4247,4249,4251,4253,4255,4257,4259,4261,4263,4265,4267,4269],{"class":49,"line":1308},[47,4239,4240],{"class":217},"   int",[47,4242,4055],{"class":221},[47,4244,538],{"class":85},[47,4246,1159],{"class":221},[47,4248,267],{"class":217},[47,4250,1115],{"class":221},[47,4252,436],{"class":85},[47,4254,597],{"class":221},[47,4256,298],{"class":85},[47,4258,597],{"class":221},[47,4260,292],{"class":85},[47,4262,597],{"class":221},[47,4264,512],{"class":85},[47,4266,597],{"class":221},[47,4268,538],{"class":85},[47,4270,4088],{"class":221},[47,4272,4273,4275,4278,4280,4282,4284],{"class":49,"line":1314},[47,4274,4240],{"class":217},[47,4276,4277],{"class":221}," start",[47,4279,267],{"class":217},[47,4281,411],{"class":85},[47,4283,276],{"class":221},[47,4285,4286],{"class":279},"\u002F\u002F起始下标\n",[47,4288,4289,4291,4294,4297,4300,4303,4305,4307,4310,4312,4314,4316],{"class":49,"line":1405},[47,4290,4240],{"class":217},[47,4292,4293],{"class":221}," end",[47,4295,4296],{"class":217},"=sizeof",[47,4298,4299],{"class":221},"(arr)",[47,4301,4302],{"class":217},"\u002Fsizeof",[47,4304,3944],{"class":221},[47,4306,411],{"class":85},[47,4308,4309],{"class":221},"])",[47,4311,751],{"class":217},[47,4313,436],{"class":85},[47,4315,276],{"class":221},[47,4317,4318],{"class":279},"\u002F\u002F结束下标\n",[47,4320,4321,4324,4327,4329],{"class":49,"line":1411},[47,4322,4323],{"class":217},"   while",[47,4325,4326],{"class":221}," (start",[47,4328,1129],{"class":217},[47,4330,4331],{"class":221},"end)\n",[47,4333,4334],{"class":49,"line":1423},[47,4335,4336],{"class":221},"   {\n",[47,4338,4339],{"class":49,"line":1706},[47,4340,4341],{"class":279},"    \u002F\u002F实现元素互换代码\n",[47,4343,4344,4346,4349,4351],{"class":49,"line":1711},[47,4345,2078],{"class":217},[47,4347,4348],{"class":221}," temp",[47,4350,267],{"class":217},[47,4352,4353],{"class":221},"arr[start];\n",[47,4355,4356,4359,4361],{"class":49,"line":1717},[47,4357,4358],{"class":221},"    arr[start]",[47,4360,267],{"class":217},[47,4362,4363],{"class":221},"arr[end];\n",[47,4365,4366,4369,4371],{"class":49,"line":1722},[47,4367,4368],{"class":221},"    arr[end]",[47,4370,267],{"class":217},[47,4372,4373],{"class":221},"temp;\n",[47,4375,4376],{"class":49,"line":1736},[47,4377,4378],{"class":279},"    \u002F\u002F下标更新\n",[47,4380,4381,4384,4386],{"class":49,"line":1741},[47,4382,4383],{"class":221},"    start",[47,4385,2385],{"class":217},[47,4387,1384],{"class":221},[47,4389,4390,4393,4396],{"class":49,"line":1747},[47,4391,4392],{"class":221},"    end",[47,4394,4395],{"class":217},"--",[47,4397,1384],{"class":221},[47,4399,4400],{"class":49,"line":1768},[47,4401,4402],{"class":221},"   }\n",[47,4404,4405],{"class":49,"line":1773},[47,4406,4407],{"class":279},"   \u002F\u002F输出逆置后的数组\n",[47,4409,4410,4413,4415,4417,4419,4421,4423,4425,4427,4429,4431,4433],{"class":49,"line":1787},[47,4411,4412],{"class":217},"   for",[47,4414,1752],{"class":221},[47,4416,225],{"class":217},[47,4418,3125],{"class":221},[47,4420,267],{"class":217},[47,4422,411],{"class":85},[47,4424,3132],{"class":221},[47,4426,1129],{"class":217},[47,4428,538],{"class":85},[47,4430,3132],{"class":221},[47,4432,2385],{"class":217},[47,4434,228],{"class":221},[47,4436,4437],{"class":49,"line":1792},[47,4438,4336],{"class":221},[47,4440,4441,4443,4445,4448,4450,4453],{"class":49,"line":1821},[47,4442,1645],{"class":221},[47,4444,1262],{"class":217},[47,4446,4447],{"class":221},"arr[i]",[47,4449,1262],{"class":217},[47,4451,4452],{"class":81},"\" \"",[47,4454,1384],{"class":221},[47,4456,4457],{"class":49,"line":1826},[47,4458,4402],{"class":221},[47,4460,4461,4464,4466,4468],{"class":49,"line":1843},[47,4462,4463],{"class":53},"   system",[47,4465,222],{"class":221},[47,4467,2401],{"class":81},[47,4469,2812],{"class":221},[47,4471,4472,4475,4477],{"class":49,"line":1848},[47,4473,4474],{"class":217},"   return",[47,4476,4186],{"class":85},[47,4478,1384],{"class":221},[47,4480,4481],{"class":49,"line":1853},[47,4482,1659],{"class":221},[106,4484,4485],{},[109,4486,4487],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[38,4489,4491],{"className":208,"code":4490,"language":210,"meta":43,"style":43},"\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",[26,4492,4493,4498,4504,4514,4522,4526,4578,4591,4617,4621,4635,4639,4644,4649,4679,4683,4688,4722,4726,4731,4751,4756,4768,4784,4799,4804,4808,4812,4825,4851,4855,4869,4873,4881],{"__ignoreMap":43},[47,4494,4495],{"class":49,"line":50},[47,4496,4497],{"class":279},"\u002F\u002F冒泡排序,升序\n",[47,4499,4500,4502],{"class":49,"line":92},[47,4501,2043],{"class":217},[47,4503,2046],{"class":81},[47,4505,4506,4508,4510,4512],{"class":49,"line":1273},[47,4507,2051],{"class":217},[47,4509,2054],{"class":217},[47,4511,2057],{"class":53},[47,4513,1384],{"class":221},[47,4515,4516,4518,4520],{"class":49,"line":1288},[47,4517,225],{"class":217},[47,4519,2066],{"class":53},[47,4521,2069],{"class":221},[47,4523,4524],{"class":49,"line":1294},[47,4525,1640],{"class":221},[47,4527,4528,4530,4532,4534,4537,4539,4542,4544,4546,4548,4550,4552,4554,4556,4558,4560,4562,4564,4566,4568,4570,4572,4574,4576],{"class":49,"line":1308},[47,4529,2078],{"class":217},[47,4531,4055],{"class":221},[47,4533,639],{"class":85},[47,4535,4536],{"class":221},"] ",[47,4538,267],{"class":217},[47,4540,4541],{"class":221}," {",[47,4543,512],{"class":85},[47,4545,597],{"class":221},[47,4547,298],{"class":85},[47,4549,597],{"class":221},[47,4551,614],{"class":85},[47,4553,597],{"class":221},[47,4555,411],{"class":85},[47,4557,597],{"class":221},[47,4559,538],{"class":85},[47,4561,597],{"class":221},[47,4563,588],{"class":85},[47,4565,597],{"class":221},[47,4567,436],{"class":85},[47,4569,597],{"class":221},[47,4571,292],{"class":85},[47,4573,597],{"class":221},[47,4575,639],{"class":85},[47,4577,4088],{"class":221},[47,4579,4580,4582,4584,4587,4589],{"class":49,"line":1314},[47,4581,1645],{"class":221},[47,4583,1262],{"class":217},[47,4585,4586],{"class":81},"\"排序前：\"",[47,4588,1262],{"class":217},[47,4590,1285],{"class":221},[47,4592,4593,4595,4597,4599,4601,4603,4605,4607,4609,4611,4613,4615],{"class":49,"line":1405},[47,4594,3294],{"class":217},[47,4596,1752],{"class":221},[47,4598,225],{"class":217},[47,4600,3125],{"class":221},[47,4602,267],{"class":217},[47,4604,411],{"class":85},[47,4606,3132],{"class":221},[47,4608,1129],{"class":217},[47,4610,639],{"class":85},[47,4612,3132],{"class":221},[47,4614,2385],{"class":217},[47,4616,228],{"class":221},[47,4618,4619],{"class":49,"line":1411},[47,4620,2123],{"class":221},[47,4622,4623,4625,4627,4629,4631,4633],{"class":49,"line":1423},[47,4624,3544],{"class":221},[47,4626,1262],{"class":217},[47,4628,4447],{"class":221},[47,4630,1262],{"class":217},[47,4632,4452],{"class":81},[47,4634,1384],{"class":221},[47,4636,4637],{"class":49,"line":1706},[47,4638,2280],{"class":221},[47,4640,4641],{"class":49,"line":1711},[47,4642,4643],{"class":279},"    \u002F\u002F开始冒泡排序\n",[47,4645,4646],{"class":49,"line":1717},[47,4647,4648],{"class":279},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[47,4650,4651,4653,4655,4657,4659,4661,4663,4665,4667,4669,4671,4673,4675,4677],{"class":49,"line":1722},[47,4652,3294],{"class":217},[47,4654,1752],{"class":221},[47,4656,225],{"class":217},[47,4658,3125],{"class":221},[47,4660,267],{"class":217},[47,4662,411],{"class":85},[47,4664,3132],{"class":221},[47,4666,1129],{"class":217},[47,4668,639],{"class":85},[47,4670,751],{"class":217},[47,4672,436],{"class":85},[47,4674,3132],{"class":221},[47,4676,2385],{"class":217},[47,4678,228],{"class":221},[47,4680,4681],{"class":49,"line":1736},[47,4682,2123],{"class":221},[47,4684,4685],{"class":49,"line":1741},[47,4686,4687],{"class":279},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[47,4689,4690,4692,4694,4696,4698,4700,4702,4704,4706,4708,4710,4712,4714,4716,4718,4720],{"class":49,"line":1747},[47,4691,3496],{"class":217},[47,4693,1752],{"class":221},[47,4695,225],{"class":217},[47,4697,3503],{"class":221},[47,4699,267],{"class":217},[47,4701,411],{"class":85},[47,4703,3510],{"class":221},[47,4705,1129],{"class":217},[47,4707,639],{"class":85},[47,4709,751],{"class":217},[47,4711,660],{"class":221},[47,4713,751],{"class":217},[47,4715,436],{"class":85},[47,4717,3510],{"class":221},[47,4719,2385],{"class":217},[47,4721,228],{"class":221},[47,4723,4724],{"class":49,"line":1768},[47,4725,2603],{"class":221},[47,4727,4728],{"class":49,"line":1773},[47,4729,4730],{"class":279},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[47,4732,4733,4736,4739,4741,4744,4746,4748],{"class":49,"line":1787},[47,4734,4735],{"class":217},"            if",[47,4737,4738],{"class":221},"(arr[j]",[47,4740,1179],{"class":217},[47,4742,4743],{"class":221},"arr[j",[47,4745,700],{"class":217},[47,4747,436],{"class":85},[47,4749,4750],{"class":221},"])\n",[47,4752,4753],{"class":49,"line":1792},[47,4754,4755],{"class":221},"            {\n",[47,4757,4758,4761,4763,4765],{"class":49,"line":1821},[47,4759,4760],{"class":217},"                int",[47,4762,4348],{"class":221},[47,4764,267],{"class":217},[47,4766,4767],{"class":221},"arr[j];\n",[47,4769,4770,4773,4775,4777,4779,4781],{"class":49,"line":1826},[47,4771,4772],{"class":221},"                arr[j]",[47,4774,267],{"class":217},[47,4776,4743],{"class":221},[47,4778,700],{"class":217},[47,4780,436],{"class":85},[47,4782,4783],{"class":221},"];\n",[47,4785,4786,4789,4791,4793,4795,4797],{"class":49,"line":1843},[47,4787,4788],{"class":221},"                arr[j",[47,4790,700],{"class":217},[47,4792,436],{"class":85},[47,4794,1159],{"class":221},[47,4796,267],{"class":217},[47,4798,4373],{"class":221},[47,4800,4801],{"class":49,"line":1848},[47,4802,4803],{"class":221},"            }\n",[47,4805,4806],{"class":49,"line":1853},[47,4807,2622],{"class":221},[47,4809,4810],{"class":49,"line":1858},[47,4811,2280],{"class":221},[47,4813,4814,4816,4818,4821,4823],{"class":49,"line":1872},[47,4815,1645],{"class":221},[47,4817,1262],{"class":217},[47,4819,4820],{"class":81},"\"排序后：\"",[47,4822,1262],{"class":217},[47,4824,1285],{"class":221},[47,4826,4827,4829,4831,4833,4835,4837,4839,4841,4843,4845,4847,4849],{"class":49,"line":1877},[47,4828,3294],{"class":217},[47,4830,1752],{"class":221},[47,4832,225],{"class":217},[47,4834,3125],{"class":221},[47,4836,267],{"class":217},[47,4838,411],{"class":85},[47,4840,3132],{"class":221},[47,4842,1129],{"class":217},[47,4844,639],{"class":85},[47,4846,3132],{"class":221},[47,4848,2385],{"class":217},[47,4850,228],{"class":221},[47,4852,4853],{"class":49,"line":2670},[47,4854,2123],{"class":221},[47,4856,4857,4859,4861,4863,4865,4867],{"class":49,"line":2684},[47,4858,3544],{"class":221},[47,4860,1262],{"class":217},[47,4862,4447],{"class":221},[47,4864,1262],{"class":217},[47,4866,4452],{"class":81},[47,4868,1384],{"class":221},[47,4870,4871],{"class":49,"line":2692},[47,4872,2280],{"class":221},[47,4874,4875,4877,4879],{"class":49,"line":2697},[47,4876,4183],{"class":217},[47,4878,4186],{"class":85},[47,4880,1384],{"class":221},[47,4882,4883],{"class":49,"line":2703},[47,4884,1659],{"class":221},[187,4886,4888],{"id":4887},"_172二维数组","1.7.2二维数组",[171,4890,4891],{},[109,4892,4893],{},"二维数组的四种定义方式",[357,4895,4896,4905],{},[360,4897,4898],{},[363,4899,4900,4903],{},[366,4901,4902],{},"序号",[366,4904,3874],{},[404,4906,4907,4917,4926,4935,4944],{},[363,4908,4909,4911],{},[409,4910,436],{},[409,4912,4913,4914,276],{},"数据类型 数组名[行数]",[47,4915,4916],{},"列数",[363,4918,4919,4921],{},[409,4920,298],{},[409,4922,4913,4923,4925],{},[47,4924,4916],{},"={ {数据1,数据2}，{数据3，数据4}... }",[363,4927,4928,4930],{},[409,4929,292],{},[409,4931,4913,4932,4934],{},[47,4933,4916],{},"={数据1,数据2,数据3...}",[363,4936,4937,4939],{},[409,4938,512],{},[409,4940,4941,4942,4934],{},"数据类型 数组名[]",[47,4943,4916],{},[363,4945,4946,4949],{},[409,4947,4948],{},"注意：不能只省略列数",[409,4950],{},[171,4952,4953],{"start":92},[109,4954,4955],{},"二维数组数组名",[106,4957,4958,4961],{},[109,4959,4960],{},"1.查看二维数组所占内存空间",[109,4962,4963],{},"2.获取二维数组首地址",[19,4965,4966],{},"已知二维数组，求二维数组的行数与列数",[38,4968,4970],{"className":208,"code":4969,"language":210,"meta":43,"style":43},"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",[26,4971,4972,4980,4984,5002,5006,5024,5040,5045,5070,5103],{"__ignoreMap":43},[47,4973,4974,4976,4978],{"class":49,"line":50},[47,4975,225],{"class":217},[47,4977,2066],{"class":53},[47,4979,2069],{"class":221},[47,4981,4982],{"class":49,"line":92},[47,4983,1640],{"class":221},[47,4985,4986,4988,4990,4992,4995,4997,4999],{"class":49,"line":1273},[47,4987,2078],{"class":217},[47,4989,4055],{"class":221},[47,4991,298],{"class":85},[47,4993,4994],{"class":221},"][",[47,4996,292],{"class":85},[47,4998,1159],{"class":221},[47,5000,5001],{"class":217},"=\n",[47,5003,5004],{"class":49,"line":1288},[47,5005,2123],{"class":221},[47,5007,5008,5011,5013,5015,5017,5019,5021],{"class":49,"line":1294},[47,5009,5010],{"class":221},"        {",[47,5012,436],{"class":85},[47,5014,597],{"class":221},[47,5016,298],{"class":85},[47,5018,597],{"class":221},[47,5020,292],{"class":85},[47,5022,5023],{"class":221},"},\n",[47,5025,5026,5028,5030,5032,5034,5036,5038],{"class":49,"line":1308},[47,5027,5010],{"class":221},[47,5029,512],{"class":85},[47,5031,597],{"class":221},[47,5033,538],{"class":85},[47,5035,597],{"class":221},[47,5037,563],{"class":85},[47,5039,1659],{"class":221},[47,5041,5042],{"class":49,"line":1314},[47,5043,5044],{"class":221},"    };\n",[47,5046,5047,5049,5051,5054,5056,5058,5060,5062,5064,5066,5068],{"class":49,"line":1405},[47,5048,1645],{"class":221},[47,5050,1262],{"class":217},[47,5052,5053],{"class":81},"\"二维数组的行数\"",[47,5055,1466],{"class":217},[47,5057,4299],{"class":221},[47,5059,4302],{"class":217},[47,5061,3944],{"class":221},[47,5063,411],{"class":85},[47,5065,4309],{"class":221},[47,5067,1262],{"class":217},[47,5069,1285],{"class":221},[47,5071,5072,5074,5076,5079,5081,5083,5085,5087,5089,5091,5093,5095,5097,5099,5101],{"class":49,"line":1411},[47,5073,1645],{"class":221},[47,5075,1262],{"class":217},[47,5077,5078],{"class":81},"\"二维数组的列数\"",[47,5080,1466],{"class":217},[47,5082,3944],{"class":221},[47,5084,411],{"class":85},[47,5086,4309],{"class":221},[47,5088,4302],{"class":217},[47,5090,3944],{"class":221},[47,5092,411],{"class":85},[47,5094,4994],{"class":221},[47,5096,411],{"class":85},[47,5098,4309],{"class":221},[47,5100,1262],{"class":217},[47,5102,1285],{"class":221},[47,5104,5105],{"class":49,"line":1423},[47,5106,1659],{"class":221},[19,5108,5109],{},"查看二维数组首地址",[38,5111,5113],{"className":208,"code":5112,"language":210,"meta":43,"style":43},"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",[26,5114,5115,5132,5158,5183],{"__ignoreMap":43},[47,5116,5117,5119,5121,5124,5126,5128,5130],{"class":49,"line":50},[47,5118,1463],{"class":221},[47,5120,1262],{"class":217},[47,5122,5123],{"class":81},"\"二维数组首地址：\"",[47,5125,1262],{"class":217},[47,5127,3973],{"class":221},[47,5129,1262],{"class":217},[47,5131,1285],{"class":221},[47,5133,5134,5136,5138,5141,5143,5145,5147,5150,5152,5154,5156],{"class":49,"line":92},[47,5135,1463],{"class":221},[47,5137,1262],{"class":217},[47,5139,5140],{"class":81},"\"二维数组第一行的首地址：\"",[47,5142,1262],{"class":217},[47,5144,222],{"class":221},[47,5146,225],{"class":217},[47,5148,5149],{"class":221},")arr[",[47,5151,411],{"class":85},[47,5153,1159],{"class":221},[47,5155,1262],{"class":217},[47,5157,1285],{"class":221},[47,5159,5160,5162,5164,5167,5169,5171,5173,5175,5177,5179,5181],{"class":49,"line":1273},[47,5161,1463],{"class":221},[47,5163,1262],{"class":217},[47,5165,5166],{"class":81},"\"二维数组第二行的首地址：\"",[47,5168,1262],{"class":217},[47,5170,222],{"class":221},[47,5172,225],{"class":217},[47,5174,5149],{"class":221},[47,5176,436],{"class":85},[47,5178,1159],{"class":221},[47,5180,1262],{"class":217},[47,5182,1285],{"class":221},[47,5184,5185,5187,5189,5192,5194,5196,5198,5200,5202,5204,5206,5208,5210,5212,5214,5216],{"class":49,"line":1288},[47,5186,1463],{"class":221},[47,5188,1262],{"class":217},[47,5190,5191],{"class":81},"\"二维数组第一个元素的首地址:\"",[47,5193,1262],{"class":217},[47,5195,222],{"class":221},[47,5197,225],{"class":217},[47,5199,648],{"class":221},[47,5201,572],{"class":217},[47,5203,3999],{"class":221},[47,5205,411],{"class":85},[47,5207,4994],{"class":221},[47,5209,411],{"class":85},[47,5211,1159],{"class":221},[47,5213,1262],{"class":217},[47,5215,1332],{"class":221},[47,5217,5218],{"class":279},"\u002F\u002F对于数，要加取址符\n",[134,5220,5221],{},"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":43,"searchDepth":92,"depth":92,"links":5223},[5224,5225,5226,5234,5235,5241,5246],{"id":161,"depth":92,"text":162},{"id":168,"depth":92,"text":169},{"id":184,"depth":92,"text":185,"children":5227},[5228,5229,5230,5231,5232,5233],{"id":189,"depth":1273,"text":190},{"id":238,"depth":1273,"text":239},{"id":306,"depth":1273,"text":307},{"id":1243,"depth":1273,"text":1244},{"id":1338,"depth":1273,"text":1339},{"id":1437,"depth":1273,"text":1438},{"id":1479,"depth":92,"text":1480},{"id":1547,"depth":92,"text":1548,"children":5236},[5237,5238,5239,5240],{"id":1551,"depth":1273,"text":1552},{"id":1573,"depth":1273,"text":1574},{"id":1582,"depth":1273,"text":1583},{"id":1591,"depth":1273,"text":1592},{"id":1600,"depth":92,"text":1601,"children":5242},[5243,5244,5245],{"id":1604,"depth":1273,"text":1605},{"id":2298,"depth":1273,"text":2299},{"id":3714,"depth":1273,"text":3715},{"id":3855,"depth":92,"text":3856,"children":5247},[5248,5249],{"id":3859,"depth":1273,"text":3860},{"id":4887,"depth":1273,"text":4888},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":153,"description":43},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5256,"title":5257,"body":5258,"description":43,"extension":143,"meta":6358,"navigation":145,"path":6359,"seo":6360,"stem":6361,"__hash__":6362},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5259,"toc":6350},[5260,5263,5267,5275,5283,5286,5352,5356,5359,5435,5439,5442,5445,5448,5661,5665,5670,5734,5739,5806,5811,5902,5905,6010,6014,6017,6023,6167,6171,6174,6188,6191,6236,6239,6347],[10,5261,5257],{"id":5262},"_2函数",[14,5264,5266],{"id":5265},"_21函数概述","2.1函数概述",[171,5268,5269,5272],{},[109,5270,5271],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[109,5273,5274],{},"语法：",[38,5276,5281],{"className":5277,"code":5279,"language":5280,"meta":43},[5278],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[26,5282,5279],{"__ignoreMap":43},[19,5284,5285],{},"小案例",[38,5287,5289],{"className":208,"code":5288,"language":210,"meta":43,"style":43},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[26,5290,5291,5296,5320,5324,5341,5348],{"__ignoreMap":43},[47,5292,5293],{"class":49,"line":50},[47,5294,5295],{"class":279},"\u002F\u002Fnum1,num2形参\n",[47,5297,5298,5300,5303,5305,5307,5311,5313,5315,5318],{"class":49,"line":92},[47,5299,225],{"class":217},[47,5301,5302],{"class":53}," add",[47,5304,222],{"class":221},[47,5306,225],{"class":217},[47,5308,5310],{"class":5309},"s4XuR"," num1",[47,5312,597],{"class":221},[47,5314,225],{"class":217},[47,5316,5317],{"class":5309}," num2",[47,5319,228],{"class":221},[47,5321,5322],{"class":49,"line":1273},[47,5323,1640],{"class":221},[47,5325,5326,5328,5331,5333,5336,5338],{"class":49,"line":1288},[47,5327,2078],{"class":217},[47,5329,5330],{"class":221}," sum",[47,5332,267],{"class":217},[47,5334,5335],{"class":221},"num1",[47,5337,700],{"class":217},[47,5339,5340],{"class":221},"num2;\n",[47,5342,5343,5345],{"class":49,"line":1294},[47,5344,4183],{"class":217},[47,5346,5347],{"class":221}," sum;\n",[47,5349,5350],{"class":49,"line":1308},[47,5351,1659],{"class":221},[14,5353,5355],{"id":5354},"_22函数调用","2.2函数调用",[19,5357,5358],{},"调用刚刚写的求和函数",[38,5360,5362],{"className":208,"code":5361,"language":210,"meta":43,"style":43},"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",[26,5363,5364,5372,5376,5381,5393,5405,5414,5419,5431],{"__ignoreMap":43},[47,5365,5366,5368,5370],{"class":49,"line":50},[47,5367,225],{"class":217},[47,5369,2066],{"class":53},[47,5371,2069],{"class":221},[47,5373,5374],{"class":49,"line":92},[47,5375,1640],{"class":221},[47,5377,5378],{"class":49,"line":1273},[47,5379,5380],{"class":279},"    \u002F\u002Fa,b实参\n",[47,5382,5383,5385,5387,5389,5391],{"class":49,"line":1288},[47,5384,2078],{"class":217},[47,5386,1492],{"class":221},[47,5388,267],{"class":217},[47,5390,411],{"class":85},[47,5392,1384],{"class":221},[47,5394,5395,5397,5399,5401,5403],{"class":49,"line":1294},[47,5396,2078],{"class":217},[47,5398,2926],{"class":221},[47,5400,267],{"class":217},[47,5402,411],{"class":85},[47,5404,1384],{"class":221},[47,5406,5407,5409,5411],{"class":49,"line":1308},[47,5408,2105],{"class":221},[47,5410,1523],{"class":217},[47,5412,5413],{"class":221},"a,b;\n",[47,5415,5416],{"class":49,"line":1314},[47,5417,5418],{"class":279},"    \u002F\u002F调用函数时，实参值传给了形参\n",[47,5420,5421,5423,5425,5428],{"class":49,"line":1405},[47,5422,1645],{"class":221},[47,5424,1262],{"class":217},[47,5426,5427],{"class":53},"add",[47,5429,5430],{"class":221},"(a,b);\n",[47,5432,5433],{"class":49,"line":1411},[47,5434,1659],{"class":221},[14,5436,5438],{"id":5437},"_23值传递","2.3值传递",[19,5440,5441],{},"值传递就是函数调用时实参将数值传给形参",[19,5443,5444],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,5446,5447],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[38,5449,5451],{"className":208,"code":5450,"language":210,"meta":43,"style":43},"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",[26,5452,5453,5475,5479,5492,5509,5527,5538,5547,5556,5569,5585,5601,5610,5614,5622,5626,5638,5650,5657],{"__ignoreMap":43},[47,5454,5455,5458,5461,5463,5465,5467,5469,5471,5473],{"class":49,"line":50},[47,5456,5457],{"class":217},"void",[47,5459,5460],{"class":53}," swap",[47,5462,222],{"class":221},[47,5464,225],{"class":217},[47,5466,5310],{"class":5309},[47,5468,597],{"class":221},[47,5470,225],{"class":217},[47,5472,5317],{"class":5309},[47,5474,228],{"class":221},[47,5476,5477],{"class":49,"line":92},[47,5478,1640],{"class":221},[47,5480,5481,5483,5485,5488,5490],{"class":49,"line":1273},[47,5482,1645],{"class":221},[47,5484,1262],{"class":217},[47,5486,5487],{"class":81},"\"交换前：\"",[47,5489,1262],{"class":217},[47,5491,1285],{"class":221},[47,5493,5494,5496,5498,5501,5503,5505,5507],{"class":49,"line":1288},[47,5495,1645],{"class":221},[47,5497,1262],{"class":217},[47,5499,5500],{"class":81},"\"num1=\"",[47,5502,1262],{"class":217},[47,5504,5335],{"class":221},[47,5506,1262],{"class":217},[47,5508,1285],{"class":221},[47,5510,5511,5513,5515,5518,5520,5523,5525],{"class":49,"line":1294},[47,5512,1645],{"class":221},[47,5514,1262],{"class":217},[47,5516,5517],{"class":81},"\"num2=\"",[47,5519,1262],{"class":217},[47,5521,5522],{"class":221},"num2",[47,5524,1262],{"class":217},[47,5526,1285],{"class":221},[47,5528,5529,5531,5533,5535],{"class":49,"line":1308},[47,5530,2078],{"class":217},[47,5532,4348],{"class":221},[47,5534,267],{"class":217},[47,5536,5537],{"class":221},"num1;\n",[47,5539,5540,5543,5545],{"class":49,"line":1314},[47,5541,5542],{"class":221},"    num1",[47,5544,267],{"class":217},[47,5546,5340],{"class":221},[47,5548,5549,5552,5554],{"class":49,"line":1405},[47,5550,5551],{"class":221},"    num2",[47,5553,267],{"class":217},[47,5555,4373],{"class":221},[47,5557,5558,5560,5562,5565,5567],{"class":49,"line":1411},[47,5559,1645],{"class":221},[47,5561,1262],{"class":217},[47,5563,5564],{"class":81},"\"交换后：\"",[47,5566,1262],{"class":217},[47,5568,1285],{"class":221},[47,5570,5571,5573,5575,5577,5579,5581,5583],{"class":49,"line":1423},[47,5572,1645],{"class":221},[47,5574,1262],{"class":217},[47,5576,5500],{"class":81},[47,5578,1262],{"class":217},[47,5580,5335],{"class":221},[47,5582,1262],{"class":217},[47,5584,1285],{"class":221},[47,5586,5587,5589,5591,5593,5595,5597,5599],{"class":49,"line":1706},[47,5588,1645],{"class":221},[47,5590,1262],{"class":217},[47,5592,5517],{"class":81},[47,5594,1262],{"class":217},[47,5596,5522],{"class":221},[47,5598,1262],{"class":217},[47,5600,1285],{"class":221},[47,5602,5603,5605,5607],{"class":49,"line":1711},[47,5604,4183],{"class":217},[47,5606,276],{"class":221},[47,5608,5609],{"class":279},"\u002F\u002F或者不写\n",[47,5611,5612],{"class":49,"line":1717},[47,5613,1659],{"class":221},[47,5615,5616,5618,5620],{"class":49,"line":1722},[47,5617,225],{"class":217},[47,5619,2066],{"class":53},[47,5621,2069],{"class":221},[47,5623,5624],{"class":49,"line":1736},[47,5625,1640],{"class":221},[47,5627,5628,5630,5632,5634,5636],{"class":49,"line":1741},[47,5629,2078],{"class":217},[47,5631,1492],{"class":221},[47,5633,267],{"class":217},[47,5635,665],{"class":85},[47,5637,1384],{"class":221},[47,5639,5640,5642,5644,5646,5648],{"class":49,"line":1747},[47,5641,2078],{"class":217},[47,5643,2926],{"class":221},[47,5645,267],{"class":217},[47,5647,919],{"class":85},[47,5649,1384],{"class":221},[47,5651,5652,5655],{"class":49,"line":1768},[47,5653,5654],{"class":53},"    swap",[47,5656,5430],{"class":221},[47,5658,5659],{"class":49,"line":1773},[47,5660,1659],{"class":221},[14,5662,5664],{"id":5663},"_24函数的常见形式","2.4函数的常见形式",[171,5666,5667],{},[109,5668,5669],{},"无参无返",[38,5671,5673],{"className":208,"code":5672,"language":210,"meta":43,"style":43},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[26,5674,5675,5684,5688,5701,5705,5713,5717,5722,5730],{"__ignoreMap":43},[47,5676,5677,5679,5682],{"class":49,"line":50},[47,5678,5457],{"class":217},[47,5680,5681],{"class":53}," test01",[47,5683,2069],{"class":221},[47,5685,5686],{"class":49,"line":92},[47,5687,1640],{"class":221},[47,5689,5690,5692,5694,5697,5699],{"class":49,"line":1273},[47,5691,1645],{"class":221},[47,5693,1262],{"class":217},[47,5695,5696],{"class":81},"\"你好\"",[47,5698,1262],{"class":217},[47,5700,1285],{"class":221},[47,5702,5703],{"class":49,"line":1288},[47,5704,1659],{"class":221},[47,5706,5707,5709,5711],{"class":49,"line":1294},[47,5708,225],{"class":217},[47,5710,2066],{"class":53},[47,5712,2069],{"class":221},[47,5714,5715],{"class":49,"line":1308},[47,5716,1640],{"class":221},[47,5718,5719],{"class":49,"line":1314},[47,5720,5721],{"class":279},"    \u002F\u002F函数调用\n",[47,5723,5724,5727],{"class":49,"line":1405},[47,5725,5726],{"class":53},"    test01",[47,5728,5729],{"class":221},"();\n",[47,5731,5732],{"class":49,"line":1411},[47,5733,1659],{"class":221},[171,5735,5736],{"start":92},[109,5737,5738],{},"有参无返",[38,5740,5742],{"className":208,"code":5741,"language":210,"meta":43,"style":43},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[26,5743,5744,5759,5763,5775,5779,5787,5791,5802],{"__ignoreMap":43},[47,5745,5746,5748,5751,5753,5755,5757],{"class":49,"line":50},[47,5747,5457],{"class":217},[47,5749,5750],{"class":53}," test02",[47,5752,222],{"class":221},[47,5754,225],{"class":217},[47,5756,1492],{"class":5309},[47,5758,228],{"class":221},[47,5760,5761],{"class":49,"line":92},[47,5762,1640],{"class":221},[47,5764,5765,5767,5769,5771,5773],{"class":49,"line":1273},[47,5766,1645],{"class":221},[47,5768,1262],{"class":217},[47,5770,5696],{"class":81},[47,5772,1262],{"class":217},[47,5774,1285],{"class":221},[47,5776,5777],{"class":49,"line":1288},[47,5778,1659],{"class":221},[47,5780,5781,5783,5785],{"class":49,"line":1294},[47,5782,225],{"class":217},[47,5784,2066],{"class":53},[47,5786,2069],{"class":221},[47,5788,5789],{"class":49,"line":1308},[47,5790,1640],{"class":221},[47,5792,5793,5796,5798,5800],{"class":49,"line":1314},[47,5794,5795],{"class":53},"    test02",[47,5797,222],{"class":221},[47,5799,530],{"class":85},[47,5801,2812],{"class":221},[47,5803,5804],{"class":49,"line":1405},[47,5805,1659],{"class":221},[171,5807,5808],{"start":1273},[109,5809,5810],{},"无参有返",[38,5812,5814],{"className":208,"code":5813,"language":210,"meta":43,"style":43},"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",[26,5815,5816,5825,5829,5841,5850,5854,5862,5866,5879,5898],{"__ignoreMap":43},[47,5817,5818,5820,5823],{"class":49,"line":50},[47,5819,225],{"class":217},[47,5821,5822],{"class":53}," test03",[47,5824,2069],{"class":221},[47,5826,5827],{"class":49,"line":92},[47,5828,1640],{"class":221},[47,5830,5831,5833,5835,5837,5839],{"class":49,"line":1273},[47,5832,1645],{"class":221},[47,5834,1262],{"class":217},[47,5836,5696],{"class":81},[47,5838,1262],{"class":217},[47,5840,1285],{"class":221},[47,5842,5843,5845,5848],{"class":49,"line":1288},[47,5844,4183],{"class":217},[47,5846,5847],{"class":85}," 100",[47,5849,1384],{"class":221},[47,5851,5852],{"class":49,"line":1294},[47,5853,1659],{"class":221},[47,5855,5856,5858,5860],{"class":49,"line":1308},[47,5857,225],{"class":217},[47,5859,2066],{"class":53},[47,5861,2069],{"class":221},[47,5863,5864],{"class":49,"line":1314},[47,5865,1640],{"class":221},[47,5867,5868,5870,5872,5874,5877],{"class":49,"line":1405},[47,5869,2078],{"class":217},[47,5871,5310],{"class":221},[47,5873,267],{"class":217},[47,5875,5876],{"class":53},"test03",[47,5878,5729],{"class":221},[47,5880,5881,5883,5885,5887,5889,5891,5893,5895],{"class":49,"line":1411},[47,5882,1645],{"class":221},[47,5884,1262],{"class":217},[47,5886,5500],{"class":81},[47,5888,1262],{"class":217},[47,5890,5335],{"class":221},[47,5892,1262],{"class":217},[47,5894,1332],{"class":221},[47,5896,5897],{"class":279}," \u002F\u002F100\n",[47,5899,5900],{"class":49,"line":1423},[47,5901,1659],{"class":221},[19,5903,5904],{},"4.有参有返",[38,5906,5908],{"className":208,"code":5907,"language":210,"meta":43,"style":43},"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",[26,5909,5910,5925,5929,5942,5948,5952,5961,5965,5977,5991,6006],{"__ignoreMap":43},[47,5911,5912,5914,5917,5919,5921,5923],{"class":49,"line":50},[47,5913,225],{"class":217},[47,5915,5916],{"class":53}," test04",[47,5918,222],{"class":221},[47,5920,225],{"class":217},[47,5922,1492],{"class":5309},[47,5924,228],{"class":221},[47,5926,5927],{"class":49,"line":92},[47,5928,1640],{"class":221},[47,5930,5931,5933,5935,5938,5940],{"class":49,"line":1273},[47,5932,1645],{"class":221},[47,5934,1262],{"class":217},[47,5936,5937],{"class":81},"\"hello\"",[47,5939,1262],{"class":217},[47,5941,1285],{"class":221},[47,5943,5944,5946],{"class":49,"line":1288},[47,5945,4183],{"class":217},[47,5947,1526],{"class":221},[47,5949,5950],{"class":49,"line":1294},[47,5951,1659],{"class":221},[47,5953,5954,5956,5959],{"class":49,"line":1308},[47,5955,225],{"class":217},[47,5957,5958],{"class":53}," mian",[47,5960,2069],{"class":221},[47,5962,5963],{"class":49,"line":1314},[47,5964,1640],{"class":221},[47,5966,5967,5969,5971,5973,5975],{"class":49,"line":1405},[47,5968,2078],{"class":217},[47,5970,2926],{"class":221},[47,5972,267],{"class":217},[47,5974,436],{"class":85},[47,5976,1384],{"class":221},[47,5978,5979,5981,5983,5985,5988],{"class":49,"line":1411},[47,5980,2078],{"class":217},[47,5982,2942],{"class":221},[47,5984,267],{"class":217},[47,5986,5987],{"class":53},"test04",[47,5989,5990],{"class":221},"(b);\n",[47,5992,5993,5995,5997,5999,6001,6003],{"class":49,"line":1423},[47,5994,1645],{"class":221},[47,5996,1262],{"class":217},[47,5998,507],{"class":221},[47,6000,1262],{"class":217},[47,6002,1332],{"class":221},[47,6004,6005],{"class":279}," \u002F\u002F1\n",[47,6007,6008],{"class":49,"line":1706},[47,6009,1659],{"class":221},[14,6011,6013],{"id":6012},"_25函数的声明","2.5函数的声明",[19,6015,6016],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,6018,6019,6020],{},"函数的",[369,6021,6022],{},"声明可以多次，但是函数的定义只能有一次",[38,6024,6026],{"className":208,"code":6025,"language":210,"meta":43,"style":43},"\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",[26,6027,6028,6033,6038,6063,6072,6076,6088,6100,6116,6120,6140,6144,6163],{"__ignoreMap":43},[47,6029,6030],{"class":49,"line":50},[47,6031,6032],{"class":279},"\u002F\u002F函数声明\n",[47,6034,6035],{"class":49,"line":92},[47,6036,6037],{"class":279},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[47,6039,6040,6042,6045,6047,6049,6051,6053,6055,6057,6060],{"class":49,"line":1273},[47,6041,225],{"class":217},[47,6043,6044],{"class":53}," max",[47,6046,222],{"class":221},[47,6048,225],{"class":217},[47,6050,1492],{"class":5309},[47,6052,597],{"class":221},[47,6054,225],{"class":217},[47,6056,2926],{"class":5309},[47,6058,6059],{"class":221},");",[47,6061,6062],{"class":279},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[47,6064,6065,6067,6069],{"class":49,"line":1288},[47,6066,225],{"class":217},[47,6068,2066],{"class":53},[47,6070,6071],{"class":221},"() \n",[47,6073,6074],{"class":49,"line":1294},[47,6075,1640],{"class":221},[47,6077,6078,6080,6082,6084,6086],{"class":49,"line":1308},[47,6079,2078],{"class":217},[47,6081,1492],{"class":221},[47,6083,267],{"class":217},[47,6085,665],{"class":85},[47,6087,1384],{"class":221},[47,6089,6090,6092,6094,6096,6098],{"class":49,"line":1314},[47,6091,2078],{"class":217},[47,6093,2926],{"class":221},[47,6095,267],{"class":217},[47,6097,919],{"class":85},[47,6099,1384],{"class":221},[47,6101,6102,6104,6106,6109,6112,6114],{"class":49,"line":1405},[47,6103,1645],{"class":221},[47,6105,1262],{"class":217},[47,6107,6108],{"class":53},"max",[47,6110,6111],{"class":221},"(a,b)",[47,6113,1262],{"class":217},[47,6115,1285],{"class":221},[47,6117,6118],{"class":49,"line":1411},[47,6119,1659],{"class":221},[47,6121,6122,6124,6126,6128,6130,6132,6134,6136,6138],{"class":49,"line":1423},[47,6123,225],{"class":217},[47,6125,6044],{"class":53},[47,6127,222],{"class":221},[47,6129,225],{"class":217},[47,6131,1492],{"class":5309},[47,6133,597],{"class":221},[47,6135,225],{"class":217},[47,6137,2926],{"class":5309},[47,6139,228],{"class":221},[47,6141,6142],{"class":49,"line":1706},[47,6143,1640],{"class":221},[47,6145,6146,6148,6150,6152,6154,6156,6158,6160],{"class":49,"line":1711},[47,6147,4183],{"class":217},[47,6149,1492],{"class":221},[47,6151,1179],{"class":217},[47,6153,482],{"class":221},[47,6155,1205],{"class":217},[47,6157,457],{"class":221},[47,6159,1078],{"class":217},[47,6161,6162],{"class":221},"b;\n",[47,6164,6165],{"class":49,"line":1717},[47,6166,1659],{"class":221},[14,6168,6170],{"id":6169},"_26函数的分文件编写","2.6函数的分文件编写",[19,6172,6173],{},"4个步骤：",[106,6175,6176,6179,6182,6185],{},[109,6177,6178],{},"1.创建后缀名为.h的头文件",[109,6180,6181],{},"2.创建后缀名为.cpp的源文件",[109,6183,6184],{},"3.在头文件中写函数的定义",[109,6186,6187],{},"4.在源文件中写函数的定义\n示例：",[19,6189,6190],{},"头文件：swap.h",[38,6192,6194],{"className":208,"code":6193,"language":210,"meta":43,"style":43},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[26,6195,6196,6202,6212,6216],{"__ignoreMap":43},[47,6197,6198,6200],{"class":49,"line":50},[47,6199,2043],{"class":217},[47,6201,2046],{"class":81},[47,6203,6204,6206,6208,6210],{"class":49,"line":92},[47,6205,2051],{"class":217},[47,6207,2054],{"class":217},[47,6209,2057],{"class":53},[47,6211,1384],{"class":221},[47,6213,6214],{"class":49,"line":1273},[47,6215,6032],{"class":279},[47,6217,6218,6220,6222,6224,6226,6228,6230,6232,6234],{"class":49,"line":1288},[47,6219,5457],{"class":217},[47,6221,5460],{"class":53},[47,6223,222],{"class":221},[47,6225,225],{"class":217},[47,6227,1492],{"class":5309},[47,6229,597],{"class":221},[47,6231,225],{"class":217},[47,6233,2926],{"class":5309},[47,6235,2812],{"class":221},[19,6237,6238],{},"源文件：swap.cpp",[38,6240,6242],{"className":208,"code":6241,"language":210,"meta":43,"style":43},"#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",[26,6243,6244,6251,6256,6276,6280,6291,6300,6309,6326,6343],{"__ignoreMap":43},[47,6245,6246,6248],{"class":49,"line":50},[47,6247,2043],{"class":217},[47,6249,6250],{"class":81}," \"swap.h\"\n",[47,6252,6253],{"class":49,"line":92},[47,6254,6255],{"class":279},"\u002F\u002F函数的定义\n",[47,6257,6258,6260,6262,6264,6266,6268,6270,6272,6274],{"class":49,"line":1273},[47,6259,5457],{"class":217},[47,6261,5460],{"class":53},[47,6263,222],{"class":221},[47,6265,225],{"class":217},[47,6267,1492],{"class":5309},[47,6269,597],{"class":221},[47,6271,225],{"class":217},[47,6273,2926],{"class":5309},[47,6275,228],{"class":221},[47,6277,6278],{"class":49,"line":1288},[47,6279,1640],{"class":221},[47,6281,6282,6284,6286,6288],{"class":49,"line":1294},[47,6283,2078],{"class":217},[47,6285,4348],{"class":221},[47,6287,267],{"class":217},[47,6289,6290],{"class":221},"a;\n",[47,6292,6293,6296,6298],{"class":49,"line":1308},[47,6294,6295],{"class":221},"    a",[47,6297,267],{"class":217},[47,6299,6162],{"class":221},[47,6301,6302,6305,6307],{"class":49,"line":1314},[47,6303,6304],{"class":221},"    b",[47,6306,267],{"class":217},[47,6308,4373],{"class":221},[47,6310,6311,6313,6315,6318,6320,6322,6324],{"class":49,"line":1405},[47,6312,1645],{"class":221},[47,6314,1262],{"class":217},[47,6316,6317],{"class":81},"\"a=\"",[47,6319,1262],{"class":217},[47,6321,457],{"class":221},[47,6323,1262],{"class":217},[47,6325,1285],{"class":221},[47,6327,6328,6330,6332,6335,6337,6339,6341],{"class":49,"line":1411},[47,6329,1645],{"class":221},[47,6331,1262],{"class":217},[47,6333,6334],{"class":81},"\"b=\"",[47,6336,1262],{"class":217},[47,6338,482],{"class":221},[47,6340,1262],{"class":217},[47,6342,1285],{"class":221},[47,6344,6345],{"class":49,"line":1423},[47,6346,1659],{"class":221},[134,6348,6349],{},"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":43,"searchDepth":92,"depth":92,"links":6351},[6352,6353,6354,6355,6356,6357],{"id":5265,"depth":92,"text":5266},{"id":5354,"depth":92,"text":5355},{"id":5437,"depth":92,"text":5438},{"id":5663,"depth":92,"text":5664},{"id":6012,"depth":92,"text":6013},{"id":6169,"depth":92,"text":6170},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5257,"description":43},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6364,"title":6365,"body":6366,"description":6373,"extension":143,"meta":7778,"navigation":145,"path":7779,"seo":7780,"stem":7781,"__hash__":7782},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6367,"toc":7768},[6368,6371,6374,6378,6540,6544,6547,6550,6553,6556,6696,6700,6703,6706,6709,6774,6778,6783,6850,6853,6857,6860,6871,6876,6896,6899,6904,6923,6926,6930,6949,6952,6956,7191,7195,7198,7201,7204,7366,7369,7373,7376,7382,7765],[10,6369,6365],{"id":6370},"_3指针",[19,6372,6373],{},"通过指针保存一个地址，指针就是个地址",[14,6375,6377],{"id":6376},"_31定义指针","3.1定义指针",[38,6379,6381],{"className":208,"code":6380,"language":210,"meta":43,"style":43},"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",[26,6382,6383,6391,6395,6400,6412,6417,6425,6435,6453,6473,6477,6482,6487,6492,6506,6522,6536],{"__ignoreMap":43},[47,6384,6385,6387,6389],{"class":49,"line":50},[47,6386,225],{"class":217},[47,6388,2066],{"class":53},[47,6390,2069],{"class":221},[47,6392,6393],{"class":49,"line":92},[47,6394,1640],{"class":221},[47,6396,6397],{"class":49,"line":1273},[47,6398,6399],{"class":279},"    \u002F\u002F1.定义指针\n",[47,6401,6402,6404,6406,6408,6410],{"class":49,"line":1288},[47,6403,2078],{"class":217},[47,6405,1492],{"class":221},[47,6407,267],{"class":217},[47,6409,665],{"class":85},[47,6411,1384],{"class":221},[47,6413,6414],{"class":49,"line":1294},[47,6415,6416],{"class":279},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[47,6418,6419,6422],{"class":49,"line":1308},[47,6420,6421],{"class":217},"    int*",[47,6423,6424],{"class":221},"p;\n",[47,6426,6427,6430,6433],{"class":49,"line":1314},[47,6428,6429],{"class":221},"    p",[47,6431,6432],{"class":217},"=&",[47,6434,6290],{"class":221},[47,6436,6437,6439,6441,6444,6447,6449,6451],{"class":49,"line":1405},[47,6438,1645],{"class":221},[47,6440,1262],{"class":217},[47,6442,6443],{"class":81},"\"a的地址为：\"",[47,6445,6446],{"class":217},"\u003C\u003C&",[47,6448,457],{"class":221},[47,6450,1262],{"class":217},[47,6452,1285],{"class":221},[47,6454,6455,6457,6459,6462,6464,6466,6468,6470],{"class":49,"line":1411},[47,6456,1645],{"class":221},[47,6458,1262],{"class":217},[47,6460,6461],{"class":81},"\"指针p为：\"",[47,6463,1262],{"class":217},[47,6465,19],{"class":221},[47,6467,1262],{"class":217},[47,6469,1332],{"class":221},[47,6471,6472],{"class":279},"\u002F\u002F指针p表示的就是a的地址\n",[47,6474,6475],{"class":49,"line":1423},[47,6476,2493],{"emptyLinePlaceholder":145},[47,6478,6479],{"class":49,"line":1706},[47,6480,6481],{"class":279},"    \u002F\u002F2.使用指针\n",[47,6483,6484],{"class":49,"line":1711},[47,6485,6486],{"class":279},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[47,6488,6489],{"class":49,"line":1717},[47,6490,6491],{"class":279},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[47,6493,6494,6497,6499,6501,6504],{"class":49,"line":1722},[47,6495,6496],{"class":217},"    *",[47,6498,19],{"class":221},[47,6500,267],{"class":217},[47,6502,6503],{"class":85},"1000",[47,6505,1384],{"class":221},[47,6507,6508,6510,6513,6515,6517,6519],{"class":49,"line":1736},[47,6509,1645],{"class":221},[47,6511,6512],{"class":217},"\u003C\u003C*",[47,6514,19],{"class":221},[47,6516,1262],{"class":217},[47,6518,1332],{"class":221},[47,6520,6521],{"class":279},"\u002F\u002F1000\n",[47,6523,6524,6526,6528,6530,6532,6534],{"class":49,"line":1741},[47,6525,1645],{"class":221},[47,6527,1262],{"class":217},[47,6529,457],{"class":221},[47,6531,1262],{"class":217},[47,6533,1332],{"class":221},[47,6535,6521],{"class":279},[47,6537,6538],{"class":49,"line":1747},[47,6539,1659],{"class":221},[14,6541,6543],{"id":6542},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,6545,6546],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,6548,6549],{},"在32位操作系统下：占用4个字节空间",[19,6551,6552],{},"在64位操作系统下：占用8个字节空间",[19,6554,6555],{},"上方是不管啥数据类型的",[38,6557,6559],{"className":208,"code":6558,"language":210,"meta":43,"style":43},"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",[26,6560,6561,6569,6573,6578,6590,6595,6600,6605,6618,6640,6666,6692],{"__ignoreMap":43},[47,6562,6563,6565,6567],{"class":49,"line":50},[47,6564,225],{"class":217},[47,6566,2066],{"class":53},[47,6568,2069],{"class":221},[47,6570,6571],{"class":49,"line":92},[47,6572,1640],{"class":221},[47,6574,6575],{"class":49,"line":1273},[47,6576,6577],{"class":279},"    \u002F\u002F指针所占内存空间\n",[47,6579,6580,6582,6584,6586,6588],{"class":49,"line":1288},[47,6581,2078],{"class":217},[47,6583,1492],{"class":221},[47,6585,267],{"class":217},[47,6587,665],{"class":85},[47,6589,1384],{"class":221},[47,6591,6592],{"class":49,"line":1294},[47,6593,6594],{"class":279},"    \u002F\u002Fint *p;\n",[47,6596,6597],{"class":49,"line":1308},[47,6598,6599],{"class":279},"    \u002F\u002Fp=&a;\n",[47,6601,6602],{"class":49,"line":1314},[47,6603,6604],{"class":279},"    \u002F\u002F上述可以写为以下：\n",[47,6606,6607,6609,6612,6614,6616],{"class":49,"line":1405},[47,6608,2078],{"class":217},[47,6610,6611],{"class":217}," *",[47,6613,19],{"class":221},[47,6615,6432],{"class":217},[47,6617,6290],{"class":221},[47,6619,6620,6623,6625,6628,6630,6633,6635,6637],{"class":49,"line":1411},[47,6621,6622],{"class":221},"    cout ",[47,6624,1262],{"class":217},[47,6626,6627],{"class":81},"\"sizeof(int *)\"",[47,6629,1466],{"class":217},[47,6631,6632],{"class":221},"(p)",[47,6634,1262],{"class":217},[47,6636,1332],{"class":221},[47,6638,6639],{"class":279},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[47,6641,6642,6644,6646,6648,6650,6652,6654,6656,6658,6660,6663],{"class":49,"line":1423},[47,6643,6622],{"class":221},[47,6645,1262],{"class":217},[47,6647,6627],{"class":81},[47,6649,1466],{"class":217},[47,6651,222],{"class":221},[47,6653,225],{"class":217},[47,6655,6611],{"class":217},[47,6657,648],{"class":221},[47,6659,1262],{"class":217},[47,6661,6662],{"class":221},"endl",[47,6664,6665],{"class":279},"  \u002F\u002F4字节(32位的话)\n",[47,6667,6668,6670,6672,6675,6677,6679,6681,6683,6685,6687,6689],{"class":49,"line":1706},[47,6669,6622],{"class":221},[47,6671,1262],{"class":217},[47,6673,6674],{"class":81},"\"sizeof(char *)\"",[47,6676,1466],{"class":217},[47,6678,222],{"class":221},[47,6680,317],{"class":217},[47,6682,6611],{"class":217},[47,6684,648],{"class":221},[47,6686,1262],{"class":217},[47,6688,1332],{"class":221},[47,6690,6691],{"class":279}," \u002F\u002F4字节(32位的话)\n",[47,6693,6694],{"class":49,"line":1711},[47,6695,1659],{"class":221},[14,6697,6699],{"id":6698},"_33空指针","3.3空指针",[19,6701,6702],{},"空指针：指针变量指向内存中编号为0的空间",[19,6704,6705],{},"用途：初始化指针变量",[19,6707,6708],{},"注意：空指针指向的内存是不可以访问的",[38,6710,6712],{"className":208,"code":6711,"language":210,"meta":43,"style":43},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[26,6713,6714,6722,6726,6731,6745,6750,6765,6770],{"__ignoreMap":43},[47,6715,6716,6718,6720],{"class":49,"line":50},[47,6717,225],{"class":217},[47,6719,2066],{"class":53},[47,6721,2069],{"class":221},[47,6723,6724],{"class":49,"line":92},[47,6725,1640],{"class":221},[47,6727,6728],{"class":49,"line":1273},[47,6729,6730],{"class":279},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[47,6732,6733,6735,6737,6739,6741,6743],{"class":49,"line":1288},[47,6734,2078],{"class":217},[47,6736,6611],{"class":217},[47,6738,19],{"class":221},[47,6740,267],{"class":217},[47,6742,2485],{"class":85},[47,6744,1384],{"class":221},[47,6746,6747],{"class":49,"line":1294},[47,6748,6749],{"class":279},"    \u002F\u002F2.空指针不能进行访问\n",[47,6751,6752,6754,6756,6758,6760,6762],{"class":49,"line":1308},[47,6753,6496],{"class":217},[47,6755,19],{"class":221},[47,6757,267],{"class":217},[47,6759,530],{"class":85},[47,6761,276],{"class":221},[47,6763,6764],{"class":279},"\u002F\u002F直接报错，压根不能访问\n",[47,6766,6767],{"class":49,"line":1314},[47,6768,6769],{"class":279},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[47,6771,6772],{"class":49,"line":1405},[47,6773,1659],{"class":221},[14,6775,6777],{"id":6776},"_34野指针","3.4野指针",[19,6779,6780],{},[369,6781,6782],{},"指针变量指向非法的内存空间",[38,6784,6786],{"className":208,"code":6785,"language":210,"meta":43,"style":43},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[26,6787,6788,6796,6800,6829,6834,6846],{"__ignoreMap":43},[47,6789,6790,6792,6794],{"class":49,"line":50},[47,6791,225],{"class":217},[47,6793,2066],{"class":53},[47,6795,2069],{"class":221},[47,6797,6798],{"class":49,"line":92},[47,6799,1640],{"class":221},[47,6801,6802,6804,6806,6808,6810,6812,6814,6816,6818,6821,6824,6826],{"class":49,"line":1273},[47,6803,2078],{"class":217},[47,6805,6611],{"class":217},[47,6807,19],{"class":221},[47,6809,267],{"class":217},[47,6811,222],{"class":221},[47,6813,225],{"class":217},[47,6815,6611],{"class":217},[47,6817,648],{"class":221},[47,6819,6820],{"class":217},"0x",[47,6822,6823],{"class":85},"1100",[47,6825,276],{"class":221},[47,6827,6828],{"class":279}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[47,6830,6831],{"class":49,"line":1288},[47,6832,6833],{"class":279},"    \u002F\u002F访问野指针报错\n",[47,6835,6836,6838,6840,6842,6844],{"class":49,"line":1294},[47,6837,1645],{"class":221},[47,6839,6512],{"class":217},[47,6841,19],{"class":221},[47,6843,1262],{"class":217},[47,6845,1285],{"class":221},[47,6847,6848],{"class":49,"line":1308},[47,6849,1659],{"class":221},[19,6851,6852],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,6854,6856],{"id":6855},"_35const修饰指针","3.5const修饰指针",[19,6858,6859],{},"三种情况：",[106,6861,6862,6865,6868],{},[109,6863,6864],{},"const修饰指针 常量指针",[109,6866,6867],{},"const修饰常量 指针常量",[109,6869,6870],{},"const即修饰指针，又修饰常量",[171,6872,6873],{},[109,6874,6875],{},"常量指针",[38,6877,6879],{"className":208,"code":6878,"language":210,"meta":43,"style":43},"const int *p=&a;\n",[26,6880,6881],{"__ignoreMap":43},[47,6882,6883,6886,6888,6890,6892,6894],{"class":49,"line":50},[47,6884,6885],{"class":217},"const",[47,6887,2475],{"class":217},[47,6889,6611],{"class":217},[47,6891,19],{"class":221},[47,6893,6432],{"class":217},[47,6895,6290],{"class":221},[19,6897,6898],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[171,6900,6901],{"start":92},[109,6902,6903],{},"指针常量",[38,6905,6907],{"className":208,"code":6906,"language":210,"meta":43,"style":43},"int *const p=&a;\n",[26,6908,6909],{"__ignoreMap":43},[47,6910,6911,6913,6916,6919,6921],{"class":49,"line":50},[47,6912,225],{"class":217},[47,6914,6915],{"class":217}," *const",[47,6917,6918],{"class":221}," p",[47,6920,6432],{"class":217},[47,6922,6290],{"class":221},[19,6924,6925],{},"指针的指向不可以改，指针指向的值可以改",[171,6927,6928],{"start":1273},[109,6929,6870],{},[38,6931,6933],{"className":208,"code":6932,"language":210,"meta":43,"style":43},"const int *const p=&a;\n",[26,6934,6935],{"__ignoreMap":43},[47,6936,6937,6939,6941,6943,6945,6947],{"class":49,"line":50},[47,6938,6885],{"class":217},[47,6940,2475],{"class":217},[47,6942,6915],{"class":217},[47,6944,6918],{"class":221},[47,6946,6432],{"class":217},[47,6948,6290],{"class":221},[19,6950,6951],{},"指针的指向和指针指向的值都不可以改变",[14,6953,6955],{"id":6954},"_36指针和数组","3.6指针和数组",[38,6957,6959],{"className":208,"code":6958,"language":210,"meta":43,"style":43},"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",[26,6960,6961,6969,6973,6978,7032,7053,7069,7085,7096,7113,7118,7132,7158,7162,7174,7183,7187],{"__ignoreMap":43},[47,6962,6963,6965,6967],{"class":49,"line":50},[47,6964,225],{"class":217},[47,6966,2066],{"class":53},[47,6968,2069],{"class":221},[47,6970,6971],{"class":49,"line":92},[47,6972,1640],{"class":221},[47,6974,6975],{"class":49,"line":1273},[47,6976,6977],{"class":279},"    \u002F\u002F利用指针访问数组中的元素\n",[47,6979,6980,6982,6984,6986,6988,6990,6992,6994,6996,6998,7000,7002,7004,7006,7008,7010,7012,7014,7016,7018,7020,7022,7024,7026,7028,7030],{"class":49,"line":1288},[47,6981,2078],{"class":217},[47,6983,4055],{"class":221},[47,6985,665],{"class":85},[47,6987,1159],{"class":221},[47,6989,267],{"class":217},[47,6991,1115],{"class":221},[47,6993,436],{"class":85},[47,6995,597],{"class":221},[47,6997,298],{"class":85},[47,6999,597],{"class":221},[47,7001,292],{"class":85},[47,7003,597],{"class":221},[47,7005,512],{"class":85},[47,7007,597],{"class":221},[47,7009,538],{"class":85},[47,7011,597],{"class":221},[47,7013,563],{"class":85},[47,7015,597],{"class":221},[47,7017,588],{"class":85},[47,7019,597],{"class":221},[47,7021,614],{"class":85},[47,7023,597],{"class":221},[47,7025,639],{"class":85},[47,7027,597],{"class":221},[47,7029,665],{"class":85},[47,7031,4088],{"class":221},[47,7033,7034,7036,7038,7041,7043,7045,7047,7049,7051],{"class":49,"line":1294},[47,7035,1645],{"class":221},[47,7037,1262],{"class":217},[47,7039,7040],{"class":81},"\"数组的第一个元素为：\"",[47,7042,1262],{"class":217},[47,7044,3999],{"class":221},[47,7046,411],{"class":85},[47,7048,1159],{"class":221},[47,7050,1262],{"class":217},[47,7052,1285],{"class":221},[47,7054,7055,7057,7059,7061,7063,7066],{"class":49,"line":1308},[47,7056,2078],{"class":217},[47,7058,6611],{"class":217},[47,7060,19],{"class":221},[47,7062,267],{"class":217},[47,7064,7065],{"class":221},"arr;",[47,7067,7068],{"class":279},"\u002F\u002F注意数才要加取地址符号&\n",[47,7070,7071,7073,7075,7077,7079,7081,7083],{"class":49,"line":1314},[47,7072,1645],{"class":221},[47,7074,1262],{"class":217},[47,7076,7040],{"class":81},[47,7078,6512],{"class":217},[47,7080,19],{"class":221},[47,7082,1262],{"class":217},[47,7084,1285],{"class":221},[47,7086,7087,7089,7091,7093],{"class":49,"line":1405},[47,7088,6429],{"class":221},[47,7090,2385],{"class":217},[47,7092,276],{"class":221},[47,7094,7095],{"class":279}," \u002F\u002F让指针向后偏移4个字节\n",[47,7097,7098,7100,7102,7105,7107,7109,7111],{"class":49,"line":1411},[47,7099,1645],{"class":221},[47,7101,1262],{"class":217},[47,7103,7104],{"class":81},"\"数组的第二个元素为：\"",[47,7106,6512],{"class":217},[47,7108,19],{"class":221},[47,7110,1262],{"class":217},[47,7112,1285],{"class":221},[47,7114,7115],{"class":49,"line":1423},[47,7116,7117],{"class":279},"    \u002F\u002F利用指针遍历数组\n",[47,7119,7120,7122,7124,7127,7129],{"class":49,"line":1706},[47,7121,2078],{"class":217},[47,7123,6611],{"class":217},[47,7125,7126],{"class":221},"p2",[47,7128,267],{"class":217},[47,7130,7131],{"class":221},"arr;\n",[47,7133,7134,7136,7138,7140,7142,7144,7146,7148,7150,7152,7154,7156],{"class":49,"line":1711},[47,7135,3294],{"class":217},[47,7137,1752],{"class":221},[47,7139,225],{"class":217},[47,7141,3125],{"class":221},[47,7143,267],{"class":217},[47,7145,411],{"class":85},[47,7147,3132],{"class":221},[47,7149,1129],{"class":217},[47,7151,665],{"class":85},[47,7153,3132],{"class":221},[47,7155,2385],{"class":217},[47,7157,228],{"class":221},[47,7159,7160],{"class":49,"line":1717},[47,7161,2123],{"class":221},[47,7163,7164,7166,7168,7170,7172],{"class":49,"line":1722},[47,7165,3544],{"class":221},[47,7167,6512],{"class":217},[47,7169,7126],{"class":221},[47,7171,1262],{"class":217},[47,7173,1285],{"class":221},[47,7175,7176,7179,7181],{"class":49,"line":1736},[47,7177,7178],{"class":221},"        p2",[47,7180,2385],{"class":217},[47,7182,1384],{"class":221},[47,7184,7185],{"class":49,"line":1741},[47,7186,2280],{"class":221},[47,7188,7189],{"class":49,"line":1747},[47,7190,1659],{"class":221},[14,7192,7194],{"id":7193},"_37指针和函数","3.7指针和函数",[19,7196,7197],{},"利用指针做函数参数，可以修改实参的值",[19,7199,7200],{},"值传递：只改变形参，不改变实参",[19,7202,7203],{},"地址传递：",[38,7205,7207],{"className":208,"code":7206,"language":210,"meta":43,"style":43},"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",[26,7208,7209,7234,7238,7250,7261,7271,7275,7283,7287,7299,7311,7316,7332,7347,7362],{"__ignoreMap":43},[47,7210,7211,7213,7215,7217,7219,7221,7224,7226,7228,7230,7232],{"class":49,"line":50},[47,7212,5457],{"class":217},[47,7214,5460],{"class":53},[47,7216,222],{"class":221},[47,7218,225],{"class":217},[47,7220,6611],{"class":217},[47,7222,7223],{"class":5309},"p1",[47,7225,597],{"class":221},[47,7227,225],{"class":217},[47,7229,6611],{"class":217},[47,7231,7126],{"class":5309},[47,7233,228],{"class":221},[47,7235,7236],{"class":49,"line":92},[47,7237,1640],{"class":221},[47,7239,7240,7242,7244,7247],{"class":49,"line":1273},[47,7241,2078],{"class":217},[47,7243,4348],{"class":221},[47,7245,7246],{"class":217},"=*",[47,7248,7249],{"class":221},"p1;\n",[47,7251,7252,7254,7256,7258],{"class":49,"line":1288},[47,7253,6496],{"class":217},[47,7255,7223],{"class":221},[47,7257,7246],{"class":217},[47,7259,7260],{"class":221},"p2;\n",[47,7262,7263,7265,7267,7269],{"class":49,"line":1294},[47,7264,6496],{"class":217},[47,7266,7126],{"class":221},[47,7268,267],{"class":217},[47,7270,4373],{"class":221},[47,7272,7273],{"class":49,"line":1308},[47,7274,1659],{"class":221},[47,7276,7277,7279,7281],{"class":49,"line":1314},[47,7278,225],{"class":217},[47,7280,2066],{"class":53},[47,7282,2069],{"class":221},[47,7284,7285],{"class":49,"line":1405},[47,7286,1640],{"class":221},[47,7288,7289,7291,7293,7295,7297],{"class":49,"line":1411},[47,7290,2078],{"class":217},[47,7292,1492],{"class":221},[47,7294,267],{"class":217},[47,7296,665],{"class":85},[47,7298,1384],{"class":221},[47,7300,7301,7303,7305,7307,7309],{"class":49,"line":1423},[47,7302,2078],{"class":217},[47,7304,2926],{"class":221},[47,7306,267],{"class":217},[47,7308,919],{"class":85},[47,7310,1384],{"class":221},[47,7312,7313],{"class":49,"line":1706},[47,7314,7315],{"class":279},"    \u002F\u002F地址传递\n",[47,7317,7318,7320,7322,7324,7327,7329],{"class":49,"line":1711},[47,7319,5654],{"class":53},[47,7321,222],{"class":221},[47,7323,572],{"class":217},[47,7325,7326],{"class":221},"a,",[47,7328,572],{"class":217},[47,7330,7331],{"class":221},"b);\n",[47,7333,7334,7336,7338,7340,7342,7344],{"class":49,"line":1717},[47,7335,1645],{"class":221},[47,7337,1262],{"class":217},[47,7339,457],{"class":221},[47,7341,1262],{"class":217},[47,7343,1332],{"class":221},[47,7345,7346],{"class":279},"\u002F\u002F20\n",[47,7348,7349,7351,7353,7355,7357,7359],{"class":49,"line":1722},[47,7350,1645],{"class":221},[47,7352,1262],{"class":217},[47,7354,482],{"class":221},[47,7356,1262],{"class":217},[47,7358,1332],{"class":221},[47,7360,7361],{"class":279},"\u002F\u002F10\n",[47,7363,7364],{"class":49,"line":1736},[47,7365,1659],{"class":221},[19,7367,7368],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,7370,7372],{"id":7371},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,7374,7375],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,7377,7378,7379,7381],{},"例如数组：int arr",[47,7380,665],{},"={4,3,6,9,1,2,10,8,7,5}",[38,7383,7385],{"className":208,"code":7384,"language":210,"meta":43,"style":43},"#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",[26,7386,7387,7393,7403,7427,7431,7462,7466,7500,7504,7522,7526,7537,7552,7567,7571,7575,7579,7583,7587,7595,7599,7604,7658,7670,7682,7687,7695,7699,7704,7729,7733,7748,7757,7761],{"__ignoreMap":43},[47,7388,7389,7391],{"class":49,"line":50},[47,7390,2043],{"class":217},[47,7392,2046],{"class":81},[47,7394,7395,7397,7399,7401],{"class":49,"line":92},[47,7396,2051],{"class":217},[47,7398,2054],{"class":217},[47,7400,2057],{"class":53},[47,7402,1384],{"class":221},[47,7404,7405,7407,7410,7412,7414,7416,7418,7420,7422,7425],{"class":49,"line":1273},[47,7406,5457],{"class":217},[47,7408,7409],{"class":53}," bubbleSort",[47,7411,222],{"class":221},[47,7413,225],{"class":217},[47,7415,6611],{"class":217},[47,7417,19],{"class":5309},[47,7419,597],{"class":221},[47,7421,225],{"class":217},[47,7423,7424],{"class":5309}," len",[47,7426,228],{"class":221},[47,7428,7429],{"class":49,"line":1288},[47,7430,1640],{"class":221},[47,7432,7433,7435,7437,7439,7441,7443,7445,7447,7449,7452,7454,7456,7458,7460],{"class":49,"line":1294},[47,7434,3294],{"class":217},[47,7436,222],{"class":221},[47,7438,225],{"class":217},[47,7440,3125],{"class":221},[47,7442,267],{"class":217},[47,7444,411],{"class":85},[47,7446,3132],{"class":221},[47,7448,1129],{"class":217},[47,7450,7451],{"class":221},"len",[47,7453,751],{"class":217},[47,7455,436],{"class":85},[47,7457,3132],{"class":221},[47,7459,2385],{"class":217},[47,7461,228],{"class":221},[47,7463,7464],{"class":49,"line":1308},[47,7465,2123],{"class":221},[47,7467,7468,7470,7472,7474,7476,7478,7480,7482,7484,7486,7488,7490,7492,7494,7496,7498],{"class":49,"line":1314},[47,7469,3496],{"class":217},[47,7471,222],{"class":221},[47,7473,225],{"class":217},[47,7475,3503],{"class":221},[47,7477,267],{"class":217},[47,7479,411],{"class":85},[47,7481,3510],{"class":221},[47,7483,1129],{"class":217},[47,7485,7451],{"class":221},[47,7487,751],{"class":217},[47,7489,660],{"class":221},[47,7491,751],{"class":217},[47,7493,436],{"class":85},[47,7495,3510],{"class":221},[47,7497,2385],{"class":217},[47,7499,228],{"class":221},[47,7501,7502],{"class":49,"line":1405},[47,7503,2603],{"class":221},[47,7505,7506,7508,7511,7513,7516,7518,7520],{"class":49,"line":1411},[47,7507,4735],{"class":217},[47,7509,7510],{"class":221},"(p[j]",[47,7512,1179],{"class":217},[47,7514,7515],{"class":221},"p[j",[47,7517,700],{"class":217},[47,7519,436],{"class":85},[47,7521,4750],{"class":221},[47,7523,7524],{"class":49,"line":1423},[47,7525,4755],{"class":221},[47,7527,7528,7530,7532,7534],{"class":49,"line":1706},[47,7529,4760],{"class":217},[47,7531,4348],{"class":221},[47,7533,267],{"class":217},[47,7535,7536],{"class":221},"p[j];\n",[47,7538,7539,7542,7544,7546,7548,7550],{"class":49,"line":1711},[47,7540,7541],{"class":221},"                p[j]",[47,7543,267],{"class":217},[47,7545,7515],{"class":221},[47,7547,700],{"class":217},[47,7549,436],{"class":85},[47,7551,4783],{"class":221},[47,7553,7554,7557,7559,7561,7563,7565],{"class":49,"line":1717},[47,7555,7556],{"class":221},"                p[j",[47,7558,700],{"class":217},[47,7560,436],{"class":85},[47,7562,1159],{"class":221},[47,7564,267],{"class":217},[47,7566,4373],{"class":221},[47,7568,7569],{"class":49,"line":1722},[47,7570,4803],{"class":221},[47,7572,7573],{"class":49,"line":1736},[47,7574,2622],{"class":221},[47,7576,7577],{"class":49,"line":1741},[47,7578,2280],{"class":221},[47,7580,7581],{"class":49,"line":1747},[47,7582,1659],{"class":221},[47,7584,7585],{"class":49,"line":1768},[47,7586,2493],{"emptyLinePlaceholder":145},[47,7588,7589,7591,7593],{"class":49,"line":1773},[47,7590,225],{"class":217},[47,7592,2066],{"class":53},[47,7594,2069],{"class":221},[47,7596,7597],{"class":49,"line":1787},[47,7598,1640],{"class":221},[47,7600,7601],{"class":49,"line":1792},[47,7602,7603],{"class":279},"    \u002F\u002F 1.创建数组\n",[47,7605,7606,7608,7610,7612,7614,7616,7618,7620,7622,7624,7626,7628,7630,7632,7634,7636,7638,7640,7642,7644,7646,7648,7650,7652,7654,7656],{"class":49,"line":1821},[47,7607,2078],{"class":217},[47,7609,4055],{"class":221},[47,7611,665],{"class":85},[47,7613,1159],{"class":221},[47,7615,267],{"class":217},[47,7617,1115],{"class":221},[47,7619,512],{"class":85},[47,7621,597],{"class":221},[47,7623,292],{"class":85},[47,7625,597],{"class":221},[47,7627,563],{"class":85},[47,7629,597],{"class":221},[47,7631,639],{"class":85},[47,7633,597],{"class":221},[47,7635,436],{"class":85},[47,7637,597],{"class":221},[47,7639,298],{"class":85},[47,7641,597],{"class":221},[47,7643,665],{"class":85},[47,7645,597],{"class":221},[47,7647,614],{"class":85},[47,7649,597],{"class":221},[47,7651,588],{"class":85},[47,7653,597],{"class":221},[47,7655,538],{"class":85},[47,7657,4088],{"class":221},[47,7659,7660,7662,7664,7666,7668],{"class":49,"line":1826},[47,7661,2078],{"class":217},[47,7663,7424],{"class":221},[47,7665,267],{"class":217},[47,7667,665],{"class":85},[47,7669,1384],{"class":221},[47,7671,7672,7674,7676,7678,7680],{"class":49,"line":1843},[47,7673,2078],{"class":217},[47,7675,6611],{"class":217},[47,7677,19],{"class":221},[47,7679,267],{"class":217},[47,7681,7131],{"class":221},[47,7683,7684],{"class":49,"line":1848},[47,7685,7686],{"class":279},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[47,7688,7689,7692],{"class":49,"line":1853},[47,7690,7691],{"class":53},"    bubbleSort",[47,7693,7694],{"class":221},"(p,len);\n",[47,7696,7697],{"class":49,"line":1858},[47,7698,2493],{"emptyLinePlaceholder":145},[47,7700,7701],{"class":49,"line":1872},[47,7702,7703],{"class":279},"    \u002F\u002F 3.打印排序后的数组\n",[47,7705,7706,7708,7710,7712,7714,7716,7718,7720,7722,7725,7727],{"class":49,"line":1877},[47,7707,3294],{"class":217},[47,7709,1752],{"class":221},[47,7711,225],{"class":217},[47,7713,3125],{"class":221},[47,7715,267],{"class":217},[47,7717,411],{"class":85},[47,7719,3307],{"class":221},[47,7721,1129],{"class":217},[47,7723,7724],{"class":221},"len; i",[47,7726,2385],{"class":217},[47,7728,228],{"class":221},[47,7730,7731],{"class":49,"line":2670},[47,7732,2123],{"class":221},[47,7734,7735,7737,7739,7741,7743,7746],{"class":49,"line":2684},[47,7736,3544],{"class":221},[47,7738,6512],{"class":217},[47,7740,19],{"class":221},[47,7742,1262],{"class":217},[47,7744,7745],{"class":81},"\"\"",[47,7747,1384],{"class":221},[47,7749,7750,7753,7755],{"class":49,"line":2692},[47,7751,7752],{"class":221},"        p",[47,7754,2385],{"class":217},[47,7756,1384],{"class":221},[47,7758,7759],{"class":49,"line":2697},[47,7760,2280],{"class":221},[47,7762,7763],{"class":49,"line":2703},[47,7764,1659],{"class":221},[134,7766,7767],{},"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":43,"searchDepth":92,"depth":92,"links":7769},[7770,7771,7772,7773,7774,7775,7776,7777],{"id":6376,"depth":92,"text":6377},{"id":6542,"depth":92,"text":6543},{"id":6698,"depth":92,"text":6699},{"id":6776,"depth":92,"text":6777},{"id":6855,"depth":92,"text":6856},{"id":6954,"depth":92,"text":6955},{"id":7193,"depth":92,"text":7194},{"id":7371,"depth":92,"text":7372},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6365,"description":6373},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7784,"title":7785,"body":7786,"description":7793,"extension":143,"meta":10767,"navigation":145,"path":10768,"seo":10769,"stem":10770,"__hash__":10771},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7787,"toc":10758},[7788,7791,7794,7798,7801,7804,7815,8153,8156,8160,8163,8170,8425,8429,8432,8435,8590,8594,8597,8600,8806,8810,8813,9116,9119,9127,9131,9134,9285,9287,9298,9355,9359,9364,10021,10029,10032,10126,10129,10749,10755],[10,7789,7785],{"id":7790},"_4结构体",[19,7792,7793],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,7795,7797],{"id":7796},"_41结构体定义与使用","4.1结构体定义与使用",[19,7799,7800],{},"语法：struct 结构体名 {结构体成员列表}；",[19,7802,7803],{},"通过结构体创建变量的方式：",[106,7805,7806,7809,7812],{},[109,7807,7808],{},"struct 结构体名 变量名",[109,7810,7811],{},"struct 结构体名 变量名={成员1值，成员2值...}",[109,7813,7814],{},"定义结构体时顺便创建变量",[38,7816,7818],{"className":208,"code":7817,"language":210,"meta":43,"style":43},"#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",[26,7819,7820,7826,7836,7843,7848,7856,7860,7865,7869,7874,7879,7884,7891,7896,7903,7907,7914,7918,7922,7926,7930,7934,7938,7944,7948,7954,7962,7970,7974,7979,7984,7995,8000,8012,8023,8034,8039,8063,8068,8074,8101,8106,8112,8124,8136,8148],{"__ignoreMap":43},[47,7821,7822,7824],{"class":49,"line":50},[47,7823,2043],{"class":217},[47,7825,2046],{"class":81},[47,7827,7828,7830,7832,7834],{"class":49,"line":92},[47,7829,2051],{"class":217},[47,7831,2054],{"class":217},[47,7833,2057],{"class":53},[47,7835,1384],{"class":221},[47,7837,7838,7840],{"class":49,"line":1273},[47,7839,2043],{"class":217},[47,7841,7842],{"class":81},"\u003Cstring>\n",[47,7844,7845],{"class":49,"line":1288},[47,7846,7847],{"class":279},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[47,7849,7850,7853],{"class":49,"line":1294},[47,7851,7852],{"class":217},"struct",[47,7854,7855],{"class":53}," Student\n",[47,7857,7858],{"class":49,"line":1308},[47,7859,1640],{"class":221},[47,7861,7862],{"class":49,"line":1314},[47,7863,7864],{"class":279},"    \u002F\u002F成员列表\n",[47,7866,7867],{"class":49,"line":1405},[47,7868,2493],{"emptyLinePlaceholder":145},[47,7870,7871],{"class":49,"line":1411},[47,7872,7873],{"class":279},"    \u002F\u002F姓名\n",[47,7875,7876],{"class":49,"line":1423},[47,7877,7878],{"class":221},"    string name;\n",[47,7880,7881],{"class":49,"line":1706},[47,7882,7883],{"class":279},"    \u002F\u002F年龄\n",[47,7885,7886,7888],{"class":49,"line":1711},[47,7887,2078],{"class":217},[47,7889,7890],{"class":221}," age;\n",[47,7892,7893],{"class":49,"line":1717},[47,7894,7895],{"class":279},"    \u002F\u002F分数\n",[47,7897,7898,7900],{"class":49,"line":1722},[47,7899,2078],{"class":217},[47,7901,7902],{"class":221}," score;\n",[47,7904,7905],{"class":49,"line":1736},[47,7906,4088],{"class":221},[47,7908,7909,7911],{"class":49,"line":1741},[47,7910,7852],{"class":217},[47,7912,7913],{"class":53}," School\n",[47,7915,7916],{"class":49,"line":1747},[47,7917,1640],{"class":221},[47,7919,7920],{"class":49,"line":1768},[47,7921,7864],{"class":279},[47,7923,7924],{"class":49,"line":1773},[47,7925,2493],{"emptyLinePlaceholder":145},[47,7927,7928],{"class":49,"line":1787},[47,7929,7873],{"class":279},[47,7931,7932],{"class":49,"line":1792},[47,7933,7878],{"class":221},[47,7935,7936],{"class":49,"line":1821},[47,7937,7883],{"class":279},[47,7939,7940,7942],{"class":49,"line":1826},[47,7941,2078],{"class":217},[47,7943,7890],{"class":221},[47,7945,7946],{"class":49,"line":1843},[47,7947,7895],{"class":279},[47,7949,7950,7952],{"class":49,"line":1848},[47,7951,2078],{"class":217},[47,7953,7902],{"class":221},[47,7955,7956,7959],{"class":49,"line":1853},[47,7957,7958],{"class":221},"} s3;",[47,7960,7961],{"class":279}," \u002F\u002F创建结构体时就创建了变量\n",[47,7963,7964,7966,7968],{"class":49,"line":1858},[47,7965,225],{"class":217},[47,7967,2066],{"class":53},[47,7969,2069],{"class":221},[47,7971,7972],{"class":49,"line":1872},[47,7973,1640],{"class":221},[47,7975,7976],{"class":49,"line":1877},[47,7977,7978],{"class":279},"    \u002F\u002F2.通过学生类型创建具体学生\n",[47,7980,7981],{"class":49,"line":2670},[47,7982,7983],{"class":279},"    \u002F\u002F2.1 struct Student s1;\n",[47,7985,7986,7989,7992],{"class":49,"line":2684},[47,7987,7988],{"class":217},"    struct",[47,7990,7991],{"class":53}," Student",[47,7993,7994],{"class":221}," s1;\n",[47,7996,7997],{"class":49,"line":2692},[47,7998,7999],{"class":279},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[47,8001,8002,8005,8007,8010],{"class":49,"line":2697},[47,8003,8004],{"class":221},"    s1.name",[47,8006,267],{"class":217},[47,8008,8009],{"class":81},"\"张三\"",[47,8011,1384],{"class":221},[47,8013,8014,8017,8019,8021],{"class":49,"line":2703},[47,8015,8016],{"class":221},"    s1.age",[47,8018,267],{"class":217},[47,8020,869],{"class":85},[47,8022,1384],{"class":221},[47,8024,8025,8028,8030,8032],{"class":49,"line":2709},[47,8026,8027],{"class":221},"    s1.score",[47,8029,267],{"class":217},[47,8031,473],{"class":85},[47,8033,1384],{"class":221},[47,8035,8036],{"class":49,"line":2714},[47,8037,8038],{"class":279},"    \u002F\u002F输出结果\n",[47,8040,8042,8044,8046,8049,8051,8054,8056,8059,8061],{"class":49,"line":8041},37,[47,8043,1645],{"class":221},[47,8045,1262],{"class":217},[47,8047,8048],{"class":221},"s1.name",[47,8050,1262],{"class":217},[47,8052,8053],{"class":221},"s1.age",[47,8055,1262],{"class":217},[47,8057,8058],{"class":221},"s1.score",[47,8060,1262],{"class":217},[47,8062,1285],{"class":221},[47,8064,8066],{"class":49,"line":8065},38,[47,8067,2493],{"emptyLinePlaceholder":145},[47,8069,8071],{"class":49,"line":8070},39,[47,8072,8073],{"class":279},"    \u002F\u002F2.2 struct Student s2={...}\n",[47,8075,8077,8079,8081,8084,8086,8088,8091,8093,8095,8097,8099],{"class":49,"line":8076},40,[47,8078,7988],{"class":217},[47,8080,7991],{"class":53},[47,8082,8083],{"class":221}," s2",[47,8085,267],{"class":217},[47,8087,1115],{"class":221},[47,8089,8090],{"class":81},"\"王五\"",[47,8092,597],{"class":221},[47,8094,869],{"class":85},[47,8096,597],{"class":221},[47,8098,473],{"class":85},[47,8100,4088],{"class":221},[47,8102,8104],{"class":49,"line":8103},41,[47,8105,2493],{"emptyLinePlaceholder":145},[47,8107,8109],{"class":49,"line":8108},42,[47,8110,8111],{"class":279},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[47,8113,8115,8118,8120,8122],{"class":49,"line":8114},43,[47,8116,8117],{"class":221},"    s3.name",[47,8119,267],{"class":217},[47,8121,3771],{"class":81},[47,8123,1384],{"class":221},[47,8125,8127,8130,8132,8134],{"class":49,"line":8126},44,[47,8128,8129],{"class":221},"    s3.age",[47,8131,267],{"class":217},[47,8133,869],{"class":85},[47,8135,1384],{"class":221},[47,8137,8139,8142,8144,8146],{"class":49,"line":8138},45,[47,8140,8141],{"class":221},"    s3.score",[47,8143,267],{"class":217},[47,8145,919],{"class":85},[47,8147,1384],{"class":221},[47,8149,8151],{"class":49,"line":8150},46,[47,8152,1659],{"class":221},[19,8154,8155],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,8157,8159],{"id":8158},"_42结构体数组","4.2结构体数组",[19,8161,8162],{},"将自定义的结构体放入到数组中方便维护",[19,8164,8165,8166,8169],{},"语法：struct 结构体名 数组名",[47,8167,8168],{},"元素个数","={ {}，{},...{} };",[38,8171,8173],{"className":208,"code":8172,"language":210,"meta":43,"style":43},"#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",[26,8174,8175,8181,8191,8197,8202,8208,8212,8216,8222,8228,8232,8236,8244,8248,8253,8268,8272,8288,8304,8308,8313,8329,8344,8359,8364,8390,8394,8417,8421],{"__ignoreMap":43},[47,8176,8177,8179],{"class":49,"line":50},[47,8178,2043],{"class":217},[47,8180,2046],{"class":81},[47,8182,8183,8185,8187,8189],{"class":49,"line":92},[47,8184,2051],{"class":217},[47,8186,2054],{"class":217},[47,8188,2057],{"class":53},[47,8190,1384],{"class":221},[47,8192,8193,8195],{"class":49,"line":1273},[47,8194,2043],{"class":217},[47,8196,7842],{"class":81},[47,8198,8199],{"class":49,"line":1288},[47,8200,8201],{"class":279},"\u002F\u002F1.定义结构体\n",[47,8203,8204,8206],{"class":49,"line":1294},[47,8205,7852],{"class":217},[47,8207,7855],{"class":53},[47,8209,8210],{"class":49,"line":1308},[47,8211,1640],{"class":221},[47,8213,8214],{"class":49,"line":1314},[47,8215,7878],{"class":221},[47,8217,8218,8220],{"class":49,"line":1405},[47,8219,2078],{"class":217},[47,8221,7890],{"class":221},[47,8223,8224,8226],{"class":49,"line":1411},[47,8225,2078],{"class":217},[47,8227,7902],{"class":221},[47,8229,8230],{"class":49,"line":1423},[47,8231,2493],{"emptyLinePlaceholder":145},[47,8233,8234],{"class":49,"line":1706},[47,8235,4088],{"class":221},[47,8237,8238,8240,8242],{"class":49,"line":1711},[47,8239,225],{"class":217},[47,8241,2066],{"class":53},[47,8243,2069],{"class":221},[47,8245,8246],{"class":49,"line":1717},[47,8247,1640],{"class":221},[47,8249,8250],{"class":49,"line":1722},[47,8251,8252],{"class":279},"    \u002F\u002F2.创建结构体数组\n",[47,8254,8255,8257,8259,8262,8264,8266],{"class":49,"line":1736},[47,8256,7988],{"class":217},[47,8258,7991],{"class":53},[47,8260,8261],{"class":221}," stuArray[",[47,8263,298],{"class":85},[47,8265,1159],{"class":221},[47,8267,5001],{"class":217},[47,8269,8270],{"class":49,"line":1741},[47,8271,2123],{"class":221},[47,8273,8274,8276,8278,8280,8282,8284,8286],{"class":49,"line":1747},[47,8275,5010],{"class":221},[47,8277,8009],{"class":81},[47,8279,597],{"class":221},[47,8281,869],{"class":85},[47,8283,597],{"class":221},[47,8285,530],{"class":85},[47,8287,5023],{"class":221},[47,8289,8290,8292,8294,8296,8298,8300,8302],{"class":49,"line":1768},[47,8291,5010],{"class":221},[47,8293,3771],{"class":81},[47,8295,597],{"class":221},[47,8297,794],{"class":85},[47,8299,597],{"class":221},[47,8301,794],{"class":85},[47,8303,1659],{"class":221},[47,8305,8306],{"class":49,"line":1773},[47,8307,2280],{"class":221},[47,8309,8310],{"class":49,"line":1787},[47,8311,8312],{"class":279},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[47,8314,8315,8318,8320,8323,8325,8327],{"class":49,"line":1792},[47,8316,8317],{"class":221},"    stuArray[",[47,8319,436],{"class":85},[47,8321,8322],{"class":221},"].name",[47,8324,267],{"class":217},[47,8326,3794],{"class":81},[47,8328,1384],{"class":221},[47,8330,8331,8333,8335,8338,8340,8342],{"class":49,"line":1821},[47,8332,8317],{"class":221},[47,8334,436],{"class":85},[47,8336,8337],{"class":221},"].age",[47,8339,267],{"class":217},[47,8341,298],{"class":85},[47,8343,1384],{"class":221},[47,8345,8346,8348,8350,8353,8355,8357],{"class":49,"line":1826},[47,8347,8317],{"class":221},[47,8349,436],{"class":85},[47,8351,8352],{"class":221},"].score",[47,8354,267],{"class":217},[47,8356,298],{"class":85},[47,8358,1384],{"class":221},[47,8360,8361],{"class":49,"line":1843},[47,8362,8363],{"class":279},"    \u002F\u002F4.遍历结构体数组\n",[47,8365,8366,8368,8370,8372,8374,8376,8378,8380,8382,8384,8386,8388],{"class":49,"line":1848},[47,8367,3294],{"class":217},[47,8369,1752],{"class":221},[47,8371,225],{"class":217},[47,8373,3125],{"class":221},[47,8375,267],{"class":217},[47,8377,411],{"class":85},[47,8379,3132],{"class":221},[47,8381,1129],{"class":217},[47,8383,298],{"class":85},[47,8385,3132],{"class":221},[47,8387,2385],{"class":217},[47,8389,228],{"class":221},[47,8391,8392],{"class":49,"line":1853},[47,8393,2123],{"class":221},[47,8395,8396,8398,8400,8403,8405,8408,8410,8413,8415],{"class":49,"line":1858},[47,8397,3544],{"class":221},[47,8399,1262],{"class":217},[47,8401,8402],{"class":221},"stuArray[i].name",[47,8404,1262],{"class":217},[47,8406,8407],{"class":221},"stuArray[i].age",[47,8409,1262],{"class":217},[47,8411,8412],{"class":221},"stuArray[i].score",[47,8414,1262],{"class":217},[47,8416,1285],{"class":221},[47,8418,8419],{"class":49,"line":1872},[47,8420,2280],{"class":221},[47,8422,8423],{"class":49,"line":1877},[47,8424,1659],{"class":221},[14,8426,8428],{"id":8427},"_43结构体指针","4.3结构体指针",[19,8430,8431],{},"作用：通过指针访问结构体中的成员",[19,8433,8434],{},"利用操作符->可以通过结构体指针访问结构体属性",[38,8436,8438],{"className":208,"code":8437,"language":210,"meta":43,"style":43},"#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",[26,8439,8440,8446,8456,8462,8466,8472,8476,8480,8486,8492,8496,8504,8508,8513,8538,8543,8558,8563,8586],{"__ignoreMap":43},[47,8441,8442,8444],{"class":49,"line":50},[47,8443,2043],{"class":217},[47,8445,2046],{"class":81},[47,8447,8448,8450,8452,8454],{"class":49,"line":92},[47,8449,2051],{"class":217},[47,8451,2054],{"class":217},[47,8453,2057],{"class":53},[47,8455,1384],{"class":221},[47,8457,8458,8460],{"class":49,"line":1273},[47,8459,2043],{"class":217},[47,8461,7842],{"class":81},[47,8463,8464],{"class":49,"line":1288},[47,8465,8201],{"class":279},[47,8467,8468,8470],{"class":49,"line":1294},[47,8469,7852],{"class":217},[47,8471,7855],{"class":53},[47,8473,8474],{"class":49,"line":1308},[47,8475,1640],{"class":221},[47,8477,8478],{"class":49,"line":1314},[47,8479,7878],{"class":221},[47,8481,8482,8484],{"class":49,"line":1405},[47,8483,2078],{"class":217},[47,8485,7890],{"class":221},[47,8487,8488,8490],{"class":49,"line":1411},[47,8489,2078],{"class":217},[47,8491,7902],{"class":221},[47,8493,8494],{"class":49,"line":1423},[47,8495,4088],{"class":221},[47,8497,8498,8500,8502],{"class":49,"line":1706},[47,8499,225],{"class":217},[47,8501,2066],{"class":53},[47,8503,2069],{"class":221},[47,8505,8506],{"class":49,"line":1711},[47,8507,1640],{"class":221},[47,8509,8510],{"class":49,"line":1717},[47,8511,8512],{"class":279},"    \u002F\u002F创建学生结构体变量\n",[47,8514,8515,8517,8519,8522,8524,8526,8528,8530,8532,8534,8536],{"class":49,"line":1722},[47,8516,7988],{"class":217},[47,8518,7991],{"class":53},[47,8520,8521],{"class":221}," s",[47,8523,267],{"class":217},[47,8525,1115],{"class":221},[47,8527,8009],{"class":81},[47,8529,597],{"class":221},[47,8531,869],{"class":85},[47,8533,597],{"class":221},[47,8535,1816],{"class":85},[47,8537,4088],{"class":221},[47,8539,8540],{"class":49,"line":1736},[47,8541,8542],{"class":279},"    \u002F\u002F通过指针指向结构体变量\n",[47,8544,8545,8547,8549,8551,8553,8555],{"class":49,"line":1741},[47,8546,7988],{"class":217},[47,8548,7991],{"class":53},[47,8550,6611],{"class":217},[47,8552,19],{"class":221},[47,8554,6432],{"class":217},[47,8556,8557],{"class":221},"s\n",[47,8559,8560],{"class":49,"line":1747},[47,8561,8562],{"class":279},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[47,8564,8565,8567,8569,8572,8574,8577,8579,8582,8584],{"class":49,"line":1768},[47,8566,1645],{"class":221},[47,8568,1262],{"class":217},[47,8570,8571],{"class":221},"p->name",[47,8573,1262],{"class":217},[47,8575,8576],{"class":221},"p->age",[47,8578,1262],{"class":217},[47,8580,8581],{"class":221},"p->score",[47,8583,1262],{"class":217},[47,8585,1285],{"class":221},[47,8587,8588],{"class":49,"line":1773},[47,8589,1659],{"class":221},[14,8591,8593],{"id":8592},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,8595,8596],{},"作用：结构体中的成员可以是另一个结构体",[19,8598,8599],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[38,8601,8603],{"className":208,"code":8602,"language":210,"meta":43,"style":43},"#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",[26,8604,8605,8611,8621,8627,8632,8640,8644,8648,8654,8660,8664,8669,8676,8680,8687,8691,8697,8702,8706,8714,8718,8723,8728,8733,8744,8756,8767,8780,8791,8802],{"__ignoreMap":43},[47,8606,8607,8609],{"class":49,"line":50},[47,8608,2043],{"class":217},[47,8610,2046],{"class":81},[47,8612,8613,8615,8617,8619],{"class":49,"line":92},[47,8614,2051],{"class":217},[47,8616,2054],{"class":217},[47,8618,2057],{"class":53},[47,8620,1384],{"class":221},[47,8622,8623,8625],{"class":49,"line":1273},[47,8624,2043],{"class":217},[47,8626,7842],{"class":81},[47,8628,8629],{"class":49,"line":1288},[47,8630,8631],{"class":279},"\u002F\u002F定义学生结构体\n",[47,8633,8634,8636,8638],{"class":49,"line":1294},[47,8635,7852],{"class":217},[47,8637,7991],{"class":53},[47,8639,2767],{"class":221},[47,8641,8642],{"class":49,"line":1308},[47,8643,1640],{"class":221},[47,8645,8646],{"class":49,"line":1314},[47,8647,7878],{"class":221},[47,8649,8650,8652],{"class":49,"line":1405},[47,8651,2078],{"class":217},[47,8653,7890],{"class":221},[47,8655,8656,8658],{"class":49,"line":1411},[47,8657,2078],{"class":217},[47,8659,7902],{"class":221},[47,8661,8662],{"class":49,"line":1423},[47,8663,1659],{"class":221},[47,8665,8666],{"class":49,"line":1706},[47,8667,8668],{"class":279},"\u002F\u002F定义老师结构体\n",[47,8670,8671,8673],{"class":49,"line":1711},[47,8672,7852],{"class":217},[47,8674,8675],{"class":53}," Teacher\n",[47,8677,8678],{"class":49,"line":1717},[47,8679,1640],{"class":221},[47,8681,8682,8684],{"class":49,"line":1722},[47,8683,2078],{"class":217},[47,8685,8686],{"class":221}," id;\n",[47,8688,8689],{"class":49,"line":1736},[47,8690,7878],{"class":221},[47,8692,8693,8695],{"class":49,"line":1741},[47,8694,2078],{"class":217},[47,8696,7890],{"class":221},[47,8698,8699],{"class":49,"line":1747},[47,8700,8701],{"class":221},"    Student stu;\n",[47,8703,8704],{"class":49,"line":1768},[47,8705,1659],{"class":221},[47,8707,8708,8710,8712],{"class":49,"line":1773},[47,8709,225],{"class":217},[47,8711,2066],{"class":53},[47,8713,6071],{"class":221},[47,8715,8716],{"class":49,"line":1787},[47,8717,1640],{"class":221},[47,8719,8720],{"class":49,"line":1792},[47,8721,8722],{"class":279},"    \u002F\u002F结构体嵌套结构体\n",[47,8724,8725],{"class":49,"line":1821},[47,8726,8727],{"class":279},"    \u002F\u002F创建老师\n",[47,8729,8730],{"class":49,"line":1826},[47,8731,8732],{"class":221},"    Teacher t;\n",[47,8734,8735,8738,8740,8742],{"class":49,"line":1843},[47,8736,8737],{"class":221},"    t.id",[47,8739,267],{"class":217},[47,8741,530],{"class":85},[47,8743,1384],{"class":221},[47,8745,8746,8749,8751,8754],{"class":49,"line":1848},[47,8747,8748],{"class":221},"    t.name",[47,8750,267],{"class":217},[47,8752,8753],{"class":81},"\"老王\"",[47,8755,1384],{"class":221},[47,8757,8758,8761,8763,8765],{"class":49,"line":1853},[47,8759,8760],{"class":221},"    t.age",[47,8762,267],{"class":217},[47,8764,869],{"class":85},[47,8766,1384],{"class":221},[47,8768,8769,8772,8774,8777],{"class":49,"line":1858},[47,8770,8771],{"class":221},"    t.stu.name",[47,8773,267],{"class":217},[47,8775,8776],{"class":81},"\"小王\"",[47,8778,8779],{"class":221},"；\n",[47,8781,8782,8785,8787,8789],{"class":49,"line":1872},[47,8783,8784],{"class":221},"    t.stu.age",[47,8786,267],{"class":217},[47,8788,919],{"class":85},[47,8790,1384],{"class":221},[47,8792,8793,8796,8798,8800],{"class":49,"line":1877},[47,8794,8795],{"class":221},"    t.stu.score",[47,8797,267],{"class":217},[47,8799,563],{"class":85},[47,8801,1384],{"class":221},[47,8803,8804],{"class":49,"line":2670},[47,8805,1659],{"class":221},[14,8807,8809],{"id":8808},"_45结构体做函数参数","4.5结构体做函数参数",[19,8811,8812],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[38,8814,8816],{"className":208,"code":8815,"language":210,"meta":43,"style":43},"#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",[26,8817,8818,8824,8834,8840,8846,8850,8854,8860,8866,8870,8875,8880,8897,8901,8934,8938,8943,8962,8966,8997,9001,9009,9013,9022,9034,9046,9058,9071,9079,9092,9104,9112],{"__ignoreMap":43},[47,8819,8820,8822],{"class":49,"line":50},[47,8821,2043],{"class":217},[47,8823,2046],{"class":81},[47,8825,8826,8828,8830,8832],{"class":49,"line":92},[47,8827,2051],{"class":217},[47,8829,2054],{"class":217},[47,8831,2057],{"class":53},[47,8833,1384],{"class":221},[47,8835,8836,8838],{"class":49,"line":1273},[47,8837,2043],{"class":217},[47,8839,7842],{"class":81},[47,8841,8842,8844],{"class":49,"line":1288},[47,8843,7852],{"class":217},[47,8845,7855],{"class":53},[47,8847,8848],{"class":49,"line":1294},[47,8849,1640],{"class":221},[47,8851,8852],{"class":49,"line":1308},[47,8853,7878],{"class":221},[47,8855,8856,8858],{"class":49,"line":1314},[47,8857,2078],{"class":217},[47,8859,7890],{"class":221},[47,8861,8862,8864],{"class":49,"line":1405},[47,8863,2078],{"class":217},[47,8865,7902],{"class":221},[47,8867,8868],{"class":49,"line":1411},[47,8869,4088],{"class":221},[47,8871,8872],{"class":49,"line":1423},[47,8873,8874],{"class":279},"\u002F\u002F打印学生信息的函数\n",[47,8876,8877],{"class":49,"line":1706},[47,8878,8879],{"class":279},"\u002F\u002F值传递\n",[47,8881,8882,8884,8887,8889,8891,8893,8895],{"class":49,"line":1711},[47,8883,5457],{"class":217},[47,8885,8886],{"class":53}," printStudent1",[47,8888,222],{"class":221},[47,8890,7852],{"class":217},[47,8892,7991],{"class":53},[47,8894,8521],{"class":5309},[47,8896,228],{"class":221},[47,8898,8899],{"class":49,"line":1717},[47,8900,1640],{"class":221},[47,8902,8903,8905,8907,8910,8912,8915,8917,8920,8922,8924,8926,8929,8931],{"class":49,"line":1722},[47,8904,6622],{"class":221},[47,8906,1262],{"class":217},[47,8908,8909],{"class":221}," s.name ",[47,8911,1262],{"class":217},[47,8913,8914],{"class":81}," \" \"",[47,8916,1538],{"class":217},[47,8918,8919],{"class":221}," s.age ",[47,8921,1262],{"class":217},[47,8923,8914],{"class":81},[47,8925,1538],{"class":217},[47,8927,8928],{"class":221}," s.score ",[47,8930,1262],{"class":217},[47,8932,8933],{"class":221}," endl;\n",[47,8935,8936],{"class":49,"line":1736},[47,8937,1659],{"class":221},[47,8939,8940],{"class":49,"line":1741},[47,8941,8942],{"class":279},"\u002F\u002F地址传递\n",[47,8944,8945,8947,8950,8952,8954,8956,8958,8960],{"class":49,"line":1747},[47,8946,5457],{"class":217},[47,8948,8949],{"class":53}," printStudent2",[47,8951,222],{"class":221},[47,8953,7852],{"class":217},[47,8955,7991],{"class":53},[47,8957,6611],{"class":217},[47,8959,914],{"class":5309},[47,8961,228],{"class":221},[47,8963,8964],{"class":49,"line":1768},[47,8965,1640],{"class":221},[47,8967,8968,8970,8972,8975,8977,8979,8981,8984,8986,8988,8990,8993,8995],{"class":49,"line":1773},[47,8969,6622],{"class":221},[47,8971,1262],{"class":217},[47,8973,8974],{"class":221}," s->name ",[47,8976,1262],{"class":217},[47,8978,8914],{"class":81},[47,8980,1538],{"class":217},[47,8982,8983],{"class":221}," s->age ",[47,8985,1262],{"class":217},[47,8987,8914],{"class":81},[47,8989,1538],{"class":217},[47,8991,8992],{"class":221}," s->score ",[47,8994,1262],{"class":217},[47,8996,8933],{"class":221},[47,8998,8999],{"class":49,"line":1787},[47,9000,1659],{"class":221},[47,9002,9003,9005,9007],{"class":49,"line":1792},[47,9004,225],{"class":217},[47,9006,2066],{"class":53},[47,9008,2069],{"class":221},[47,9010,9011],{"class":49,"line":1821},[47,9012,1640],{"class":221},[47,9014,9015,9017,9019],{"class":49,"line":1826},[47,9016,7988],{"class":217},[47,9018,7991],{"class":53},[47,9020,9021],{"class":221}," s;\n",[47,9023,9024,9027,9029,9032],{"class":49,"line":1843},[47,9025,9026],{"class":221},"    s.name ",[47,9028,267],{"class":217},[47,9030,9031],{"class":81}," \"张三\"",[47,9033,1384],{"class":221},[47,9035,9036,9039,9041,9044],{"class":49,"line":1848},[47,9037,9038],{"class":221},"    s.age ",[47,9040,267],{"class":217},[47,9042,9043],{"class":85}," 20",[47,9045,1384],{"class":221},[47,9047,9048,9051,9053,9056],{"class":49,"line":1853},[47,9049,9050],{"class":221},"    s.score ",[47,9052,267],{"class":217},[47,9054,9055],{"class":85}," 85",[47,9057,1384],{"class":221},[47,9059,9060,9062,9064,9067,9069],{"class":49,"line":1858},[47,9061,1645],{"class":221},[47,9063,1262],{"class":217},[47,9065,9066],{"class":81},"\"值传递:\"",[47,9068,1262],{"class":217},[47,9070,1285],{"class":221},[47,9072,9073,9076],{"class":49,"line":1872},[47,9074,9075],{"class":53},"    printStudent1",[47,9077,9078],{"class":221},"(s);\n",[47,9080,9081,9083,9085,9088,9090],{"class":49,"line":1877},[47,9082,1645],{"class":221},[47,9084,1262],{"class":217},[47,9086,9087],{"class":81},"\"地址传递:\"",[47,9089,1262],{"class":217},[47,9091,1285],{"class":221},[47,9093,9094,9097,9099,9101],{"class":49,"line":2670},[47,9095,9096],{"class":53},"    printStudent2",[47,9098,222],{"class":221},[47,9100,572],{"class":217},[47,9102,9103],{"class":221},"s); \n",[47,9105,9106,9108,9110],{"class":49,"line":2684},[47,9107,4183],{"class":217},[47,9109,4186],{"class":85},[47,9111,1384],{"class":221},[47,9113,9114],{"class":49,"line":2692},[47,9115,1659],{"class":221},[19,9117,9118],{},"注意：",[106,9120,9121,9124],{},[109,9122,9123],{},"1.先定义结构体，不要在函数中写结构体的定义",[109,9125,9126],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,9128,9130],{"id":9129},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,9132,9133],{},"用const防止误操作",[38,9135,9137],{"className":208,"code":9136,"language":210,"meta":43,"style":43},"#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",[26,9138,9139,9145,9155,9161,9166,9170,9174,9180,9186,9190,9206,9210,9233,9237,9245,9249,9270,9277,9281],{"__ignoreMap":43},[47,9140,9141,9143],{"class":49,"line":50},[47,9142,2043],{"class":217},[47,9144,2046],{"class":81},[47,9146,9147,9149,9151,9153],{"class":49,"line":92},[47,9148,2051],{"class":217},[47,9150,2054],{"class":217},[47,9152,2057],{"class":53},[47,9154,1384],{"class":221},[47,9156,9157,9159],{"class":49,"line":1273},[47,9158,2043],{"class":217},[47,9160,7842],{"class":81},[47,9162,9163],{"class":49,"line":1288},[47,9164,9165],{"class":221},"sctuct Student\n",[47,9167,9168],{"class":49,"line":1294},[47,9169,1640],{"class":221},[47,9171,9172],{"class":49,"line":1308},[47,9173,7878],{"class":221},[47,9175,9176,9178],{"class":49,"line":1314},[47,9177,2078],{"class":217},[47,9179,7890],{"class":221},[47,9181,9182,9184],{"class":49,"line":1405},[47,9183,2078],{"class":217},[47,9185,7902],{"class":221},[47,9187,9188],{"class":49,"line":1411},[47,9189,4088],{"class":221},[47,9191,9192,9194,9197,9199,9202,9204],{"class":49,"line":1423},[47,9193,5457],{"class":217},[47,9195,9196],{"class":53}," printStudents",[47,9198,222],{"class":221},[47,9200,9201],{"class":53},"student",[47,9203,8521],{"class":5309},[47,9205,228],{"class":221},[47,9207,9208],{"class":49,"line":1706},[47,9209,1640],{"class":221},[47,9211,9212,9214,9216,9219,9221,9224,9226,9229,9231],{"class":49,"line":1711},[47,9213,1645],{"class":221},[47,9215,1262],{"class":217},[47,9217,9218],{"class":221},"s.name",[47,9220,1262],{"class":217},[47,9222,9223],{"class":221},"s.age",[47,9225,1262],{"class":217},[47,9227,9228],{"class":221},"s.score",[47,9230,1262],{"class":217},[47,9232,1285],{"class":221},[47,9234,9235],{"class":49,"line":1717},[47,9236,1659],{"class":221},[47,9238,9239,9241,9243],{"class":49,"line":1722},[47,9240,225],{"class":217},[47,9242,2066],{"class":53},[47,9244,6071],{"class":221},[47,9246,9247],{"class":49,"line":1736},[47,9248,1640],{"class":221},[47,9250,9251,9254,9256,9258,9260,9262,9264,9266,9268],{"class":49,"line":1741},[47,9252,9253],{"class":221},"    Student s",[47,9255,267],{"class":217},[47,9257,1115],{"class":221},[47,9259,8009],{"class":81},[47,9261,597],{"class":221},[47,9263,869],{"class":85},[47,9265,597],{"class":221},[47,9267,869],{"class":85},[47,9269,4088],{"class":221},[47,9271,9272,9275],{"class":49,"line":1747},[47,9273,9274],{"class":53},"    printStudent",[47,9276,9078],{"class":221},[47,9278,9279],{"class":49,"line":1768},[47,9280,2493],{"emptyLinePlaceholder":145},[47,9282,9283],{"class":49,"line":1773},[47,9284,1659],{"class":221},[19,9286,9118],{},[106,9288,9289,9292,9295],{},[109,9290,9291],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[109,9293,9294],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[109,9296,9297],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[38,9299,9301],{"className":208,"code":9300,"language":210,"meta":43,"style":43},"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",[26,9302,9303,9322,9326,9331,9351],{"__ignoreMap":43},[47,9304,9305,9307,9309,9311,9313,9316,9318,9320],{"class":49,"line":50},[47,9306,5457],{"class":217},[47,9308,9196],{"class":53},[47,9310,222],{"class":221},[47,9312,6885],{"class":217},[47,9314,9315],{"class":53}," student",[47,9317,6611],{"class":217},[47,9319,914],{"class":5309},[47,9321,228],{"class":221},[47,9323,9324],{"class":49,"line":92},[47,9325,1640],{"class":221},[47,9327,9328],{"class":49,"line":1273},[47,9329,9330],{"class":279},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[47,9332,9333,9335,9337,9339,9341,9343,9345,9347,9349],{"class":49,"line":1288},[47,9334,1645],{"class":221},[47,9336,1262],{"class":217},[47,9338,9218],{"class":221},[47,9340,1262],{"class":217},[47,9342,9223],{"class":221},[47,9344,1262],{"class":217},[47,9346,9228],{"class":221},[47,9348,1262],{"class":217},[47,9350,1285],{"class":221},[47,9352,9353],{"class":49,"line":1294},[47,9354,1659],{"class":221},[14,9356,9358],{"id":9357},"_47案例","4.7案例",[171,9360,9361],{},[109,9362,9363],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[38,9365,9367],{"className":208,"code":9366,"language":210,"meta":43,"style":43},"#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",[26,9368,9369,9375,9385,9391,9398,9402,9408,9412,9417,9423,9429,9433,9437,9443,9447,9452,9457,9470,9474,9479,9505,9509,9521,9548,9552,9564,9574,9578,9583,9612,9616,9628,9637,9664,9675,9685,9689,9693,9697,9702,9726,9730,9754,9758,9777,9803,9807,9832,9855,9879,9884,9889,9894,9903,9908,9914,9935,9941,9955,9961,9988,9997,10003,10011,10016],{"__ignoreMap":43},[47,9370,9371,9373],{"class":49,"line":50},[47,9372,2043],{"class":217},[47,9374,2046],{"class":81},[47,9376,9377,9379,9381,9383],{"class":49,"line":92},[47,9378,2051],{"class":217},[47,9380,2054],{"class":217},[47,9382,2057],{"class":53},[47,9384,1384],{"class":221},[47,9386,9387,9389],{"class":49,"line":1273},[47,9388,2043],{"class":217},[47,9390,7842],{"class":81},[47,9392,9393,9395],{"class":49,"line":1288},[47,9394,2043],{"class":217},[47,9396,9397],{"class":81},"\u003Cctime>\n",[47,9399,9400],{"class":49,"line":1294},[47,9401,8631],{"class":279},[47,9403,9404,9406],{"class":49,"line":1308},[47,9405,7852],{"class":217},[47,9407,7855],{"class":53},[47,9409,9410],{"class":49,"line":1314},[47,9411,1640],{"class":221},[47,9413,9414],{"class":49,"line":1405},[47,9415,9416],{"class":221},"    string sName;\n",[47,9418,9419,9421],{"class":49,"line":1411},[47,9420,2078],{"class":217},[47,9422,7890],{"class":221},[47,9424,9425,9427],{"class":49,"line":1423},[47,9426,2078],{"class":217},[47,9428,7902],{"class":221},[47,9430,9431],{"class":49,"line":1706},[47,9432,4088],{"class":221},[47,9434,9435],{"class":49,"line":1711},[47,9436,8668],{"class":279},[47,9438,9439,9441],{"class":49,"line":1717},[47,9440,7852],{"class":217},[47,9442,8675],{"class":53},[47,9444,9445],{"class":49,"line":1722},[47,9446,1640],{"class":221},[47,9448,9449],{"class":49,"line":1736},[47,9450,9451],{"class":221},"    string tName;\n",[47,9453,9454],{"class":49,"line":1741},[47,9455,9456],{"class":279},"    \u002F\u002F学生数组\n",[47,9458,9459,9461,9463,9466,9468],{"class":49,"line":1747},[47,9460,7988],{"class":217},[47,9462,7991],{"class":53},[47,9464,9465],{"class":221}," sArray[",[47,9467,538],{"class":85},[47,9469,4783],{"class":221},[47,9471,9472],{"class":49,"line":1768},[47,9473,4088],{"class":221},[47,9475,9476],{"class":49,"line":1773},[47,9477,9478],{"class":279},"\u002F\u002F给老师和学生赋值的函数\n",[47,9480,9481,9483,9486,9488,9490,9493,9496,9499,9501,9503],{"class":49,"line":1787},[47,9482,5457],{"class":217},[47,9484,9485],{"class":53}," allocateSpace",[47,9487,222],{"class":221},[47,9489,7852],{"class":217},[47,9491,9492],{"class":53}," Teacher",[47,9494,9495],{"class":5309}," tArray",[47,9497,9498],{"class":221},"[],",[47,9500,225],{"class":217},[47,9502,7424],{"class":5309},[47,9504,228],{"class":221},[47,9506,9507],{"class":49,"line":1792},[47,9508,1640],{"class":221},[47,9510,9511,9514,9516,9519],{"class":49,"line":1821},[47,9512,9513],{"class":221},"    string nameSeed",[47,9515,267],{"class":217},[47,9517,9518],{"class":81},"\"ABCDE\"",[47,9520,1384],{"class":221},[47,9522,9523,9525,9527,9529,9532,9534,9536,9539,9541,9544,9546],{"class":49,"line":1826},[47,9524,3294],{"class":217},[47,9526,1752],{"class":221},[47,9528,225],{"class":217},[47,9530,9531],{"class":221}," i ",[47,9533,267],{"class":217},[47,9535,4186],{"class":85},[47,9537,9538],{"class":221},"; i ",[47,9540,1129],{"class":217},[47,9542,9543],{"class":221}," len; i",[47,9545,2385],{"class":217},[47,9547,228],{"class":221},[47,9549,9550],{"class":49,"line":1843},[47,9551,2123],{"class":221},[47,9553,9554,9557,9559,9562],{"class":49,"line":1848},[47,9555,9556],{"class":221},"        tArray[i].tName ",[47,9558,267],{"class":217},[47,9560,9561],{"class":81}," \"Teacher_\"",[47,9563,1384],{"class":221},[47,9565,9566,9568,9571],{"class":49,"line":1853},[47,9567,9556],{"class":221},[47,9569,9570],{"class":217},"+=",[47,9572,9573],{"class":221},"nameSeed[i];\n",[47,9575,9576],{"class":49,"line":1858},[47,9577,2493],{"emptyLinePlaceholder":145},[47,9579,9580],{"class":49,"line":1872},[47,9581,9582],{"class":279},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[47,9584,9585,9587,9589,9591,9594,9596,9598,9601,9603,9605,9608,9610],{"class":49,"line":1877},[47,9586,3496],{"class":217},[47,9588,1752],{"class":221},[47,9590,225],{"class":217},[47,9592,9593],{"class":221}," j ",[47,9595,267],{"class":217},[47,9597,4186],{"class":85},[47,9599,9600],{"class":221},"; j ",[47,9602,1129],{"class":217},[47,9604,2241],{"class":85},[47,9606,9607],{"class":221},"; j",[47,9609,2385],{"class":217},[47,9611,228],{"class":221},[47,9613,9614],{"class":49,"line":2670},[47,9615,2603],{"class":221},[47,9617,9618,9621,9623,9626],{"class":49,"line":2684},[47,9619,9620],{"class":221},"            tArray[i].sArray[j].sName ",[47,9622,267],{"class":217},[47,9624,9625],{"class":81}," \"Student_\"",[47,9627,1384],{"class":221},[47,9629,9630,9632,9634],{"class":49,"line":2692},[47,9631,9620],{"class":221},[47,9633,9570],{"class":217},[47,9635,9636],{"class":221}," nameSeed[j];\n",[47,9638,9639,9642,9645,9647,9649,9651,9653,9655,9657,9659,9661],{"class":49,"line":2697},[47,9640,9641],{"class":217},"            int",[47,9643,9644],{"class":221}," random",[47,9646,267],{"class":217},[47,9648,2517],{"class":53},[47,9650,2520],{"class":221},[47,9652,547],{"class":217},[47,9654,1126],{"class":85},[47,9656,700],{"class":217},[47,9658,620],{"class":85},[47,9660,276],{"class":221},[47,9662,9663],{"class":279},"\u002F\u002F40~99\n",[47,9665,9666,9669,9671,9673],{"class":49,"line":2703},[47,9667,9668],{"class":221},"            tArray[i].sArray[j].age ",[47,9670,267],{"class":217},[47,9672,9043],{"class":85},[47,9674,1384],{"class":221},[47,9676,9677,9680,9682],{"class":49,"line":2709},[47,9678,9679],{"class":221},"            tArray[i].sArray[j].score ",[47,9681,267],{"class":217},[47,9683,9684],{"class":221}," random;\n",[47,9686,9687],{"class":49,"line":2714},[47,9688,2622],{"class":221},[47,9690,9691],{"class":49,"line":8041},[47,9692,2280],{"class":221},[47,9694,9695],{"class":49,"line":8065},[47,9696,1659],{"class":221},[47,9698,9699],{"class":49,"line":8070},[47,9700,9701],{"class":279},"\u002F\u002F打印所有信息的函数\n",[47,9703,9704,9706,9709,9711,9713,9715,9717,9720,9722,9724],{"class":49,"line":8076},[47,9705,5457],{"class":217},[47,9707,9708],{"class":53}," printInfo",[47,9710,222],{"class":221},[47,9712,7852],{"class":217},[47,9714,9492],{"class":53},[47,9716,9495],{"class":5309},[47,9718,9719],{"class":221},"[], ",[47,9721,225],{"class":217},[47,9723,7424],{"class":5309},[47,9725,228],{"class":221},[47,9727,9728],{"class":49,"line":8103},[47,9729,1640],{"class":221},[47,9731,9732,9734,9736,9738,9740,9742,9744,9746,9748,9750,9752],{"class":49,"line":8108},[47,9733,3294],{"class":217},[47,9735,1752],{"class":221},[47,9737,225],{"class":217},[47,9739,9531],{"class":221},[47,9741,267],{"class":217},[47,9743,4186],{"class":85},[47,9745,9538],{"class":221},[47,9747,1129],{"class":217},[47,9749,9543],{"class":221},[47,9751,2385],{"class":217},[47,9753,228],{"class":221},[47,9755,9756],{"class":49,"line":8114},[47,9757,2123],{"class":221},[47,9759,9760,9763,9765,9768,9770,9773,9775],{"class":49,"line":8126},[47,9761,9762],{"class":221},"        cout ",[47,9764,1262],{"class":217},[47,9766,9767],{"class":81}," \"Teacher: \"",[47,9769,1538],{"class":217},[47,9771,9772],{"class":221}," tArray[i].tName ",[47,9774,1262],{"class":217},[47,9776,8933],{"class":221},[47,9778,9779,9781,9783,9785,9787,9789,9791,9793,9795,9797,9799,9801],{"class":49,"line":8138},[47,9780,3496],{"class":217},[47,9782,1752],{"class":221},[47,9784,225],{"class":217},[47,9786,9593],{"class":221},[47,9788,267],{"class":217},[47,9790,4186],{"class":85},[47,9792,9600],{"class":221},[47,9794,1129],{"class":217},[47,9796,2241],{"class":85},[47,9798,9607],{"class":221},[47,9800,2385],{"class":217},[47,9802,228],{"class":221},[47,9804,9805],{"class":49,"line":8150},[47,9806,2603],{"class":221},[47,9808,9810,9813,9815,9818,9820,9823,9825,9828,9830],{"class":49,"line":9809},47,[47,9811,9812],{"class":221},"            cout ",[47,9814,1262],{"class":217},[47,9816,9817],{"class":81}," \"",[47,9819,1324],{"class":85},[47,9821,9822],{"class":81},"Student: \"",[47,9824,1538],{"class":217},[47,9826,9827],{"class":221}," tArray[i].sArray[j].sName",[47,9829,1262],{"class":217},[47,9831,1285],{"class":221},[47,9833,9835,9837,9839,9841,9843,9846,9848,9851,9853],{"class":49,"line":9834},48,[47,9836,9812],{"class":221},[47,9838,1262],{"class":217},[47,9840,9817],{"class":81},[47,9842,1324],{"class":85},[47,9844,9845],{"class":81},"Age: \"",[47,9847,1538],{"class":217},[47,9849,9850],{"class":221}," tArray[i].sArray[j].age ",[47,9852,1262],{"class":217},[47,9854,8933],{"class":221},[47,9856,9858,9860,9862,9864,9866,9869,9871,9874,9876],{"class":49,"line":9857},49,[47,9859,9812],{"class":221},[47,9861,1262],{"class":217},[47,9863,9817],{"class":81},[47,9865,1324],{"class":85},[47,9867,9868],{"class":81},"Score: \"",[47,9870,1538],{"class":217},[47,9872,9873],{"class":221}," tArray[i].sArray[j].score ",[47,9875,1262],{"class":217},[47,9877,9878],{"class":221}," endl;   \n",[47,9880,9882],{"class":49,"line":9881},50,[47,9883,2622],{"class":221},[47,9885,9887],{"class":49,"line":9886},51,[47,9888,2280],{"class":221},[47,9890,9892],{"class":49,"line":9891},52,[47,9893,1659],{"class":221},[47,9895,9897,9899,9901],{"class":49,"line":9896},53,[47,9898,225],{"class":217},[47,9900,2066],{"class":53},[47,9902,2069],{"class":221},[47,9904,9906],{"class":49,"line":9905},54,[47,9907,1640],{"class":221},[47,9909,9911],{"class":49,"line":9910},55,[47,9912,9913],{"class":279},"    \u002F\u002F随机数种子\n",[47,9915,9917,9919,9921,9923,9925,9927,9929,9931,9933],{"class":49,"line":9916},56,[47,9918,2466],{"class":53},[47,9920,2469],{"class":221},[47,9922,2472],{"class":217},[47,9924,2475],{"class":217},[47,9926,648],{"class":221},[47,9928,2480],{"class":53},[47,9930,222],{"class":221},[47,9932,2485],{"class":85},[47,9934,2488],{"class":221},[47,9936,9938],{"class":49,"line":9937},57,[47,9939,9940],{"class":279},"    \u002F\u002F1.创建3名老师的数组\n",[47,9942,9944,9946,9948,9951,9953],{"class":49,"line":9943},58,[47,9945,7988],{"class":217},[47,9947,9492],{"class":53},[47,9949,9950],{"class":221}," tArray[",[47,9952,292],{"class":85},[47,9954,4783],{"class":221},[47,9956,9958],{"class":49,"line":9957},59,[47,9959,9960],{"class":279},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[47,9962,9964,9966,9969,9971,9974,9977,9979,9981,9984,9986],{"class":49,"line":9963},60,[47,9965,2078],{"class":217},[47,9967,9968],{"class":221}," len ",[47,9970,267],{"class":217},[47,9972,9973],{"class":217}," sizeof",[47,9975,9976],{"class":221},"(tArray) ",[47,9978,803],{"class":217},[47,9980,9973],{"class":217},[47,9982,9983],{"class":221},"(tArray[",[47,9985,411],{"class":85},[47,9987,3949],{"class":221},[47,9989,9991,9994],{"class":49,"line":9990},61,[47,9992,9993],{"class":53},"    allocateSpace",[47,9995,9996],{"class":221},"(tArray, len);\n",[47,9998,10000],{"class":49,"line":9999},62,[47,10001,10002],{"class":279},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[47,10004,10006,10009],{"class":49,"line":10005},63,[47,10007,10008],{"class":53},"    printInfo",[47,10010,9996],{"class":221},[47,10012,10014],{"class":49,"line":10013},64,[47,10015,2493],{"emptyLinePlaceholder":145},[47,10017,10019],{"class":49,"line":10018},65,[47,10020,1659],{"class":221},[171,10022,10023],{"start":92},[109,10024,10025,10028],{},[369,10026,10027],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,10030,10031],{},"五名英雄信息如下：",[38,10033,10037],{"className":10034,"code":10035,"language":10036,"meta":43,"style":43},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[26,10038,10039,10057,10074,10091,10108],{"__ignoreMap":43},[47,10040,10041,10043,10046,10048,10050,10052,10055],{"class":49,"line":50},[47,10042,5010],{"class":221},[47,10044,10045],{"class":81},"\"刘备\"",[47,10047,597],{"class":221},[47,10049,994],{"class":85},[47,10051,597],{"class":221},[47,10053,10054],{"class":81},"\"男\"",[47,10056,5023],{"class":221},[47,10058,10059,10061,10064,10066,10068,10070,10072],{"class":49,"line":92},[47,10060,5010],{"class":221},[47,10062,10063],{"class":81},"\"关羽\"",[47,10065,597],{"class":221},[47,10067,969],{"class":85},[47,10069,597],{"class":221},[47,10071,10054],{"class":81},[47,10073,5023],{"class":221},[47,10075,10076,10078,10081,10083,10085,10087,10089],{"class":49,"line":1273},[47,10077,5010],{"class":221},[47,10079,10080],{"class":81},"\"张飞\"",[47,10082,597],{"class":221},[47,10084,919],{"class":85},[47,10086,597],{"class":221},[47,10088,10054],{"class":81},[47,10090,5023],{"class":221},[47,10092,10093,10095,10098,10100,10102,10104,10106],{"class":49,"line":1288},[47,10094,5010],{"class":221},[47,10096,10097],{"class":81},"\"赵云\"",[47,10099,597],{"class":221},[47,10101,944],{"class":85},[47,10103,597],{"class":221},[47,10105,10054],{"class":81},[47,10107,5023],{"class":221},[47,10109,10110,10112,10115,10117,10119,10121,10124],{"class":49,"line":1294},[47,10111,5010],{"class":221},[47,10113,10114],{"class":81},"\"貂蝉\"",[47,10116,597],{"class":221},[47,10118,894],{"class":85},[47,10120,597],{"class":221},[47,10122,10123],{"class":81},"\"女\"",[47,10125,5023],{"class":221},[19,10127,10128],{},"代码：",[38,10130,10132],{"className":208,"code":10131,"language":210,"meta":43,"style":43},"#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",[26,10133,10134,10140,10150,10156,10163,10167,10171,10177,10182,10186,10191,10214,10218,10243,10247,10280,10285,10314,10319,10334,10360,10380,10385,10390,10394,10398,10403,10425,10429,10453,10457,10519,10523,10527,10535,10539,10544,10555,10559,10575,10591,10607,10623,10639,10643,10663,10685,10690,10703,10710,10715,10721,10726,10739,10745],{"__ignoreMap":43},[47,10135,10136,10138],{"class":49,"line":50},[47,10137,2043],{"class":217},[47,10139,2046],{"class":81},[47,10141,10142,10144,10146,10148],{"class":49,"line":92},[47,10143,2051],{"class":217},[47,10145,2054],{"class":217},[47,10147,2057],{"class":53},[47,10149,1384],{"class":221},[47,10151,10152,10154],{"class":49,"line":1273},[47,10153,2043],{"class":217},[47,10155,7842],{"class":81},[47,10157,10158,10160],{"class":49,"line":1288},[47,10159,7852],{"class":217},[47,10161,10162],{"class":53}," Sanguo\n",[47,10164,10165],{"class":49,"line":1294},[47,10166,1640],{"class":221},[47,10168,10169],{"class":49,"line":1308},[47,10170,7878],{"class":221},[47,10172,10173,10175],{"class":49,"line":1314},[47,10174,2078],{"class":217},[47,10176,7890],{"class":221},[47,10178,10179],{"class":49,"line":1405},[47,10180,10181],{"class":221},"    string gender;\n",[47,10183,10184],{"class":49,"line":1411},[47,10185,4088],{"class":221},[47,10187,10188],{"class":49,"line":1423},[47,10189,10190],{"class":279},"\u002F\u002F定义排序函数\n",[47,10192,10193,10195,10197,10199,10202,10204,10206,10208,10210,10212],{"class":49,"line":1706},[47,10194,5457],{"class":217},[47,10196,7409],{"class":53},[47,10198,222],{"class":221},[47,10200,10201],{"class":53},"Sanguo",[47,10203,6611],{"class":217},[47,10205,914],{"class":5309},[47,10207,597],{"class":221},[47,10209,225],{"class":217},[47,10211,7424],{"class":5309},[47,10213,228],{"class":221},[47,10215,10216],{"class":49,"line":1711},[47,10217,1640],{"class":221},[47,10219,10220,10222,10224,10226,10228,10230,10232,10234,10236,10239,10241],{"class":49,"line":1717},[47,10221,3294],{"class":217},[47,10223,222],{"class":221},[47,10225,225],{"class":217},[47,10227,3125],{"class":221},[47,10229,267],{"class":217},[47,10231,411],{"class":85},[47,10233,3132],{"class":221},[47,10235,1129],{"class":217},[47,10237,10238],{"class":221},"len;i",[47,10240,2385],{"class":217},[47,10242,228],{"class":221},[47,10244,10245],{"class":49,"line":1722},[47,10246,2123],{"class":221},[47,10248,10249,10252,10254,10256,10258,10260,10262,10264,10266,10268,10270,10272,10274,10276,10278],{"class":49,"line":1736},[47,10250,10251],{"class":217},"     for",[47,10253,1752],{"class":221},[47,10255,225],{"class":217},[47,10257,3503],{"class":221},[47,10259,267],{"class":217},[47,10261,411],{"class":85},[47,10263,3510],{"class":221},[47,10265,1129],{"class":217},[47,10267,7451],{"class":221},[47,10269,751],{"class":217},[47,10271,436],{"class":85},[47,10273,751],{"class":217},[47,10275,3643],{"class":221},[47,10277,2385],{"class":217},[47,10279,228],{"class":221},[47,10281,10282],{"class":49,"line":1741},[47,10283,10284],{"class":221},"     {\n",[47,10286,10287,10290,10293,10295,10298,10300,10303,10305,10307,10309,10311],{"class":49,"line":1747},[47,10288,10289],{"class":217},"         if",[47,10291,10292],{"class":221}," ((s",[47,10294,700],{"class":217},[47,10296,10297],{"class":221},"j)->age ",[47,10299,1179],{"class":217},[47,10301,10302],{"class":221}," (s",[47,10304,700],{"class":217},[47,10306,686],{"class":221},[47,10308,700],{"class":217},[47,10310,436],{"class":85},[47,10312,10313],{"class":221},")->age)\n",[47,10315,10316],{"class":49,"line":1768},[47,10317,10318],{"class":221},"         {\n",[47,10320,10321,10324,10326,10329,10331],{"class":49,"line":1773},[47,10322,10323],{"class":221},"             Sanguo temp",[47,10325,7246],{"class":217},[47,10327,10328],{"class":221},"(s",[47,10330,700],{"class":217},[47,10332,10333],{"class":221},"j);\n",[47,10335,10336,10339,10341,10343,10346,10348,10350,10352,10354,10356,10358],{"class":49,"line":1787},[47,10337,10338],{"class":217},"             *",[47,10340,10328],{"class":221},[47,10342,700],{"class":217},[47,10344,10345],{"class":221},"j)",[47,10347,7246],{"class":217},[47,10349,10328],{"class":221},[47,10351,700],{"class":217},[47,10353,686],{"class":221},[47,10355,700],{"class":217},[47,10357,436],{"class":85},[47,10359,2812],{"class":221},[47,10361,10362,10364,10366,10368,10370,10372,10374,10376,10378],{"class":49,"line":1792},[47,10363,10338],{"class":217},[47,10365,10328],{"class":221},[47,10367,700],{"class":217},[47,10369,686],{"class":221},[47,10371,700],{"class":217},[47,10373,436],{"class":85},[47,10375,648],{"class":221},[47,10377,267],{"class":217},[47,10379,4373],{"class":221},[47,10381,10382],{"class":49,"line":1821},[47,10383,10384],{"class":221},"         }\n",[47,10386,10387],{"class":49,"line":1826},[47,10388,10389],{"class":221},"     }\n",[47,10391,10392],{"class":49,"line":1843},[47,10393,2280],{"class":221},[47,10395,10396],{"class":49,"line":1848},[47,10397,1659],{"class":221},[47,10399,10400],{"class":49,"line":1853},[47,10401,10402],{"class":279},"\u002F\u002F定义打印函数\n",[47,10404,10405,10407,10409,10411,10413,10415,10417,10419,10421,10423],{"class":49,"line":1858},[47,10406,5457],{"class":217},[47,10408,9708],{"class":53},[47,10410,222],{"class":221},[47,10412,10201],{"class":53},[47,10414,6611],{"class":217},[47,10416,914],{"class":5309},[47,10418,597],{"class":221},[47,10420,225],{"class":217},[47,10422,7424],{"class":5309},[47,10424,228],{"class":221},[47,10426,10427],{"class":49,"line":1872},[47,10428,1640],{"class":221},[47,10430,10431,10433,10435,10437,10439,10441,10443,10445,10447,10449,10451],{"class":49,"line":1877},[47,10432,3294],{"class":217},[47,10434,1752],{"class":221},[47,10436,225],{"class":217},[47,10438,3125],{"class":221},[47,10440,267],{"class":217},[47,10442,411],{"class":85},[47,10444,3132],{"class":221},[47,10446,1129],{"class":217},[47,10448,10238],{"class":221},[47,10450,2385],{"class":217},[47,10452,228],{"class":221},[47,10454,10455],{"class":49,"line":2670},[47,10456,2123],{"class":221},[47,10458,10459,10461,10463,10465,10467,10470,10472,10474,10476,10479,10481,10483,10485,10488,10490,10492,10494,10497,10499,10501,10503,10506,10508,10510,10512,10515,10517],{"class":49,"line":2684},[47,10460,3544],{"class":221},[47,10462,1262],{"class":217},[47,10464,470],{"class":81},[47,10466,1324],{"class":85},[47,10468,10469],{"class":81},"姓名：\"",[47,10471,1262],{"class":217},[47,10473,10328],{"class":221},[47,10475,700],{"class":217},[47,10477,10478],{"class":221},"i)->name",[47,10480,1262],{"class":217},[47,10482,470],{"class":81},[47,10484,1324],{"class":85},[47,10486,10487],{"class":81},"年龄：\"",[47,10489,1262],{"class":217},[47,10491,10328],{"class":221},[47,10493,700],{"class":217},[47,10495,10496],{"class":221},"i)->age",[47,10498,1262],{"class":217},[47,10500,470],{"class":81},[47,10502,1324],{"class":85},[47,10504,10505],{"class":81},"性别：\"",[47,10507,1262],{"class":217},[47,10509,10328],{"class":221},[47,10511,700],{"class":217},[47,10513,10514],{"class":221},"i)->gender",[47,10516,1262],{"class":217},[47,10518,1285],{"class":221},[47,10520,10521],{"class":49,"line":2692},[47,10522,2280],{"class":221},[47,10524,10525],{"class":49,"line":2697},[47,10526,1659],{"class":221},[47,10528,10529,10531,10533],{"class":49,"line":2703},[47,10530,225],{"class":217},[47,10532,2066],{"class":53},[47,10534,2069],{"class":221},[47,10536,10537],{"class":49,"line":2709},[47,10538,1640],{"class":221},[47,10540,10541],{"class":49,"line":2714},[47,10542,10543],{"class":279},"    \u002F\u002F定义结构体变量\n",[47,10545,10546,10549,10551,10553],{"class":49,"line":8041},[47,10547,10548],{"class":221},"    Sanguo s1[",[47,10550,538],{"class":85},[47,10552,1159],{"class":221},[47,10554,5001],{"class":217},[47,10556,10557],{"class":49,"line":8065},[47,10558,2123],{"class":221},[47,10560,10561,10563,10565,10567,10569,10571,10573],{"class":49,"line":8070},[47,10562,5010],{"class":221},[47,10564,10045],{"class":81},[47,10566,597],{"class":221},[47,10568,994],{"class":85},[47,10570,597],{"class":221},[47,10572,10054],{"class":81},[47,10574,5023],{"class":221},[47,10576,10577,10579,10581,10583,10585,10587,10589],{"class":49,"line":8076},[47,10578,5010],{"class":221},[47,10580,10063],{"class":81},[47,10582,597],{"class":221},[47,10584,969],{"class":85},[47,10586,597],{"class":221},[47,10588,10054],{"class":81},[47,10590,5023],{"class":221},[47,10592,10593,10595,10597,10599,10601,10603,10605],{"class":49,"line":8103},[47,10594,5010],{"class":221},[47,10596,10080],{"class":81},[47,10598,597],{"class":221},[47,10600,919],{"class":85},[47,10602,597],{"class":221},[47,10604,10054],{"class":81},[47,10606,5023],{"class":221},[47,10608,10609,10611,10613,10615,10617,10619,10621],{"class":49,"line":8108},[47,10610,5010],{"class":221},[47,10612,10097],{"class":81},[47,10614,597],{"class":221},[47,10616,944],{"class":85},[47,10618,597],{"class":221},[47,10620,10054],{"class":81},[47,10622,5023],{"class":221},[47,10624,10625,10627,10629,10631,10633,10635,10637],{"class":49,"line":8114},[47,10626,5010],{"class":221},[47,10628,10114],{"class":81},[47,10630,597],{"class":221},[47,10632,894],{"class":85},[47,10634,597],{"class":221},[47,10636,10123],{"class":81},[47,10638,5023],{"class":221},[47,10640,10641],{"class":49,"line":8126},[47,10642,5044],{"class":221},[47,10644,10645,10647,10649,10651,10654,10656,10659,10661],{"class":49,"line":8138},[47,10646,2078],{"class":217},[47,10648,7424],{"class":221},[47,10650,4296],{"class":217},[47,10652,10653],{"class":221},"(s1)",[47,10655,4302],{"class":217},[47,10657,10658],{"class":221},"(s1[",[47,10660,411],{"class":85},[47,10662,3949],{"class":221},[47,10664,10665,10668,10670,10673,10675,10678,10681,10683],{"class":49,"line":8150},[47,10666,10667],{"class":221},"    Sanguo ",[47,10669,674],{"class":217},[47,10671,10672],{"class":221},"s ",[47,10674,267],{"class":217},[47,10676,10677],{"class":217}," &",[47,10679,10680],{"class":221},"s1[",[47,10682,411],{"class":85},[47,10684,4783],{"class":221},[47,10686,10687],{"class":49,"line":9809},[47,10688,10689],{"class":279},"    \u002F\u002F排序前：\n",[47,10691,10692,10694,10696,10699,10701],{"class":49,"line":9834},[47,10693,6622],{"class":221},[47,10695,1262],{"class":217},[47,10697,10698],{"class":81}," \"排序前：\"",[47,10700,1538],{"class":217},[47,10702,8933],{"class":221},[47,10704,10705,10707],{"class":49,"line":9857},[47,10706,10008],{"class":53},[47,10708,10709],{"class":221},"(s,len);\n",[47,10711,10712],{"class":49,"line":9881},[47,10713,10714],{"class":279},"    \u002F\u002F调用排序函数\n",[47,10716,10717,10719],{"class":49,"line":9886},[47,10718,7691],{"class":53},[47,10720,10709],{"class":221},[47,10722,10723],{"class":49,"line":9891},[47,10724,10725],{"class":279},"    \u002F\u002F排序后\n",[47,10727,10728,10730,10732,10735,10737],{"class":49,"line":9896},[47,10729,6622],{"class":221},[47,10731,1262],{"class":217},[47,10733,10734],{"class":81}," \"排序后：\"",[47,10736,1538],{"class":217},[47,10738,8933],{"class":221},[47,10740,10741,10743],{"class":49,"line":9905},[47,10742,10008],{"class":53},[47,10744,10709],{"class":221},[47,10746,10747],{"class":49,"line":9910},[47,10748,1659],{"class":221},[19,10750,10751,10752,10754],{},"注意：使用指针时直接用传首地址**&s",[47,10753,411],{},"**",[134,10756,10757],{},"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":43,"searchDepth":92,"depth":92,"links":10759},[10760,10761,10762,10763,10764,10765,10766],{"id":7796,"depth":92,"text":7797},{"id":8158,"depth":92,"text":8159},{"id":8427,"depth":92,"text":8428},{"id":8592,"depth":92,"text":8593},{"id":8808,"depth":92,"text":8809},{"id":9129,"depth":92,"text":9130},{"id":9357,"depth":92,"text":9358},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7785,"description":7793},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10773,"title":10774,"body":10775,"description":43,"extension":143,"meta":12118,"navigation":145,"path":12119,"seo":12120,"stem":12121,"__hash__":12122},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10776,"toc":12112},[10777,10780,10784,10790,10804,10809,10812,10816,10823,10829,10832,10839,10845,10850,10853,10856,10859,11423,11426,11440,11444,11449,11465,11605,11608,11614,11617,11622,11630,11738,11741,11746,11749,11754,11757,11763,11766,12109],[10,10778,10774],{"id":10779},"_5程序内存模型",[14,10781,10783],{"id":10782},"_51内存分区模型","5.1内存分区模型",[19,10785,10786,10787],{},"C++程序在执行时，将内存大方向划分为",[369,10788,10789],{},"4个区域",[106,10791,10792,10795,10798,10801],{},[109,10793,10794],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[109,10796,10797],{},"全局区：存放全局变量和静态变量以及常量",[109,10799,10800],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[109,10802,10803],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,10805,10806],{},[369,10807,10808],{},"内存四区意义：",[19,10810,10811],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[187,10813,10815],{"id":10814},"_511程序运行前","5.1.1程序运行前",[19,10817,10818,10819,10822],{},"​\t在程序编译后，生成了exe可执行程序，",[369,10820,10821],{},"未执行该程序前","分为两个区域",[19,10824,10825,10826],{},"​\t",[369,10827,10828],{},"代码区：",[19,10830,10831],{},"​\t\t存放 CPU 执行的机器指令",[19,10833,10834,10835,10838],{},"​\t\t代码区是",[369,10836,10837],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,10840,10834,10841,10844],{},[369,10842,10843],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,10846,10825,10847],{},[369,10848,10849],{},"全局区：",[19,10851,10852],{},"​\t\t全局变量和静态变量存放在此.",[19,10854,10855],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,10857,10858],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[38,10860,10862],{"className":208,"code":10861,"language":210,"meta":43,"style":43},"\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",[26,10863,10864,10869,10882,10895,10899,10904,10919,10934,10938,10947,10951,10956,10969,10982,10986,10991,11017,11043,11047,11074,11100,11104,11109,11125,11140,11144,11170,11196,11200,11225,11250,11254,11280,11306,11310,11326,11341,11367,11393,11397,11407,11411,11419],{"__ignoreMap":43},[47,10865,10866],{"class":49,"line":50},[47,10867,10868],{"class":279},"\u002F\u002F全局变量\n",[47,10870,10871,10873,10876,10878,10880],{"class":49,"line":92},[47,10872,225],{"class":217},[47,10874,10875],{"class":221}," g_a ",[47,10877,267],{"class":217},[47,10879,2131],{"class":85},[47,10881,1384],{"class":221},[47,10883,10884,10886,10889,10891,10893],{"class":49,"line":1273},[47,10885,225],{"class":217},[47,10887,10888],{"class":221}," g_b ",[47,10890,267],{"class":217},[47,10892,2131],{"class":85},[47,10894,1384],{"class":221},[47,10896,10897],{"class":49,"line":1288},[47,10898,2493],{"emptyLinePlaceholder":145},[47,10900,10901],{"class":49,"line":1294},[47,10902,10903],{"class":279},"\u002F\u002F全局常量\n",[47,10905,10906,10908,10910,10913,10915,10917],{"class":49,"line":1308},[47,10907,6885],{"class":217},[47,10909,2475],{"class":217},[47,10911,10912],{"class":221}," c_g_a ",[47,10914,267],{"class":217},[47,10916,2131],{"class":85},[47,10918,1384],{"class":221},[47,10920,10921,10923,10925,10928,10930,10932],{"class":49,"line":1314},[47,10922,6885],{"class":217},[47,10924,2475],{"class":217},[47,10926,10927],{"class":221}," c_g_b ",[47,10929,267],{"class":217},[47,10931,2131],{"class":85},[47,10933,1384],{"class":221},[47,10935,10936],{"class":49,"line":1405},[47,10937,2493],{"emptyLinePlaceholder":145},[47,10939,10940,10942,10944],{"class":49,"line":1411},[47,10941,225],{"class":217},[47,10943,2066],{"class":53},[47,10945,10946],{"class":221},"() {\n",[47,10948,10949],{"class":49,"line":1423},[47,10950,2493],{"emptyLinePlaceholder":145},[47,10952,10953],{"class":49,"line":1706},[47,10954,10955],{"class":279},"    \u002F\u002F局部变量\n",[47,10957,10958,10960,10963,10965,10967],{"class":49,"line":1711},[47,10959,2078],{"class":217},[47,10961,10962],{"class":221}," a ",[47,10964,267],{"class":217},[47,10966,2131],{"class":85},[47,10968,1384],{"class":221},[47,10970,10971,10973,10976,10978,10980],{"class":49,"line":1717},[47,10972,2078],{"class":217},[47,10974,10975],{"class":221}," b ",[47,10977,267],{"class":217},[47,10979,2131],{"class":85},[47,10981,1384],{"class":221},[47,10983,10984],{"class":49,"line":1722},[47,10985,2493],{"emptyLinePlaceholder":145},[47,10987,10988],{"class":49,"line":1736},[47,10989,10990],{"class":279},"    \u002F\u002F打印地址\n",[47,10992,10993,10995,10997,11000,11002,11004,11006,11008,11010,11013,11015],{"class":49,"line":1741},[47,10994,6622],{"class":221},[47,10996,1262],{"class":217},[47,10998,10999],{"class":81}," \"局部变量a地址为： \"",[47,11001,1538],{"class":217},[47,11003,1752],{"class":221},[47,11005,225],{"class":217},[47,11007,648],{"class":221},[47,11009,572],{"class":217},[47,11011,11012],{"class":221},"a ",[47,11014,1262],{"class":217},[47,11016,8933],{"class":221},[47,11018,11019,11021,11023,11026,11028,11030,11032,11034,11036,11039,11041],{"class":49,"line":1747},[47,11020,6622],{"class":221},[47,11022,1262],{"class":217},[47,11024,11025],{"class":81}," \"局部变量b地址为： \"",[47,11027,1538],{"class":217},[47,11029,1752],{"class":221},[47,11031,225],{"class":217},[47,11033,648],{"class":221},[47,11035,572],{"class":217},[47,11037,11038],{"class":221},"b ",[47,11040,1262],{"class":217},[47,11042,8933],{"class":221},[47,11044,11045],{"class":49,"line":1768},[47,11046,2493],{"emptyLinePlaceholder":145},[47,11048,11049,11051,11053,11056,11058,11061,11063,11065,11067,11070,11072],{"class":49,"line":1773},[47,11050,6622],{"class":221},[47,11052,1262],{"class":217},[47,11054,11055],{"class":81}," \"全局变量g_a地址为： \"",[47,11057,1538],{"class":217},[47,11059,11060],{"class":221},"  (",[47,11062,225],{"class":217},[47,11064,648],{"class":221},[47,11066,572],{"class":217},[47,11068,11069],{"class":221},"g_a ",[47,11071,1262],{"class":217},[47,11073,8933],{"class":221},[47,11075,11076,11078,11080,11083,11085,11087,11089,11091,11093,11096,11098],{"class":49,"line":1787},[47,11077,6622],{"class":221},[47,11079,1262],{"class":217},[47,11081,11082],{"class":81}," \"全局变量g_b地址为： \"",[47,11084,1538],{"class":217},[47,11086,11060],{"class":221},[47,11088,225],{"class":217},[47,11090,648],{"class":221},[47,11092,572],{"class":217},[47,11094,11095],{"class":221},"g_b ",[47,11097,1262],{"class":217},[47,11099,8933],{"class":221},[47,11101,11102],{"class":49,"line":1792},[47,11103,2493],{"emptyLinePlaceholder":145},[47,11105,11106],{"class":49,"line":1821},[47,11107,11108],{"class":279},"    \u002F\u002F静态变量\n",[47,11110,11111,11114,11116,11119,11121,11123],{"class":49,"line":1826},[47,11112,11113],{"class":217},"    static",[47,11115,2475],{"class":217},[47,11117,11118],{"class":221}," s_a ",[47,11120,267],{"class":217},[47,11122,2131],{"class":85},[47,11124,1384],{"class":221},[47,11126,11127,11129,11131,11134,11136,11138],{"class":49,"line":1843},[47,11128,11113],{"class":217},[47,11130,2475],{"class":217},[47,11132,11133],{"class":221}," s_b ",[47,11135,267],{"class":217},[47,11137,2131],{"class":85},[47,11139,1384],{"class":221},[47,11141,11142],{"class":49,"line":1848},[47,11143,2493],{"emptyLinePlaceholder":145},[47,11145,11146,11148,11150,11153,11155,11157,11159,11161,11163,11166,11168],{"class":49,"line":1853},[47,11147,6622],{"class":221},[47,11149,1262],{"class":217},[47,11151,11152],{"class":81}," \"静态变量s_a地址为： \"",[47,11154,1538],{"class":217},[47,11156,1752],{"class":221},[47,11158,225],{"class":217},[47,11160,648],{"class":221},[47,11162,572],{"class":217},[47,11164,11165],{"class":221},"s_a ",[47,11167,1262],{"class":217},[47,11169,8933],{"class":221},[47,11171,11172,11174,11176,11179,11181,11183,11185,11187,11189,11192,11194],{"class":49,"line":1858},[47,11173,6622],{"class":221},[47,11175,1262],{"class":217},[47,11177,11178],{"class":81}," \"静态变量s_b地址为： \"",[47,11180,1538],{"class":217},[47,11182,1752],{"class":221},[47,11184,225],{"class":217},[47,11186,648],{"class":221},[47,11188,572],{"class":217},[47,11190,11191],{"class":221},"s_b ",[47,11193,1262],{"class":217},[47,11195,8933],{"class":221},[47,11197,11198],{"class":49,"line":1872},[47,11199,2493],{"emptyLinePlaceholder":145},[47,11201,11202,11204,11206,11209,11211,11213,11215,11217,11219,11221,11223],{"class":49,"line":1877},[47,11203,6622],{"class":221},[47,11205,1262],{"class":217},[47,11207,11208],{"class":81}," \"字符串常量地址为： \"",[47,11210,1538],{"class":217},[47,11212,1752],{"class":221},[47,11214,225],{"class":217},[47,11216,648],{"class":221},[47,11218,572],{"class":217},[47,11220,1280],{"class":81},[47,11222,1538],{"class":217},[47,11224,8933],{"class":221},[47,11226,11227,11229,11231,11233,11235,11237,11239,11241,11243,11246,11248],{"class":49,"line":2670},[47,11228,6622],{"class":221},[47,11230,1262],{"class":217},[47,11232,11208],{"class":81},[47,11234,1538],{"class":217},[47,11236,1752],{"class":221},[47,11238,225],{"class":217},[47,11240,648],{"class":221},[47,11242,572],{"class":217},[47,11244,11245],{"class":81},"\"hello world1\"",[47,11247,1538],{"class":217},[47,11249,8933],{"class":221},[47,11251,11252],{"class":49,"line":2684},[47,11253,2493],{"emptyLinePlaceholder":145},[47,11255,11256,11258,11260,11263,11265,11267,11269,11271,11273,11276,11278],{"class":49,"line":2692},[47,11257,6622],{"class":221},[47,11259,1262],{"class":217},[47,11261,11262],{"class":81}," \"全局常量c_g_a地址为： \"",[47,11264,1538],{"class":217},[47,11266,1752],{"class":221},[47,11268,225],{"class":217},[47,11270,648],{"class":221},[47,11272,572],{"class":217},[47,11274,11275],{"class":221},"c_g_a ",[47,11277,1262],{"class":217},[47,11279,8933],{"class":221},[47,11281,11282,11284,11286,11289,11291,11293,11295,11297,11299,11302,11304],{"class":49,"line":2697},[47,11283,6622],{"class":221},[47,11285,1262],{"class":217},[47,11287,11288],{"class":81}," \"全局常量c_g_b地址为： \"",[47,11290,1538],{"class":217},[47,11292,1752],{"class":221},[47,11294,225],{"class":217},[47,11296,648],{"class":221},[47,11298,572],{"class":217},[47,11300,11301],{"class":221},"c_g_b ",[47,11303,1262],{"class":217},[47,11305,8933],{"class":221},[47,11307,11308],{"class":49,"line":2703},[47,11309,2493],{"emptyLinePlaceholder":145},[47,11311,11312,11315,11317,11320,11322,11324],{"class":49,"line":2709},[47,11313,11314],{"class":217},"    const",[47,11316,2475],{"class":217},[47,11318,11319],{"class":221}," c_l_a ",[47,11321,267],{"class":217},[47,11323,2131],{"class":85},[47,11325,1384],{"class":221},[47,11327,11328,11330,11332,11335,11337,11339],{"class":49,"line":2714},[47,11329,11314],{"class":217},[47,11331,2475],{"class":217},[47,11333,11334],{"class":221}," c_l_b ",[47,11336,267],{"class":217},[47,11338,2131],{"class":85},[47,11340,1384],{"class":221},[47,11342,11343,11345,11347,11350,11352,11354,11356,11358,11360,11363,11365],{"class":49,"line":8041},[47,11344,6622],{"class":221},[47,11346,1262],{"class":217},[47,11348,11349],{"class":81}," \"局部常量c_l_a地址为： \"",[47,11351,1538],{"class":217},[47,11353,1752],{"class":221},[47,11355,225],{"class":217},[47,11357,648],{"class":221},[47,11359,572],{"class":217},[47,11361,11362],{"class":221},"c_l_a ",[47,11364,1262],{"class":217},[47,11366,8933],{"class":221},[47,11368,11369,11371,11373,11376,11378,11380,11382,11384,11386,11389,11391],{"class":49,"line":8065},[47,11370,6622],{"class":221},[47,11372,1262],{"class":217},[47,11374,11375],{"class":81}," \"局部常量c_l_b地址为： \"",[47,11377,1538],{"class":217},[47,11379,1752],{"class":221},[47,11381,225],{"class":217},[47,11383,648],{"class":221},[47,11385,572],{"class":217},[47,11387,11388],{"class":221},"c_l_b ",[47,11390,1262],{"class":217},[47,11392,8933],{"class":221},[47,11394,11395],{"class":49,"line":8070},[47,11396,2493],{"emptyLinePlaceholder":145},[47,11398,11399,11401,11403,11405],{"class":49,"line":8076},[47,11400,2396],{"class":53},[47,11402,222],{"class":221},[47,11404,2401],{"class":81},[47,11406,2812],{"class":221},[47,11408,11409],{"class":49,"line":8103},[47,11410,2493],{"emptyLinePlaceholder":145},[47,11412,11413,11415,11417],{"class":49,"line":8108},[47,11414,4183],{"class":217},[47,11416,4186],{"class":85},[47,11418,1384],{"class":221},[47,11420,11421],{"class":49,"line":8114},[47,11422,1659],{"class":221},[19,11424,11425],{},"总结：",[106,11427,11428,11431,11434,11437],{},[109,11429,11430],{},"c++中程序运行前分为全局区和代码区",[109,11432,11433],{},"代码区特点是共享和只读",[109,11435,11436],{},"全局区中存放全局变量、静态变量、常量",[109,11438,11439],{},"常量区中存放const修饰的全局常量和字符串常量",[187,11441,11443],{"id":11442},"_512程序运行后","5.1.2程序运行后",[171,11445,11446],{},[109,11447,11448],{},"栈区：",[106,11450,11451,11458],{},[109,11452,11453,11454,11457],{},"由编译器自动分配释放, 存放",[369,11455,11456],{},"函数的参数值,局部变量","等",[109,11459,11460,11461,11464],{},"注意事项：",[369,11462,11463],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[38,11466,11468],{"className":208,"code":11467,"language":210,"meta":43,"style":43},"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",[26,11469,11470,11481,11485,11500,11512,11516,11520,11528,11533,11548,11566,11583,11593,11601],{"__ignoreMap":43},[47,11471,11472,11474,11476,11479],{"class":49,"line":50},[47,11473,225],{"class":217},[47,11475,6611],{"class":217},[47,11477,11478],{"class":53}," func",[47,11480,2069],{"class":221},[47,11482,11483],{"class":49,"line":92},[47,11484,1640],{"class":221},[47,11486,11487,11489,11491,11493,11495,11497],{"class":49,"line":1273},[47,11488,2078],{"class":217},[47,11490,10962],{"class":221},[47,11492,267],{"class":217},[47,11494,2131],{"class":85},[47,11496,276],{"class":221},[47,11498,11499],{"class":279}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[47,11501,11502,11504,11506,11509],{"class":49,"line":1288},[47,11503,4183],{"class":217},[47,11505,10677],{"class":217},[47,11507,11508],{"class":221},"a;",[47,11510,11511],{"class":279}," \u002F\u002F放回局部变量的地址\n",[47,11513,11514],{"class":49,"line":1294},[47,11515,1659],{"class":221},[47,11517,11518],{"class":49,"line":1308},[47,11519,2493],{"emptyLinePlaceholder":145},[47,11521,11522,11524,11526],{"class":49,"line":1314},[47,11523,225],{"class":217},[47,11525,2066],{"class":53},[47,11527,10946],{"class":221},[47,11529,11530],{"class":49,"line":1405},[47,11531,11532],{"class":279},"    \u002F\u002F接受func的返回值\n",[47,11534,11535,11537,11539,11542,11544,11546],{"class":49,"line":1411},[47,11536,2078],{"class":217},[47,11538,6611],{"class":217},[47,11540,11541],{"class":221},"p ",[47,11543,267],{"class":217},[47,11545,11478],{"class":53},[47,11547,5729],{"class":221},[47,11549,11550,11552,11554,11556,11558,11560,11563],{"class":49,"line":1423},[47,11551,6622],{"class":221},[47,11553,1262],{"class":217},[47,11555,6611],{"class":217},[47,11557,11541],{"class":221},[47,11559,1262],{"class":217},[47,11561,11562],{"class":221}," endl;",[47,11564,11565],{"class":279}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[47,11567,11568,11570,11572,11574,11576,11578,11580],{"class":49,"line":1706},[47,11569,6622],{"class":221},[47,11571,1262],{"class":217},[47,11573,6611],{"class":217},[47,11575,11541],{"class":221},[47,11577,1262],{"class":217},[47,11579,11562],{"class":221},[47,11581,11582],{"class":279}," \u002F\u002F第二次这个数据不再保留\n",[47,11584,11585,11587,11589,11591],{"class":49,"line":1711},[47,11586,2396],{"class":53},[47,11588,222],{"class":221},[47,11590,2401],{"class":81},[47,11592,2812],{"class":221},[47,11594,11595,11597,11599],{"class":49,"line":1717},[47,11596,4183],{"class":217},[47,11598,4186],{"class":85},[47,11600,1384],{"class":221},[47,11602,11603],{"class":49,"line":1722},[47,11604,1659],{"class":221},[19,11606,11607],{},"输出结果：",[19,11609,11610],{},[1556,11611],{"alt":11612,"src":11613},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,11615,11616],{},"总结：不要返回局部变量的地址",[171,11618,11619],{"start":92},[109,11620,11621],{},"堆区",[106,11623,11624,11627],{},[109,11625,11626],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[109,11628,11629],{},"在c++中主要利用new在堆区开辟内存",[38,11631,11633],{"className":208,"code":11632,"language":210,"meta":43,"style":43},"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",[26,11634,11635,11650,11654,11659,11680,11687,11691,11699,11703,11708,11722,11734],{"__ignoreMap":43},[47,11636,11637,11639,11642,11645,11647],{"class":49,"line":50},[47,11638,225],{"class":217},[47,11640,11641],{"class":217},"  *",[47,11643,11644],{"class":53},"func",[47,11646,2520],{"class":221},[47,11648,11649],{"class":279},"  \u002F\u002F函数返回指针\n",[47,11651,11652],{"class":49,"line":92},[47,11653,1640],{"class":221},[47,11655,11656],{"class":49,"line":1273},[47,11657,11658],{"class":279},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[47,11660,11661,11663,11665,11667,11669,11672,11674,11676,11678],{"class":49,"line":1288},[47,11662,4240],{"class":217},[47,11664,6611],{"class":217},[47,11666,19],{"class":221},[47,11668,267],{"class":217},[47,11670,11671],{"class":217}," new",[47,11673,2475],{"class":217},[47,11675,222],{"class":221},[47,11677,665],{"class":85},[47,11679,2812],{"class":221},[47,11681,11682,11684],{"class":49,"line":1294},[47,11683,4474],{"class":217},[47,11685,11686],{"class":221}," p;\n",[47,11688,11689],{"class":49,"line":1308},[47,11690,1659],{"class":221},[47,11692,11693,11695,11697],{"class":49,"line":1314},[47,11694,225],{"class":217},[47,11696,2066],{"class":53},[47,11698,2069],{"class":221},[47,11700,11701],{"class":49,"line":1405},[47,11702,1640],{"class":221},[47,11704,11705],{"class":49,"line":1411},[47,11706,11707],{"class":279},"    \u002F\u002F在堆区开辟数据\n",[47,11709,11710,11712,11714,11716,11718,11720],{"class":49,"line":1423},[47,11711,2078],{"class":217},[47,11713,6611],{"class":217},[47,11715,19],{"class":221},[47,11717,267],{"class":217},[47,11719,11644],{"class":53},[47,11721,5729],{"class":221},[47,11723,11724,11726,11728,11730,11732],{"class":49,"line":1706},[47,11725,1645],{"class":221},[47,11727,6512],{"class":217},[47,11729,19],{"class":221},[47,11731,1262],{"class":217},[47,11733,1285],{"class":221},[47,11735,11736],{"class":49,"line":1711},[47,11737,1659],{"class":221},[19,11739,11740],{},"图片展示：",[19,11742,11743],{},[1556,11744],{"alt":11612,"src":11745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,11747,11748],{},"堆区内存由程序员管生死！！！",[171,11750,11751],{"start":1273},[109,11752,11753],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,11755,11756],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,11758,11759,11760],{},"​语法：",[26,11761,11762],{}," new 数据类型",[19,11764,11765],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[38,11767,11769],{"className":208,"code":11768,"language":210,"meta":43,"style":43},"\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",[26,11770,11771,11776,11786,11790,11795,11800,11822,11826,11834,11838,11852,11864,11876,11888,11893,11898,11909,11913,11918,11926,11930,11935,11957,11983,11987,12005,12009,12035,12039,12051,12055,12060,12065,12073,12077,12081,12089,12093,12099,12105],{"__ignoreMap":43},[47,11772,11773],{"class":49,"line":50},[47,11774,11775],{"class":279},"\u002F\u002F1.new的基本语法\n",[47,11777,11778,11780,11782,11784],{"class":49,"line":92},[47,11779,225],{"class":217},[47,11781,6611],{"class":217},[47,11783,11644],{"class":53},[47,11785,2069],{"class":221},[47,11787,11788],{"class":49,"line":1273},[47,11789,1640],{"class":221},[47,11791,11792],{"class":49,"line":1288},[47,11793,11794],{"class":279},"    \u002F\u002F在堆区创建整型数据\n",[47,11796,11797],{"class":49,"line":1294},[47,11798,11799],{"class":279},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[47,11801,11802,11804,11806,11808,11811,11813,11815,11817,11819],{"class":49,"line":1308},[47,11803,2078],{"class":217},[47,11805,6611],{"class":217},[47,11807,19],{"class":221},[47,11809,11810],{"class":217},"=new",[47,11812,2475],{"class":217},[47,11814,222],{"class":221},[47,11816,665],{"class":85},[47,11818,6059],{"class":221},[47,11820,11821],{"class":279},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[47,11823,11824],{"class":49,"line":1314},[47,11825,1659],{"class":221},[47,11827,11828,11830,11832],{"class":49,"line":1405},[47,11829,5457],{"class":217},[47,11831,5681],{"class":53},[47,11833,2069],{"class":221},[47,11835,11836],{"class":49,"line":1411},[47,11837,1640],{"class":221},[47,11839,11840,11842,11844,11846,11848,11850],{"class":49,"line":1423},[47,11841,2078],{"class":217},[47,11843,6611],{"class":217},[47,11845,19],{"class":221},[47,11847,267],{"class":217},[47,11849,11644],{"class":53},[47,11851,5729],{"class":221},[47,11853,11854,11856,11858,11860,11862],{"class":49,"line":1706},[47,11855,1645],{"class":221},[47,11857,6512],{"class":217},[47,11859,19],{"class":221},[47,11861,1262],{"class":217},[47,11863,1285],{"class":221},[47,11865,11866,11868,11870,11872,11874],{"class":49,"line":1711},[47,11867,1645],{"class":221},[47,11869,6512],{"class":217},[47,11871,19],{"class":221},[47,11873,1262],{"class":217},[47,11875,1285],{"class":221},[47,11877,11878,11880,11882,11884,11886],{"class":49,"line":1717},[47,11879,1645],{"class":221},[47,11881,6512],{"class":217},[47,11883,19],{"class":221},[47,11885,1262],{"class":217},[47,11887,1285],{"class":221},[47,11889,11890],{"class":49,"line":1722},[47,11891,11892],{"class":279},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[47,11894,11895],{"class":49,"line":1736},[47,11896,11897],{"class":279},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[47,11899,11900,11903,11906],{"class":49,"line":1741},[47,11901,11902],{"class":217},"    delete",[47,11904,11905],{"class":221}," p;",[47,11907,11908],{"class":279},"\u002F\u002F删除这块地址\n",[47,11910,11911],{"class":49,"line":1747},[47,11912,1659],{"class":221},[47,11914,11915],{"class":49,"line":1768},[47,11916,11917],{"class":279},"\u002F\u002F2.在堆区利用new开辟数组\n",[47,11919,11920,11922,11924],{"class":49,"line":1773},[47,11921,5457],{"class":217},[47,11923,5750],{"class":53},[47,11925,2069],{"class":221},[47,11927,11928],{"class":49,"line":1787},[47,11929,1640],{"class":221},[47,11931,11932],{"class":49,"line":1792},[47,11933,11934],{"class":279},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[47,11936,11937,11939,11941,11943,11945,11947,11949,11951,11954],{"class":49,"line":1821},[47,11938,2078],{"class":217},[47,11940,6611],{"class":217},[47,11942,3973],{"class":221},[47,11944,11810],{"class":217},[47,11946,2475],{"class":217},[47,11948,1109],{"class":221},[47,11950,665],{"class":85},[47,11952,11953],{"class":221},"];",[47,11955,11956],{"class":279},"\u002F\u002F10代表数组有10个元素\n",[47,11958,11959,11961,11963,11965,11967,11969,11971,11973,11975,11977,11979,11981],{"class":49,"line":1826},[47,11960,3294],{"class":217},[47,11962,1752],{"class":221},[47,11964,225],{"class":217},[47,11966,3125],{"class":221},[47,11968,267],{"class":217},[47,11970,411],{"class":85},[47,11972,3132],{"class":221},[47,11974,1129],{"class":217},[47,11976,665],{"class":85},[47,11978,3132],{"class":221},[47,11980,2385],{"class":217},[47,11982,228],{"class":221},[47,11984,11985],{"class":49,"line":1843},[47,11986,2123],{"class":221},[47,11988,11989,11992,11994,11996,11998,12000,12002],{"class":49,"line":1848},[47,11990,11991],{"class":221},"        arr[i]",[47,11993,267],{"class":217},[47,11995,660],{"class":221},[47,11997,700],{"class":217},[47,11999,530],{"class":85},[47,12001,276],{"class":221},[47,12003,12004],{"class":279},"\u002F\u002F给10个元素赋值100～109\n",[47,12006,12007],{"class":49,"line":1853},[47,12008,2280],{"class":221},[47,12010,12011,12013,12015,12017,12019,12021,12023,12025,12027,12029,12031,12033],{"class":49,"line":1858},[47,12012,3294],{"class":217},[47,12014,1752],{"class":221},[47,12016,225],{"class":217},[47,12018,3125],{"class":221},[47,12020,267],{"class":217},[47,12022,411],{"class":85},[47,12024,3132],{"class":221},[47,12026,1129],{"class":217},[47,12028,665],{"class":85},[47,12030,3132],{"class":221},[47,12032,2385],{"class":217},[47,12034,228],{"class":221},[47,12036,12037],{"class":49,"line":1872},[47,12038,2123],{"class":221},[47,12040,12041,12043,12045,12047,12049],{"class":49,"line":1877},[47,12042,3544],{"class":221},[47,12044,1262],{"class":217},[47,12046,4447],{"class":221},[47,12048,1262],{"class":217},[47,12050,1285],{"class":221},[47,12052,12053],{"class":49,"line":2670},[47,12054,2280],{"class":221},[47,12056,12057],{"class":49,"line":2684},[47,12058,12059],{"class":279},"    \u002F\u002F释放堆区数组\n",[47,12061,12062],{"class":49,"line":2692},[47,12063,12064],{"class":279},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[47,12066,12067,12070],{"class":49,"line":2697},[47,12068,12069],{"class":217},"    delete[]",[47,12071,12072],{"class":221}," arr;\n",[47,12074,12075],{"class":49,"line":2703},[47,12076,1659],{"class":221},[47,12078,12079],{"class":49,"line":2709},[47,12080,2493],{"emptyLinePlaceholder":145},[47,12082,12083,12085,12087],{"class":49,"line":2714},[47,12084,225],{"class":217},[47,12086,2066],{"class":53},[47,12088,2069],{"class":221},[47,12090,12091],{"class":49,"line":8041},[47,12092,1640],{"class":221},[47,12094,12095,12097],{"class":49,"line":8065},[47,12096,5726],{"class":53},[47,12098,5729],{"class":221},[47,12100,12101,12103],{"class":49,"line":8070},[47,12102,5795],{"class":53},[47,12104,5729],{"class":221},[47,12106,12107],{"class":49,"line":8076},[47,12108,1659],{"class":221},[134,12110,12111],{},"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":43,"searchDepth":92,"depth":92,"links":12113},[12114],{"id":10782,"depth":92,"text":10783,"children":12115},[12116,12117],{"id":10814,"depth":1273,"text":10815},{"id":11442,"depth":1273,"text":11443},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10774,"description":43},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12124,"title":12125,"body":12126,"description":43,"extension":143,"meta":13607,"navigation":145,"path":13608,"seo":13609,"stem":13610,"__hash__":13611},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12127,"toc":13599},[12128,12131,12135,12138,12141,12310,12314,12319,12336,12341,12493,12497,12500,12503,12897,12901,12904,12909,12912,13224,13228,13234,13394,13396,13404,13408,13411,13418,13596],[10,12129,12125],{"id":12130},"_6引用",[14,12132,12134],{"id":12133},"_61引用基本用法","6.1引用基本用法",[19,12136,12137],{},"引用的本质：给变量起别名",[19,12139,12140],{},"语法：数据类型 &别名=原名",[38,12142,12144],{"className":208,"code":12143,"language":210,"meta":43,"style":43},"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",[26,12145,12146,12154,12158,12170,12182,12186,12205,12224,12228,12239,12243,12262,12280,12284,12294,12298,12306],{"__ignoreMap":43},[47,12147,12148,12150,12152],{"class":49,"line":50},[47,12149,225],{"class":217},[47,12151,2066],{"class":53},[47,12153,10946],{"class":221},[47,12155,12156],{"class":49,"line":92},[47,12157,2493],{"emptyLinePlaceholder":145},[47,12159,12160,12162,12164,12166,12168],{"class":49,"line":1273},[47,12161,2078],{"class":217},[47,12163,10962],{"class":221},[47,12165,267],{"class":217},[47,12167,2131],{"class":85},[47,12169,1384],{"class":221},[47,12171,12172,12174,12176,12178,12180],{"class":49,"line":1288},[47,12173,2078],{"class":217},[47,12175,10677],{"class":217},[47,12177,11038],{"class":221},[47,12179,267],{"class":217},[47,12181,1526],{"class":221},[47,12183,12184],{"class":49,"line":1294},[47,12185,2493],{"emptyLinePlaceholder":145},[47,12187,12188,12190,12192,12195,12197,12199,12201,12203],{"class":49,"line":1308},[47,12189,6622],{"class":221},[47,12191,1262],{"class":217},[47,12193,12194],{"class":81}," \"a = \"",[47,12196,1538],{"class":217},[47,12198,10962],{"class":221},[47,12200,1262],{"class":217},[47,12202,11562],{"class":221},[47,12204,7361],{"class":279},[47,12206,12207,12209,12211,12214,12216,12218,12220,12222],{"class":49,"line":1314},[47,12208,6622],{"class":221},[47,12210,1262],{"class":217},[47,12212,12213],{"class":81}," \"b = \"",[47,12215,1538],{"class":217},[47,12217,10975],{"class":221},[47,12219,1262],{"class":217},[47,12221,11562],{"class":221},[47,12223,7361],{"class":279},[47,12225,12226],{"class":49,"line":1405},[47,12227,2493],{"emptyLinePlaceholder":145},[47,12229,12230,12233,12235,12237],{"class":49,"line":1411},[47,12231,12232],{"class":221},"    b ",[47,12234,267],{"class":217},[47,12236,5847],{"class":85},[47,12238,1384],{"class":221},[47,12240,12241],{"class":49,"line":1423},[47,12242,2493],{"emptyLinePlaceholder":145},[47,12244,12245,12247,12249,12251,12253,12255,12257,12259],{"class":49,"line":1706},[47,12246,6622],{"class":221},[47,12248,1262],{"class":217},[47,12250,12194],{"class":81},[47,12252,1538],{"class":217},[47,12254,10962],{"class":221},[47,12256,1262],{"class":217},[47,12258,11562],{"class":221},[47,12260,12261],{"class":279},"\u002F\u002F100\n",[47,12263,12264,12266,12268,12270,12272,12274,12276,12278],{"class":49,"line":1711},[47,12265,6622],{"class":221},[47,12267,1262],{"class":217},[47,12269,12213],{"class":81},[47,12271,1538],{"class":217},[47,12273,10975],{"class":221},[47,12275,1262],{"class":217},[47,12277,11562],{"class":221},[47,12279,12261],{"class":279},[47,12281,12282],{"class":49,"line":1717},[47,12283,2493],{"emptyLinePlaceholder":145},[47,12285,12286,12288,12290,12292],{"class":49,"line":1722},[47,12287,2396],{"class":53},[47,12289,222],{"class":221},[47,12291,2401],{"class":81},[47,12293,2812],{"class":221},[47,12295,12296],{"class":49,"line":1736},[47,12297,2493],{"emptyLinePlaceholder":145},[47,12299,12300,12302,12304],{"class":49,"line":1741},[47,12301,4183],{"class":217},[47,12303,4186],{"class":85},[47,12305,1384],{"class":221},[47,12307,12308],{"class":49,"line":1747},[47,12309,1659],{"class":221},[14,12311,12313],{"id":12312},"_62引用的注意事项","6.2引用的注意事项",[171,12315,12316],{},[109,12317,12318],{},"引用必须要初始化",[38,12320,12322],{"className":208,"code":12321,"language":210,"meta":43,"style":43},"int &b;\u002F\u002F非常错误！\n",[26,12323,12324],{"__ignoreMap":43},[47,12325,12326,12328,12330,12333],{"class":49,"line":50},[47,12327,225],{"class":217},[47,12329,10677],{"class":217},[47,12331,12332],{"class":221},"b;",[47,12334,12335],{"class":279},"\u002F\u002F非常错误！\n",[171,12337,12338],{"start":92},[109,12339,12340],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[38,12342,12344],{"className":208,"code":12343,"language":210,"meta":43,"style":43},"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",[26,12345,12346,12354,12366,12378,12386,12402,12415,12433,12451,12471,12481,12489],{"__ignoreMap":43},[47,12347,12348,12350,12352],{"class":49,"line":50},[47,12349,225],{"class":217},[47,12351,2066],{"class":53},[47,12353,10946],{"class":221},[47,12355,12356,12358,12360,12362,12364],{"class":49,"line":92},[47,12357,2078],{"class":217},[47,12359,10962],{"class":221},[47,12361,267],{"class":217},[47,12363,2131],{"class":85},[47,12365,1384],{"class":221},[47,12367,12368,12370,12372,12374,12376],{"class":49,"line":1273},[47,12369,2078],{"class":217},[47,12371,10975],{"class":221},[47,12373,267],{"class":217},[47,12375,9043],{"class":85},[47,12377,1384],{"class":221},[47,12379,12380,12383],{"class":49,"line":1288},[47,12381,12382],{"class":279},"    \u002F\u002Fint &c;",[47,12384,12385],{"class":279}," \u002F\u002F错误，引用必须初始化\n",[47,12387,12388,12390,12392,12394,12396,12399],{"class":49,"line":1294},[47,12389,2078],{"class":217},[47,12391,10677],{"class":217},[47,12393,3039],{"class":221},[47,12395,267],{"class":217},[47,12397,12398],{"class":221}," a;",[47,12400,12401],{"class":279}," \u002F\u002F一旦初始化后，就不可以更改\n",[47,12403,12404,12407,12409,12412],{"class":49,"line":1308},[47,12405,12406],{"class":221},"    c ",[47,12408,267],{"class":217},[47,12410,12411],{"class":221}," b;",[47,12413,12414],{"class":279}," \u002F\u002F这是赋值操作，不是更改引用\n",[47,12416,12417,12419,12421,12423,12425,12427,12429,12431],{"class":49,"line":1314},[47,12418,6622],{"class":221},[47,12420,1262],{"class":217},[47,12422,12194],{"class":81},[47,12424,1538],{"class":217},[47,12426,10962],{"class":221},[47,12428,1262],{"class":217},[47,12430,11562],{"class":221},[47,12432,7346],{"class":279},[47,12434,12435,12437,12439,12441,12443,12445,12447,12449],{"class":49,"line":1405},[47,12436,6622],{"class":221},[47,12438,1262],{"class":217},[47,12440,12213],{"class":81},[47,12442,1538],{"class":217},[47,12444,10975],{"class":221},[47,12446,1262],{"class":217},[47,12448,11562],{"class":221},[47,12450,7346],{"class":279},[47,12452,12453,12455,12457,12460,12462,12465,12467,12469],{"class":49,"line":1411},[47,12454,6622],{"class":221},[47,12456,1262],{"class":217},[47,12458,12459],{"class":81}," \"c = \"",[47,12461,1538],{"class":217},[47,12463,12464],{"class":221}," c ",[47,12466,1262],{"class":217},[47,12468,11562],{"class":221},[47,12470,7346],{"class":279},[47,12472,12473,12475,12477,12479],{"class":49,"line":1423},[47,12474,2396],{"class":53},[47,12476,222],{"class":221},[47,12478,2401],{"class":81},[47,12480,2812],{"class":221},[47,12482,12483,12485,12487],{"class":49,"line":1706},[47,12484,4183],{"class":217},[47,12486,4186],{"class":85},[47,12488,1384],{"class":221},[47,12490,12491],{"class":49,"line":1711},[47,12492,1659],{"class":221},[14,12494,12496],{"id":12495},"_63引用做函数参数","6.3引用做函数参数",[19,12498,12499],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,12501,12502],{},"优点：可以简化指针修改实参",[38,12504,12506],{"className":208,"code":12505,"language":210,"meta":43,"style":43},"\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",[26,12507,12508,12513,12536,12547,12557,12566,12570,12574,12579,12601,12613,12625,12635,12639,12643,12648,12670,12680,12688,12696,12700,12704,12712,12716,12728,12740,12744,12755,12781,12785,12805,12829,12833,12843,12867,12871,12881,12885,12893],{"__ignoreMap":43},[47,12509,12510],{"class":49,"line":50},[47,12511,12512],{"class":279},"\u002F\u002F1. 值传递\n",[47,12514,12515,12517,12520,12522,12524,12526,12529,12531,12533],{"class":49,"line":92},[47,12516,5457],{"class":217},[47,12518,12519],{"class":53}," mySwap01",[47,12521,222],{"class":221},[47,12523,225],{"class":217},[47,12525,1492],{"class":5309},[47,12527,12528],{"class":221},", ",[47,12530,225],{"class":217},[47,12532,2926],{"class":5309},[47,12534,12535],{"class":221},") {\n",[47,12537,12538,12540,12543,12545],{"class":49,"line":1273},[47,12539,2078],{"class":217},[47,12541,12542],{"class":221}," temp ",[47,12544,267],{"class":217},[47,12546,1526],{"class":221},[47,12548,12549,12552,12554],{"class":49,"line":1288},[47,12550,12551],{"class":221},"    a ",[47,12553,267],{"class":217},[47,12555,12556],{"class":221}," b;\n",[47,12558,12559,12561,12563],{"class":49,"line":1294},[47,12560,12232],{"class":221},[47,12562,267],{"class":217},[47,12564,12565],{"class":221}," temp;\n",[47,12567,12568],{"class":49,"line":1308},[47,12569,1659],{"class":221},[47,12571,12572],{"class":49,"line":1314},[47,12573,2493],{"emptyLinePlaceholder":145},[47,12575,12576],{"class":49,"line":1405},[47,12577,12578],{"class":279},"\u002F\u002F2. 地址传递\n",[47,12580,12581,12583,12586,12588,12591,12593,12595,12597,12599],{"class":49,"line":1411},[47,12582,5457],{"class":217},[47,12584,12585],{"class":53}," mySwap02",[47,12587,222],{"class":221},[47,12589,12590],{"class":217},"int*",[47,12592,1492],{"class":5309},[47,12594,12528],{"class":221},[47,12596,12590],{"class":217},[47,12598,2926],{"class":5309},[47,12600,12535],{"class":221},[47,12602,12603,12605,12607,12609,12611],{"class":49,"line":1423},[47,12604,2078],{"class":217},[47,12606,12542],{"class":221},[47,12608,267],{"class":217},[47,12610,6611],{"class":217},[47,12612,6290],{"class":221},[47,12614,12615,12617,12619,12621,12623],{"class":49,"line":1706},[47,12616,6496],{"class":217},[47,12618,11012],{"class":221},[47,12620,267],{"class":217},[47,12622,6611],{"class":217},[47,12624,6162],{"class":221},[47,12626,12627,12629,12631,12633],{"class":49,"line":1711},[47,12628,6496],{"class":217},[47,12630,11038],{"class":221},[47,12632,267],{"class":217},[47,12634,12565],{"class":221},[47,12636,12637],{"class":49,"line":1717},[47,12638,1659],{"class":221},[47,12640,12641],{"class":49,"line":1722},[47,12642,2493],{"emptyLinePlaceholder":145},[47,12644,12645],{"class":49,"line":1736},[47,12646,12647],{"class":279},"\u002F\u002F3. 引用传递\n",[47,12649,12650,12652,12655,12657,12660,12662,12664,12666,12668],{"class":49,"line":1741},[47,12651,5457],{"class":217},[47,12653,12654],{"class":53}," mySwap03",[47,12656,222],{"class":221},[47,12658,12659],{"class":217},"int&",[47,12661,1492],{"class":5309},[47,12663,12528],{"class":221},[47,12665,12659],{"class":217},[47,12667,2926],{"class":5309},[47,12669,12535],{"class":221},[47,12671,12672,12674,12676,12678],{"class":49,"line":1747},[47,12673,2078],{"class":217},[47,12675,12542],{"class":221},[47,12677,267],{"class":217},[47,12679,1526],{"class":221},[47,12681,12682,12684,12686],{"class":49,"line":1768},[47,12683,12551],{"class":221},[47,12685,267],{"class":217},[47,12687,12556],{"class":221},[47,12689,12690,12692,12694],{"class":49,"line":1773},[47,12691,12232],{"class":221},[47,12693,267],{"class":217},[47,12695,12565],{"class":221},[47,12697,12698],{"class":49,"line":1787},[47,12699,1659],{"class":221},[47,12701,12702],{"class":49,"line":1792},[47,12703,2493],{"emptyLinePlaceholder":145},[47,12705,12706,12708,12710],{"class":49,"line":1821},[47,12707,225],{"class":217},[47,12709,2066],{"class":53},[47,12711,10946],{"class":221},[47,12713,12714],{"class":49,"line":1826},[47,12715,2493],{"emptyLinePlaceholder":145},[47,12717,12718,12720,12722,12724,12726],{"class":49,"line":1843},[47,12719,2078],{"class":217},[47,12721,10962],{"class":221},[47,12723,267],{"class":217},[47,12725,2131],{"class":85},[47,12727,1384],{"class":221},[47,12729,12730,12732,12734,12736,12738],{"class":49,"line":1848},[47,12731,2078],{"class":217},[47,12733,10975],{"class":221},[47,12735,267],{"class":217},[47,12737,9043],{"class":85},[47,12739,1384],{"class":221},[47,12741,12742],{"class":49,"line":1853},[47,12743,2493],{"emptyLinePlaceholder":145},[47,12745,12746,12749,12752],{"class":49,"line":1858},[47,12747,12748],{"class":53},"    mySwap01",[47,12750,12751],{"class":221},"(a, b);",[47,12753,12754],{"class":279},"\u002F\u002F值传递，形参不会修饰实参\n",[47,12756,12757,12759,12761,12764,12766,12768,12770,12773,12775,12777,12779],{"class":49,"line":1872},[47,12758,6622],{"class":221},[47,12760,1262],{"class":217},[47,12762,12763],{"class":81}," \"a:\"",[47,12765,1538],{"class":217},[47,12767,10962],{"class":221},[47,12769,1262],{"class":217},[47,12771,12772],{"class":81}," \" b:\"",[47,12774,1538],{"class":217},[47,12776,10975],{"class":221},[47,12778,1262],{"class":217},[47,12780,8933],{"class":221},[47,12782,12783],{"class":49,"line":1877},[47,12784,2493],{"emptyLinePlaceholder":145},[47,12786,12787,12790,12792,12794,12797,12799,12802],{"class":49,"line":2670},[47,12788,12789],{"class":53},"    mySwap02",[47,12791,222],{"class":221},[47,12793,572],{"class":217},[47,12795,12796],{"class":221},"a, ",[47,12798,572],{"class":217},[47,12800,12801],{"class":221},"b);",[47,12803,12804],{"class":279},"\u002F\u002F地址传递，形参会修饰实参\n",[47,12806,12807,12809,12811,12813,12815,12817,12819,12821,12823,12825,12827],{"class":49,"line":2684},[47,12808,6622],{"class":221},[47,12810,1262],{"class":217},[47,12812,12763],{"class":81},[47,12814,1538],{"class":217},[47,12816,10962],{"class":221},[47,12818,1262],{"class":217},[47,12820,12772],{"class":81},[47,12822,1538],{"class":217},[47,12824,10975],{"class":221},[47,12826,1262],{"class":217},[47,12828,8933],{"class":221},[47,12830,12831],{"class":49,"line":2692},[47,12832,2493],{"emptyLinePlaceholder":145},[47,12834,12835,12838,12840],{"class":49,"line":2697},[47,12836,12837],{"class":53},"    mySwap03",[47,12839,12751],{"class":221},[47,12841,12842],{"class":279},"\u002F\u002F引用传递，形参会修饰实参\n",[47,12844,12845,12847,12849,12851,12853,12855,12857,12859,12861,12863,12865],{"class":49,"line":2703},[47,12846,6622],{"class":221},[47,12848,1262],{"class":217},[47,12850,12763],{"class":81},[47,12852,1538],{"class":217},[47,12854,10962],{"class":221},[47,12856,1262],{"class":217},[47,12858,12772],{"class":81},[47,12860,1538],{"class":217},[47,12862,10975],{"class":221},[47,12864,1262],{"class":217},[47,12866,8933],{"class":221},[47,12868,12869],{"class":49,"line":2709},[47,12870,2493],{"emptyLinePlaceholder":145},[47,12872,12873,12875,12877,12879],{"class":49,"line":2714},[47,12874,2396],{"class":53},[47,12876,222],{"class":221},[47,12878,2401],{"class":81},[47,12880,2812],{"class":221},[47,12882,12883],{"class":49,"line":8041},[47,12884,2493],{"emptyLinePlaceholder":145},[47,12886,12887,12889,12891],{"class":49,"line":8065},[47,12888,4183],{"class":217},[47,12890,4186],{"class":85},[47,12892,1384],{"class":221},[47,12894,12895],{"class":49,"line":8070},[47,12896,1659],{"class":221},[14,12898,12900],{"id":12899},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,12902,12903],{},"作用：引用是可以作为函数的返回值存在的",[19,12905,9118,12906],{},[369,12907,12908],{},"不要返回局部变量引用",[19,12910,12911],{},"用法：函数调用作为左值",[38,12913,12915],{"className":10034,"code":12914,"language":10036,"meta":43,"style":43},"\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",[26,12916,12917,12922,12930,12945,12951,12955,12959,12964,12972,12989,12995,12999,13003,13011,13015,13020,13034,13054,13073,13077,13082,13095,13115,13133,13137,13153,13157,13176,13194,13198,13208,13212,13220],{"__ignoreMap":43},[47,12918,12919],{"class":49,"line":50},[47,12920,12921],{"class":279},"\u002F\u002F返回局部变量引用\n",[47,12923,12924,12926,12928],{"class":49,"line":92},[47,12925,12659],{"class":217},[47,12927,5681],{"class":53},[47,12929,10946],{"class":221},[47,12931,12932,12934,12936,12938,12940,12942],{"class":49,"line":1273},[47,12933,2078],{"class":217},[47,12935,10962],{"class":221},[47,12937,267],{"class":217},[47,12939,2131],{"class":85},[47,12941,276],{"class":221},[47,12943,12944],{"class":279}," \u002F\u002F局部变量\n",[47,12946,12947,12949],{"class":49,"line":1288},[47,12948,4183],{"class":217},[47,12950,1526],{"class":221},[47,12952,12953],{"class":49,"line":1294},[47,12954,1659],{"class":221},[47,12956,12957],{"class":49,"line":1308},[47,12958,2493],{"emptyLinePlaceholder":145},[47,12960,12961],{"class":49,"line":1314},[47,12962,12963],{"class":279},"\u002F\u002F返回静态变量引用\n",[47,12965,12966,12968,12970],{"class":49,"line":1405},[47,12967,12659],{"class":217},[47,12969,5750],{"class":53},[47,12971,10946],{"class":221},[47,12973,12974,12976,12978,12980,12982,12984,12986],{"class":49,"line":1411},[47,12975,11113],{"class":217},[47,12977,2475],{"class":217},[47,12979,10962],{"class":221},[47,12981,267],{"class":217},[47,12983,9043],{"class":85},[47,12985,276],{"class":221},[47,12987,12988],{"class":279},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[47,12990,12991,12993],{"class":49,"line":1423},[47,12992,4183],{"class":217},[47,12994,1526],{"class":221},[47,12996,12997],{"class":49,"line":1706},[47,12998,1659],{"class":221},[47,13000,13001],{"class":49,"line":1711},[47,13002,2493],{"emptyLinePlaceholder":145},[47,13004,13005,13007,13009],{"class":49,"line":1717},[47,13006,225],{"class":217},[47,13008,2066],{"class":53},[47,13010,10946],{"class":221},[47,13012,13013],{"class":49,"line":1722},[47,13014,2493],{"emptyLinePlaceholder":145},[47,13016,13017],{"class":49,"line":1736},[47,13018,13019],{"class":279},"    \u002F\u002F不能返回局部变量的引用\n",[47,13021,13022,13025,13028,13030,13032],{"class":49,"line":1741},[47,13023,13024],{"class":217},"    int&",[47,13026,13027],{"class":221}," ref ",[47,13029,267],{"class":217},[47,13031,5681],{"class":53},[47,13033,5729],{"class":221},[47,13035,13036,13038,13040,13043,13045,13047,13049,13051],{"class":49,"line":1747},[47,13037,6622],{"class":221},[47,13039,1262],{"class":217},[47,13041,13042],{"class":81}," \"ref = \"",[47,13044,1538],{"class":217},[47,13046,13027],{"class":221},[47,13048,1262],{"class":217},[47,13050,11562],{"class":221},[47,13052,13053],{"class":279},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[47,13055,13056,13058,13060,13062,13064,13066,13068,13070],{"class":49,"line":1768},[47,13057,6622],{"class":221},[47,13059,1262],{"class":217},[47,13061,13042],{"class":81},[47,13063,1538],{"class":217},[47,13065,13027],{"class":221},[47,13067,1262],{"class":217},[47,13069,11562],{"class":221},[47,13071,13072],{"class":279},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[47,13074,13075],{"class":49,"line":1773},[47,13076,2493],{"emptyLinePlaceholder":145},[47,13078,13079],{"class":49,"line":1787},[47,13080,13081],{"class":279},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[47,13083,13084,13086,13089,13091,13093],{"class":49,"line":1792},[47,13085,13024],{"class":217},[47,13087,13088],{"class":221}," ref2 ",[47,13090,267],{"class":217},[47,13092,5750],{"class":53},[47,13094,5729],{"class":221},[47,13096,13097,13099,13101,13104,13106,13108,13110,13112],{"class":49,"line":1821},[47,13098,6622],{"class":221},[47,13100,1262],{"class":217},[47,13102,13103],{"class":81}," \"ref2 = \"",[47,13105,1538],{"class":217},[47,13107,13088],{"class":221},[47,13109,1262],{"class":217},[47,13111,11562],{"class":221},[47,13113,13114],{"class":279}," \u002F\u002F20\n",[47,13116,13117,13119,13121,13123,13125,13127,13129,13131],{"class":49,"line":1826},[47,13118,6622],{"class":221},[47,13120,1262],{"class":217},[47,13122,13103],{"class":81},[47,13124,1538],{"class":217},[47,13126,13088],{"class":221},[47,13128,1262],{"class":217},[47,13130,11562],{"class":221},[47,13132,13114],{"class":279},[47,13134,13135],{"class":49,"line":1843},[47,13136,2493],{"emptyLinePlaceholder":145},[47,13138,13139,13141,13144,13146,13148,13150],{"class":49,"line":1848},[47,13140,5795],{"class":53},[47,13142,13143],{"class":221},"() ",[47,13145,267],{"class":217},[47,13147,3092],{"class":85},[47,13149,276],{"class":221},[47,13151,13152],{"class":279},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[47,13154,13155],{"class":49,"line":1853},[47,13156,2493],{"emptyLinePlaceholder":145},[47,13158,13159,13161,13163,13165,13167,13169,13171,13173],{"class":49,"line":1858},[47,13160,6622],{"class":221},[47,13162,1262],{"class":217},[47,13164,13103],{"class":81},[47,13166,1538],{"class":217},[47,13168,13088],{"class":221},[47,13170,1262],{"class":217},[47,13172,11562],{"class":221},[47,13174,13175],{"class":279}," \u002F\u002F1000\n",[47,13177,13178,13180,13182,13184,13186,13188,13190,13192],{"class":49,"line":1872},[47,13179,6622],{"class":221},[47,13181,1262],{"class":217},[47,13183,13103],{"class":81},[47,13185,1538],{"class":217},[47,13187,13088],{"class":221},[47,13189,1262],{"class":217},[47,13191,11562],{"class":221},[47,13193,13175],{"class":279},[47,13195,13196],{"class":49,"line":1877},[47,13197,2493],{"emptyLinePlaceholder":145},[47,13199,13200,13202,13204,13206],{"class":49,"line":2670},[47,13201,2396],{"class":53},[47,13203,222],{"class":221},[47,13205,2401],{"class":81},[47,13207,2812],{"class":221},[47,13209,13210],{"class":49,"line":2684},[47,13211,2493],{"emptyLinePlaceholder":145},[47,13213,13214,13216,13218],{"class":49,"line":2692},[47,13215,4183],{"class":217},[47,13217,4186],{"class":85},[47,13219,1384],{"class":221},[47,13221,13222],{"class":49,"line":2697},[47,13223,1659],{"class":221},[14,13225,13227],{"id":13226},"_65引用的本质","6.5引用的本质",[19,13229,13230,13231],{},"本质：",[369,13232,13233],{},"引用的本质在c++内部实现是一个指针常量.",[38,13235,13237],{"className":208,"code":13236,"language":210,"meta":43,"style":43},"\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",[26,13238,13239,13244,13260,13274,13278,13287,13299,13304,13309,13320,13333,13337,13353,13370,13374,13382,13390],{"__ignoreMap":43},[47,13240,13241],{"class":49,"line":50},[47,13242,13243],{"class":279},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[47,13245,13246,13248,13250,13252,13254,13257],{"class":49,"line":92},[47,13247,5457],{"class":217},[47,13249,11478],{"class":53},[47,13251,222],{"class":221},[47,13253,12659],{"class":217},[47,13255,13256],{"class":5309}," ref",[47,13258,13259],{"class":221},"){\n",[47,13261,13262,13265,13267,13269,13271],{"class":49,"line":1273},[47,13263,13264],{"class":221},"    ref ",[47,13266,267],{"class":217},[47,13268,5847],{"class":85},[47,13270,276],{"class":221},[47,13272,13273],{"class":279}," \u002F\u002F ref是引用，转换为*ref = 100\n",[47,13275,13276],{"class":49,"line":1288},[47,13277,1659],{"class":221},[47,13279,13280,13282,13284],{"class":49,"line":1294},[47,13281,225],{"class":217},[47,13283,2066],{"class":53},[47,13285,13286],{"class":221},"(){\n",[47,13288,13289,13291,13293,13295,13297],{"class":49,"line":1308},[47,13290,2078],{"class":217},[47,13292,10962],{"class":221},[47,13294,267],{"class":217},[47,13296,2131],{"class":85},[47,13298,1384],{"class":221},[47,13300,13301],{"class":49,"line":1314},[47,13302,13303],{"class":221},"    \n",[47,13305,13306],{"class":49,"line":1405},[47,13307,13308],{"class":279},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[47,13310,13311,13313,13315,13317],{"class":49,"line":1411},[47,13312,13024],{"class":217},[47,13314,13027],{"class":221},[47,13316,267],{"class":217},[47,13318,13319],{"class":221}," a; \n",[47,13321,13322,13324,13326,13328,13330],{"class":49,"line":1423},[47,13323,13264],{"class":221},[47,13325,267],{"class":217},[47,13327,9043],{"class":85},[47,13329,276],{"class":221},[47,13331,13332],{"class":279}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[47,13334,13335],{"class":49,"line":1706},[47,13336,13303],{"class":221},[47,13338,13339,13341,13343,13345,13347,13349,13351],{"class":49,"line":1711},[47,13340,6622],{"class":221},[47,13342,1262],{"class":217},[47,13344,12763],{"class":81},[47,13346,1538],{"class":217},[47,13348,10962],{"class":221},[47,13350,1262],{"class":217},[47,13352,8933],{"class":221},[47,13354,13355,13357,13359,13362,13364,13366,13368],{"class":49,"line":1717},[47,13356,6622],{"class":221},[47,13358,1262],{"class":217},[47,13360,13361],{"class":81}," \"ref:\"",[47,13363,1538],{"class":217},[47,13365,13027],{"class":221},[47,13367,1262],{"class":217},[47,13369,8933],{"class":221},[47,13371,13372],{"class":49,"line":1722},[47,13373,13303],{"class":221},[47,13375,13376,13379],{"class":49,"line":1736},[47,13377,13378],{"class":53},"    func",[47,13380,13381],{"class":221},"(a);\n",[47,13383,13384,13386,13388],{"class":49,"line":1741},[47,13385,4183],{"class":217},[47,13387,4186],{"class":85},[47,13389,1384],{"class":221},[47,13391,13392],{"class":49,"line":1747},[47,13393,1659],{"class":221},[19,13395,11425],{},[171,13397,13398,13401],{},[109,13399,13400],{},"引用的本质，就是一个指针常量",[109,13402,13403],{},"引用一旦初始化，就不可以发生改变",[14,13405,13407],{"id":13406},"_66常量引用","6.6常量引用",[19,13409,13410],{},"作用：常量引用主要用来修饰形参",[19,13412,13413,13414,13417],{},"在函数形参列表中，可以加",[369,13415,13416],{},"const修饰形参","，防止形参改变实参",[38,13419,13421],{"className":208,"code":13420,"language":210,"meta":43,"style":43},"\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",[26,13422,13423,13428,13433,13452,13457,13470,13474,13478,13486,13490,13495,13500,13514,13518,13526,13538,13542,13547,13559,13566,13570,13580,13584,13592],{"__ignoreMap":43},[47,13424,13425],{"class":49,"line":50},[47,13426,13427],{"class":279},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[47,13429,13430],{"class":49,"line":92},[47,13431,13432],{"class":279},"\u002F\u002F加上const就不能修改实参的\n",[47,13434,13435,13437,13440,13442,13444,13447,13450],{"class":49,"line":1273},[47,13436,5457],{"class":217},[47,13438,13439],{"class":53}," showValue",[47,13441,222],{"class":221},[47,13443,6885],{"class":217},[47,13445,13446],{"class":217}," int&",[47,13448,13449],{"class":5309}," v",[47,13451,12535],{"class":221},[47,13453,13454],{"class":49,"line":1288},[47,13455,13456],{"class":279},"    \u002F\u002Fv += 100;\n",[47,13458,13459,13461,13463,13466,13468],{"class":49,"line":1294},[47,13460,6622],{"class":221},[47,13462,1262],{"class":217},[47,13464,13465],{"class":221}," v ",[47,13467,1262],{"class":217},[47,13469,8933],{"class":221},[47,13471,13472],{"class":49,"line":1308},[47,13473,1659],{"class":221},[47,13475,13476],{"class":49,"line":1314},[47,13477,2493],{"emptyLinePlaceholder":145},[47,13479,13480,13482,13484],{"class":49,"line":1405},[47,13481,225],{"class":217},[47,13483,2066],{"class":53},[47,13485,10946],{"class":221},[47,13487,13488],{"class":49,"line":1411},[47,13489,2493],{"emptyLinePlaceholder":145},[47,13491,13492],{"class":49,"line":1423},[47,13493,13494],{"class":279},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[47,13496,13497],{"class":49,"line":1706},[47,13498,13499],{"class":279},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[47,13501,13502,13504,13506,13508,13510,13512],{"class":49,"line":1711},[47,13503,11314],{"class":217},[47,13505,13446],{"class":217},[47,13507,13027],{"class":221},[47,13509,267],{"class":217},[47,13511,2131],{"class":85},[47,13513,1384],{"class":221},[47,13515,13516],{"class":49,"line":1717},[47,13517,2493],{"emptyLinePlaceholder":145},[47,13519,13520,13523],{"class":49,"line":1722},[47,13521,13522],{"class":279},"    \u002F\u002Fref = 100;",[47,13524,13525],{"class":279},"  \u002F\u002F加入const后不可以修改变量\n",[47,13527,13528,13530,13532,13534,13536],{"class":49,"line":1736},[47,13529,6622],{"class":221},[47,13531,1262],{"class":217},[47,13533,13027],{"class":221},[47,13535,1262],{"class":217},[47,13537,8933],{"class":221},[47,13539,13540],{"class":49,"line":1741},[47,13541,2493],{"emptyLinePlaceholder":145},[47,13543,13544],{"class":49,"line":1747},[47,13545,13546],{"class":279},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[47,13548,13549,13551,13553,13555,13557],{"class":49,"line":1768},[47,13550,2078],{"class":217},[47,13552,10962],{"class":221},[47,13554,267],{"class":217},[47,13556,2131],{"class":85},[47,13558,1384],{"class":221},[47,13560,13561,13564],{"class":49,"line":1773},[47,13562,13563],{"class":53},"    showValue",[47,13565,13381],{"class":221},[47,13567,13568],{"class":49,"line":1787},[47,13569,2493],{"emptyLinePlaceholder":145},[47,13571,13572,13574,13576,13578],{"class":49,"line":1792},[47,13573,2396],{"class":53},[47,13575,222],{"class":221},[47,13577,2401],{"class":81},[47,13579,2812],{"class":221},[47,13581,13582],{"class":49,"line":1821},[47,13583,2493],{"emptyLinePlaceholder":145},[47,13585,13586,13588,13590],{"class":49,"line":1826},[47,13587,4183],{"class":217},[47,13589,4186],{"class":85},[47,13591,1384],{"class":221},[47,13593,13594],{"class":49,"line":1843},[47,13595,1659],{"class":221},[134,13597,13598],{},"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":43,"searchDepth":92,"depth":92,"links":13600},[13601,13602,13603,13604,13605,13606],{"id":12133,"depth":92,"text":12134},{"id":12312,"depth":92,"text":12313},{"id":12495,"depth":92,"text":12496},{"id":12899,"depth":92,"text":12900},{"id":13226,"depth":92,"text":13227},{"id":13406,"depth":92,"text":13407},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12125,"description":43},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13613,"title":13614,"body":13615,"description":43,"extension":143,"meta":14696,"navigation":145,"path":14697,"seo":14698,"stem":14699,"__hash__":14700},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13616,"toc":14688},[13617,13620,13624,13627,13632,13864,13866,13877,13881,13884,13892,13996,13999,14003,14006,14010,14013,14018,14040,14046,14373,14376,14380,14388,14685],[10,13618,13614],{"id":13619},"_7函数高级部分",[14,13621,13623],{"id":13622},"_71函数默认参数","7.1函数默认参数",[19,13625,13626],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,13628,5274,13629],{},[26,13630,13631],{}," 返回值类型  函数名 （参数= 默认值）{}",[38,13633,13635],{"className":208,"code":13634,"language":210,"meta":43,"style":43},"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",[26,13636,13637,13672,13687,13691,13695,13700,13705,13734,13754,13764,13768,13772,13780,13784,13812,13834,13838,13848,13852,13860],{"__ignoreMap":43},[47,13638,13639,13641,13643,13645,13647,13649,13651,13653,13655,13658,13660,13662,13664,13666,13668,13670],{"class":49,"line":50},[47,13640,225],{"class":217},[47,13642,11478],{"class":53},[47,13644,222],{"class":221},[47,13646,225],{"class":217},[47,13648,1492],{"class":5309},[47,13650,12528],{"class":221},[47,13652,225],{"class":217},[47,13654,2926],{"class":5309},[47,13656,13657],{"class":217}," =",[47,13659,2131],{"class":85},[47,13661,12528],{"class":221},[47,13663,225],{"class":217},[47,13665,2942],{"class":5309},[47,13667,13657],{"class":217},[47,13669,2131],{"class":85},[47,13671,12535],{"class":221},[47,13673,13674,13676,13678,13680,13682,13684],{"class":49,"line":92},[47,13675,4183],{"class":217},[47,13677,10962],{"class":221},[47,13679,700],{"class":217},[47,13681,10975],{"class":221},[47,13683,700],{"class":217},[47,13685,13686],{"class":221}," c;\n",[47,13688,13689],{"class":49,"line":1273},[47,13690,1659],{"class":221},[47,13692,13693],{"class":49,"line":1288},[47,13694,2493],{"emptyLinePlaceholder":145},[47,13696,13697],{"class":49,"line":1294},[47,13698,13699],{"class":279},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[47,13701,13702],{"class":49,"line":1308},[47,13703,13704],{"class":279},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[47,13706,13707,13709,13712,13714,13716,13718,13720,13722,13724,13726,13728,13730,13732],{"class":49,"line":1314},[47,13708,225],{"class":217},[47,13710,13711],{"class":53}," func2",[47,13713,222],{"class":221},[47,13715,225],{"class":217},[47,13717,1492],{"class":5309},[47,13719,13657],{"class":217},[47,13721,2131],{"class":85},[47,13723,12528],{"class":221},[47,13725,225],{"class":217},[47,13727,2926],{"class":5309},[47,13729,13657],{"class":217},[47,13731,2131],{"class":85},[47,13733,2812],{"class":221},[47,13735,13736,13738,13740,13742,13744,13746,13748,13750,13752],{"class":49,"line":1405},[47,13737,225],{"class":217},[47,13739,13711],{"class":53},[47,13741,222],{"class":221},[47,13743,225],{"class":217},[47,13745,1492],{"class":5309},[47,13747,12528],{"class":221},[47,13749,225],{"class":217},[47,13751,2926],{"class":5309},[47,13753,12535],{"class":221},[47,13755,13756,13758,13760,13762],{"class":49,"line":1411},[47,13757,4183],{"class":217},[47,13759,10962],{"class":221},[47,13761,700],{"class":217},[47,13763,12556],{"class":221},[47,13765,13766],{"class":49,"line":1423},[47,13767,1659],{"class":221},[47,13769,13770],{"class":49,"line":1706},[47,13771,2493],{"emptyLinePlaceholder":145},[47,13773,13774,13776,13778],{"class":49,"line":1711},[47,13775,225],{"class":217},[47,13777,2066],{"class":53},[47,13779,10946],{"class":221},[47,13781,13782],{"class":49,"line":1717},[47,13783,2493],{"emptyLinePlaceholder":145},[47,13785,13786,13788,13790,13793,13795,13797,13799,13801,13803,13805,13808,13810],{"class":49,"line":1722},[47,13787,6622],{"class":221},[47,13789,1262],{"class":217},[47,13791,13792],{"class":81}," \"ret = \"",[47,13794,1538],{"class":217},[47,13796,11478],{"class":53},[47,13798,222],{"class":221},[47,13800,919],{"class":85},[47,13802,12528],{"class":221},[47,13804,919],{"class":85},[47,13806,13807],{"class":221},") ",[47,13809,1262],{"class":217},[47,13811,8933],{"class":221},[47,13813,13814,13816,13818,13820,13822,13824,13826,13828,13830,13832],{"class":49,"line":1736},[47,13815,6622],{"class":221},[47,13817,1262],{"class":217},[47,13819,13792],{"class":81},[47,13821,1538],{"class":217},[47,13823,11478],{"class":53},[47,13825,222],{"class":221},[47,13827,530],{"class":85},[47,13829,13807],{"class":221},[47,13831,1262],{"class":217},[47,13833,8933],{"class":221},[47,13835,13836],{"class":49,"line":1741},[47,13837,2493],{"emptyLinePlaceholder":145},[47,13839,13840,13842,13844,13846],{"class":49,"line":1747},[47,13841,2396],{"class":53},[47,13843,222],{"class":221},[47,13845,2401],{"class":81},[47,13847,2812],{"class":221},[47,13849,13850],{"class":49,"line":1768},[47,13851,2493],{"emptyLinePlaceholder":145},[47,13853,13854,13856,13858],{"class":49,"line":1773},[47,13855,4183],{"class":217},[47,13857,4186],{"class":85},[47,13859,1384],{"class":221},[47,13861,13862],{"class":49,"line":1787},[47,13863,1659],{"class":221},[19,13865,11425],{},[171,13867,13868,13871,13874],{},[109,13869,13870],{},"我传就用我；没传就用你",[109,13872,13873],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[109,13875,13876],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,13878,13880],{"id":13879},"_72函数的占位参数","7.2函数的占位参数",[19,13882,13883],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,13885,13886,13888,13889],{},[369,13887,5274],{}," ",[26,13890,13891],{},"返回值类型 函数名 (数据类型){}",[38,13893,13895],{"className":208,"code":13894,"language":210,"meta":43,"style":43},"\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",[26,13896,13897,13902,13920,13933,13937,13945,13949,13966,13970,13980,13984,13992],{"__ignoreMap":43},[47,13898,13899],{"class":49,"line":50},[47,13900,13901],{"class":279},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[47,13903,13904,13906,13908,13910,13912,13914,13916,13918],{"class":49,"line":92},[47,13905,5457],{"class":217},[47,13907,11478],{"class":53},[47,13909,222],{"class":221},[47,13911,225],{"class":217},[47,13913,1492],{"class":5309},[47,13915,12528],{"class":221},[47,13917,225],{"class":217},[47,13919,12535],{"class":221},[47,13921,13922,13924,13926,13929,13931],{"class":49,"line":1273},[47,13923,6622],{"class":221},[47,13925,1262],{"class":217},[47,13927,13928],{"class":81}," \"this is func\"",[47,13930,1538],{"class":217},[47,13932,8933],{"class":221},[47,13934,13935],{"class":49,"line":1288},[47,13936,1659],{"class":221},[47,13938,13939,13941,13943],{"class":49,"line":1294},[47,13940,225],{"class":217},[47,13942,2066],{"class":53},[47,13944,10946],{"class":221},[47,13946,13947],{"class":49,"line":1308},[47,13948,2493],{"emptyLinePlaceholder":145},[47,13950,13951,13953,13955,13957,13959,13961,13963],{"class":49,"line":1314},[47,13952,13378],{"class":53},[47,13954,222],{"class":221},[47,13956,665],{"class":85},[47,13958,597],{"class":221},[47,13960,665],{"class":85},[47,13962,6059],{"class":221},[47,13964,13965],{"class":279}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[47,13967,13968],{"class":49,"line":1405},[47,13969,2493],{"emptyLinePlaceholder":145},[47,13971,13972,13974,13976,13978],{"class":49,"line":1411},[47,13973,2396],{"class":53},[47,13975,222],{"class":221},[47,13977,2401],{"class":81},[47,13979,2812],{"class":221},[47,13981,13982],{"class":49,"line":1423},[47,13983,2493],{"emptyLinePlaceholder":145},[47,13985,13986,13988,13990],{"class":49,"line":1706},[47,13987,4183],{"class":217},[47,13989,4186],{"class":85},[47,13991,1384],{"class":221},[47,13993,13994],{"class":49,"line":1711},[47,13995,1659],{"class":221},[19,13997,13998],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,14000,14002],{"id":14001},"_73函数重载","7.3函数重载",[19,14004,14005],{},"意思是函数名是可以相同的",[187,14007,14009],{"id":14008},"_731基本语法","7.3.1基本语法",[19,14011,14012],{},"作用：函数名可以相同，提高复用性",[19,14014,14015],{},[369,14016,14017],{},"函数重载满足条件：",[106,14019,14020,14023,14026],{},[109,14021,14022],{},"同一个作用域下",[109,14024,14025],{},"函数名称相同",[109,14027,14028,14029,14032,14033,14036,14037],{},"函数参数",[369,14030,14031],{},"类型不同","  或者 ",[369,14034,14035],{},"个数不同"," 或者 ",[369,14038,14039],{},"顺序不同",[19,14041,14042,14045],{},[369,14043,14044],{},"注意:","  函数的返回值不可以作为函数重载的条件",[38,14047,14049],{"className":10034,"code":14048,"language":10036,"meta":43,"style":43},"\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",[26,14050,14051,14056,14064,14068,14081,14085,14099,14103,14116,14120,14135,14139,14152,14156,14177,14181,14194,14198,14218,14222,14235,14239,14243,14248,14253,14258,14263,14268,14272,14276,14284,14288,14294,14304,14314,14328,14343,14347,14357,14361,14369],{"__ignoreMap":43},[47,14052,14053],{"class":49,"line":50},[47,14054,14055],{"class":279},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[47,14057,14058,14060,14062],{"class":49,"line":92},[47,14059,5457],{"class":217},[47,14061,11478],{"class":53},[47,14063,2069],{"class":221},[47,14065,14066],{"class":49,"line":1273},[47,14067,1640],{"class":221},[47,14069,14070,14072,14074,14077,14079],{"class":49,"line":1288},[47,14071,6622],{"class":221},[47,14073,1262],{"class":217},[47,14075,14076],{"class":81}," \"func 的调用！\"",[47,14078,1538],{"class":217},[47,14080,8933],{"class":221},[47,14082,14083],{"class":49,"line":1294},[47,14084,1659],{"class":221},[47,14086,14087,14089,14091,14093,14095,14097],{"class":49,"line":1308},[47,14088,5457],{"class":217},[47,14090,11478],{"class":53},[47,14092,222],{"class":221},[47,14094,225],{"class":217},[47,14096,1492],{"class":5309},[47,14098,228],{"class":221},[47,14100,14101],{"class":49,"line":1314},[47,14102,1640],{"class":221},[47,14104,14105,14107,14109,14112,14114],{"class":49,"line":1405},[47,14106,6622],{"class":221},[47,14108,1262],{"class":217},[47,14110,14111],{"class":81}," \"func (int a) 的调用！\"",[47,14113,1538],{"class":217},[47,14115,8933],{"class":221},[47,14117,14118],{"class":49,"line":1411},[47,14119,1659],{"class":221},[47,14121,14122,14124,14126,14128,14131,14133],{"class":49,"line":1423},[47,14123,5457],{"class":217},[47,14125,11478],{"class":53},[47,14127,222],{"class":221},[47,14129,14130],{"class":217},"double",[47,14132,1492],{"class":5309},[47,14134,228],{"class":221},[47,14136,14137],{"class":49,"line":1706},[47,14138,1640],{"class":221},[47,14140,14141,14143,14145,14148,14150],{"class":49,"line":1711},[47,14142,6622],{"class":221},[47,14144,1262],{"class":217},[47,14146,14147],{"class":81}," \"func (double a)的调用！\"",[47,14149,1538],{"class":217},[47,14151,8933],{"class":221},[47,14153,14154],{"class":49,"line":1717},[47,14155,1659],{"class":221},[47,14157,14158,14160,14162,14164,14166,14168,14171,14173,14175],{"class":49,"line":1722},[47,14159,5457],{"class":217},[47,14161,11478],{"class":53},[47,14163,222],{"class":221},[47,14165,225],{"class":217},[47,14167,1492],{"class":5309},[47,14169,14170],{"class":221}," ,",[47,14172,14130],{"class":217},[47,14174,2926],{"class":5309},[47,14176,228],{"class":221},[47,14178,14179],{"class":49,"line":1736},[47,14180,1640],{"class":221},[47,14182,14183,14185,14187,14190,14192],{"class":49,"line":1741},[47,14184,6622],{"class":221},[47,14186,1262],{"class":217},[47,14188,14189],{"class":81}," \"func (int a ,double b) 的调用！\"",[47,14191,1538],{"class":217},[47,14193,8933],{"class":221},[47,14195,14196],{"class":49,"line":1747},[47,14197,1659],{"class":221},[47,14199,14200,14202,14204,14206,14208,14210,14212,14214,14216],{"class":49,"line":1768},[47,14201,5457],{"class":217},[47,14203,11478],{"class":53},[47,14205,222],{"class":221},[47,14207,14130],{"class":217},[47,14209,1492],{"class":5309},[47,14211,14170],{"class":221},[47,14213,225],{"class":217},[47,14215,2926],{"class":5309},[47,14217,228],{"class":221},[47,14219,14220],{"class":49,"line":1773},[47,14221,1640],{"class":221},[47,14223,14224,14226,14228,14231,14233],{"class":49,"line":1787},[47,14225,6622],{"class":221},[47,14227,1262],{"class":217},[47,14229,14230],{"class":81}," \"func (double a ,int b)的调用！\"",[47,14232,1538],{"class":217},[47,14234,8933],{"class":221},[47,14236,14237],{"class":49,"line":1792},[47,14238,1659],{"class":221},[47,14240,14241],{"class":49,"line":1821},[47,14242,2493],{"emptyLinePlaceholder":145},[47,14244,14245],{"class":49,"line":1826},[47,14246,14247],{"class":279},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[47,14249,14250],{"class":49,"line":1843},[47,14251,14252],{"class":279},"\u002F\u002Fint func(double a, int b)\n",[47,14254,14255],{"class":49,"line":1848},[47,14256,14257],{"class":279},"\u002F\u002F{\n",[47,14259,14260],{"class":49,"line":1853},[47,14261,14262],{"class":279},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[47,14264,14265],{"class":49,"line":1858},[47,14266,14267],{"class":279},"\u002F\u002F}\n",[47,14269,14270],{"class":49,"line":1872},[47,14271,2493],{"emptyLinePlaceholder":145},[47,14273,14274],{"class":49,"line":1877},[47,14275,2493],{"emptyLinePlaceholder":145},[47,14277,14278,14280,14282],{"class":49,"line":2670},[47,14279,225],{"class":217},[47,14281,2066],{"class":53},[47,14283,10946],{"class":221},[47,14285,14286],{"class":49,"line":2684},[47,14287,2493],{"emptyLinePlaceholder":145},[47,14289,14290,14292],{"class":49,"line":2692},[47,14291,13378],{"class":53},[47,14293,5729],{"class":221},[47,14295,14296,14298,14300,14302],{"class":49,"line":2697},[47,14297,13378],{"class":53},[47,14299,222],{"class":221},[47,14301,665],{"class":85},[47,14303,2812],{"class":221},[47,14305,14306,14308,14310,14312],{"class":49,"line":2703},[47,14307,13378],{"class":53},[47,14309,222],{"class":221},[47,14311,270],{"class":85},[47,14313,2812],{"class":221},[47,14315,14316,14318,14320,14322,14324,14326],{"class":49,"line":2709},[47,14317,13378],{"class":53},[47,14319,222],{"class":221},[47,14321,665],{"class":85},[47,14323,597],{"class":221},[47,14325,270],{"class":85},[47,14327,2812],{"class":221},[47,14329,14330,14332,14334,14336,14339,14341],{"class":49,"line":2714},[47,14331,13378],{"class":53},[47,14333,222],{"class":221},[47,14335,270],{"class":85},[47,14337,14338],{"class":221}," , ",[47,14340,665],{"class":85},[47,14342,2812],{"class":221},[47,14344,14345],{"class":49,"line":8041},[47,14346,13303],{"class":221},[47,14348,14349,14351,14353,14355],{"class":49,"line":8065},[47,14350,2396],{"class":53},[47,14352,222],{"class":221},[47,14354,2401],{"class":81},[47,14356,2812],{"class":221},[47,14358,14359],{"class":49,"line":8070},[47,14360,2493],{"emptyLinePlaceholder":145},[47,14362,14363,14365,14367],{"class":49,"line":8076},[47,14364,4183],{"class":217},[47,14366,4186],{"class":85},[47,14368,1384],{"class":221},[47,14370,14371],{"class":49,"line":8103},[47,14372,1659],{"class":221},[19,14374,14375],{},"重点：函数返回值不可以作为函数重载条件！",[187,14377,14379],{"id":14378},"_732注意事项","7.3.2注意事项",[106,14381,14382,14385],{},[109,14383,14384],{},"引用作为重载条件!!!",[109,14386,14387],{},"函数重载碰到函数默认参数",[38,14389,14391],{"className":208,"code":14390,"language":210,"meta":43,"style":43},"\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",[26,14392,14393,14398,14403,14407,14423,14427,14440,14444,14448,14466,14470,14483,14487,14491,14495,14500,14504,14528,14532,14545,14549,14553,14567,14571,14584,14588,14592,14600,14604,14616,14626,14639,14643,14647,14655,14659,14669,14673,14681],{"__ignoreMap":43},[47,14394,14395],{"class":49,"line":50},[47,14396,14397],{"class":279},"\u002F\u002F函数重载注意事项\n",[47,14399,14400],{"class":49,"line":92},[47,14401,14402],{"class":279},"\u002F\u002F1、引用作为重载条件\n",[47,14404,14405],{"class":49,"line":1273},[47,14406,2493],{"emptyLinePlaceholder":145},[47,14408,14409,14411,14413,14415,14417,14419,14421],{"class":49,"line":1288},[47,14410,5457],{"class":217},[47,14412,11478],{"class":53},[47,14414,222],{"class":221},[47,14416,225],{"class":217},[47,14418,10677],{"class":217},[47,14420,457],{"class":5309},[47,14422,228],{"class":221},[47,14424,14425],{"class":49,"line":1294},[47,14426,1640],{"class":221},[47,14428,14429,14431,14433,14436,14438],{"class":49,"line":1308},[47,14430,6622],{"class":221},[47,14432,1262],{"class":217},[47,14434,14435],{"class":81}," \"func (int &a) 调用 \"",[47,14437,1538],{"class":217},[47,14439,8933],{"class":221},[47,14441,14442],{"class":49,"line":1314},[47,14443,1659],{"class":221},[47,14445,14446],{"class":49,"line":1405},[47,14447,2493],{"emptyLinePlaceholder":145},[47,14449,14450,14452,14454,14456,14458,14460,14462,14464],{"class":49,"line":1411},[47,14451,5457],{"class":217},[47,14453,11478],{"class":53},[47,14455,222],{"class":221},[47,14457,6885],{"class":217},[47,14459,2475],{"class":217},[47,14461,10677],{"class":217},[47,14463,457],{"class":5309},[47,14465,228],{"class":221},[47,14467,14468],{"class":49,"line":1423},[47,14469,1640],{"class":221},[47,14471,14472,14474,14476,14479,14481],{"class":49,"line":1706},[47,14473,6622],{"class":221},[47,14475,1262],{"class":217},[47,14477,14478],{"class":81}," \"func (const int &a) 调用 \"",[47,14480,1538],{"class":217},[47,14482,8933],{"class":221},[47,14484,14485],{"class":49,"line":1711},[47,14486,1659],{"class":221},[47,14488,14489],{"class":49,"line":1717},[47,14490,2493],{"emptyLinePlaceholder":145},[47,14492,14493],{"class":49,"line":1722},[47,14494,2493],{"emptyLinePlaceholder":145},[47,14496,14497],{"class":49,"line":1736},[47,14498,14499],{"class":279},"\u002F\u002F2、函数重载碰到函数默认参数\n",[47,14501,14502],{"class":49,"line":1741},[47,14503,2493],{"emptyLinePlaceholder":145},[47,14505,14506,14508,14510,14512,14514,14516,14518,14520,14522,14524,14526],{"class":49,"line":1747},[47,14507,5457],{"class":217},[47,14509,13711],{"class":53},[47,14511,222],{"class":221},[47,14513,225],{"class":217},[47,14515,1492],{"class":5309},[47,14517,12528],{"class":221},[47,14519,225],{"class":217},[47,14521,2926],{"class":5309},[47,14523,13657],{"class":217},[47,14525,2131],{"class":85},[47,14527,228],{"class":221},[47,14529,14530],{"class":49,"line":1768},[47,14531,1640],{"class":221},[47,14533,14534,14536,14538,14541,14543],{"class":49,"line":1773},[47,14535,6622],{"class":221},[47,14537,1262],{"class":217},[47,14539,14540],{"class":81}," \"func2(int a, int b = 10) 调用\"",[47,14542,1538],{"class":217},[47,14544,8933],{"class":221},[47,14546,14547],{"class":49,"line":1787},[47,14548,1659],{"class":221},[47,14550,14551],{"class":49,"line":1792},[47,14552,2493],{"emptyLinePlaceholder":145},[47,14554,14555,14557,14559,14561,14563,14565],{"class":49,"line":1821},[47,14556,5457],{"class":217},[47,14558,13711],{"class":53},[47,14560,222],{"class":221},[47,14562,225],{"class":217},[47,14564,1492],{"class":5309},[47,14566,228],{"class":221},[47,14568,14569],{"class":49,"line":1826},[47,14570,1640],{"class":221},[47,14572,14573,14575,14577,14580,14582],{"class":49,"line":1843},[47,14574,6622],{"class":221},[47,14576,1262],{"class":217},[47,14578,14579],{"class":81}," \"func2(int a) 调用\"",[47,14581,1538],{"class":217},[47,14583,8933],{"class":221},[47,14585,14586],{"class":49,"line":1848},[47,14587,1659],{"class":221},[47,14589,14590],{"class":49,"line":1853},[47,14591,2493],{"emptyLinePlaceholder":145},[47,14593,14594,14596,14598],{"class":49,"line":1858},[47,14595,225],{"class":217},[47,14597,2066],{"class":53},[47,14599,10946],{"class":221},[47,14601,14602],{"class":49,"line":1872},[47,14603,13303],{"class":221},[47,14605,14606,14608,14610,14612,14614],{"class":49,"line":1877},[47,14607,2078],{"class":217},[47,14609,10962],{"class":221},[47,14611,267],{"class":217},[47,14613,2131],{"class":85},[47,14615,1384],{"class":221},[47,14617,14618,14620,14623],{"class":49,"line":2670},[47,14619,13378],{"class":53},[47,14621,14622],{"class":221},"(a);",[47,14624,14625],{"class":279}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[47,14627,14628,14630,14632,14634,14636],{"class":49,"line":2684},[47,14629,13378],{"class":53},[47,14631,222],{"class":221},[47,14633,665],{"class":85},[47,14635,6059],{"class":221},[47,14637,14638],{"class":279},"\u002F\u002F调用有const   10是个常量\n",[47,14640,14641],{"class":49,"line":2692},[47,14642,2493],{"emptyLinePlaceholder":145},[47,14644,14645],{"class":49,"line":2697},[47,14646,2493],{"emptyLinePlaceholder":145},[47,14648,14649,14652],{"class":49,"line":2703},[47,14650,14651],{"class":279},"    \u002F\u002Ffunc2(10);",[47,14653,14654],{"class":279}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[47,14656,14657],{"class":49,"line":2709},[47,14658,2493],{"emptyLinePlaceholder":145},[47,14660,14661,14663,14665,14667],{"class":49,"line":2714},[47,14662,2396],{"class":53},[47,14664,222],{"class":221},[47,14666,2401],{"class":81},[47,14668,2812],{"class":221},[47,14670,14671],{"class":49,"line":8041},[47,14672,2493],{"emptyLinePlaceholder":145},[47,14674,14675,14677,14679],{"class":49,"line":8065},[47,14676,4183],{"class":217},[47,14678,4186],{"class":85},[47,14680,1384],{"class":221},[47,14682,14683],{"class":49,"line":8070},[47,14684,1659],{"class":221},[134,14686,14687],{},"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":43,"searchDepth":92,"depth":92,"links":14689},[14690,14691,14692],{"id":13622,"depth":92,"text":13623},{"id":13879,"depth":92,"text":13880},{"id":14001,"depth":92,"text":14002,"children":14693},[14694,14695],{"id":14008,"depth":1273,"text":14009},{"id":14378,"depth":1273,"text":14379},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13614,"description":43},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14702,"title":14703,"body":14704,"description":23458,"extension":143,"meta":23459,"navigation":145,"path":23460,"seo":23461,"stem":23462,"__hash__":23463},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14705,"toc":23439},[14706,14709,14715,14722,14727,14730,14733,14736,14740,14744,14747,14750,14758,14763,14766,14773,14778,14937,14940,15193,15196,15199,15202,15207,15210,15213,15224,15229,15465,15469,15479,15482,15490,15637,15641,15644,15647,15651,16096,16100,16108,16116,17028,17035,17040,17668,17671,17674,17677,17796,17799,17886,17889,18015,18018,18112,18115,18468,18472,18480,18484,18491,18494,18497,18508,18514,18519,18531,18539,18559,18567,18584,18770,18773,18777,18780,18783,18786,18789,18792,18795,18798,19258,19264,19268,19271,19282,19869,19872,20361,20365,20368,20371,20374,20377,20380,20388,20784,20788,20791,20794,21241,21244,21247,21252,21255,21260,21263,21267,21270,21272,21278,21281,21587,21597,21638,21642,21645,21647,21680,21683,21990,21992,22007,22010,22033,22042,22048,22051,22055,22058,22061,22066,22077,22082,22090,22095,22225,22228,22231,22406,22411,22623,22627,22630,22744,22749,22988,22992,22996,22999,23002,23007,23112,23115,23118,23121,23125,23236,23239,23242,23247,23299,23302,23305,23310,23356,23359,23364,23432,23434,23437],[10,14707,14703],{"id":14708},"_8类和对象",[19,14710,14711,14712],{},"C++面向对象的三大特性为",[369,14713,14714],{},"封装、继承、多态",[19,14716,14717,14718,14721],{},"C++认为",[369,14719,14720],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,14723,14724],{},[369,14725,14726],{},"例如：",[19,14728,14729],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,14731,14732],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,14734,14735],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,14737,14739],{"id":14738},"_81封装","8.1封装",[187,14741,14743],{"id":14742},"_811封装的意义","8.1.1封装的意义",[19,14745,14746],{},"封装是C++面向对象三大特性之一",[19,14748,14749],{},"封装的意义：",[106,14751,14752,14755],{},[109,14753,14754],{},"将属性和行为作为一个整体，表现生活中的事物",[109,14756,14757],{},"将属性和行为加以权限控制",[19,14759,14760],{},[369,14761,14762],{},"封装意义一：",[19,14764,14765],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,14767,14768,13888,14770],{},[369,14769,5274],{},[26,14771,14772],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[171,14774,14775],{},[109,14776,14777],{},"**示例1：**设计一个圆类，求圆的周长",[38,14779,14781],{"className":208,"code":14780,"language":210,"meta":43,"style":43},"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",[26,14782,14783,14791,14795,14800,14805,14810,14815,14822,14827,14837,14841,14859,14863,14867,14875,14879,14884,14889,14894,14899,14910,14933],{"__ignoreMap":43},[47,14784,14785,14788],{"class":49,"line":50},[47,14786,14787],{"class":217},"class",[47,14789,14790],{"class":53}," Circle\n",[47,14792,14793],{"class":49,"line":92},[47,14794,1640],{"class":221},[47,14796,14797],{"class":49,"line":1273},[47,14798,14799],{"class":279},"    \u002F\u002F访问权限\n",[47,14801,14802],{"class":49,"line":1288},[47,14803,14804],{"class":279},"    \u002F\u002F公共权限\n",[47,14806,14807],{"class":49,"line":1294},[47,14808,14809],{"class":217},"public:\n",[47,14811,14812],{"class":49,"line":1308},[47,14813,14814],{"class":279},"    \u002F\u002F属性\n",[47,14816,14817,14819],{"class":49,"line":1314},[47,14818,2078],{"class":217},[47,14820,14821],{"class":221}," m_r;\n",[47,14823,14824],{"class":49,"line":1405},[47,14825,14826],{"class":279},"    \u002F\u002F行为\n",[47,14828,14829,14832,14835],{"class":49,"line":1411},[47,14830,14831],{"class":217},"    double",[47,14833,14834],{"class":53}," calculateZC",[47,14836,2069],{"class":221},[47,14838,14839],{"class":49,"line":1423},[47,14840,2123],{"class":221},[47,14842,14843,14846,14849,14851,14854,14856],{"class":49,"line":1706},[47,14844,14845],{"class":217},"        return",[47,14847,14848],{"class":85}," 2",[47,14850,674],{"class":217},[47,14852,14853],{"class":221},"PI",[47,14855,674],{"class":217},[47,14857,14858],{"class":221},"m_r;\n",[47,14860,14861],{"class":49,"line":1711},[47,14862,2280],{"class":221},[47,14864,14865],{"class":49,"line":1717},[47,14866,4088],{"class":221},[47,14868,14869,14871,14873],{"class":49,"line":1722},[47,14870,225],{"class":217},[47,14872,2066],{"class":53},[47,14874,2069],{"class":221},[47,14876,14877],{"class":49,"line":1736},[47,14878,1640],{"class":221},[47,14880,14881],{"class":49,"line":1741},[47,14882,14883],{"class":279},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[47,14885,14886],{"class":49,"line":1747},[47,14887,14888],{"class":279},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[47,14890,14891],{"class":49,"line":1768},[47,14892,14893],{"class":221},"    Circle c1;\n",[47,14895,14896],{"class":49,"line":1773},[47,14897,14898],{"class":279},"    \u002F\u002F给圆对象 的属性进行赋值\n",[47,14900,14901,14904,14906,14908],{"class":49,"line":1787},[47,14902,14903],{"class":221},"    c1.m_r",[47,14905,267],{"class":217},[47,14907,665],{"class":85},[47,14909,1384],{"class":221},[47,14911,14912,14914,14916,14919,14921,14924,14927,14929,14931],{"class":49,"line":1792},[47,14913,1645],{"class":221},[47,14915,1262],{"class":217},[47,14917,14918],{"class":81},"\"圆的周长\"",[47,14920,1262],{"class":217},[47,14922,14923],{"class":221},"c1.",[47,14925,14926],{"class":53},"calculateZC",[47,14928,2520],{"class":221},[47,14930,1262],{"class":217},[47,14932,1285],{"class":221},[47,14934,14935],{"class":49,"line":1821},[47,14936,1659],{"class":221},[19,14938,14939],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[38,14941,14943],{"className":208,"code":14942,"language":210,"meta":43,"style":43},"#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",[26,14944,14945,14951,14961,14967,14973,14977,14981,14986,14993,14998,15016,15020,15030,15034,15039,15055,15059,15069,15073,15078,15086,15090,15122,15126,15130,15138,15142,15147,15152,15166,15180,15189],{"__ignoreMap":43},[47,14946,14947,14949],{"class":49,"line":50},[47,14948,2043],{"class":217},[47,14950,2046],{"class":81},[47,14952,14953,14955,14957,14959],{"class":49,"line":92},[47,14954,2051],{"class":217},[47,14956,2054],{"class":217},[47,14958,2057],{"class":53},[47,14960,1384],{"class":221},[47,14962,14963,14965],{"class":49,"line":1273},[47,14964,2043],{"class":217},[47,14966,7842],{"class":81},[47,14968,14969,14971],{"class":49,"line":1288},[47,14970,14787],{"class":217},[47,14972,7855],{"class":53},[47,14974,14975],{"class":49,"line":1294},[47,14976,1640],{"class":221},[47,14978,14979],{"class":49,"line":1308},[47,14980,14809],{"class":217},[47,14982,14983],{"class":49,"line":1314},[47,14984,14985],{"class":221},"    string m_name;\n",[47,14987,14988,14990],{"class":49,"line":1405},[47,14989,2078],{"class":217},[47,14991,14992],{"class":221}," m_id;\n",[47,14994,14995],{"class":49,"line":1411},[47,14996,14997],{"class":279},"    \u002F\u002F赋值姓名\n",[47,14999,15000,15003,15006,15008,15011,15014],{"class":49,"line":1423},[47,15001,15002],{"class":217},"    void",[47,15004,15005],{"class":53}," setName",[47,15007,222],{"class":221},[47,15009,15010],{"class":53},"string",[47,15012,15013],{"class":5309}," name",[47,15015,228],{"class":221},[47,15017,15018],{"class":49,"line":1706},[47,15019,2123],{"class":221},[47,15021,15022,15025,15027],{"class":49,"line":1711},[47,15023,15024],{"class":221},"        m_name",[47,15026,267],{"class":217},[47,15028,15029],{"class":221},"name;\n",[47,15031,15032],{"class":49,"line":1717},[47,15033,2280],{"class":221},[47,15035,15036],{"class":49,"line":1722},[47,15037,15038],{"class":279},"    \u002F\u002F赋值学号\n",[47,15040,15041,15043,15046,15048,15050,15053],{"class":49,"line":1736},[47,15042,15002],{"class":217},[47,15044,15045],{"class":53}," setId",[47,15047,222],{"class":221},[47,15049,225],{"class":217},[47,15051,15052],{"class":5309}," id",[47,15054,228],{"class":221},[47,15056,15057],{"class":49,"line":1741},[47,15058,2123],{"class":221},[47,15060,15061,15064,15066],{"class":49,"line":1747},[47,15062,15063],{"class":221},"        m_id",[47,15065,267],{"class":217},[47,15067,15068],{"class":221},"id;\n",[47,15070,15071],{"class":49,"line":1768},[47,15072,2280],{"class":221},[47,15074,15075],{"class":49,"line":1773},[47,15076,15077],{"class":279},"    \u002F\u002F打印学生信息\n",[47,15079,15080,15082,15084],{"class":49,"line":1787},[47,15081,15002],{"class":217},[47,15083,9708],{"class":53},[47,15085,2069],{"class":221},[47,15087,15088],{"class":49,"line":1792},[47,15089,2123],{"class":221},[47,15091,15092,15094,15096,15099,15101,15104,15106,15108,15110,15113,15115,15118,15120],{"class":49,"line":1821},[47,15093,3544],{"class":221},[47,15095,1262],{"class":217},[47,15097,15098],{"class":81},"\"姓名：\"",[47,15100,1262],{"class":217},[47,15102,15103],{"class":221},"m_name",[47,15105,1262],{"class":217},[47,15107,4452],{"class":81},[47,15109,1262],{"class":217},[47,15111,15112],{"class":81},"\"学号：\"",[47,15114,1262],{"class":217},[47,15116,15117],{"class":221},"m_id",[47,15119,1262],{"class":217},[47,15121,1285],{"class":221},[47,15123,15124],{"class":49,"line":1826},[47,15125,2280],{"class":221},[47,15127,15128],{"class":49,"line":1843},[47,15129,4088],{"class":221},[47,15131,15132,15134,15136],{"class":49,"line":1848},[47,15133,225],{"class":217},[47,15135,2066],{"class":53},[47,15137,2069],{"class":221},[47,15139,15140],{"class":49,"line":1853},[47,15141,1640],{"class":221},[47,15143,15144],{"class":49,"line":1858},[47,15145,15146],{"class":279},"    \u002F\u002F实例化\n",[47,15148,15149],{"class":49,"line":1872},[47,15150,15151],{"class":221},"    Student s1;\n",[47,15153,15154,15157,15160,15162,15164],{"class":49,"line":1877},[47,15155,15156],{"class":221},"    s1.",[47,15158,15159],{"class":53},"setName",[47,15161,222],{"class":221},[47,15163,8009],{"class":81},[47,15165,2812],{"class":221},[47,15167,15168,15170,15173,15175,15178],{"class":49,"line":2670},[47,15169,15156],{"class":221},[47,15171,15172],{"class":53},"setId",[47,15174,222],{"class":221},[47,15176,15177],{"class":85},"123456",[47,15179,2812],{"class":221},[47,15181,15182,15184,15187],{"class":49,"line":2684},[47,15183,15156],{"class":221},[47,15185,15186],{"class":53},"printInfo",[47,15188,5729],{"class":221},[47,15190,15191],{"class":49,"line":2692},[47,15192,1659],{"class":221},[19,15194,15195],{},"类中的属性和行为统称为成员",[19,15197,15198],{},"属性：成员属性(成员变量)",[19,15200,15201],{},"方法：成员函数(成员方法)",[19,15203,15204],{},[369,15205,15206],{},"封装意义二：",[19,15208,15209],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,15211,15212],{},"访问权限有三种：",[171,15214,15215,15218,15221],{},[109,15216,15217],{},"public        公共权限",[109,15219,15220],{},"protected 保护权限",[109,15222,15223],{},"private      私有权限",[19,15225,15226],{},[369,15227,15228],{},"示例：",[38,15230,15232],{"className":10034,"code":15231,"language":10036,"meta":43,"style":43},"\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",[26,15233,15234,15239,15244,15249,15254,15258,15265,15269,15274,15278,15283,15287,15292,15297,15302,15306,15311,15316,15323,15327,15331,15339,15343,15354,15366,15378,15382,15386,15390,15398,15402,15407,15419,15427,15435,15439,15449,15453,15461],{"__ignoreMap":43},[47,15235,15236],{"class":49,"line":50},[47,15237,15238],{"class":279},"\u002F\u002F三种权限\n",[47,15240,15241],{"class":49,"line":92},[47,15242,15243],{"class":279},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[47,15245,15246],{"class":49,"line":1273},[47,15247,15248],{"class":279},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[47,15250,15251],{"class":49,"line":1288},[47,15252,15253],{"class":279},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[47,15255,15256],{"class":49,"line":1294},[47,15257,2493],{"emptyLinePlaceholder":145},[47,15259,15260,15262],{"class":49,"line":1308},[47,15261,14787],{"class":217},[47,15263,15264],{"class":53}," Person\n",[47,15266,15267],{"class":49,"line":1314},[47,15268,1640],{"class":221},[47,15270,15271],{"class":49,"line":1405},[47,15272,15273],{"class":279},"    \u002F\u002F姓名  公共权限\n",[47,15275,15276],{"class":49,"line":1411},[47,15277,14809],{"class":217},[47,15279,15280],{"class":49,"line":1423},[47,15281,15282],{"class":221},"    string m_Name;\n",[47,15284,15285],{"class":49,"line":1706},[47,15286,2493],{"emptyLinePlaceholder":145},[47,15288,15289],{"class":49,"line":1711},[47,15290,15291],{"class":279},"    \u002F\u002F汽车  保护权限\n",[47,15293,15294],{"class":49,"line":1717},[47,15295,15296],{"class":217},"protected:\n",[47,15298,15299],{"class":49,"line":1722},[47,15300,15301],{"class":221},"    string m_Car;\n",[47,15303,15304],{"class":49,"line":1736},[47,15305,2493],{"emptyLinePlaceholder":145},[47,15307,15308],{"class":49,"line":1741},[47,15309,15310],{"class":279},"    \u002F\u002F银行卡密码  私有权限\n",[47,15312,15313],{"class":49,"line":1747},[47,15314,15315],{"class":217},"private:\n",[47,15317,15318,15320],{"class":49,"line":1768},[47,15319,2078],{"class":217},[47,15321,15322],{"class":221}," m_Password;\n",[47,15324,15325],{"class":49,"line":1773},[47,15326,2493],{"emptyLinePlaceholder":145},[47,15328,15329],{"class":49,"line":1787},[47,15330,14809],{"class":217},[47,15332,15333,15335,15337],{"class":49,"line":1792},[47,15334,15002],{"class":217},[47,15336,11478],{"class":53},[47,15338,2069],{"class":221},[47,15340,15341],{"class":49,"line":1821},[47,15342,2123],{"class":221},[47,15344,15345,15348,15350,15352],{"class":49,"line":1826},[47,15346,15347],{"class":221},"        m_Name ",[47,15349,267],{"class":217},[47,15351,9031],{"class":81},[47,15353,1384],{"class":221},[47,15355,15356,15359,15361,15364],{"class":49,"line":1843},[47,15357,15358],{"class":221},"        m_Car ",[47,15360,267],{"class":217},[47,15362,15363],{"class":81}," \"拖拉机\"",[47,15365,1384],{"class":221},[47,15367,15368,15371,15373,15376],{"class":49,"line":1848},[47,15369,15370],{"class":221},"        m_Password ",[47,15372,267],{"class":217},[47,15374,15375],{"class":85}," 123456",[47,15377,1384],{"class":221},[47,15379,15380],{"class":49,"line":1853},[47,15381,2280],{"class":221},[47,15383,15384],{"class":49,"line":1858},[47,15385,4088],{"class":221},[47,15387,15388],{"class":49,"line":1872},[47,15389,2493],{"emptyLinePlaceholder":145},[47,15391,15392,15394,15396],{"class":49,"line":1877},[47,15393,225],{"class":217},[47,15395,2066],{"class":53},[47,15397,10946],{"class":221},[47,15399,15400],{"class":49,"line":2670},[47,15401,2493],{"emptyLinePlaceholder":145},[47,15403,15404],{"class":49,"line":2684},[47,15405,15406],{"class":221},"    Person p;\n",[47,15408,15409,15412,15414,15417],{"class":49,"line":2692},[47,15410,15411],{"class":221},"    p.m_Name ",[47,15413,267],{"class":217},[47,15415,15416],{"class":81}," \"李四\"",[47,15418,1384],{"class":221},[47,15420,15421,15424],{"class":49,"line":2697},[47,15422,15423],{"class":279},"    \u002F\u002Fp.m_Car = \"奔驰\";",[47,15425,15426],{"class":279},"  \u002F\u002F保护权限类外访问不到\n",[47,15428,15429,15432],{"class":49,"line":2703},[47,15430,15431],{"class":279},"    \u002F\u002Fp.m_Password = 123;",[47,15433,15434],{"class":279}," \u002F\u002F私有权限类外访问不到\n",[47,15436,15437],{"class":49,"line":2709},[47,15438,2493],{"emptyLinePlaceholder":145},[47,15440,15441,15443,15445,15447],{"class":49,"line":2714},[47,15442,2396],{"class":53},[47,15444,222],{"class":221},[47,15446,2401],{"class":81},[47,15448,2812],{"class":221},[47,15450,15451],{"class":49,"line":8041},[47,15452,2493],{"emptyLinePlaceholder":145},[47,15454,15455,15457,15459],{"class":49,"line":8065},[47,15456,4183],{"class":217},[47,15458,4186],{"class":85},[47,15460,1384],{"class":221},[47,15462,15463],{"class":49,"line":8070},[47,15464,1659],{"class":221},[187,15466,15468],{"id":15467},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,15470,15471,15472,15475,15476],{},"在C++中 struct和class唯一的",[369,15473,15474],{},"区别","就在于 ",[369,15477,15478],{},"默认的访问权限不同",[19,15480,15481],{},"区别：",[106,15483,15484,15487],{},[109,15485,15486],{},"struct 默认权限为公共",[109,15488,15489],{},"class   默认权限为私有",[38,15491,15493],{"className":10034,"code":15492,"language":10036,"meta":43,"style":43},"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",[26,15494,15495,15502,15506,15516,15520,15524,15531,15535,15545,15549,15553,15561,15565,15570,15584,15588,15593,15607,15611,15621,15625,15633],{"__ignoreMap":43},[47,15496,15497,15499],{"class":49,"line":50},[47,15498,14787],{"class":217},[47,15500,15501],{"class":53}," C1\n",[47,15503,15504],{"class":49,"line":92},[47,15505,1640],{"class":221},[47,15507,15508,15510,15513],{"class":49,"line":1273},[47,15509,2078],{"class":217},[47,15511,15512],{"class":221},"  m_A;",[47,15514,15515],{"class":279}," \u002F\u002F默认是私有权限\n",[47,15517,15518],{"class":49,"line":1288},[47,15519,4088],{"class":221},[47,15521,15522],{"class":49,"line":1294},[47,15523,2493],{"emptyLinePlaceholder":145},[47,15525,15526,15528],{"class":49,"line":1308},[47,15527,7852],{"class":217},[47,15529,15530],{"class":53}," C2\n",[47,15532,15533],{"class":49,"line":1314},[47,15534,1640],{"class":221},[47,15536,15537,15539,15542],{"class":49,"line":1405},[47,15538,2078],{"class":217},[47,15540,15541],{"class":221}," m_A;",[47,15543,15544],{"class":279},"  \u002F\u002F默认是公共权限\n",[47,15546,15547],{"class":49,"line":1411},[47,15548,4088],{"class":221},[47,15550,15551],{"class":49,"line":1423},[47,15552,2493],{"emptyLinePlaceholder":145},[47,15554,15555,15557,15559],{"class":49,"line":1706},[47,15556,225],{"class":217},[47,15558,2066],{"class":53},[47,15560,10946],{"class":221},[47,15562,15563],{"class":49,"line":1711},[47,15564,2493],{"emptyLinePlaceholder":145},[47,15566,15567],{"class":49,"line":1717},[47,15568,15569],{"class":221},"    C1 c1;\n",[47,15571,15572,15575,15577,15579,15581],{"class":49,"line":1722},[47,15573,15574],{"class":221},"    c1.m_A ",[47,15576,267],{"class":217},[47,15578,2131],{"class":85},[47,15580,276],{"class":221},[47,15582,15583],{"class":279}," \u002F\u002F错误，访问权限是私有\n",[47,15585,15586],{"class":49,"line":1736},[47,15587,2493],{"emptyLinePlaceholder":145},[47,15589,15590],{"class":49,"line":1741},[47,15591,15592],{"class":221},"    C2 c2;\n",[47,15594,15595,15598,15600,15602,15604],{"class":49,"line":1747},[47,15596,15597],{"class":221},"    c2.m_A ",[47,15599,267],{"class":217},[47,15601,2131],{"class":85},[47,15603,276],{"class":221},[47,15605,15606],{"class":279}," \u002F\u002F正确，访问权限是公共\n",[47,15608,15609],{"class":49,"line":1768},[47,15610,2493],{"emptyLinePlaceholder":145},[47,15612,15613,15615,15617,15619],{"class":49,"line":1773},[47,15614,2396],{"class":53},[47,15616,222],{"class":221},[47,15618,2401],{"class":81},[47,15620,2812],{"class":221},[47,15622,15623],{"class":49,"line":1787},[47,15624,2493],{"emptyLinePlaceholder":145},[47,15626,15627,15629,15631],{"class":49,"line":1792},[47,15628,4183],{"class":217},[47,15630,4186],{"class":85},[47,15632,1384],{"class":221},[47,15634,15635],{"class":49,"line":1821},[47,15636,1659],{"class":221},[187,15638,15640],{"id":15639},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,15642,15643],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,15645,15646],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,15648,15649],{},[369,15650,15228],{},[38,15652,15654],{"className":10034,"code":15653,"language":10036,"meta":43,"style":43},"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",[26,15655,15656,15666,15670,15674,15679,15693,15702,15706,15716,15720,15727,15731,15735,15739,15744,15753,15760,15764,15769,15785,15808,15821,15828,15832,15841,15845,15849,15854,15870,15880,15884,15888,15892,15900,15904,15914,15918,15926,15930,15934,15942,15946,15950,15955,15968,15991,15995,16000,16013,16035,16039,16044,16058,16066,16070,16080,16084,16092],{"__ignoreMap":43},[47,15657,15658,15660,15663],{"class":49,"line":50},[47,15659,14787],{"class":217},[47,15661,15662],{"class":53}," Person",[47,15664,15665],{"class":221}," {\n",[47,15667,15668],{"class":49,"line":92},[47,15669,14809],{"class":217},[47,15671,15672],{"class":49,"line":1273},[47,15673,2493],{"emptyLinePlaceholder":145},[47,15675,15676],{"class":49,"line":1288},[47,15677,15678],{"class":279},"    \u002F\u002F姓名设置可读可写\n",[47,15680,15681,15683,15685,15687,15689,15691],{"class":49,"line":1294},[47,15682,15002],{"class":217},[47,15684,15005],{"class":53},[47,15686,222],{"class":221},[47,15688,15010],{"class":53},[47,15690,15013],{"class":5309},[47,15692,12535],{"class":221},[47,15694,15695,15697,15699],{"class":49,"line":1308},[47,15696,15347],{"class":221},[47,15698,267],{"class":217},[47,15700,15701],{"class":221}," name;\n",[47,15703,15704],{"class":49,"line":1314},[47,15705,2280],{"class":221},[47,15707,15708,15711,15714],{"class":49,"line":1405},[47,15709,15710],{"class":53},"    string",[47,15712,15713],{"class":53}," getName",[47,15715,2069],{"class":221},[47,15717,15718],{"class":49,"line":1411},[47,15719,2123],{"class":221},[47,15721,15722,15724],{"class":49,"line":1423},[47,15723,14845],{"class":217},[47,15725,15726],{"class":221}," m_Name;\n",[47,15728,15729],{"class":49,"line":1706},[47,15730,2280],{"class":221},[47,15732,15733],{"class":49,"line":1711},[47,15734,2493],{"emptyLinePlaceholder":145},[47,15736,15737],{"class":49,"line":1717},[47,15738,2493],{"emptyLinePlaceholder":145},[47,15740,15741],{"class":49,"line":1722},[47,15742,15743],{"class":279},"    \u002F\u002F获取年龄 \n",[47,15745,15746,15748,15751],{"class":49,"line":1736},[47,15747,2078],{"class":217},[47,15749,15750],{"class":53}," getAge",[47,15752,10946],{"class":221},[47,15754,15755,15757],{"class":49,"line":1741},[47,15756,14845],{"class":217},[47,15758,15759],{"class":221}," m_Age;\n",[47,15761,15762],{"class":49,"line":1747},[47,15763,2280],{"class":221},[47,15765,15766],{"class":49,"line":1768},[47,15767,15768],{"class":279},"    \u002F\u002F设置年龄\n",[47,15770,15771,15773,15776,15778,15780,15783],{"class":49,"line":1773},[47,15772,15002],{"class":217},[47,15774,15775],{"class":53}," setAge",[47,15777,222],{"class":221},[47,15779,225],{"class":217},[47,15781,15782],{"class":5309}," age",[47,15784,12535],{"class":221},[47,15786,15787,15789,15792,15794,15796,15798,15801,15803,15806],{"class":49,"line":1787},[47,15788,2590],{"class":217},[47,15790,15791],{"class":221}," (age ",[47,15793,1129],{"class":217},[47,15795,4186],{"class":85},[47,15797,3348],{"class":217},[47,15799,15800],{"class":221}," age ",[47,15802,1179],{"class":217},[47,15804,15805],{"class":85}," 150",[47,15807,12535],{"class":221},[47,15809,15810,15812,15814,15817,15819],{"class":49,"line":1792},[47,15811,9812],{"class":221},[47,15813,1262],{"class":217},[47,15815,15816],{"class":81}," \"你个老妖精!\"",[47,15818,1538],{"class":217},[47,15820,8933],{"class":221},[47,15822,15823,15826],{"class":49,"line":1821},[47,15824,15825],{"class":217},"            return",[47,15827,1384],{"class":221},[47,15829,15830],{"class":49,"line":1826},[47,15831,2622],{"class":221},[47,15833,15834,15837,15839],{"class":49,"line":1843},[47,15835,15836],{"class":221},"        m_Age ",[47,15838,267],{"class":217},[47,15840,7890],{"class":221},[47,15842,15843],{"class":49,"line":1848},[47,15844,2280],{"class":221},[47,15846,15847],{"class":49,"line":1853},[47,15848,2493],{"emptyLinePlaceholder":145},[47,15850,15851],{"class":49,"line":1858},[47,15852,15853],{"class":279},"    \u002F\u002F情人设置为只写\n",[47,15855,15856,15858,15861,15863,15865,15868],{"class":49,"line":1872},[47,15857,15002],{"class":217},[47,15859,15860],{"class":53}," setLover",[47,15862,222],{"class":221},[47,15864,15010],{"class":53},[47,15866,15867],{"class":5309}," lover",[47,15869,12535],{"class":221},[47,15871,15872,15875,15877],{"class":49,"line":1877},[47,15873,15874],{"class":221},"        m_Lover ",[47,15876,267],{"class":217},[47,15878,15879],{"class":221}," lover;\n",[47,15881,15882],{"class":49,"line":2670},[47,15883,2280],{"class":221},[47,15885,15886],{"class":49,"line":2684},[47,15887,2493],{"emptyLinePlaceholder":145},[47,15889,15890],{"class":49,"line":2692},[47,15891,15315],{"class":217},[47,15893,15894,15897],{"class":49,"line":2697},[47,15895,15896],{"class":221},"    string m_Name;",[47,15898,15899],{"class":279}," \u002F\u002F可读可写  姓名\n",[47,15901,15902],{"class":49,"line":2703},[47,15903,13303],{"class":221},[47,15905,15906,15908,15911],{"class":49,"line":2709},[47,15907,2078],{"class":217},[47,15909,15910],{"class":221}," m_Age;",[47,15912,15913],{"class":279}," \u002F\u002F只读  年龄\n",[47,15915,15916],{"class":49,"line":2714},[47,15917,2493],{"emptyLinePlaceholder":145},[47,15919,15920,15923],{"class":49,"line":8041},[47,15921,15922],{"class":221},"    string m_Lover;",[47,15924,15925],{"class":279}," \u002F\u002F只写  情人\n",[47,15927,15928],{"class":49,"line":8065},[47,15929,4088],{"class":221},[47,15931,15932],{"class":49,"line":8070},[47,15933,2493],{"emptyLinePlaceholder":145},[47,15935,15936,15938,15940],{"class":49,"line":8076},[47,15937,225],{"class":217},[47,15939,2066],{"class":53},[47,15941,10946],{"class":221},[47,15943,15944],{"class":49,"line":8103},[47,15945,2493],{"emptyLinePlaceholder":145},[47,15947,15948],{"class":49,"line":8108},[47,15949,15406],{"class":221},[47,15951,15952],{"class":49,"line":8114},[47,15953,15954],{"class":279},"    \u002F\u002F姓名设置\n",[47,15956,15957,15960,15962,15964,15966],{"class":49,"line":8126},[47,15958,15959],{"class":221},"    p.",[47,15961,15159],{"class":53},[47,15963,222],{"class":221},[47,15965,8009],{"class":81},[47,15967,2812],{"class":221},[47,15969,15970,15972,15974,15977,15979,15982,15985,15987,15989],{"class":49,"line":8138},[47,15971,6622],{"class":221},[47,15973,1262],{"class":217},[47,15975,15976],{"class":81}," \"姓名： \"",[47,15978,1538],{"class":217},[47,15980,15981],{"class":221}," p.",[47,15983,15984],{"class":53},"getName",[47,15986,13143],{"class":221},[47,15988,1262],{"class":217},[47,15990,8933],{"class":221},[47,15992,15993],{"class":49,"line":8150},[47,15994,2493],{"emptyLinePlaceholder":145},[47,15996,15997],{"class":49,"line":9809},[47,15998,15999],{"class":279},"    \u002F\u002F年龄设置\n",[47,16001,16002,16004,16007,16009,16011],{"class":49,"line":9834},[47,16003,15959],{"class":221},[47,16005,16006],{"class":53},"setAge",[47,16008,222],{"class":221},[47,16010,875],{"class":85},[47,16012,2812],{"class":221},[47,16014,16015,16017,16019,16022,16024,16026,16029,16031,16033],{"class":49,"line":9857},[47,16016,6622],{"class":221},[47,16018,1262],{"class":217},[47,16020,16021],{"class":81}," \"年龄： \"",[47,16023,1538],{"class":217},[47,16025,15981],{"class":221},[47,16027,16028],{"class":53},"getAge",[47,16030,13143],{"class":221},[47,16032,1262],{"class":217},[47,16034,8933],{"class":221},[47,16036,16037],{"class":49,"line":9881},[47,16038,2493],{"emptyLinePlaceholder":145},[47,16040,16041],{"class":49,"line":9886},[47,16042,16043],{"class":279},"    \u002F\u002F情人设置\n",[47,16045,16046,16048,16051,16053,16056],{"class":49,"line":9891},[47,16047,15959],{"class":221},[47,16049,16050],{"class":53},"setLover",[47,16052,222],{"class":221},[47,16054,16055],{"class":81},"\"苍井\"",[47,16057,2812],{"class":221},[47,16059,16060,16063],{"class":49,"line":9896},[47,16061,16062],{"class":279},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[47,16064,16065],{"class":279},"  \u002F\u002F只写属性，不可以读取\n",[47,16067,16068],{"class":49,"line":9905},[47,16069,2493],{"emptyLinePlaceholder":145},[47,16071,16072,16074,16076,16078],{"class":49,"line":9910},[47,16073,2396],{"class":53},[47,16075,222],{"class":221},[47,16077,2401],{"class":81},[47,16079,2812],{"class":221},[47,16081,16082],{"class":49,"line":9916},[47,16083,2493],{"emptyLinePlaceholder":145},[47,16085,16086,16088,16090],{"class":49,"line":9937},[47,16087,4183],{"class":217},[47,16089,4186],{"class":85},[47,16091,1384],{"class":221},[47,16093,16094],{"class":49,"line":9943},[47,16095,1659],{"class":221},[187,16097,16099],{"id":16098},"_814封装案例","8.1.4封装案例",[171,16101,16102],{},[109,16103,16104,16107],{},[369,16105,16106],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[106,16109,16110,16113],{},[109,16111,16112],{},"求出立方体的面积和体积",[109,16114,16115],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[38,16117,16119],{"className":208,"code":16118,"language":210,"meta":43,"style":43},"#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",[26,16120,16121,16127,16137,16144,16148,16152,16157,16187,16191,16201,16211,16221,16225,16234,16238,16274,16278,16287,16291,16307,16311,16316,16325,16329,16336,16340,16349,16353,16360,16364,16373,16377,16384,16388,16393,16410,16414,16460,16464,16473,16477,16481,16485,16494,16498,16502,16507,16511,16517,16523,16529,16533,16537,16542,16564,16568,16622,16626,16634,16638,16643,16648,16661,16668,16684,16695,16701,16724,16730,16753,16767,16787,16793,16804,16827,16849,16854,16860,16874,16887,16892,16906,16911,16917,16922,16936,16941,16946,16960,16972,16977,16990,16995,17000,17005,17018,17023],{"__ignoreMap":43},[47,16122,16123,16125],{"class":49,"line":50},[47,16124,2043],{"class":217},[47,16126,2046],{"class":81},[47,16128,16129,16131,16133,16135],{"class":49,"line":92},[47,16130,2051],{"class":217},[47,16132,2054],{"class":217},[47,16134,2057],{"class":53},[47,16136,1384],{"class":221},[47,16138,16139,16141],{"class":49,"line":1273},[47,16140,14787],{"class":217},[47,16142,16143],{"class":53}," Cube\n",[47,16145,16146],{"class":49,"line":1288},[47,16147,1640],{"class":221},[47,16149,16150],{"class":49,"line":1294},[47,16151,14809],{"class":217},[47,16153,16154],{"class":49,"line":1308},[47,16155,16156],{"class":279},"    \u002F\u002F输入长宽高\n",[47,16158,16159,16161,16164,16166,16168,16171,16173,16175,16178,16180,16182,16185],{"class":49,"line":1314},[47,16160,15002],{"class":217},[47,16162,16163],{"class":53}," setLwh",[47,16165,222],{"class":221},[47,16167,225],{"class":217},[47,16169,16170],{"class":5309}," l",[47,16172,597],{"class":221},[47,16174,225],{"class":217},[47,16176,16177],{"class":5309}," w",[47,16179,597],{"class":221},[47,16181,225],{"class":217},[47,16183,16184],{"class":5309}," h",[47,16186,228],{"class":221},[47,16188,16189],{"class":49,"line":1405},[47,16190,2123],{"class":221},[47,16192,16193,16196,16198],{"class":49,"line":1411},[47,16194,16195],{"class":221},"        m_L",[47,16197,267],{"class":217},[47,16199,16200],{"class":221},"l;\n",[47,16202,16203,16206,16208],{"class":49,"line":1423},[47,16204,16205],{"class":221},"        m_W",[47,16207,267],{"class":217},[47,16209,16210],{"class":221},"w;\n",[47,16212,16213,16216,16218],{"class":49,"line":1706},[47,16214,16215],{"class":221},"        m_H",[47,16217,267],{"class":217},[47,16219,16220],{"class":221},"h;\n",[47,16222,16223],{"class":49,"line":1711},[47,16224,2280],{"class":221},[47,16226,16227,16229,16232],{"class":49,"line":1717},[47,16228,2078],{"class":217},[47,16230,16231],{"class":53}," mianji",[47,16233,2069],{"class":221},[47,16235,16236],{"class":49,"line":1722},[47,16237,2123],{"class":221},[47,16239,16240,16242,16244,16246,16249,16251,16254,16256,16259,16261,16264,16266,16269,16271],{"class":49,"line":1736},[47,16241,14845],{"class":217},[47,16243,14848],{"class":85},[47,16245,674],{"class":217},[47,16247,16248],{"class":221},"(m_L",[47,16250,674],{"class":217},[47,16252,16253],{"class":221},"m_W ",[47,16255,700],{"class":217},[47,16257,16258],{"class":221}," m_L",[47,16260,674],{"class":217},[47,16262,16263],{"class":221},"m_H ",[47,16265,700],{"class":217},[47,16267,16268],{"class":221}," m_W",[47,16270,674],{"class":217},[47,16272,16273],{"class":221},"m_H);\n",[47,16275,16276],{"class":49,"line":1741},[47,16277,2280],{"class":221},[47,16279,16280,16282,16285],{"class":49,"line":1747},[47,16281,2078],{"class":217},[47,16283,16284],{"class":53}," tiji",[47,16286,2069],{"class":221},[47,16288,16289],{"class":49,"line":1768},[47,16290,2123],{"class":221},[47,16292,16293,16295,16297,16299,16302,16304],{"class":49,"line":1773},[47,16294,14845],{"class":217},[47,16296,16258],{"class":221},[47,16298,674],{"class":217},[47,16300,16301],{"class":221},"m_W",[47,16303,674],{"class":217},[47,16305,16306],{"class":221},"m_H;\n",[47,16308,16309],{"class":49,"line":1787},[47,16310,2280],{"class":221},[47,16312,16313],{"class":49,"line":1792},[47,16314,16315],{"class":279},"    \u002F\u002F获取长宽高\n",[47,16317,16318,16320,16323],{"class":49,"line":1821},[47,16319,2078],{"class":217},[47,16321,16322],{"class":53}," getLength",[47,16324,2069],{"class":221},[47,16326,16327],{"class":49,"line":1826},[47,16328,2123],{"class":221},[47,16330,16331,16333],{"class":49,"line":1843},[47,16332,14845],{"class":217},[47,16334,16335],{"class":221}," m_L;\n",[47,16337,16338],{"class":49,"line":1848},[47,16339,2280],{"class":221},[47,16341,16342,16344,16347],{"class":49,"line":1853},[47,16343,2078],{"class":217},[47,16345,16346],{"class":53}," getWidth",[47,16348,2069],{"class":221},[47,16350,16351],{"class":49,"line":1858},[47,16352,2123],{"class":221},[47,16354,16355,16357],{"class":49,"line":1872},[47,16356,14845],{"class":217},[47,16358,16359],{"class":221}," m_W;\n",[47,16361,16362],{"class":49,"line":1877},[47,16363,2280],{"class":221},[47,16365,16366,16368,16371],{"class":49,"line":2670},[47,16367,2078],{"class":217},[47,16369,16370],{"class":53}," getHeight",[47,16372,2069],{"class":221},[47,16374,16375],{"class":49,"line":2684},[47,16376,2123],{"class":221},[47,16378,16379,16381],{"class":49,"line":2692},[47,16380,14845],{"class":217},[47,16382,16383],{"class":221}," m_H;\n",[47,16385,16386],{"class":49,"line":2697},[47,16387,2280],{"class":221},[47,16389,16390],{"class":49,"line":2703},[47,16391,16392],{"class":279},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[47,16394,16395,16398,16401,16403,16406,16408],{"class":49,"line":2709},[47,16396,16397],{"class":217},"    bool",[47,16399,16400],{"class":53}," isEqual",[47,16402,222],{"class":221},[47,16404,16405],{"class":53},"Cube",[47,16407,2942],{"class":5309},[47,16409,228],{"class":221},[47,16411,16412],{"class":49,"line":2714},[47,16413,2123],{"class":221},[47,16415,16416,16418,16421,16424,16426,16428,16431,16433,16436,16439,16441,16443,16446,16448,16450,16453,16455,16457],{"class":49,"line":8041},[47,16417,2590],{"class":217},[47,16419,16420],{"class":221}," (c.",[47,16422,16423],{"class":53},"getLength",[47,16425,13143],{"class":221},[47,16427,3042],{"class":217},[47,16429,16430],{"class":221}," m_L ",[47,16432,1809],{"class":217},[47,16434,16435],{"class":221}," c.",[47,16437,16438],{"class":53},"getWidth",[47,16440,13143],{"class":221},[47,16442,3042],{"class":217},[47,16444,16445],{"class":221}," m_W ",[47,16447,1809],{"class":217},[47,16449,16435],{"class":221},[47,16451,16452],{"class":53},"getHeight",[47,16454,13143],{"class":221},[47,16456,3042],{"class":217},[47,16458,16459],{"class":221}," m_H)\n",[47,16461,16462],{"class":49,"line":8065},[47,16463,2603],{"class":221},[47,16465,16466,16468,16471],{"class":49,"line":8070},[47,16467,15825],{"class":217},[47,16469,16470],{"class":85}," true",[47,16472,1384],{"class":221},[47,16474,16475],{"class":49,"line":8076},[47,16476,2622],{"class":221},[47,16478,16479],{"class":49,"line":8103},[47,16480,2663],{"class":217},[47,16482,16483],{"class":49,"line":8108},[47,16484,2603],{"class":221},[47,16486,16487,16489,16492],{"class":49,"line":8114},[47,16488,15825],{"class":217},[47,16490,16491],{"class":85}," false",[47,16493,1384],{"class":221},[47,16495,16496],{"class":49,"line":8126},[47,16497,2622],{"class":221},[47,16499,16500],{"class":49,"line":8138},[47,16501,2280],{"class":221},[47,16503,16504],{"class":49,"line":8150},[47,16505,16506],{"class":279},"    \u002F\u002F私有属性\n",[47,16508,16509],{"class":49,"line":9809},[47,16510,15315],{"class":217},[47,16512,16513,16515],{"class":49,"line":9834},[47,16514,2078],{"class":217},[47,16516,16335],{"class":221},[47,16518,16519,16521],{"class":49,"line":9857},[47,16520,2078],{"class":217},[47,16522,16359],{"class":221},[47,16524,16525,16527],{"class":49,"line":9881},[47,16526,2078],{"class":217},[47,16528,16383],{"class":221},[47,16530,16531],{"class":49,"line":9886},[47,16532,2493],{"emptyLinePlaceholder":145},[47,16534,16535],{"class":49,"line":9891},[47,16536,4088],{"class":221},[47,16538,16539],{"class":49,"line":9896},[47,16540,16541],{"class":279},"\u002F\u002F全局函数判断两个立方体是否相等\n",[47,16543,16544,16546,16548,16550,16552,16555,16557,16559,16562],{"class":49,"line":9905},[47,16545,1448],{"class":217},[47,16547,16400],{"class":53},[47,16549,222],{"class":221},[47,16551,16405],{"class":53},[47,16553,16554],{"class":5309}," c1",[47,16556,597],{"class":221},[47,16558,16405],{"class":53},[47,16560,16561],{"class":5309}," c2",[47,16563,228],{"class":221},[47,16565,16566],{"class":49,"line":9910},[47,16567,1640],{"class":221},[47,16569,16570,16572,16575,16577,16579,16581,16584,16586,16589,16591,16593,16595,16597,16599,16601,16603,16605,16607,16609,16611,16613,16615,16617,16619],{"class":49,"line":9916},[47,16571,4183],{"class":217},[47,16573,16574],{"class":221}," (c1.",[47,16576,16423],{"class":53},[47,16578,13143],{"class":221},[47,16580,3042],{"class":217},[47,16582,16583],{"class":221}," c2.",[47,16585,16423],{"class":53},[47,16587,16588],{"class":221},"()) ",[47,16590,1809],{"class":217},[47,16592,16574],{"class":221},[47,16594,16438],{"class":53},[47,16596,13143],{"class":221},[47,16598,3042],{"class":217},[47,16600,16583],{"class":221},[47,16602,16438],{"class":53},[47,16604,16588],{"class":221},[47,16606,1809],{"class":217},[47,16608,16574],{"class":221},[47,16610,16452],{"class":53},[47,16612,13143],{"class":221},[47,16614,3042],{"class":217},[47,16616,16583],{"class":221},[47,16618,16452],{"class":53},[47,16620,16621],{"class":221},"());\n",[47,16623,16624],{"class":49,"line":9937},[47,16625,1659],{"class":221},[47,16627,16628,16630,16632],{"class":49,"line":9943},[47,16629,225],{"class":217},[47,16631,2066],{"class":53},[47,16633,2069],{"class":221},[47,16635,16636],{"class":49,"line":9957},[47,16637,1640],{"class":221},[47,16639,16640],{"class":49,"line":9963},[47,16641,16642],{"class":221},"    Cube c1;\n",[47,16644,16645],{"class":49,"line":9990},[47,16646,16647],{"class":279},"    \u002F\u002F输入立方体的长宽高\n",[47,16649,16650,16652,16654,16657,16659],{"class":49,"line":9999},[47,16651,1645],{"class":221},[47,16653,1262],{"class":217},[47,16655,16656],{"class":81},"\"请输入第一个立方体的长、宽、高：\"",[47,16658,1262],{"class":217},[47,16660,1285],{"class":221},[47,16662,16663,16665],{"class":49,"line":10005},[47,16664,2078],{"class":217},[47,16666,16667],{"class":221}," l,w,h,l1,w1,h1;\n",[47,16669,16670,16672,16674,16676,16678,16680,16682],{"class":49,"line":10013},[47,16671,2105],{"class":221},[47,16673,1523],{"class":217},[47,16675,737],{"class":221},[47,16677,1523],{"class":217},[47,16679,1014],{"class":221},[47,16681,1523],{"class":217},[47,16683,16220],{"class":221},[47,16685,16686,16689,16692],{"class":49,"line":10018},[47,16687,16688],{"class":221},"    c1.",[47,16690,16691],{"class":53},"setLwh",[47,16693,16694],{"class":221},"(l,w,h);\n",[47,16696,16698],{"class":49,"line":16697},66,[47,16699,16700],{"class":279},"    \u002F\u002F面积\n",[47,16702,16704,16706,16708,16711,16713,16715,16718,16720,16722],{"class":49,"line":16703},67,[47,16705,1645],{"class":221},[47,16707,1262],{"class":217},[47,16709,16710],{"class":81},"\"立方体的表面积为：\"",[47,16712,1262],{"class":217},[47,16714,14923],{"class":221},[47,16716,16717],{"class":53},"mianji",[47,16719,2520],{"class":221},[47,16721,1262],{"class":217},[47,16723,1285],{"class":221},[47,16725,16727],{"class":49,"line":16726},68,[47,16728,16729],{"class":279},"    \u002F\u002F体积\n",[47,16731,16733,16735,16737,16740,16742,16744,16747,16749,16751],{"class":49,"line":16732},69,[47,16734,1645],{"class":221},[47,16736,1262],{"class":217},[47,16738,16739],{"class":81},"\"立方体的体积为：\"",[47,16741,1262],{"class":217},[47,16743,14923],{"class":221},[47,16745,16746],{"class":53},"tiji",[47,16748,2520],{"class":221},[47,16750,1262],{"class":217},[47,16752,1285],{"class":221},[47,16754,16756,16758,16760,16763,16765],{"class":49,"line":16755},70,[47,16757,1645],{"class":221},[47,16759,1262],{"class":217},[47,16761,16762],{"class":81},"\"请输入第二个立方体的长、宽、高：\"",[47,16764,1262],{"class":217},[47,16766,1285],{"class":221},[47,16768,16770,16772,16774,16777,16779,16782,16784],{"class":49,"line":16769},71,[47,16771,2105],{"class":221},[47,16773,1523],{"class":217},[47,16775,16776],{"class":221},"l1",[47,16778,1523],{"class":217},[47,16780,16781],{"class":221},"w1",[47,16783,1523],{"class":217},[47,16785,16786],{"class":221},"h1;\n",[47,16788,16790],{"class":49,"line":16789},72,[47,16791,16792],{"class":221},"    Cube c2;\n",[47,16794,16796,16799,16801],{"class":49,"line":16795},73,[47,16797,16798],{"class":221},"    c2.",[47,16800,16691],{"class":53},[47,16802,16803],{"class":221},"(l1,w1,h1);\n",[47,16805,16807,16809,16811,16814,16816,16819,16821,16823,16825],{"class":49,"line":16806},74,[47,16808,1645],{"class":221},[47,16810,1262],{"class":217},[47,16812,16813],{"class":81},"\"第二个立方体的表面积为：\"",[47,16815,1262],{"class":217},[47,16817,16818],{"class":221},"c2.",[47,16820,16717],{"class":53},[47,16822,2520],{"class":221},[47,16824,1262],{"class":217},[47,16826,1285],{"class":221},[47,16828,16830,16832,16834,16837,16839,16841,16843,16845,16847],{"class":49,"line":16829},75,[47,16831,1645],{"class":221},[47,16833,1262],{"class":217},[47,16835,16836],{"class":81},"\"第二个立方体的体积为：\"",[47,16838,1262],{"class":217},[47,16840,16818],{"class":221},[47,16842,16746],{"class":53},[47,16844,2520],{"class":221},[47,16846,1262],{"class":217},[47,16848,1285],{"class":221},[47,16850,16852],{"class":49,"line":16851},76,[47,16853,2493],{"emptyLinePlaceholder":145},[47,16855,16857],{"class":49,"line":16856},77,[47,16858,16859],{"class":279},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[47,16861,16863,16865,16867,16870,16872],{"class":49,"line":16862},78,[47,16864,1645],{"class":221},[47,16866,1262],{"class":217},[47,16868,16869],{"class":81},"\"内部函数判断结果：\"",[47,16871,1262],{"class":217},[47,16873,1285],{"class":221},[47,16875,16877,16879,16881,16884],{"class":49,"line":16876},79,[47,16878,3194],{"class":217},[47,16880,16574],{"class":221},[47,16882,16883],{"class":53},"isEqual",[47,16885,16886],{"class":221},"(c2))\n",[47,16888,16890],{"class":49,"line":16889},80,[47,16891,2123],{"class":221},[47,16893,16895,16897,16899,16902,16904],{"class":49,"line":16894},81,[47,16896,3544],{"class":221},[47,16898,1262],{"class":217},[47,16900,16901],{"class":81},"\"两个立方体相等\"",[47,16903,1262],{"class":217},[47,16905,1285],{"class":221},[47,16907,16909],{"class":49,"line":16908},82,[47,16910,2280],{"class":221},[47,16912,16914],{"class":49,"line":16913},83,[47,16915,16916],{"class":217},"    else\n",[47,16918,16920],{"class":49,"line":16919},84,[47,16921,2123],{"class":221},[47,16923,16925,16927,16929,16932,16934],{"class":49,"line":16924},85,[47,16926,3544],{"class":221},[47,16928,1262],{"class":217},[47,16930,16931],{"class":81},"\"两个立方体不相等\"",[47,16933,1262],{"class":217},[47,16935,1285],{"class":221},[47,16937,16939],{"class":49,"line":16938},86,[47,16940,2280],{"class":221},[47,16942,16944],{"class":49,"line":16943},87,[47,16945,2493],{"emptyLinePlaceholder":145},[47,16947,16949,16951,16953,16956,16958],{"class":49,"line":16948},88,[47,16950,1645],{"class":221},[47,16952,1262],{"class":217},[47,16954,16955],{"class":81},"\"全局函数判断结果：\"",[47,16957,1262],{"class":217},[47,16959,1285],{"class":221},[47,16961,16963,16965,16967,16969],{"class":49,"line":16962},89,[47,16964,3194],{"class":217},[47,16966,1752],{"class":221},[47,16968,16883],{"class":53},[47,16970,16971],{"class":221},"(c1, c2))\n",[47,16973,16975],{"class":49,"line":16974},90,[47,16976,2123],{"class":221},[47,16978,16980,16982,16984,16986,16988],{"class":49,"line":16979},91,[47,16981,3544],{"class":221},[47,16983,1262],{"class":217},[47,16985,16901],{"class":81},[47,16987,1262],{"class":217},[47,16989,1285],{"class":221},[47,16991,16993],{"class":49,"line":16992},92,[47,16994,2280],{"class":221},[47,16996,16998],{"class":49,"line":16997},93,[47,16999,16916],{"class":217},[47,17001,17003],{"class":49,"line":17002},94,[47,17004,2123],{"class":221},[47,17006,17008,17010,17012,17014,17016],{"class":49,"line":17007},95,[47,17009,3544],{"class":221},[47,17011,1262],{"class":217},[47,17013,16931],{"class":81},[47,17015,1262],{"class":217},[47,17017,1285],{"class":221},[47,17019,17021],{"class":49,"line":17020},96,[47,17022,2280],{"class":221},[47,17024,17026],{"class":49,"line":17025},97,[47,17027,1659],{"class":221},[171,17029,17030],{"start":92},[109,17031,17032],{},[369,17033,17034],{},"练习案例2：点和圆的关系",[106,17036,17037],{},[109,17038,17039],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[38,17041,17043],{"className":208,"code":17042,"language":210,"meta":43,"style":43},"#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",[26,17044,17045,17051,17061,17068,17075,17079,17083,17088,17122,17127,17143,17157,17161,17165,17172,17179,17183,17189,17193,17197,17201,17223,17246,17251,17265,17280,17284,17288,17294,17299,17304,17308,17334,17338,17368,17396,17424,17441,17445,17458,17462,17466,17470,17483,17487,17491,17499,17503,17507,17511,17516,17520,17531,17538,17547,17557,17568,17575,17588,17599,17609,17620,17627,17641,17646,17656,17664],{"__ignoreMap":43},[47,17046,17047,17049],{"class":49,"line":50},[47,17048,2043],{"class":217},[47,17050,2046],{"class":81},[47,17052,17053,17055,17057,17059],{"class":49,"line":92},[47,17054,2051],{"class":217},[47,17056,2054],{"class":217},[47,17058,2057],{"class":53},[47,17060,1384],{"class":221},[47,17062,17063,17065],{"class":49,"line":1273},[47,17064,2043],{"class":217},[47,17066,17067],{"class":81},"\u003Ccmath>\n",[47,17069,17070,17072],{"class":49,"line":1288},[47,17071,14787],{"class":217},[47,17073,17074],{"class":53}," Point\n",[47,17076,17077],{"class":49,"line":1294},[47,17078,1640],{"class":221},[47,17080,17081],{"class":49,"line":1308},[47,17082,14809],{"class":217},[47,17084,17085],{"class":49,"line":1314},[47,17086,17087],{"class":279},"    \u002F\u002F赋值\n",[47,17089,17090,17092,17095,17097,17099,17102,17104,17106,17109,17112,17114,17117,17119],{"class":49,"line":1405},[47,17091,15002],{"class":217},[47,17093,17094],{"class":53}," setPoint",[47,17096,222],{"class":221},[47,17098,14130],{"class":217},[47,17100,17101],{"class":5309}," x",[47,17103,12528],{"class":221},[47,17105,14130],{"class":217},[47,17107,17108],{"class":5309}," y",[47,17110,17111],{"class":221},") { m_x ",[47,17113,267],{"class":217},[47,17115,17116],{"class":221}," x; m_y ",[47,17118,267],{"class":217},[47,17120,17121],{"class":221}," y; }\n",[47,17123,17124],{"class":49,"line":1411},[47,17125,17126],{"class":279},"    \u002F\u002F获取坐标\n",[47,17128,17129,17131,17134,17137,17140],{"class":49,"line":1423},[47,17130,14831],{"class":217},[47,17132,17133],{"class":53}," getX",[47,17135,17136],{"class":221},"() { ",[47,17138,17139],{"class":217},"return",[47,17141,17142],{"class":221}," m_x; }\n",[47,17144,17145,17147,17150,17152,17154],{"class":49,"line":1706},[47,17146,14831],{"class":217},[47,17148,17149],{"class":53}," getY",[47,17151,17136],{"class":221},[47,17153,17139],{"class":217},[47,17155,17156],{"class":221}," m_y; }\n",[47,17158,17159],{"class":49,"line":1711},[47,17160,2493],{"emptyLinePlaceholder":145},[47,17162,17163],{"class":49,"line":1717},[47,17164,15315],{"class":217},[47,17166,17167,17169],{"class":49,"line":1722},[47,17168,14831],{"class":217},[47,17170,17171],{"class":221}," m_x;\n",[47,17173,17174,17176],{"class":49,"line":1736},[47,17175,14831],{"class":217},[47,17177,17178],{"class":221}," m_y;\n",[47,17180,17181],{"class":49,"line":1741},[47,17182,4088],{"class":221},[47,17184,17185,17187],{"class":49,"line":1747},[47,17186,14787],{"class":217},[47,17188,14790],{"class":53},[47,17190,17191],{"class":49,"line":1768},[47,17192,1640],{"class":221},[47,17194,17195],{"class":49,"line":1773},[47,17196,14809],{"class":217},[47,17198,17199],{"class":49,"line":1787},[47,17200,17087],{"class":279},[47,17202,17203,17205,17208,17210,17212,17215,17218,17220],{"class":49,"line":1792},[47,17204,15002],{"class":217},[47,17206,17207],{"class":53}," setRadius",[47,17209,222],{"class":221},[47,17211,14130],{"class":217},[47,17213,17214],{"class":5309}," r",[47,17216,17217],{"class":221},") { m_r ",[47,17219,267],{"class":217},[47,17221,17222],{"class":221}," r; }\n",[47,17224,17225,17227,17230,17232,17235,17238,17241,17243],{"class":49,"line":1821},[47,17226,15002],{"class":217},[47,17228,17229],{"class":53}," setCenter",[47,17231,222],{"class":221},[47,17233,17234],{"class":53},"Point",[47,17236,17237],{"class":5309}," center",[47,17239,17240],{"class":221},") { m_center ",[47,17242,267],{"class":217},[47,17244,17245],{"class":221}," center; }\n",[47,17247,17248],{"class":49,"line":1826},[47,17249,17250],{"class":279},"    \u002F\u002F获取属性\n",[47,17252,17253,17255,17258,17260,17262],{"class":49,"line":1843},[47,17254,14831],{"class":217},[47,17256,17257],{"class":53}," getRadius",[47,17259,17136],{"class":221},[47,17261,17139],{"class":217},[47,17263,17264],{"class":221}," m_r; }\n",[47,17266,17267,17270,17273,17275,17277],{"class":49,"line":1848},[47,17268,17269],{"class":53},"    Point",[47,17271,17272],{"class":53}," getCenter",[47,17274,17136],{"class":221},[47,17276,17139],{"class":217},[47,17278,17279],{"class":221}," m_center; }\n",[47,17281,17282],{"class":49,"line":1853},[47,17283,2493],{"emptyLinePlaceholder":145},[47,17285,17286],{"class":49,"line":1858},[47,17287,15315],{"class":217},[47,17289,17290,17292],{"class":49,"line":1872},[47,17291,14831],{"class":217},[47,17293,14821],{"class":221},[47,17295,17296],{"class":49,"line":1877},[47,17297,17298],{"class":279},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[47,17300,17301],{"class":49,"line":2670},[47,17302,17303],{"class":221},"    Point m_center;\n",[47,17305,17306],{"class":49,"line":2684},[47,17307,4088],{"class":221},[47,17309,17310,17312,17315,17317,17320,17322,17324,17326,17328,17330,17332],{"class":49,"line":2692},[47,17311,5457],{"class":217},[47,17313,17314],{"class":53}," isInCircle",[47,17316,222],{"class":221},[47,17318,17319],{"class":53},"Circle",[47,17321,10677],{"class":217},[47,17323,507],{"class":5309},[47,17325,597],{"class":221},[47,17327,17234],{"class":53},[47,17329,10677],{"class":217},[47,17331,19],{"class":5309},[47,17333,228],{"class":221},[47,17335,17336],{"class":49,"line":2697},[47,17337,1640],{"class":221},[47,17339,17340,17342,17345,17347,17349,17352,17355,17358,17360,17362,17364,17366],{"class":49,"line":2703},[47,17341,14831],{"class":217},[47,17343,17344],{"class":221}," dx ",[47,17346,267],{"class":217},[47,17348,16435],{"class":221},[47,17350,17351],{"class":53},"getCenter",[47,17353,17354],{"class":221},"().",[47,17356,17357],{"class":53},"getX",[47,17359,13143],{"class":221},[47,17361,751],{"class":217},[47,17363,15981],{"class":221},[47,17365,17357],{"class":53},[47,17367,5729],{"class":221},[47,17369,17370,17372,17375,17377,17379,17381,17383,17386,17388,17390,17392,17394],{"class":49,"line":2709},[47,17371,14831],{"class":217},[47,17373,17374],{"class":221}," dy ",[47,17376,267],{"class":217},[47,17378,16435],{"class":221},[47,17380,17351],{"class":53},[47,17382,17354],{"class":221},[47,17384,17385],{"class":53},"getY",[47,17387,13143],{"class":221},[47,17389,751],{"class":217},[47,17391,15981],{"class":221},[47,17393,17385],{"class":53},[47,17395,5729],{"class":221},[47,17397,17398,17400,17403,17405,17408,17411,17413,17415,17417,17419,17421],{"class":49,"line":2714},[47,17399,14831],{"class":217},[47,17401,17402],{"class":221}," distance ",[47,17404,267],{"class":217},[47,17406,17407],{"class":53}," sqrt",[47,17409,17410],{"class":221},"(dx ",[47,17412,674],{"class":217},[47,17414,17344],{"class":221},[47,17416,700],{"class":217},[47,17418,17374],{"class":221},[47,17420,674],{"class":217},[47,17422,17423],{"class":221}," dy);\n",[47,17425,17426,17428,17431,17433,17435,17438],{"class":49,"line":8041},[47,17427,3194],{"class":217},[47,17429,17430],{"class":221}," (distance ",[47,17432,1129],{"class":217},[47,17434,16435],{"class":221},[47,17436,17437],{"class":53},"getRadius",[47,17439,17440],{"class":221},"())\n",[47,17442,17443],{"class":49,"line":8065},[47,17444,2123],{"class":221},[47,17446,17447,17449,17451,17454,17456],{"class":49,"line":8070},[47,17448,9762],{"class":221},[47,17450,1262],{"class":217},[47,17452,17453],{"class":81}," \"点在圆内\"",[47,17455,1538],{"class":217},[47,17457,8933],{"class":221},[47,17459,17460],{"class":49,"line":8076},[47,17461,2280],{"class":221},[47,17463,17464],{"class":49,"line":8103},[47,17465,16916],{"class":217},[47,17467,17468],{"class":49,"line":8108},[47,17469,2123],{"class":221},[47,17471,17472,17474,17476,17479,17481],{"class":49,"line":8114},[47,17473,9762],{"class":221},[47,17475,1262],{"class":217},[47,17477,17478],{"class":81}," \"点在圆外\"",[47,17480,1538],{"class":217},[47,17482,8933],{"class":221},[47,17484,17485],{"class":49,"line":8126},[47,17486,2280],{"class":221},[47,17488,17489],{"class":49,"line":8138},[47,17490,1659],{"class":221},[47,17492,17493,17495,17497],{"class":49,"line":8150},[47,17494,225],{"class":217},[47,17496,2066],{"class":53},[47,17498,2069],{"class":221},[47,17500,17501],{"class":49,"line":9809},[47,17502,1640],{"class":221},[47,17504,17505],{"class":49,"line":9834},[47,17506,15146],{"class":279},[47,17508,17509],{"class":49,"line":9857},[47,17510,14893],{"class":221},[47,17512,17513],{"class":49,"line":9881},[47,17514,17515],{"class":221},"    Point p1;\n",[47,17517,17518],{"class":49,"line":9886},[47,17519,17087],{"class":279},[47,17521,17522,17524,17526,17529],{"class":49,"line":9891},[47,17523,1645],{"class":221},[47,17525,1262],{"class":217},[47,17527,17528],{"class":81},"\"请输入圆的半径：\"",[47,17530,1384],{"class":221},[47,17532,17533,17535],{"class":49,"line":9896},[47,17534,14831],{"class":217},[47,17536,17537],{"class":221}," r;\n",[47,17539,17540,17542,17544],{"class":49,"line":9905},[47,17541,2105],{"class":221},[47,17543,1523],{"class":217},[47,17545,17546],{"class":221},"r;\n",[47,17548,17549,17551,17554],{"class":49,"line":9910},[47,17550,16688],{"class":221},[47,17552,17553],{"class":53},"setRadius",[47,17555,17556],{"class":221},"(r);\n",[47,17558,17559,17561,17563,17566],{"class":49,"line":9916},[47,17560,1645],{"class":221},[47,17562,1262],{"class":217},[47,17564,17565],{"class":81},"\"请输入圆心坐标：\"",[47,17567,1384],{"class":221},[47,17569,17570,17572],{"class":49,"line":9937},[47,17571,14831],{"class":217},[47,17573,17574],{"class":221}," x, y;\n",[47,17576,17577,17579,17581,17583,17585],{"class":49,"line":9943},[47,17578,2105],{"class":221},[47,17580,1523],{"class":217},[47,17582,1039],{"class":221},[47,17584,1523],{"class":217},[47,17586,17587],{"class":221},"y;\n",[47,17589,17590,17593,17596],{"class":49,"line":9957},[47,17591,17592],{"class":221},"    p1.",[47,17594,17595],{"class":53},"setPoint",[47,17597,17598],{"class":221},"(x, y);\n",[47,17600,17601,17603,17606],{"class":49,"line":9963},[47,17602,16688],{"class":221},[47,17604,17605],{"class":53},"setCenter",[47,17607,17608],{"class":221},"(p1);\n",[47,17610,17611,17613,17615,17618],{"class":49,"line":9990},[47,17612,1645],{"class":221},[47,17614,1262],{"class":217},[47,17616,17617],{"class":81},"\"请输入测试点坐标：\"",[47,17619,1384],{"class":221},[47,17621,17622,17624],{"class":49,"line":9999},[47,17623,14831],{"class":217},[47,17625,17626],{"class":221}," x1, y1;\n",[47,17628,17629,17631,17633,17636,17638],{"class":49,"line":10005},[47,17630,2105],{"class":221},[47,17632,1523],{"class":217},[47,17634,17635],{"class":221},"x1",[47,17637,1523],{"class":217},[47,17639,17640],{"class":221},"y1;\n",[47,17642,17643],{"class":49,"line":10013},[47,17644,17645],{"class":221},"    Point p2;\n",[47,17647,17648,17651,17653],{"class":49,"line":10018},[47,17649,17650],{"class":221},"    p2.",[47,17652,17595],{"class":53},[47,17654,17655],{"class":221},"(x1, y1);\n",[47,17657,17658,17661],{"class":49,"line":16697},[47,17659,17660],{"class":53},"    isInCircle",[47,17662,17663],{"class":221},"(c1, p2);\n",[47,17665,17666],{"class":49,"line":16703},[47,17667,1659],{"class":221},[19,17669,17670],{},"在类中可以让另一个类作为本来的成员",[19,17672,17673],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,17675,17676],{},"创建point.h",[38,17678,17680],{"className":208,"code":17679,"language":210,"meta":43,"style":43},"#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",[26,17681,17682,17693,17699,17709,17715,17719,17724,17728,17732,17752,17756,17764,17772,17776,17780,17786,17792],{"__ignoreMap":43},[47,17683,17684,17687,17690],{"class":49,"line":50},[47,17685,17686],{"class":217},"#pragma",[47,17688,17689],{"class":53}," once",[47,17691,17692],{"class":279}," \u002F\u002F防止头文件重复包含\n",[47,17694,17695,17697],{"class":49,"line":92},[47,17696,2043],{"class":217},[47,17698,2046],{"class":81},[47,17700,17701,17703,17705,17707],{"class":49,"line":1273},[47,17702,2051],{"class":217},[47,17704,2054],{"class":217},[47,17706,2057],{"class":53},[47,17708,1384],{"class":221},[47,17710,17711,17713],{"class":49,"line":1288},[47,17712,14787],{"class":217},[47,17714,17074],{"class":53},[47,17716,17717],{"class":49,"line":1294},[47,17718,1640],{"class":221},[47,17720,17721],{"class":49,"line":1308},[47,17722,17723],{"class":279},"\u002F\u002F做好声明与变量定义就可以\n",[47,17725,17726],{"class":49,"line":1314},[47,17727,14809],{"class":217},[47,17729,17730],{"class":49,"line":1405},[47,17731,17087],{"class":279},[47,17733,17734,17736,17738,17740,17742,17744,17746,17748,17750],{"class":49,"line":1411},[47,17735,15002],{"class":217},[47,17737,17094],{"class":53},[47,17739,222],{"class":221},[47,17741,14130],{"class":217},[47,17743,17101],{"class":5309},[47,17745,12528],{"class":221},[47,17747,14130],{"class":217},[47,17749,17108],{"class":5309},[47,17751,2812],{"class":221},[47,17753,17754],{"class":49,"line":1423},[47,17755,17126],{"class":279},[47,17757,17758,17760,17762],{"class":49,"line":1706},[47,17759,14831],{"class":217},[47,17761,17133],{"class":53},[47,17763,5729],{"class":221},[47,17765,17766,17768,17770],{"class":49,"line":1711},[47,17767,14831],{"class":217},[47,17769,17149],{"class":53},[47,17771,5729],{"class":221},[47,17773,17774],{"class":49,"line":1717},[47,17775,2493],{"emptyLinePlaceholder":145},[47,17777,17778],{"class":49,"line":1722},[47,17779,15315],{"class":217},[47,17781,17782,17784],{"class":49,"line":1736},[47,17783,14831],{"class":217},[47,17785,17171],{"class":221},[47,17787,17788,17790],{"class":49,"line":1741},[47,17789,14831],{"class":217},[47,17791,17178],{"class":221},[47,17793,17794],{"class":49,"line":1747},[47,17795,4088],{"class":221},[19,17797,17798],{},"创建point.cpp",[38,17800,17802],{"className":208,"code":17801,"language":210,"meta":43,"style":43},"#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",[26,17803,17804,17811,17816,17850,17854,17870],{"__ignoreMap":43},[47,17805,17806,17808],{"class":49,"line":50},[47,17807,2043],{"class":217},[47,17809,17810],{"class":81},"\u003Cpoint.h>\n",[47,17812,17813],{"class":49,"line":92},[47,17814,17815],{"class":279},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[47,17817,17818,17820,17823,17826,17828,17830,17832,17834,17836,17838,17840,17842,17844,17846,17848],{"class":49,"line":1273},[47,17819,15002],{"class":217},[47,17821,17822],{"class":53}," Point",[47,17824,17825],{"class":221},"::",[47,17827,17595],{"class":53},[47,17829,222],{"class":221},[47,17831,14130],{"class":217},[47,17833,17101],{"class":5309},[47,17835,12528],{"class":221},[47,17837,14130],{"class":217},[47,17839,17108],{"class":5309},[47,17841,17111],{"class":221},[47,17843,267],{"class":217},[47,17845,17116],{"class":221},[47,17847,267],{"class":217},[47,17849,17121],{"class":221},[47,17851,17852],{"class":49,"line":1288},[47,17853,17126],{"class":279},[47,17855,17856,17858,17860,17862,17864,17866,17868],{"class":49,"line":1294},[47,17857,14831],{"class":217},[47,17859,17822],{"class":53},[47,17861,17825],{"class":221},[47,17863,17357],{"class":53},[47,17865,17136],{"class":221},[47,17867,17139],{"class":217},[47,17869,17142],{"class":221},[47,17871,17872,17874,17876,17878,17880,17882,17884],{"class":49,"line":1308},[47,17873,14831],{"class":217},[47,17875,17822],{"class":53},[47,17877,17825],{"class":221},[47,17879,17385],{"class":53},[47,17881,17136],{"class":221},[47,17883,17139],{"class":217},[47,17885,17156],{"class":221},[19,17887,17888],{},"创建circle.h",[38,17890,17892],{"className":208,"code":17891,"language":210,"meta":43,"style":43},"#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",[26,17893,17894,17901,17907,17917,17923,17929,17933,17937,17941,17955,17969,17973,17981,17989,17993,17997,18003,18007,18011],{"__ignoreMap":43},[47,17895,17896,17898],{"class":49,"line":50},[47,17897,17686],{"class":217},[47,17899,17900],{"class":53}," once\n",[47,17902,17903,17905],{"class":49,"line":92},[47,17904,2043],{"class":217},[47,17906,2046],{"class":81},[47,17908,17909,17911,17913,17915],{"class":49,"line":1273},[47,17910,2051],{"class":217},[47,17912,2054],{"class":217},[47,17914,2057],{"class":53},[47,17916,1384],{"class":221},[47,17918,17919,17921],{"class":49,"line":1288},[47,17920,2043],{"class":217},[47,17922,17810],{"class":81},[47,17924,17925,17927],{"class":49,"line":1294},[47,17926,14787],{"class":217},[47,17928,14790],{"class":53},[47,17930,17931],{"class":49,"line":1308},[47,17932,1640],{"class":221},[47,17934,17935],{"class":49,"line":1314},[47,17936,14809],{"class":217},[47,17938,17939],{"class":49,"line":1405},[47,17940,17087],{"class":279},[47,17942,17943,17945,17947,17949,17951,17953],{"class":49,"line":1411},[47,17944,15002],{"class":217},[47,17946,17207],{"class":53},[47,17948,222],{"class":221},[47,17950,14130],{"class":217},[47,17952,17214],{"class":5309},[47,17954,2812],{"class":221},[47,17956,17957,17959,17961,17963,17965,17967],{"class":49,"line":1423},[47,17958,15002],{"class":217},[47,17960,17229],{"class":53},[47,17962,222],{"class":221},[47,17964,17234],{"class":53},[47,17966,17237],{"class":5309},[47,17968,2812],{"class":221},[47,17970,17971],{"class":49,"line":1706},[47,17972,17250],{"class":279},[47,17974,17975,17977,17979],{"class":49,"line":1711},[47,17976,14831],{"class":217},[47,17978,17257],{"class":53},[47,17980,5729],{"class":221},[47,17982,17983,17985,17987],{"class":49,"line":1717},[47,17984,17269],{"class":53},[47,17986,17272],{"class":53},[47,17988,5729],{"class":221},[47,17990,17991],{"class":49,"line":1722},[47,17992,2493],{"emptyLinePlaceholder":145},[47,17994,17995],{"class":49,"line":1736},[47,17996,15315],{"class":217},[47,17998,17999,18001],{"class":49,"line":1741},[47,18000,14831],{"class":217},[47,18002,14821],{"class":221},[47,18004,18005],{"class":49,"line":1747},[47,18006,17298],{"class":279},[47,18008,18009],{"class":49,"line":1768},[47,18010,17303],{"class":221},[47,18012,18013],{"class":49,"line":1773},[47,18014,4088],{"class":221},[19,18016,18017],{},"创建circle.cpp",[38,18019,18021],{"className":208,"code":18020,"language":210,"meta":43,"style":43},"#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",[26,18022,18023,18030,18053,18075,18080,18096],{"__ignoreMap":43},[47,18024,18025,18027],{"class":49,"line":50},[47,18026,2043],{"class":217},[47,18028,18029],{"class":81},"\u003Ccircle.h>\n",[47,18031,18032,18034,18037,18039,18041,18043,18045,18047,18049,18051],{"class":49,"line":92},[47,18033,5457],{"class":217},[47,18035,18036],{"class":53}," Circle",[47,18038,17825],{"class":221},[47,18040,17553],{"class":53},[47,18042,222],{"class":221},[47,18044,14130],{"class":217},[47,18046,17214],{"class":5309},[47,18048,17217],{"class":221},[47,18050,267],{"class":217},[47,18052,17222],{"class":221},[47,18054,18055,18057,18059,18061,18063,18065,18067,18069,18071,18073],{"class":49,"line":1273},[47,18056,5457],{"class":217},[47,18058,18036],{"class":53},[47,18060,17825],{"class":221},[47,18062,17605],{"class":53},[47,18064,222],{"class":221},[47,18066,17234],{"class":53},[47,18068,17237],{"class":5309},[47,18070,17240],{"class":221},[47,18072,267],{"class":217},[47,18074,17245],{"class":221},[47,18076,18077],{"class":49,"line":1288},[47,18078,18079],{"class":279},"\u002F\u002F获取属性\n",[47,18081,18082,18084,18086,18088,18090,18092,18094],{"class":49,"line":1294},[47,18083,14130],{"class":217},[47,18085,18036],{"class":53},[47,18087,17825],{"class":221},[47,18089,17437],{"class":53},[47,18091,17136],{"class":221},[47,18093,17139],{"class":217},[47,18095,17264],{"class":221},[47,18097,18098,18100,18102,18104,18106,18108,18110],{"class":49,"line":1308},[47,18099,17234],{"class":53},[47,18101,18036],{"class":53},[47,18103,17825],{"class":221},[47,18105,17351],{"class":53},[47,18107,17136],{"class":221},[47,18109,17139],{"class":217},[47,18111,17279],{"class":221},[19,18113,18114],{},"使用封装的类",[38,18116,18118],{"className":208,"code":18117,"language":210,"meta":43,"style":43},"#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",[26,18119,18120,18126,18136,18142,18148,18172,18176,18202,18228,18252,18266,18270,18282,18286,18290,18294,18306,18310,18314,18322,18326,18330,18334,18338,18342,18352,18358,18366,18374,18384,18390,18402,18410,18418,18428,18434,18446,18450,18458,18464],{"__ignoreMap":43},[47,18121,18122,18124],{"class":49,"line":50},[47,18123,2043],{"class":217},[47,18125,2046],{"class":81},[47,18127,18128,18130,18132,18134],{"class":49,"line":92},[47,18129,2051],{"class":217},[47,18131,2054],{"class":217},[47,18133,2057],{"class":53},[47,18135,1384],{"class":221},[47,18137,18138,18140],{"class":49,"line":1273},[47,18139,2043],{"class":217},[47,18141,18029],{"class":81},[47,18143,18144,18146],{"class":49,"line":1288},[47,18145,2043],{"class":217},[47,18147,17810],{"class":81},[47,18149,18150,18152,18154,18156,18158,18160,18162,18164,18166,18168,18170],{"class":49,"line":1294},[47,18151,5457],{"class":217},[47,18153,17314],{"class":53},[47,18155,222],{"class":221},[47,18157,17319],{"class":53},[47,18159,10677],{"class":217},[47,18161,507],{"class":5309},[47,18163,597],{"class":221},[47,18165,17234],{"class":53},[47,18167,10677],{"class":217},[47,18169,19],{"class":5309},[47,18171,228],{"class":221},[47,18173,18174],{"class":49,"line":1308},[47,18175,1640],{"class":221},[47,18177,18178,18180,18182,18184,18186,18188,18190,18192,18194,18196,18198,18200],{"class":49,"line":1314},[47,18179,14831],{"class":217},[47,18181,17344],{"class":221},[47,18183,267],{"class":217},[47,18185,16435],{"class":221},[47,18187,17351],{"class":53},[47,18189,17354],{"class":221},[47,18191,17357],{"class":53},[47,18193,13143],{"class":221},[47,18195,751],{"class":217},[47,18197,15981],{"class":221},[47,18199,17357],{"class":53},[47,18201,5729],{"class":221},[47,18203,18204,18206,18208,18210,18212,18214,18216,18218,18220,18222,18224,18226],{"class":49,"line":1405},[47,18205,14831],{"class":217},[47,18207,17374],{"class":221},[47,18209,267],{"class":217},[47,18211,16435],{"class":221},[47,18213,17351],{"class":53},[47,18215,17354],{"class":221},[47,18217,17385],{"class":53},[47,18219,13143],{"class":221},[47,18221,751],{"class":217},[47,18223,15981],{"class":221},[47,18225,17385],{"class":53},[47,18227,5729],{"class":221},[47,18229,18230,18232,18234,18236,18238,18240,18242,18244,18246,18248,18250],{"class":49,"line":1411},[47,18231,14831],{"class":217},[47,18233,17402],{"class":221},[47,18235,267],{"class":217},[47,18237,17407],{"class":53},[47,18239,17410],{"class":221},[47,18241,674],{"class":217},[47,18243,17344],{"class":221},[47,18245,700],{"class":217},[47,18247,17374],{"class":221},[47,18249,674],{"class":217},[47,18251,17423],{"class":221},[47,18253,18254,18256,18258,18260,18262,18264],{"class":49,"line":1423},[47,18255,3194],{"class":217},[47,18257,17430],{"class":221},[47,18259,1129],{"class":217},[47,18261,16435],{"class":221},[47,18263,17437],{"class":53},[47,18265,17440],{"class":221},[47,18267,18268],{"class":49,"line":1706},[47,18269,2123],{"class":221},[47,18271,18272,18274,18276,18278,18280],{"class":49,"line":1711},[47,18273,9762],{"class":221},[47,18275,1262],{"class":217},[47,18277,17453],{"class":81},[47,18279,1538],{"class":217},[47,18281,8933],{"class":221},[47,18283,18284],{"class":49,"line":1717},[47,18285,2280],{"class":221},[47,18287,18288],{"class":49,"line":1722},[47,18289,16916],{"class":217},[47,18291,18292],{"class":49,"line":1736},[47,18293,2123],{"class":221},[47,18295,18296,18298,18300,18302,18304],{"class":49,"line":1741},[47,18297,9762],{"class":221},[47,18299,1262],{"class":217},[47,18301,17478],{"class":81},[47,18303,1538],{"class":217},[47,18305,8933],{"class":221},[47,18307,18308],{"class":49,"line":1747},[47,18309,2280],{"class":221},[47,18311,18312],{"class":49,"line":1768},[47,18313,1659],{"class":221},[47,18315,18316,18318,18320],{"class":49,"line":1773},[47,18317,225],{"class":217},[47,18319,2066],{"class":53},[47,18321,2069],{"class":221},[47,18323,18324],{"class":49,"line":1787},[47,18325,1640],{"class":221},[47,18327,18328],{"class":49,"line":1792},[47,18329,15146],{"class":279},[47,18331,18332],{"class":49,"line":1821},[47,18333,14893],{"class":221},[47,18335,18336],{"class":49,"line":1826},[47,18337,17515],{"class":221},[47,18339,18340],{"class":49,"line":1843},[47,18341,17087],{"class":279},[47,18343,18344,18346,18348,18350],{"class":49,"line":1848},[47,18345,1645],{"class":221},[47,18347,1262],{"class":217},[47,18349,17528],{"class":81},[47,18351,1384],{"class":221},[47,18353,18354,18356],{"class":49,"line":1853},[47,18355,14831],{"class":217},[47,18357,17537],{"class":221},[47,18359,18360,18362,18364],{"class":49,"line":1858},[47,18361,2105],{"class":221},[47,18363,1523],{"class":217},[47,18365,17546],{"class":221},[47,18367,18368,18370,18372],{"class":49,"line":1872},[47,18369,16688],{"class":221},[47,18371,17553],{"class":53},[47,18373,17556],{"class":221},[47,18375,18376,18378,18380,18382],{"class":49,"line":1877},[47,18377,1645],{"class":221},[47,18379,1262],{"class":217},[47,18381,17565],{"class":81},[47,18383,1384],{"class":221},[47,18385,18386,18388],{"class":49,"line":2670},[47,18387,14831],{"class":217},[47,18389,17574],{"class":221},[47,18391,18392,18394,18396,18398,18400],{"class":49,"line":2684},[47,18393,2105],{"class":221},[47,18395,1523],{"class":217},[47,18397,1039],{"class":221},[47,18399,1523],{"class":217},[47,18401,17587],{"class":221},[47,18403,18404,18406,18408],{"class":49,"line":2692},[47,18405,17592],{"class":221},[47,18407,17595],{"class":53},[47,18409,17598],{"class":221},[47,18411,18412,18414,18416],{"class":49,"line":2697},[47,18413,16688],{"class":221},[47,18415,17605],{"class":53},[47,18417,17608],{"class":221},[47,18419,18420,18422,18424,18426],{"class":49,"line":2703},[47,18421,1645],{"class":221},[47,18423,1262],{"class":217},[47,18425,17617],{"class":81},[47,18427,1384],{"class":221},[47,18429,18430,18432],{"class":49,"line":2709},[47,18431,14831],{"class":217},[47,18433,17626],{"class":221},[47,18435,18436,18438,18440,18442,18444],{"class":49,"line":2714},[47,18437,2105],{"class":221},[47,18439,1523],{"class":217},[47,18441,17635],{"class":221},[47,18443,1523],{"class":217},[47,18445,17640],{"class":221},[47,18447,18448],{"class":49,"line":8041},[47,18449,17645],{"class":221},[47,18451,18452,18454,18456],{"class":49,"line":8065},[47,18453,17650],{"class":221},[47,18455,17595],{"class":53},[47,18457,17655],{"class":221},[47,18459,18460,18462],{"class":49,"line":8070},[47,18461,17660],{"class":53},[47,18463,17663],{"class":221},[47,18465,18466],{"class":49,"line":8076},[47,18467,1659],{"class":221},[14,18469,18471],{"id":18470},"_82对象的初始化清理","8.2对象的初始化清理",[106,18473,18474,18477],{},[109,18475,18476],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[109,18478,18479],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[187,18481,18483],{"id":18482},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,18485,18486,18487,18490],{},"对象的",[369,18488,18489],{},"初始化和清理","也是两个非常重要的安全问题",[19,18492,18493],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,18495,18496],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,18498,18499,18500,18503,18504,18507],{},"c++利用了",[369,18501,18502],{},"构造函数","和",[369,18505,18506],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,18509,18510,18511],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[369,18512,18513],{},"我们不提供构造和析构，编译器会提供",[19,18515,18516],{},[369,18517,18518],{},"编译器提供的构造函数和析构函数是空实现。",[106,18520,18521,18524],{},[109,18522,18523],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[109,18525,18526,18527,18530],{},"析构函数：主要作用在于对象",[369,18528,18529],{},"销毁前","系统自动调用，执行一些清理工作。",[19,18532,18533,18536],{},[369,18534,18535],{},"构造函数语法：",[26,18537,18538],{},"类名(){}",[171,18540,18541,18544,18547,18550,18553],{},[109,18542,18543],{},"构造函数，没有返回值也不写void",[109,18545,18546],{},"函数名称与类名相同",[109,18548,18549],{},"构造函数可以有参数，因此可以发生重载",[109,18551,18552],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[109,18554,18555,18556,648],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[26,18557,18558],{},"Person(){}",[19,18560,18561,13888,18564],{},[369,18562,18563],{},"析构函数语法：",[26,18565,18566],{},"~类名(){}",[171,18568,18569,18572,18575,18581],{},[109,18570,18571],{},"析构函数，没有返回值也不写void",[109,18573,18574],{},"函数名称与类名相同,在名称前加上符号  ~",[109,18576,18577,18578],{},"析构函数不可以有参数，因此",[369,18579,18580],{},"不可以发生重载",[109,18582,18583],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[38,18585,18587],{"className":208,"code":18586,"language":210,"meta":43,"style":43},"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",[26,18588,18589,18595,18599,18603,18608,18615,18619,18632,18636,18641,18648,18652,18665,18669,18673,18677,18681,18689,18693,18701,18705,18709,18717,18721,18726,18730,18737,18741,18754,18758,18766],{"__ignoreMap":43},[47,18590,18591,18593],{"class":49,"line":50},[47,18592,14787],{"class":217},[47,18594,15264],{"class":53},[47,18596,18597],{"class":49,"line":92},[47,18598,1640],{"class":221},[47,18600,18601],{"class":49,"line":1273},[47,18602,14809],{"class":217},[47,18604,18605],{"class":49,"line":1288},[47,18606,18607],{"class":279},"    \u002F\u002F构造函数\n",[47,18609,18610,18613],{"class":49,"line":1294},[47,18611,18612],{"class":53},"    Person",[47,18614,2069],{"class":221},[47,18616,18617],{"class":49,"line":1308},[47,18618,2123],{"class":221},[47,18620,18621,18623,18625,18628,18630],{"class":49,"line":1314},[47,18622,9762],{"class":221},[47,18624,1262],{"class":217},[47,18626,18627],{"class":81}," \"Person的构造函数调用\"",[47,18629,1538],{"class":217},[47,18631,8933],{"class":221},[47,18633,18634],{"class":49,"line":1405},[47,18635,2280],{"class":221},[47,18637,18638],{"class":49,"line":1411},[47,18639,18640],{"class":279},"    \u002F\u002F析构函数\n",[47,18642,18643,18646],{"class":49,"line":1423},[47,18644,18645],{"class":53},"    ~Person",[47,18647,2069],{"class":221},[47,18649,18650],{"class":49,"line":1706},[47,18651,2123],{"class":221},[47,18653,18654,18656,18658,18661,18663],{"class":49,"line":1711},[47,18655,9762],{"class":221},[47,18657,1262],{"class":217},[47,18659,18660],{"class":81}," \"Person的析构函数调用\"",[47,18662,1538],{"class":217},[47,18664,8933],{"class":221},[47,18666,18667],{"class":49,"line":1717},[47,18668,2280],{"class":221},[47,18670,18671],{"class":49,"line":1722},[47,18672,2493],{"emptyLinePlaceholder":145},[47,18674,18675],{"class":49,"line":1736},[47,18676,4088],{"class":221},[47,18678,18679],{"class":49,"line":1741},[47,18680,2493],{"emptyLinePlaceholder":145},[47,18682,18683,18685,18687],{"class":49,"line":1747},[47,18684,5457],{"class":217},[47,18686,5681],{"class":53},[47,18688,2069],{"class":221},[47,18690,18691],{"class":49,"line":1768},[47,18692,1640],{"class":221},[47,18694,18695,18698],{"class":49,"line":1773},[47,18696,18697],{"class":221},"    Person p;",[47,18699,18700],{"class":279},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[47,18702,18703],{"class":49,"line":1787},[47,18704,1659],{"class":221},[47,18706,18707],{"class":49,"line":1792},[47,18708,2493],{"emptyLinePlaceholder":145},[47,18710,18711,18713,18715],{"class":49,"line":1821},[47,18712,225],{"class":217},[47,18714,2066],{"class":53},[47,18716,10946],{"class":221},[47,18718,18719],{"class":49,"line":1826},[47,18720,13303],{"class":221},[47,18722,18723],{"class":49,"line":1843},[47,18724,18725],{"class":279},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[47,18727,18728],{"class":49,"line":1848},[47,18729,2493],{"emptyLinePlaceholder":145},[47,18731,18732,18734],{"class":49,"line":1853},[47,18733,18697],{"class":221},[47,18735,18736],{"class":279},"\u002F\u002F只有构造函数\n",[47,18738,18739],{"class":49,"line":1858},[47,18740,2493],{"emptyLinePlaceholder":145},[47,18742,18743,18745,18747,18749,18751],{"class":49,"line":1872},[47,18744,2396],{"class":53},[47,18746,222],{"class":221},[47,18748,2401],{"class":81},[47,18750,6059],{"class":221},[47,18752,18753],{"class":279},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[47,18755,18756],{"class":49,"line":1877},[47,18757,2493],{"emptyLinePlaceholder":145},[47,18759,18760,18762,18764],{"class":49,"line":2670},[47,18761,4183],{"class":217},[47,18763,4186],{"class":85},[47,18765,1384],{"class":221},[47,18767,18768],{"class":49,"line":2684},[47,18769,1659],{"class":221},[19,18771,18772],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[187,18774,18776],{"id":18775},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,18778,18779],{},"两种分类方式：",[19,18781,18782],{},"​\t按参数分为： 有参构造和无参构造",[19,18784,18785],{},"​\t按类型分为： 普通构造和拷贝构造",[19,18787,18788],{},"三种调用方式：",[19,18790,18791],{},"​\t括号法",[19,18793,18794],{},"​\t显示法",[19,18796,18797],{},"​\t隐式转换法",[38,18799,18801],{"className":208,"code":18800,"language":210,"meta":43,"style":43},"#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",[26,18802,18803,18809,18819,18824,18829,18834,18839,18843,18851,18855,18859,18863,18869,18873,18886,18890,18902,18906,18915,18928,18932,18936,18942,18946,18959,18963,18968,18984,18988,18993,19002,19015,19019,19025,19029,19034,19042,19046,19051,19055,19063,19067,19072,19077,19082,19087,19092,19096,19101,19106,19111,19116,19120,19125,19130,19146,19158,19163,19167,19172,19177,19182,19186,19191,19205,19218,19222,19230,19234,19240,19246,19254],{"__ignoreMap":43},[47,18804,18805,18807],{"class":49,"line":50},[47,18806,2043],{"class":217},[47,18808,2046],{"class":81},[47,18810,18811,18813,18815,18817],{"class":49,"line":92},[47,18812,2051],{"class":217},[47,18814,2054],{"class":217},[47,18816,2057],{"class":53},[47,18818,1384],{"class":221},[47,18820,18821],{"class":49,"line":1273},[47,18822,18823],{"class":279},"\u002F\u002F1.构造函数的分类及调用\n",[47,18825,18826],{"class":49,"line":1288},[47,18827,18828],{"class":279},"\u002F\u002F分类\n",[47,18830,18831],{"class":49,"line":1294},[47,18832,18833],{"class":279},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[47,18835,18836],{"class":49,"line":1308},[47,18837,18838],{"class":279},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[47,18840,18841],{"class":49,"line":1314},[47,18842,2493],{"emptyLinePlaceholder":145},[47,18844,18845,18847,18849],{"class":49,"line":1405},[47,18846,14787],{"class":217},[47,18848,15662],{"class":53},[47,18850,2767],{"class":221},[47,18852,18853],{"class":49,"line":1411},[47,18854,1640],{"class":221},[47,18856,18857],{"class":49,"line":1423},[47,18858,14809],{"class":217},[47,18860,18861],{"class":49,"line":1706},[47,18862,18607],{"class":279},[47,18864,18865,18867],{"class":49,"line":1711},[47,18866,18612],{"class":53},[47,18868,2069],{"class":221},[47,18870,18871],{"class":49,"line":1717},[47,18872,2123],{"class":221},[47,18874,18875,18877,18879,18882,18884],{"class":49,"line":1722},[47,18876,3544],{"class":221},[47,18878,1262],{"class":217},[47,18880,18881],{"class":81},"\"Person构造函数无参构造\"",[47,18883,1262],{"class":217},[47,18885,1285],{"class":221},[47,18887,18888],{"class":49,"line":1736},[47,18889,2280],{"class":221},[47,18891,18892,18894,18896,18898,18900],{"class":49,"line":1741},[47,18893,18612],{"class":53},[47,18895,222],{"class":221},[47,18897,225],{"class":217},[47,18899,1492],{"class":5309},[47,18901,228],{"class":221},[47,18903,18904],{"class":49,"line":1747},[47,18905,2123],{"class":221},[47,18907,18908,18911,18913],{"class":49,"line":1768},[47,18909,18910],{"class":221},"        age",[47,18912,267],{"class":217},[47,18914,6290],{"class":221},[47,18916,18917,18919,18921,18924,18926],{"class":49,"line":1773},[47,18918,3544],{"class":221},[47,18920,1262],{"class":217},[47,18922,18923],{"class":81},"\"Person构造函数有参构造\"",[47,18925,1262],{"class":217},[47,18927,1285],{"class":221},[47,18929,18930],{"class":49,"line":1787},[47,18931,2280],{"class":221},[47,18933,18934],{"class":49,"line":1792},[47,18935,18640],{"class":279},[47,18937,18938,18940],{"class":49,"line":1821},[47,18939,18645],{"class":53},[47,18941,2069],{"class":221},[47,18943,18944],{"class":49,"line":1826},[47,18945,2123],{"class":221},[47,18947,18948,18950,18952,18955,18957],{"class":49,"line":1843},[47,18949,3544],{"class":221},[47,18951,1262],{"class":217},[47,18953,18954],{"class":81},"\"Person析构函数被调用\"",[47,18956,1262],{"class":217},[47,18958,1285],{"class":221},[47,18960,18961],{"class":49,"line":1848},[47,18962,2280],{"class":221},[47,18964,18965],{"class":49,"line":1853},[47,18966,18967],{"class":279},"    \u002F\u002F拷贝构造函数\n",[47,18969,18970,18972,18974,18976,18978,18980,18982],{"class":49,"line":1858},[47,18971,18612],{"class":53},[47,18973,222],{"class":221},[47,18975,6885],{"class":217},[47,18977,15662],{"class":53},[47,18979,10677],{"class":217},[47,18981,19],{"class":5309},[47,18983,228],{"class":221},[47,18985,18986],{"class":49,"line":1872},[47,18987,2123],{"class":221},[47,18989,18990],{"class":49,"line":1877},[47,18991,18992],{"class":279},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[47,18994,18995,18997,18999],{"class":49,"line":2670},[47,18996,18910],{"class":221},[47,18998,267],{"class":217},[47,19000,19001],{"class":221},"p.age;\n",[47,19003,19004,19006,19008,19011,19013],{"class":49,"line":2684},[47,19005,3544],{"class":221},[47,19007,1262],{"class":217},[47,19009,19010],{"class":81},"\"Person拷贝构造函数被调用\"",[47,19012,1262],{"class":217},[47,19014,1285],{"class":221},[47,19016,19017],{"class":49,"line":2692},[47,19018,2280],{"class":221},[47,19020,19021,19023],{"class":49,"line":2697},[47,19022,2078],{"class":217},[47,19024,7890],{"class":221},[47,19026,19027],{"class":49,"line":2703},[47,19028,4088],{"class":221},[47,19030,19031],{"class":49,"line":2709},[47,19032,19033],{"class":279},"\u002F\u002F调用\n",[47,19035,19036,19038,19040],{"class":49,"line":2714},[47,19037,5457],{"class":217},[47,19039,5681],{"class":53},[47,19041,2069],{"class":221},[47,19043,19044],{"class":49,"line":8041},[47,19045,1640],{"class":221},[47,19047,19048],{"class":49,"line":8065},[47,19049,19050],{"class":279},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[47,19052,19053],{"class":49,"line":8070},[47,19054,1659],{"class":221},[47,19056,19057,19059,19061],{"class":49,"line":8076},[47,19058,5457],{"class":217},[47,19060,5750],{"class":53},[47,19062,2069],{"class":221},[47,19064,19065],{"class":49,"line":8103},[47,19066,1640],{"class":221},[47,19068,19069],{"class":49,"line":8108},[47,19070,19071],{"class":279},"    \u002F\u002F1.括号法\n",[47,19073,19074],{"class":49,"line":8114},[47,19075,19076],{"class":279},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[47,19078,19079],{"class":49,"line":8126},[47,19080,19081],{"class":279},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[47,19083,19084],{"class":49,"line":8138},[47,19085,19086],{"class":279},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[47,19088,19089],{"class":49,"line":8150},[47,19090,19091],{"class":279},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[47,19093,19094],{"class":49,"line":9809},[47,19095,2493],{"emptyLinePlaceholder":145},[47,19097,19098],{"class":49,"line":9834},[47,19099,19100],{"class":279},"    \u002F\u002F注意事项\n",[47,19102,19103],{"class":49,"line":9857},[47,19104,19105],{"class":279},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[47,19107,19108],{"class":49,"line":9881},[47,19109,19110],{"class":279},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[47,19112,19113],{"class":49,"line":9886},[47,19114,19115],{"class":279},"    \u002F\u002F Person p4();\n",[47,19117,19118],{"class":49,"line":9891},[47,19119,2493],{"emptyLinePlaceholder":145},[47,19121,19122],{"class":49,"line":9896},[47,19123,19124],{"class":279},"    \u002F\u002F2.显示法\n",[47,19126,19127],{"class":49,"line":9905},[47,19128,19129],{"class":221},"    Person p1;\n",[47,19131,19132,19135,19137,19140,19142,19144],{"class":49,"line":9910},[47,19133,19134],{"class":221},"    Person p2",[47,19136,267],{"class":217},[47,19138,19139],{"class":53},"Person",[47,19141,222],{"class":221},[47,19143,665],{"class":85},[47,19145,2812],{"class":221},[47,19147,19148,19151,19153,19155],{"class":49,"line":9916},[47,19149,19150],{"class":221},"    Person p3",[47,19152,267],{"class":217},[47,19154,19139],{"class":53},[47,19156,19157],{"class":221},"(p2);\n",[47,19159,19160],{"class":49,"line":9937},[47,19161,19162],{"class":279},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[47,19164,19165],{"class":49,"line":9943},[47,19166,2493],{"emptyLinePlaceholder":145},[47,19168,19169],{"class":49,"line":9957},[47,19170,19171],{"class":279},"    \u002F\u002F 注意事项2\n",[47,19173,19174],{"class":49,"line":9963},[47,19175,19176],{"class":279},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[47,19178,19179],{"class":49,"line":9990},[47,19180,19181],{"class":279},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[47,19183,19184],{"class":49,"line":9999},[47,19185,2493],{"emptyLinePlaceholder":145},[47,19187,19188],{"class":49,"line":10005},[47,19189,19190],{"class":279},"    \u002F\u002F3.隐士转换法\n",[47,19192,19193,19196,19198,19200,19202],{"class":49,"line":10013},[47,19194,19195],{"class":221},"    Person p4",[47,19197,267],{"class":217},[47,19199,665],{"class":85},[47,19201,276],{"class":221},[47,19203,19204],{"class":279},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[47,19206,19207,19210,19212,19215],{"class":49,"line":10018},[47,19208,19209],{"class":221},"    Person p5",[47,19211,267],{"class":217},[47,19213,19214],{"class":221},"p4;",[47,19216,19217],{"class":279}," \u002F\u002F 这里会调用拷贝构造函数\n",[47,19219,19220],{"class":49,"line":16697},[47,19221,1659],{"class":221},[47,19223,19224,19226,19228],{"class":49,"line":16703},[47,19225,225],{"class":217},[47,19227,2066],{"class":53},[47,19229,2069],{"class":221},[47,19231,19232],{"class":49,"line":16726},[47,19233,1640],{"class":221},[47,19235,19236,19238],{"class":49,"line":16732},[47,19237,5726],{"class":53},[47,19239,5729],{"class":221},[47,19241,19242,19244],{"class":49,"line":16755},[47,19243,5795],{"class":53},[47,19245,5729],{"class":221},[47,19247,19248,19250,19252],{"class":49,"line":16769},[47,19249,4183],{"class":217},[47,19251,4186],{"class":85},[47,19253,1384],{"class":221},[47,19255,19256],{"class":49,"line":16789},[47,19257,1659],{"class":221},[19,19259,19260,19263],{},[369,19261,19262],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[187,19265,19267],{"id":19266},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,19269,19270],{},"C++中拷贝构造函数调用时机通常有三种情况",[106,19272,19273,19276,19279],{},[109,19274,19275],{},"使用一个已经创建完毕的对象来初始化一个新对象",[109,19277,19278],{},"值传递的方式给函数参数传值",[109,19280,19281],{},"以值方式返回局部对象",[38,19283,19285],{"className":208,"code":19284,"language":210,"meta":43,"style":43},"#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",[26,19286,19287,19293,19303,19307,19312,19316,19321,19326,19331,19337,19341,19345,19351,19355,19368,19372,19377,19389,19393,19401,19414,19418,19422,19438,19442,19451,19464,19468,19474,19478,19490,19494,19500,19504,19508,19516,19520,19533,19541,19559,19563,19568,19573,19588,19592,19605,19609,19617,19621,19625,19633,19637,19642,19651,19655,19659,19684,19694,19698,19706,19710,19721,19746,19750,19754,19758,19766,19770,19775,19780,19787,19792,19797,19802,19807,19811,19816,19820,19825,19829,19834,19839,19843,19847,19852,19857,19865],{"__ignoreMap":43},[47,19288,19289,19291],{"class":49,"line":50},[47,19290,2043],{"class":217},[47,19292,2046],{"class":81},[47,19294,19295,19297,19299,19301],{"class":49,"line":92},[47,19296,2051],{"class":217},[47,19298,2054],{"class":217},[47,19300,2057],{"class":53},[47,19302,1384],{"class":221},[47,19304,19305],{"class":49,"line":1273},[47,19306,2493],{"emptyLinePlaceholder":145},[47,19308,19309],{"class":49,"line":1288},[47,19310,19311],{"class":279},"\u002F\u002F拷贝构造函数调用时机\n",[47,19313,19314],{"class":49,"line":1294},[47,19315,2493],{"emptyLinePlaceholder":145},[47,19317,19318],{"class":49,"line":1308},[47,19319,19320],{"class":279},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[47,19322,19323],{"class":49,"line":1314},[47,19324,19325],{"class":279},"\u002F\u002F2.值传递的方式给函数参数传值\n",[47,19327,19328],{"class":49,"line":1405},[47,19329,19330],{"class":279},"\u002F\u002F3.以值方式返回局部对象\n",[47,19332,19333,19335],{"class":49,"line":1411},[47,19334,14787],{"class":217},[47,19336,15264],{"class":53},[47,19338,19339],{"class":49,"line":1423},[47,19340,1640],{"class":221},[47,19342,19343],{"class":49,"line":1706},[47,19344,14809],{"class":217},[47,19346,19347,19349],{"class":49,"line":1711},[47,19348,18612],{"class":53},[47,19350,2069],{"class":221},[47,19352,19353],{"class":49,"line":1717},[47,19354,2123],{"class":221},[47,19356,19357,19359,19361,19364,19366],{"class":49,"line":1722},[47,19358,9762],{"class":221},[47,19360,1262],{"class":217},[47,19362,19363],{"class":81}," \"Person的默认构造函数调用\"",[47,19365,1538],{"class":217},[47,19367,8933],{"class":221},[47,19369,19370],{"class":49,"line":1736},[47,19371,2280],{"class":221},[47,19373,19374],{"class":49,"line":1741},[47,19375,19376],{"class":279},"    \u002F\u002F有参构造\n",[47,19378,19379,19381,19383,19385,19387],{"class":49,"line":1747},[47,19380,18612],{"class":53},[47,19382,222],{"class":221},[47,19384,225],{"class":217},[47,19386,15782],{"class":5309},[47,19388,228],{"class":221},[47,19390,19391],{"class":49,"line":1768},[47,19392,2123],{"class":221},[47,19394,19395,19397,19399],{"class":49,"line":1773},[47,19396,15836],{"class":221},[47,19398,267],{"class":217},[47,19400,7890],{"class":221},[47,19402,19403,19405,19407,19410,19412],{"class":49,"line":1787},[47,19404,9762],{"class":221},[47,19406,1262],{"class":217},[47,19408,19409],{"class":81}," \"Person的有参构造函数调用\"",[47,19411,1538],{"class":217},[47,19413,8933],{"class":221},[47,19415,19416],{"class":49,"line":1792},[47,19417,2280],{"class":221},[47,19419,19420],{"class":49,"line":1821},[47,19421,18967],{"class":279},[47,19423,19424,19426,19428,19430,19432,19434,19436],{"class":49,"line":1826},[47,19425,18612],{"class":53},[47,19427,222],{"class":221},[47,19429,6885],{"class":217},[47,19431,15662],{"class":53},[47,19433,10677],{"class":217},[47,19435,19],{"class":5309},[47,19437,228],{"class":221},[47,19439,19440],{"class":49,"line":1843},[47,19441,2123],{"class":221},[47,19443,19444,19446,19448],{"class":49,"line":1848},[47,19445,15836],{"class":221},[47,19447,267],{"class":217},[47,19449,19450],{"class":221}," p.m_Age;\n",[47,19452,19453,19455,19457,19460,19462],{"class":49,"line":1853},[47,19454,9762],{"class":221},[47,19456,1262],{"class":217},[47,19458,19459],{"class":81}," \"Person的拷贝构造函数调用\"",[47,19461,1538],{"class":217},[47,19463,8933],{"class":221},[47,19465,19466],{"class":49,"line":1858},[47,19467,2280],{"class":221},[47,19469,19470,19472],{"class":49,"line":1872},[47,19471,18645],{"class":53},[47,19473,2069],{"class":221},[47,19475,19476],{"class":49,"line":1877},[47,19477,2123],{"class":221},[47,19479,19480,19482,19484,19486,19488],{"class":49,"line":2670},[47,19481,9762],{"class":221},[47,19483,1262],{"class":217},[47,19485,18660],{"class":81},[47,19487,1538],{"class":217},[47,19489,8933],{"class":221},[47,19491,19492],{"class":49,"line":2684},[47,19493,2280],{"class":221},[47,19495,19496,19498],{"class":49,"line":2692},[47,19497,2078],{"class":217},[47,19499,15759],{"class":221},[47,19501,19502],{"class":49,"line":2697},[47,19503,4088],{"class":221},[47,19505,19506],{"class":49,"line":2703},[47,19507,19320],{"class":279},[47,19509,19510,19512,19514],{"class":49,"line":2709},[47,19511,5457],{"class":217},[47,19513,5681],{"class":53},[47,19515,2069],{"class":221},[47,19517,19518],{"class":49,"line":2714},[47,19519,1640],{"class":221},[47,19521,19522,19525,19527,19529,19531],{"class":49,"line":8041},[47,19523,19524],{"class":221},"    Person ",[47,19526,7223],{"class":53},[47,19528,222],{"class":221},[47,19530,919],{"class":85},[47,19532,2812],{"class":221},[47,19534,19535,19537,19539],{"class":49,"line":8065},[47,19536,19524],{"class":221},[47,19538,7126],{"class":53},[47,19540,17608],{"class":221},[47,19542,19543,19545,19547,19550,19552,19555,19557],{"class":49,"line":8070},[47,19544,1645],{"class":221},[47,19546,1262],{"class":217},[47,19548,19549],{"class":81},"\"P2的年龄为：\"",[47,19551,1262],{"class":217},[47,19553,19554],{"class":221},"p2.m_Age",[47,19556,1262],{"class":217},[47,19558,1285],{"class":221},[47,19560,19561],{"class":49,"line":8076},[47,19562,1659],{"class":221},[47,19564,19565],{"class":49,"line":8103},[47,19566,19567],{"class":279},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[47,19569,19570],{"class":49,"line":8108},[47,19571,19572],{"class":279},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[47,19574,19575,19577,19580,19582,19584,19586],{"class":49,"line":8114},[47,19576,5457],{"class":217},[47,19578,19579],{"class":53}," doWork",[47,19581,222],{"class":221},[47,19583,19139],{"class":53},[47,19585,6918],{"class":5309},[47,19587,228],{"class":221},[47,19589,19590],{"class":49,"line":8126},[47,19591,1640],{"class":221},[47,19593,19594,19596,19598,19601,19603],{"class":49,"line":8138},[47,19595,6622],{"class":221},[47,19597,1262],{"class":217},[47,19599,19600],{"class":81}," \"doWork函数调用\"",[47,19602,1538],{"class":217},[47,19604,8933],{"class":221},[47,19606,19607],{"class":49,"line":8150},[47,19608,1659],{"class":221},[47,19610,19611,19613,19615],{"class":49,"line":9809},[47,19612,5457],{"class":217},[47,19614,5750],{"class":53},[47,19616,2069],{"class":221},[47,19618,19619],{"class":49,"line":9834},[47,19620,1640],{"class":221},[47,19622,19623],{"class":49,"line":9857},[47,19624,15406],{"class":221},[47,19626,19627,19630],{"class":49,"line":9881},[47,19628,19629],{"class":53},"    doWork",[47,19631,19632],{"class":221},"(p);\n",[47,19634,19635],{"class":49,"line":9886},[47,19636,1659],{"class":221},[47,19638,19639],{"class":49,"line":9891},[47,19640,19641],{"class":279},"\u002F\u002F 3.以值方式返回局部对象\n",[47,19643,19644,19646,19649],{"class":49,"line":9896},[47,19645,19139],{"class":53},[47,19647,19648],{"class":53}," doWork2",[47,19650,2069],{"class":221},[47,19652,19653],{"class":49,"line":9905},[47,19654,1640],{"class":221},[47,19656,19657],{"class":49,"line":9910},[47,19658,19129],{"class":221},[47,19660,19661,19663,19665,19667,19669,19671,19673,19675,19677,19679,19681],{"class":49,"line":9916},[47,19662,1645],{"class":221},[47,19664,1262],{"class":217},[47,19666,222],{"class":221},[47,19668,225],{"class":217},[47,19670,6611],{"class":217},[47,19672,648],{"class":221},[47,19674,572],{"class":217},[47,19676,7223],{"class":221},[47,19678,1262],{"class":217},[47,19680,1332],{"class":221},[47,19682,19683],{"class":279},"\u002F\u002F打印p1的地址\n",[47,19685,19686,19688,19691],{"class":49,"line":9937},[47,19687,4183],{"class":217},[47,19689,19690],{"class":221}," p1;",[47,19692,19693],{"class":279},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[47,19695,19696],{"class":49,"line":9943},[47,19697,1659],{"class":221},[47,19699,19700,19702,19704],{"class":49,"line":9957},[47,19701,5457],{"class":217},[47,19703,5822],{"class":53},[47,19705,2069],{"class":221},[47,19707,19708],{"class":49,"line":9963},[47,19709,1640],{"class":221},[47,19711,19712,19715,19717,19719],{"class":49,"line":9990},[47,19713,19714],{"class":221},"    Person p ",[47,19716,267],{"class":217},[47,19718,19648],{"class":53},[47,19720,5729],{"class":221},[47,19722,19723,19725,19727,19729,19731,19733,19735,19737,19739,19741,19743],{"class":49,"line":9999},[47,19724,1645],{"class":221},[47,19726,1262],{"class":217},[47,19728,222],{"class":221},[47,19730,225],{"class":217},[47,19732,6611],{"class":217},[47,19734,648],{"class":221},[47,19736,572],{"class":217},[47,19738,19],{"class":221},[47,19740,1262],{"class":217},[47,19742,1332],{"class":221},[47,19744,19745],{"class":279},"\u002F\u002F打印p的地址\n",[47,19747,19748],{"class":49,"line":10005},[47,19749,1659],{"class":221},[47,19751,19752],{"class":49,"line":10013},[47,19753,2493],{"emptyLinePlaceholder":145},[47,19755,19756],{"class":49,"line":10018},[47,19757,2493],{"emptyLinePlaceholder":145},[47,19759,19760,19762,19764],{"class":49,"line":16697},[47,19761,225],{"class":217},[47,19763,2066],{"class":53},[47,19765,2069],{"class":221},[47,19767,19768],{"class":49,"line":16703},[47,19769,1640],{"class":221},[47,19771,19772],{"class":49,"line":16726},[47,19773,19774],{"class":279},"    \u002F\u002F test01();\n",[47,19776,19777],{"class":49,"line":16732},[47,19778,19779],{"class":279},"    \u002F\u002F test02();\n",[47,19781,19782,19785],{"class":49,"line":16755},[47,19783,19784],{"class":53},"    test03",[47,19786,5729],{"class":221},[47,19788,19789],{"class":49,"line":16769},[47,19790,19791],{"class":279},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[47,19793,19794],{"class":49,"line":16789},[47,19795,19796],{"class":279},"\u002F\u002F 输出结果如下：\n",[47,19798,19799],{"class":49,"line":16795},[47,19800,19801],{"class":279},"\u002F\u002F Person的默认构造函数调用\n",[47,19803,19804],{"class":49,"line":16806},[47,19805,19806],{"class":279},"\u002F\u002F 0x7fffffffceec\n",[47,19808,19809],{"class":49,"line":16829},[47,19810,19806],{"class":279},[47,19812,19813],{"class":49,"line":16851},[47,19814,19815],{"class":279},"\u002F\u002F Person的析构函数调用\n",[47,19817,19818],{"class":49,"line":16856},[47,19819,2493],{"emptyLinePlaceholder":145},[47,19821,19822],{"class":49,"line":16862},[47,19823,19824],{"class":279},"\u002F\u002F 之前的输出结果如下：\n",[47,19826,19827],{"class":49,"line":16876},[47,19828,19801],{"class":279},[47,19830,19831],{"class":49,"line":16889},[47,19832,19833],{"class":279},"\u002F\u002F 地址\n",[47,19835,19836],{"class":49,"line":16894},[47,19837,19838],{"class":279},"\u002F\u002F Person的拷贝构造函数调用\n",[47,19840,19841],{"class":49,"line":16908},[47,19842,19815],{"class":279},[47,19844,19845],{"class":49,"line":16913},[47,19846,19833],{"class":279},[47,19848,19849],{"class":49,"line":16919},[47,19850,19851],{"class":279},"\u002F\u002F (这两次输出的地址也是不同的) \n",[47,19853,19854],{"class":49,"line":16924},[47,19855,19856],{"class":279},"\u002F\u002F Person的析构函数调用     \n",[47,19858,19859,19861,19863],{"class":49,"line":16938},[47,19860,4183],{"class":217},[47,19862,4186],{"class":85},[47,19864,1384],{"class":221},[47,19866,19867],{"class":49,"line":16943},[47,19868,1659],{"class":221},[19,19870,19871],{},"简化版理解",[38,19873,19875],{"className":208,"code":19874,"language":210,"meta":43,"style":43},"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",[26,19876,19877,19885,19889,19895,19908,19919,19923,19935,19948,19956,19960,19976,19989,19998,20002,20007,20013,20026,20030,20034,20041,20045,20049,20054,20062,20066,20082,20095,20108,20112,20117,20125,20129,20133,20138,20143,20159,20167,20174,20180,20184,20188,20193,20201,20205,20209,20232,20239,20243,20247,20255,20259,20269,20291,20295,20299,20303,20311,20315,20320,20325,20331,20335,20345,20349,20357],{"__ignoreMap":43},[47,19878,19879,19881,19883],{"class":49,"line":50},[47,19880,14787],{"class":217},[47,19882,15662],{"class":53},[47,19884,15665],{"class":221},[47,19886,19887],{"class":49,"line":92},[47,19888,14809],{"class":217},[47,19890,19891,19893],{"class":49,"line":1273},[47,19892,18612],{"class":53},[47,19894,10946],{"class":221},[47,19896,19897,19899,19901,19904,19906],{"class":49,"line":1288},[47,19898,9762],{"class":221},[47,19900,1262],{"class":217},[47,19902,19903],{"class":81}," \"无参构造函数!\"",[47,19905,1538],{"class":217},[47,19907,8933],{"class":221},[47,19909,19910,19913,19915,19917],{"class":49,"line":1294},[47,19911,19912],{"class":221},"        mAge ",[47,19914,267],{"class":217},[47,19916,4186],{"class":85},[47,19918,1384],{"class":221},[47,19920,19921],{"class":49,"line":1308},[47,19922,2280],{"class":221},[47,19924,19925,19927,19929,19931,19933],{"class":49,"line":1314},[47,19926,18612],{"class":53},[47,19928,222],{"class":221},[47,19930,225],{"class":217},[47,19932,15782],{"class":5309},[47,19934,12535],{"class":221},[47,19936,19937,19939,19941,19944,19946],{"class":49,"line":1405},[47,19938,9762],{"class":221},[47,19940,1262],{"class":217},[47,19942,19943],{"class":81}," \"有参构造函数!\"",[47,19945,1538],{"class":217},[47,19947,8933],{"class":221},[47,19949,19950,19952,19954],{"class":49,"line":1411},[47,19951,19912],{"class":221},[47,19953,267],{"class":217},[47,19955,7890],{"class":221},[47,19957,19958],{"class":49,"line":1423},[47,19959,2280],{"class":221},[47,19961,19962,19964,19966,19968,19970,19972,19974],{"class":49,"line":1706},[47,19963,18612],{"class":53},[47,19965,222],{"class":221},[47,19967,6885],{"class":217},[47,19969,15662],{"class":53},[47,19971,572],{"class":217},[47,19973,6918],{"class":5309},[47,19975,12535],{"class":221},[47,19977,19978,19980,19982,19985,19987],{"class":49,"line":1711},[47,19979,9762],{"class":221},[47,19981,1262],{"class":217},[47,19983,19984],{"class":81}," \"拷贝构造函数!\"",[47,19986,1538],{"class":217},[47,19988,8933],{"class":221},[47,19990,19991,19993,19995],{"class":49,"line":1717},[47,19992,19912],{"class":221},[47,19994,267],{"class":217},[47,19996,19997],{"class":221}," p.mAge;\n",[47,19999,20000],{"class":49,"line":1722},[47,20001,2280],{"class":221},[47,20003,20004],{"class":49,"line":1736},[47,20005,20006],{"class":279},"    \u002F\u002F析构函数在释放内存之前调用\n",[47,20008,20009,20011],{"class":49,"line":1741},[47,20010,18645],{"class":53},[47,20012,10946],{"class":221},[47,20014,20015,20017,20019,20022,20024],{"class":49,"line":1747},[47,20016,9762],{"class":221},[47,20018,1262],{"class":217},[47,20020,20021],{"class":81}," \"析构函数!\"",[47,20023,1538],{"class":217},[47,20025,8933],{"class":221},[47,20027,20028],{"class":49,"line":1768},[47,20029,2280],{"class":221},[47,20031,20032],{"class":49,"line":1773},[47,20033,14809],{"class":217},[47,20035,20036,20038],{"class":49,"line":1787},[47,20037,2078],{"class":217},[47,20039,20040],{"class":221}," mAge;\n",[47,20042,20043],{"class":49,"line":1792},[47,20044,4088],{"class":221},[47,20046,20047],{"class":49,"line":1821},[47,20048,2493],{"emptyLinePlaceholder":145},[47,20050,20051],{"class":49,"line":1826},[47,20052,20053],{"class":279},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[47,20055,20056,20058,20060],{"class":49,"line":1843},[47,20057,5457],{"class":217},[47,20059,5681],{"class":53},[47,20061,10946],{"class":221},[47,20063,20064],{"class":49,"line":1848},[47,20065,2493],{"emptyLinePlaceholder":145},[47,20067,20068,20070,20073,20075,20077,20079],{"class":49,"line":1853},[47,20069,19524],{"class":221},[47,20071,20072],{"class":53},"man",[47,20074,222],{"class":221},[47,20076,530],{"class":85},[47,20078,6059],{"class":221},[47,20080,20081],{"class":279}," \u002F\u002Fp对象已经创建完毕\n",[47,20083,20084,20086,20089,20092],{"class":49,"line":1858},[47,20085,19524],{"class":221},[47,20087,20088],{"class":53},"newman",[47,20090,20091],{"class":221},"(man);",[47,20093,20094],{"class":279}," \u002F\u002F调用拷贝构造函数\n",[47,20096,20097,20100,20102,20105],{"class":49,"line":1872},[47,20098,20099],{"class":221},"    Person newman2 ",[47,20101,267],{"class":217},[47,20103,20104],{"class":221}," man;",[47,20106,20107],{"class":279}," \u002F\u002F拷贝构造\n",[47,20109,20110],{"class":49,"line":1877},[47,20111,2493],{"emptyLinePlaceholder":145},[47,20113,20114],{"class":49,"line":2670},[47,20115,20116],{"class":279},"    \u002F\u002FPerson newman3;\n",[47,20118,20119,20122],{"class":49,"line":2684},[47,20120,20121],{"class":279},"    \u002F\u002Fnewman3 = man;",[47,20123,20124],{"class":279}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[47,20126,20127],{"class":49,"line":2692},[47,20128,1659],{"class":221},[47,20130,20131],{"class":49,"line":2697},[47,20132,2493],{"emptyLinePlaceholder":145},[47,20134,20135],{"class":49,"line":2703},[47,20136,20137],{"class":279},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[47,20139,20140],{"class":49,"line":2709},[47,20141,20142],{"class":279},"\u002F\u002F相当于Person p1 = p;\n",[47,20144,20145,20147,20149,20151,20153,20156],{"class":49,"line":2714},[47,20146,5457],{"class":217},[47,20148,19579],{"class":53},[47,20150,222],{"class":221},[47,20152,19139],{"class":53},[47,20154,20155],{"class":5309}," p1",[47,20157,20158],{"class":221},") {}\n",[47,20160,20161,20163,20165],{"class":49,"line":8041},[47,20162,5457],{"class":217},[47,20164,5750],{"class":53},[47,20166,10946],{"class":221},[47,20168,20169,20171],{"class":49,"line":8065},[47,20170,18697],{"class":221},[47,20172,20173],{"class":279}," \u002F\u002F无参构造函数\n",[47,20175,20176,20178],{"class":49,"line":8070},[47,20177,19629],{"class":53},[47,20179,19632],{"class":221},[47,20181,20182],{"class":49,"line":8076},[47,20183,1659],{"class":221},[47,20185,20186],{"class":49,"line":8103},[47,20187,2493],{"emptyLinePlaceholder":145},[47,20189,20190],{"class":49,"line":8108},[47,20191,20192],{"class":279},"\u002F\u002F3. 以值方式返回局部对象\n",[47,20194,20195,20197,20199],{"class":49,"line":8114},[47,20196,19139],{"class":53},[47,20198,19648],{"class":53},[47,20200,2069],{"class":221},[47,20202,20203],{"class":49,"line":8126},[47,20204,1640],{"class":221},[47,20206,20207],{"class":49,"line":8138},[47,20208,19129],{"class":221},[47,20210,20211,20213,20215,20217,20219,20221,20223,20225,20228,20230],{"class":49,"line":8150},[47,20212,6622],{"class":221},[47,20214,1262],{"class":217},[47,20216,1752],{"class":221},[47,20218,225],{"class":217},[47,20220,6611],{"class":217},[47,20222,648],{"class":221},[47,20224,572],{"class":217},[47,20226,20227],{"class":221},"p1 ",[47,20229,1262],{"class":217},[47,20231,8933],{"class":221},[47,20233,20234,20236],{"class":49,"line":9809},[47,20235,4183],{"class":217},[47,20237,20238],{"class":221}," p1;\n",[47,20240,20241],{"class":49,"line":9834},[47,20242,1659],{"class":221},[47,20244,20245],{"class":49,"line":9857},[47,20246,2493],{"emptyLinePlaceholder":145},[47,20248,20249,20251,20253],{"class":49,"line":9881},[47,20250,5457],{"class":217},[47,20252,5822],{"class":53},[47,20254,2069],{"class":221},[47,20256,20257],{"class":49,"line":9886},[47,20258,1640],{"class":221},[47,20260,20261,20263,20265,20267],{"class":49,"line":9891},[47,20262,19714],{"class":221},[47,20264,267],{"class":217},[47,20266,19648],{"class":53},[47,20268,5729],{"class":221},[47,20270,20271,20273,20275,20277,20279,20281,20283,20285,20287,20289],{"class":49,"line":9896},[47,20272,6622],{"class":221},[47,20274,1262],{"class":217},[47,20276,1752],{"class":221},[47,20278,225],{"class":217},[47,20280,6611],{"class":217},[47,20282,648],{"class":221},[47,20284,572],{"class":217},[47,20286,11541],{"class":221},[47,20288,1262],{"class":217},[47,20290,8933],{"class":221},[47,20292,20293],{"class":49,"line":9905},[47,20294,1659],{"class":221},[47,20296,20297],{"class":49,"line":9910},[47,20298,2493],{"emptyLinePlaceholder":145},[47,20300,20301],{"class":49,"line":9916},[47,20302,2493],{"emptyLinePlaceholder":145},[47,20304,20305,20307,20309],{"class":49,"line":9937},[47,20306,225],{"class":217},[47,20308,2066],{"class":53},[47,20310,10946],{"class":221},[47,20312,20313],{"class":49,"line":9943},[47,20314,2493],{"emptyLinePlaceholder":145},[47,20316,20317],{"class":49,"line":9957},[47,20318,20319],{"class":279},"    \u002F\u002Ftest01();\n",[47,20321,20322],{"class":49,"line":9963},[47,20323,20324],{"class":279},"    \u002F\u002Ftest02();\n",[47,20326,20327,20329],{"class":49,"line":9990},[47,20328,19784],{"class":53},[47,20330,5729],{"class":221},[47,20332,20333],{"class":49,"line":9999},[47,20334,2493],{"emptyLinePlaceholder":145},[47,20336,20337,20339,20341,20343],{"class":49,"line":10005},[47,20338,2396],{"class":53},[47,20340,222],{"class":221},[47,20342,2401],{"class":81},[47,20344,2812],{"class":221},[47,20346,20347],{"class":49,"line":10013},[47,20348,2493],{"emptyLinePlaceholder":145},[47,20350,20351,20353,20355],{"class":49,"line":10018},[47,20352,4183],{"class":217},[47,20354,4186],{"class":85},[47,20356,1384],{"class":221},[47,20358,20359],{"class":49,"line":16697},[47,20360,1659],{"class":221},[187,20362,20364],{"id":20363},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,20366,20367],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,20369,20370],{},"1．默认构造函数(无参，函数体为空)",[19,20372,20373],{},"2．默认析构函数(无参，函数体为空)",[19,20375,20376],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,20378,20379],{},"构造函数调用规则如下：",[106,20381,20382,20385],{},[109,20383,20384],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[109,20386,20387],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[38,20389,20391],{"className":208,"code":20390,"language":210,"meta":43,"style":43},"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",[26,20392,20393,20401,20405,20410,20416,20428,20432,20437,20449,20458,20470,20474,20478,20494,20503,20515,20519,20523,20529,20541,20545,20549,20555,20559,20563,20571,20575,20587,20592,20600,20604,20622,20626,20630,20638,20642,20647,20655,20670,20683,20687,20692,20699,20715,20728,20732,20736,20744,20748,20754,20758,20768,20772,20780],{"__ignoreMap":43},[47,20394,20395,20397,20399],{"class":49,"line":50},[47,20396,14787],{"class":217},[47,20398,15662],{"class":53},[47,20400,15665],{"class":221},[47,20402,20403],{"class":49,"line":92},[47,20404,14809],{"class":217},[47,20406,20407],{"class":49,"line":1273},[47,20408,20409],{"class":279},"    \u002F\u002F无参（默认）构造函数\n",[47,20411,20412,20414],{"class":49,"line":1288},[47,20413,18612],{"class":53},[47,20415,10946],{"class":221},[47,20417,20418,20420,20422,20424,20426],{"class":49,"line":1294},[47,20419,9762],{"class":221},[47,20421,1262],{"class":217},[47,20423,19903],{"class":81},[47,20425,1538],{"class":217},[47,20427,8933],{"class":221},[47,20429,20430],{"class":49,"line":1308},[47,20431,2280],{"class":221},[47,20433,20434],{"class":49,"line":1314},[47,20435,20436],{"class":279},"    \u002F\u002F有参构造函数\n",[47,20438,20439,20441,20443,20445,20447],{"class":49,"line":1405},[47,20440,18612],{"class":53},[47,20442,222],{"class":221},[47,20444,225],{"class":217},[47,20446,1492],{"class":5309},[47,20448,12535],{"class":221},[47,20450,20451,20454,20456],{"class":49,"line":1411},[47,20452,20453],{"class":221},"        age ",[47,20455,267],{"class":217},[47,20457,1526],{"class":221},[47,20459,20460,20462,20464,20466,20468],{"class":49,"line":1423},[47,20461,9762],{"class":221},[47,20463,1262],{"class":217},[47,20465,19943],{"class":81},[47,20467,1538],{"class":217},[47,20469,8933],{"class":221},[47,20471,20472],{"class":49,"line":1706},[47,20473,2280],{"class":221},[47,20475,20476],{"class":49,"line":1711},[47,20477,18967],{"class":279},[47,20479,20480,20482,20484,20486,20488,20490,20492],{"class":49,"line":1717},[47,20481,18612],{"class":53},[47,20483,222],{"class":221},[47,20485,6885],{"class":217},[47,20487,15662],{"class":53},[47,20489,572],{"class":217},[47,20491,6918],{"class":5309},[47,20493,12535],{"class":221},[47,20495,20496,20498,20500],{"class":49,"line":1722},[47,20497,20453],{"class":221},[47,20499,267],{"class":217},[47,20501,20502],{"class":221}," p.age;\n",[47,20504,20505,20507,20509,20511,20513],{"class":49,"line":1736},[47,20506,9762],{"class":221},[47,20508,1262],{"class":217},[47,20510,19984],{"class":81},[47,20512,1538],{"class":217},[47,20514,8933],{"class":221},[47,20516,20517],{"class":49,"line":1741},[47,20518,2280],{"class":221},[47,20520,20521],{"class":49,"line":1747},[47,20522,18640],{"class":279},[47,20524,20525,20527],{"class":49,"line":1768},[47,20526,18645],{"class":53},[47,20528,10946],{"class":221},[47,20530,20531,20533,20535,20537,20539],{"class":49,"line":1773},[47,20532,9762],{"class":221},[47,20534,1262],{"class":217},[47,20536,20021],{"class":81},[47,20538,1538],{"class":217},[47,20540,8933],{"class":221},[47,20542,20543],{"class":49,"line":1787},[47,20544,2280],{"class":221},[47,20546,20547],{"class":49,"line":1792},[47,20548,14809],{"class":217},[47,20550,20551,20553],{"class":49,"line":1821},[47,20552,2078],{"class":217},[47,20554,7890],{"class":221},[47,20556,20557],{"class":49,"line":1826},[47,20558,4088],{"class":221},[47,20560,20561],{"class":49,"line":1843},[47,20562,2493],{"emptyLinePlaceholder":145},[47,20564,20565,20567,20569],{"class":49,"line":1848},[47,20566,5457],{"class":217},[47,20568,5681],{"class":53},[47,20570,2069],{"class":221},[47,20572,20573],{"class":49,"line":1853},[47,20574,1640],{"class":221},[47,20576,20577,20579,20581,20583,20585],{"class":49,"line":1858},[47,20578,19524],{"class":221},[47,20580,7223],{"class":53},[47,20582,222],{"class":221},[47,20584,869],{"class":85},[47,20586,2812],{"class":221},[47,20588,20589],{"class":49,"line":1872},[47,20590,20591],{"class":279},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[47,20593,20594,20596,20598],{"class":49,"line":1877},[47,20595,19524],{"class":221},[47,20597,7126],{"class":53},[47,20599,17608],{"class":221},[47,20601,20602],{"class":49,"line":2670},[47,20603,2493],{"emptyLinePlaceholder":145},[47,20605,20606,20608,20610,20613,20615,20618,20620],{"class":49,"line":2684},[47,20607,6622],{"class":221},[47,20609,1262],{"class":217},[47,20611,20612],{"class":81}," \"p2的年龄为： \"",[47,20614,1538],{"class":217},[47,20616,20617],{"class":221}," p2.age ",[47,20619,1262],{"class":217},[47,20621,8933],{"class":221},[47,20623,20624],{"class":49,"line":2692},[47,20625,1659],{"class":221},[47,20627,20628],{"class":49,"line":2697},[47,20629,2493],{"emptyLinePlaceholder":145},[47,20631,20632,20634,20636],{"class":49,"line":2703},[47,20633,5457],{"class":217},[47,20635,5750],{"class":53},[47,20637,2069],{"class":221},[47,20639,20640],{"class":49,"line":2709},[47,20641,1640],{"class":221},[47,20643,20644],{"class":49,"line":2714},[47,20645,20646],{"class":279},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[47,20648,20649,20652],{"class":49,"line":8041},[47,20650,20651],{"class":221},"    Person p1;",[47,20653,20654],{"class":279}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[47,20656,20657,20659,20661,20663,20665,20667],{"class":49,"line":8065},[47,20658,19524],{"class":221},[47,20660,7126],{"class":53},[47,20662,222],{"class":221},[47,20664,665],{"class":85},[47,20666,6059],{"class":221},[47,20668,20669],{"class":279}," \u002F\u002F用户提供的有参\n",[47,20671,20672,20674,20677,20680],{"class":49,"line":8070},[47,20673,19524],{"class":221},[47,20675,20676],{"class":53},"p3",[47,20678,20679],{"class":221},"(p2);",[47,20681,20682],{"class":279}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[47,20684,20685],{"class":49,"line":8076},[47,20686,2493],{"emptyLinePlaceholder":145},[47,20688,20689],{"class":49,"line":8103},[47,20690,20691],{"class":279},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[47,20693,20694,20697],{"class":49,"line":8108},[47,20695,20696],{"class":221},"    Person p4;",[47,20698,20654],{"class":279},[47,20700,20701,20703,20706,20708,20710,20712],{"class":49,"line":8114},[47,20702,19524],{"class":221},[47,20704,20705],{"class":53},"p5",[47,20707,222],{"class":221},[47,20709,665],{"class":85},[47,20711,6059],{"class":221},[47,20713,20714],{"class":279}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[47,20716,20717,20719,20722,20725],{"class":49,"line":8126},[47,20718,19524],{"class":221},[47,20720,20721],{"class":53},"p6",[47,20723,20724],{"class":221},"(p5);",[47,20726,20727],{"class":279}," \u002F\u002F用户自己提供拷贝构造\n",[47,20729,20730],{"class":49,"line":8138},[47,20731,1659],{"class":221},[47,20733,20734],{"class":49,"line":8150},[47,20735,2493],{"emptyLinePlaceholder":145},[47,20737,20738,20740,20742],{"class":49,"line":9809},[47,20739,225],{"class":217},[47,20741,2066],{"class":53},[47,20743,10946],{"class":221},[47,20745,20746],{"class":49,"line":9834},[47,20747,2493],{"emptyLinePlaceholder":145},[47,20749,20750,20752],{"class":49,"line":9857},[47,20751,5726],{"class":53},[47,20753,5729],{"class":221},[47,20755,20756],{"class":49,"line":9881},[47,20757,2493],{"emptyLinePlaceholder":145},[47,20759,20760,20762,20764,20766],{"class":49,"line":9886},[47,20761,2396],{"class":53},[47,20763,222],{"class":221},[47,20765,2401],{"class":81},[47,20767,2812],{"class":221},[47,20769,20770],{"class":49,"line":9891},[47,20771,2493],{"emptyLinePlaceholder":145},[47,20773,20774,20776,20778],{"class":49,"line":9896},[47,20775,4183],{"class":217},[47,20777,4186],{"class":85},[47,20779,1384],{"class":221},[47,20781,20782],{"class":49,"line":9905},[47,20783,1659],{"class":221},[187,20785,20787],{"id":20786},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,20789,20790],{},"浅拷贝：简单的赋值拷贝操作",[19,20792,20793],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[38,20795,20797],{"className":208,"code":20796,"language":210,"meta":43,"style":43},"#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",[26,20798,20799,20805,20815,20821,20825,20829,20834,20840,20844,20857,20861,20865,20872,20876,20886,20901,20914,20918,20923,20928,20944,20948,20961,20966,20971,20976,20985,20990,21005,21009,21013,21017,21023,21027,21032,21047,21051,21062,21076,21080,21089,21093,21099,21111,21115,21123,21127,21144,21175,21183,21211,21215,21219,21227,21231,21237],{"__ignoreMap":43},[47,20800,20801,20803],{"class":49,"line":50},[47,20802,2043],{"class":217},[47,20804,2046],{"class":81},[47,20806,20807,20809,20811,20813],{"class":49,"line":92},[47,20808,2051],{"class":217},[47,20810,2054],{"class":217},[47,20812,2057],{"class":53},[47,20814,1384],{"class":221},[47,20816,20817,20819],{"class":49,"line":1273},[47,20818,14787],{"class":217},[47,20820,15264],{"class":53},[47,20822,20823],{"class":49,"line":1288},[47,20824,1640],{"class":221},[47,20826,20827],{"class":49,"line":1294},[47,20828,14809],{"class":217},[47,20830,20831],{"class":49,"line":1308},[47,20832,20833],{"class":279},"    \u002F\u002F默认构造函数\n",[47,20835,20836,20838],{"class":49,"line":1314},[47,20837,18612],{"class":53},[47,20839,2069],{"class":221},[47,20841,20842],{"class":49,"line":1405},[47,20843,2123],{"class":221},[47,20845,20846,20848,20850,20853,20855],{"class":49,"line":1411},[47,20847,3544],{"class":221},[47,20849,1262],{"class":217},[47,20851,20852],{"class":81},"\"默认构造函数\"",[47,20854,1262],{"class":217},[47,20856,1285],{"class":221},[47,20858,20859],{"class":49,"line":1423},[47,20860,2280],{"class":221},[47,20862,20863],{"class":49,"line":1706},[47,20864,20436],{"class":279},[47,20866,20867,20869],{"class":49,"line":1711},[47,20868,18645],{"class":53},[47,20870,20871],{"class":221},"(int age,int height)\n",[47,20873,20874],{"class":49,"line":1717},[47,20875,2123],{"class":221},[47,20877,20878,20881,20883],{"class":49,"line":1722},[47,20879,20880],{"class":221},"        m_Age",[47,20882,267],{"class":217},[47,20884,20885],{"class":221},"age;\n",[47,20887,20888,20891,20893,20895,20898],{"class":49,"line":1736},[47,20889,20890],{"class":221},"        m_Height",[47,20892,11810],{"class":217},[47,20894,2475],{"class":217},[47,20896,20897],{"class":221},"(height);",[47,20899,20900],{"class":279},"\u002F\u002F放到堆区\n",[47,20902,20903,20905,20907,20910,20912],{"class":49,"line":1741},[47,20904,3544],{"class":221},[47,20906,1262],{"class":217},[47,20908,20909],{"class":81},"\"有参构造函数\"",[47,20911,1262],{"class":217},[47,20913,1285],{"class":221},[47,20915,20916],{"class":49,"line":1747},[47,20917,2280],{"class":221},[47,20919,20920],{"class":49,"line":1768},[47,20921,20922],{"class":279},"    \u002F\u002F深拷贝解决上述问题\n",[47,20924,20925],{"class":49,"line":1773},[47,20926,20927],{"class":279},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[47,20929,20930,20932,20934,20936,20938,20940,20942],{"class":49,"line":1787},[47,20931,18612],{"class":53},[47,20933,222],{"class":221},[47,20935,6885],{"class":217},[47,20937,15662],{"class":53},[47,20939,10677],{"class":217},[47,20941,19],{"class":5309},[47,20943,228],{"class":221},[47,20945,20946],{"class":49,"line":1792},[47,20947,2123],{"class":221},[47,20949,20950,20952,20954,20957,20959],{"class":49,"line":1821},[47,20951,3544],{"class":221},[47,20953,1262],{"class":217},[47,20955,20956],{"class":81},"\"拷贝构造函数\"",[47,20958,1262],{"class":217},[47,20960,1285],{"class":221},[47,20962,20963],{"class":49,"line":1826},[47,20964,20965],{"class":279},"        \u002F\u002F编译器默认的写如下注释部分\n",[47,20967,20968],{"class":49,"line":1843},[47,20969,20970],{"class":279},"        \u002F\u002Fm_Age=p.m_Age;\n",[47,20972,20973],{"class":49,"line":1848},[47,20974,20975],{"class":279},"        \u002F\u002Fm_Height=p.m_Height;\n",[47,20977,20978,20980,20982],{"class":49,"line":1853},[47,20979,20880],{"class":221},[47,20981,267],{"class":217},[47,20983,20984],{"class":221},"p.m_Age;\n",[47,20986,20987],{"class":49,"line":1858},[47,20988,20989],{"class":279},"        \u002F\u002F深拷贝操作\n",[47,20991,20992,20994,20996,20998,21000,21002],{"class":49,"line":1872},[47,20993,20890],{"class":221},[47,20995,11810],{"class":217},[47,20997,2475],{"class":217},[47,20999,222],{"class":221},[47,21001,674],{"class":217},[47,21003,21004],{"class":221},"p.m_Height);\n",[47,21006,21007],{"class":49,"line":1877},[47,21008,2280],{"class":221},[47,21010,21011],{"class":49,"line":2670},[47,21012,2493],{"emptyLinePlaceholder":145},[47,21014,21015],{"class":49,"line":2684},[47,21016,18640],{"class":279},[47,21018,21019,21021],{"class":49,"line":2692},[47,21020,18645],{"class":53},[47,21022,2069],{"class":221},[47,21024,21025],{"class":49,"line":2697},[47,21026,2123],{"class":221},[47,21028,21029],{"class":49,"line":2703},[47,21030,21031],{"class":279},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[47,21033,21034,21036,21039,21042,21045],{"class":49,"line":2709},[47,21035,2590],{"class":217},[47,21037,21038],{"class":221},"(m_Height ",[47,21040,21041],{"class":217},"!=",[47,21043,21044],{"class":85}," NULL",[47,21046,228],{"class":221},[47,21048,21049],{"class":49,"line":2714},[47,21050,2603],{"class":221},[47,21052,21053,21056,21059],{"class":49,"line":8041},[47,21054,21055],{"class":217},"            delete",[47,21057,21058],{"class":221}," m_Height;",[47,21060,21061],{"class":279}," \u002F\u002F释放堆区内存\n",[47,21063,21064,21067,21069,21071,21073],{"class":49,"line":8065},[47,21065,21066],{"class":221},"            m_Height",[47,21068,267],{"class":217},[47,21070,2485],{"class":85},[47,21072,276],{"class":221},[47,21074,21075],{"class":279}," \u002F\u002F防止野指针\n",[47,21077,21078],{"class":49,"line":8070},[47,21079,2622],{"class":221},[47,21081,21082,21084,21086],{"class":49,"line":8076},[47,21083,3544],{"class":221},[47,21085,1262],{"class":217},[47,21087,21088],{"class":81},"\"Person的析构函数调用\"\n",[47,21090,21091],{"class":49,"line":8103},[47,21092,2280],{"class":221},[47,21094,21095,21097],{"class":49,"line":8108},[47,21096,2078],{"class":217},[47,21098,15759],{"class":221},[47,21100,21101,21103,21105,21108],{"class":49,"line":8114},[47,21102,2078],{"class":217},[47,21104,6611],{"class":217},[47,21106,21107],{"class":221},"m_Height;",[47,21109,21110],{"class":279}," \u002F\u002F定义一个指针，指向身高\n",[47,21112,21113],{"class":49,"line":8126},[47,21114,4088],{"class":221},[47,21116,21117,21119,21121],{"class":49,"line":8138},[47,21118,5457],{"class":217},[47,21120,5681],{"class":53},[47,21122,2069],{"class":221},[47,21124,21125],{"class":49,"line":8150},[47,21126,1640],{"class":221},[47,21128,21129,21131,21133,21135,21137,21139,21142],{"class":49,"line":9809},[47,21130,19524],{"class":221},[47,21132,7223],{"class":53},[47,21134,222],{"class":221},[47,21136,869],{"class":85},[47,21138,597],{"class":221},[47,21140,21141],{"class":85},"160",[47,21143,2812],{"class":221},[47,21145,21146,21148,21150,21153,21155,21158,21160,21163,21165,21168,21170,21172],{"class":49,"line":9834},[47,21147,1645],{"class":221},[47,21149,1262],{"class":217},[47,21151,21152],{"class":81},"\"p1的年龄为:\"",[47,21154,1262],{"class":217},[47,21156,21157],{"class":221},"p1.m_Age",[47,21159,1262],{"class":217},[47,21161,21162],{"class":81},"\"身高为：\"",[47,21164,6512],{"class":217},[47,21166,21167],{"class":221},"p1.m_Height",[47,21169,1262],{"class":217},[47,21171,1332],{"class":221},[47,21173,21174],{"class":279},"  \u002F\u002F18\n",[47,21176,21177,21179,21181],{"class":49,"line":9857},[47,21178,19524],{"class":221},[47,21180,7126],{"class":53},[47,21182,17608],{"class":221},[47,21184,21185,21187,21189,21192,21194,21196,21198,21200,21202,21205,21207,21209],{"class":49,"line":9881},[47,21186,1645],{"class":221},[47,21188,1262],{"class":217},[47,21190,21191],{"class":81},"\"p2的年龄为：\"",[47,21193,1262],{"class":217},[47,21195,19554],{"class":221},[47,21197,1262],{"class":217},[47,21199,21162],{"class":81},[47,21201,6512],{"class":217},[47,21203,21204],{"class":221},"p2.m_Height",[47,21206,1262],{"class":217},[47,21208,1332],{"class":221},[47,21210,21174],{"class":279},[47,21212,21213],{"class":49,"line":9886},[47,21214,13303],{"class":221},[47,21216,21217],{"class":49,"line":9891},[47,21218,1659],{"class":221},[47,21220,21221,21223,21225],{"class":49,"line":9896},[47,21222,225],{"class":217},[47,21224,2066],{"class":53},[47,21226,2069],{"class":221},[47,21228,21229],{"class":49,"line":9905},[47,21230,1640],{"class":221},[47,21232,21233,21235],{"class":49,"line":9910},[47,21234,5726],{"class":53},[47,21236,5729],{"class":221},[47,21238,21239],{"class":49,"line":9916},[47,21240,1659],{"class":221},[19,21242,21243],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,21245,21246],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,21248,21249],{},[1556,21250],{"alt":43,"src":21251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,21253,21254],{},"浅拷贝问题要使用深拷贝来解决",[19,21256,21257],{},[1556,21258],{"alt":43,"src":21259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,21261,21262],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[187,21264,21266],{"id":21265},"_826初始化列表","8.2.6初始化列表",[19,21268,21269],{},"作用：初始化属性",[19,21271,5274],{},[38,21273,21276],{"className":21274,"code":21275,"language":5280},[5278],"构造函数():属性1(值1),属性2(值2).....{}\n",[26,21277,21275],{"__ignoreMap":43},[19,21279,21280],{},"例子",[38,21282,21284],{"className":208,"code":21283,"language":210,"meta":43,"style":43},"#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",[26,21285,21286,21292,21302,21308,21312,21317,21321,21326,21331,21336,21341,21346,21351,21355,21360,21365,21408,21417,21435,21453,21471,21475,21479,21486,21493,21500,21504,21508,21516,21520,21524,21544,21553,21557,21561,21571,21575,21583],{"__ignoreMap":43},[47,21287,21288,21290],{"class":49,"line":50},[47,21289,2043],{"class":217},[47,21291,2046],{"class":81},[47,21293,21294,21296,21298,21300],{"class":49,"line":92},[47,21295,2051],{"class":217},[47,21297,2054],{"class":217},[47,21299,2057],{"class":53},[47,21301,1384],{"class":221},[47,21303,21304,21306],{"class":49,"line":1273},[47,21305,14787],{"class":217},[47,21307,15264],{"class":53},[47,21309,21310],{"class":49,"line":1288},[47,21311,1640],{"class":221},[47,21313,21314],{"class":49,"line":1294},[47,21315,21316],{"class":217},"    public:\n",[47,21318,21319],{"class":49,"line":1308},[47,21320,2493],{"emptyLinePlaceholder":145},[47,21322,21323],{"class":49,"line":1314},[47,21324,21325],{"class":279},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[47,21327,21328],{"class":49,"line":1405},[47,21329,21330],{"class":279},"    \u002F\u002FPerson(int a, int b, int c) {\n",[47,21332,21333],{"class":49,"line":1411},[47,21334,21335],{"class":279},"    \u002F\u002F  m_A = a;\n",[47,21337,21338],{"class":49,"line":1423},[47,21339,21340],{"class":279},"    \u002F\u002F  m_B = b;\n",[47,21342,21343],{"class":49,"line":1706},[47,21344,21345],{"class":279},"    \u002F\u002F  m_C = c;\n",[47,21347,21348],{"class":49,"line":1711},[47,21349,21350],{"class":279},"    \u002F\u002F}\n",[47,21352,21353],{"class":49,"line":1717},[47,21354,2493],{"emptyLinePlaceholder":145},[47,21356,21357],{"class":49,"line":1722},[47,21358,21359],{"class":279},"    \u002F\u002F初始化列表方式初始化\n",[47,21361,21362],{"class":49,"line":1736},[47,21363,21364],{"class":279},"    \u002F\u002F使用有参构造函数\n",[47,21366,21367,21369,21371,21373,21375,21377,21379,21381,21383,21385,21387,21390,21393,21396,21399,21402,21405],{"class":49,"line":1741},[47,21368,18612],{"class":53},[47,21370,222],{"class":221},[47,21372,225],{"class":217},[47,21374,1492],{"class":5309},[47,21376,12528],{"class":221},[47,21378,225],{"class":217},[47,21380,2926],{"class":5309},[47,21382,12528],{"class":221},[47,21384,225],{"class":217},[47,21386,2942],{"class":5309},[47,21388,21389],{"class":221},") :",[47,21391,21392],{"class":53},"m_A",[47,21394,21395],{"class":221},"(a), ",[47,21397,21398],{"class":53},"m_B",[47,21400,21401],{"class":221},"(b), ",[47,21403,21404],{"class":53},"m_C",[47,21406,21407],{"class":221},"(c) {}\n",[47,21409,21410,21412,21415],{"class":49,"line":1747},[47,21411,15002],{"class":217},[47,21413,21414],{"class":53}," PrintPerson",[47,21416,10946],{"class":221},[47,21418,21419,21421,21423,21426,21428,21431,21433],{"class":49,"line":1768},[47,21420,9762],{"class":221},[47,21422,1262],{"class":217},[47,21424,21425],{"class":81}," \"mA:\"",[47,21427,1538],{"class":217},[47,21429,21430],{"class":221}," m_A ",[47,21432,1262],{"class":217},[47,21434,8933],{"class":221},[47,21436,21437,21439,21441,21444,21446,21449,21451],{"class":49,"line":1773},[47,21438,9762],{"class":221},[47,21440,1262],{"class":217},[47,21442,21443],{"class":81}," \"mB:\"",[47,21445,1538],{"class":217},[47,21447,21448],{"class":221}," m_B ",[47,21450,1262],{"class":217},[47,21452,8933],{"class":221},[47,21454,21455,21457,21459,21462,21464,21467,21469],{"class":49,"line":1787},[47,21456,9762],{"class":221},[47,21458,1262],{"class":217},[47,21460,21461],{"class":81}," \"mC:\"",[47,21463,1538],{"class":217},[47,21465,21466],{"class":221}," m_C ",[47,21468,1262],{"class":217},[47,21470,8933],{"class":221},[47,21472,21473],{"class":49,"line":1792},[47,21474,2280],{"class":221},[47,21476,21477],{"class":49,"line":1821},[47,21478,15315],{"class":217},[47,21480,21481,21483],{"class":49,"line":1826},[47,21482,2078],{"class":217},[47,21484,21485],{"class":221}," m_A;\n",[47,21487,21488,21490],{"class":49,"line":1843},[47,21489,2078],{"class":217},[47,21491,21492],{"class":221}," m_B;\n",[47,21494,21495,21497],{"class":49,"line":1848},[47,21496,2078],{"class":217},[47,21498,21499],{"class":221}," m_C;\n",[47,21501,21502],{"class":49,"line":1853},[47,21503,4088],{"class":221},[47,21505,21506],{"class":49,"line":1858},[47,21507,2493],{"emptyLinePlaceholder":145},[47,21509,21510,21512,21514],{"class":49,"line":1872},[47,21511,225],{"class":217},[47,21513,2066],{"class":53},[47,21515,6071],{"class":221},[47,21517,21518],{"class":49,"line":1877},[47,21519,1640],{"class":221},[47,21521,21522],{"class":49,"line":2670},[47,21523,2493],{"emptyLinePlaceholder":145},[47,21525,21526,21528,21530,21532,21534,21536,21538,21540,21542],{"class":49,"line":2684},[47,21527,19524],{"class":221},[47,21529,19],{"class":53},[47,21531,222],{"class":221},[47,21533,436],{"class":85},[47,21535,12528],{"class":221},[47,21537,298],{"class":85},[47,21539,12528],{"class":221},[47,21541,292],{"class":85},[47,21543,2812],{"class":221},[47,21545,21546,21548,21551],{"class":49,"line":2692},[47,21547,15959],{"class":221},[47,21549,21550],{"class":53},"PrintPerson",[47,21552,5729],{"class":221},[47,21554,21555],{"class":49,"line":2697},[47,21556,2493],{"emptyLinePlaceholder":145},[47,21558,21559],{"class":49,"line":2703},[47,21560,2493],{"emptyLinePlaceholder":145},[47,21562,21563,21565,21567,21569],{"class":49,"line":2709},[47,21564,2396],{"class":53},[47,21566,222],{"class":221},[47,21568,2401],{"class":81},[47,21570,2812],{"class":221},[47,21572,21573],{"class":49,"line":2714},[47,21574,2493],{"emptyLinePlaceholder":145},[47,21576,21577,21579,21581],{"class":49,"line":8041},[47,21578,4183],{"class":217},[47,21580,4186],{"class":85},[47,21582,1384],{"class":221},[47,21584,21585],{"class":49,"line":8065},[47,21586,1659],{"class":221},[19,21588,21589,21590,21593,21594],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[369,21591,21592],{},"参数名就是定义的对象属性","，",[369,21595,21596],{},"属性后面的值为有参构造函数的形参",[38,21598,21600],{"className":208,"code":21599,"language":210,"meta":43,"style":43},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[26,21601,21602],{"__ignoreMap":43},[47,21603,21604,21606,21608,21610,21613,21615,21618,21620,21623,21625,21628,21630,21633,21635],{"class":49,"line":50},[47,21605,19139],{"class":53},[47,21607,222],{"class":221},[47,21609,225],{"class":217},[47,21611,21612],{"class":221}," a.",[47,21614,225],{"class":217},[47,21616,21617],{"class":221}," b,",[47,21619,225],{"class":217},[47,21621,21622],{"class":221}," b):",[47,21624,21392],{"class":53},[47,21626,21627],{"class":221},"(a),",[47,21629,21398],{"class":53},[47,21631,21632],{"class":221},"(c),",[47,21634,21404],{"class":53},[47,21636,21637],{"class":221},"(b) {}\n",[187,21639,21641],{"id":21640},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,21643,21644],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,21646,14726],{},[38,21648,21650],{"className":208,"code":21649,"language":210,"meta":43,"style":43},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[26,21651,21652,21657,21662,21666,21671,21675],{"__ignoreMap":43},[47,21653,21654],{"class":49,"line":50},[47,21655,21656],{"class":221},"A{};\n",[47,21658,21659],{"class":49,"line":92},[47,21660,21661],{"class":221},"B\n",[47,21663,21664],{"class":49,"line":1273},[47,21665,1640],{"class":221},[47,21667,21668],{"class":49,"line":1288},[47,21669,21670],{"class":221},"    A a;\n",[47,21672,21673],{"class":49,"line":1294},[47,21674,1659],{"class":221},[47,21676,21677],{"class":49,"line":1308},[47,21678,21679],{"class":279},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,21681,21682],{},"案例",[38,21684,21686],{"className":208,"code":21685,"language":210,"meta":43,"style":43},"\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",[26,21687,21688,21693,21700,21704,21709,21714,21728,21732,21742,21753,21757,21764,21768,21781,21785,21790,21795,21799,21805,21809,21813,21817,21848,21852,21863,21867,21873,21877,21890,21894,21898,21902,21907,21912,21916,21924,21928,21945,21964,21968,21976,21980,21986],{"__ignoreMap":43},[47,21689,21690],{"class":49,"line":50},[47,21691,21692],{"class":279},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[47,21694,21695,21697],{"class":49,"line":92},[47,21696,14787],{"class":217},[47,21698,21699],{"class":53}," Phone\n",[47,21701,21702],{"class":49,"line":1273},[47,21703,1640],{"class":221},[47,21705,21706],{"class":49,"line":1288},[47,21707,21708],{"class":221},"public：\n",[47,21710,21711],{"class":49,"line":1294},[47,21712,21713],{"class":279},"    \u002F\u002F 赋值(构造函数)\n",[47,21715,21716,21719,21721,21723,21726],{"class":49,"line":1308},[47,21717,21718],{"class":53},"    Phone",[47,21720,222],{"class":221},[47,21722,15010],{"class":53},[47,21724,21725],{"class":5309}," pName",[47,21727,228],{"class":221},[47,21729,21730],{"class":49,"line":1314},[47,21731,2123],{"class":221},[47,21733,21734,21737,21739],{"class":49,"line":1405},[47,21735,21736],{"class":221},"        m_pName",[47,21738,267],{"class":217},[47,21740,21741],{"class":221},"pName;\n",[47,21743,21744,21746,21748,21751],{"class":49,"line":1411},[47,21745,3544],{"class":221},[47,21747,1262],{"class":217},[47,21749,21750],{"class":81},"\"Phone的构造函数调用\"",[47,21752,1384],{"class":221},[47,21754,21755],{"class":49,"line":1423},[47,21756,2280],{"class":221},[47,21758,21759,21762],{"class":49,"line":1706},[47,21760,21761],{"class":53},"    ~Phone",[47,21763,2069],{"class":221},[47,21765,21766],{"class":49,"line":1711},[47,21767,2123],{"class":221},[47,21769,21770,21772,21774,21777,21779],{"class":49,"line":1717},[47,21771,3544],{"class":221},[47,21773,1262],{"class":217},[47,21775,21776],{"class":81},"\"Phone析构函数调用\"",[47,21778,1262],{"class":217},[47,21780,1285],{"class":221},[47,21782,21783],{"class":49,"line":1722},[47,21784,2280],{"class":221},[47,21786,21787],{"class":49,"line":1736},[47,21788,21789],{"class":279},"    \u002F\u002F\n",[47,21791,21792],{"class":49,"line":1741},[47,21793,21794],{"class":221},"    string m_PName;\n",[47,21796,21797],{"class":49,"line":1747},[47,21798,4088],{"class":221},[47,21800,21801,21803],{"class":49,"line":1768},[47,21802,14787],{"class":217},[47,21804,15264],{"class":53},[47,21806,21807],{"class":49,"line":1773},[47,21808,1640],{"class":221},[47,21810,21811],{"class":49,"line":1787},[47,21812,14809],{"class":217},[47,21814,21815],{"class":49,"line":1792},[47,21816,17087],{"class":279},[47,21818,21819,21821,21823,21825,21827,21829,21831,21834,21837,21839,21842,21845],{"class":49,"line":1821},[47,21820,18612],{"class":53},[47,21822,222],{"class":221},[47,21824,15010],{"class":53},[47,21826,15013],{"class":5309},[47,21828,597],{"class":221},[47,21830,15010],{"class":53},[47,21832,21833],{"class":5309}," pname",[47,21835,21836],{"class":221},"):",[47,21838,15103],{"class":53},[47,21840,21841],{"class":221},"(name),m_phone.",[47,21843,21844],{"class":53},"m_PName",[47,21846,21847],{"class":221},"(pname) \n",[47,21849,21850],{"class":49,"line":1826},[47,21851,2123],{"class":221},[47,21853,21854,21856,21858,21861],{"class":49,"line":1843},[47,21855,3544],{"class":221},[47,21857,1262],{"class":217},[47,21859,21860],{"class":81},"\"Person的构造函数调用\"",[47,21862,1384],{"class":221},[47,21864,21865],{"class":49,"line":1848},[47,21866,2280],{"class":221},[47,21868,21869,21871],{"class":49,"line":1853},[47,21870,18645],{"class":53},[47,21872,2069],{"class":221},[47,21874,21875],{"class":49,"line":1858},[47,21876,2123],{"class":221},[47,21878,21879,21881,21883,21886,21888],{"class":49,"line":1872},[47,21880,3544],{"class":221},[47,21882,1262],{"class":217},[47,21884,21885],{"class":81},"\"Person析构函数调用\"",[47,21887,1262],{"class":217},[47,21889,1285],{"class":221},[47,21891,21892],{"class":49,"line":1877},[47,21893,2280],{"class":221},[47,21895,21896],{"class":49,"line":2670},[47,21897,7873],{"class":279},[47,21899,21900],{"class":49,"line":2684},[47,21901,14985],{"class":221},[47,21903,21904],{"class":49,"line":2692},[47,21905,21906],{"class":279},"    \u002F\u002F手机\n",[47,21908,21909],{"class":49,"line":2697},[47,21910,21911],{"class":221},"    Phone m_Phone;\n",[47,21913,21914],{"class":49,"line":2703},[47,21915,4088],{"class":221},[47,21917,21918,21920,21922],{"class":49,"line":2709},[47,21919,5457],{"class":217},[47,21921,5681],{"class":53},[47,21923,2069],{"class":221},[47,21925,21926],{"class":49,"line":2714},[47,21927,1640],{"class":221},[47,21929,21930,21932,21934,21936,21938,21940,21943],{"class":49,"line":8041},[47,21931,19524],{"class":221},[47,21933,19],{"class":53},[47,21935,222],{"class":221},[47,21937,8009],{"class":81},[47,21939,597],{"class":221},[47,21941,21942],{"class":81},"\"安卓\"",[47,21944,2812],{"class":221},[47,21946,21947,21949,21951,21954,21956,21959,21961],{"class":49,"line":8065},[47,21948,1645],{"class":221},[47,21950,1262],{"class":217},[47,21952,21953],{"class":221},"p.Name",[47,21955,1262],{"class":217},[47,21957,21958],{"class":81},"\"拿着：\"",[47,21960,1262],{"class":217},[47,21962,21963],{"class":221},"p.m_phone.m_PName;\n",[47,21965,21966],{"class":49,"line":8070},[47,21967,1659],{"class":221},[47,21969,21970,21972,21974],{"class":49,"line":8076},[47,21971,225],{"class":217},[47,21973,2066],{"class":53},[47,21975,2069],{"class":221},[47,21977,21978],{"class":49,"line":8103},[47,21979,1640],{"class":221},[47,21981,21982,21984],{"class":49,"line":8108},[47,21983,5726],{"class":53},[47,21985,5729],{"class":221},[47,21987,21988],{"class":49,"line":8114},[47,21989,1659],{"class":221},[19,21991,9118],{},[38,21993,21995],{"className":208,"code":21994,"language":210,"meta":43,"style":43},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[26,21996,21997,22002],{"__ignoreMap":43},[47,21998,21999],{"class":49,"line":50},[47,22000,22001],{"class":279},"    \u002F\u002F不需要写这个：\n",[47,22003,22004],{"class":49,"line":92},[47,22005,22006],{"class":279},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,22008,22009],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[38,22011,22013],{"className":208,"code":22012,"language":210,"meta":43,"style":43},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[26,22014,22015],{"__ignoreMap":43},[47,22016,22017,22019,22022,22024,22027,22030],{"class":49,"line":50},[47,22018,19139],{"class":53},[47,22020,22021],{"class":221},"(string name.string pname):",[47,22023,15103],{"class":53},[47,22025,22026],{"class":221},"(name),",[47,22028,22029],{"class":53},"m_phone",[47,22031,22032],{"class":221},"(pname) {}\n",[19,22034,22035,22036,267,22039],{},"采用的是隐式转换法，实际为如下：\n",[26,22037,22038],{},"m_phone(pname)",[26,22040,22041],{},"Phone m_phone=pname",[19,22043,22044,22047],{},[369,22045,22046],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,22049,22050],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[187,22052,22054],{"id":22053},"_828静态对象","8.2.8静态对象",[19,22056,22057],{},"静态对象在成员对象前static，称为静态对象",[19,22059,22060],{},"静态对象分为两类：",[171,22062,22063],{},[109,22064,22065],{},"静态成员变量",[106,22067,22068,22071,22074],{},[109,22069,22070],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[109,22072,22073],{},"②在编译阶段分配内存",[109,22075,22076],{},"③类内声明，类外初始化",[171,22078,22079],{"start":92},[109,22080,22081],{},"静态成员函数",[106,22083,22084,22087],{},[109,22085,22086],{},"①所有对象共享同一个函数",[109,22088,22089],{},"②静态成员函数只能访问静态成员变量",[22091,22092,22094],"h4",{"id":22093},"_8281静态成员变量","8.2.8.1静态成员变量",[38,22096,22098],{"className":208,"code":22097,"language":210,"meta":43,"style":43},"#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",[26,22099,22100,22106,22116,22122,22126,22130,22135,22140,22145,22153,22157,22161,22165,22173,22177,22181,22186,22199,22203,22211,22215,22221],{"__ignoreMap":43},[47,22101,22102,22104],{"class":49,"line":50},[47,22103,2043],{"class":217},[47,22105,2046],{"class":81},[47,22107,22108,22110,22112,22114],{"class":49,"line":92},[47,22109,2051],{"class":217},[47,22111,2054],{"class":217},[47,22113,2057],{"class":53},[47,22115,1384],{"class":221},[47,22117,22118,22120],{"class":49,"line":1273},[47,22119,14787],{"class":217},[47,22121,15264],{"class":53},[47,22123,22124],{"class":49,"line":1288},[47,22125,1640],{"class":221},[47,22127,22128],{"class":49,"line":1294},[47,22129,14809],{"class":217},[47,22131,22132],{"class":49,"line":1308},[47,22133,22134],{"class":279},"    \u002F\u002F非静态成员变量\n",[47,22136,22137],{"class":49,"line":1314},[47,22138,22139],{"class":279},"    \u002F\u002F int m_A;\n",[47,22141,22142],{"class":49,"line":1405},[47,22143,22144],{"class":279},"    \u002F\u002F定义静态成员变量\n",[47,22146,22147,22149,22151],{"class":49,"line":1411},[47,22148,11113],{"class":217},[47,22150,2475],{"class":217},[47,22152,21485],{"class":221},[47,22154,22155],{"class":49,"line":1423},[47,22156,2493],{"emptyLinePlaceholder":145},[47,22158,22159],{"class":49,"line":1706},[47,22160,2493],{"emptyLinePlaceholder":145},[47,22162,22163],{"class":49,"line":1711},[47,22164,4088],{"class":221},[47,22166,22167,22169,22171],{"class":49,"line":1717},[47,22168,5457],{"class":217},[47,22170,5681],{"class":53},[47,22172,2069],{"class":221},[47,22174,22175],{"class":49,"line":1722},[47,22176,1640],{"class":221},[47,22178,22179],{"class":49,"line":1736},[47,22180,15406],{"class":221},[47,22182,22183],{"class":49,"line":1741},[47,22184,22185],{"class":279},"    \u002F\u002F输出类成员变量这块内存\n",[47,22187,22188,22190,22192,22195,22197],{"class":49,"line":1747},[47,22189,1645],{"class":221},[47,22191,1262],{"class":217},[47,22193,22194],{"class":221},"p.m_A",[47,22196,1262],{"class":217},[47,22198,1285],{"class":221},[47,22200,22201],{"class":49,"line":1768},[47,22202,1659],{"class":221},[47,22204,22205,22207,22209],{"class":49,"line":1773},[47,22206,225],{"class":217},[47,22208,2066],{"class":53},[47,22210,2069],{"class":221},[47,22212,22213],{"class":49,"line":1787},[47,22214,1640],{"class":221},[47,22216,22217,22219],{"class":49,"line":1792},[47,22218,5726],{"class":53},[47,22220,2069],{"class":221},[47,22222,22223],{"class":49,"line":1821},[47,22224,1659],{"class":221},[19,22226,22227],{},"此时输出是报错的：无法解析外部命令",[19,22229,22230],{},"解决这一问题：必须用到类内声明，类外初始化操作",[38,22232,22234],{"className":208,"code":22233,"language":210,"meta":43,"style":43},"#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",[26,22235,22236,22242,22252,22258,22262,22266,22271,22279,22283,22288,22303,22311,22315,22319,22324,22329,22341,22346,22357,22362,22367,22380,22384,22392,22396,22402],{"__ignoreMap":43},[47,22237,22238,22240],{"class":49,"line":50},[47,22239,2043],{"class":217},[47,22241,2046],{"class":81},[47,22243,22244,22246,22248,22250],{"class":49,"line":92},[47,22245,2051],{"class":217},[47,22247,2054],{"class":217},[47,22249,2057],{"class":53},[47,22251,1384],{"class":221},[47,22253,22254,22256],{"class":49,"line":1273},[47,22255,14787],{"class":217},[47,22257,15264],{"class":53},[47,22259,22260],{"class":49,"line":1288},[47,22261,1640],{"class":221},[47,22263,22264],{"class":49,"line":1294},[47,22265,14809],{"class":217},[47,22267,22268],{"class":49,"line":1308},[47,22269,22270],{"class":279},"    \u002F\u002F类内声明\n",[47,22272,22273,22275,22277],{"class":49,"line":1314},[47,22274,11113],{"class":217},[47,22276,2475],{"class":217},[47,22278,21485],{"class":221},[47,22280,22281],{"class":49,"line":1405},[47,22282,4088],{"class":221},[47,22284,22285],{"class":49,"line":1411},[47,22286,22287],{"class":279},"\u002F\u002F类外初始化\n",[47,22289,22290,22292,22294,22297,22299,22301],{"class":49,"line":1423},[47,22291,225],{"class":217},[47,22293,15662],{"class":53},[47,22295,22296],{"class":221},"::m_A",[47,22298,267],{"class":217},[47,22300,665],{"class":85},[47,22302,1384],{"class":221},[47,22304,22305,22307,22309],{"class":49,"line":1706},[47,22306,5457],{"class":217},[47,22308,5681],{"class":53},[47,22310,2069],{"class":221},[47,22312,22313],{"class":49,"line":1711},[47,22314,1640],{"class":221},[47,22316,22317],{"class":49,"line":1717},[47,22318,15406],{"class":221},[47,22320,22321],{"class":49,"line":1722},[47,22322,22323],{"class":279},"    \u002F\u002F访问变量的原内存空间\n",[47,22325,22326],{"class":49,"line":1736},[47,22327,22328],{"class":279},"    \u002F\u002F100\n",[47,22330,22331,22333,22335,22337,22339],{"class":49,"line":1741},[47,22332,1645],{"class":221},[47,22334,1262],{"class":217},[47,22336,22194],{"class":221},[47,22338,1262],{"class":217},[47,22340,1285],{"class":221},[47,22342,22343],{"class":49,"line":1747},[47,22344,22345],{"class":221},"    Person p2;\n",[47,22347,22348,22351,22353,22355],{"class":49,"line":1768},[47,22349,22350],{"class":221},"    p2.m_A",[47,22352,267],{"class":217},[47,22354,1816],{"class":85},[47,22356,1384],{"class":221},[47,22358,22359],{"class":49,"line":1773},[47,22360,22361],{"class":279},"    \u002F\u002F继续访问这片空间\n",[47,22363,22364],{"class":49,"line":1787},[47,22365,22366],{"class":279},"    \u002F\u002F200\n",[47,22368,22369,22371,22373,22376,22378],{"class":49,"line":1792},[47,22370,1645],{"class":221},[47,22372,1262],{"class":217},[47,22374,22375],{"class":221},"p2.m_A",[47,22377,1262],{"class":217},[47,22379,1285],{"class":221},[47,22381,22382],{"class":49,"line":1821},[47,22383,1659],{"class":221},[47,22385,22386,22388,22390],{"class":49,"line":1826},[47,22387,225],{"class":217},[47,22389,2066],{"class":53},[47,22391,2069],{"class":221},[47,22393,22394],{"class":49,"line":1843},[47,22395,1640],{"class":221},[47,22397,22398,22400],{"class":49,"line":1848},[47,22399,5726],{"class":53},[47,22401,5729],{"class":221},[47,22403,22404],{"class":49,"line":1853},[47,22405,1659],{"class":221},[19,22407,22408],{},[369,22409,22410],{},"静态变量的访问",[38,22412,22414],{"className":208,"code":22413,"language":210,"meta":43,"style":43},"#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",[26,22415,22416,22422,22432,22438,22442,22446,22450,22458,22462,22467,22475,22479,22483,22497,22512,22520,22524,22529,22534,22539,22544,22556,22561,22566,22580,22597,22601,22609,22613,22619],{"__ignoreMap":43},[47,22417,22418,22420],{"class":49,"line":50},[47,22419,2043],{"class":217},[47,22421,2046],{"class":81},[47,22423,22424,22426,22428,22430],{"class":49,"line":92},[47,22425,2051],{"class":217},[47,22427,2054],{"class":217},[47,22429,2057],{"class":53},[47,22431,1384],{"class":221},[47,22433,22434,22436],{"class":49,"line":1273},[47,22435,14787],{"class":217},[47,22437,15264],{"class":53},[47,22439,22440],{"class":49,"line":1288},[47,22441,1640],{"class":221},[47,22443,22444],{"class":49,"line":1294},[47,22445,14809],{"class":217},[47,22447,22448],{"class":49,"line":1308},[47,22449,22270],{"class":279},[47,22451,22452,22454,22456],{"class":49,"line":1314},[47,22453,11113],{"class":217},[47,22455,2475],{"class":217},[47,22457,21485],{"class":221},[47,22459,22460],{"class":49,"line":1405},[47,22461,15315],{"class":217},[47,22463,22464],{"class":49,"line":1411},[47,22465,22466],{"class":279},"    \u002F\u002F静态成员变量也是有访问权限的\n",[47,22468,22469,22471,22473],{"class":49,"line":1423},[47,22470,11113],{"class":217},[47,22472,2475],{"class":217},[47,22474,21492],{"class":221},[47,22476,22477],{"class":49,"line":1706},[47,22478,4088],{"class":221},[47,22480,22481],{"class":49,"line":1711},[47,22482,22287],{"class":279},[47,22484,22485,22487,22489,22491,22493,22495],{"class":49,"line":1717},[47,22486,225],{"class":217},[47,22488,15662],{"class":53},[47,22490,22296],{"class":221},[47,22492,267],{"class":217},[47,22494,665],{"class":85},[47,22496,1384],{"class":221},[47,22498,22499,22501,22503,22506,22508,22510],{"class":49,"line":1722},[47,22500,225],{"class":217},[47,22502,15662],{"class":53},[47,22504,22505],{"class":221},"::m_B",[47,22507,267],{"class":217},[47,22509,919],{"class":85},[47,22511,1384],{"class":221},[47,22513,22514,22516,22518],{"class":49,"line":1736},[47,22515,5457],{"class":217},[47,22517,5750],{"class":53},[47,22519,2069],{"class":221},[47,22521,22522],{"class":49,"line":1741},[47,22523,1640],{"class":221},[47,22525,22526],{"class":49,"line":1747},[47,22527,22528],{"class":279},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[47,22530,22531],{"class":49,"line":1768},[47,22532,22533],{"class":279},"    \u002F\u002F静态成员变量有两种访问方式：\n",[47,22535,22536],{"class":49,"line":1773},[47,22537,22538],{"class":279},"    \u002F\u002F1.通过对象进行访问\n",[47,22540,22541],{"class":49,"line":1787},[47,22542,22543],{"class":221},"    Person p;  \n",[47,22545,22546,22548,22550,22552,22554],{"class":49,"line":1792},[47,22547,1645],{"class":221},[47,22549,1262],{"class":217},[47,22551,22194],{"class":221},[47,22553,1262],{"class":217},[47,22555,1285],{"class":221},[47,22557,22558],{"class":49,"line":1821},[47,22559,22560],{"class":279},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[47,22562,22563],{"class":49,"line":1826},[47,22564,22565],{"class":279},"    \u002F\u002F2.通过类名进行访问\n",[47,22567,22568,22570,22572,22574,22576,22578],{"class":49,"line":1843},[47,22569,1645],{"class":221},[47,22571,1262],{"class":217},[47,22573,19139],{"class":53},[47,22575,22296],{"class":221},[47,22577,1262],{"class":217},[47,22579,1285],{"class":221},[47,22581,22582,22584,22586,22588,22590,22592,22594],{"class":49,"line":1848},[47,22583,1645],{"class":221},[47,22585,1262],{"class":217},[47,22587,19139],{"class":53},[47,22589,22505],{"class":221},[47,22591,1262],{"class":217},[47,22593,1332],{"class":221},[47,22595,22596],{"class":279}," \u002F\u002F没有访问权限，报错\n",[47,22598,22599],{"class":49,"line":1853},[47,22600,1659],{"class":221},[47,22602,22603,22605,22607],{"class":49,"line":1858},[47,22604,225],{"class":217},[47,22606,2066],{"class":53},[47,22608,2069],{"class":221},[47,22610,22611],{"class":49,"line":1872},[47,22612,1640],{"class":221},[47,22614,22615,22617],{"class":49,"line":1877},[47,22616,5795],{"class":53},[47,22618,5729],{"class":221},[47,22620,22621],{"class":49,"line":2670},[47,22622,1659],{"class":221},[22091,22624,22626],{"id":22625},"_8282静态成员函数","8.2.8.2静态成员函数",[19,22628,22629],{},"1.静态成员函数定义与访问",[38,22631,22633],{"className":208,"code":22632,"language":210,"meta":43,"style":43},"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",[26,22634,22635,22641,22645,22649,22654,22665,22669,22683,22687,22691,22699,22703,22708,22713,22717,22725,22730,22740],{"__ignoreMap":43},[47,22636,22637,22639],{"class":49,"line":50},[47,22638,14787],{"class":217},[47,22640,15264],{"class":53},[47,22642,22643],{"class":49,"line":92},[47,22644,1640],{"class":221},[47,22646,22647],{"class":49,"line":1273},[47,22648,14809],{"class":217},[47,22650,22651],{"class":49,"line":1288},[47,22652,22653],{"class":279},"    \u002F\u002F在公共权限下定义静态成员函数\n",[47,22655,22656,22658,22661,22663],{"class":49,"line":1294},[47,22657,11113],{"class":217},[47,22659,22660],{"class":217}," void",[47,22662,11478],{"class":53},[47,22664,2069],{"class":221},[47,22666,22667],{"class":49,"line":1308},[47,22668,2123],{"class":221},[47,22670,22671,22674,22676,22679,22681],{"class":49,"line":1314},[47,22672,22673],{"class":221},"        coout",[47,22675,1262],{"class":217},[47,22677,22678],{"class":81},"\"静态成员函数的调用\"",[47,22680,1262],{"class":217},[47,22682,1285],{"class":221},[47,22684,22685],{"class":49,"line":1405},[47,22686,2280],{"class":221},[47,22688,22689],{"class":49,"line":1411},[47,22690,4088],{"class":221},[47,22692,22693,22695,22697],{"class":49,"line":1423},[47,22694,5457],{"class":217},[47,22696,5681],{"class":53},[47,22698,2069],{"class":221},[47,22700,22701],{"class":49,"line":1706},[47,22702,1640],{"class":221},[47,22704,22705],{"class":49,"line":1711},[47,22706,22707],{"class":279},"    \u002F\u002F静态成员函数的调用方式:\n",[47,22709,22710],{"class":49,"line":1717},[47,22711,22712],{"class":279},"    \u002F\u002F1.通过对象访问\n",[47,22714,22715],{"class":49,"line":1722},[47,22716,15406],{"class":221},[47,22718,22719,22721,22723],{"class":49,"line":1736},[47,22720,15959],{"class":221},[47,22722,11644],{"class":53},[47,22724,5729],{"class":221},[47,22726,22727],{"class":49,"line":1741},[47,22728,22729],{"class":279},"    \u002F\u002F2.通过类名访问\n",[47,22731,22732,22734,22736,22738],{"class":49,"line":1747},[47,22733,18612],{"class":53},[47,22735,17825],{"class":221},[47,22737,11644],{"class":53},[47,22739,5729],{"class":221},[47,22741,22742],{"class":49,"line":1768},[47,22743,1659],{"class":221},[171,22745,22746],{"start":92},[109,22747,22748],{},"静态成员函数只能访问静态成员变量",[38,22750,22752],{"className":208,"code":22751,"language":210,"meta":43,"style":43},"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",[26,22753,22754,22760,22764,22768,22772,22782,22786,22800,22805,22817,22821,22832,22842,22846,22850,22854,22864,22868,22881,22885,22889,22893,22897,22911,22919,22923,22927,22931,22935,22943,22947,22957,22962,22966,22974,22978,22984],{"__ignoreMap":43},[47,22755,22756,22758],{"class":49,"line":50},[47,22757,14787],{"class":217},[47,22759,15264],{"class":53},[47,22761,22762],{"class":49,"line":92},[47,22763,1640],{"class":221},[47,22765,22766],{"class":49,"line":1273},[47,22767,14809],{"class":217},[47,22769,22770],{"class":49,"line":1288},[47,22771,22653],{"class":279},[47,22773,22774,22776,22778,22780],{"class":49,"line":1294},[47,22775,11113],{"class":217},[47,22777,22660],{"class":217},[47,22779,11478],{"class":53},[47,22781,2069],{"class":221},[47,22783,22784],{"class":49,"line":1308},[47,22785,2123],{"class":221},[47,22787,22788,22791,22793,22795,22797],{"class":49,"line":1314},[47,22789,22790],{"class":221},"        m_A",[47,22792,267],{"class":217},[47,22794,530],{"class":85},[47,22796,276],{"class":221},[47,22798,22799],{"class":279}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[47,22801,22802],{"class":49,"line":1405},[47,22803,22804],{"class":279},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[47,22806,22807,22809,22811,22813,22815],{"class":49,"line":1411},[47,22808,22673],{"class":221},[47,22810,1262],{"class":217},[47,22812,22678],{"class":81},[47,22814,1262],{"class":217},[47,22816,1285],{"class":221},[47,22818,22819],{"class":49,"line":1423},[47,22820,2280],{"class":221},[47,22822,22823,22825,22827,22829],{"class":49,"line":1706},[47,22824,11113],{"class":217},[47,22826,2475],{"class":217},[47,22828,15541],{"class":221},[47,22830,22831],{"class":279}," \u002F\u002F静态成员变量\n",[47,22833,22834,22836,22839],{"class":49,"line":1711},[47,22835,2078],{"class":217},[47,22837,22838],{"class":221}," m_B;",[47,22840,22841],{"class":279}," \u002F\u002F非静态成员变量\n",[47,22843,22844],{"class":49,"line":1717},[47,22845,2493],{"emptyLinePlaceholder":145},[47,22847,22848],{"class":49,"line":1722},[47,22849,15315],{"class":217},[47,22851,22852],{"class":49,"line":1736},[47,22853,22466],{"class":279},[47,22855,22856,22858,22860,22862],{"class":49,"line":1741},[47,22857,11113],{"class":217},[47,22859,22660],{"class":217},[47,22861,13711],{"class":53},[47,22863,2069],{"class":221},[47,22865,22866],{"class":49,"line":1747},[47,22867,2123],{"class":221},[47,22869,22870,22872,22874,22877,22879],{"class":49,"line":1768},[47,22871,3544],{"class":221},[47,22873,1262],{"class":217},[47,22875,22876],{"class":81},"\"这是私有权限下的静态函数调用\"",[47,22878,1262],{"class":217},[47,22880,1285],{"class":221},[47,22882,22883],{"class":49,"line":1773},[47,22884,2280],{"class":221},[47,22886,22887],{"class":49,"line":1787},[47,22888,2493],{"emptyLinePlaceholder":145},[47,22890,22891],{"class":49,"line":1792},[47,22892,2493],{"emptyLinePlaceholder":145},[47,22894,22895],{"class":49,"line":1821},[47,22896,4088],{"class":221},[47,22898,22899,22901,22903,22905,22907,22909],{"class":49,"line":1826},[47,22900,225],{"class":217},[47,22902,15662],{"class":53},[47,22904,22296],{"class":221},[47,22906,267],{"class":217},[47,22908,411],{"class":85},[47,22910,1384],{"class":221},[47,22912,22913,22915,22917],{"class":49,"line":1843},[47,22914,5457],{"class":217},[47,22916,5681],{"class":53},[47,22918,2069],{"class":221},[47,22920,22921],{"class":49,"line":1848},[47,22922,1640],{"class":221},[47,22924,22925],{"class":49,"line":1853},[47,22926,22707],{"class":279},[47,22928,22929],{"class":49,"line":1858},[47,22930,22712],{"class":279},[47,22932,22933],{"class":49,"line":1872},[47,22934,15406],{"class":221},[47,22936,22937,22939,22941],{"class":49,"line":1877},[47,22938,15959],{"class":221},[47,22940,11644],{"class":53},[47,22942,5729],{"class":221},[47,22944,22945],{"class":49,"line":2670},[47,22946,22729],{"class":279},[47,22948,22949,22951,22953,22955],{"class":49,"line":2684},[47,22950,18612],{"class":53},[47,22952,17825],{"class":221},[47,22954,11644],{"class":53},[47,22956,5729],{"class":221},[47,22958,22959],{"class":49,"line":2692},[47,22960,22961],{"class":279},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[47,22963,22964],{"class":49,"line":2697},[47,22965,1659],{"class":221},[47,22967,22968,22970,22972],{"class":49,"line":2703},[47,22969,225],{"class":217},[47,22971,2066],{"class":53},[47,22973,2069],{"class":221},[47,22975,22976],{"class":49,"line":2709},[47,22977,1640],{"class":221},[47,22979,22980,22982],{"class":49,"line":2714},[47,22981,5726],{"class":53},[47,22983,5729],{"class":221},[47,22985,22986],{"class":49,"line":8041},[47,22987,1659],{"class":221},[187,22989,22991],{"id":22990},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22091,22993,22995],{"id":22994},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,22997,22998],{},"在c++中，类内的成员变量和成员函数分开存储",[19,23000,23001],{},"只有非静态成员变量才属于类的对象上",[23003,23004,23006],"h5",{"id":23005},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[38,23008,23010],{"className":208,"code":23009,"language":210,"meta":43,"style":43},"#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",[26,23011,23012,23019,23029,23035,23039,23043,23047,23055,23059,23063,23086,23090,23098,23102,23108],{"__ignoreMap":43},[47,23013,23014,23016],{"class":49,"line":50},[47,23015,2043],{"class":217},[47,23017,23018],{"class":81},"\u003Ciostraem>\n",[47,23020,23021,23023,23025,23027],{"class":49,"line":92},[47,23022,2051],{"class":217},[47,23024,2054],{"class":217},[47,23026,2057],{"class":53},[47,23028,1384],{"class":221},[47,23030,23031,23033],{"class":49,"line":1273},[47,23032,14787],{"class":217},[47,23034,15264],{"class":53},[47,23036,23037],{"class":49,"line":1288},[47,23038,1640],{"class":221},[47,23040,23041],{"class":49,"line":1294},[47,23042,2493],{"emptyLinePlaceholder":145},[47,23044,23045],{"class":49,"line":1308},[47,23046,4088],{"class":221},[47,23048,23049,23051,23053],{"class":49,"line":1314},[47,23050,5457],{"class":217},[47,23052,5681],{"class":53},[47,23054,2069],{"class":221},[47,23056,23057],{"class":49,"line":1405},[47,23058,1640],{"class":221},[47,23060,23061],{"class":49,"line":1411},[47,23062,15406],{"class":221},[47,23064,23065,23067,23069,23072,23074,23077,23079,23081,23083],{"class":49,"line":1423},[47,23066,1645],{"class":221},[47,23068,1262],{"class":217},[47,23070,23071],{"class":81},"\"size of p=\"",[47,23073,1262],{"class":217},[47,23075,23076],{"class":53},"sizeoif",[47,23078,6632],{"class":221},[47,23080,1262],{"class":217},[47,23082,1332],{"class":221},[47,23084,23085],{"class":279}," \u002F\u002F查看这个空类的占用的内存空间\n",[47,23087,23088],{"class":49,"line":1706},[47,23089,1659],{"class":221},[47,23091,23092,23094,23096],{"class":49,"line":1711},[47,23093,225],{"class":217},[47,23095,2066],{"class":53},[47,23097,2069],{"class":221},[47,23099,23100],{"class":49,"line":1717},[47,23101,1640],{"class":221},[47,23103,23104,23106],{"class":49,"line":1722},[47,23105,5726],{"class":53},[47,23107,5729],{"class":221},[47,23109,23110],{"class":49,"line":1736},[47,23111,1659],{"class":221},[19,23113,23114],{},"输出结果为：size of p=1",[19,23116,23117],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,23119,23120],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23003,23122,23124],{"id":23123},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[38,23126,23128],{"className":208,"code":23127,"language":210,"meta":43,"style":43},"#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",[26,23129,23130,23136,23146,23154,23158,23167,23171,23179,23183,23187,23206,23210,23214,23222,23226,23232],{"__ignoreMap":43},[47,23131,23132,23134],{"class":49,"line":50},[47,23133,2043],{"class":217},[47,23135,2046],{"class":81},[47,23137,23138,23140,23142,23144],{"class":49,"line":92},[47,23139,2051],{"class":217},[47,23141,2054],{"class":217},[47,23143,2057],{"class":53},[47,23145,1384],{"class":221},[47,23147,23148,23150,23152],{"class":49,"line":1273},[47,23149,14787],{"class":217},[47,23151,15662],{"class":53},[47,23153,2767],{"class":221},[47,23155,23156],{"class":49,"line":1288},[47,23157,1640],{"class":221},[47,23159,23160,23162,23164],{"class":49,"line":1294},[47,23161,2078],{"class":217},[47,23163,15541],{"class":221},[47,23165,23166],{"class":279},"\u002F\u002F非静态成员变量\n",[47,23168,23169],{"class":49,"line":1308},[47,23170,4088],{"class":221},[47,23172,23173,23175,23177],{"class":49,"line":1314},[47,23174,5457],{"class":217},[47,23176,5681],{"class":53},[47,23178,2069],{"class":221},[47,23180,23181],{"class":49,"line":1405},[47,23182,1640],{"class":221},[47,23184,23185],{"class":49,"line":1411},[47,23186,15406],{"class":221},[47,23188,23189,23191,23193,23195,23197,23199,23201,23203],{"class":49,"line":1423},[47,23190,1645],{"class":221},[47,23192,1262],{"class":217},[47,23194,23071],{"class":81},[47,23196,1466],{"class":217},[47,23198,6632],{"class":221},[47,23200,1262],{"class":217},[47,23202,1332],{"class":221},[47,23204,23205],{"class":279}," \u002F\u002F查看不是空对象时占用多少内存\n",[47,23207,23208],{"class":49,"line":1706},[47,23209,2493],{"emptyLinePlaceholder":145},[47,23211,23212],{"class":49,"line":1711},[47,23213,1659],{"class":221},[47,23215,23216,23218,23220],{"class":49,"line":1717},[47,23217,225],{"class":217},[47,23219,2066],{"class":53},[47,23221,2069],{"class":221},[47,23223,23224],{"class":49,"line":1722},[47,23225,1640],{"class":221},[47,23227,23228,23230],{"class":49,"line":1736},[47,23229,5726],{"class":53},[47,23231,5729],{"class":221},[47,23233,23234],{"class":49,"line":1741},[47,23235,1659],{"class":221},[19,23237,23238],{},"输出结果：size of p=4",[19,23240,23241],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[171,23243,23244],{},[109,23245,23246],{},"如果加上非静态成员变量，Person类修改如下",[38,23248,23250],{"className":208,"code":23249,"language":210,"meta":43,"style":43},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[26,23251,23252,23258,23262,23268,23276,23280,23285],{"__ignoreMap":43},[47,23253,23254,23256],{"class":49,"line":50},[47,23255,14787],{"class":217},[47,23257,15264],{"class":53},[47,23259,23260],{"class":49,"line":92},[47,23261,1640],{"class":221},[47,23263,23264,23266],{"class":49,"line":1273},[47,23265,2078],{"class":217},[47,23267,21485],{"class":221},[47,23269,23270,23272,23274],{"class":49,"line":1288},[47,23271,11113],{"class":217},[47,23273,2475],{"class":217},[47,23275,21492],{"class":221},[47,23277,23278],{"class":49,"line":1294},[47,23279,4088],{"class":221},[47,23281,23282],{"class":49,"line":1308},[47,23283,23284],{"class":279},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[47,23286,23287,23289,23291,23293,23295,23297],{"class":49,"line":1314},[47,23288,225],{"class":217},[47,23290,15662],{"class":53},[47,23292,22505],{"class":221},[47,23294,267],{"class":217},[47,23296,411],{"class":85},[47,23298,1384],{"class":221},[19,23300,23301],{},"输出结果：4",[19,23303,23304],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[171,23306,23307],{"start":92},[109,23308,23309],{},"加上非静态成员函数",[38,23311,23313],{"className":208,"code":23312,"language":210,"meta":43,"style":43},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[26,23314,23315,23322,23326,23332,23340,23344,23348,23352],{"__ignoreMap":43},[47,23316,23317,23319],{"class":49,"line":50},[47,23318,14787],{"class":217},[47,23320,23321],{"class":53},"  Person\n",[47,23323,23324],{"class":49,"line":92},[47,23325,1640],{"class":221},[47,23327,23328,23330],{"class":49,"line":1273},[47,23329,2078],{"class":217},[47,23331,21485],{"class":221},[47,23333,23334,23336,23338],{"class":49,"line":1288},[47,23335,15002],{"class":217},[47,23337,11478],{"class":53},[47,23339,2069],{"class":221},[47,23341,23342],{"class":49,"line":1294},[47,23343,2123],{"class":221},[47,23345,23346],{"class":49,"line":1308},[47,23347,2493],{"emptyLinePlaceholder":145},[47,23349,23350],{"class":49,"line":1314},[47,23351,2280],{"class":221},[47,23353,23354],{"class":49,"line":1405},[47,23355,4088],{"class":221},[19,23357,23358],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[171,23360,23361],{"start":1273},[109,23362,23363],{},"加上静态成员函数",[38,23365,23367],{"className":208,"code":23366,"language":210,"meta":43,"style":43},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[26,23368,23369,23375,23379,23385,23393,23397,23401,23405,23416,23420,23424,23428],{"__ignoreMap":43},[47,23370,23371,23373],{"class":49,"line":50},[47,23372,14787],{"class":217},[47,23374,23321],{"class":53},[47,23376,23377],{"class":49,"line":92},[47,23378,1640],{"class":221},[47,23380,23381,23383],{"class":49,"line":1273},[47,23382,2078],{"class":217},[47,23384,21485],{"class":221},[47,23386,23387,23389,23391],{"class":49,"line":1288},[47,23388,15002],{"class":217},[47,23390,11478],{"class":53},[47,23392,2069],{"class":221},[47,23394,23395],{"class":49,"line":1294},[47,23396,2123],{"class":221},[47,23398,23399],{"class":49,"line":1308},[47,23400,2493],{"emptyLinePlaceholder":145},[47,23402,23403],{"class":49,"line":1314},[47,23404,2280],{"class":221},[47,23406,23407,23409,23411,23414],{"class":49,"line":1405},[47,23408,11113],{"class":217},[47,23410,22660],{"class":217},[47,23412,23413],{"class":53}," func1",[47,23415,2069],{"class":221},[47,23417,23418],{"class":49,"line":1411},[47,23419,2123],{"class":221},[47,23421,23422],{"class":49,"line":1423},[47,23423,2493],{"emptyLinePlaceholder":145},[47,23425,23426],{"class":49,"line":1706},[47,23427,2280],{"class":221},[47,23429,23430],{"class":49,"line":1711},[47,23431,4088],{"class":221},[19,23433,23301],{},[19,23435,23436],{},"解释：静态成员函数也不属于类上",[134,23438,7767],{},{"title":43,"searchDepth":92,"depth":92,"links":23440},[23441,23447],{"id":14738,"depth":92,"text":14739,"children":23442},[23443,23444,23445,23446],{"id":14742,"depth":1273,"text":14743},{"id":15467,"depth":1273,"text":15468},{"id":15639,"depth":1273,"text":15640},{"id":16098,"depth":1273,"text":16099},{"id":18470,"depth":92,"text":18471,"children":23448},[23449,23450,23451,23452,23453,23454,23455,23456,23457],{"id":18482,"depth":1273,"text":18483},{"id":18775,"depth":1273,"text":18776},{"id":19266,"depth":1273,"text":19267},{"id":20363,"depth":1273,"text":20364},{"id":20786,"depth":1273,"text":20787},{"id":21265,"depth":1273,"text":21266},{"id":21640,"depth":1273,"text":21641},{"id":22053,"depth":1273,"text":22054},{"id":22990,"depth":1273,"text":22991},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14703,"description":23458},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23465,"title":210,"body":23466,"description":142,"extension":143,"meta":23470,"navigation":145,"path":23472,"seo":23473,"stem":23474,"__hash__":23475},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23467,"toc":23468},[],{"title":43,"searchDepth":92,"depth":92,"links":23469},[],{"category":23471},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":210,"description":142},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23477,"title":23478,"body":23479,"description":43,"extension":143,"meta":24068,"navigation":145,"path":24069,"seo":24070,"stem":24071,"__hash__":24072},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23480,"toc":24050},[23481,23484,23488,23491,23494,23497,23515,23520,23523,23526,23529,23532,23537,23540,23545,23548,23551,23555,23558,23561,23567,23570,23588,23592,23596,23599,23604,23607,23611,23614,23627,23630,23634,23637,23640,23643,23668,23671,23680,23691,23706,23738,23742,23749,23757,23761,23764,23767,23772,23776,23779,23782,23787,23790,23794,23797,23800,23805,23808,23812,23817,23821,23888,23892,23895,23898,23901,23904,23907,23913,23932,23935,23949,23958,23962,23965,23968,23973,23976,23981,23986,23989,23992,23997,24002,24005,24010,24015,24018,24023,24028,24031,24034,24039,24042,24047],[10,23482,23478],{"id":23483},"_1强化学习基本认识",[14,23485,23487],{"id":23486},"_11什么是强化学习","1.1.什么是强化学习",[19,23489,23490],{},"强化学习有两部分组成：智能体和环境；",[19,23492,23493],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,23495,23496],{},"强化学习与监督学习的区别:",[171,23498,23499,23502,23505,23508],{},[109,23500,23501],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[109,23503,23504],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[109,23506,23507],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[109,23509,23510,23511,23514],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[369,23512,23513],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,23516,23517],{},[1556,23518],{"alt":43,"src":23519},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,23521,23522],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,23524,23525],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,23527,23528],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,23530,23531],{},"获取奖励",[19,23533,23534],{},[1556,23535],{"alt":43,"src":23536},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,23538,23539],{},"强化学习可以分成标准强化学习和深度强化学习",[19,23541,23542],{},[1556,23543],{"alt":43,"src":23544},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,23546,23547],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,23549,23550],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,23552,23554],{"id":23553},"_12强化学习应用场景","1.2.强化学习应用场景",[19,23556,23557],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,23559,23560],{},"具身智能中的应用",[19,23562,23563,23566],{},[369,23564,23565],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,23568,23569],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,23571,23572,23573,23576,23577,23580,23581,23584,23585],{},"机器人是",[369,23574,23575],{},"躯体","，深度学习是",[369,23578,23579],{},"神经元****网络","，VLA是",[369,23582,23583],{},"通用的行为逻辑","，而强化学习是",[369,23586,23587],{},"教练",[14,23589,23591],{"id":23590},"_13序列决策","1.3.序列决策",[187,23593,23595],{"id":23594},"_131智能体与环境","1.3.1.智能体与环境",[19,23597,23598],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,23600,23601],{},[1556,23602],{"alt":43,"src":23603},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,23605,23606],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[187,23608,23610],{"id":23609},"_132奖励","1.3.2.奖励",[19,23612,23613],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,23615,23616,23617,23626],{},"取某个策略的表现如何。强化学习的目的就是",[369,23618,23619,23620,23625],{},"最大化",[369,23621,23622],{},[369,23623,23624],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,23628,23629],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[187,23631,23633],{"id":23632},"_133序列决策","1.3.3.序列决策",[19,23635,23636],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,23638,23639],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,23641,23642],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,23644,23645,23649,23650,23652,23653,23655,23656,23658,23659,13888,23662,13888,23665],{},[23646,23647,23648],"em",{},"Ht"," = ",[23646,23651,815],{},"1*, a",[23646,23654,436],{},", r",[23646,23657,436],{},", . . . ,* ",[23646,23660,23661],{},"ot",[23646,23663,23664],{},", at ,",[23646,23666,23667],{},"rt",[19,23669,23670],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,23672,23673,23649,23676,1752,23678,648],{},[23646,23674,23675],{},"st",[23646,23677,273],{},[23646,23679,23648],{},[19,23681,23682,23683,23686,23687,23690],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[369,23684,23685],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[369,23688,23689],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,23692,23693,23694,23697,23698,23701,23702,23705],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[369,23695,23696],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[369,23699,23700],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23646,23703,23704],{},"S, A, T, R, Ω, O, γ",")。",[19,23707,23708,23709,23711,23712,23714,23715,222,23717,23720,23721,23723,23724,222,23727,23730,23731,23733,23734,23737],{},"其中 ",[23646,23710,908],{}," 表示状态空间，为隐变量，",[23646,23713,451],{}," 为动作空间，",[23646,23716,933],{},[23646,23718,23719],{},"s ′ |s, a",") 为状态转移概率，",[23646,23722,883],{}," 为奖励函数，",[23646,23725,23726],{},"Ω",[23646,23728,23729],{},"o|s, a",") 为观测概率，",[23646,23732,809],{}," 为观测空间，",[23646,23735,23736],{},"γ"," 为折扣因子。",[14,23739,23741],{"id":23740},"_14动作空间","1.4.动作空间",[19,23743,23744,23745,23748],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[369,23746,23747],{},"动作空间"," ，动作空间分为:",[171,23750,23751,23754],{},[109,23752,23753],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[109,23755,23756],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,23758,23760],{"id":23759},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,23762,23763],{},"由策略、价值函数、模型三部分组成",[19,23765,23766],{},"这三者组成马尔可夫决策过程",[19,23768,23769],{},[1556,23770],{"alt":43,"src":23771},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[187,23773,23775],{"id":23774},"_151策略","1.5.1.策略",[19,23777,23778],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,23780,23781],{},"策略可分为两种：",[19,23783,23784],{},[1556,23785],{"alt":43,"src":23786},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,23788,23789],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[187,23791,23793],{"id":23792},"_152价值函数","1.5.2.价值函数",[19,23795,23796],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,23798,23799],{},"价值函数中有一个折扣因子，类似于存款利息",[19,23801,23802],{},[1556,23803],{"alt":43,"src":23804},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,23806,23807],{},"进入某个状态采取的最优动作可以通过Q函数得到",[187,23809,23811],{"id":23810},"_153模型","1.5.3.模型",[19,23813,23814],{},[1556,23815],{"alt":43,"src":23816},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,23818,23820],{"id":23819},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[357,23822,23823,23834],{},[360,23824,23825],{},[363,23826,23827,23831],{},[366,23828,23830],{"align":23829},"left","类型",[366,23832,23833],{"align":23829},"特点",[404,23835,23836,23846,23856,23866,23878],{},[363,23837,23838,23843],{},[409,23839,23840],{"align":23829},[369,23841,23842],{},"基于价值的智能体",[409,23844,23845],{"align":23829},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[363,23847,23848,23853],{},[409,23849,23850],{"align":23829},[369,23851,23852],{},"基于策略的智能体",[409,23854,23855],{"align":23829},"直接学习策略，没有学习价值函数",[363,23857,23858,23863],{},[409,23859,23860],{"align":23829},[369,23861,23862],{},"演员-评论员智能体",[409,23864,23865],{"align":23829},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[363,23867,23868,23873],{},[409,23869,23870],{"align":23829},[369,23871,23872],{},"有模型强化学习智能体",[409,23874,23875],{"align":23829},[1556,23876],{"alt":43,"src":23877},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[363,23879,23880,23885],{},[409,23881,23882],{"align":23829},[369,23883,23884],{},"免模型强化学习智能体",[409,23886,23887],{"align":23829},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,23889,23891],{"id":23890},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,23893,23894],{},"学习和规划是序列决策的两个基本问题",[19,23896,23897],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,23899,23900],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,23902,23903],{},"强化学习用到的库：Gym",[19,23905,23906],{},"Gym可以检验强化学习算法的优劣",[19,23908,23909,23912],{},[369,23910,23911],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[38,23914,23916],{"className":40,"code":23915,"language":42,"meta":43,"style":43},"pip install gym==0.25.2\n",[26,23917,23918],{"__ignoreMap":43},[47,23919,23920,23923,23926,23929],{"class":49,"line":50},[47,23921,23922],{"class":53},"pip",[47,23924,23925],{"class":81}," install",[47,23927,23928],{"class":81}," gym==",[47,23930,23931],{"class":85},"0.25.2\n",[19,23933,23934],{},"显示图形界面需要",[38,23936,23938],{"className":40,"code":23937,"language":42,"meta":43,"style":43},"pip install pygame\n",[26,23939,23940],{"__ignoreMap":43},[47,23941,23942,23944,23946],{"class":49,"line":50},[47,23943,23922],{"class":53},[47,23945,23925],{"class":81},[47,23947,23948],{"class":81}," pygame\n",[19,23950,23951,23952],{},"有关Gym库的相关文档介绍：",[457,23953,23957],{"href":23954,"rel":23955},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[23956],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,23959,23961],{"id":23960},"_18一些补充基础概念","1.8.一些补充基础概念",[19,23963,23964],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,23966,23967],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,23969,23970],{},[1556,23971],{"alt":43,"src":23972},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,23974,23975],{},"折扣率需要自己来设定",[19,23977,23978],{},[1556,23979],{"alt":43,"src":23980},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[171,23982,23983],{},[109,23984,23985],{},"状态转移函数：",[19,23987,23988],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,23990,23991],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,23993,23994],{},[1556,23995],{"alt":43,"src":23996},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[171,23998,23999],{"start":92},[109,24000,24001],{},"动作价值函数：",[19,24003,24004],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,24006,24007],{},[1556,24008],{"alt":43,"src":24009},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[171,24011,24012],{"start":1273},[109,24013,24014],{},"最优动作价值函数：",[19,24016,24017],{},"这个函数是对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,24019,24020],{},[1556,24021],{"alt":43,"src":24022},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[171,24024,24025],{"start":1288},[109,24026,24027],{},"状态价值函数:",[19,24029,24030],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,24032,24033],{},"它衡量的是“一个具体动作”的长期价值",[19,24035,24036],{},[1556,24037],{"alt":43,"src":24038},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,24040,24041],{},"几个价值函数之间的比较：",[19,24043,24044],{},[1556,24045],{"alt":43,"src":24046},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[134,24048,24049],{},"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":43,"searchDepth":92,"depth":92,"links":24051},[24052,24053,24054,24059,24060,24065,24066,24067],{"id":23486,"depth":92,"text":23487},{"id":23553,"depth":92,"text":23554},{"id":23590,"depth":92,"text":23591,"children":24055},[24056,24057,24058],{"id":23594,"depth":1273,"text":23595},{"id":23609,"depth":1273,"text":23610},{"id":23632,"depth":1273,"text":23633},{"id":23740,"depth":92,"text":23741},{"id":23759,"depth":92,"text":23760,"children":24061},[24062,24063,24064],{"id":23774,"depth":1273,"text":23775},{"id":23792,"depth":1273,"text":23793},{"id":23810,"depth":1273,"text":23811},{"id":23819,"depth":92,"text":23820},{"id":23890,"depth":92,"text":23891},{"id":23960,"depth":92,"text":23961},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23478,"description":43},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24074,"title":24075,"body":24076,"description":24083,"extension":143,"meta":24094,"navigation":145,"path":24095,"seo":24096,"stem":24097,"__hash__":24098},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24077,"toc":24092},[24078,24081,24084,24089],[10,24079,24075],{"id":24080},"_2马尔可夫决策过程",[19,24082,24083],{},"这是强化学习的基本框架",[19,24085,24086],{},[1556,24087],{"alt":43,"src":24088},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,24090,24091],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":43,"searchDepth":92,"depth":92,"links":24093},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24075,"description":24083},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24100,"title":24101,"body":24102,"description":43,"extension":143,"meta":24218,"navigation":145,"path":24219,"seo":24220,"stem":24221,"__hash__":24222},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24103,"toc":24213},[24104,24107,24111,24114,24119,24124,24127,24132,24135,24140,24143,24147,24152,24155,24160,24165,24170,24173,24177,24182,24185,24190,24195,24200,24205,24208],[10,24105,24101],{"id":24106},"_3动作价值函数",[14,24108,24110],{"id":24109},"_31dqn","3.1.DQN",[19,24112,24113],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,24115,24116],{},[1556,24117],{"alt":43,"src":24118},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,24120,24121],{},[1556,24122],{"alt":43,"src":24123},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,24125,24126],{},"DQN算法的描述：",[19,24128,24129],{},[1556,24130],{"alt":43,"src":24131},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,24133,24134],{},"这里的Dense指的是全连接层",[19,24136,24137],{},[1556,24138],{"alt":43,"src":24139},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,24141,24142],{},"当前观测的状态为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,24144,24146],{"id":24145},"_32dqn的举例","3.2.DQN的举例",[19,24148,24149],{},[1556,24150],{"alt":43,"src":24151},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,24153,24154],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,24156,24157],{},[1556,24158],{"alt":43,"src":24159},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,24161,24162],{},[1556,24163],{"alt":43,"src":24164},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,24166,24167],{},[1556,24168],{"alt":43,"src":24169},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,24171,24172],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,24174,24176],{"id":24175},"_33td算法","3.3.TD算法",[19,24178,24179],{},[1556,24180],{"alt":43,"src":24181},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,24183,24184],{},"强化学习TD算法公式的粗略解释：",[19,24186,24187],{},[1556,24188],{"alt":43,"src":24189},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,24191,24192],{},[1556,24193],{"alt":43,"src":24194},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,24196,24197],{},[1556,24198],{"alt":43,"src":24199},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,24201,24202],{},[1556,24203],{"alt":43,"src":24204},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,24206,24207],{},"TD算法总结：",[19,24209,24210],{},[1556,24211],{"alt":43,"src":24212},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":43,"searchDepth":92,"depth":92,"links":24214},[24215,24216,24217],{"id":24109,"depth":92,"text":24110},{"id":24145,"depth":92,"text":24146},{"id":24175,"depth":92,"text":24176},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24101,"description":43},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24224,"title":24225,"body":24226,"description":43,"extension":143,"meta":24459,"navigation":145,"path":24460,"seo":24461,"stem":24462,"__hash__":24463},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24227,"toc":24455},[24228,24231,24235,24238,24241,24246,24251,24254,24259,24264,24267,24272,24275,24280,24283,24288,24291,24296,24299,24304,24309,24312,24317,24320,24323,24328,24331,24336,24341,24345,24348,24351,24356,24361,24364,24369,24374,24377,24382,24385,24388,24393,24396,24401,24404,24409,24414,24417,24422,24427,24430,24435,24438,24443,24446],[10,24229,24225],{"id":24230},"_4策略学习",[14,24232,24234],{"id":24233},"_41概念描述","4.1.概念描述",[19,24236,24237],{},"用神经网络（策略网络）近似策略函数",[19,24239,24240],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,24242,24243],{},[1556,24244],{"alt":43,"src":24245},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,24247,24248],{},[1556,24249],{"alt":43,"src":24250},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,24252,24253],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,24255,24256],{},[1556,24257],{"alt":43,"src":24258},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,24260,24261],{},[1556,24262],{"alt":43,"src":24263},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,24265,24266],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,24268,24269],{},[1556,24270],{"alt":43,"src":24271},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,24273,24274],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,24276,24277],{},[1556,24278],{"alt":43,"src":24279},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,24281,24282],{},"改进theta要用到策略梯度算法",[19,24284,24285],{},[1556,24286],{"alt":43,"src":24287},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,24289,24290],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,24292,24293],{},[1556,24294],{"alt":43,"src":24295},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,24297,24298],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,24300,24301],{},[1556,24302],{"alt":43,"src":24303},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,24305,24306],{},[1556,24307],{"alt":43,"src":24308},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,24310,24311],{},"梯度公式总结：",[19,24313,24314],{},[1556,24315],{"alt":43,"src":24316},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,24318,24319],{},"两个公式的分别应用场景：",[19,24321,24322],{},"对于离散的动作：",[19,24324,24325],{},[1556,24326],{"alt":43,"src":24327},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,24329,24330],{},"对于连续的动作：",[19,24332,24333],{},[1556,24334],{"alt":43,"src":24335},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,24337,24338],{},[1556,24339],{"alt":43,"src":24340},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,24342,24344],{"id":24343},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,24346,24347],{},"使用蒙特卡洛来近似计算策略梯度",[19,24349,24350],{},"蒙特卡洛法的解释如下：",[19,24352,24353],{},[1556,24354],{"alt":43,"src":24355},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,24357,24358],{},[1556,24359],{"alt":43,"src":24360},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,24362,24363],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[171,24365,24366],{},[109,24367,24368],{},"方法一：reinforce算法",[19,24370,24371],{},[1556,24372],{"alt":43,"src":24373},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,24375,24376],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[171,24378,24379],{"start":92},[109,24380,24381],{},"方法二：actor-critic算法",[19,24383,24384],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,24386,24387],{},"两个网络的构建：",[19,24389,24390],{},[1556,24391],{"alt":43,"src":24392},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,24394,24395],{},"actor网路：",[19,24397,24398],{},[1556,24399],{"alt":43,"src":24400},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,24402,24403],{},"critic网络",[19,24405,24406],{},[1556,24407],{"alt":43,"src":24408},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[171,24410,24411],{"start":1273},[109,24412,24413],{},"网络的训练",[19,24415,24416],{},"网络描述",[19,24418,24419],{},[1556,24420],{"alt":43,"src":24421},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,24423,24424],{},[1556,24425],{"alt":43,"src":24426},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,24428,24429],{},"TD算法更新梯度：",[19,24431,24432],{},[1556,24433],{"alt":43,"src":24434},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,24436,24437],{},"策略网络更新梯度：",[19,24439,24440],{},[1556,24441],{"alt":43,"src":24442},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,24444,24445],{},"训练整个流程的具体描述：",[19,24447,24448,24451,24452],{},[1556,24449],{"alt":43,"src":24450},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[1556,24453],{"alt":43,"src":24454},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":43,"searchDepth":92,"depth":92,"links":24456},[24457,24458],{"id":24233,"depth":92,"text":24234},{"id":24343,"depth":92,"text":24344},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24225,"description":43},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24465,"title":24466,"body":24467,"description":24474,"extension":143,"meta":24524,"navigation":145,"path":24525,"seo":24526,"stem":24527,"__hash__":24528},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24468,"toc":24520},[24469,24472,24475,24479,24482,24487,24491,24494,24499,24502,24507,24512,24515],[10,24470,24466],{"id":24471},"_5alphago算法",[19,24473,24474],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,24476,24478],{"id":24477},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,24480,24481],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,24483,24484],{},[1556,24485],{"alt":43,"src":24486},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,24488,24490],{"id":24489},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,24492,24493],{},"采用强化学习的方式训练策略网络",[19,24495,24496],{},[1556,24497],{"alt":43,"src":24498},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,24500,24501],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,24503,24504],{},[1556,24505],{"alt":43,"src":24506},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,24508,24509],{},[1556,24510],{"alt":43,"src":24511},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,24513,24514],{},"强化学习训练策略网络的总结：",[19,24516,24517],{},[1556,24518],{"alt":43,"src":24519},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":43,"searchDepth":92,"depth":92,"links":24521},[24522,24523],{"id":24477,"depth":92,"text":24478},{"id":24489,"depth":92,"text":24490},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24466,"description":24474},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24530,"title":24531,"body":24532,"description":24539,"extension":143,"meta":24542,"navigation":145,"path":24543,"seo":24544,"stem":24545,"__hash__":24546},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24533,"toc":24540},[24534,24537],[10,24535,24531],{"id":24536},"_6价值网络",[19,24538,24539],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":43,"searchDepth":92,"depth":92,"links":24541},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24531,"description":24539},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24548,"title":24549,"body":24550,"description":24554,"extension":143,"meta":24555,"navigation":145,"path":24556,"seo":24557,"stem":24558,"__hash__":24559},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24551,"toc":24552},[],{"title":43,"searchDepth":92,"depth":92,"links":24553},[],"记录自己的强化学习笔记。",{"category":23471},"\u002Fwiki\u002F2025-12-04",{"title":24549,"description":24554},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24561,"title":24562,"body":24563,"description":142,"extension":143,"meta":24602,"navigation":145,"path":24603,"seo":24604,"stem":24605,"__hash__":24606},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24564,"toc":24600},[24565,24568,24571,24577,24580,24586,24589,24594,24597],[10,24566,24562],{"id":24567},"_1-项目概览与官方资源",[19,24569,24570],{},"官方文档：",[19,24572,24573],{},[457,24574,24575],{"href":24575,"rel":24576},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[23956],[19,24578,24579],{},"官方代码仓库：",[19,24581,24582],{},[457,24583,24584],{"href":24584,"rel":24585},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[23956],[19,24587,24588],{},"复现大体流程：",[19,24590,24591],{},[1556,24592],{"alt":43,"src":24593},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,24595,24596],{},"本教程的目标是打通这条链路：",[19,24598,24599],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":43,"searchDepth":92,"depth":92,"links":24601},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24562,"description":142},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":4,"title":5,"body":24608,"description":142,"extension":143,"meta":24691,"navigation":145,"path":146,"seo":24692,"stem":148,"__hash__":149},{"type":7,"value":24609,"toc":24686},[24610,24612,24614,24616,24620,24622,24624,24632,24638,24640,24664,24666,24684],[10,24611,5],{"id":12},[14,24613,17],{"id":16},[19,24615,21],{},[19,24617,24,24618,29],{},[26,24619,28],{},[14,24621,33],{"id":32},[19,24623,36],{},[38,24625,24626],{"className":40,"code":41,"language":42,"meta":43,"style":43},[26,24627,24628],{"__ignoreMap":43},[47,24629,24630],{"class":49,"line":50},[47,24631,41],{"class":53},[19,24633,56,24634,60,24636,64],{},[26,24635,59],{},[26,24637,63],{},[14,24639,68],{"id":67},[38,24641,24642],{"className":40,"code":71,"language":42,"meta":43,"style":43},[26,24643,24644,24654],{"__ignoreMap":43},[47,24645,24646,24648,24650,24652],{"class":49,"line":50},[47,24647,78],{"class":53},[47,24649,82],{"class":81},[47,24651,86],{"class":85},[47,24653,89],{"class":81},[47,24655,24656,24658,24660,24662],{"class":49,"line":92},[47,24657,78],{"class":53},[47,24659,82],{"class":81},[47,24661,86],{"class":85},[47,24663,101],{"class":81},[19,24665,104],{},[106,24667,24668,24672,24676,24682],{},[109,24669,24670,113],{},[26,24671,78],{},[109,24673,24674,119],{},[26,24675,118],{},[109,24677,24678,125,24680,129],{},[26,24679,124],{},[26,24681,128],{},[109,24683,132],{},[134,24685,136],{},{"title":43,"searchDepth":92,"depth":92,"links":24687},[24688,24689,24690],{"id":16,"depth":92,"text":17},{"id":32,"depth":92,"text":33},{"id":67,"depth":92,"text":68},{},{"title":5,"description":142},{"id":24694,"title":24695,"body":24696,"description":142,"extension":143,"meta":24857,"navigation":145,"path":24858,"seo":24859,"stem":24860,"__hash__":24861},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24697,"toc":24853},[24698,24702,24706,24712,24715,24772,24775,24779,24782,24850],[10,24699,24701],{"id":24700},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,24703,24705],{"id":24704},"_31-配置电机-id","3.1 配置电机 ID",[19,24707,24708,24709,24711],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[26,24710,436],{},"，需要改成机械臂链路里不冲突的编号。",[19,24713,24714],{},"方式一：用 LeRobot 命令逐步写入。",[38,24716,24718],{"className":40,"code":24717,"language":42,"meta":43,"style":43},"# 主臂舵机配置 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",[26,24719,24720,24725,24733,24740,24745,24749,24754,24760,24767],{"__ignoreMap":43},[47,24721,24722],{"class":49,"line":50},[47,24723,24724],{"class":279},"# 主臂舵机配置 ID\n",[47,24726,24727,24730],{"class":49,"line":92},[47,24728,24729],{"class":53},"lerobot-setup-motors",[47,24731,24732],{"class":85}," \\\n",[47,24734,24735,24738],{"class":49,"line":1273},[47,24736,24737],{"class":85},"  --teleop.type=so101_leader",[47,24739,24732],{"class":85},[47,24741,24742],{"class":49,"line":1288},[47,24743,24744],{"class":85},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[47,24746,24747],{"class":49,"line":1294},[47,24748,2493],{"emptyLinePlaceholder":145},[47,24750,24751],{"class":49,"line":1308},[47,24752,24753],{"class":279},"# 从臂舵机配置 ID\n",[47,24755,24756,24758],{"class":49,"line":1314},[47,24757,24729],{"class":53},[47,24759,24732],{"class":85},[47,24761,24762,24765],{"class":49,"line":1405},[47,24763,24764],{"class":85},"  --robot.type=so101_follower",[47,24766,24732],{"class":85},[47,24768,24769],{"class":49,"line":1411},[47,24770,24771],{"class":85},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,24773,24774],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,24776,24778],{"id":24777},"_32-机械臂校准","3.2 机械臂校准",[19,24780,24781],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[38,24783,24785],{"className":40,"code":24784,"language":42,"meta":43,"style":43},"# 主臂校准\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",[26,24786,24787,24792,24799,24805,24812,24817,24821,24826,24832,24838,24845],{"__ignoreMap":43},[47,24788,24789],{"class":49,"line":50},[47,24790,24791],{"class":279},"# 主臂校准\n",[47,24793,24794,24797],{"class":49,"line":92},[47,24795,24796],{"class":53},"lerobot-calibrate",[47,24798,24732],{"class":85},[47,24800,24801,24803],{"class":49,"line":1273},[47,24802,24737],{"class":85},[47,24804,24732],{"class":85},[47,24806,24807,24810],{"class":49,"line":1288},[47,24808,24809],{"class":85},"  --teleop.port=\u002Fdev\u002FttyACM0",[47,24811,24732],{"class":85},[47,24813,24814],{"class":49,"line":1294},[47,24815,24816],{"class":85},"  --teleop.id=my_awesome_leader_arm\n",[47,24818,24819],{"class":49,"line":1308},[47,24820,2493],{"emptyLinePlaceholder":145},[47,24822,24823],{"class":49,"line":1314},[47,24824,24825],{"class":279},"# 从臂校准\n",[47,24827,24828,24830],{"class":49,"line":1405},[47,24829,24796],{"class":53},[47,24831,24732],{"class":85},[47,24833,24834,24836],{"class":49,"line":1411},[47,24835,24764],{"class":85},[47,24837,24732],{"class":85},[47,24839,24840,24843],{"class":49,"line":1423},[47,24841,24842],{"class":85},"  --robot.port=\u002Fdev\u002FttyACM1",[47,24844,24732],{"class":85},[47,24846,24847],{"class":49,"line":1706},[47,24848,24849],{"class":85},"  --robot.id=my_awesome_follower_arm\n",[134,24851,24852],{},"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":43,"searchDepth":92,"depth":92,"links":24854},[24855,24856],{"id":24704,"depth":92,"text":24705},{"id":24777,"depth":92,"text":24778},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24695,"description":142},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":24863,"title":24864,"body":24865,"description":142,"extension":143,"meta":25056,"navigation":145,"path":25057,"seo":25058,"stem":25059,"__hash__":25060},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":24866,"toc":25052},[24867,24870,24874,24921,24925,24938,25001,25004,25049],[10,24868,24864],{"id":24869},"_4-遥操与相机接入",[14,24871,24873],{"id":24872},"_41-不带相机遥操","4.1 不带相机遥操",[38,24875,24877],{"className":40,"code":24876,"language":42,"meta":43,"style":43},"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",[26,24878,24879,24886,24892,24898,24905,24911,24917],{"__ignoreMap":43},[47,24880,24881,24884],{"class":49,"line":50},[47,24882,24883],{"class":53},"lerobot-teleoperate",[47,24885,24732],{"class":85},[47,24887,24888,24890],{"class":49,"line":92},[47,24889,24764],{"class":85},[47,24891,24732],{"class":85},[47,24893,24894,24896],{"class":49,"line":1273},[47,24895,24842],{"class":85},[47,24897,24732],{"class":85},[47,24899,24900,24903],{"class":49,"line":1288},[47,24901,24902],{"class":85},"  --robot.id=my_awesome_follower_arm",[47,24904,24732],{"class":85},[47,24906,24907,24909],{"class":49,"line":1294},[47,24908,24737],{"class":85},[47,24910,24732],{"class":85},[47,24912,24913,24915],{"class":49,"line":1308},[47,24914,24809],{"class":85},[47,24916,24732],{"class":85},[47,24918,24919],{"class":49,"line":1314},[47,24920,24816],{"class":85},[14,24922,24924],{"id":24923},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[38,24926,24928],{"className":40,"code":24927,"language":42,"meta":43,"style":43},"lerobot-find-cameras opencv\n",[26,24929,24930],{"__ignoreMap":43},[47,24931,24932,24935],{"class":49,"line":50},[47,24933,24934],{"class":53},"lerobot-find-cameras",[47,24936,24937],{"class":81}," opencv\n",[38,24939,24941],{"className":40,"code":24940,"language":42,"meta":43,"style":43},"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",[26,24942,24943,24949,24955,24961,24967,24977,24983,24989,24996],{"__ignoreMap":43},[47,24944,24945,24947],{"class":49,"line":50},[47,24946,24883],{"class":53},[47,24948,24732],{"class":85},[47,24950,24951,24953],{"class":49,"line":92},[47,24952,24764],{"class":85},[47,24954,24732],{"class":85},[47,24956,24957,24959],{"class":49,"line":1273},[47,24958,24842],{"class":85},[47,24960,24732],{"class":85},[47,24962,24963,24965],{"class":49,"line":1288},[47,24964,24902],{"class":85},[47,24966,24732],{"class":85},[47,24968,24969,24972,24975],{"class":49,"line":1294},[47,24970,24971],{"class":85},"  --robot.cameras=",[47,24973,24974],{"class":81},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[47,24976,24732],{"class":85},[47,24978,24979,24981],{"class":49,"line":1308},[47,24980,24737],{"class":85},[47,24982,24732],{"class":85},[47,24984,24985,24987],{"class":49,"line":1314},[47,24986,24809],{"class":85},[47,24988,24732],{"class":85},[47,24990,24991,24994],{"class":49,"line":1405},[47,24992,24993],{"class":85},"  --teleop.id=my_awesome_leader_arm",[47,24995,24732],{"class":85},[47,24997,24998],{"class":49,"line":1411},[47,24999,25000],{"class":85},"  --display_data=true\n",[19,25002,25003],{},"相机参数说明：",[106,25005,25006,25012,25018,25027,25037,25043],{},[109,25007,25008,25011],{},[26,25009,25010],{},"front","：相机名称。",[109,25013,25014,25017],{},[26,25015,25016],{},"type: opencv","：相机驱动类型。",[109,25019,25020,25023,25024,64],{},[26,25021,25022],{},"index_or_path","：设备编号或设备路径（如 ",[26,25025,25026],{},"\u002Fdev\u002Fvideo4",[109,25028,25029,25032,25033,25036],{},[26,25030,25031],{},"width"," \u002F ",[26,25034,25035],{},"height","：图像分辨率。",[109,25038,25039,25042],{},[26,25040,25041],{},"fps","：采样帧率。",[109,25044,25045,25048],{},[26,25046,25047],{},"--display_data=true","：启用实时可视化。",[134,25050,25051],{},"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":43,"searchDepth":92,"depth":92,"links":25053},[25054,25055],{"id":24872,"depth":92,"text":24873},{"id":24923,"depth":92,"text":24924},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":24864,"description":142},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25062,"title":25063,"body":25064,"description":142,"extension":143,"meta":25236,"navigation":145,"path":25237,"seo":25238,"stem":25239,"__hash__":25240},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25065,"toc":25231},[25066,25070,25074,25079,25084,25087,25129,25135,25139,25188,25193,25197,25200,25208,25213,25218,25223,25228],[10,25067,25069],{"id":25068},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,25071,25073],{"id":25072},"_51-生成访问令牌","5.1 生成访问令牌",[19,25075,25076],{},[1556,25077],{"alt":43,"src":25078},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,25080,25081],{},[1556,25082],{"alt":43,"src":25083},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,25085,25086],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[38,25088,25090],{"className":40,"code":25089,"language":42,"meta":43,"style":43},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[26,25091,25092,25105],{"__ignoreMap":43},[47,25093,25094,25097,25100,25102],{"class":49,"line":50},[47,25095,25096],{"class":217},"export",[47,25098,25099],{"class":221}," HF_TOKEN",[47,25101,267],{"class":217},[47,25103,25104],{"class":81},"\"your_huggingface_token\"\n",[47,25106,25107,25110,25113,25116,25119,25121,25124,25126],{"class":49,"line":92},[47,25108,25109],{"class":53},"hf",[47,25111,25112],{"class":81}," auth",[47,25114,25115],{"class":81}," login",[47,25117,25118],{"class":85}," --token",[47,25120,9817],{"class":81},[47,25122,25123],{"class":221},"$HF_TOKEN",[47,25125,470],{"class":81},[47,25127,25128],{"class":85}," --add-to-git-credential\n",[19,25130,25131,25134],{},[26,25132,25133],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,25136,25138],{"id":25137},"_52-验证登录","5.2 验证登录",[38,25140,25142],{"className":40,"code":25141,"language":42,"meta":43,"style":43},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[26,25143,25144,25175],{"__ignoreMap":43},[47,25145,25146,25149,25151,25154,25156,25158,25161,25164,25167,25170,25173],{"class":49,"line":50},[47,25147,25148],{"class":221},"HF_USER",[47,25150,267],{"class":217},[47,25152,25153],{"class":221},"$(",[47,25155,25109],{"class":53},[47,25157,25112],{"class":81},[47,25159,25160],{"class":81}," whoami",[47,25162,25163],{"class":217}," |",[47,25165,25166],{"class":53}," head",[47,25168,25169],{"class":85}," -n",[47,25171,25172],{"class":85}," 1",[47,25174,228],{"class":221},[47,25176,25177,25180,25182,25185],{"class":49,"line":92},[47,25178,25179],{"class":85},"echo",[47,25181,9817],{"class":81},[47,25183,25184],{"class":221},"$HF_USER",[47,25186,25187],{"class":81},"\"\n",[19,25189,25190],{},[1556,25191],{"alt":43,"src":25192},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,25194,25196],{"id":25195},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,25198,25199],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[106,25201,25202,25205],{},[109,25203,25204],{},"Dataset Repo（用于上传演示数据）",[109,25206,25207],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,25209,25210],{},[1556,25211],{"alt":43,"src":25212},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,25214,25215],{},[1556,25216],{"alt":43,"src":25217},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,25219,25220],{},[1556,25221],{"alt":43,"src":25222},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,25224,25225],{},[1556,25226],{"alt":43,"src":25227},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[134,25229,25230],{},"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":43,"searchDepth":92,"depth":92,"links":25232},[25233,25234,25235],{"id":25072,"depth":92,"text":25073},{"id":25137,"depth":92,"text":25138},{"id":25195,"depth":92,"text":25196},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25063,"description":142},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25242,"title":25243,"body":25244,"description":142,"extension":143,"meta":25441,"navigation":145,"path":25442,"seo":25443,"stem":25444,"__hash__":25445},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25245,"toc":25436},[25246,25250,25254,25350,25358,25363,25367,25383,25386,25390,25433],[10,25247,25249],{"id":25248},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,25251,25253],{"id":25252},"_61-录制示教数据","6.1 录制示教数据",[38,25255,25257],{"className":40,"code":25256,"language":42,"meta":43,"style":43},"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",[26,25258,25259,25266,25272,25278,25284,25293,25299,25305,25311,25318,25328,25335,25345],{"__ignoreMap":43},[47,25260,25261,25264],{"class":49,"line":50},[47,25262,25263],{"class":53},"lerobot-record",[47,25265,24732],{"class":85},[47,25267,25268,25270],{"class":49,"line":92},[47,25269,24764],{"class":85},[47,25271,24732],{"class":85},[47,25273,25274,25276],{"class":49,"line":1273},[47,25275,24842],{"class":85},[47,25277,24732],{"class":85},[47,25279,25280,25282],{"class":49,"line":1288},[47,25281,24902],{"class":85},[47,25283,24732],{"class":85},[47,25285,25286,25288,25291],{"class":49,"line":1294},[47,25287,24971],{"class":85},[47,25289,25290],{"class":81},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[47,25292,24732],{"class":85},[47,25294,25295,25297],{"class":49,"line":1308},[47,25296,24737],{"class":85},[47,25298,24732],{"class":85},[47,25300,25301,25303],{"class":49,"line":1314},[47,25302,24809],{"class":85},[47,25304,24732],{"class":85},[47,25306,25307,25309],{"class":49,"line":1405},[47,25308,24993],{"class":85},[47,25310,24732],{"class":85},[47,25312,25313,25316],{"class":49,"line":1411},[47,25314,25315],{"class":85},"  --display_data=true",[47,25317,24732],{"class":85},[47,25319,25320,25323,25326],{"class":49,"line":1423},[47,25321,25322],{"class":85},"  --dataset.repo_id=",[47,25324,25325],{"class":81},"\"Embodied-AI-6\u002Fso101_test\"",[47,25327,24732],{"class":85},[47,25329,25330,25333],{"class":49,"line":1706},[47,25331,25332],{"class":85},"  --dataset.num_episodes=10",[47,25334,24732],{"class":85},[47,25336,25337,25340,25343],{"class":49,"line":1711},[47,25338,25339],{"class":85},"  --dataset.single_task=",[47,25341,25342],{"class":81},"\"Grab the green cube\"",[47,25344,24732],{"class":85},[47,25346,25347],{"class":49,"line":1717},[47,25348,25349],{"class":85},"  --resume=true\n",[106,25351,25352],{},[109,25353,25354,25357],{},[26,25355,25356],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,25359,25360],{},[1556,25361],{"alt":43,"src":25362},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,25364,25366],{"id":25365},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[38,25368,25370],{"className":40,"code":25369,"language":42,"meta":43,"style":43},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[26,25371,25372],{"__ignoreMap":43},[47,25373,25374,25377,25380],{"class":49,"line":50},[47,25375,25376],{"class":53},"rm",[47,25378,25379],{"class":85}," -rf",[47,25381,25382],{"class":81}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,25384,25385],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,25387,25389],{"id":25388},"_63-回放指定-episode","6.3 回放指定 episode",[38,25391,25393],{"className":40,"code":25392,"language":42,"meta":43,"style":43},"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",[26,25394,25395,25402,25408,25414,25420,25428],{"__ignoreMap":43},[47,25396,25397,25400],{"class":49,"line":50},[47,25398,25399],{"class":53},"lerobot-replay",[47,25401,24732],{"class":85},[47,25403,25404,25406],{"class":49,"line":92},[47,25405,24764],{"class":85},[47,25407,24732],{"class":85},[47,25409,25410,25412],{"class":49,"line":1273},[47,25411,24842],{"class":85},[47,25413,24732],{"class":85},[47,25415,25416,25418],{"class":49,"line":1288},[47,25417,24902],{"class":85},[47,25419,24732],{"class":85},[47,25421,25422,25424,25426],{"class":49,"line":1294},[47,25423,25322],{"class":85},[47,25425,25325],{"class":81},[47,25427,24732],{"class":85},[47,25429,25430],{"class":49,"line":1308},[47,25431,25432],{"class":85},"  --dataset.episode=0\n",[134,25434,25435],{},"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":43,"searchDepth":92,"depth":92,"links":25437},[25438,25439,25440],{"id":25252,"depth":92,"text":25253},{"id":25365,"depth":92,"text":25366},{"id":25388,"depth":92,"text":25389},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25243,"description":142},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25447,"title":25448,"body":25449,"description":142,"extension":143,"meta":25577,"navigation":145,"path":25578,"seo":25579,"stem":25580,"__hash__":25581},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25450,"toc":25575},[25451,25455,25518,25521,25568,25573],[10,25452,25454],{"id":25453},"_7-act-模型训练","7. ACT 模型训练",[38,25456,25458],{"className":40,"code":25457,"language":42,"meta":43,"style":43},"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",[26,25459,25460,25467,25475,25482,25489,25496,25503,25510],{"__ignoreMap":43},[47,25461,25462,25465],{"class":49,"line":50},[47,25463,25464],{"class":53},"lerobot-train",[47,25466,24732],{"class":85},[47,25468,25469,25471,25473],{"class":49,"line":92},[47,25470,25322],{"class":85},[47,25472,25325],{"class":81},[47,25474,24732],{"class":85},[47,25476,25477,25480],{"class":49,"line":1273},[47,25478,25479],{"class":85},"  --policy.type=act",[47,25481,24732],{"class":85},[47,25483,25484,25487],{"class":49,"line":1288},[47,25485,25486],{"class":85},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[47,25488,24732],{"class":85},[47,25490,25491,25494],{"class":49,"line":1294},[47,25492,25493],{"class":85},"  --job_name=act_so101_test",[47,25495,24732],{"class":85},[47,25497,25498,25501],{"class":49,"line":1308},[47,25499,25500],{"class":85},"  --policy.device=cuda",[47,25502,24732],{"class":85},[47,25504,25505,25508],{"class":49,"line":1314},[47,25506,25507],{"class":85},"  --wandb.enable=false",[47,25509,24732],{"class":85},[47,25511,25512,25515],{"class":49,"line":1405},[47,25513,25514],{"class":85},"  --policy.repo_id=",[47,25516,25517],{"class":81},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,25519,25520],{},"参数说明：",[106,25522,25523,25529,25535,25541,25547,25556,25562],{},[109,25524,25525,25528],{},[26,25526,25527],{},"--dataset.repo_id","：训练数据集仓库。",[109,25530,25531,25534],{},[26,25532,25533],{},"--policy.type=act","：策略模型类型为 ACT。",[109,25536,25537,25540],{},[26,25538,25539],{},"--output_dir","：本地训练输出目录。",[109,25542,25543,25546],{},[26,25544,25545],{},"--job_name","：训练任务名称。",[109,25548,25549,25552,25553,64],{},[26,25550,25551],{},"--policy.device","：训练设备（如 ",[26,25554,25555],{},"cuda",[109,25557,25558,25561],{},[26,25559,25560],{},"--wandb.enable","：是否启用 WandB 可视化。",[109,25563,25564,25567],{},[26,25565,25566],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,25569,25570],{},[1556,25571],{"alt":43,"src":25572},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[134,25574,25435],{},{"title":43,"searchDepth":92,"depth":92,"links":25576},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25448,"description":142},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25583,"title":25584,"body":25585,"description":142,"extension":143,"meta":25672,"navigation":145,"path":25673,"seo":25674,"stem":25675,"__hash__":25676},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25586,"toc":25670},[25587,25590,25593,25660,25668],[10,25588,25584],{"id":25589},"_8-策略部署与自动采集",[19,25591,25592],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[38,25594,25596],{"className":40,"code":25595,"language":42,"meta":43,"style":43},"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",[26,25597,25598,25604,25610,25616,25624,25630,25637,25645,25653],{"__ignoreMap":43},[47,25599,25600,25602],{"class":49,"line":50},[47,25601,25263],{"class":53},[47,25603,24732],{"class":85},[47,25605,25606,25608],{"class":49,"line":92},[47,25607,24764],{"class":85},[47,25609,24732],{"class":85},[47,25611,25612,25614],{"class":49,"line":1273},[47,25613,24842],{"class":85},[47,25615,24732],{"class":85},[47,25617,25618,25620,25622],{"class":49,"line":1288},[47,25619,24971],{"class":85},[47,25621,25290],{"class":81},[47,25623,24732],{"class":85},[47,25625,25626,25628],{"class":49,"line":1294},[47,25627,24902],{"class":85},[47,25629,24732],{"class":85},[47,25631,25632,25635],{"class":49,"line":1308},[47,25633,25634],{"class":85},"  --display_data=false",[47,25636,24732],{"class":85},[47,25638,25639,25641,25643],{"class":49,"line":1314},[47,25640,25322],{"class":85},[47,25642,25325],{"class":81},[47,25644,24732],{"class":85},[47,25646,25647,25649,25651],{"class":49,"line":1405},[47,25648,25339],{"class":85},[47,25650,25342],{"class":81},[47,25652,24732],{"class":85},[47,25654,25655,25658],{"class":49,"line":1411},[47,25656,25657],{"class":85},"  --policy.path=",[47,25659,25517],{"class":81},[106,25661,25662],{},[109,25663,25664,25667],{},[26,25665,25666],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[134,25669,25435],{},{"title":43,"searchDepth":92,"depth":92,"links":25671},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25584,"description":142},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25678,"title":25679,"body":25680,"description":142,"extension":143,"meta":25709,"navigation":145,"path":25710,"seo":25711,"stem":25712,"__hash__":25713},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25681,"toc":25707},[25682,25686,25689,25695,25698,25704],[10,25683,25685],{"id":25684},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,25687,25688],{},"项目地址：",[19,25690,25691],{},[457,25692,25693],{"href":25693,"rel":25694},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[23956],[19,25696,25697],{},"参考教程：",[19,25699,25700],{},[457,25701,25702],{"href":25702,"rel":25703},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[23956],[19,25705,25706],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":43,"searchDepth":92,"depth":92,"links":25708},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25679,"description":142},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25715,"title":25716,"body":25717,"description":25721,"extension":143,"meta":25722,"navigation":145,"path":25723,"seo":25724,"stem":25725,"__hash__":25726},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25718,"toc":25719},[],{"title":43,"searchDepth":92,"depth":92,"links":25720},[],"act复现",{"category":23471},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25716,"description":25721},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25728,"title":25729,"body":25730,"description":43,"extension":143,"meta":26032,"navigation":145,"path":26033,"seo":26034,"stem":26035,"__hash__":26036},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25731,"toc":26024},[25732,25735,25739,25749,25756,25763,25766,25773,25776,25779,25783,25795,25799,25845,25848,25851,25854,25857,25860,25864,25902,25908,25912,25966,25971,25974,25977,25982,25985,25990,25993,25996,26000,26003,26006,26010],[10,25733,25729],{"id":25734},"_1简介",[187,25736,25738],{"id":25737},"_11什么是-docker","1.1什么是 Docker？",[19,25740,25741,25742,25745,25746],{},"Docker 是一个开源的 ",[369,25743,25744],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[369,25747,25748],{},"一次构建，到处运行。",[19,25750,25751,25752,25755],{},"“ ",[369,25753,25754],{},"一次构建，到处运行"," ”也就是说：",[171,25757,25758],{},[109,25759,25760],{},[369,25761,25762],{},"之前：",[19,25764,25765],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[171,25767,25768],{},[109,25769,25770],{},[369,25771,25772],{},"使用docker后：",[19,25774,25775],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,25777,25778],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[187,25780,25782],{"id":25781},"_12它是怎么工作的","1.2.它是怎么工作的？",[106,25784,25785,25788],{},[109,25786,25787],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[109,25789,25790,25791,25794],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[369,25792,25793],{},"无论在哪运行都一样稳定"," 。",[187,25796,25798],{"id":25797},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[357,25800,25801,25811],{},[360,25802,25803],{},[363,25804,25805,25808],{},[366,25806,25807],{"align":23829},"概念",[366,25809,25810],{"align":23829},"解释",[404,25812,25813,25821,25829,25837],{},[363,25814,25815,25818],{},[409,25816,25817],{"align":23829},"镜像",[409,25819,25820],{"align":23829},"Image，运行容器的模板，像是一个应用快照",[363,25822,25823,25826],{},[409,25824,25825],{"align":23829},"容器",[409,25827,25828],{"align":23829},"Container，运行中的镜像实例，有自己的文件系统、网络等",[363,25830,25831,25834],{},[409,25832,25833],{"align":23829},"Dockerfile",[409,25835,25836],{"align":23829},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[363,25838,25839,25842],{},[409,25840,25841],{"align":23829},"仓库",[409,25843,25844],{"align":23829},"Registry，存放镜像的地方，比如 Docker Hub",[19,25846,25847],{},"抽象化理解:",[19,25849,25850],{},"Docker镜像≈C++类",[19,25852,25853],{},"Docker容器≈C++类实例(即对象)",[19,25855,25856],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,25858,25859],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[187,25861,25863],{"id":25862},"_14类比理解","1.4.类比理解",[357,25865,25866,25876],{},[360,25867,25868],{},[363,25869,25870,25873],{},[366,25871,25872],{"align":23829},"传统部署",[366,25874,25875],{"align":23829},"Docker部署",[404,25877,25878,25886,25894],{},[363,25879,25880,25883],{},[409,25881,25882],{"align":23829},"手动安装依赖、调试版本不一致问题",[409,25884,25885],{"align":23829},"一次打包环境和代码",[363,25887,25888,25891],{},[409,25889,25890],{"align":23829},"程序“裸奔”跑在系统上",[409,25892,25893],{"align":23829},"程序“穿着容器”隔离运行",[363,25895,25896,25899],{},[409,25897,25898],{"align":23829},"容易“在我电脑上能跑”",[409,25900,25901],{"align":23829},"保证“无论在哪都能跑”",[19,25903,25904,25905],{},"就像快递包裹： ",[369,25906,25907],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[187,25909,25911],{"id":25910},"_15docker-的核心优势","1.5.Docker 的核心优势",[357,25913,25914,25924],{},[360,25915,25916],{},[363,25917,25918,25921],{},[366,25919,25920],{"align":23829},"优势",[366,25922,25923],{"align":23829},"说明",[404,25925,25926,25934,25942,25950,25958],{},[363,25927,25928,25931],{},[409,25929,25930],{"align":23829},"轻量级",[409,25932,25933],{"align":23829},"基于系统内核共享，启动速度快，占资源少",[363,25935,25936,25939],{},[409,25937,25938],{"align":23829},"跨平台",[409,25940,25941],{"align":23829},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[363,25943,25944,25947],{},[409,25945,25946],{"align":23829},"易于迁移部署",[409,25948,25949],{"align":23829},"应用和环境一起封装，不怕依赖不一致",[363,25951,25952,25955],{},[409,25953,25954],{"align":23829},"易于版本控制",[409,25956,25957],{"align":23829},"镜像版本可控，支持回滚",[363,25959,25960,25963],{},[409,25961,25962],{"align":23829},"生态丰富",[409,25964,25965],{"align":23829},"Docker Hub 上有成千上万的现成镜像可用",[171,25967,25968],{},[109,25969,25970],{},"在Linux上可以几乎实现无性能损失。",[19,25972,25973],{},"docker里的发行版和本机共用Linux内核。",[19,25975,25976],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[171,25978,25979],{},[109,25980,25981],{},"可以快速部署在绝大多数Linux发行版",[19,25983,25984],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[171,25986,25987],{},[109,25988,25989],{},"配置环境简单",[19,25991,25992],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,25994,25995],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[171,25997,25998],{},[109,25999,25962],{},[19,26001,26002],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,26004,26005],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[187,26007,26009],{"id":26008},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[106,26011,26012,26015,26018,26021],{},[109,26013,26014],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[109,26016,26017],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[109,26019,26020],{},"微服务架构：每个服务一个容器，灵活组合",[109,26022,26023],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":43,"searchDepth":92,"depth":92,"links":26025},[26026,26027,26028,26029,26030,26031],{"id":25737,"depth":1273,"text":25738},{"id":25781,"depth":1273,"text":25782},{"id":25797,"depth":1273,"text":25798},{"id":25862,"depth":1273,"text":25863},{"id":25910,"depth":1273,"text":25911},{"id":26008,"depth":1273,"text":26009},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25729,"description":43},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26038,"title":26039,"body":26040,"description":43,"extension":143,"meta":26773,"navigation":145,"path":26774,"seo":26775,"stem":26776,"__hash__":26777},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26041,"toc":26768},[26042,26045,26049,26052,26055,26061,26067,26071,26080,26083,26140,26143,26194,26197,26280,26283,26320,26324,26335,26348,26355,26358,26438,26441,26491,26494,26517,26521,26528,26531,26547,26553,26556,26572,26578,26581,26597,26611,26617,26637,26643,26646,26658,26664,26667,26681,26687,26690,26710,26715,26718,26721,26725,26728,26731,26734,26741,26744,26747,26750,26755,26760,26765],[10,26043,26039],{"id":26044},"_2安装docker",[187,26046,26048],{"id":26047},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,26050,26051],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,26053,26054],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,26056,26057],{},[457,26058,26059],{"href":26059,"rel":26060},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[23956],[19,26062,26063],{},[457,26064,26065],{"href":26065,"rel":26066},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[23956],[22091,26068,26070],{"id":26069},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,26072,26073,26074,26079],{},"以下内容根据 ",[457,26075,26078],{"href":26076,"rel":26077},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[23956],"官方文档"," 修改而来。",[19,26081,26082],{},"如果你过去安装过 docker，先删掉：",[38,26084,26086],{"className":40,"code":26085,"language":42,"meta":43,"style":43},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[26,26087,26088],{"__ignoreMap":43},[47,26089,26090,26092,26095,26098,26101,26104,26107,26110,26113,26116,26119,26122,26125,26128,26131,26134,26137],{"class":49,"line":50},[47,26091,3118],{"class":217},[47,26093,26094],{"class":221}," pkg ",[47,26096,26097],{"class":217},"in",[47,26099,26100],{"class":81}," docker.io",[47,26102,26103],{"class":81}," docker-doc",[47,26105,26106],{"class":81}," docker-compose",[47,26108,26109],{"class":81}," docker-compose-v2",[47,26111,26112],{"class":81}," podman-docker",[47,26114,26115],{"class":81}," containerd",[47,26117,26118],{"class":81}," runc",[47,26120,26121],{"class":221},"; ",[47,26123,26124],{"class":217},"do",[47,26126,26127],{"class":53}," sudo",[47,26129,26130],{"class":81}," apt-get",[47,26132,26133],{"class":81}," remove",[47,26135,26136],{"class":221}," $pkg; ",[47,26138,26139],{"class":217},"done\n",[19,26141,26142],{},"首先安装依赖和GPG：",[38,26144,26148],{"className":26145,"code":26146,"language":26147,"meta":43,"style":43},"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",[26,26149,26150,26155,26160,26165,26170,26175,26180,26184,26189],{"__ignoreMap":43},[47,26151,26152],{"class":49,"line":50},[47,26153,26154],{},"# Add Docker's official GPG key:\n",[47,26156,26157],{"class":49,"line":92},[47,26158,26159],{},"sudo apt-get update\n",[47,26161,26162],{"class":49,"line":1273},[47,26163,26164],{},"sudo apt-get install ca-certificates curl\n",[47,26166,26167],{"class":49,"line":1288},[47,26168,26169],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[47,26171,26172],{"class":49,"line":1294},[47,26173,26174],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[47,26176,26177],{"class":49,"line":1308},[47,26178,26179],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[47,26181,26182],{"class":49,"line":1314},[47,26183,2493],{"emptyLinePlaceholder":145},[47,26185,26186],{"class":49,"line":1405},[47,26187,26188],{},"# 如果上面这行报错就弄下面这行\n",[47,26190,26191],{"class":49,"line":1411},[47,26192,26193],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,26195,26196],{},"信任 Docker 的 GPG 公钥并添加仓库：",[38,26198,26200],{"className":40,"code":26199,"language":42,"meta":43,"style":43},"# 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",[26,26201,26202,26207,26213,26230,26263],{"__ignoreMap":43},[47,26203,26204],{"class":49,"line":50},[47,26205,26206],{"class":279},"# Add the repository to Apt sources:\n",[47,26208,26209,26211],{"class":49,"line":92},[47,26210,25179],{"class":85},[47,26212,24732],{"class":85},[47,26214,26215,26218,26221,26224,26227],{"class":49,"line":1273},[47,26216,26217],{"class":81},"  \"deb [arch=$(",[47,26219,26220],{"class":53},"dpkg",[47,26222,26223],{"class":85}," --print-architecture",[47,26225,26226],{"class":81},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[47,26228,26229],{"class":85},"\\\n",[47,26231,26232,26235,26237,26239,26242,26245,26247,26249,26252,26254,26256,26259,26261],{"class":49,"line":1288},[47,26233,26234],{"class":81},"  \"",[47,26236,25153],{"class":221},[47,26238,777],{"class":85},[47,26240,26241],{"class":81}," \u002Fetc\u002Fos-release",[47,26243,26244],{"class":221}," && ",[47,26246,25179],{"class":85},[47,26248,9817],{"class":81},[47,26250,26251],{"class":221},"$VERSION_CODENAME",[47,26253,470],{"class":81},[47,26255,648],{"class":221},[47,26257,26258],{"class":81},"\" stable\"",[47,26260,25163],{"class":217},[47,26262,24732],{"class":85},[47,26264,26265,26268,26271,26274,26277],{"class":49,"line":1294},[47,26266,26267],{"class":53},"  sudo",[47,26269,26270],{"class":81}," tee",[47,26272,26273],{"class":81}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[47,26275,26276],{"class":217}," >",[47,26278,26279],{"class":81}," \u002Fdev\u002Fnull\n",[19,26281,26282],{},"最后安装",[38,26284,26286],{"className":40,"code":26285,"language":42,"meta":43,"style":43},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[26,26287,26288,26297],{"__ignoreMap":43},[47,26289,26290,26292,26294],{"class":49,"line":50},[47,26291,78],{"class":53},[47,26293,26130],{"class":81},[47,26295,26296],{"class":81}," update\n",[47,26298,26299,26301,26303,26305,26308,26311,26314,26317],{"class":49,"line":92},[47,26300,78],{"class":53},[47,26302,26130],{"class":81},[47,26304,23925],{"class":81},[47,26306,26307],{"class":81}," docker-ce",[47,26309,26310],{"class":81}," docker-ce-cli",[47,26312,26313],{"class":81}," containerd.io",[47,26315,26316],{"class":81}," docker-buildx-plugin",[47,26318,26319],{"class":81}," docker-compose-plugin\n",[22091,26321,26323],{"id":26322},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,26325,26326,26327,26330,26331,26334],{},"查看自己自己包管理工具版本（dnf是 ",[369,26328,26329],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[369,26332,26333],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[38,26336,26338],{"className":40,"code":26337,"language":42,"meta":43,"style":43},"dnf --version\n",[26,26339,26340],{"__ignoreMap":43},[47,26341,26342,26345],{"class":49,"line":50},[47,26343,26344],{"class":53},"dnf",[47,26346,26347],{"class":85}," --version\n",[19,26349,26073,26350,26354],{},[457,26351,26078],{"href":26352,"rel":26353},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[23956]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,26356,26357],{},"如果你之前安装过 docker，请先删掉",[38,26359,26361],{"className":40,"code":26360,"language":42,"meta":43,"style":43},"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",[26,26362,26363,26377,26384,26391,26398,26405,26412,26419,26426,26433],{"__ignoreMap":43},[47,26364,26365,26367,26370,26372,26375],{"class":49,"line":50},[47,26366,78],{"class":53},[47,26368,26369],{"class":81}," dnf",[47,26371,26133],{"class":81},[47,26373,26374],{"class":81}," docker",[47,26376,24732],{"class":85},[47,26378,26379,26382],{"class":49,"line":92},[47,26380,26381],{"class":81},"                  docker-client",[47,26383,24732],{"class":85},[47,26385,26386,26389],{"class":49,"line":1273},[47,26387,26388],{"class":81},"                  docker-client-latest",[47,26390,24732],{"class":85},[47,26392,26393,26396],{"class":49,"line":1288},[47,26394,26395],{"class":81},"                  docker-common",[47,26397,24732],{"class":85},[47,26399,26400,26403],{"class":49,"line":1294},[47,26401,26402],{"class":81},"                  docker-latest",[47,26404,24732],{"class":85},[47,26406,26407,26410],{"class":49,"line":1308},[47,26408,26409],{"class":81},"                  docker-latest-logrotate",[47,26411,24732],{"class":85},[47,26413,26414,26417],{"class":49,"line":1314},[47,26415,26416],{"class":81},"                  docker-logrotate",[47,26418,24732],{"class":85},[47,26420,26421,26424],{"class":49,"line":1405},[47,26422,26423],{"class":81},"                  docker-selinux",[47,26425,24732],{"class":85},[47,26427,26428,26431],{"class":49,"line":1411},[47,26429,26430],{"class":81},"                  docker-engine-selinux",[47,26432,24732],{"class":85},[47,26434,26435],{"class":49,"line":1423},[47,26436,26437],{"class":81},"                  docker-engine\n",[19,26439,26440],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[38,26442,26444],{"className":40,"code":26443,"language":42,"meta":43,"style":43},"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",[26,26445,26446,26460,26475],{"__ignoreMap":43},[47,26447,26448,26450,26452,26455,26457],{"class":49,"line":50},[47,26449,78],{"class":53},[47,26451,26369],{"class":81},[47,26453,26454],{"class":85}," -y",[47,26456,23925],{"class":81},[47,26458,26459],{"class":81}," dnf-plugins-core\n",[47,26461,26462,26464,26466,26469,26472],{"class":49,"line":92},[47,26463,78],{"class":53},[47,26465,26369],{"class":81},[47,26467,26468],{"class":81}," config-manager",[47,26470,26471],{"class":81}," addrepo",[47,26473,26474],{"class":85}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[47,26476,26477,26479,26482,26485,26488],{"class":49,"line":1273},[47,26478,78],{"class":53},[47,26480,26481],{"class":81}," sed",[47,26483,26484],{"class":85}," -i",[47,26486,26487],{"class":81}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[47,26489,26490],{"class":81}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,26492,26493],{},"最后安装：",[38,26495,26497],{"className":40,"code":26496,"language":42,"meta":43,"style":43},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[26,26498,26499],{"__ignoreMap":43},[47,26500,26501,26503,26505,26507,26509,26511,26513,26515],{"class":49,"line":50},[47,26502,78],{"class":53},[47,26504,26369],{"class":81},[47,26506,23925],{"class":81},[47,26508,26307],{"class":81},[47,26510,26310],{"class":81},[47,26512,26313],{"class":81},[47,26514,26316],{"class":81},[47,26516,26319],{"class":81},[187,26518,26520],{"id":26519},"_22配置环境","2.2.配置环境",[22091,26522,26524,26527],{"id":26523},"_221检查-docker-服务状态",[369,26525,26526],{},"2.2.1.检查 Docker 服务状态"," ：",[19,26529,26530],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[38,26532,26534],{"className":40,"code":26533,"language":42,"meta":43,"style":43},"systemctl status docker\n",[26,26535,26536],{"__ignoreMap":43},[47,26537,26538,26541,26544],{"class":49,"line":50},[47,26539,26540],{"class":53},"systemctl",[47,26542,26543],{"class":81}," status",[47,26545,26546],{"class":81}," docker\n",[22091,26548,26550,26527],{"id":26549},"_222启动-docker-服务",[369,26551,26552],{},"2.2.2.启动 Docker 服务",[19,26554,26555],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[38,26557,26559],{"className":40,"code":26558,"language":42,"meta":43,"style":43},"sudo systemctl start docker\n",[26,26560,26561],{"__ignoreMap":43},[47,26562,26563,26565,26568,26570],{"class":49,"line":50},[47,26564,78],{"class":53},[47,26566,26567],{"class":81}," systemctl",[47,26569,4277],{"class":81},[47,26571,26546],{"class":81},[22091,26573,26575,26527],{"id":26574},"_223设置-docker-开机自启",[369,26576,26577],{},"2.2.3.设置 Docker 开机自启",[19,26579,26580],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[38,26582,26584],{"className":40,"code":26583,"language":42,"meta":43,"style":43},"sudo systemctl enable docker\n",[26,26585,26586],{"__ignoreMap":43},[47,26587,26588,26590,26592,26595],{"class":49,"line":50},[47,26589,78],{"class":53},[47,26591,26567],{"class":81},[47,26593,26594],{"class":81}," enable",[47,26596,26546],{"class":81},[22091,26598,26600,13888,26603,13888,26608,26527],{"id":26599},"_224将用户添加到-docker-组",[369,26601,26602],{},"2.2.4.将用户添加到",[369,26604,26605],{},[26,26606,26607],{},"docker",[369,26609,26610],{},"组",[19,26612,26613,26614,26616],{},"使用以下命令将当前用户添加到 ",[26,26615,26607],{}," 组：",[38,26618,26620],{"className":40,"code":26619,"language":42,"meta":43,"style":43},"sudo usermod -aG docker $USER\n",[26,26621,26622],{"__ignoreMap":43},[47,26623,26624,26626,26629,26632,26634],{"class":49,"line":50},[47,26625,78],{"class":53},[47,26627,26628],{"class":81}," usermod",[47,26630,26631],{"class":85}," -aG",[47,26633,26374],{"class":81},[47,26635,26636],{"class":221}," $USER\n",[22091,26638,26640,26527],{"id":26639},"_225退出并重新登录",[369,26641,26642],{},"2.2.5.退出并重新登录",[19,26644,26645],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[38,26647,26649],{"className":40,"code":26648,"language":42,"meta":43,"style":43},"newgrp docker\n",[26,26650,26651],{"__ignoreMap":43},[47,26652,26653,26656],{"class":49,"line":50},[47,26654,26655],{"class":53},"newgrp",[47,26657,26546],{"class":81},[22091,26659,26661,26527],{"id":26660},"_226重新启动-docker-服务如果需要",[369,26662,26663],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,26665,26666],{},"确保 Docker 服务正在运行，可以使用以下命令：",[38,26668,26669],{"className":40,"code":26558,"language":42,"meta":43,"style":43},[26,26670,26671],{"__ignoreMap":43},[47,26672,26673,26675,26677,26679],{"class":49,"line":50},[47,26674,78],{"class":53},[47,26676,26567],{"class":81},[47,26678,4277],{"class":81},[47,26680,26546],{"class":81},[22091,26682,26684,26527],{"id":26683},"_227重启电脑后检查-docker-服务状态",[369,26685,26686],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,26688,26689],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[38,26691,26693],{"className":40,"code":26692,"language":42,"meta":43,"style":43},"sudo reboot\nsystemctl status docker\n",[26,26694,26695,26702],{"__ignoreMap":43},[47,26696,26697,26699],{"class":49,"line":50},[47,26698,78],{"class":53},[47,26700,26701],{"class":81}," reboot\n",[47,26703,26704,26706,26708],{"class":49,"line":92},[47,26705,26540],{"class":53},[47,26707,26543],{"class":81},[47,26709,26546],{"class":81},[19,26711,26712],{},[1556,26713],{"alt":43,"src":26714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,26716,26717],{},"第三行显示enabled说明开机自启动成功",[19,26719,26720],{},"按q退出",[187,26722,26724],{"id":26723},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,26726,26727],{},"优先使用linux来使用docker是比较好的",[19,26729,26730],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,26732,26733],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,26735,26736,26737],{},"官方下载安装:",[457,26738,26739],{"href":26739,"rel":26740},"https:\u002F\u002Fwww.docker.com\u002F",[23956],[19,26742,26743],{},"Windows的Docker显卡直通与USB直通:",[19,26745,26746],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,26748,26749],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,26751,26752],{},[1556,26753],{"alt":43,"src":26754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,26756,26757],{},[1556,26758],{"alt":43,"src":26759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,26761,26762],{},[1556,26763],{"alt":43,"src":26764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[134,26766,26767],{},"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":43,"searchDepth":92,"depth":92,"links":26769},[26770,26771,26772],{"id":26047,"depth":1273,"text":26048},{"id":26519,"depth":1273,"text":26520},{"id":26723,"depth":1273,"text":26724},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26039,"description":43},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26779,"title":26780,"body":26781,"description":26788,"extension":143,"meta":27481,"navigation":145,"path":27482,"seo":27483,"stem":27484,"__hash__":27485},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26782,"toc":27475},[26783,26786,26789,26793,26798,26803,26806,26834,26839,26848,26851,26856,26860,26867,26872,26878,26882,26885,26889,26894,26986,26991,27009,27014,27035,27040,27056,27060,27065,27094,27099,27145,27150,27194,27202,27219,27224,27240,27245,27259,27262,27265,27268,27271,27300,27303,27308,27312,27315,27318,27324,27327,27330,27333,27395,27402,27407,27410,27428,27432,27435,27452,27455,27458,27472],[10,26784,26780],{"id":26785},"_3docker直通",[19,26787,26788],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[187,26790,26792],{"id":26791},"_31usb直通","3.1.USB直通",[19,26794,26795],{},[1556,26796],{"alt":43,"src":26797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[171,26799,26800],{},[109,26801,26802],{},"方法一(不是很推荐新手)：",[19,26804,26805],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[38,26807,26809],{"className":40,"code":26808,"language":42,"meta":43,"style":43},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[26,26810,26811,26819,26824],{"__ignoreMap":43},[47,26812,26813,26816],{"class":49,"line":50},[47,26814,26815],{"class":53},"ls",[47,26817,26818],{"class":81}," \u002Fdev\n",[47,26820,26821],{"class":49,"line":92},[47,26822,26823],{"class":279},"#例如\n",[47,26825,26826,26829,26831],{"class":49,"line":1273},[47,26827,26828],{"class":221},"--device",[47,26830,267],{"class":217},[47,26832,26833],{"class":81},"\u002Fdev\u002Ftty_USB0\n",[171,26835,26836],{"start":92},[109,26837,26838],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[38,26840,26842],{"className":40,"code":26841,"language":42,"meta":43,"style":43},"--privileged\n",[26,26843,26844],{"__ignoreMap":43},[47,26845,26846],{"class":49,"line":50},[47,26847,26841],{"class":53},[19,26849,26850],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,26852,26853],{},[1556,26854],{"alt":43,"src":26855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[187,26857,26859],{"id":26858},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,26861,26862,26863,26866],{},"NVIDIA Container Toolkit使用户 ",[369,26864,26865],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,26868,26869],{},[1556,26870],{"alt":43,"src":26871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,26873,26874],{},[457,26875,26876],{"href":26876,"rel":26877},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[23956],[22091,26879,26881],{"id":26880},"_321安装","3.2.1.安装",[19,26883,26884],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23003,26886,26888],{"id":26887},"_3211ubuntu","3.2.1.1.Ubuntu",[171,26890,26891],{},[109,26892,26893],{},"配置存储库 并更新",[38,26895,26897],{"className":40,"code":26896,"language":42,"meta":43,"style":43},"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",[26,26898,26899,26928,26948,26960,26972,26978],{"__ignoreMap":43},[47,26900,26901,26904,26907,26910,26912,26914,26917,26920,26923,26926],{"class":49,"line":50},[47,26902,26903],{"class":53},"curl",[47,26905,26906],{"class":85}," -fsSL",[47,26908,26909],{"class":81}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[47,26911,25163],{"class":217},[47,26913,26127],{"class":53},[47,26915,26916],{"class":81}," gpg",[47,26918,26919],{"class":85}," --dearmor",[47,26921,26922],{"class":85}," -o",[47,26924,26925],{"class":81}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[47,26927,24732],{"class":85},[47,26929,26930,26933,26935,26938,26941,26944,26946],{"class":49,"line":92},[47,26931,26932],{"class":221},"  && ",[47,26934,26903],{"class":53},[47,26936,26937],{"class":85}," -s",[47,26939,26940],{"class":85}," -L",[47,26942,26943],{"class":81}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[47,26945,25163],{"class":217},[47,26947,24732],{"class":85},[47,26949,26950,26953,26956,26958],{"class":49,"line":1273},[47,26951,26952],{"class":53},"    sed",[47,26954,26955],{"class":81}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[47,26957,25163],{"class":217},[47,26959,24732],{"class":85},[47,26961,26962,26965,26967,26970],{"class":49,"line":1288},[47,26963,26964],{"class":53},"    sudo",[47,26966,26270],{"class":81},[47,26968,26969],{"class":81}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[47,26971,24732],{"class":85},[47,26973,26974,26976],{"class":49,"line":1294},[47,26975,26932],{"class":221},[47,26977,26229],{"class":85},[47,26979,26980,26982,26984],{"class":49,"line":1308},[47,26981,26964],{"class":53},[47,26983,26130],{"class":81},[47,26985,26296],{"class":81},[171,26987,26988],{"start":92},[109,26989,26990],{},"安装nvidia-docker2",[38,26992,26994],{"className":40,"code":26993,"language":42,"meta":43,"style":43},"sudo apt-get install -y nvidia-docker2\n",[26,26995,26996],{"__ignoreMap":43},[47,26997,26998,27000,27002,27004,27006],{"class":49,"line":50},[47,26999,78],{"class":53},[47,27001,26130],{"class":81},[47,27003,23925],{"class":81},[47,27005,26454],{"class":85},[47,27007,27008],{"class":81}," nvidia-docker2\n",[171,27010,27011],{"start":1273},[109,27012,27013],{},"使用nvidia-ctk命令配置container runtime",[38,27015,27017],{"className":40,"code":27016,"language":42,"meta":43,"style":43},"sudo nvidia-ctk runtime configure --runtime=docker\n",[26,27018,27019],{"__ignoreMap":43},[47,27020,27021,27023,27026,27029,27032],{"class":49,"line":50},[47,27022,78],{"class":53},[47,27024,27025],{"class":81}," nvidia-ctk",[47,27027,27028],{"class":81}," runtime",[47,27030,27031],{"class":81}," configure",[47,27033,27034],{"class":85}," --runtime=docker\n",[171,27036,27037],{"start":1288},[109,27038,27039],{},"重启docker服务:",[38,27041,27043],{"className":40,"code":27042,"language":42,"meta":43,"style":43},"sudo systemctl restart docker\n",[26,27044,27045],{"__ignoreMap":43},[47,27046,27047,27049,27051,27054],{"class":49,"line":50},[47,27048,78],{"class":53},[47,27050,26567],{"class":81},[47,27052,27053],{"class":81}," restart",[47,27055,26546],{"class":81},[23003,27057,27059],{"id":27058},"_3212fedora","3.2.1.2.Fedora",[171,27061,27062],{},[109,27063,27064],{},"配置存储库",[38,27066,27068],{"className":40,"code":27067,"language":42,"meta":43,"style":43},"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",[26,27069,27070,27085],{"__ignoreMap":43},[47,27071,27072,27074,27076,27078,27081,27083],{"class":49,"line":50},[47,27073,26903],{"class":53},[47,27075,26937],{"class":85},[47,27077,26940],{"class":85},[47,27079,27080],{"class":81}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[47,27082,25163],{"class":217},[47,27084,24732],{"class":85},[47,27086,27087,27089,27091],{"class":49,"line":92},[47,27088,78],{"class":53},[47,27090,26270],{"class":81},[47,27092,27093],{"class":81}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[171,27095,27096],{"start":92},[109,27097,27098],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[38,27100,27102],{"className":40,"code":27101,"language":42,"meta":43,"style":43},"# 如果是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",[26,27103,27104,27109,27123,27127,27132],{"__ignoreMap":43},[47,27105,27106],{"class":49,"line":50},[47,27107,27108],{"class":279},"# 如果是RHEL或者Rocky（DNF4）\n",[47,27110,27111,27113,27115,27117,27120],{"class":49,"line":92},[47,27112,78],{"class":53},[47,27114,26369],{"class":81},[47,27116,26468],{"class":81},[47,27118,27119],{"class":85}," --add-repo",[47,27121,27122],{"class":81}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[47,27124,27125],{"class":49,"line":1273},[47,27126,2493],{"emptyLinePlaceholder":145},[47,27128,27129],{"class":49,"line":1288},[47,27130,27131],{"class":279},"# 如果是Feodra41+（DNF5）\n",[47,27133,27134,27136,27138,27140,27142],{"class":49,"line":1294},[47,27135,78],{"class":53},[47,27137,26369],{"class":81},[47,27139,26468],{"class":81},[47,27141,26471],{"class":81},[47,27143,27144],{"class":85}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[171,27146,27147],{"start":1273},[109,27148,27149],{},"安装NVIDIA Container Toolki包",[38,27151,27153],{"className":40,"code":27152,"language":42,"meta":43,"style":43},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[26,27154,27155,27160,27173,27177,27182],{"__ignoreMap":43},[47,27156,27157],{"class":49,"line":50},[47,27158,27159],{"class":279},"# 如果是RHEL或者Rocky\n",[47,27161,27162,27164,27166,27168,27170],{"class":49,"line":92},[47,27163,78],{"class":53},[47,27165,26369],{"class":81},[47,27167,23925],{"class":81},[47,27169,26454],{"class":85},[47,27171,27172],{"class":81}," nvidia-container-toolkit\n",[47,27174,27175],{"class":49,"line":1273},[47,27176,2493],{"emptyLinePlaceholder":145},[47,27178,27179],{"class":49,"line":1288},[47,27180,27181],{"class":279},"# 如果是Fedora\n",[47,27183,27184,27186,27188,27190,27192],{"class":49,"line":1294},[47,27185,78],{"class":53},[47,27187,26369],{"class":81},[47,27189,23925],{"class":81},[47,27191,26454],{"class":85},[47,27193,27172],{"class":81},[171,27195,27196],{"start":1288},[109,27197,27198,27199,27201],{},"安装nvidia-docker2 ： 在Fedora上使用",[26,27200,26344],{},"进行安装",[38,27203,27205],{"className":40,"code":27204,"language":42,"meta":43,"style":43},"sudo dnf install -y nvidia-docker2\n",[26,27206,27207],{"__ignoreMap":43},[47,27208,27209,27211,27213,27215,27217],{"class":49,"line":50},[47,27210,78],{"class":53},[47,27212,26369],{"class":81},[47,27214,23925],{"class":81},[47,27216,26454],{"class":85},[47,27218,27008],{"class":81},[171,27220,27221],{"start":1294},[109,27222,27223],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[38,27225,27226],{"className":40,"code":27016,"language":42,"meta":43,"style":43},[26,27227,27228],{"__ignoreMap":43},[47,27229,27230,27232,27234,27236,27238],{"class":49,"line":50},[47,27231,78],{"class":53},[47,27233,27025],{"class":81},[47,27235,27028],{"class":81},[47,27237,27031],{"class":81},[47,27239,27034],{"class":85},[171,27241,27242],{"start":1308},[109,27243,27244],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[38,27246,27247],{"className":40,"code":27042,"language":42,"meta":43,"style":43},[26,27248,27249],{"__ignoreMap":43},[47,27250,27251,27253,27255,27257],{"class":49,"line":50},[47,27252,78],{"class":53},[47,27254,26567],{"class":81},[47,27256,27053],{"class":81},[47,27258,26546],{"class":81},[19,27260,27261],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,27263,27264],{},"方法：",[19,27266,27267],{},"1️⃣nvidia-smi",[19,27269,27270],{},"2️⃣运行nvidia cuda 容器进行测试",[38,27272,27274],{"className":40,"code":27273,"language":42,"meta":43,"style":43},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[26,27275,27276],{"__ignoreMap":43},[47,27277,27278,27280,27282,27285,27288,27291,27294,27297],{"class":49,"line":50},[47,27279,78],{"class":53},[47,27281,26374],{"class":81},[47,27283,27284],{"class":81}," run",[47,27286,27287],{"class":85}," --rm",[47,27289,27290],{"class":85}," --gpus",[47,27292,27293],{"class":81}," all",[47,27295,27296],{"class":81}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[47,27298,27299],{"class":81}," nvidia-smi\n",[19,27301,27302],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,27304,27305],{},[1556,27306],{"alt":43,"src":27307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[187,27309,27311],{"id":27310},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,27313,27314],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,27316,27317],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,27319,27320],{},[457,27321,27322],{"href":27322,"rel":27323},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[23956],[19,27325,27326],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,27328,27329],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,27331,27332],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[357,27334,27335,27351],{},[360,27336,27337],{},[363,27338,27339,27342,27345,27348],{},[366,27340,27341],{"align":23829},"镜像类型",[366,27343,27344],{"align":23829},"适用场景",[366,27346,27347],{"align":23829},"示例标签",[366,27349,27350],{"align":23829},"大小",[404,27352,27353,27367,27381],{},[363,27354,27355,27358,27361,27364],{},[409,27356,27357],{"align":23829},"base",[409,27359,27360],{"align":23829},"仅需 CUDA 运行时库",[409,27362,27363],{"align":23829},"12.4.0-base-ubuntu22.04",[409,27365,27366],{"align":23829},"~240MB",[363,27368,27369,27372,27375,27378],{},[409,27370,27371],{"align":23829},"runtime",[409,27373,27374],{"align":23829},"部署编译后的应用（含数学库）",[409,27376,27377],{"align":23829},"12.4.0-runtime-ubuntu22.04",[409,27379,27380],{"align":23829},"~2GB",[363,27382,27383,27386,27389,27392],{},[409,27384,27385],{"align":23829},"devel",[409,27387,27388],{"align":23829},"开发环境（含编译工具）",[409,27390,27391],{"align":23829},"12.4.0-devel-ubuntu22.04",[409,27393,27394],{"align":23829},"~3GB",[19,27396,27397,27398,27401],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[26,27399,27400],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,27403,27404],{},[1556,27405],{"alt":43,"src":27406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,27408,27409],{},"在dockerfile里就可以开头这么写：",[38,27411,27413],{"className":40,"code":27412,"language":42,"meta":43,"style":43},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[26,27414,27415,27420],{"__ignoreMap":43},[47,27416,27417],{"class":49,"line":50},[47,27418,27419],{"class":279},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[47,27421,27422,27425],{"class":49,"line":92},[47,27423,27424],{"class":53},"FROM",[47,27426,27427],{"class":81}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[187,27429,27431],{"id":27430},"_34配置以太网","3.4.配置以太网",[19,27433,27434],{},"指定网络模式",[38,27436,27438],{"className":40,"code":27437,"language":42,"meta":43,"style":43},"--net=host \\\n",[26,27439,27440],{"__ignoreMap":43},[47,27441,27442,27445,27447,27450],{"class":49,"line":50},[47,27443,27444],{"class":221},"--net",[47,27446,267],{"class":217},[47,27448,27449],{"class":81},"host",[47,27451,24732],{"class":53},[19,27453,27454],{},"启动参数里加上这行即可。具体在下方",[19,27456,27457],{},"--net选项：指定网络模式，该选项有以下参数可选：",[106,27459,27460,27463,27466,27469],{},[109,27461,27462],{},"--net=bridge:默认选项，表示连接到默认的网桥",[109,27464,27465],{},"--net=host:容器使用宿主机的网络",[109,27467,27468],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[109,27470,27471],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[134,27473,27474],{},"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":43,"searchDepth":92,"depth":92,"links":27476},[27477,27478,27479,27480],{"id":26791,"depth":1273,"text":26792},{"id":26858,"depth":1273,"text":26859},{"id":27310,"depth":1273,"text":27311},{"id":27430,"depth":1273,"text":27431},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26780,"description":26788},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27487,"title":27488,"body":27489,"description":27496,"extension":143,"meta":27502,"navigation":145,"path":27503,"seo":27504,"stem":27505,"__hash__":27506},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27490,"toc":27500},[27491,27494,27497],[10,27492,27488],{"id":27493},"_4dockerhub换源",[19,27495,27496],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,27498,27499],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":43,"searchDepth":92,"depth":92,"links":27501},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27488,"description":27496},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27508,"title":27509,"body":27510,"description":43,"extension":143,"meta":28522,"navigation":145,"path":28523,"seo":28524,"stem":28525,"__hash__":28526},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27511,"toc":28517},[27512,27515,27519,27525,27529,27532,27872,27875,27878,27881,27886,27891,27894,27897,27900,27903,27922,27925,27936,27942,28124,28134,28150,28413,28415,28440,28455,28464,28514],[10,27513,27509],{"id":27514},"_5docker命令学习",[187,27516,27518],{"id":27517},"_51参考文档","5.1.参考文档",[19,27520,27521],{},[457,27522,27523],{"href":27523,"rel":27524},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[23956],[187,27526,27528],{"id":27527},"_52常用命令","5.2.常用命令",[19,27530,27531],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[357,27533,27534,27547],{},[360,27535,27536],{},[363,27537,27538,27541,27544],{},[366,27539,27540],{"align":23829},"命令",[366,27542,27543],{"align":23829},"描述",[366,27545,27546],{"align":23829},"示例",[404,27548,27549,27560,27571,27582,27593,27604,27615,27626,27636,27647,27658,27669,27679,27690,27701,27712,27722,27732,27742,27752,27763,27774,27785,27796,27807,27818,27828,27839,27850,27861],{},[363,27550,27551,27554,27557],{},[409,27552,27553],{"align":23829},"docker run",[409,27555,27556],{"align":23829},"创建并启动一个新的容器。",[409,27558,27559],{"align":23829},"docker run -it ubuntu bash",[363,27561,27562,27565,27568],{},[409,27563,27564],{"align":23829},"docker build",[409,27566,27567],{"align":23829},"通过指定的 Dockerfile 创建一个新的镜像。",[409,27569,27570],{"align":23829},"docker build -t myimage .",[363,27572,27573,27576,27579],{},[409,27574,27575],{"align":23829},"docker pull",[409,27577,27578],{"align":23829},"从 Docker 仓库拉取镜像。",[409,27580,27581],{"align":23829},"docker pull ubuntu",[363,27583,27584,27587,27590],{},[409,27585,27586],{"align":23829},"docker push",[409,27588,27589],{"align":23829},"将本地镜像推送到 Docker 仓库。",[409,27591,27592],{"align":23829},"docker push myimage",[363,27594,27595,27598,27601],{},[409,27596,27597],{"align":23829},"docker stop",[409,27599,27600],{"align":23829},"停止一个正在运行的容器。",[409,27602,27603],{"align":23829},"docker stop container_id",[363,27605,27606,27609,27612],{},[409,27607,27608],{"align":23829},"docker start",[409,27610,27611],{"align":23829},"启动一个已经存在的容器。",[409,27613,27614],{"align":23829},"docker start container_id",[363,27616,27617,27620,27623],{},[409,27618,27619],{"align":23829},"docker restart",[409,27621,27622],{"align":23829},"重新启动容器。",[409,27624,27625],{"align":23829},"docker restart container_id",[363,27627,27628,27631,27634],{},[409,27629,27630],{"align":23829},"docker ps",[409,27632,27633],{"align":23829},"列出当前正在运行的容器。",[409,27635,27630],{"align":23829},[363,27637,27638,27641,27644],{},[409,27639,27640],{"align":23829},"docker rm",[409,27642,27643],{"align":23829},"删除一个或多个停止的容器。",[409,27645,27646],{"align":23829},"docker rm container_id",[363,27648,27649,27652,27655],{},[409,27650,27651],{"align":23829},"docker exec",[409,27653,27654],{"align":23829},"在一个正在运行的容器中执行命令。",[409,27656,27657],{"align":23829},"docker exec -it container_id bash",[363,27659,27660,27663,27666],{},[409,27661,27662],{"align":23829},"docker logs",[409,27664,27665],{"align":23829},"查看容器的日志输出。",[409,27667,27668],{"align":23829},"docker logs container_id",[363,27670,27671,27674,27677],{},[409,27672,27673],{"align":23829},"docker images",[409,27675,27676],{"align":23829},"列出本地所有镜像。",[409,27678,27673],{"align":23829},[363,27680,27681,27684,27687],{},[409,27682,27683],{"align":23829},"docker rmi",[409,27685,27686],{"align":23829},"删除一个或多个镜像。",[409,27688,27689],{"align":23829},"docker rmi myimage",[363,27691,27692,27695,27698],{},[409,27693,27694],{"align":23829},"docker network",[409,27696,27697],{"align":23829},"管理 Docker 网络。",[409,27699,27700],{"align":23829},"docker network ls",[363,27702,27703,27706,27709],{},[409,27704,27705],{"align":23829},"docker volume",[409,27707,27708],{"align":23829},"管理 Docker 数据卷。",[409,27710,27711],{"align":23829},"docker volume ls",[363,27713,27714,27717,27720],{},[409,27715,27716],{"align":23829},"docker-compose up",[409,27718,27719],{"align":23829},"启动 docker-compose.yml 中定义的所有服务。",[409,27721,27716],{"align":23829},[363,27723,27724,27727,27730],{},[409,27725,27726],{"align":23829},"docker-compose down",[409,27728,27729],{"align":23829},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[409,27731,27726],{"align":23829},[363,27733,27734,27737,27740],{},[409,27735,27736],{"align":23829},"docker info",[409,27738,27739],{"align":23829},"显示 Docker 系统的详细信息。",[409,27741,27736],{"align":23829},[363,27743,27744,27747,27750],{},[409,27745,27746],{"align":23829},"docker stats",[409,27748,27749],{"align":23829},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[409,27751,27746],{"align":23829},[363,27753,27754,27757,27760],{},[409,27755,27756],{"align":23829},"docker inspect",[409,27758,27759],{"align":23829},"查看容器或镜像的详细信息（JSON 格式）。",[409,27761,27762],{"align":23829},"docker inspect container_id",[363,27764,27765,27768,27771],{},[409,27766,27767],{"align":23829},"docker save",[409,27769,27770],{"align":23829},"将一个镜像保存为 tar 文件。",[409,27772,27773],{"align":23829},"docker save -o myimage.tar myimage",[363,27775,27776,27779,27782],{},[409,27777,27778],{"align":23829},"docker load",[409,27780,27781],{"align":23829},"从 tar 文件中加载镜像。",[409,27783,27784],{"align":23829},"docker load -i myimage.tar",[363,27786,27787,27790,27793],{},[409,27788,27789],{"align":23829},"docker tag",[409,27791,27792],{"align":23829},"为镜像添加标签（tag）。",[409,27794,27795],{"align":23829},"docker tag myimage myimage:v1",[363,27797,27798,27801,27804],{},[409,27799,27800],{"align":23829},"docker buildx build",[409,27802,27803],{"align":23829},"使用 Buildx 构建多架构镜像。",[409,27805,27806],{"align":23829},"docker buildx build -t myimage .",[363,27808,27809,27812,27815],{},[409,27810,27811],{"align":23829},"docker buildx create",[409,27813,27814],{"align":23829},"创建一个新的 Buildx 构建实例。",[409,27816,27817],{"align":23829},"docker buildx create –use",[363,27819,27820,27823,27826],{},[409,27821,27822],{"align":23829},"docker buildx ls",[409,27824,27825],{"align":23829},"列出所有可用的 Buildx 构建实例。",[409,27827,27822],{"align":23829},[363,27829,27830,27833,27836],{},[409,27831,27832],{"align":23829},"docker buildx use",[409,27834,27835],{"align":23829},"设置当前的 Buildx 构建实例。",[409,27837,27838],{"align":23829},"docker buildx use mybuilder",[363,27840,27841,27844,27847],{},[409,27842,27843],{"align":23829},"docker buildx bake",[409,27845,27846],{"align":23829},"使用 Bake 文件批量构建镜像。",[409,27848,27849],{"align":23829},"docker buildx bake -f bake.hcl",[363,27851,27852,27855,27858],{},[409,27853,27854],{"align":23829},"docker buildx build –push",[409,27856,27857],{"align":23829},"构建镜像并推送到镜像仓库。",[409,27859,27860],{"align":23829},"docker buildx build –push -t myimage .",[363,27862,27863,27866,27869],{},[409,27864,27865],{"align":23829},"docker buildx build –platform",[409,27867,27868],{"align":23829},"构建镜像并为多个平台生成支持。",[409,27870,27871],{"align":23829},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,27873,27874],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,27876,27877],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,27879,27880],{},"docker images 可以查看已经下载的镜像",[19,27882,27883],{},[1556,27884],{"alt":43,"src":27885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,27887,27888],{},[369,27889,27890],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,27892,27893],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,27895,27896],{},"docker container logs 查看容器日志",[19,27898,27899],{},"docker top 查看容器里的进程",[19,27901,27902],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[38,27904,27906],{"className":40,"code":27905,"language":42,"meta":43,"style":43},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[26,27907,27908],{"__ignoreMap":43},[47,27909,27910,27913,27916,27919],{"class":49,"line":50},[47,27911,27912],{"class":53},"如：docker",[47,27914,27915],{"class":81}," cp",[47,27917,27918],{"class":81}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[47,27920,27921],{"class":81}," \u002Fmydata\u002Fnginx\n",[19,27923,27924],{},"docker run时在启动容器的时候会有几个常用的选项：",[106,27926,27927,27930,27933],{},[109,27928,27929],{},"-d选项：表示后台运行",[109,27931,27932],{},"-P选项：随机端口映射",[109,27934,27935],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[187,27937,27939],{"id":27938},"_53run命令的参数非常重要",[369,27940,27941],{},"5.3.run命令的参数（非常重要）",[357,27943,27944,27957],{},[360,27945,27946],{},[363,27947,27948,27951,27954],{},[366,27949,27950],{"align":23829},"参数\u002F配置",[366,27952,27953],{"align":23829},"功能说明",[366,27955,27956],{"align":23829},"重要性与参考依据",[404,27958,27959,27970,27981,27992,28003,28014,28025,28036,28047,28058,28069,28080,28091,28102,28113],{},[363,27960,27961,27964,27967],{},[409,27962,27963],{"align":23829},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[409,27965,27966],{"align":23829},"指定容器名称，便于后续管理",[409,27968,27969],{"align":23829},"替代随机生成的容器名。",[363,27971,27972,27975,27978],{},[409,27973,27974],{"align":23829},"–gpus all",[409,27976,27977],{"align":23829},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[409,27979,27980],{"align":23829},"用于CUDA加速等GPU依赖任务。",[363,27982,27983,27986,27989],{},[409,27984,27985],{"align":23829},"-e NVIDIA_DRIVER_CAPABILITIES=all",[409,27987,27988],{"align":23829},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[409,27990,27991],{"align":23829},"确保容器内GPU功能完整67。",[363,27993,27994,27997,28000],{},[409,27995,27996],{"align":23829},"-dit",[409,27998,27999],{"align":23829},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[409,28001,28002],{"align":23829},"允许容器在后台运行并支持交互操作。",[363,28004,28005,28008,28011],{},[409,28006,28007],{"align":23829},"–privileged",[409,28009,28010],{"align":23829},"赋予容器完全主机权限（可访问设备、内核模块等）",[409,28012,28013],{"align":23829},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[363,28015,28016,28019,28022],{},[409,28017,28018],{"align":23829},"–net=host",[409,28020,28021],{"align":23829},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[409,28023,28024],{"align":23829},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[363,28026,28027,28030,28033],{},[409,28028,28029],{"align":23829},"–group-add audio–group-add video–group-add dialout",[409,28031,28032],{"align":23829},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[409,28034,28035],{"align":23829},"避免权限问题（如避免无法调用摄像头、麦克风）。",[363,28037,28038,28041,28044],{},[409,28039,28040],{"align":23829},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[409,28042,28043],{"align":23829},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[409,28045,28046],{"align":23829},"支持容器内运行图形界面应用（如OpenCV可视化）。",[363,28048,28049,28052,28055],{},[409,28050,28051],{"align":23829},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[409,28053,28054],{"align":23829},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[409,28056,28057],{"align":23829},"实现容器内图形显示。",[363,28059,28060,28063,28066],{},[409,28061,28062],{"align":23829},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[409,28064,28065],{"align":23829},"挂载X11认证文件（只读）",[409,28067,28068],{"align":23829},"确保容器有权连接宿主机显示服务。",[363,28070,28071,28074,28077],{},[409,28072,28073],{"align":23829},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[409,28075,28076],{"align":23829},"挂载Wayland显示协议相关目录",[409,28078,28079],{"align":23829},"支持Wayland协议的图形显示。",[363,28081,28082,28085,28088],{},[409,28083,28084],{"align":23829},"–ulimit nofile=1024:524288",[409,28086,28087],{"align":23829},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[409,28089,28090],{"align":23829},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[363,28092,28093,28096,28099],{},[409,28094,28095],{"align":23829},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[409,28097,28098],{"align":23829},"挂载宿主机用户目录到容器内同名路径",[409,28100,28101],{"align":23829},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[363,28103,28104,28107,28110],{},[409,28105,28106],{"align":23829},"-w \u002Fhome\u002Ftungchiahui",[409,28108,28109],{"align":23829},"设置容器启动后的默认工作目录",[409,28111,28112],{"align":23829},"直接进入项目路径，方便执行命令2324。",[363,28114,28115,28118,28121],{},[409,28116,28117],{"align":23829},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[409,28119,28120],{"align":23829},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[409,28122,28123],{"align":23829},"提供预配置的深度学习与机器人开发环境。",[19,28125,28126,28127,28129,28130,28133],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[26,28128,78],{},"加不加",[26,28131,28132],{},"sudo -E","都无所谓。",[19,28135,28136,28137,28139,28140,28142,28143,28146,28147,28149],{},"用户已经被加到docker组了，不用",[26,28138,78],{},"也行跑，其次，",[26,28141,78],{},"运行的话，你的",[26,28144,28145],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[26,28148,28145],{},"更不可能变了。",[38,28151,28153],{"className":40,"code":28152,"language":42,"meta":43,"style":43},"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",[26,28154,28155,28168,28178,28188,28200,28207,28214,28221,28231,28240,28249,28263,28275,28287,28296,28306,28315,28330,28363,28390,28401,28408],{"__ignoreMap":43},[47,28156,28157,28159,28161,28163,28166],{"class":49,"line":50},[47,28158,78],{"class":53},[47,28160,26374],{"class":81},[47,28162,27284],{"class":81},[47,28164,28165],{"class":85}," --name=ros_opencv_cuda",[47,28167,24732],{"class":85},[47,28169,28170,28173,28176],{"class":49,"line":92},[47,28171,28172],{"class":221},"--gpus ",[47,28174,28175],{"class":81},"all",[47,28177,24732],{"class":85},[47,28179,28180,28183,28186],{"class":49,"line":1273},[47,28181,28182],{"class":221},"-e ",[47,28184,28185],{"class":81},"NVIDIA_DRIVER_CAPABILITIES=all",[47,28187,24732],{"class":85},[47,28189,28190,28192,28195,28198],{"class":49,"line":1288},[47,28191,28182],{"class":221},[47,28193,28194],{"class":81},"DISPLAY=",[47,28196,28197],{"class":221},"$DISPLAY ",[47,28199,26229],{"class":85},[47,28201,28202,28205],{"class":49,"line":1294},[47,28203,28204],{"class":221},"-dit ",[47,28206,26229],{"class":85},[47,28208,28209,28212],{"class":49,"line":1308},[47,28210,28211],{"class":221},"--privileged ",[47,28213,26229],{"class":85},[47,28215,28216,28219],{"class":49,"line":1314},[47,28217,28218],{"class":221},"--net=host ",[47,28220,26229],{"class":85},[47,28222,28223,28226,28229],{"class":49,"line":1405},[47,28224,28225],{"class":221},"--group-add ",[47,28227,28228],{"class":81},"audio",[47,28230,24732],{"class":85},[47,28232,28233,28235,28238],{"class":49,"line":1411},[47,28234,28225],{"class":221},[47,28236,28237],{"class":81},"video",[47,28239,24732],{"class":85},[47,28241,28242,28244,28247],{"class":49,"line":1423},[47,28243,28225],{"class":221},[47,28245,28246],{"class":81},"dialout",[47,28248,24732],{"class":85},[47,28250,28251,28253,28256,28258,28261],{"class":49,"line":1706},[47,28252,28182],{"class":221},[47,28254,28255],{"class":81},"XAUTHORITY=",[47,28257,28145],{"class":221},[47,28259,28260],{"class":81},"\u002F.Xauthority",[47,28262,24732],{"class":85},[47,28264,28265,28267,28270,28273],{"class":49,"line":1711},[47,28266,28182],{"class":221},[47,28268,28269],{"class":81},"WAYLAND_DISPLAY=",[47,28271,28272],{"class":221},"$WAYLAND_DISPLAY ",[47,28274,26229],{"class":85},[47,28276,28277,28279,28282,28285],{"class":49,"line":1717},[47,28278,28182],{"class":221},[47,28280,28281],{"class":81},"XDG_RUNTIME_DIR=",[47,28283,28284],{"class":221},"$XDG_RUNTIME_DIR ",[47,28286,26229],{"class":85},[47,28288,28289,28291,28294],{"class":49,"line":1722},[47,28290,28182],{"class":221},[47,28292,28293],{"class":81},"QT_QPA_PLATFORM=xcb",[47,28295,24732],{"class":85},[47,28297,28298,28301,28304],{"class":49,"line":1736},[47,28299,28300],{"class":221},"-v ",[47,28302,28303],{"class":81},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[47,28305,24732],{"class":85},[47,28307,28308,28310,28313],{"class":49,"line":1741},[47,28309,28300],{"class":221},[47,28311,28312],{"class":81},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[47,28314,24732],{"class":85},[47,28316,28317,28320,28323,28325,28328],{"class":49,"line":1747},[47,28318,28319],{"class":221},"-v $HOME",[47,28321,28322],{"class":81},"\u002F.Xauthority:",[47,28324,28145],{"class":221},[47,28326,28327],{"class":81},"\u002F.Xauthority:ro",[47,28329,24732],{"class":85},[47,28331,28332,28334,28337,28339,28342,28345,28347,28350,28352,28354,28356,28358,28361],{"class":49,"line":1768},[47,28333,28300],{"class":221},[47,28335,28336],{"class":81},"\u002Frun\u002Fuser\u002F",[47,28338,25153],{"class":221},[47,28340,28341],{"class":53},"id",[47,28343,28344],{"class":85}," -u",[47,28346,648],{"class":221},[47,28348,28349],{"class":81},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[47,28351,25153],{"class":221},[47,28353,28341],{"class":53},[47,28355,28344],{"class":85},[47,28357,648],{"class":221},[47,28359,28360],{"class":81},"\u002Fwayland-0",[47,28362,24732],{"class":85},[47,28364,28365,28367,28369,28371,28373,28375,28377,28380,28382,28384,28386,28388],{"class":49,"line":1773},[47,28366,28300],{"class":221},[47,28368,28336],{"class":81},[47,28370,25153],{"class":221},[47,28372,28341],{"class":53},[47,28374,28344],{"class":85},[47,28376,648],{"class":221},[47,28378,28379],{"class":81},":\u002Frun\u002Fuser\u002F",[47,28381,25153],{"class":221},[47,28383,28341],{"class":53},[47,28385,28344],{"class":85},[47,28387,13807],{"class":221},[47,28389,26229],{"class":85},[47,28391,28392,28394,28396,28399],{"class":49,"line":1787},[47,28393,28319],{"class":221},[47,28395,1078],{"class":81},[47,28397,28398],{"class":221},"$HOME ",[47,28400,26229],{"class":85},[47,28402,28403,28406],{"class":49,"line":1792},[47,28404,28405],{"class":221},"-w $HOME ",[47,28407,26229],{"class":85},[47,28409,28410],{"class":49,"line":1821},[47,28411,28412],{"class":221},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,28414,9118],{},[171,28416,28417,28425,28428,28431],{},[109,28418,28419,13888,28421,28424],{},[26,28420,28185],{},[26,28422,28423],{},"--gpus all","没有英伟达显卡请注释。",[109,28426,28427],{},"--name后面请自己为容器起名。",[109,28429,28430],{},"最后一行仓库名称请你自己找对应的镜像填上。",[109,28432,28433,28434,28439],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23646,28435,28436],{},[369,28437,28438],{},"请不要加","。",[38,28441,28443],{"className":40,"code":28442,"language":42,"meta":43,"style":43},"--ulimit nofile=1024:524288 \\\n",[26,28444,28445],{"__ignoreMap":43},[47,28446,28447,28450,28453],{"class":49,"line":50},[47,28448,28449],{"class":53},"--ulimit",[47,28451,28452],{"class":81}," nofile=1024:524288",[47,28454,24732],{"class":85},[19,28456,28457,28458,28463],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23646,28459,28460],{},[369,28461,28462],{},"不建议","**.**",[38,28465,28467],{"className":40,"code":28466,"language":42,"meta":43,"style":43},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[26,28468,28469,28496,28505],{"__ignoreMap":43},[47,28470,28471,28474,28477,28479,28481,28483,28485,28487,28489,28492,28494],{"class":49,"line":50},[47,28472,28473],{"class":53},"--user",[47,28475,28476],{"class":221}," $(",[47,28478,28341],{"class":53},[47,28480,28344],{"class":85},[47,28482,648],{"class":221},[47,28484,1078],{"class":81},[47,28486,25153],{"class":221},[47,28488,28341],{"class":53},[47,28490,28491],{"class":85}," -g",[47,28493,13807],{"class":221},[47,28495,26229],{"class":85},[47,28497,28498,28500,28503],{"class":49,"line":92},[47,28499,28300],{"class":221},[47,28501,28502],{"class":81},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[47,28504,24732],{"class":85},[47,28506,28507,28509,28512],{"class":49,"line":1273},[47,28508,28300],{"class":221},[47,28510,28511],{"class":81},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[47,28513,24732],{"class":85},[134,28515,28516],{},"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":43,"searchDepth":92,"depth":92,"links":28518},[28519,28520,28521],{"id":27517,"depth":1273,"text":27518},{"id":27527,"depth":1273,"text":27528},{"id":27938,"depth":1273,"text":27941},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27509,"description":43},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28528,"title":28529,"body":28530,"description":43,"extension":143,"meta":30153,"navigation":145,"path":30154,"seo":30155,"stem":30156,"__hash__":30157},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28531,"toc":30148},[28532,28535,28539,28542,28764,28768,28772,28775,28881,28886,28889,28894,28897,28902,28905,28910,28913,28925,28928,28933,28940,28968,28975,29051,29056,29059,29082,29084,29159,29164,29167,29171,29179,29184,29189,29193,29204,29210,29213,29216,29240,29243,29246,29274,29277,29280,29745,29748,29753,29758,29762,29785,29790,29794,29798,29801,29804,29807,29834,29837,29840,29858,29861,29864,29886,29894,29899,29904,29908,29911,29914,29917,29920,29965,29968,29986,29989,29994,29997,30018,30021,30077,30080,30085,30089,30092,30099,30102,30105,30110,30113,30129,30132,30145],[10,28533,28529],{"id":28534},"_6手动创建docker镜像",[187,28536,28538],{"id":28537},"_61dockerfile","6.1.DockerFile",[19,28540,28541],{},"常用命令：",[357,28543,28544,28555],{},[360,28545,28546],{},[363,28547,28548,28551,28553],{},[366,28549,28550],{"align":23829},"指令",[366,28552,25923],{"align":23829},[366,28554,27546],{"align":23829},[404,28556,28557,28567,28583,28594,28605,28616,28627,28638,28649,28663,28677,28688,28702,28713,28724,28738,28753],{},[363,28558,28559,28561,28564],{},[409,28560,27424],{"align":23829},[409,28562,28563],{"align":23829},"指定基础镜像，是 Dockerfile 的起点",[409,28565,28566],{"align":23829},"FROM ubuntu:22.04",[363,28568,28569,28572,28575],{},[409,28570,28571],{"align":23829},"LABEL",[409,28573,28574],{"align":23829},"添加元数据（如作者、版本等）",[409,28576,28577,28578,28582],{"align":23829},"LABEL maintainer=”",[457,28579,28581],{"href":28580},"mailto:you@example.com","you@example.com","”",[363,28584,28585,28588,28591],{},[409,28586,28587],{"align":23829},"ENV",[409,28589,28590],{"align":23829},"设置环境变量",[409,28592,28593],{"align":23829},"ENV PORT=8080",[363,28595,28596,28599,28602],{},[409,28597,28598],{"align":23829},"ARG",[409,28600,28601],{"align":23829},"构建参数，只在构建期间可用",[409,28603,28604],{"align":23829},"ARG VERSION=1.0",[363,28606,28607,28610,28613],{},[409,28608,28609],{"align":23829},"RUN",[409,28611,28612],{"align":23829},"构建镜像时运行命令",[409,28614,28615],{"align":23829},"RUN apt-get update && apt-get install -y curl",[363,28617,28618,28621,28624],{},[409,28619,28620],{"align":23829},"COPY",[409,28622,28623],{"align":23829},"复制文件到镜像中",[409,28625,28626],{"align":23829},"COPY . \u002Fapp",[363,28628,28629,28632,28635],{},[409,28630,28631],{"align":23829},"ADD",[409,28633,28634],{"align":23829},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[409,28636,28637],{"align":23829},"ADD archive.tar.gz \u002Fdata\u002F",[363,28639,28640,28643,28646],{},[409,28641,28642],{"align":23829},"WORKDIR",[409,28644,28645],{"align":23829},"设置工作目录",[409,28647,28648],{"align":23829},"WORKDIR \u002Fopt",[363,28650,28651,28654,28657],{},[409,28652,28653],{"align":23829},"CMD",[409,28655,28656],{"align":23829},"设置容器启动时默认命令（可被 docker run 覆盖）",[409,28658,28659,28660],{"align":23829},"CMD ",[47,28661,28662],{},"“node”, “index.js”",[363,28664,28665,28668,28671],{},[409,28666,28667],{"align":23829},"ENTRYPOINT",[409,28669,28670],{"align":23829},"设置容器启动时固定命令（通常用于 CLI 工具等）",[409,28672,28673,28674],{"align":23829},"ENTRYPOINT ",[47,28675,28676],{},"“python3”",[363,28678,28679,28682,28685],{},[409,28680,28681],{"align":23829},"EXPOSE",[409,28683,28684],{"align":23829},"声明镜像内服务监听的端口（不会自动映射）",[409,28686,28687],{"align":23829},"EXPOSE 80",[363,28689,28690,28693,28696],{},[409,28691,28692],{"align":23829},"VOLUME",[409,28694,28695],{"align":23829},"声明数据卷挂载点",[409,28697,28698,28699],{"align":23829},"VOLUME ",[47,28700,28701],{},"“\u002Fdata”",[363,28703,28704,28707,28710],{},[409,28705,28706],{"align":23829},"USER",[409,28708,28709],{"align":23829},"设置后续命令执行的用户",[409,28711,28712],{"align":23829},"USER appuser",[363,28714,28715,28718,28721],{},[409,28716,28717],{"align":23829},"ONBUILD",[409,28719,28720],{"align":23829},"当镜像作为其他镜像基础镜像时触发的构建指令",[409,28722,28723],{"align":23829},"ONBUILD COPY . \u002Fsrc",[363,28725,28726,28729,28732],{},[409,28727,28728],{"align":23829},"SHELL",[409,28730,28731],{"align":23829},"更改默认 shell，比如将 sh -c 改为 bash -c",[409,28733,28734,28735],{"align":23829},"SHELL ",[47,28736,28737],{},"“\u002Fbin\u002Fbash”, “-c”",[363,28739,28740,28743,28746],{},[409,28741,28742],{"align":23829},"HEALTHCHECK",[409,28744,28745],{"align":23829},"定义容器运行时的健康检查命令",[409,28747,28748,28749],{"align":23829},"`HEALTHCHECK CMD curl –fail ",[457,28750,28751],{"href":28751,"rel":28752},"http:\u002F\u002Flocalhost:8080",[23956],[363,28754,28755,28758,28761],{},[409,28756,28757],{"align":23829},"STOPSIGNAL",[409,28759,28760],{"align":23829},"容器停止时发送的信号",[409,28762,28763],{"align":23829},"STOPSIGNAL SIGKILL",[187,28765,28767],{"id":28766},"_62自己创建容器","6.2.自己创建容器",[22091,28769,28771],{"id":28770},"_621手动创建","6.2.1.手动创建",[19,28773,28774],{},"在x86电脑上编译x86的：",[38,28776,28778],{"className":40,"code":28777,"language":42,"meta":43,"style":43},"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",[26,28779,28780,28796,28800,28813,28817,28830,28834,28847,28851,28864,28868],{"__ignoreMap":43},[47,28781,28782,28784,28787,28790,28793],{"class":49,"line":50},[47,28783,26607],{"class":53},[47,28785,28786],{"class":81}," build",[47,28788,28789],{"class":85}," -t",[47,28791,28792],{"class":81}," ros-melodic-cuda118-cudnn8-bionic:latest",[47,28794,28795],{"class":81}," .\n",[47,28797,28798],{"class":49,"line":92},[47,28799,2493],{"emptyLinePlaceholder":145},[47,28801,28802,28804,28806,28808,28811],{"class":49,"line":1273},[47,28803,26607],{"class":53},[47,28805,28786],{"class":81},[47,28807,28789],{"class":85},[47,28809,28810],{"class":81}," ros-noetic-focal:latest",[47,28812,28795],{"class":81},[47,28814,28815],{"class":49,"line":1288},[47,28816,2493],{"emptyLinePlaceholder":145},[47,28818,28819,28821,28823,28825,28828],{"class":49,"line":1294},[47,28820,26607],{"class":53},[47,28822,28786],{"class":81},[47,28824,28789],{"class":85},[47,28826,28827],{"class":81}," ros-humble-jammy:latest",[47,28829,28795],{"class":81},[47,28831,28832],{"class":49,"line":1308},[47,28833,2493],{"emptyLinePlaceholder":145},[47,28835,28836,28838,28840,28842,28845],{"class":49,"line":1314},[47,28837,26607],{"class":53},[47,28839,28786],{"class":81},[47,28841,28789],{"class":85},[47,28843,28844],{"class":81}," ros-jazzy-noble:latest",[47,28846,28795],{"class":81},[47,28848,28849],{"class":49,"line":1405},[47,28850,2493],{"emptyLinePlaceholder":145},[47,28852,28853,28855,28857,28859,28862],{"class":49,"line":1411},[47,28854,26607],{"class":53},[47,28856,28786],{"class":81},[47,28858,28789],{"class":85},[47,28860,28861],{"class":81}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[47,28863,28795],{"class":81},[47,28865,28866],{"class":49,"line":1423},[47,28867,2493],{"emptyLinePlaceholder":145},[47,28869,28870,28872,28874,28876,28879],{"class":49,"line":1706},[47,28871,26607],{"class":53},[47,28873,28786],{"class":81},[47,28875,28789],{"class":85},[47,28877,28878],{"class":81}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[47,28880,28795],{"class":81},[19,28882,28883],{},[1556,28884],{"alt":43,"src":28885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,28887,28888],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,28890,28891],{},[1556,28892],{"alt":43,"src":28893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,28895,28896],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[171,28898,28899],{},[109,28900,28901],{},"创建 Docker Hub 账户",[19,28903,28904],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[171,28906,28907],{"start":92},[109,28908,28909],{},"登录 Docker Hub",[19,28911,28912],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[38,28914,28916],{"className":40,"code":28915,"language":42,"meta":43,"style":43},"docker login\n",[26,28917,28918],{"__ignoreMap":43},[47,28919,28920,28922],{"class":49,"line":50},[47,28921,26607],{"class":53},[47,28923,28924],{"class":81}," login\n",[19,28926,28927],{},"输入你的 Docker Hub 用户名和密码进行验证。",[171,28929,28930],{},[109,28931,28932],{},"为你的镜像打标签",[19,28934,28935,28936,28939],{},"Docker Hub 使用 ",[26,28937,28938],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[38,28941,28943],{"className":40,"code":28942,"language":42,"meta":43,"style":43},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[26,28944,28945],{"__ignoreMap":43},[47,28946,28947,28949,28952,28954,28957,28960,28963,28965],{"class":49,"line":50},[47,28948,26607],{"class":53},[47,28950,28951],{"class":81}," tag",[47,28953,28844],{"class":81},[47,28955,28956],{"class":217}," \u003C",[47,28958,28959],{"class":81},"你的用户",[47,28961,28962],{"class":221},"名",[47,28964,1179],{"class":217},[47,28966,28967],{"class":81},"\u002Fros-jazzy-noble:latest\n",[19,28969,28970,28971,28974],{},"例如，如果你的 Docker Hub 用户名是 ",[26,28972,28973],{},"tungchiahui","，你应该执行：",[38,28976,28978],{"className":40,"code":28977,"language":42,"meta":43,"style":43},"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",[26,28979,28980,28991,28995,29006,29010,29021,29025,29036,29040],{"__ignoreMap":43},[47,28981,28982,28984,28986,28988],{"class":49,"line":50},[47,28983,26607],{"class":53},[47,28985,28951],{"class":81},[47,28987,28810],{"class":81},[47,28989,28990],{"class":81}," tungchiahui\u002Fros-noetic-focal:latest\n",[47,28992,28993],{"class":49,"line":92},[47,28994,2493],{"emptyLinePlaceholder":145},[47,28996,28997,28999,29001,29003],{"class":49,"line":1273},[47,28998,26607],{"class":53},[47,29000,28951],{"class":81},[47,29002,28827],{"class":81},[47,29004,29005],{"class":81}," tungchiahui\u002Fros-humble-jammy:latest\n",[47,29007,29008],{"class":49,"line":1288},[47,29009,2493],{"emptyLinePlaceholder":145},[47,29011,29012,29014,29016,29018],{"class":49,"line":1294},[47,29013,26607],{"class":53},[47,29015,28951],{"class":81},[47,29017,28844],{"class":81},[47,29019,29020],{"class":81}," tungchiahui\u002Fros-jazzy-noble:latest\n",[47,29022,29023],{"class":49,"line":1308},[47,29024,2493],{"emptyLinePlaceholder":145},[47,29026,29027,29029,29031,29033],{"class":49,"line":1314},[47,29028,26607],{"class":53},[47,29030,28951],{"class":81},[47,29032,28861],{"class":81},[47,29034,29035],{"class":81}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[47,29037,29038],{"class":49,"line":1405},[47,29039,2493],{"emptyLinePlaceholder":145},[47,29041,29042,29044,29046,29048],{"class":49,"line":1411},[47,29043,26607],{"class":53},[47,29045,28951],{"class":81},[47,29047,28878],{"class":81},[47,29049,29050],{"class":81}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[171,29052,29053],{"start":92},[109,29054,29055],{},"推送镜像到 Docker Hub",[19,29057,29058],{},"使用以下命令将镜像推送到 Docker Hub：",[38,29060,29062],{"className":40,"code":29061,"language":42,"meta":43,"style":43},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[26,29063,29064],{"__ignoreMap":43},[47,29065,29066,29068,29071,29073,29075,29077,29079],{"class":49,"line":50},[47,29067,26607],{"class":53},[47,29069,29070],{"class":81}," push",[47,29072,28956],{"class":217},[47,29074,28959],{"class":81},[47,29076,28962],{"class":221},[47,29078,1179],{"class":217},[47,29080,29081],{"class":81},"\u002Fros-noetic-jazzy-noble:latest\n",[19,29083,14726],{},[38,29085,29087],{"className":40,"code":29086,"language":42,"meta":43,"style":43},"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",[26,29088,29089,29097,29101,29109,29113,29121,29125,29134,29138,29146,29150],{"__ignoreMap":43},[47,29090,29091,29093,29095],{"class":49,"line":50},[47,29092,26607],{"class":53},[47,29094,29070],{"class":81},[47,29096,28990],{"class":81},[47,29098,29099],{"class":49,"line":92},[47,29100,2493],{"emptyLinePlaceholder":145},[47,29102,29103,29105,29107],{"class":49,"line":1273},[47,29104,26607],{"class":53},[47,29106,29070],{"class":81},[47,29108,29005],{"class":81},[47,29110,29111],{"class":49,"line":1288},[47,29112,2493],{"emptyLinePlaceholder":145},[47,29114,29115,29117,29119],{"class":49,"line":1294},[47,29116,26607],{"class":53},[47,29118,29070],{"class":81},[47,29120,29020],{"class":81},[47,29122,29123],{"class":49,"line":1308},[47,29124,2493],{"emptyLinePlaceholder":145},[47,29126,29127,29129,29131],{"class":49,"line":1314},[47,29128,26607],{"class":53},[47,29130,29070],{"class":81},[47,29132,29133],{"class":81}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[47,29135,29136],{"class":49,"line":1405},[47,29137,2493],{"emptyLinePlaceholder":145},[47,29139,29140,29142,29144],{"class":49,"line":1411},[47,29141,26607],{"class":53},[47,29143,29070],{"class":81},[47,29145,29050],{"class":81},[47,29147,29148],{"class":49,"line":1423},[47,29149,2493],{"emptyLinePlaceholder":145},[47,29151,29152,29154,29156],{"class":49,"line":1706},[47,29153,26607],{"class":53},[47,29155,29070],{"class":81},[47,29157,29158],{"class":81}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[171,29160,29161],{"start":1273},[109,29162,29163],{},"验证推送成功",[19,29165,29166],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,29168,29169],{},[369,29170,3877],{},[106,29172,29173,29176],{},[109,29174,29175],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[109,29177,29178],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,29180,29181],{},[1556,29182],{"alt":43,"src":29183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,29185,29186],{},[1556,29187],{"alt":43,"src":29188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22091,29190,29192],{"id":29191},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,29194,29195,29196,29199,29200,29203],{},"如果您想在 ",[369,29197,29198],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[369,29201,29202],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,29205,29206,29207],{},"1. ",[369,29208,29209],{},"启用 Docker 跨平台构建",[19,29211,29212],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,29214,29215],{},"第一步：启用 buildx（只需执行一次）",[38,29217,29219],{"className":40,"code":29218,"language":42,"meta":43,"style":43},"docker buildx create --name multiarch_builder --use\n",[26,29220,29221],{"__ignoreMap":43},[47,29222,29223,29225,29228,29231,29234,29237],{"class":49,"line":50},[47,29224,26607],{"class":53},[47,29226,29227],{"class":81}," buildx",[47,29229,29230],{"class":81}," create",[47,29232,29233],{"class":85}," --name",[47,29235,29236],{"class":81}," multiarch_builder",[47,29238,29239],{"class":85}," --use\n",[19,29241,29242],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,29244,29245],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[38,29247,29249],{"className":40,"code":29248,"language":42,"meta":43,"style":43},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[26,29250,29251],{"__ignoreMap":43},[47,29252,29253,29255,29257,29259,29262,29265,29268,29271],{"class":49,"line":50},[47,29254,26607],{"class":53},[47,29256,27284],{"class":81},[47,29258,27287],{"class":85},[47,29260,29261],{"class":85}," --privileged",[47,29263,29264],{"class":81}," multiarch\u002Fqemu-user-static",[47,29266,29267],{"class":85}," --reset",[47,29269,29270],{"class":85}," -p",[47,29272,29273],{"class":81}," yes\n",[19,29275,29276],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,29278,29279],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[38,29281,29283],{"className":40,"code":29282,"language":42,"meta":43,"style":43},"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",[26,29284,29285,29327,29331,29336,29346,29356,29365,29371,29375,29379,29389,29397,29406,29412,29416,29420,29430,29438,29447,29453,29457,29461,29471,29479,29488,29494,29498,29502,29512,29520,29529,29535,29539,29543,29553,29561,29570,29576,29580,29584,29594,29602,29611,29617,29621,29625,29635,29643,29652,29658,29662,29666,29676,29684,29693,29699,29703,29707,29718,29726,29735,29741],{"__ignoreMap":43},[47,29286,29287,29289,29291,29293,29296,29299,29301,29303,29306,29308,29310,29312,29314,29317,29320,29322,29325],{"class":49,"line":50},[47,29288,26607],{"class":53},[47,29290,29227],{"class":81},[47,29292,28786],{"class":81},[47,29294,29295],{"class":85}," --platform",[47,29297,29298],{"class":81}," linux\u002Famd64,linux\u002Farm64",[47,29300,28789],{"class":85},[47,29302,28956],{"class":217},[47,29304,29305],{"class":81},"你的镜像",[47,29307,28962],{"class":221},[47,29309,1179],{"class":217},[47,29311,1078],{"class":81},[47,29313,1129],{"class":217},[47,29315,29316],{"class":81},"标",[47,29318,29319],{"class":221},"签",[47,29321,1179],{"class":217},[47,29323,29324],{"class":85}," --push",[47,29326,28795],{"class":81},[47,29328,29329],{"class":49,"line":92},[47,29330,2493],{"emptyLinePlaceholder":145},[47,29332,29333],{"class":49,"line":1273},[47,29334,29335],{"class":279},"# 例子：\n",[47,29337,29338,29340,29342,29344],{"class":49,"line":1288},[47,29339,26607],{"class":53},[47,29341,29227],{"class":81},[47,29343,28786],{"class":81},[47,29345,24732],{"class":85},[47,29347,29348,29351,29354],{"class":49,"line":1294},[47,29349,29350],{"class":221},"--platform ",[47,29352,29353],{"class":81},"linux\u002Famd64,linux\u002Farm64",[47,29355,24732],{"class":85},[47,29357,29358,29360,29363],{"class":49,"line":1308},[47,29359,28789],{"class":85},[47,29361,29362],{"class":81}," tungchiahui\u002Fros:noetic-focal",[47,29364,24732],{"class":85},[47,29366,29367,29369],{"class":49,"line":1314},[47,29368,29324],{"class":85},[47,29370,24732],{"class":85},[47,29372,29373],{"class":49,"line":1405},[47,29374,28795],{"class":81},[47,29376,29377],{"class":49,"line":1411},[47,29378,2493],{"emptyLinePlaceholder":145},[47,29380,29381,29383,29385,29387],{"class":49,"line":1423},[47,29382,26607],{"class":53},[47,29384,29227],{"class":81},[47,29386,28786],{"class":81},[47,29388,24732],{"class":85},[47,29390,29391,29393,29395],{"class":49,"line":1706},[47,29392,29350],{"class":221},[47,29394,29353],{"class":81},[47,29396,24732],{"class":85},[47,29398,29399,29401,29404],{"class":49,"line":1711},[47,29400,28789],{"class":85},[47,29402,29403],{"class":81}," tungchiahui\u002Fros:humble-jammy",[47,29405,24732],{"class":85},[47,29407,29408,29410],{"class":49,"line":1717},[47,29409,29324],{"class":85},[47,29411,24732],{"class":85},[47,29413,29414],{"class":49,"line":1722},[47,29415,28795],{"class":81},[47,29417,29418],{"class":49,"line":1736},[47,29419,2493],{"emptyLinePlaceholder":145},[47,29421,29422,29424,29426,29428],{"class":49,"line":1741},[47,29423,26607],{"class":53},[47,29425,29227],{"class":81},[47,29427,28786],{"class":81},[47,29429,24732],{"class":85},[47,29431,29432,29434,29436],{"class":49,"line":1747},[47,29433,29350],{"class":221},[47,29435,29353],{"class":81},[47,29437,24732],{"class":85},[47,29439,29440,29442,29445],{"class":49,"line":1768},[47,29441,28789],{"class":85},[47,29443,29444],{"class":81}," tungchiahui\u002Fros:jazzy-noble",[47,29446,24732],{"class":85},[47,29448,29449,29451],{"class":49,"line":1773},[47,29450,29324],{"class":85},[47,29452,24732],{"class":85},[47,29454,29455],{"class":49,"line":1787},[47,29456,28795],{"class":81},[47,29458,29459],{"class":49,"line":1792},[47,29460,2493],{"emptyLinePlaceholder":145},[47,29462,29463,29465,29467,29469],{"class":49,"line":1821},[47,29464,26374],{"class":53},[47,29466,29227],{"class":81},[47,29468,28786],{"class":81},[47,29470,24732],{"class":85},[47,29472,29473,29475,29477],{"class":49,"line":1826},[47,29474,29350],{"class":221},[47,29476,29353],{"class":81},[47,29478,24732],{"class":85},[47,29480,29481,29483,29486],{"class":49,"line":1843},[47,29482,28789],{"class":85},[47,29484,29485],{"class":81}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[47,29487,24732],{"class":85},[47,29489,29490,29492],{"class":49,"line":1848},[47,29491,29324],{"class":85},[47,29493,24732],{"class":85},[47,29495,29496],{"class":49,"line":1853},[47,29497,28795],{"class":81},[47,29499,29500],{"class":49,"line":1858},[47,29501,2493],{"emptyLinePlaceholder":145},[47,29503,29504,29506,29508,29510],{"class":49,"line":1872},[47,29505,26607],{"class":53},[47,29507,29227],{"class":81},[47,29509,28786],{"class":81},[47,29511,24732],{"class":85},[47,29513,29514,29516,29518],{"class":49,"line":1877},[47,29515,29350],{"class":221},[47,29517,29353],{"class":81},[47,29519,24732],{"class":85},[47,29521,29522,29524,29527],{"class":49,"line":2670},[47,29523,28789],{"class":85},[47,29525,29526],{"class":81}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[47,29528,24732],{"class":85},[47,29530,29531,29533],{"class":49,"line":2684},[47,29532,29324],{"class":85},[47,29534,24732],{"class":85},[47,29536,29537],{"class":49,"line":2692},[47,29538,28795],{"class":81},[47,29540,29541],{"class":49,"line":2697},[47,29542,2493],{"emptyLinePlaceholder":145},[47,29544,29545,29547,29549,29551],{"class":49,"line":2703},[47,29546,26374],{"class":53},[47,29548,29227],{"class":81},[47,29550,28786],{"class":81},[47,29552,24732],{"class":85},[47,29554,29555,29557,29559],{"class":49,"line":2709},[47,29556,29350],{"class":221},[47,29558,29353],{"class":81},[47,29560,24732],{"class":85},[47,29562,29563,29565,29568],{"class":49,"line":2714},[47,29564,28789],{"class":85},[47,29566,29567],{"class":81}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[47,29569,24732],{"class":85},[47,29571,29572,29574],{"class":49,"line":8041},[47,29573,29324],{"class":85},[47,29575,24732],{"class":85},[47,29577,29578],{"class":49,"line":8065},[47,29579,28795],{"class":81},[47,29581,29582],{"class":49,"line":8070},[47,29583,2493],{"emptyLinePlaceholder":145},[47,29585,29586,29588,29590,29592],{"class":49,"line":8076},[47,29587,26607],{"class":53},[47,29589,29227],{"class":81},[47,29591,28786],{"class":81},[47,29593,24732],{"class":85},[47,29595,29596,29598,29600],{"class":49,"line":8103},[47,29597,29350],{"class":221},[47,29599,29353],{"class":81},[47,29601,24732],{"class":85},[47,29603,29604,29606,29609],{"class":49,"line":8108},[47,29605,28789],{"class":85},[47,29607,29608],{"class":81}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[47,29610,24732],{"class":85},[47,29612,29613,29615],{"class":49,"line":8114},[47,29614,29324],{"class":85},[47,29616,24732],{"class":85},[47,29618,29619],{"class":49,"line":8126},[47,29620,28795],{"class":81},[47,29622,29623],{"class":49,"line":8138},[47,29624,2493],{"emptyLinePlaceholder":145},[47,29626,29627,29629,29631,29633],{"class":49,"line":8150},[47,29628,26607],{"class":53},[47,29630,29227],{"class":81},[47,29632,28786],{"class":81},[47,29634,24732],{"class":85},[47,29636,29637,29639,29641],{"class":49,"line":9809},[47,29638,29350],{"class":221},[47,29640,29353],{"class":81},[47,29642,24732],{"class":85},[47,29644,29645,29647,29650],{"class":49,"line":9834},[47,29646,28789],{"class":85},[47,29648,29649],{"class":81}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[47,29651,24732],{"class":85},[47,29653,29654,29656],{"class":49,"line":9857},[47,29655,29324],{"class":85},[47,29657,24732],{"class":85},[47,29659,29660],{"class":49,"line":9881},[47,29661,28795],{"class":81},[47,29663,29664],{"class":49,"line":9886},[47,29665,2493],{"emptyLinePlaceholder":145},[47,29667,29668,29670,29672,29674],{"class":49,"line":9891},[47,29669,26374],{"class":53},[47,29671,29227],{"class":81},[47,29673,28786],{"class":81},[47,29675,24732],{"class":85},[47,29677,29678,29680,29682],{"class":49,"line":9896},[47,29679,29350],{"class":221},[47,29681,29353],{"class":81},[47,29683,24732],{"class":85},[47,29685,29686,29688,29691],{"class":49,"line":9905},[47,29687,28789],{"class":85},[47,29689,29690],{"class":81}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[47,29692,24732],{"class":85},[47,29694,29695,29697],{"class":49,"line":9910},[47,29696,29324],{"class":85},[47,29698,24732],{"class":85},[47,29700,29701],{"class":49,"line":9916},[47,29702,28795],{"class":81},[47,29704,29705],{"class":49,"line":9937},[47,29706,2493],{"emptyLinePlaceholder":145},[47,29708,29709,29712,29714,29716],{"class":49,"line":9943},[47,29710,29711],{"class":53},"  docker",[47,29713,29227],{"class":81},[47,29715,28786],{"class":81},[47,29717,24732],{"class":85},[47,29719,29720,29722,29724],{"class":49,"line":9957},[47,29721,29350],{"class":221},[47,29723,29353],{"class":81},[47,29725,24732],{"class":85},[47,29727,29728,29730,29733],{"class":49,"line":9963},[47,29729,28789],{"class":85},[47,29731,29732],{"class":81}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[47,29734,24732],{"class":85},[47,29736,29737,29739],{"class":49,"line":9990},[47,29738,29324],{"class":85},[47,29740,24732],{"class":85},[47,29742,29743],{"class":49,"line":9999},[47,29744,28795],{"class":81},[19,29746,29747],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,29749,29750],{},[1556,29751],{"alt":43,"src":29752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,29754,29755],{},[1556,29756],{"alt":43,"src":29757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22091,29759,29761],{"id":29760},"_623清除构建缓存","6.2.3.清除构建缓存",[38,29763,29765],{"className":40,"code":29764,"language":42,"meta":43,"style":43},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[26,29766,29767,29772],{"__ignoreMap":43},[47,29768,29769],{"class":49,"line":50},[47,29770,29771],{"class":279},"# 清理BuildKit构建缓存\n",[47,29773,29774,29776,29779,29782],{"class":49,"line":92},[47,29775,26607],{"class":53},[47,29777,29778],{"class":81}," builder",[47,29780,29781],{"class":81}," prune",[47,29783,29784],{"class":85}," -f\n",[19,29786,29787],{},[1556,29788],{"alt":43,"src":29789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[187,29791,29793],{"id":29792},"_63补充","6.3.补充",[22091,29795,29797],{"id":29796},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,29799,29800],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,29802,29803],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,29805,29806],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[38,29808,29810],{"className":40,"code":29809,"language":42,"meta":43,"style":43},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[26,29811,29812,29819],{"__ignoreMap":43},[47,29813,29814,29816],{"class":49,"line":50},[47,29815,27424],{"class":53},[47,29817,29818],{"class":81}," nginx\n",[47,29820,29821,29823,29826,29829,29831],{"class":49,"line":92},[47,29822,28609],{"class":53},[47,29824,29825],{"class":81}," echo",[47,29827,29828],{"class":81}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[47,29830,26276],{"class":217},[47,29832,29833],{"class":81}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,29835,29836],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,29838,29839],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[38,29841,29843],{"className":40,"code":29842,"language":42,"meta":43,"style":43},"docker build -t nginx:tuling .\n",[26,29844,29845],{"__ignoreMap":43},[47,29846,29847,29849,29851,29853,29856],{"class":49,"line":50},[47,29848,26607],{"class":53},[47,29850,28786],{"class":81},[47,29852,28789],{"class":85},[47,29854,29855],{"class":81}," nginx:tuling",[47,29857,28795],{"class":81},[19,29859,29860],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,29862,29863],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[38,29865,29867],{"className":40,"code":29866,"language":42,"meta":43,"style":43},"docker run -d -p 92:80 nginx:tuling\n",[26,29868,29869],{"__ignoreMap":43},[47,29870,29871,29873,29875,29878,29880,29883],{"class":49,"line":50},[47,29872,26607],{"class":53},[47,29874,27284],{"class":81},[47,29876,29877],{"class":85}," -d",[47,29879,29270],{"class":85},[47,29881,29882],{"class":81}," 92:80",[47,29884,29885],{"class":81}," nginx:tuling\n",[19,29887,29888,29889],{},"4、访问 ",[457,29890,29893],{"href":29891,"rel":29892},"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",[23956],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,29895,29896],{},[1556,29897],{"alt":43,"src":29898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,29900,29901],{},[1556,29902],{"alt":43,"src":29903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22091,29905,29907],{"id":29906},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,29909,29910],{},"只需要知道大体流程即可",[19,29912,29913],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,29915,29916],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,29918,29919],{},"2、在Dockerfile中添加以下内容",[38,29921,29923],{"className":26145,"code":29922,"language":26147,"meta":43,"style":43},"# 基于哪个镜像\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",[26,29924,29925,29930,29935,29940,29945,29950,29955,29960],{"__ignoreMap":43},[47,29926,29927],{"class":49,"line":50},[47,29928,29929],{},"# 基于哪个镜像\n",[47,29931,29932],{"class":49,"line":92},[47,29933,29934],{},"From java:8\n",[47,29936,29937],{"class":49,"line":1273},[47,29938,29939],{},"# 复制文件到容器\n",[47,29941,29942],{"class":49,"line":1288},[47,29943,29944],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[47,29946,29947],{"class":49,"line":1294},[47,29948,29949],{},"# 声明需要暴露的端口\n",[47,29951,29952],{"class":49,"line":1308},[47,29953,29954],{},"EXPOSE 8877\n",[47,29956,29957],{"class":49,"line":1314},[47,29958,29959],{},"# 配置容器启动后执行的命令\n",[47,29961,29962],{"class":49,"line":1405},[47,29963,29964],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,29966,29967],{},"3、使用docker build命令构建镜像",[38,29969,29971],{"className":40,"code":29970,"language":42,"meta":43,"style":43},"docker build -t tulingmall-member:0.0.5 .\n",[26,29972,29973],{"__ignoreMap":43},[47,29974,29975,29977,29979,29981,29984],{"class":49,"line":50},[47,29976,26607],{"class":53},[47,29978,28786],{"class":81},[47,29980,28789],{"class":85},[47,29982,29983],{"class":81}," tulingmall-member:0.0.5",[47,29985,28795],{"class":81},[19,29987,29988],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,29990,29991],{},[1556,29992],{"alt":43,"src":29993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,29995,29996],{},"4、启动镜像，加-d可在后台启动",[38,29998,30000],{"className":40,"code":29999,"language":42,"meta":43,"style":43},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[26,30001,30002],{"__ignoreMap":43},[47,30003,30004,30006,30008,30010,30012,30015],{"class":49,"line":50},[47,30005,26607],{"class":53},[47,30007,27284],{"class":81},[47,30009,29877],{"class":85},[47,30011,29270],{"class":85},[47,30013,30014],{"class":81}," 8877:8877",[47,30016,30017],{"class":81}," tulingmall-member:0.0.5\n",[19,30019,30020],{},"加上JVM参数：",[38,30022,30024],{"className":40,"code":30023,"language":42,"meta":43,"style":43},"# --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",[26,30025,30026,30031,30046,30056,30065,30072],{"__ignoreMap":43},[47,30027,30028],{"class":49,"line":50},[47,30029,30030],{"class":279},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[47,30032,30033,30035,30037,30040,30042,30044],{"class":49,"line":92},[47,30034,26607],{"class":53},[47,30036,27284],{"class":81},[47,30038,30039],{"class":85},"  -d",[47,30041,29270],{"class":85},[47,30043,30014],{"class":81},[47,30045,24732],{"class":85},[47,30047,30048,30050,30053],{"class":49,"line":1273},[47,30049,28182],{"class":221},[47,30051,30052],{"class":81},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[47,30054,30055],{"class":85},"  \\\n",[47,30057,30058,30060,30063],{"class":49,"line":1288},[47,30059,28182],{"class":221},[47,30061,30062],{"class":81},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[47,30064,30055],{"class":85},[47,30066,30067,30070],{"class":49,"line":1294},[47,30068,30069],{"class":221},"--cap-add=SYS_PTRACE  ",[47,30071,26229],{"class":85},[47,30073,30074],{"class":49,"line":1308},[47,30075,30076],{"class":221},"tulingmall-member:0.0.5\n",[19,30078,30079],{},"5、访问会员服务接口",[19,30081,30082],{},[1556,30083],{"alt":43,"src":30084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22091,30086,30088],{"id":30087},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,30090,30091],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,30093,30094,30095],{},"阿里云docker镜像仓库：",[457,30096,30097],{"href":30097,"rel":30098},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[23956],[19,30100,30101],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,30103,30104],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,30106,30107],{},[1556,30108],{"alt":43,"src":30109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,30111,30112],{},"要把镜像推送到镜像仓库",[38,30114,30116],{"className":40,"code":30115,"language":42,"meta":43,"style":43},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[26,30117,30118],{"__ignoreMap":43},[47,30119,30120,30122,30124,30126],{"class":49,"line":50},[47,30121,26607],{"class":53},[47,30123,28951],{"class":81},[47,30125,29983],{"class":81},[47,30127,30128],{"class":81}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,30130,30131],{},"最后将镜像推送到远程仓库",[38,30133,30135],{"className":40,"code":30134,"language":42,"meta":43,"style":43},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[26,30136,30137],{"__ignoreMap":43},[47,30138,30139,30141,30143],{"class":49,"line":50},[47,30140,26607],{"class":53},[47,30142,29070],{"class":81},[47,30144,30128],{"class":81},[134,30146,30147],{},"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":43,"searchDepth":92,"depth":92,"links":30149},[30150,30151,30152],{"id":28537,"depth":1273,"text":28538},{"id":28766,"depth":1273,"text":28767},{"id":29792,"depth":1273,"text":29793},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28529,"description":43},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30159,"title":30160,"body":30161,"description":43,"extension":143,"meta":30304,"navigation":145,"path":30305,"seo":30306,"stem":30307,"__hash__":30308},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30162,"toc":30302},[30163,30166,30171,30176,30179,30184,30189,30192,30197,30202,30205,30210,30213,30216,30219,30222,30225,30228,30248,30270,30273,30276,30296,30299],[10,30164,30160],{"id":30165},"_7vscode远程开发",[171,30167,30168],{},[109,30169,30170],{},"插件1：微软Docker工具",[19,30172,30173],{},[1556,30174],{"alt":43,"src":30175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,30177,30178],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,30180,30181],{},[1556,30182],{"alt":43,"src":30183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[171,30185,30186],{"start":92},[109,30187,30188],{},"插件2：微软Docker远程开发工具",[19,30190,30191],{},"下面这是远程开发的插件。",[19,30193,30194],{},[1556,30195],{"alt":43,"src":30196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,30198,30199],{},[1556,30200],{"alt":43,"src":30201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,30203,30204],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,30206,30207],{},[1556,30208],{"alt":43,"src":30209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,30211,30212],{},"安装完拓展之后，vscode进行链接：",[19,30214,30215],{},"1.按ctrl+shift+p",[19,30217,30218],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,30220,30221],{},"3.选择目前运行的容器",[19,30223,30224],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,30226,30227],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[38,30229,30231],{"className":40,"code":30230,"language":42,"meta":43,"style":43},"docker run -v 主机目录:容器目录 image-name\n",[26,30232,30233],{"__ignoreMap":43},[47,30234,30235,30237,30239,30242,30245],{"class":49,"line":50},[47,30236,26607],{"class":53},[47,30238,27284],{"class":81},[47,30240,30241],{"class":85}," -v",[47,30243,30244],{"class":81}," 主机目录:容器目录",[47,30246,30247],{"class":81}," image-name\n",[38,30249,30251],{"className":40,"code":30250,"language":42,"meta":43,"style":43},"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",[26,30252,30253],{"__ignoreMap":43},[47,30254,30255,30257,30259,30262,30264,30267],{"class":49,"line":50},[47,30256,26607],{"class":53},[47,30258,27284],{"class":81},[47,30260,30261],{"class":85}," -it",[47,30263,30241],{"class":85},[47,30265,30266],{"class":81}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[47,30268,30269],{"class":81}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,30271,30272],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,30274,30275],{},"查看挂载情况：",[38,30277,30279],{"className":40,"code":30278,"language":42,"meta":43,"style":43},"mount | grep -i project\n",[26,30280,30281],{"__ignoreMap":43},[47,30282,30283,30286,30288,30291,30293],{"class":49,"line":50},[47,30284,30285],{"class":53},"mount",[47,30287,25163],{"class":217},[47,30289,30290],{"class":53}," grep",[47,30292,26484],{"class":85},[47,30294,30295],{"class":81}," project\n",[19,30297,30298],{},"也可以通过ls来进行查看",[134,30300,30301],{},"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":43,"searchDepth":92,"depth":92,"links":30303},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30160,"description":43},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30310,"title":30311,"body":30312,"description":142,"extension":143,"meta":30316,"navigation":145,"path":30318,"seo":30319,"stem":30320,"__hash__":30321},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30313,"toc":30314},[],{"title":43,"searchDepth":92,"depth":92,"links":30315},[],{"category":30317},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30311,"description":142},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30323,"title":30324,"body":30325,"description":142,"extension":143,"meta":30329,"navigation":145,"path":30330,"seo":30331,"stem":30332,"__hash__":30333},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30326,"toc":30327},[],{"title":43,"searchDepth":92,"depth":92,"links":30328},[],{"category":30317},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30324,"description":142},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30335,"title":30336,"body":30337,"description":142,"extension":143,"meta":30630,"navigation":145,"path":30631,"seo":30632,"stem":30633,"__hash__":30634},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30338,"toc":30628},[30339,30342,30350,30365,30370,30421,30424,30430,30617,30622,30625],[10,30340,30336],{"id":30341},"_1验证深度学习环境",[19,30343,30344,30345],{},"关于环境的安装，看",[457,30346,30349],{"href":30347,"rel":30348},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[23956],"Pytorch-->深度学习",[19,30351,30352,30353,30356,30357,30360,30361,30364],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[26,30354,30355],{},"pytorch-cuda=12.4"," 是一个“ ",[369,30358,30359],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[369,30362,30363],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,30366,30367],{},[1556,30368],{"alt":43,"src":30369},"\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",[38,30371,30373],{"className":40,"code":30372,"language":42,"meta":43,"style":43},"# 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",[26,30374,30375,30380],{"__ignoreMap":43},[47,30376,30377],{"class":49,"line":50},[47,30378,30379],{"class":279},"# CUDA 12.4\n",[47,30381,30382,30385,30387,30390,30393,30396,30399,30402,30404,30407,30410,30413,30416,30418],{"class":49,"line":92},[47,30383,30384],{"class":53},"conda",[47,30386,23925],{"class":81},[47,30388,30389],{"class":81}," pytorch==",[47,30391,30392],{"class":85},"2.5.1",[47,30394,30395],{"class":81}," torchvision==",[47,30397,30398],{"class":85},"0.20.1",[47,30400,30401],{"class":81}," torchaudio==",[47,30403,30392],{"class":85},[47,30405,30406],{"class":81}," pytorch-cuda=",[47,30408,30409],{"class":85},"12.4",[47,30411,30412],{"class":85}," -c",[47,30414,30415],{"class":81}," pytorch",[47,30417,30412],{"class":85},[47,30419,30420],{"class":81}," nvidia\n",[19,30422,30423],{},"）：",[19,30425,30426],{},[457,30427,30428],{"href":30428,"rel":30429},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[23956],[38,30431,30435],{"className":30432,"code":30433,"language":30434,"meta":43,"style":43},"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",[26,30436,30437,30442,30450,30455,30465,30481,30486,30496,30533,30540,30552,30568,30573,30583,30595,30605],{"__ignoreMap":43},[47,30438,30439],{"class":49,"line":50},[47,30440,30441],{"class":279},"# 对深度学习环境进行测试\n",[47,30443,30444,30447],{"class":49,"line":92},[47,30445,30446],{"class":217},"import",[47,30448,30449],{"class":221}," torch\n",[47,30451,30452],{"class":49,"line":1273},[47,30453,30454],{"class":279},"# 查看cuda是否被激活\n",[47,30456,30457,30460,30462],{"class":49,"line":1288},[47,30458,30459],{"class":221},"flag",[47,30461,267],{"class":217},[47,30463,30464],{"class":221},"torch.cuda.is_available()\n",[47,30466,30467,30470,30472,30475,30478],{"class":49,"line":1294},[47,30468,30469],{"class":85},"print",[47,30471,222],{"class":221},[47,30473,30474],{"class":81},"\"cuda:\"",[47,30476,30477],{"class":221},", flag)   ",[47,30479,30480],{"class":279},"#返回true的话说明被激活\n",[47,30482,30483],{"class":49,"line":1308},[47,30484,30485],{"class":279},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[47,30487,30488,30491,30493],{"class":49,"line":1314},[47,30489,30490],{"class":221},"ngpu",[47,30492,267],{"class":217},[47,30494,30495],{"class":85},"1\n",[47,30497,30498,30501,30503,30506,30509,30511,30514,30517,30520,30522,30524,30526,30528,30531],{"class":49,"line":1405},[47,30499,30500],{"class":221},"device",[47,30502,267],{"class":217},[47,30504,30505],{"class":221},"torch.device(",[47,30507,30508],{"class":81},"\"cuda:0\"",[47,30510,1798],{"class":217},[47,30512,30513],{"class":221},"(torch.cuda.is_available() ",[47,30515,30516],{"class":217},"and",[47,30518,30519],{"class":221}," ngpu",[47,30521,1179],{"class":217},[47,30523,411],{"class":85},[47,30525,13807],{"class":221},[47,30527,1795],{"class":217},[47,30529,30530],{"class":81}," \"cpu\"",[47,30532,228],{"class":221},[47,30534,30535,30537],{"class":49,"line":1411},[47,30536,30469],{"class":85},[47,30538,30539],{"class":221},"(device)\n",[47,30541,30542,30544,30547,30549],{"class":49,"line":1423},[47,30543,30469],{"class":85},[47,30545,30546],{"class":221},"(torch.cuda.get_device_name(",[47,30548,411],{"class":85},[47,30550,30551],{"class":221},"))\n",[47,30553,30554,30556,30559,30561,30563,30565],{"class":49,"line":1706},[47,30555,30469],{"class":85},[47,30557,30558],{"class":221},"(torch.rand(",[47,30560,292],{"class":85},[47,30562,597],{"class":221},[47,30564,292],{"class":85},[47,30566,30567],{"class":221},").cuda())\n",[47,30569,30570],{"class":49,"line":1711},[47,30571,30572],{"class":279},"# 查看cuda和cudnn的版本\n",[47,30574,30575,30578,30580],{"class":49,"line":1717},[47,30576,30577],{"class":221},"cuda_version",[47,30579,267],{"class":217},[47,30581,30582],{"class":221},"torch.version.cuda\n",[47,30584,30585,30587,30589,30592],{"class":49,"line":1722},[47,30586,30469],{"class":85},[47,30588,222],{"class":221},[47,30590,30591],{"class":81},"\"cuda version\"",[47,30593,30594],{"class":221},",cuda_version)\n",[47,30596,30597,30600,30602],{"class":49,"line":1736},[47,30598,30599],{"class":221},"cudnn_version",[47,30601,267],{"class":217},[47,30603,30604],{"class":221},"torch.backends.cudnn.version()\n",[47,30606,30607,30609,30611,30614],{"class":49,"line":1741},[47,30608,30469],{"class":85},[47,30610,222],{"class":221},[47,30612,30613],{"class":81},"\"cudnn version\"",[47,30615,30616],{"class":221},",cudnn_version)\n",[19,30618,30619],{},[1556,30620],{"alt":43,"src":30621},"\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,30623,30624],{},"cuda:0 指的是一块显卡",[134,30626,30627],{},"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":43,"searchDepth":92,"depth":92,"links":30629},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30336,"description":142},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30636,"title":30637,"body":30638,"description":142,"extension":143,"meta":50442,"navigation":145,"path":50443,"seo":50444,"stem":50445,"__hash__":50446},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30639,"toc":50436},[30640,30643,30647,30651,30654,30659,30664,30667,30672,30677,30682,30685,30689,30694,30698,30703,30706,30711,30714,30717,30720,30723,30728,30731,30736,30741,30746,30751,30754,30758,30761,30766,31370,31375,31378,31383,31386,31389,31853,31856,31859,31862,31865,33916,33919,33924,33929,34724,34727,34732,35510,35514,37173,37177,37891,37895,37899,37904,37909,37914,37917,37922,37927,37932,37937,37942,37946,37951,39233,39238,39241,39244,39247,39402,39405,39408,40624,40629,41324,41328,41332,41337,41342,41345,41350,41355,41360,41365,41370,41375,41380,41385,41390,41395,41400,41405,41410,41415,41420,41425,41430,41435,41440,41445,41450,41455,41460,41465,41470,41475,41480,41485,41490,41495,41499,41503,41506,42984,42988,44635,44639,45333,45337,45340,45343,45887,45890,45894,45897,47294,47298,47301,47879,49666,49670,49673,50433],[10,30641,30637],{"id":30642},"_2经典神经网络",[187,30644,30646],{"id":30645},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22091,30648,30650],{"id":30649},"_211原理介绍","2.1.1.原理介绍",[19,30652,30653],{},"LeNet-5",[171,30655,30656],{},[109,30657,30658],{},"原理",[19,30660,30661],{},[1556,30662],{"alt":43,"src":30663},"\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,30665,30666],{},"B是batch批次；C是channel通道",[171,30668,30669],{"start":92},[109,30670,30671],{},"网络参数详细",[19,30673,30674],{},[1556,30675],{"alt":43,"src":30676},"\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,30678,30679],{},[1556,30680],{"alt":43,"src":30681},"\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,30683,30684],{},"AlexNet",[171,30686,30687],{},[109,30688,30658],{},[19,30690,30691],{},[1556,30692],{"alt":43,"src":30693},"\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",[171,30695,30696],{"start":92},[109,30697,30671],{},[19,30699,30700],{},[1556,30701],{"alt":43,"src":30702},"\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,30704,30705],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,30707,30708],{},[1556,30709],{"alt":43,"src":30710},"\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,30712,30713],{},"数据处理中的图像增强操作:",[19,30715,30716],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,30718,30719],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,30721,30722],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,30724,30725],{},[1556,30726],{"alt":43,"src":30727},"\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,30729,30730],{},"提升网络精确度的方法：LRN正则化",[19,30732,30733],{},[1556,30734],{"alt":43,"src":30735},"\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,30737,30738],{},[1556,30739],{"alt":43,"src":30740},"\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",[171,30742,30743],{"start":1273},[109,30744,30745],{},"AlexNet的总结",[19,30747,30748],{},[1556,30749],{"alt":43,"src":30750},"\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,30752,30753],{},"比LeNet模型要深一丢丢",[22091,30755,30757],{"id":30756},"_212代码实现","2.1.2.代码实现",[19,30759,30760],{},"（1）LeNet",[171,30762,30763],{},[109,30764,30765],{},"模型搭建",[38,30767,30769],{"className":30432,"code":30768,"language":30434,"meta":43,"style":43},"# 导入库\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",[26,30770,30771,30776,30782,30787,30800,30805,30817,30821,30841,30846,30851,30862,30867,30886,30890,30895,30944,30956,30961,30990,31025,31052,31057,31069,31074,31094,31113,31132,31136,31141,31151,31168,31179,31194,31205,31216,31231,31246,31257,31264,31268,31282,31287,31310,31315,31320,31325,31329,31334,31339,31349],{"__ignoreMap":43},[47,30772,30773],{"class":49,"line":50},[47,30774,30775],{"class":279},"# 导入库\n",[47,30777,30778,30780],{"class":49,"line":92},[47,30779,30446],{"class":217},[47,30781,30449],{"class":221},[47,30783,30784],{"class":49,"line":1273},[47,30785,30786],{"class":279},"# 导入神经网络层\n",[47,30788,30789,30792,30795,30797],{"class":49,"line":1288},[47,30790,30791],{"class":217},"from",[47,30793,30794],{"class":221}," torch ",[47,30796,30446],{"class":217},[47,30798,30799],{"class":221}," nn\n",[47,30801,30802],{"class":49,"line":1294},[47,30803,30804],{"class":279},"# 导入展示神经网络参数的包\n",[47,30806,30807,30809,30812,30814],{"class":49,"line":1308},[47,30808,30791],{"class":217},[47,30810,30811],{"class":221}," torchsummary ",[47,30813,30446],{"class":217},[47,30815,30816],{"class":221}," summary\n",[47,30818,30819],{"class":49,"line":1314},[47,30820,2493],{"emptyLinePlaceholder":145},[47,30822,30823,30825,30828,30830,30833,30835,30838],{"class":49,"line":1405},[47,30824,14787],{"class":217},[47,30826,30827],{"class":53}," LeNet",[47,30829,222],{"class":221},[47,30831,30832],{"class":53},"nn",[47,30834,777],{"class":221},[47,30836,30837],{"class":53},"Module",[47,30839,30840],{"class":221},"):\n",[47,30842,30843],{"class":49,"line":1411},[47,30844,30845],{"class":279},"    # 模型初始化:\n",[47,30847,30848],{"class":49,"line":1423},[47,30849,30850],{"class":279},"    # 定义一些网络层和激活函数\n",[47,30852,30853,30856,30859],{"class":49,"line":1706},[47,30854,30855],{"class":217},"    def",[47,30857,30858],{"class":85}," __init__",[47,30860,30861],{"class":221},"(self):\n",[47,30863,30864],{"class":49,"line":1711},[47,30865,30866],{"class":279},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[47,30868,30869,30872,30875,30878,30881,30884],{"class":49,"line":1717},[47,30870,30871],{"class":85},"        super",[47,30873,30874],{"class":221},"(LeNet,",[47,30876,30877],{"class":85},"self",[47,30879,30880],{"class":221},").",[47,30882,30883],{"class":85},"__init__",[47,30885,2069],{"class":221},[47,30887,30888],{"class":49,"line":1722},[47,30889,2493],{"emptyLinePlaceholder":145},[47,30891,30892],{"class":49,"line":1736},[47,30893,30894],{"class":279},"        # 定义网络层\n",[47,30896,30897,30900,30903,30905,30908,30911,30913,30915,30917,30920,30922,30924,30926,30929,30931,30933,30935,30938,30940,30942],{"class":49,"line":1741},[47,30898,30899],{"class":85},"        self",[47,30901,30902],{"class":221},".c1",[47,30904,267],{"class":217},[47,30906,30907],{"class":221},"nn.Conv2d(",[47,30909,30910],{"class":5309},"in_channels",[47,30912,267],{"class":217},[47,30914,436],{"class":85},[47,30916,597],{"class":221},[47,30918,30919],{"class":5309},"out_channels",[47,30921,267],{"class":217},[47,30923,563],{"class":85},[47,30925,597],{"class":221},[47,30927,30928],{"class":5309},"kernel_size",[47,30930,267],{"class":217},[47,30932,538],{"class":85},[47,30934,597],{"class":221},[47,30936,30937],{"class":5309},"padding",[47,30939,267],{"class":217},[47,30941,298],{"class":85},[47,30943,228],{"class":221},[47,30945,30946,30948,30951,30953],{"class":49,"line":1747},[47,30947,30899],{"class":85},[47,30949,30950],{"class":221},".sig",[47,30952,267],{"class":217},[47,30954,30955],{"class":221},"nn.Sigmoid()\n",[47,30957,30958],{"class":49,"line":1768},[47,30959,30960],{"class":279},"        # 定义池化\n",[47,30962,30963,30965,30968,30970,30973,30975,30977,30979,30981,30984,30986,30988],{"class":49,"line":1773},[47,30964,30899],{"class":85},[47,30966,30967],{"class":221},".s2",[47,30969,267],{"class":217},[47,30971,30972],{"class":221},"nn.AvgPool2d(",[47,30974,30928],{"class":5309},[47,30976,267],{"class":217},[47,30978,298],{"class":85},[47,30980,597],{"class":221},[47,30982,30983],{"class":5309},"stride",[47,30985,267],{"class":217},[47,30987,298],{"class":85},[47,30989,228],{"class":221},[47,30991,30992,30994,30997,30999,31001,31003,31005,31007,31009,31011,31013,31015,31017,31019,31021,31023],{"class":49,"line":1787},[47,30993,30899],{"class":85},[47,30995,30996],{"class":221},".c3",[47,30998,267],{"class":217},[47,31000,30907],{"class":221},[47,31002,30910],{"class":5309},[47,31004,267],{"class":217},[47,31006,563],{"class":85},[47,31008,597],{"class":221},[47,31010,30919],{"class":5309},[47,31012,267],{"class":217},[47,31014,820],{"class":85},[47,31016,597],{"class":221},[47,31018,30928],{"class":5309},[47,31020,267],{"class":217},[47,31022,538],{"class":85},[47,31024,228],{"class":221},[47,31026,31027,31029,31032,31034,31036,31038,31040,31042,31044,31046,31048,31050],{"class":49,"line":1792},[47,31028,30899],{"class":85},[47,31030,31031],{"class":221},".s4",[47,31033,267],{"class":217},[47,31035,30972],{"class":221},[47,31037,30928],{"class":5309},[47,31039,267],{"class":217},[47,31041,298],{"class":85},[47,31043,597],{"class":221},[47,31045,30983],{"class":5309},[47,31047,267],{"class":217},[47,31049,298],{"class":85},[47,31051,228],{"class":221},[47,31053,31054],{"class":49,"line":1821},[47,31055,31056],{"class":279},"        # 定义平展层\n",[47,31058,31059,31061,31064,31066],{"class":49,"line":1826},[47,31060,30899],{"class":85},[47,31062,31063],{"class":221},".flatten",[47,31065,267],{"class":217},[47,31067,31068],{"class":221},"nn.Flatten()\n",[47,31070,31071],{"class":49,"line":1843},[47,31072,31073],{"class":279},"        # 定义全连接层\n",[47,31075,31076,31078,31081,31083,31086,31088,31090,31092],{"class":49,"line":1848},[47,31077,30899],{"class":85},[47,31079,31080],{"class":221},".f5",[47,31082,267],{"class":217},[47,31084,31085],{"class":221},"nn.Linear(",[47,31087,4080],{"class":85},[47,31089,597],{"class":221},[47,31091,1036],{"class":85},[47,31093,228],{"class":221},[47,31095,31096,31098,31101,31103,31105,31107,31109,31111],{"class":49,"line":1853},[47,31097,30899],{"class":85},[47,31099,31100],{"class":221},".f6",[47,31102,267],{"class":217},[47,31104,31085],{"class":221},[47,31106,1036],{"class":85},[47,31108,597],{"class":221},[47,31110,930],{"class":85},[47,31112,228],{"class":221},[47,31114,31115,31117,31120,31122,31124,31126,31128,31130],{"class":49,"line":1858},[47,31116,30899],{"class":85},[47,31118,31119],{"class":221},".f7",[47,31121,267],{"class":217},[47,31123,31085],{"class":221},[47,31125,930],{"class":85},[47,31127,597],{"class":221},[47,31129,665],{"class":85},[47,31131,228],{"class":221},[47,31133,31134],{"class":49,"line":1872},[47,31135,2493],{"emptyLinePlaceholder":145},[47,31137,31138],{"class":49,"line":1877},[47,31139,31140],{"class":279},"    # 写工具->写前向传播\n",[47,31142,31143,31145,31148],{"class":49,"line":2670},[47,31144,30855],{"class":217},[47,31146,31147],{"class":53}," forward",[47,31149,31150],{"class":221},"(self,x):\n",[47,31152,31153,31156,31158,31160,31163,31165],{"class":49,"line":2684},[47,31154,31155],{"class":221},"        x",[47,31157,267],{"class":217},[47,31159,30877],{"class":85},[47,31161,31162],{"class":221},".sig(",[47,31164,30877],{"class":85},[47,31166,31167],{"class":221},".c1(x))\n",[47,31169,31170,31172,31174,31176],{"class":49,"line":2692},[47,31171,31155],{"class":221},[47,31173,267],{"class":217},[47,31175,30877],{"class":85},[47,31177,31178],{"class":221},".s2(x)\n",[47,31180,31181,31183,31185,31187,31189,31191],{"class":49,"line":2697},[47,31182,31155],{"class":221},[47,31184,267],{"class":217},[47,31186,30877],{"class":85},[47,31188,31162],{"class":221},[47,31190,30877],{"class":85},[47,31192,31193],{"class":221},".c3(x))\n",[47,31195,31196,31198,31200,31202],{"class":49,"line":2703},[47,31197,31155],{"class":221},[47,31199,267],{"class":217},[47,31201,30877],{"class":85},[47,31203,31204],{"class":221},".s4(x)\n",[47,31206,31207,31209,31211,31213],{"class":49,"line":2709},[47,31208,31155],{"class":221},[47,31210,267],{"class":217},[47,31212,30877],{"class":85},[47,31214,31215],{"class":221},".flatten(x)\n",[47,31217,31218,31220,31222,31224,31226,31228],{"class":49,"line":2714},[47,31219,31155],{"class":221},[47,31221,267],{"class":217},[47,31223,30877],{"class":85},[47,31225,31162],{"class":221},[47,31227,30877],{"class":85},[47,31229,31230],{"class":221},".f5(x))\n",[47,31232,31233,31235,31237,31239,31241,31243],{"class":49,"line":8041},[47,31234,31155],{"class":221},[47,31236,267],{"class":217},[47,31238,30877],{"class":85},[47,31240,31162],{"class":221},[47,31242,30877],{"class":85},[47,31244,31245],{"class":221},".f6(x))\n",[47,31247,31248,31250,31252,31254],{"class":49,"line":8065},[47,31249,31155],{"class":221},[47,31251,267],{"class":217},[47,31253,30877],{"class":85},[47,31255,31256],{"class":221},".f7(x)\n",[47,31258,31259,31261],{"class":49,"line":8070},[47,31260,14845],{"class":217},[47,31262,31263],{"class":221}," x\n",[47,31265,31266],{"class":49,"line":8076},[47,31267,2493],{"emptyLinePlaceholder":145},[47,31269,31270,31272,31275,31277,31280],{"class":49,"line":8103},[47,31271,1625],{"class":217},[47,31273,31274],{"class":85}," __name__",[47,31276,3042],{"class":217},[47,31278,31279],{"class":81},"\"__main__\"",[47,31281,3832],{"class":221},[47,31283,31284],{"class":49,"line":8108},[47,31285,31286],{"class":279},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[47,31288,31289,31292,31294,31296,31299,31301,31304,31306,31308],{"class":49,"line":8114},[47,31290,31291],{"class":221},"    device",[47,31293,267],{"class":217},[47,31295,30505],{"class":221},[47,31297,31298],{"class":81},"\"cuda\"",[47,31300,1798],{"class":217},[47,31302,31303],{"class":221}," torch.cuda.is_available() ",[47,31305,1795],{"class":217},[47,31307,30530],{"class":81},[47,31309,228],{"class":221},[47,31311,31312],{"class":49,"line":8126},[47,31313,31314],{"class":279},"    # 如果就是想指定用cpu用下方代码:\n",[47,31316,31317],{"class":49,"line":8138},[47,31318,31319],{"class":279},"    # device=\"cpu\"\n",[47,31321,31322],{"class":49,"line":8150},[47,31323,31324],{"class":279},"    # print(device)\n",[47,31326,31327],{"class":49,"line":9809},[47,31328,2493],{"emptyLinePlaceholder":145},[47,31330,31331],{"class":49,"line":9834},[47,31332,31333],{"class":279},"    # 实例化模型\n",[47,31335,31336],{"class":49,"line":9857},[47,31337,31338],{"class":279},"    # 将模型放到设备中去运行\n",[47,31340,31341,31344,31346],{"class":49,"line":9881},[47,31342,31343],{"class":221},"    model",[47,31345,267],{"class":217},[47,31347,31348],{"class":221},"LeNet().to(device)\n",[47,31350,31351,31354,31357,31359,31361,31363,31365,31367],{"class":49,"line":9886},[47,31352,31353],{"class":85},"    print",[47,31355,31356],{"class":221},"(summary(model,(",[47,31358,436],{"class":85},[47,31360,597],{"class":221},[47,31362,1120],{"class":85},[47,31364,597],{"class":221},[47,31366,1120],{"class":85},[47,31368,31369],{"class":221},")))\n",[19,31371,31372],{},[1556,31373],{"alt":43,"src":31374},"\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,31376,31377],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[171,31379,31380],{"start":92},[109,31381,31382],{},"训练",[19,31384,31385],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,31387,31388],{},"在训练之前可以将数据展示看一下",[38,31390,31392],{"className":30432,"code":31391,"language":30434,"meta":43,"style":43},"# 建立画图的函数，用于展示数据\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",[26,31393,31394,31399,31404,31416,31428,31441,31446,31458,31463,31475,31480,31492,31496,31500,31521,31533,31538,31559,31570,31574,31579,31597,31608,31613,31624,31629,31640,31644,31649,31664,31677,31682,31687,31700,31713,31726,31731,31735,31740,31760,31777,31797,31810,31823,31833,31848],{"__ignoreMap":43},[47,31395,31396],{"class":49,"line":50},[47,31397,31398],{"class":279},"# 建立画图的函数，用于展示数据\n",[47,31400,31401],{"class":49,"line":92},[47,31402,31403],{"class":279},"# torchvision中包含很多内置的数据集\n",[47,31405,31406,31408,31411,31413],{"class":49,"line":1273},[47,31407,30791],{"class":217},[47,31409,31410],{"class":221}," sklearn.externals.array_api_compat.torch ",[47,31412,30446],{"class":217},[47,31414,31415],{"class":221}," squeeze\n",[47,31417,31418,31420,31423,31425],{"class":49,"line":1288},[47,31419,30791],{"class":217},[47,31421,31422],{"class":221}," torchvision.datasets ",[47,31424,30446],{"class":217},[47,31426,31427],{"class":221}," FashionMNIST\n",[47,31429,31430,31432,31435,31438],{"class":49,"line":1294},[47,31431,30446],{"class":217},[47,31433,31434],{"class":221}," numpy ",[47,31436,31437],{"class":217},"as",[47,31439,31440],{"class":221}," np\n",[47,31442,31443],{"class":49,"line":1308},[47,31444,31445],{"class":279},"# 引入处理数据集的包\n",[47,31447,31448,31450,31453,31455],{"class":49,"line":1314},[47,31449,30791],{"class":217},[47,31451,31452],{"class":221}," torchvision ",[47,31454,30446],{"class":217},[47,31456,31457],{"class":221}," transforms\n",[47,31459,31460],{"class":49,"line":1405},[47,31461,31462],{"class":279},"# 从torch库中引入数据处理的包\n",[47,31464,31465,31467,31470,31472],{"class":49,"line":1411},[47,31466,30446],{"class":217},[47,31468,31469],{"class":221}," torch.utils.data ",[47,31471,31437],{"class":217},[47,31473,31474],{"class":221}," Data\n",[47,31476,31477],{"class":49,"line":1423},[47,31478,31479],{"class":279},"# 导入画图的库\n",[47,31481,31482,31484,31487,31489],{"class":49,"line":1706},[47,31483,30446],{"class":217},[47,31485,31486],{"class":221}," matplotlib.pyplot ",[47,31488,31437],{"class":217},[47,31490,31491],{"class":221}," plt\n",[47,31493,31494],{"class":49,"line":1711},[47,31495,2493],{"emptyLinePlaceholder":145},[47,31497,31498],{"class":49,"line":1717},[47,31499,2493],{"emptyLinePlaceholder":145},[47,31501,31502,31505,31507,31510,31513,31515,31518],{"class":49,"line":1722},[47,31503,31504],{"class":221},"train_data",[47,31506,267],{"class":217},[47,31508,31509],{"class":221},"FashionMNIST(",[47,31511,31512],{"class":5309},"root",[47,31514,267],{"class":217},[47,31516,31517],{"class":81},"'.\u002Fdata'",[47,31519,31520],{"class":221},",\n",[47,31522,31523,31526,31528,31531],{"class":49,"line":1736},[47,31524,31525],{"class":5309},"                        train",[47,31527,267],{"class":217},[47,31529,31530],{"class":85},"True",[47,31532,31520],{"class":221},[47,31534,31535],{"class":49,"line":1741},[47,31536,31537],{"class":279},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[47,31539,31540,31543,31545,31548,31551,31553,31556],{"class":49,"line":1747},[47,31541,31542],{"class":5309},"                        transform",[47,31544,267],{"class":217},[47,31546,31547],{"class":221},"transforms.Compose([transforms.Resize(",[47,31549,31550],{"class":5309},"size",[47,31552,267],{"class":217},[47,31554,31555],{"class":85},"224",[47,31557,31558],{"class":221},"),transforms.ToTensor()]),\n",[47,31560,31561,31564,31566,31568],{"class":49,"line":1768},[47,31562,31563],{"class":5309},"                        download",[47,31565,267],{"class":217},[47,31567,31530],{"class":85},[47,31569,228],{"class":221},[47,31571,31572],{"class":49,"line":1773},[47,31573,2493],{"emptyLinePlaceholder":145},[47,31575,31576],{"class":49,"line":1787},[47,31577,31578],{"class":279},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[47,31580,31581,31584,31586,31589,31592,31594],{"class":49,"line":1792},[47,31582,31583],{"class":221},"train_loader",[47,31585,267],{"class":217},[47,31587,31588],{"class":221},"Data.DataLoader(",[47,31590,31591],{"class":5309},"dataset",[47,31593,267],{"class":217},[47,31595,31596],{"class":221},"train_data,\n",[47,31598,31599,31602,31604,31606],{"class":49,"line":1821},[47,31600,31601],{"class":5309},"                             batch_size",[47,31603,267],{"class":217},[47,31605,423],{"class":85},[47,31607,31520],{"class":221},[47,31609,31610],{"class":49,"line":1826},[47,31611,31612],{"class":279},"                             # 数据是否打乱\n",[47,31614,31615,31618,31620,31622],{"class":49,"line":1843},[47,31616,31617],{"class":5309},"                             shuffle",[47,31619,267],{"class":217},[47,31621,31530],{"class":85},[47,31623,31520],{"class":221},[47,31625,31626],{"class":49,"line":1848},[47,31627,31628],{"class":279},"                             # 规定加载数据的进程\n",[47,31630,31631,31634,31636,31638],{"class":49,"line":1853},[47,31632,31633],{"class":5309},"                             num_workers",[47,31635,267],{"class":217},[47,31637,411],{"class":85},[47,31639,228],{"class":221},[47,31641,31642],{"class":49,"line":1858},[47,31643,2493],{"emptyLinePlaceholder":145},[47,31645,31646],{"class":49,"line":1872},[47,31647,31648],{"class":279},"# 获得一个batch的数据\n",[47,31650,31651,31653,31656,31658,31661],{"class":49,"line":1877},[47,31652,3118],{"class":217},[47,31654,31655],{"class":221}," step,(b_x,b_y) ",[47,31657,26097],{"class":217},[47,31659,31660],{"class":85}," enumerate",[47,31662,31663],{"class":221},"(train_loader):\n",[47,31665,31666,31668,31671,31673,31675],{"class":49,"line":2670},[47,31667,3194],{"class":217},[47,31669,31670],{"class":221}," step ",[47,31672,1179],{"class":217},[47,31674,4186],{"class":85},[47,31676,3832],{"class":221},[47,31678,31679],{"class":49,"line":2684},[47,31680,31681],{"class":217},"        break\n",[47,31683,31684],{"class":49,"line":2692},[47,31685,31686],{"class":279},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[47,31688,31689,31692,31694,31697],{"class":49,"line":2697},[47,31690,31691],{"class":221},"batch_x",[47,31693,267],{"class":217},[47,31695,31696],{"class":221},"b_x.squeeze().numpy()  ",[47,31698,31699],{"class":279},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[47,31701,31702,31705,31707,31710],{"class":49,"line":2703},[47,31703,31704],{"class":221},"batch_y",[47,31706,267],{"class":217},[47,31708,31709],{"class":221},"b_y.numpy()   ",[47,31711,31712],{"class":279},"#将张量转换成功numpy数组\n",[47,31714,31715,31718,31720,31723],{"class":49,"line":2709},[47,31716,31717],{"class":221},"class_label",[47,31719,267],{"class":217},[47,31721,31722],{"class":221},"train_data.classes  ",[47,31724,31725],{"class":279},"#训练集标签\n",[47,31727,31728],{"class":49,"line":2714},[47,31729,31730],{"class":279},"# print(class_label)\n",[47,31732,31733],{"class":49,"line":8041},[47,31734,2493],{"emptyLinePlaceholder":145},[47,31736,31737],{"class":49,"line":8065},[47,31738,31739],{"class":279},"# 可视化一个batch的图像\n",[47,31741,31742,31745,31748,31750,31752,31754,31756,31758],{"class":49,"line":8070},[47,31743,31744],{"class":221},"plt.figure(",[47,31746,31747],{"class":5309},"figsize",[47,31749,267],{"class":217},[47,31751,222],{"class":221},[47,31753,717],{"class":85},[47,31755,597],{"class":221},[47,31757,538],{"class":85},[47,31759,30551],{"class":221},[47,31761,31762,31764,31767,31769,31772,31774],{"class":49,"line":8076},[47,31763,3118],{"class":217},[47,31765,31766],{"class":221}," ii ",[47,31768,26097],{"class":217},[47,31770,31771],{"class":221}," np.arange(",[47,31773,7451],{"class":85},[47,31775,31776],{"class":221},"(batch_y)):\n",[47,31778,31779,31782,31784,31786,31788,31791,31793,31795],{"class":49,"line":8103},[47,31780,31781],{"class":221},"    plt.subplot(",[47,31783,512],{"class":85},[47,31785,597],{"class":221},[47,31787,820],{"class":85},[47,31789,31790],{"class":221},",ii ",[47,31792,700],{"class":217},[47,31794,25172],{"class":85},[47,31796,228],{"class":221},[47,31798,31799,31802,31805,31807],{"class":49,"line":8108},[47,31800,31801],{"class":221},"    plt.imshow(batch_x[ii,:,:],",[47,31803,31804],{"class":5309},"cmap",[47,31806,267],{"class":217},[47,31808,31809],{"class":221},"plt.cm.gray)\n",[47,31811,31812,31815,31817,31819,31821],{"class":49,"line":8114},[47,31813,31814],{"class":221},"    plt.title(class_label[batch_y[ii]],",[47,31816,31550],{"class":5309},[47,31818,267],{"class":217},[47,31820,665],{"class":85},[47,31822,228],{"class":221},[47,31824,31825,31828,31831],{"class":49,"line":8126},[47,31826,31827],{"class":221},"    plt.axis(",[47,31829,31830],{"class":81},"\"off\"",[47,31832,228],{"class":221},[47,31834,31835,31838,31841,31843,31846],{"class":49,"line":8138},[47,31836,31837],{"class":221},"    plt.subplots_adjust(",[47,31839,31840],{"class":5309},"wspace",[47,31842,267],{"class":217},[47,31844,31845],{"class":85},"0.05",[47,31847,228],{"class":221},[47,31849,31850],{"class":49,"line":8150},[47,31851,31852],{"class":221},"plt.show()\n",[19,31854,31855],{},"用matplotlib进行展示的过程可以后续再补",[19,31857,31858],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,31860,31861],{},"训练次数就是按照批次过整个训练集数据的次数",[19,31863,31864],{},"模型训练：",[38,31866,31868],{"className":30432,"code":31867,"language":30434,"meta":43,"style":43},"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",[26,31869,31870,31877,31884,31888,31900,31906,31917,31927,31937,31947,31957,31962,31974,31984,31988,31992,31997,32008,32021,32032,32049,32060,32099,32115,32127,32138,32143,32154,32170,32181,32192,32203,32210,32214,32219,32224,32228,32233,32243,32264,32268,32272,32277,32282,32287,32307,32311,32316,32326,32330,32335,32344,32349,32354,32359,32369,32373,32377,32382,32387,32397,32402,32412,32417,32426,32431,32440,32445,32454,32458,32463,32473,32477,32481,32486,32501,32529,32544,32548,32553,32558,32567,32572,32581,32586,32595,32600,32609,32614,32623,32628,32637,32642,32655,32660,32670,32675,32685,32691,32697,32703,32709,32720,32726,32746,32752,32763,32769,32775,32781,32787,32793,32799,32805,32825,32831,32847,32853,32867,32873,32888,32894,32903,32909,32918,32924,32930,32939,32945,32956,32962,32981,32987,32998,33004,33024,33040,33046,33060,33066,33072,33083,33089,33095,33105,33111,33122,33128,33138,33143,33149,33198,33245,33250,33256,33275,33281,33301,33307,33313,33323,33328,33334,33350,33395,33401,33407,33413,33424,33430,33436,33442,33460,33474,33483,33492,33501,33510,33516,33522,33530,33535,33541,33552,33558,33578,33584,33590,33596,33613,33619,33625,33631,33637,33643,33670,33694,33700,33706,33712,33723,33734,33740,33757,33780,33803,33809,33814,33823,33833,33839,33844,33850,33863,33869,33880,33891,33910],{"__ignoreMap":43},[47,31871,31872,31874],{"class":49,"line":50},[47,31873,30446],{"class":217},[47,31875,31876],{"class":221}," copy\n",[47,31878,31879,31881],{"class":49,"line":92},[47,31880,30446],{"class":217},[47,31882,31883],{"class":221}," time\n",[47,31885,31886],{"class":49,"line":1273},[47,31887,2493],{"emptyLinePlaceholder":145},[47,31889,31890,31892,31895,31897],{"class":49,"line":1288},[47,31891,30446],{"class":217},[47,31893,31894],{"class":221}," pandas ",[47,31896,31437],{"class":217},[47,31898,31899],{"class":221}," pd\n",[47,31901,31902,31904],{"class":49,"line":1294},[47,31903,30446],{"class":217},[47,31905,30449],{"class":221},[47,31907,31908,31910,31912,31914],{"class":49,"line":1308},[47,31909,30791],{"class":217},[47,31911,31469],{"class":221},[47,31913,30446],{"class":217},[47,31915,31916],{"class":221}," Dataset\n",[47,31918,31919,31921,31923,31925],{"class":49,"line":1314},[47,31920,30791],{"class":217},[47,31922,31422],{"class":221},[47,31924,30446],{"class":217},[47,31926,31427],{"class":221},[47,31928,31929,31931,31933,31935],{"class":49,"line":1405},[47,31930,30791],{"class":217},[47,31932,31452],{"class":221},[47,31934,30446],{"class":217},[47,31936,31457],{"class":221},[47,31938,31939,31941,31943,31945],{"class":49,"line":1411},[47,31940,30446],{"class":217},[47,31942,31469],{"class":221},[47,31944,31437],{"class":217},[47,31946,31474],{"class":221},[47,31948,31949,31951,31953,31955],{"class":49,"line":1423},[47,31950,30446],{"class":217},[47,31952,31486],{"class":221},[47,31954,31437],{"class":217},[47,31956,31491],{"class":221},[47,31958,31959],{"class":49,"line":1706},[47,31960,31961],{"class":279},"# 导入模型\n",[47,31963,31964,31966,31969,31971],{"class":49,"line":1711},[47,31965,30791],{"class":217},[47,31967,31968],{"class":221}," model ",[47,31970,30446],{"class":217},[47,31972,31973],{"class":221}," LeNet\n",[47,31975,31976,31978,31980,31982],{"class":49,"line":1717},[47,31977,30791],{"class":217},[47,31979,30794],{"class":221},[47,31981,30446],{"class":217},[47,31983,30799],{"class":221},[47,31985,31986],{"class":49,"line":1722},[47,31987,2493],{"emptyLinePlaceholder":145},[47,31989,31990],{"class":49,"line":1736},[47,31991,2493],{"emptyLinePlaceholder":145},[47,31993,31994],{"class":49,"line":1741},[47,31995,31996],{"class":279},"# 处理训练集与验证集函数--->划分数据集\n",[47,31998,31999,32002,32005],{"class":49,"line":1747},[47,32000,32001],{"class":217},"def",[47,32003,32004],{"class":53}," train_val_data_process",[47,32006,32007],{"class":221},"():\n",[47,32009,32010,32013,32015,32017,32019],{"class":49,"line":1768},[47,32011,32012],{"class":221},"    train_data",[47,32014,267],{"class":217},[47,32016,31509],{"class":221},[47,32018,31517],{"class":81},[47,32020,31520],{"class":221},[47,32022,32023,32026,32028,32030],{"class":49,"line":1773},[47,32024,32025],{"class":5309},"                            train",[47,32027,267],{"class":217},[47,32029,31530],{"class":85},[47,32031,31520],{"class":221},[47,32033,32034,32037,32039,32041,32043,32045,32047],{"class":49,"line":1787},[47,32035,32036],{"class":5309},"                            transform",[47,32038,267],{"class":217},[47,32040,31547],{"class":221},[47,32042,31550],{"class":5309},[47,32044,267],{"class":217},[47,32046,1120],{"class":85},[47,32048,31558],{"class":221},[47,32050,32051,32054,32056,32058],{"class":49,"line":1792},[47,32052,32053],{"class":5309},"                            download",[47,32055,267],{"class":217},[47,32057,31530],{"class":85},[47,32059,228],{"class":221},[47,32061,32062,32065,32067,32070,32073,32075,32078,32080,32082,32085,32087,32089,32092,32094,32096],{"class":49,"line":1821},[47,32063,32064],{"class":221},"    train_data,val_data",[47,32066,267],{"class":217},[47,32068,32069],{"class":221},"Data.random_split(train_data,[",[47,32071,32072],{"class":85},"round",[47,32074,222],{"class":221},[47,32076,32077],{"class":85},"0.8",[47,32079,674],{"class":217},[47,32081,7451],{"class":85},[47,32083,32084],{"class":221},"(train_data)),",[47,32086,32072],{"class":85},[47,32088,222],{"class":221},[47,32090,32091],{"class":85},"0.2",[47,32093,674],{"class":217},[47,32095,7451],{"class":85},[47,32097,32098],{"class":221},"(train_data))])\n",[47,32100,32101,32104,32106,32109,32111,32113],{"class":49,"line":1826},[47,32102,32103],{"class":221},"    train_dataloader ",[47,32105,267],{"class":217},[47,32107,32108],{"class":221}," Data.DataLoader(",[47,32110,31591],{"class":5309},[47,32112,267],{"class":217},[47,32114,31596],{"class":221},[47,32116,32117,32120,32122,32125],{"class":49,"line":1843},[47,32118,32119],{"class":5309},"                                       batch_size",[47,32121,267],{"class":217},[47,32123,32124],{"class":85},"128",[47,32126,31520],{"class":221},[47,32128,32129,32132,32134,32136],{"class":49,"line":1848},[47,32130,32131],{"class":5309},"                                       shuffle",[47,32133,267],{"class":217},[47,32135,31530],{"class":85},[47,32137,31520],{"class":221},[47,32139,32140],{"class":49,"line":1853},[47,32141,32142],{"class":279},"                                       # 规定8个进程\n",[47,32144,32145,32148,32150,32152],{"class":49,"line":1858},[47,32146,32147],{"class":5309},"                                       num_workers",[47,32149,267],{"class":217},[47,32151,614],{"class":85},[47,32153,228],{"class":221},[47,32155,32156,32159,32161,32163,32165,32167],{"class":49,"line":1872},[47,32157,32158],{"class":221},"    val_dataloader",[47,32160,267],{"class":217},[47,32162,31588],{"class":221},[47,32164,31591],{"class":5309},[47,32166,267],{"class":217},[47,32168,32169],{"class":221},"val_data,\n",[47,32171,32172,32175,32177,32179],{"class":49,"line":1877},[47,32173,32174],{"class":5309},"                                   batch_size",[47,32176,267],{"class":217},[47,32178,32124],{"class":85},[47,32180,31520],{"class":221},[47,32182,32183,32186,32188,32190],{"class":49,"line":2670},[47,32184,32185],{"class":5309},"                                   shuffle",[47,32187,267],{"class":217},[47,32189,31530],{"class":85},[47,32191,31520],{"class":221},[47,32193,32194,32197,32199,32201],{"class":49,"line":2684},[47,32195,32196],{"class":5309},"                                   num_workers",[47,32198,267],{"class":217},[47,32200,614],{"class":85},[47,32202,228],{"class":221},[47,32204,32205,32207],{"class":49,"line":2692},[47,32206,4183],{"class":217},[47,32208,32209],{"class":221}," train_dataloader,val_dataloader\n",[47,32211,32212],{"class":49,"line":2697},[47,32213,2493],{"emptyLinePlaceholder":145},[47,32215,32216],{"class":49,"line":2703},[47,32217,32218],{"class":279},"# 验证是否出错\n",[47,32220,32221],{"class":49,"line":2709},[47,32222,32223],{"class":279},"# train_val_data_process()\n",[47,32225,32226],{"class":49,"line":2714},[47,32227,2493],{"emptyLinePlaceholder":145},[47,32229,32230],{"class":49,"line":8041},[47,32231,32232],{"class":279},"# 定义模型训练函数\n",[47,32234,32235,32237,32240],{"class":49,"line":8065},[47,32236,32001],{"class":217},[47,32238,32239],{"class":53}," train_model_process",[47,32241,32242],{"class":221},"(model,train_dataloader,val_dataloader,num_epochs):\n",[47,32244,32245,32247,32249,32251,32253,32255,32257,32259,32262],{"class":49,"line":8070},[47,32246,31291],{"class":221},[47,32248,267],{"class":217},[47,32250,30505],{"class":221},[47,32252,31298],{"class":81},[47,32254,1798],{"class":217},[47,32256,31303],{"class":221},[47,32258,1795],{"class":217},[47,32260,32261],{"class":81}," 'cpu'",[47,32263,228],{"class":221},[47,32265,32266],{"class":49,"line":8076},[47,32267,2493],{"emptyLinePlaceholder":145},[47,32269,32270],{"class":49,"line":8103},[47,32271,2493],{"emptyLinePlaceholder":145},[47,32273,32274],{"class":49,"line":8108},[47,32275,32276],{"class":279},"    # 定义优化器\n",[47,32278,32279],{"class":49,"line":8114},[47,32280,32281],{"class":279},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[47,32283,32284],{"class":49,"line":8126},[47,32285,32286],{"class":279},"    # lr为学习率\n",[47,32288,32289,32292,32294,32297,32300,32302,32305],{"class":49,"line":8138},[47,32290,32291],{"class":221},"    optimizer",[47,32293,267],{"class":217},[47,32295,32296],{"class":221},"torch.optim.Adam(model.parameters(),",[47,32298,32299],{"class":5309},"lr",[47,32301,267],{"class":217},[47,32303,32304],{"class":85},"0.001",[47,32306,228],{"class":221},[47,32308,32309],{"class":49,"line":8150},[47,32310,2493],{"emptyLinePlaceholder":145},[47,32312,32313],{"class":49,"line":9809},[47,32314,32315],{"class":279},"    # 定义损失函数使用交叉熵损失函数\n",[47,32317,32318,32321,32323],{"class":49,"line":9834},[47,32319,32320],{"class":221},"    criterion",[47,32322,267],{"class":217},[47,32324,32325],{"class":221},"nn.CrossEntropyLoss()\n",[47,32327,32328],{"class":49,"line":9857},[47,32329,2493],{"emptyLinePlaceholder":145},[47,32331,32332],{"class":49,"line":9881},[47,32333,32334],{"class":279},"    # 将模型放到GPU中进行训练\n",[47,32336,32337,32339,32341],{"class":49,"line":9886},[47,32338,31343],{"class":221},[47,32340,267],{"class":217},[47,32342,32343],{"class":221},"model.to(device)\n",[47,32345,32346],{"class":49,"line":9891},[47,32347,32348],{"class":279},"    # 复制当前模型的参数\n",[47,32350,32351],{"class":49,"line":9896},[47,32352,32353],{"class":279},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[47,32355,32356],{"class":49,"line":9905},[47,32357,32358],{"class":279},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[47,32360,32361,32364,32366],{"class":49,"line":9910},[47,32362,32363],{"class":221},"    best_model_wts",[47,32365,267],{"class":217},[47,32367,32368],{"class":221},"copy.deepcopy(model.state_dict())\n",[47,32370,32371],{"class":49,"line":9916},[47,32372,2493],{"emptyLinePlaceholder":145},[47,32374,32375],{"class":49,"line":9937},[47,32376,2493],{"emptyLinePlaceholder":145},[47,32378,32379],{"class":49,"line":9943},[47,32380,32381],{"class":279},"    # 初始化参数\n",[47,32383,32384],{"class":49,"line":9957},[47,32385,32386],{"class":279},"    # 最高准确度\n",[47,32388,32389,32392,32394],{"class":49,"line":9963},[47,32390,32391],{"class":221},"    best_acc",[47,32393,267],{"class":217},[47,32395,32396],{"class":85},"0.0\n",[47,32398,32399],{"class":49,"line":9990},[47,32400,32401],{"class":279},"    # 训练集损失列表\n",[47,32403,32404,32407,32409],{"class":49,"line":9999},[47,32405,32406],{"class":221},"    train_loss_all",[47,32408,267],{"class":217},[47,32410,32411],{"class":221},"[]\n",[47,32413,32414],{"class":49,"line":10005},[47,32415,32416],{"class":279},"    # 验证集函数列表\n",[47,32418,32419,32422,32424],{"class":49,"line":10013},[47,32420,32421],{"class":221},"    val_loss_all",[47,32423,267],{"class":217},[47,32425,32411],{"class":221},[47,32427,32428],{"class":49,"line":10018},[47,32429,32430],{"class":279},"    # 训练集准确度列表\n",[47,32432,32433,32436,32438],{"class":49,"line":16697},[47,32434,32435],{"class":221},"    train_acc_all",[47,32437,267],{"class":217},[47,32439,32411],{"class":221},[47,32441,32442],{"class":49,"line":16703},[47,32443,32444],{"class":279},"    # 验证集准确度列表\n",[47,32446,32447,32450,32452],{"class":49,"line":16726},[47,32448,32449],{"class":221},"    val_acc_all",[47,32451,267],{"class":217},[47,32453,32411],{"class":221},[47,32455,32456],{"class":49,"line":16732},[47,32457,2493],{"emptyLinePlaceholder":145},[47,32459,32460],{"class":49,"line":16755},[47,32461,32462],{"class":279},"    # 保存当前时间--->方便看每轮训练的时间\n",[47,32464,32465,32468,32470],{"class":49,"line":16769},[47,32466,32467],{"class":221},"    since",[47,32469,267],{"class":217},[47,32471,32472],{"class":221},"time.time()\n",[47,32474,32475],{"class":49,"line":16789},[47,32476,2493],{"emptyLinePlaceholder":145},[47,32478,32479],{"class":49,"line":16795},[47,32480,2493],{"emptyLinePlaceholder":145},[47,32482,32483],{"class":49,"line":16806},[47,32484,32485],{"class":279},"    # 准备工作完成--->开始训练模型\n",[47,32487,32488,32490,32493,32495,32498],{"class":49,"line":16829},[47,32489,3294],{"class":217},[47,32491,32492],{"class":221}," epoch ",[47,32494,26097],{"class":217},[47,32496,32497],{"class":85}," range",[47,32499,32500],{"class":221},"(num_epochs):\n",[47,32502,32503,32506,32508,32511,32514,32516,32518,32520,32523,32525,32527],{"class":49,"line":16851},[47,32504,32505],{"class":85},"        print",[47,32507,222],{"class":221},[47,32509,32510],{"class":81},"\"Epoch ",[47,32512,32513],{"class":85},"{}",[47,32515,803],{"class":81},[47,32517,32513],{"class":85},[47,32519,470],{"class":81},[47,32521,32522],{"class":221},".format(epoch,num_epochs",[47,32524,751],{"class":217},[47,32526,436],{"class":85},[47,32528,30551],{"class":221},[47,32530,32531,32533,32535,32538,32540,32542],{"class":49,"line":16856},[47,32532,32505],{"class":85},[47,32534,222],{"class":221},[47,32536,32537],{"class":81},"\"-\"",[47,32539,674],{"class":217},[47,32541,665],{"class":85},[47,32543,228],{"class":221},[47,32545,32546],{"class":49,"line":16862},[47,32547,2493],{"emptyLinePlaceholder":145},[47,32549,32550],{"class":49,"line":16876},[47,32551,32552],{"class":279},"        # 初始化参数\n",[47,32554,32555],{"class":49,"line":16889},[47,32556,32557],{"class":279},"        # 训练集损失函数\n",[47,32559,32560,32563,32565],{"class":49,"line":16894},[47,32561,32562],{"class":221},"        train_loss",[47,32564,267],{"class":217},[47,32566,32396],{"class":85},[47,32568,32569],{"class":49,"line":16908},[47,32570,32571],{"class":279},"        # 训练集准确度\n",[47,32573,32574,32577,32579],{"class":49,"line":16913},[47,32575,32576],{"class":221},"        train_corrects",[47,32578,267],{"class":217},[47,32580,3178],{"class":85},[47,32582,32583],{"class":49,"line":16919},[47,32584,32585],{"class":279},"        # 验证集损失函数\n",[47,32587,32588,32591,32593],{"class":49,"line":16924},[47,32589,32590],{"class":221},"        val_loss",[47,32592,267],{"class":217},[47,32594,32396],{"class":85},[47,32596,32597],{"class":49,"line":16938},[47,32598,32599],{"class":279},"        # 验证集准确度\n",[47,32601,32602,32605,32607],{"class":49,"line":16943},[47,32603,32604],{"class":221},"        val_corrects",[47,32606,267],{"class":217},[47,32608,3178],{"class":85},[47,32610,32611],{"class":49,"line":16948},[47,32612,32613],{"class":279},"        # 训练集样本数量\n",[47,32615,32616,32619,32621],{"class":49,"line":16962},[47,32617,32618],{"class":221},"        train_num",[47,32620,267],{"class":217},[47,32622,3178],{"class":85},[47,32624,32625],{"class":49,"line":16974},[47,32626,32627],{"class":279},"        # 验证集样本数量\n",[47,32629,32630,32633,32635],{"class":49,"line":16979},[47,32631,32632],{"class":221},"        val_num",[47,32634,267],{"class":217},[47,32636,3178],{"class":85},[47,32638,32639],{"class":49,"line":16992},[47,32640,32641],{"class":279},"        # 将数据放到设备,并开始训练\n",[47,32643,32644,32646,32648,32650,32652],{"class":49,"line":16997},[47,32645,3496],{"class":217},[47,32647,31655],{"class":221},[47,32649,26097],{"class":217},[47,32651,31660],{"class":85},[47,32653,32654],{"class":221},"(train_dataloader):\n",[47,32656,32657],{"class":49,"line":17002},[47,32658,32659],{"class":279},"            # 将特征放入到训练设备\n",[47,32661,32662,32665,32667],{"class":49,"line":17007},[47,32663,32664],{"class":221},"            b_x",[47,32666,267],{"class":217},[47,32668,32669],{"class":221},"b_x.to(device)\n",[47,32671,32672],{"class":49,"line":17020},[47,32673,32674],{"class":279},"            # 将标签放入到训练设备当中\n",[47,32676,32677,32680,32682],{"class":49,"line":17025},[47,32678,32679],{"class":221},"            b_y",[47,32681,267],{"class":217},[47,32683,32684],{"class":221},"b_y.to(device)\n",[47,32686,32688],{"class":49,"line":32687},98,[47,32689,32690],{"class":279},"            # 设置模型为训练模式\n",[47,32692,32694],{"class":49,"line":32693},99,[47,32695,32696],{"class":221},"            model.train()\n",[47,32698,32700],{"class":49,"line":32699},100,[47,32701,32702],{"class":279},"            # 将数据放到模型当中,开始前向传播\n",[47,32704,32706],{"class":49,"line":32705},101,[47,32707,32708],{"class":279},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[47,32710,32712,32715,32717],{"class":49,"line":32711},102,[47,32713,32714],{"class":221},"            output",[47,32716,267],{"class":217},[47,32718,32719],{"class":221},"model(b_x)\n",[47,32721,32723],{"class":49,"line":32722},103,[47,32724,32725],{"class":279},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[47,32727,32729,32732,32734,32737,32740,32742,32744],{"class":49,"line":32728},104,[47,32730,32731],{"class":221},"            pre_lab",[47,32733,267],{"class":217},[47,32735,32736],{"class":221},"torch.argmax(output,",[47,32738,32739],{"class":5309},"dim",[47,32741,267],{"class":217},[47,32743,436],{"class":85},[47,32745,228],{"class":221},[47,32747,32749],{"class":49,"line":32748},105,[47,32750,32751],{"class":279},"            # 计算每一个batch的损失函数\n",[47,32753,32755,32758,32760],{"class":49,"line":32754},106,[47,32756,32757],{"class":221},"            loss",[47,32759,267],{"class":217},[47,32761,32762],{"class":221},"criterion(output,b_y)\n",[47,32764,32766],{"class":49,"line":32765},107,[47,32767,32768],{"class":279},"            # 将梯度初始化为0\n",[47,32770,32772],{"class":49,"line":32771},108,[47,32773,32774],{"class":221},"            optimizer.zero_grad()\n",[47,32776,32778],{"class":49,"line":32777},109,[47,32779,32780],{"class":279},"            # 梯度置为0后再进行反向传播\n",[47,32782,32784],{"class":49,"line":32783},110,[47,32785,32786],{"class":221},"            loss.backward()\n",[47,32788,32790],{"class":49,"line":32789},111,[47,32791,32792],{"class":279},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[47,32794,32796],{"class":49,"line":32795},112,[47,32797,32798],{"class":221},"            optimizer.step()\n",[47,32800,32802],{"class":49,"line":32801},113,[47,32803,32804],{"class":279},"            # loss.item()指的是batch的平均损失\n",[47,32806,32808,32811,32813,32816,32818,32821,32823],{"class":49,"line":32807},114,[47,32809,32810],{"class":221},"            train_loss",[47,32812,9570],{"class":217},[47,32814,32815],{"class":221},"loss.item()",[47,32817,674],{"class":217},[47,32819,32820],{"class":221},"b_x.size(",[47,32822,411],{"class":85},[47,32824,228],{"class":221},[47,32826,32828],{"class":49,"line":32827},115,[47,32829,32830],{"class":279},"            # 计算每个批次中正确预测的数量\n",[47,32832,32834,32837,32839,32842,32844],{"class":49,"line":32833},116,[47,32835,32836],{"class":221},"            train_corrects",[47,32838,9570],{"class":217},[47,32840,32841],{"class":221},"torch.sum(pre_lab",[47,32843,3042],{"class":217},[47,32845,32846],{"class":221},"b_y.data)\n",[47,32848,32850],{"class":49,"line":32849},117,[47,32851,32852],{"class":279},"            # 计算目前为止一共处理了多少样本\n",[47,32854,32856,32859,32861,32863,32865],{"class":49,"line":32855},118,[47,32857,32858],{"class":221},"            train_num",[47,32860,9570],{"class":217},[47,32862,32820],{"class":221},[47,32864,411],{"class":85},[47,32866,228],{"class":221},[47,32868,32870],{"class":49,"line":32869},119,[47,32871,32872],{"class":279},"        # 验证数据\n",[47,32874,32876,32878,32881,32883,32885],{"class":49,"line":32875},120,[47,32877,3496],{"class":217},[47,32879,32880],{"class":221}," step ,(b_x,b_y) ",[47,32882,26097],{"class":217},[47,32884,31660],{"class":85},[47,32886,32887],{"class":221},"(val_dataloader):\n",[47,32889,32891],{"class":49,"line":32890},121,[47,32892,32893],{"class":279},"            # 将特征放到验证设备当中\n",[47,32895,32897,32899,32901],{"class":49,"line":32896},122,[47,32898,32664],{"class":221},[47,32900,267],{"class":217},[47,32902,32669],{"class":221},[47,32904,32906],{"class":49,"line":32905},123,[47,32907,32908],{"class":279},"            # 将标签放到放到训练设备当中\n",[47,32910,32912,32914,32916],{"class":49,"line":32911},124,[47,32913,32679],{"class":221},[47,32915,267],{"class":217},[47,32917,32684],{"class":221},[47,32919,32921],{"class":49,"line":32920},125,[47,32922,32923],{"class":279},"            # 开启验证模式，设置模型为评估模式\n",[47,32925,32927],{"class":49,"line":32926},126,[47,32928,32929],{"class":221},"            model.eval()\n",[47,32931,32933,32936],{"class":49,"line":32932},127,[47,32934,32935],{"class":217},"            with",[47,32937,32938],{"class":221}," torch.no_grad():\n",[47,32940,32942],{"class":49,"line":32941},128,[47,32943,32944],{"class":279},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[47,32946,32948,32951,32953],{"class":49,"line":32947},129,[47,32949,32950],{"class":221},"                output ",[47,32952,267],{"class":217},[47,32954,32955],{"class":221}," model(b_x)\n",[47,32957,32959],{"class":49,"line":32958},130,[47,32960,32961],{"class":279},"                # 查找每一行中最大值对应的下标\n",[47,32963,32965,32968,32970,32973,32975,32977,32979],{"class":49,"line":32964},131,[47,32966,32967],{"class":221},"                pre_lab ",[47,32969,267],{"class":217},[47,32971,32972],{"class":221}," torch.argmax(output, ",[47,32974,32739],{"class":5309},[47,32976,267],{"class":217},[47,32978,436],{"class":85},[47,32980,228],{"class":221},[47,32982,32984],{"class":49,"line":32983},132,[47,32985,32986],{"class":279},"                # 计算验证集上的当前 batch 损失\n",[47,32988,32990,32993,32995],{"class":49,"line":32989},133,[47,32991,32992],{"class":221},"                val_batch_loss ",[47,32994,267],{"class":217},[47,32996,32997],{"class":221}," criterion(output, b_y)\n",[47,32999,33001],{"class":49,"line":33000},134,[47,33002,33003],{"class":279},"                # 对损失函数进行累加（按样本数加权）\n",[47,33005,33007,33010,33012,33015,33017,33020,33022],{"class":49,"line":33006},135,[47,33008,33009],{"class":221},"                val_loss ",[47,33011,9570],{"class":217},[47,33013,33014],{"class":221}," val_batch_loss.item() ",[47,33016,674],{"class":217},[47,33018,33019],{"class":221}," b_x.size(",[47,33021,411],{"class":85},[47,33023,228],{"class":221},[47,33025,33027,33030,33032,33035,33037],{"class":49,"line":33026},136,[47,33028,33029],{"class":221},"                val_corrects ",[47,33031,9570],{"class":217},[47,33033,33034],{"class":221}," torch.sum(pre_lab ",[47,33036,3042],{"class":217},[47,33038,33039],{"class":221}," b_y.data)\n",[47,33041,33043],{"class":49,"line":33042},137,[47,33044,33045],{"class":279},"                # 当前用于验证的样本数量\n",[47,33047,33049,33052,33054,33056,33058],{"class":49,"line":33048},138,[47,33050,33051],{"class":221},"            val_num ",[47,33053,9570],{"class":217},[47,33055,33019],{"class":221},[47,33057,411],{"class":85},[47,33059,228],{"class":221},[47,33061,33063],{"class":49,"line":33062},139,[47,33064,33065],{"class":279},"        # 计算并保存每一次迭代的loss值和准确率\n",[47,33067,33069],{"class":49,"line":33068},140,[47,33070,33071],{"class":279},"        # 计算并保存训练集的loss值\n",[47,33073,33075,33078,33080],{"class":49,"line":33074},141,[47,33076,33077],{"class":221},"        train_loss_all.append(train_loss",[47,33079,803],{"class":217},[47,33081,33082],{"class":221},"train_num)\n",[47,33084,33086],{"class":49,"line":33085},142,[47,33087,33088],{"class":279},"        # 取双精度\n",[47,33090,33092],{"class":49,"line":33091},143,[47,33093,33094],{"class":279},"        # 计算并保存训练集的准确率\n",[47,33096,33098,33101,33103],{"class":49,"line":33097},144,[47,33099,33100],{"class":221},"        train_acc_all.append(train_corrects.double().item()",[47,33102,803],{"class":217},[47,33104,33082],{"class":221},[47,33106,33108],{"class":49,"line":33107},145,[47,33109,33110],{"class":279},"        # 计算并保存验证集的loss值\n",[47,33112,33114,33117,33119],{"class":49,"line":33113},146,[47,33115,33116],{"class":221},"        val_loss_all.append(val_loss",[47,33118,803],{"class":217},[47,33120,33121],{"class":221},"val_num)\n",[47,33123,33125],{"class":49,"line":33124},147,[47,33126,33127],{"class":279},"        # 计算并保存验证集的准确率\n",[47,33129,33131,33134,33136],{"class":49,"line":33130},148,[47,33132,33133],{"class":221},"        val_acc_all.append(val_corrects.double().item()",[47,33135,803],{"class":217},[47,33137,33121],{"class":221},[47,33139,33141],{"class":49,"line":33140},149,[47,33142,2493],{"emptyLinePlaceholder":145},[47,33144,33146],{"class":49,"line":33145},150,[47,33147,33148],{"class":279},"        # 打印训练一轮的loss值和准确率\n",[47,33150,33152,33154,33156,33158,33160,33163,33165,33168,33170,33173,33175,33177,33179,33181,33184,33186,33188,33191,33193,33195],{"class":49,"line":33151},151,[47,33153,32505],{"class":85},[47,33155,222],{"class":221},[47,33157,3685],{"class":81},[47,33159,32513],{"class":85},[47,33161,33162],{"class":81},"train loss:",[47,33164,1115],{"class":85},[47,33166,33167],{"class":217},":.4f",[47,33169,1165],{"class":85},[47,33171,33172],{"class":81}," train acc:",[47,33174,1115],{"class":85},[47,33176,33167],{"class":217},[47,33178,1165],{"class":85},[47,33180,3685],{"class":81},[47,33182,33183],{"class":221},".format(epoch,train_loss_all[",[47,33185,751],{"class":217},[47,33187,436],{"class":85},[47,33189,33190],{"class":221},"],train_acc_all[",[47,33192,751],{"class":217},[47,33194,436],{"class":85},[47,33196,33197],{"class":221},"]))\n",[47,33199,33201,33203,33205,33207,33209,33212,33214,33216,33218,33221,33223,33225,33227,33229,33232,33234,33236,33239,33241,33243],{"class":49,"line":33200},152,[47,33202,32505],{"class":85},[47,33204,222],{"class":221},[47,33206,3685],{"class":81},[47,33208,32513],{"class":85},[47,33210,33211],{"class":81},"val loss:",[47,33213,1115],{"class":85},[47,33215,33167],{"class":217},[47,33217,1165],{"class":85},[47,33219,33220],{"class":81}," val acc:",[47,33222,1115],{"class":85},[47,33224,33167],{"class":217},[47,33226,1165],{"class":85},[47,33228,3685],{"class":81},[47,33230,33231],{"class":221},".format(epoch,val_loss_all[",[47,33233,751],{"class":217},[47,33235,436],{"class":85},[47,33237,33238],{"class":221},"],val_acc_all[",[47,33240,751],{"class":217},[47,33242,436],{"class":85},[47,33244,33197],{"class":221},[47,33246,33248],{"class":49,"line":33247},153,[47,33249,2493],{"emptyLinePlaceholder":145},[47,33251,33253],{"class":49,"line":33252},154,[47,33254,33255],{"class":279},"        # 判断准确度--->保存最优模型\n",[47,33257,33259,33261,33264,33266,33268,33270,33272],{"class":49,"line":33258},155,[47,33260,2590],{"class":217},[47,33262,33263],{"class":221}," val_acc_all[",[47,33265,751],{"class":217},[47,33267,436],{"class":85},[47,33269,1159],{"class":221},[47,33271,1179],{"class":217},[47,33273,33274],{"class":221},"best_acc:\n",[47,33276,33278],{"class":49,"line":33277},156,[47,33279,33280],{"class":279},"            # 保存当前模型准确度\n",[47,33282,33284,33287,33289,33291,33294,33296,33298],{"class":49,"line":33283},157,[47,33285,33286],{"class":221},"            best_acc:",[47,33288,261],{"class":85},[47,33290,267],{"class":217},[47,33292,33293],{"class":221},"val_acc_all[",[47,33295,751],{"class":217},[47,33297,436],{"class":85},[47,33299,33300],{"class":221},"]\n",[47,33302,33304],{"class":49,"line":33303},158,[47,33305,33306],{"class":279},"            # 保存当前的准确度\n",[47,33308,33310],{"class":49,"line":33309},159,[47,33311,33312],{"class":279},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[47,33314,33316,33319,33321],{"class":49,"line":33315},160,[47,33317,33318],{"class":221},"            best_model_wts",[47,33320,267],{"class":217},[47,33322,32368],{"class":221},[47,33324,33326],{"class":49,"line":33325},161,[47,33327,2493],{"emptyLinePlaceholder":145},[47,33329,33331],{"class":49,"line":33330},162,[47,33332,33333],{"class":279},"        # 计算耗时\n",[47,33335,33337,33340,33342,33345,33347],{"class":49,"line":33336},163,[47,33338,33339],{"class":221},"        time_use",[47,33341,267],{"class":217},[47,33343,33344],{"class":221},"time.time()",[47,33346,751],{"class":217},[47,33348,33349],{"class":221},"since\n",[47,33351,33353,33355,33357,33360,33362,33365,33367,33369,33371,33373,33375,33378,33381,33384,33386,33389,33391,33393],{"class":49,"line":33352},164,[47,33354,32505],{"class":85},[47,33356,222],{"class":221},[47,33358,33359],{"class":81},"'训练和验证耗费的时间",[47,33361,1115],{"class":85},[47,33363,33364],{"class":217},":.0f",[47,33366,1165],{"class":85},[47,33368,763],{"class":81},[47,33370,1115],{"class":85},[47,33372,33364],{"class":217},[47,33374,1165],{"class":85},[47,33376,33377],{"class":81},"s'",[47,33379,33380],{"class":221},".format(time_use",[47,33382,33383],{"class":217},"\u002F\u002F",[47,33385,1126],{"class":85},[47,33387,33388],{"class":221},",time_use",[47,33390,547],{"class":217},[47,33392,1126],{"class":85},[47,33394,30551],{"class":221},[47,33396,33398],{"class":49,"line":33397},165,[47,33399,33400],{"class":279},"    # 选择最优参数\n",[47,33402,33404],{"class":49,"line":33403},166,[47,33405,33406],{"class":279},"    # 加载最高准确率下的模型参数\n",[47,33408,33410],{"class":49,"line":33409},167,[47,33411,33412],{"class":279},"    # model.load_state_dict(best_model_wts)\n",[47,33414,33416,33419,33422],{"class":49,"line":33415},168,[47,33417,33418],{"class":221},"    torch.save(model.state_dict(best_model_wts), ",[47,33420,33421],{"class":81},"'.\u002Fbest_model.pth'",[47,33423,228],{"class":221},[47,33425,33427],{"class":49,"line":33426},169,[47,33428,33429],{"class":279},"    # 或者写成\n",[47,33431,33433],{"class":49,"line":33432},170,[47,33434,33435],{"class":279},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[47,33437,33439],{"class":49,"line":33438},171,[47,33440,33441],{"class":279},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[47,33443,33445,33448,33450,33453,33456,33458],{"class":49,"line":33444},172,[47,33446,33447],{"class":221},"    train_process",[47,33449,267],{"class":217},[47,33451,33452],{"class":221},"pd.DataFrame(",[47,33454,33455],{"class":5309},"data",[47,33457,267],{"class":217},[47,33459,1640],{"class":221},[47,33461,33463,33466,33468,33471],{"class":49,"line":33462},173,[47,33464,33465],{"class":81},"        \"epoch\"",[47,33467,1078],{"class":221},[47,33469,33470],{"class":85},"range",[47,33472,33473],{"class":221},"(num_epochs),\n",[47,33475,33477,33480],{"class":49,"line":33476},174,[47,33478,33479],{"class":81},"        \"train_loss_all\"",[47,33481,33482],{"class":221},":train_loss_all,\n",[47,33484,33486,33489],{"class":49,"line":33485},175,[47,33487,33488],{"class":81},"        \"val_loss_all\"",[47,33490,33491],{"class":221},":val_loss_all,\n",[47,33493,33495,33498],{"class":49,"line":33494},176,[47,33496,33497],{"class":81},"        \"train_acc_all\"",[47,33499,33500],{"class":221},":train_acc_all,\n",[47,33502,33504,33507],{"class":49,"line":33503},177,[47,33505,33506],{"class":81},"        \"val_acc_all\"",[47,33508,33509],{"class":221},":val_acc_all\n",[47,33511,33513],{"class":49,"line":33512},178,[47,33514,33515],{"class":221},"    })\n",[47,33517,33519],{"class":49,"line":33518},179,[47,33520,33521],{"class":279},"    # 返回训练保存的过程\n",[47,33523,33525,33527],{"class":49,"line":33524},180,[47,33526,4183],{"class":217},[47,33528,33529],{"class":221}," train_process\n",[47,33531,33533],{"class":49,"line":33532},181,[47,33534,2493],{"emptyLinePlaceholder":145},[47,33536,33538],{"class":49,"line":33537},182,[47,33539,33540],{"class":279},"# 将loss值和精度按照图片的形式展示出来\n",[47,33542,33544,33546,33549],{"class":49,"line":33543},183,[47,33545,32001],{"class":217},[47,33547,33548],{"class":53}," matplot_acc_loss",[47,33550,33551],{"class":221},"(train_process):\n",[47,33553,33555],{"class":49,"line":33554},184,[47,33556,33557],{"class":279},"    # 设置图的大小\n",[47,33559,33561,33564,33566,33568,33570,33572,33574,33576],{"class":49,"line":33560},185,[47,33562,33563],{"class":221},"    plt.figure(",[47,33565,31747],{"class":5309},[47,33567,267],{"class":217},[47,33569,222],{"class":221},[47,33571,717],{"class":85},[47,33573,597],{"class":221},[47,33575,512],{"class":85},[47,33577,30551],{"class":221},[47,33579,33581],{"class":49,"line":33580},186,[47,33582,33583],{"class":279},"    # 设置图中有几张图\n",[47,33585,33587],{"class":49,"line":33586},187,[47,33588,33589],{"class":279},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[47,33591,33593],{"class":49,"line":33592},188,[47,33594,33595],{"class":279},"    # ①loss图\n",[47,33597,33599,33601,33603,33605,33607,33609,33611],{"class":49,"line":33598},189,[47,33600,31781],{"class":221},[47,33602,436],{"class":85},[47,33604,597],{"class":221},[47,33606,298],{"class":85},[47,33608,597],{"class":221},[47,33610,436],{"class":85},[47,33612,228],{"class":221},[47,33614,33616],{"class":49,"line":33615},190,[47,33617,33618],{"class":279},"    # 补充:\n",[47,33620,33622],{"class":49,"line":33621},191,[47,33623,33624],{"class":279},"    # plt.subplot(nrows, ncols, index)\n",[47,33626,33628],{"class":49,"line":33627},192,[47,33629,33630],{"class":279},"    # nrows：行数\n",[47,33632,33634],{"class":49,"line":33633},193,[47,33635,33636],{"class":279},"    # ncols：列数\n",[47,33638,33640],{"class":49,"line":33639},194,[47,33641,33642],{"class":279},"    # index：目前选中第几个子图（从1开始）\n",[47,33644,33646,33649,33652,33655,33658,33660,33663,33665,33668],{"class":49,"line":33645},195,[47,33647,33648],{"class":221},"    plt.plot(train_process[",[47,33650,33651],{"class":81},"\"epoch\"",[47,33653,33654],{"class":221},"],train_process.train_loss_all,",[47,33656,33657],{"class":81},"'ro-'",[47,33659,597],{"class":221},[47,33661,33662],{"class":5309},"label",[47,33664,267],{"class":217},[47,33666,33667],{"class":81},"'train loss'",[47,33669,228],{"class":221},[47,33671,33673,33675,33677,33680,33683,33685,33687,33689,33692],{"class":49,"line":33672},196,[47,33674,33648],{"class":221},[47,33676,33651],{"class":81},[47,33678,33679],{"class":221},"],train_process.val_loss_all,",[47,33681,33682],{"class":81},"'bs--'",[47,33684,597],{"class":221},[47,33686,33662],{"class":5309},[47,33688,267],{"class":217},[47,33690,33691],{"class":81},"'val loss'",[47,33693,228],{"class":221},[47,33695,33697],{"class":49,"line":33696},197,[47,33698,33699],{"class":279},"    # 添加一个图例\n",[47,33701,33703],{"class":49,"line":33702},198,[47,33704,33705],{"class":221},"    plt.legend()\n",[47,33707,33709],{"class":49,"line":33708},199,[47,33710,33711],{"class":279},"    # 给轴添加标签\n",[47,33713,33715,33718,33721],{"class":49,"line":33714},200,[47,33716,33717],{"class":221},"    plt.xlabel(",[47,33719,33720],{"class":81},"'epoch'",[47,33722,228],{"class":221},[47,33724,33726,33729,33732],{"class":49,"line":33725},201,[47,33727,33728],{"class":221},"    plt.ylabel(",[47,33730,33731],{"class":81},"'loss'",[47,33733,228],{"class":221},[47,33735,33737],{"class":49,"line":33736},202,[47,33738,33739],{"class":279},"    # ②准确度图\n",[47,33741,33743,33745,33747,33749,33751,33753,33755],{"class":49,"line":33742},203,[47,33744,31781],{"class":221},[47,33746,436],{"class":85},[47,33748,597],{"class":221},[47,33750,298],{"class":85},[47,33752,597],{"class":221},[47,33754,298],{"class":85},[47,33756,228],{"class":221},[47,33758,33760,33762,33764,33767,33769,33771,33773,33775,33778],{"class":49,"line":33759},204,[47,33761,33648],{"class":221},[47,33763,33651],{"class":81},[47,33765,33766],{"class":221},"],train_process.train_acc_all,",[47,33768,33657],{"class":81},[47,33770,597],{"class":221},[47,33772,33662],{"class":5309},[47,33774,267],{"class":217},[47,33776,33777],{"class":81},"'train acc'",[47,33779,228],{"class":221},[47,33781,33783,33785,33787,33790,33792,33794,33796,33798,33801],{"class":49,"line":33782},205,[47,33784,33648],{"class":221},[47,33786,33651],{"class":81},[47,33788,33789],{"class":221},"],train_process.val_acc_all,",[47,33791,33682],{"class":81},[47,33793,597],{"class":221},[47,33795,33662],{"class":5309},[47,33797,267],{"class":217},[47,33799,33800],{"class":81},"'val acc'",[47,33802,228],{"class":221},[47,33804,33806],{"class":49,"line":33805},206,[47,33807,33808],{"class":279},"    # 添加图例\n",[47,33810,33812],{"class":49,"line":33811},207,[47,33813,33705],{"class":221},[47,33815,33817,33819,33821],{"class":49,"line":33816},208,[47,33818,33717],{"class":221},[47,33820,33651],{"class":81},[47,33822,228],{"class":221},[47,33824,33826,33828,33831],{"class":49,"line":33825},209,[47,33827,33728],{"class":221},[47,33829,33830],{"class":81},"\"acc\"",[47,33832,228],{"class":221},[47,33834,33836],{"class":49,"line":33835},210,[47,33837,33838],{"class":221},"    plt.show()\n",[47,33840,33842],{"class":49,"line":33841},211,[47,33843,2493],{"emptyLinePlaceholder":145},[47,33845,33847],{"class":49,"line":33846},212,[47,33848,33849],{"class":279},"# 正式开始训练:\n",[47,33851,33853,33855,33857,33859,33861],{"class":49,"line":33852},213,[47,33854,1625],{"class":217},[47,33856,31274],{"class":85},[47,33858,3042],{"class":217},[47,33860,31279],{"class":81},[47,33862,3832],{"class":221},[47,33864,33866],{"class":49,"line":33865},214,[47,33867,33868],{"class":279},"    # 将模型实例化\n",[47,33870,33872,33875,33877],{"class":49,"line":33871},215,[47,33873,33874],{"class":221},"    LeNet",[47,33876,267],{"class":217},[47,33878,33879],{"class":221},"LeNet()\n",[47,33881,33883,33886,33888],{"class":49,"line":33882},216,[47,33884,33885],{"class":221},"    train_dataloader,val_dataloader",[47,33887,267],{"class":217},[47,33889,33890],{"class":221},"train_val_data_process()\n",[47,33892,33894,33896,33898,33901,33904,33906,33908],{"class":49,"line":33893},217,[47,33895,33447],{"class":221},[47,33897,267],{"class":217},[47,33899,33900],{"class":221},"train_model_process(LeNet,train_dataloader,val_dataloader,",[47,33902,33903],{"class":5309},"num_epochs",[47,33905,267],{"class":217},[47,33907,919],{"class":85},[47,33909,228],{"class":221},[47,33911,33913],{"class":49,"line":33912},218,[47,33914,33915],{"class":221},"    matplot_acc_loss(train_process)\n",[19,33917,33918],{},"画图的补充点学习：",[19,33920,33921],{},[1556,33922],{"alt":43,"src":33923},"\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",[171,33925,33926],{"start":1273},[109,33927,33928],{},"测试",[38,33930,33932],{"className":30432,"code":33931,"language":30434,"meta":43,"style":43},"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",[26,33933,33934,33940,33950,33962,33972,33977,33987,33997,34001,34006,34015,34032,34044,34061,34072,34088,34093,34104,34115,34126,34133,34137,34142,34152,34157,34174,34182,34186,34191,34200,34209,34213,34218,34223,34228,34235,34240,34252,34262,34272,34277,34281,34286,34295,34300,34316,34321,34326,34331,34345,34350,34364,34368,34373,34388,34393,34405,34409,34414,34426,34431,34439,34444,34449,34459,34464,34473,34478,34483,34487,34492,34497,34513,34521,34526,34531,34590,34596,34601,34612,34620,34628,34632,34637,34641,34646,34654,34659,34675,34680,34690,34700],{"__ignoreMap":43},[47,33935,33936,33938],{"class":49,"line":50},[47,33937,30446],{"class":217},[47,33939,30449],{"class":221},[47,33941,33942,33944,33946,33948],{"class":49,"line":92},[47,33943,30446],{"class":217},[47,33945,31469],{"class":221},[47,33947,31437],{"class":217},[47,33949,31474],{"class":221},[47,33951,33952,33954,33957,33959],{"class":49,"line":1273},[47,33953,30791],{"class":217},[47,33955,33956],{"class":221}," jupyter_client.consoleapp ",[47,33958,30446],{"class":217},[47,33960,33961],{"class":221}," classes\n",[47,33963,33964,33966,33968,33970],{"class":49,"line":1288},[47,33965,30791],{"class":217},[47,33967,31452],{"class":221},[47,33969,30446],{"class":217},[47,33971,31457],{"class":221},[47,33973,33974],{"class":49,"line":1294},[47,33975,33976],{"class":279},"# 导入数据集\n",[47,33978,33979,33981,33983,33985],{"class":49,"line":1308},[47,33980,30791],{"class":217},[47,33982,31422],{"class":221},[47,33984,30446],{"class":217},[47,33986,31427],{"class":221},[47,33988,33989,33991,33993,33995],{"class":49,"line":1314},[47,33990,30791],{"class":217},[47,33992,31968],{"class":221},[47,33994,30446],{"class":217},[47,33996,31973],{"class":221},[47,33998,33999],{"class":49,"line":1405},[47,34000,2493],{"emptyLinePlaceholder":145},[47,34002,34003],{"class":49,"line":1411},[47,34004,34005],{"class":279},"# 测试数据处理\n",[47,34007,34008,34010,34013],{"class":49,"line":1423},[47,34009,32001],{"class":217},[47,34011,34012],{"class":53}," test_data_process",[47,34014,32007],{"class":221},[47,34016,34017,34020,34022,34024,34026,34028,34030],{"class":49,"line":1706},[47,34018,34019],{"class":221},"    test_data",[47,34021,267],{"class":217},[47,34023,31509],{"class":221},[47,34025,31512],{"class":5309},[47,34027,267],{"class":217},[47,34029,31517],{"class":81},[47,34031,31520],{"class":221},[47,34033,34034,34037,34039,34042],{"class":49,"line":1711},[47,34035,34036],{"class":5309},"                           train",[47,34038,267],{"class":217},[47,34040,34041],{"class":85},"False",[47,34043,31520],{"class":221},[47,34045,34046,34049,34051,34053,34055,34057,34059],{"class":49,"line":1717},[47,34047,34048],{"class":5309},"                           transform",[47,34050,267],{"class":217},[47,34052,31547],{"class":221},[47,34054,31550],{"class":5309},[47,34056,267],{"class":217},[47,34058,1120],{"class":85},[47,34060,31558],{"class":221},[47,34062,34063,34066,34068,34070],{"class":49,"line":1722},[47,34064,34065],{"class":5309},"                           download",[47,34067,267],{"class":217},[47,34069,31530],{"class":85},[47,34071,228],{"class":221},[47,34073,34074,34077,34079,34081,34083,34085],{"class":49,"line":1736},[47,34075,34076],{"class":221},"    test_dataloader",[47,34078,267],{"class":217},[47,34080,31588],{"class":221},[47,34082,31591],{"class":5309},[47,34084,267],{"class":217},[47,34086,34087],{"class":221},"test_data,\n",[47,34089,34090],{"class":49,"line":1741},[47,34091,34092],{"class":279},"                                    # 这里是一张一张进行测试\n",[47,34094,34095,34098,34100,34102],{"class":49,"line":1747},[47,34096,34097],{"class":5309},"                                    batch_size",[47,34099,267],{"class":217},[47,34101,436],{"class":85},[47,34103,31520],{"class":221},[47,34105,34106,34109,34111,34113],{"class":49,"line":1768},[47,34107,34108],{"class":5309},"                                    shuffle",[47,34110,267],{"class":217},[47,34112,31530],{"class":85},[47,34114,31520],{"class":221},[47,34116,34117,34120,34122,34124],{"class":49,"line":1773},[47,34118,34119],{"class":5309},"                                    num_workers",[47,34121,267],{"class":217},[47,34123,411],{"class":85},[47,34125,228],{"class":221},[47,34127,34128,34130],{"class":49,"line":1787},[47,34129,4183],{"class":217},[47,34131,34132],{"class":221}," test_dataloader\n",[47,34134,34135],{"class":49,"line":1792},[47,34136,2493],{"emptyLinePlaceholder":145},[47,34138,34139],{"class":49,"line":1821},[47,34140,34141],{"class":279},"# 定义模型测试函数\n",[47,34143,34144,34146,34149],{"class":49,"line":1826},[47,34145,32001],{"class":217},[47,34147,34148],{"class":53}," test_model_process",[47,34150,34151],{"class":221},"(model,test_dataloader):\n",[47,34153,34154],{"class":49,"line":1843},[47,34155,34156],{"class":279},"    # 将模型放到设备当中，先进行判断\n",[47,34158,34159,34161,34163,34165,34167,34169,34171],{"class":49,"line":1848},[47,34160,31291],{"class":221},[47,34162,267],{"class":217},[47,34164,31298],{"class":81},[47,34166,1798],{"class":217},[47,34168,31303],{"class":221},[47,34170,1795],{"class":217},[47,34172,34173],{"class":81}," \"cpu\"\n",[47,34175,34176,34178,34180],{"class":49,"line":1853},[47,34177,31343],{"class":221},[47,34179,267],{"class":217},[47,34181,32343],{"class":221},[47,34183,34184],{"class":49,"line":1858},[47,34185,2493],{"emptyLinePlaceholder":145},[47,34187,34188],{"class":49,"line":1872},[47,34189,34190],{"class":279},"    # 设置初始化参数\n",[47,34192,34193,34196,34198],{"class":49,"line":1877},[47,34194,34195],{"class":221},"    test_corrects",[47,34197,267],{"class":217},[47,34199,32396],{"class":85},[47,34201,34202,34205,34207],{"class":49,"line":2670},[47,34203,34204],{"class":221},"    test_num",[47,34206,267],{"class":217},[47,34208,3178],{"class":85},[47,34210,34211],{"class":49,"line":2684},[47,34212,2493],{"emptyLinePlaceholder":145},[47,34214,34215],{"class":49,"line":2692},[47,34216,34217],{"class":279},"    # 进行模型测试\n",[47,34219,34220],{"class":49,"line":2697},[47,34221,34222],{"class":279},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[47,34224,34225],{"class":49,"line":2703},[47,34226,34227],{"class":279},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[47,34229,34230,34233],{"class":49,"line":2709},[47,34231,34232],{"class":217},"    with",[47,34234,32938],{"class":221},[47,34236,34237],{"class":49,"line":2714},[47,34238,34239],{"class":279},"        # 从数据中进行\n",[47,34241,34242,34244,34247,34249],{"class":49,"line":8041},[47,34243,3496],{"class":217},[47,34245,34246],{"class":221}," test_data_x,test_data_y ",[47,34248,26097],{"class":217},[47,34250,34251],{"class":221}," test_dataloader:\n",[47,34253,34254,34257,34259],{"class":49,"line":8065},[47,34255,34256],{"class":221},"            test_data_x",[47,34258,267],{"class":217},[47,34260,34261],{"class":221},"test_data_x.to(device)\n",[47,34263,34264,34267,34269],{"class":49,"line":8070},[47,34265,34266],{"class":221},"            test_data_y",[47,34268,267],{"class":217},[47,34270,34271],{"class":221},"test_data_y.to(device)\n",[47,34273,34274],{"class":49,"line":8076},[47,34275,34276],{"class":279},"            # 设置为验证模式\n",[47,34278,34279],{"class":49,"line":8103},[47,34280,32929],{"class":221},[47,34282,34283],{"class":49,"line":8108},[47,34284,34285],{"class":279},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[47,34287,34288,34290,34292],{"class":49,"line":8114},[47,34289,32714],{"class":221},[47,34291,267],{"class":217},[47,34293,34294],{"class":221},"model(test_data_x)\n",[47,34296,34297],{"class":49,"line":8126},[47,34298,34299],{"class":279},"            # 查找每一行中最大值对应的下标\n",[47,34301,34302,34304,34306,34308,34310,34312,34314],{"class":49,"line":8138},[47,34303,32731],{"class":221},[47,34305,267],{"class":217},[47,34307,32736],{"class":221},[47,34309,32739],{"class":5309},[47,34311,267],{"class":217},[47,34313,436],{"class":85},[47,34315,228],{"class":221},[47,34317,34318],{"class":49,"line":8150},[47,34319,34320],{"class":279},"            # 计算正确率\n",[47,34322,34323],{"class":49,"line":9809},[47,34324,34325],{"class":279},"            # .data表示是一个不带梯度信息的tensor\n",[47,34327,34328],{"class":49,"line":9834},[47,34329,34330],{"class":279},"            # 如果预测正确，则准确度test_corrects加1\n",[47,34332,34333,34336,34338,34340,34342],{"class":49,"line":9857},[47,34334,34335],{"class":221},"            test_corrects",[47,34337,9570],{"class":217},[47,34339,32841],{"class":221},[47,34341,3042],{"class":217},[47,34343,34344],{"class":221},"test_data_y.data)\n",[47,34346,34347],{"class":49,"line":9881},[47,34348,34349],{"class":279},"            # 将所有的测试样本进行累计\n",[47,34351,34352,34355,34357,34360,34362],{"class":49,"line":9886},[47,34353,34354],{"class":221},"            test_num",[47,34356,9570],{"class":217},[47,34358,34359],{"class":221},"test_data_x.size(",[47,34361,411],{"class":85},[47,34363,228],{"class":221},[47,34365,34366],{"class":49,"line":9891},[47,34367,2493],{"emptyLinePlaceholder":145},[47,34369,34370],{"class":49,"line":9896},[47,34371,34372],{"class":279},"        # 计算准确度\n",[47,34374,34375,34378,34380,34383,34385],{"class":49,"line":9905},[47,34376,34377],{"class":221},"        test_acc",[47,34379,267],{"class":217},[47,34381,34382],{"class":221},"test_corrects.double().item()",[47,34384,803],{"class":217},[47,34386,34387],{"class":221},"test_num\n",[47,34389,34390],{"class":49,"line":9910},[47,34391,34392],{"class":279},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[47,34394,34395,34397,34399,34402],{"class":49,"line":9916},[47,34396,32505],{"class":85},[47,34398,222],{"class":221},[47,34400,34401],{"class":81},"\"测试的准确率：\"",[47,34403,34404],{"class":221},",test_acc)\n",[47,34406,34407],{"class":49,"line":9937},[47,34408,2493],{"emptyLinePlaceholder":145},[47,34410,34411],{"class":49,"line":9943},[47,34412,34413],{"class":279},"# 实现模型的测试功能\n",[47,34415,34416,34418,34420,34422,34424],{"class":49,"line":9957},[47,34417,1625],{"class":217},[47,34419,31274],{"class":85},[47,34421,3042],{"class":217},[47,34423,31279],{"class":81},[47,34425,3832],{"class":221},[47,34427,34428],{"class":49,"line":9963},[47,34429,34430],{"class":279},"    # 加载模型\n",[47,34432,34433,34435,34437],{"class":49,"line":9990},[47,34434,31343],{"class":221},[47,34436,267],{"class":217},[47,34438,33879],{"class":221},[47,34440,34441],{"class":49,"line":9999},[47,34442,34443],{"class":279},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[47,34445,34446],{"class":49,"line":10005},[47,34447,34448],{"class":279},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[47,34450,34451,34454,34457],{"class":49,"line":10013},[47,34452,34453],{"class":221},"    model.load_state_dict(torch.load(",[47,34455,34456],{"class":81},"'best_model.pth'",[47,34458,30551],{"class":221},[47,34460,34461],{"class":49,"line":10018},[47,34462,34463],{"class":279},"    # 数据加载\n",[47,34465,34466,34468,34470],{"class":49,"line":16697},[47,34467,34076],{"class":221},[47,34469,267],{"class":217},[47,34471,34472],{"class":221},"test_data_process()\n",[47,34474,34475],{"class":49,"line":16703},[47,34476,34477],{"class":279},"    # 加载模型测试的函数\n",[47,34479,34480],{"class":49,"line":16726},[47,34481,34482],{"class":221},"    test_model_process(model,test_dataloader)\n",[47,34484,34485],{"class":49,"line":16732},[47,34486,2493],{"emptyLinePlaceholder":145},[47,34488,34489],{"class":49,"line":16755},[47,34490,34491],{"class":279},"    # 验证集推理实现：\n",[47,34493,34494],{"class":49,"line":16769},[47,34495,34496],{"class":279},"    # 加载数据加载的更详细一些\n",[47,34498,34499,34501,34503,34505,34507,34509,34511],{"class":49,"line":16789},[47,34500,31291],{"class":221},[47,34502,267],{"class":217},[47,34504,31298],{"class":81},[47,34506,1798],{"class":217},[47,34508,31303],{"class":221},[47,34510,1795],{"class":217},[47,34512,34173],{"class":81},[47,34514,34515,34517,34519],{"class":49,"line":16795},[47,34516,31343],{"class":221},[47,34518,267],{"class":217},[47,34520,32343],{"class":221},[47,34522,34523],{"class":49,"line":16806},[47,34524,34525],{"class":279},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[47,34527,34528],{"class":49,"line":16829},[47,34529,34530],{"class":279},"    # 顺序不可改变\n",[47,34532,34533,34536,34538,34540,34543,34545,34548,34550,34553,34555,34558,34560,34563,34565,34568,34570,34573,34575,34578,34580,34583,34585,34588],{"class":49,"line":16851},[47,34534,34535],{"class":221},"    classes",[47,34537,267],{"class":217},[47,34539,1109],{"class":221},[47,34541,34542],{"class":81},"'T-shirt\u002Ftop'",[47,34544,597],{"class":221},[47,34546,34547],{"class":81},"'Trouser'",[47,34549,597],{"class":221},[47,34551,34552],{"class":81},"'Pullover'",[47,34554,597],{"class":221},[47,34556,34557],{"class":81},"'Dress'",[47,34559,597],{"class":221},[47,34561,34562],{"class":81},"'Coat'",[47,34564,597],{"class":221},[47,34566,34567],{"class":81},"'Sandal'",[47,34569,597],{"class":221},[47,34571,34572],{"class":81},"'Shirt'",[47,34574,597],{"class":221},[47,34576,34577],{"class":81},"'Sneaker'",[47,34579,597],{"class":221},[47,34581,34582],{"class":81},"'Bag'",[47,34584,597],{"class":221},[47,34586,34587],{"class":81},"'Ankle boot'",[47,34589,33300],{"class":221},[47,34591,34592,34594],{"class":49,"line":16856},[47,34593,34232],{"class":217},[47,34595,32938],{"class":221},[47,34597,34598],{"class":49,"line":16862},[47,34599,34600],{"class":279},"        # 将数据和标签都放到设备当中\n",[47,34602,34603,34605,34608,34610],{"class":49,"line":16876},[47,34604,3496],{"class":217},[47,34606,34607],{"class":221}," b_x,b_y ",[47,34609,26097],{"class":217},[47,34611,34251],{"class":221},[47,34613,34614,34616,34618],{"class":49,"line":16889},[47,34615,32664],{"class":221},[47,34617,267],{"class":217},[47,34619,32669],{"class":221},[47,34621,34622,34624,34626],{"class":49,"line":16894},[47,34623,32679],{"class":221},[47,34625,267],{"class":217},[47,34627,32684],{"class":221},[47,34629,34630],{"class":49,"line":16908},[47,34631,2493],{"emptyLinePlaceholder":145},[47,34633,34634],{"class":49,"line":16913},[47,34635,34636],{"class":279},"            # 设置模型为验证模式\n",[47,34638,34639],{"class":49,"line":16919},[47,34640,32929],{"class":221},[47,34642,34643],{"class":49,"line":16924},[47,34644,34645],{"class":279},"            # 模型推理结果\n",[47,34647,34648,34650,34652],{"class":49,"line":16938},[47,34649,32714],{"class":221},[47,34651,267],{"class":217},[47,34653,32719],{"class":221},[47,34655,34656],{"class":49,"line":16943},[47,34657,34658],{"class":279},"            # 获取最大下标，最大下标就是类别号\n",[47,34660,34661,34663,34665,34667,34669,34671,34673],{"class":49,"line":16948},[47,34662,32731],{"class":221},[47,34664,267],{"class":217},[47,34666,32736],{"class":221},[47,34668,32739],{"class":5309},[47,34670,267],{"class":217},[47,34672,436],{"class":85},[47,34674,228],{"class":221},[47,34676,34677],{"class":49,"line":16962},[47,34678,34679],{"class":279},"            # 取出张量中的数值\n",[47,34681,34682,34685,34687],{"class":49,"line":16974},[47,34683,34684],{"class":221},"            result",[47,34686,267],{"class":217},[47,34688,34689],{"class":221},"pre_lab.item()\n",[47,34691,34692,34695,34697],{"class":49,"line":16979},[47,34693,34694],{"class":221},"            label",[47,34696,267],{"class":217},[47,34698,34699],{"class":221},"b_y.item()\n",[47,34701,34702,34705,34707,34710,34713,34716,34718,34721],{"class":49,"line":16992},[47,34703,34704],{"class":85},"            print",[47,34706,222],{"class":221},[47,34708,34709],{"class":81},"\"预测值：\"",[47,34711,34712],{"class":221},",classes[result],",[47,34714,34715],{"class":81},"\"------\"",[47,34717,597],{"class":221},[47,34719,34720],{"class":81},"\"真实值：\"",[47,34722,34723],{"class":221},",classes[label])\n",[19,34725,34726],{},"（2）AlexNet",[171,34728,34729],{},[109,34730,34731],{},"神经网络构建",[38,34733,34735],{"className":30432,"code":34734,"language":30434,"meta":43,"style":43},"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",[26,34736,34737,34743,34753,34763,34775,34779,34796,34804,34819,34831,34873,34900,34943,34969,35013,35056,35099,35126,35130,35140,35145,35173,35192,35211,35215,35220,35228,35243,35253,35267,35277,35292,35307,35322,35333,35337,35342,35352,35367,35372,35386,35401,35413,35418,35429,35434,35440,35445,35457,35477,35482,35491],{"__ignoreMap":43},[47,34738,34739,34741],{"class":49,"line":50},[47,34740,30446],{"class":217},[47,34742,30449],{"class":221},[47,34744,34745,34747,34749,34751],{"class":49,"line":92},[47,34746,30791],{"class":217},[47,34748,30794],{"class":221},[47,34750,30446],{"class":217},[47,34752,30799],{"class":221},[47,34754,34755,34757,34759,34761],{"class":49,"line":1273},[47,34756,30791],{"class":217},[47,34758,30811],{"class":221},[47,34760,30446],{"class":217},[47,34762,30816],{"class":221},[47,34764,34765,34767,34770,34772],{"class":49,"line":1288},[47,34766,30446],{"class":217},[47,34768,34769],{"class":221}," torch.nn.functional ",[47,34771,31437],{"class":217},[47,34773,34774],{"class":221}," F\n",[47,34776,34777],{"class":49,"line":1294},[47,34778,2493],{"emptyLinePlaceholder":145},[47,34780,34781,34783,34786,34788,34790,34792,34794],{"class":49,"line":1308},[47,34782,14787],{"class":217},[47,34784,34785],{"class":53}," AlexNet",[47,34787,222],{"class":221},[47,34789,30832],{"class":53},[47,34791,777],{"class":221},[47,34793,30837],{"class":53},[47,34795,30840],{"class":221},[47,34797,34798,34800,34802],{"class":49,"line":1314},[47,34799,30855],{"class":217},[47,34801,30858],{"class":85},[47,34803,30861],{"class":221},[47,34805,34806,34808,34811,34813,34815,34817],{"class":49,"line":1405},[47,34807,30871],{"class":85},[47,34809,34810],{"class":221},"(AlexNet,",[47,34812,30877],{"class":85},[47,34814,30880],{"class":221},[47,34816,30883],{"class":85},[47,34818,2069],{"class":221},[47,34820,34821,34823,34826,34828],{"class":49,"line":1411},[47,34822,30899],{"class":85},[47,34824,34825],{"class":221},".ReLu",[47,34827,267],{"class":217},[47,34829,34830],{"class":221},"nn.ReLU()\n",[47,34832,34833,34835,34837,34839,34841,34843,34845,34847,34849,34851,34853,34855,34857,34859,34861,34863,34865,34867,34869,34871],{"class":49,"line":1423},[47,34834,30899],{"class":85},[47,34836,30902],{"class":221},[47,34838,267],{"class":217},[47,34840,30907],{"class":221},[47,34842,30910],{"class":5309},[47,34844,267],{"class":217},[47,34846,436],{"class":85},[47,34848,597],{"class":221},[47,34850,30919],{"class":5309},[47,34852,267],{"class":217},[47,34854,429],{"class":85},[47,34856,597],{"class":221},[47,34858,30928],{"class":5309},[47,34860,267],{"class":217},[47,34862,691],{"class":85},[47,34864,597],{"class":221},[47,34866,30983],{"class":5309},[47,34868,267],{"class":217},[47,34870,512],{"class":85},[47,34872,228],{"class":221},[47,34874,34875,34877,34879,34881,34884,34886,34888,34890,34892,34894,34896,34898],{"class":49,"line":1706},[47,34876,30899],{"class":85},[47,34878,30967],{"class":221},[47,34880,267],{"class":217},[47,34882,34883],{"class":221},"nn.MaxPool2d(",[47,34885,30928],{"class":5309},[47,34887,267],{"class":217},[47,34889,292],{"class":85},[47,34891,597],{"class":221},[47,34893,30983],{"class":5309},[47,34895,267],{"class":217},[47,34897,298],{"class":85},[47,34899,228],{"class":221},[47,34901,34902,34904,34906,34908,34910,34912,34914,34916,34918,34920,34922,34925,34927,34929,34931,34933,34935,34937,34939,34941],{"class":49,"line":1711},[47,34903,30899],{"class":85},[47,34905,30996],{"class":221},[47,34907,267],{"class":217},[47,34909,30907],{"class":221},[47,34911,30910],{"class":5309},[47,34913,267],{"class":217},[47,34915,429],{"class":85},[47,34917,597],{"class":221},[47,34919,30919],{"class":5309},[47,34921,267],{"class":217},[47,34923,34924],{"class":85},"256",[47,34926,597],{"class":221},[47,34928,30928],{"class":5309},[47,34930,267],{"class":217},[47,34932,538],{"class":85},[47,34934,597],{"class":221},[47,34936,30937],{"class":5309},[47,34938,267],{"class":217},[47,34940,298],{"class":85},[47,34942,228],{"class":221},[47,34944,34945,34947,34949,34951,34953,34955,34957,34959,34961,34963,34965,34967],{"class":49,"line":1717},[47,34946,30899],{"class":85},[47,34948,31031],{"class":221},[47,34950,267],{"class":217},[47,34952,34883],{"class":221},[47,34954,30928],{"class":5309},[47,34956,267],{"class":217},[47,34958,292],{"class":85},[47,34960,597],{"class":221},[47,34962,30983],{"class":5309},[47,34964,267],{"class":217},[47,34966,298],{"class":85},[47,34968,228],{"class":221},[47,34970,34971,34973,34976,34978,34980,34982,34984,34986,34988,34990,34992,34995,34997,34999,35001,35003,35005,35007,35009,35011],{"class":49,"line":1722},[47,34972,30899],{"class":85},[47,34974,34975],{"class":221},".c5",[47,34977,267],{"class":217},[47,34979,30907],{"class":221},[47,34981,30910],{"class":5309},[47,34983,267],{"class":217},[47,34985,34924],{"class":85},[47,34987,597],{"class":221},[47,34989,30919],{"class":5309},[47,34991,267],{"class":217},[47,34993,34994],{"class":85},"384",[47,34996,597],{"class":221},[47,34998,30928],{"class":5309},[47,35000,267],{"class":217},[47,35002,292],{"class":85},[47,35004,597],{"class":221},[47,35006,30937],{"class":5309},[47,35008,267],{"class":217},[47,35010,436],{"class":85},[47,35012,228],{"class":221},[47,35014,35015,35017,35020,35022,35024,35026,35028,35030,35032,35034,35036,35038,35040,35042,35044,35046,35048,35050,35052,35054],{"class":49,"line":1736},[47,35016,30899],{"class":85},[47,35018,35019],{"class":221},".c6",[47,35021,267],{"class":217},[47,35023,30907],{"class":221},[47,35025,30910],{"class":5309},[47,35027,267],{"class":217},[47,35029,34994],{"class":85},[47,35031,597],{"class":221},[47,35033,30919],{"class":5309},[47,35035,267],{"class":217},[47,35037,34994],{"class":85},[47,35039,597],{"class":221},[47,35041,30928],{"class":5309},[47,35043,267],{"class":217},[47,35045,292],{"class":85},[47,35047,597],{"class":221},[47,35049,30937],{"class":5309},[47,35051,267],{"class":217},[47,35053,436],{"class":85},[47,35055,228],{"class":221},[47,35057,35058,35060,35063,35065,35067,35069,35071,35073,35075,35077,35079,35081,35083,35085,35087,35089,35091,35093,35095,35097],{"class":49,"line":1741},[47,35059,30899],{"class":85},[47,35061,35062],{"class":221},".c7",[47,35064,267],{"class":217},[47,35066,30907],{"class":221},[47,35068,30910],{"class":5309},[47,35070,267],{"class":217},[47,35072,34994],{"class":85},[47,35074,597],{"class":221},[47,35076,30919],{"class":5309},[47,35078,267],{"class":217},[47,35080,34924],{"class":85},[47,35082,597],{"class":221},[47,35084,30928],{"class":5309},[47,35086,267],{"class":217},[47,35088,292],{"class":85},[47,35090,597],{"class":221},[47,35092,30937],{"class":5309},[47,35094,267],{"class":217},[47,35096,436],{"class":85},[47,35098,228],{"class":221},[47,35100,35101,35103,35106,35108,35110,35112,35114,35116,35118,35120,35122,35124],{"class":49,"line":1747},[47,35102,30899],{"class":85},[47,35104,35105],{"class":221},".s8",[47,35107,267],{"class":217},[47,35109,34883],{"class":221},[47,35111,30928],{"class":5309},[47,35113,267],{"class":217},[47,35115,292],{"class":85},[47,35117,597],{"class":221},[47,35119,30983],{"class":5309},[47,35121,267],{"class":217},[47,35123,298],{"class":85},[47,35125,228],{"class":221},[47,35127,35128],{"class":49,"line":1768},[47,35129,31056],{"class":279},[47,35131,35132,35134,35136,35138],{"class":49,"line":1773},[47,35133,30899],{"class":85},[47,35135,31063],{"class":221},[47,35137,267],{"class":217},[47,35139,31068],{"class":221},[47,35141,35142],{"class":49,"line":1787},[47,35143,35144],{"class":279},"       # 定义全连接层\n",[47,35146,35147,35149,35152,35154,35156,35158,35160,35162,35164,35166,35168,35171],{"class":49,"line":1792},[47,35148,30899],{"class":85},[47,35150,35151],{"class":221},".f1",[47,35153,267],{"class":217},[47,35155,31085],{"class":221},[47,35157,563],{"class":85},[47,35159,674],{"class":217},[47,35161,563],{"class":85},[47,35163,674],{"class":217},[47,35165,34924],{"class":85},[47,35167,597],{"class":221},[47,35169,35170],{"class":85},"4096",[47,35172,228],{"class":221},[47,35174,35175,35177,35180,35182,35184,35186,35188,35190],{"class":49,"line":1821},[47,35176,30899],{"class":85},[47,35178,35179],{"class":221},".f2",[47,35181,267],{"class":217},[47,35183,31085],{"class":221},[47,35185,35170],{"class":85},[47,35187,597],{"class":221},[47,35189,35170],{"class":85},[47,35191,228],{"class":221},[47,35193,35194,35196,35199,35201,35203,35205,35207,35209],{"class":49,"line":1826},[47,35195,30899],{"class":85},[47,35197,35198],{"class":221},".f3",[47,35200,267],{"class":217},[47,35202,31085],{"class":221},[47,35204,35170],{"class":85},[47,35206,597],{"class":221},[47,35208,665],{"class":85},[47,35210,228],{"class":221},[47,35212,35213],{"class":49,"line":1843},[47,35214,2493],{"emptyLinePlaceholder":145},[47,35216,35217],{"class":49,"line":1848},[47,35218,35219],{"class":279},"    # 定义前向传播\n",[47,35221,35222,35224,35226],{"class":49,"line":1853},[47,35223,30855],{"class":217},[47,35225,31147],{"class":53},[47,35227,31150],{"class":221},[47,35229,35230,35232,35234,35236,35239,35241],{"class":49,"line":1858},[47,35231,31155],{"class":221},[47,35233,267],{"class":217},[47,35235,30877],{"class":85},[47,35237,35238],{"class":221},".ReLu(",[47,35240,30877],{"class":85},[47,35242,31167],{"class":221},[47,35244,35245,35247,35249,35251],{"class":49,"line":1872},[47,35246,31155],{"class":221},[47,35248,267],{"class":217},[47,35250,30877],{"class":85},[47,35252,31178],{"class":221},[47,35254,35255,35257,35259,35261,35263,35265],{"class":49,"line":1877},[47,35256,31155],{"class":221},[47,35258,267],{"class":217},[47,35260,30877],{"class":85},[47,35262,35238],{"class":221},[47,35264,30877],{"class":85},[47,35266,31193],{"class":221},[47,35268,35269,35271,35273,35275],{"class":49,"line":2670},[47,35270,31155],{"class":221},[47,35272,267],{"class":217},[47,35274,30877],{"class":85},[47,35276,31204],{"class":221},[47,35278,35279,35281,35283,35285,35287,35289],{"class":49,"line":2684},[47,35280,31155],{"class":221},[47,35282,267],{"class":217},[47,35284,30877],{"class":85},[47,35286,35238],{"class":221},[47,35288,30877],{"class":85},[47,35290,35291],{"class":221},".c5(x))\n",[47,35293,35294,35296,35298,35300,35302,35304],{"class":49,"line":2692},[47,35295,31155],{"class":221},[47,35297,267],{"class":217},[47,35299,30877],{"class":85},[47,35301,35238],{"class":221},[47,35303,30877],{"class":85},[47,35305,35306],{"class":221},".c6(x))\n",[47,35308,35309,35311,35313,35315,35317,35319],{"class":49,"line":2697},[47,35310,31155],{"class":221},[47,35312,267],{"class":217},[47,35314,30877],{"class":85},[47,35316,35238],{"class":221},[47,35318,30877],{"class":85},[47,35320,35321],{"class":221},".c7(x))\n",[47,35323,35324,35326,35328,35330],{"class":49,"line":2703},[47,35325,31155],{"class":221},[47,35327,267],{"class":217},[47,35329,30877],{"class":85},[47,35331,35332],{"class":221},".s8(x)\n",[47,35334,35335],{"class":49,"line":2709},[47,35336,2493],{"emptyLinePlaceholder":145},[47,35338,35339],{"class":49,"line":2714},[47,35340,35341],{"class":279},"        # 展平加线性全连接层\n",[47,35343,35344,35346,35348,35350],{"class":49,"line":8041},[47,35345,31155],{"class":221},[47,35347,267],{"class":217},[47,35349,30877],{"class":85},[47,35351,31215],{"class":221},[47,35353,35354,35356,35358,35360,35362,35364],{"class":49,"line":8065},[47,35355,31155],{"class":221},[47,35357,267],{"class":217},[47,35359,30877],{"class":85},[47,35361,35238],{"class":221},[47,35363,30877],{"class":85},[47,35365,35366],{"class":221},".f1(x))\n",[47,35368,35369],{"class":49,"line":8070},[47,35370,35371],{"class":279},"        # 还需要dropout对神经元随机进行失活\n",[47,35373,35374,35376,35378,35381,35384],{"class":49,"line":8076},[47,35375,31155],{"class":221},[47,35377,267],{"class":217},[47,35379,35380],{"class":221},"F.dropout(x,",[47,35382,35383],{"class":85},"0.5",[47,35385,228],{"class":221},[47,35387,35388,35390,35392,35394,35396,35398],{"class":49,"line":8103},[47,35389,31155],{"class":221},[47,35391,267],{"class":217},[47,35393,30877],{"class":85},[47,35395,35238],{"class":221},[47,35397,30877],{"class":85},[47,35399,35400],{"class":221},".f2(x))\n",[47,35402,35403,35405,35407,35409,35411],{"class":49,"line":8108},[47,35404,31155],{"class":221},[47,35406,267],{"class":217},[47,35408,35380],{"class":221},[47,35410,35383],{"class":85},[47,35412,228],{"class":221},[47,35414,35415],{"class":49,"line":8114},[47,35416,35417],{"class":279},"        # 直接输出\n",[47,35419,35420,35422,35424,35426],{"class":49,"line":8126},[47,35421,31155],{"class":221},[47,35423,267],{"class":217},[47,35425,30877],{"class":85},[47,35427,35428],{"class":221},".f3(x)\n",[47,35430,35431],{"class":49,"line":8138},[47,35432,35433],{"class":279},"        # 前向传播输出\n",[47,35435,35436,35438],{"class":49,"line":8150},[47,35437,14845],{"class":217},[47,35439,31263],{"class":221},[47,35441,35442],{"class":49,"line":9809},[47,35443,35444],{"class":279},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[47,35446,35447,35449,35451,35453,35455],{"class":49,"line":9834},[47,35448,1625],{"class":217},[47,35450,31274],{"class":85},[47,35452,3042],{"class":217},[47,35454,31279],{"class":81},[47,35456,3832],{"class":221},[47,35458,35459,35461,35463,35465,35467,35469,35471,35473,35475],{"class":49,"line":9857},[47,35460,31291],{"class":221},[47,35462,267],{"class":217},[47,35464,30505],{"class":221},[47,35466,31298],{"class":81},[47,35468,1798],{"class":217},[47,35470,31303],{"class":221},[47,35472,1795],{"class":217},[47,35474,30530],{"class":81},[47,35476,228],{"class":221},[47,35478,35479],{"class":49,"line":9881},[47,35480,35481],{"class":279},"    # 模型实例化，然后将实例化的模型放到设备中\n",[47,35483,35484,35486,35488],{"class":49,"line":9886},[47,35485,31343],{"class":221},[47,35487,267],{"class":217},[47,35489,35490],{"class":221},"AlexNet().to(device)\n",[47,35492,35493,35495,35497,35499,35501,35504,35506,35508],{"class":49,"line":9891},[47,35494,31353],{"class":85},[47,35496,31356],{"class":221},[47,35498,436],{"class":85},[47,35500,597],{"class":221},[47,35502,35503],{"class":85},"227",[47,35505,597],{"class":221},[47,35507,35503],{"class":85},[47,35509,31369],{"class":221},[171,35511,35512],{"start":92},[109,35513,31382],{},[38,35515,35517],{"className":30432,"code":35516,"language":30434,"meta":43,"style":43},"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",[26,35518,35519,35525,35531,35541,35547,35557,35567,35577,35587,35597,35601,35612,35622,35626,35630,35634,35642,35654,35664,35680,35690,35722,35736,35746,35756,35760,35770,35784,35794,35804,35814,35820,35824,35828,35832,35836,35840,35848,35868,35872,35876,35880,35884,35888,35904,35908,35912,35920,35924,35928,35936,35940,35944,35948,35956,35960,35964,35968,35972,35980,35984,35992,35996,36004,36008,36016,36020,36028,36032,36036,36044,36048,36052,36056,36068,36092,36106,36110,36114,36118,36126,36130,36138,36142,36150,36154,36162,36166,36174,36178,36186,36190,36202,36206,36214,36218,36226,36230,36234,36238,36242,36250,36254,36270,36274,36282,36286,36290,36294,36298,36302,36306,36310,36326,36330,36342,36346,36358,36362,36374,36378,36386,36390,36398,36402,36406,36411,36417,36421,36430,36434,36451,36455,36464,36468,36486,36499,36504,36517,36521,36525,36533,36537,36541,36549,36553,36561,36565,36573,36577,36581,36623,36665,36669,36673,36689,36693,36709,36713,36717,36725,36729,36733,36745,36783,36788,36793,36802,36806,36820,36830,36836,36842,36848,36854,36858,36862,36868,36872,36876,36884,36888,36906,36910,36914,36918,36934,36938,36942,36946,36950,36954,36974,36994,36998,37002,37006,37014,37022,37026,37042,37062,37082,37086,37090,37098,37106,37110,37114,37118,37130,37134,37144,37152,37169],{"__ignoreMap":43},[47,35520,35521,35523],{"class":49,"line":50},[47,35522,30446],{"class":217},[47,35524,31876],{"class":221},[47,35526,35527,35529],{"class":49,"line":92},[47,35528,30446],{"class":217},[47,35530,31883],{"class":221},[47,35532,35533,35535,35537,35539],{"class":49,"line":1273},[47,35534,30446],{"class":217},[47,35536,31894],{"class":221},[47,35538,31437],{"class":217},[47,35540,31899],{"class":221},[47,35542,35543,35545],{"class":49,"line":1288},[47,35544,30446],{"class":217},[47,35546,30449],{"class":221},[47,35548,35549,35551,35553,35555],{"class":49,"line":1294},[47,35550,30791],{"class":217},[47,35552,31469],{"class":221},[47,35554,30446],{"class":217},[47,35556,31916],{"class":221},[47,35558,35559,35561,35563,35565],{"class":49,"line":1308},[47,35560,30791],{"class":217},[47,35562,31422],{"class":221},[47,35564,30446],{"class":217},[47,35566,31427],{"class":221},[47,35568,35569,35571,35573,35575],{"class":49,"line":1314},[47,35570,30791],{"class":217},[47,35572,31452],{"class":221},[47,35574,30446],{"class":217},[47,35576,31457],{"class":221},[47,35578,35579,35581,35583,35585],{"class":49,"line":1405},[47,35580,30446],{"class":217},[47,35582,31469],{"class":221},[47,35584,31437],{"class":217},[47,35586,31474],{"class":221},[47,35588,35589,35591,35593,35595],{"class":49,"line":1411},[47,35590,30446],{"class":217},[47,35592,31486],{"class":221},[47,35594,31437],{"class":217},[47,35596,31491],{"class":221},[47,35598,35599],{"class":49,"line":1423},[47,35600,31961],{"class":279},[47,35602,35603,35605,35607,35609],{"class":49,"line":1706},[47,35604,30791],{"class":217},[47,35606,31968],{"class":221},[47,35608,30446],{"class":217},[47,35610,35611],{"class":221}," AlexNet\n",[47,35613,35614,35616,35618,35620],{"class":49,"line":1711},[47,35615,30791],{"class":217},[47,35617,30794],{"class":221},[47,35619,30446],{"class":217},[47,35621,30799],{"class":221},[47,35623,35624],{"class":49,"line":1717},[47,35625,2493],{"emptyLinePlaceholder":145},[47,35627,35628],{"class":49,"line":1722},[47,35629,2493],{"emptyLinePlaceholder":145},[47,35631,35632],{"class":49,"line":1736},[47,35633,31996],{"class":279},[47,35635,35636,35638,35640],{"class":49,"line":1741},[47,35637,32001],{"class":217},[47,35639,32004],{"class":53},[47,35641,32007],{"class":221},[47,35643,35644,35646,35648,35650,35652],{"class":49,"line":1747},[47,35645,32012],{"class":221},[47,35647,267],{"class":217},[47,35649,31509],{"class":221},[47,35651,31517],{"class":81},[47,35653,31520],{"class":221},[47,35655,35656,35658,35660,35662],{"class":49,"line":1768},[47,35657,32025],{"class":5309},[47,35659,267],{"class":217},[47,35661,31530],{"class":85},[47,35663,31520],{"class":221},[47,35665,35666,35668,35670,35672,35674,35676,35678],{"class":49,"line":1773},[47,35667,32036],{"class":5309},[47,35669,267],{"class":217},[47,35671,31547],{"class":221},[47,35673,31550],{"class":5309},[47,35675,267],{"class":217},[47,35677,35503],{"class":85},[47,35679,31558],{"class":221},[47,35681,35682,35684,35686,35688],{"class":49,"line":1787},[47,35683,32053],{"class":5309},[47,35685,267],{"class":217},[47,35687,31530],{"class":85},[47,35689,228],{"class":221},[47,35691,35692,35694,35696,35698,35700,35702,35704,35706,35708,35710,35712,35714,35716,35718,35720],{"class":49,"line":1792},[47,35693,32064],{"class":221},[47,35695,267],{"class":217},[47,35697,32069],{"class":221},[47,35699,32072],{"class":85},[47,35701,222],{"class":221},[47,35703,32077],{"class":85},[47,35705,674],{"class":217},[47,35707,7451],{"class":85},[47,35709,32084],{"class":221},[47,35711,32072],{"class":85},[47,35713,222],{"class":221},[47,35715,32091],{"class":85},[47,35717,674],{"class":217},[47,35719,7451],{"class":85},[47,35721,32098],{"class":221},[47,35723,35724,35726,35728,35730,35732,35734],{"class":49,"line":1821},[47,35725,32103],{"class":221},[47,35727,267],{"class":217},[47,35729,32108],{"class":221},[47,35731,31591],{"class":5309},[47,35733,267],{"class":217},[47,35735,31596],{"class":221},[47,35737,35738,35740,35742,35744],{"class":49,"line":1826},[47,35739,32119],{"class":5309},[47,35741,267],{"class":217},[47,35743,32124],{"class":85},[47,35745,31520],{"class":221},[47,35747,35748,35750,35752,35754],{"class":49,"line":1843},[47,35749,32131],{"class":5309},[47,35751,267],{"class":217},[47,35753,31530],{"class":85},[47,35755,31520],{"class":221},[47,35757,35758],{"class":49,"line":1848},[47,35759,32142],{"class":279},[47,35761,35762,35764,35766,35768],{"class":49,"line":1853},[47,35763,32147],{"class":5309},[47,35765,267],{"class":217},[47,35767,614],{"class":85},[47,35769,228],{"class":221},[47,35771,35772,35774,35776,35778,35780,35782],{"class":49,"line":1858},[47,35773,32158],{"class":221},[47,35775,267],{"class":217},[47,35777,31588],{"class":221},[47,35779,31591],{"class":5309},[47,35781,267],{"class":217},[47,35783,32169],{"class":221},[47,35785,35786,35788,35790,35792],{"class":49,"line":1872},[47,35787,32174],{"class":5309},[47,35789,267],{"class":217},[47,35791,32124],{"class":85},[47,35793,31520],{"class":221},[47,35795,35796,35798,35800,35802],{"class":49,"line":1877},[47,35797,32185],{"class":5309},[47,35799,267],{"class":217},[47,35801,31530],{"class":85},[47,35803,31520],{"class":221},[47,35805,35806,35808,35810,35812],{"class":49,"line":2670},[47,35807,32196],{"class":5309},[47,35809,267],{"class":217},[47,35811,614],{"class":85},[47,35813,228],{"class":221},[47,35815,35816,35818],{"class":49,"line":2684},[47,35817,4183],{"class":217},[47,35819,32209],{"class":221},[47,35821,35822],{"class":49,"line":2692},[47,35823,2493],{"emptyLinePlaceholder":145},[47,35825,35826],{"class":49,"line":2697},[47,35827,32218],{"class":279},[47,35829,35830],{"class":49,"line":2703},[47,35831,32223],{"class":279},[47,35833,35834],{"class":49,"line":2709},[47,35835,2493],{"emptyLinePlaceholder":145},[47,35837,35838],{"class":49,"line":2714},[47,35839,32232],{"class":279},[47,35841,35842,35844,35846],{"class":49,"line":8041},[47,35843,32001],{"class":217},[47,35845,32239],{"class":53},[47,35847,32242],{"class":221},[47,35849,35850,35852,35854,35856,35858,35860,35862,35864,35866],{"class":49,"line":8065},[47,35851,31291],{"class":221},[47,35853,267],{"class":217},[47,35855,30505],{"class":221},[47,35857,31298],{"class":81},[47,35859,1798],{"class":217},[47,35861,31303],{"class":221},[47,35863,1795],{"class":217},[47,35865,32261],{"class":81},[47,35867,228],{"class":221},[47,35869,35870],{"class":49,"line":8070},[47,35871,2493],{"emptyLinePlaceholder":145},[47,35873,35874],{"class":49,"line":8076},[47,35875,2493],{"emptyLinePlaceholder":145},[47,35877,35878],{"class":49,"line":8103},[47,35879,32276],{"class":279},[47,35881,35882],{"class":49,"line":8108},[47,35883,32281],{"class":279},[47,35885,35886],{"class":49,"line":8114},[47,35887,32286],{"class":279},[47,35889,35890,35892,35894,35896,35898,35900,35902],{"class":49,"line":8126},[47,35891,32291],{"class":221},[47,35893,267],{"class":217},[47,35895,32296],{"class":221},[47,35897,32299],{"class":5309},[47,35899,267],{"class":217},[47,35901,32304],{"class":85},[47,35903,228],{"class":221},[47,35905,35906],{"class":49,"line":8138},[47,35907,2493],{"emptyLinePlaceholder":145},[47,35909,35910],{"class":49,"line":8150},[47,35911,32315],{"class":279},[47,35913,35914,35916,35918],{"class":49,"line":9809},[47,35915,32320],{"class":221},[47,35917,267],{"class":217},[47,35919,32325],{"class":221},[47,35921,35922],{"class":49,"line":9834},[47,35923,2493],{"emptyLinePlaceholder":145},[47,35925,35926],{"class":49,"line":9857},[47,35927,32334],{"class":279},[47,35929,35930,35932,35934],{"class":49,"line":9881},[47,35931,31343],{"class":221},[47,35933,267],{"class":217},[47,35935,32343],{"class":221},[47,35937,35938],{"class":49,"line":9886},[47,35939,32348],{"class":279},[47,35941,35942],{"class":49,"line":9891},[47,35943,32353],{"class":279},[47,35945,35946],{"class":49,"line":9896},[47,35947,32358],{"class":279},[47,35949,35950,35952,35954],{"class":49,"line":9905},[47,35951,32363],{"class":221},[47,35953,267],{"class":217},[47,35955,32368],{"class":221},[47,35957,35958],{"class":49,"line":9910},[47,35959,2493],{"emptyLinePlaceholder":145},[47,35961,35962],{"class":49,"line":9916},[47,35963,2493],{"emptyLinePlaceholder":145},[47,35965,35966],{"class":49,"line":9937},[47,35967,32381],{"class":279},[47,35969,35970],{"class":49,"line":9943},[47,35971,32386],{"class":279},[47,35973,35974,35976,35978],{"class":49,"line":9957},[47,35975,32391],{"class":221},[47,35977,267],{"class":217},[47,35979,32396],{"class":85},[47,35981,35982],{"class":49,"line":9963},[47,35983,32401],{"class":279},[47,35985,35986,35988,35990],{"class":49,"line":9990},[47,35987,32406],{"class":221},[47,35989,267],{"class":217},[47,35991,32411],{"class":221},[47,35993,35994],{"class":49,"line":9999},[47,35995,32416],{"class":279},[47,35997,35998,36000,36002],{"class":49,"line":10005},[47,35999,32421],{"class":221},[47,36001,267],{"class":217},[47,36003,32411],{"class":221},[47,36005,36006],{"class":49,"line":10013},[47,36007,32430],{"class":279},[47,36009,36010,36012,36014],{"class":49,"line":10018},[47,36011,32435],{"class":221},[47,36013,267],{"class":217},[47,36015,32411],{"class":221},[47,36017,36018],{"class":49,"line":16697},[47,36019,32444],{"class":279},[47,36021,36022,36024,36026],{"class":49,"line":16703},[47,36023,32449],{"class":221},[47,36025,267],{"class":217},[47,36027,32411],{"class":221},[47,36029,36030],{"class":49,"line":16726},[47,36031,2493],{"emptyLinePlaceholder":145},[47,36033,36034],{"class":49,"line":16732},[47,36035,32462],{"class":279},[47,36037,36038,36040,36042],{"class":49,"line":16755},[47,36039,32467],{"class":221},[47,36041,267],{"class":217},[47,36043,32472],{"class":221},[47,36045,36046],{"class":49,"line":16769},[47,36047,2493],{"emptyLinePlaceholder":145},[47,36049,36050],{"class":49,"line":16789},[47,36051,2493],{"emptyLinePlaceholder":145},[47,36053,36054],{"class":49,"line":16795},[47,36055,32485],{"class":279},[47,36057,36058,36060,36062,36064,36066],{"class":49,"line":16806},[47,36059,3294],{"class":217},[47,36061,32492],{"class":221},[47,36063,26097],{"class":217},[47,36065,32497],{"class":85},[47,36067,32500],{"class":221},[47,36069,36070,36072,36074,36076,36078,36080,36082,36084,36086,36088,36090],{"class":49,"line":16829},[47,36071,32505],{"class":85},[47,36073,222],{"class":221},[47,36075,32510],{"class":81},[47,36077,32513],{"class":85},[47,36079,803],{"class":81},[47,36081,32513],{"class":85},[47,36083,470],{"class":81},[47,36085,32522],{"class":221},[47,36087,751],{"class":217},[47,36089,436],{"class":85},[47,36091,30551],{"class":221},[47,36093,36094,36096,36098,36100,36102,36104],{"class":49,"line":16851},[47,36095,32505],{"class":85},[47,36097,222],{"class":221},[47,36099,32537],{"class":81},[47,36101,674],{"class":217},[47,36103,665],{"class":85},[47,36105,228],{"class":221},[47,36107,36108],{"class":49,"line":16856},[47,36109,2493],{"emptyLinePlaceholder":145},[47,36111,36112],{"class":49,"line":16862},[47,36113,32552],{"class":279},[47,36115,36116],{"class":49,"line":16876},[47,36117,32557],{"class":279},[47,36119,36120,36122,36124],{"class":49,"line":16889},[47,36121,32562],{"class":221},[47,36123,267],{"class":217},[47,36125,32396],{"class":85},[47,36127,36128],{"class":49,"line":16894},[47,36129,32571],{"class":279},[47,36131,36132,36134,36136],{"class":49,"line":16908},[47,36133,32576],{"class":221},[47,36135,267],{"class":217},[47,36137,3178],{"class":85},[47,36139,36140],{"class":49,"line":16913},[47,36141,32585],{"class":279},[47,36143,36144,36146,36148],{"class":49,"line":16919},[47,36145,32590],{"class":221},[47,36147,267],{"class":217},[47,36149,32396],{"class":85},[47,36151,36152],{"class":49,"line":16924},[47,36153,32599],{"class":279},[47,36155,36156,36158,36160],{"class":49,"line":16938},[47,36157,32604],{"class":221},[47,36159,267],{"class":217},[47,36161,3178],{"class":85},[47,36163,36164],{"class":49,"line":16943},[47,36165,32613],{"class":279},[47,36167,36168,36170,36172],{"class":49,"line":16948},[47,36169,32618],{"class":221},[47,36171,267],{"class":217},[47,36173,3178],{"class":85},[47,36175,36176],{"class":49,"line":16962},[47,36177,32627],{"class":279},[47,36179,36180,36182,36184],{"class":49,"line":16974},[47,36181,32632],{"class":221},[47,36183,267],{"class":217},[47,36185,3178],{"class":85},[47,36187,36188],{"class":49,"line":16979},[47,36189,32641],{"class":279},[47,36191,36192,36194,36196,36198,36200],{"class":49,"line":16992},[47,36193,3496],{"class":217},[47,36195,31655],{"class":221},[47,36197,26097],{"class":217},[47,36199,31660],{"class":85},[47,36201,32654],{"class":221},[47,36203,36204],{"class":49,"line":16997},[47,36205,32659],{"class":279},[47,36207,36208,36210,36212],{"class":49,"line":17002},[47,36209,32664],{"class":221},[47,36211,267],{"class":217},[47,36213,32669],{"class":221},[47,36215,36216],{"class":49,"line":17007},[47,36217,32674],{"class":279},[47,36219,36220,36222,36224],{"class":49,"line":17020},[47,36221,32679],{"class":221},[47,36223,267],{"class":217},[47,36225,32684],{"class":221},[47,36227,36228],{"class":49,"line":17025},[47,36229,32690],{"class":279},[47,36231,36232],{"class":49,"line":32687},[47,36233,32696],{"class":221},[47,36235,36236],{"class":49,"line":32693},[47,36237,32702],{"class":279},[47,36239,36240],{"class":49,"line":32699},[47,36241,32708],{"class":279},[47,36243,36244,36246,36248],{"class":49,"line":32705},[47,36245,32714],{"class":221},[47,36247,267],{"class":217},[47,36249,32719],{"class":221},[47,36251,36252],{"class":49,"line":32711},[47,36253,32725],{"class":279},[47,36255,36256,36258,36260,36262,36264,36266,36268],{"class":49,"line":32722},[47,36257,32731],{"class":221},[47,36259,267],{"class":217},[47,36261,32736],{"class":221},[47,36263,32739],{"class":5309},[47,36265,267],{"class":217},[47,36267,436],{"class":85},[47,36269,228],{"class":221},[47,36271,36272],{"class":49,"line":32728},[47,36273,32751],{"class":279},[47,36275,36276,36278,36280],{"class":49,"line":32748},[47,36277,32757],{"class":221},[47,36279,267],{"class":217},[47,36281,32762],{"class":221},[47,36283,36284],{"class":49,"line":32754},[47,36285,32768],{"class":279},[47,36287,36288],{"class":49,"line":32765},[47,36289,32774],{"class":221},[47,36291,36292],{"class":49,"line":32771},[47,36293,32780],{"class":279},[47,36295,36296],{"class":49,"line":32777},[47,36297,32786],{"class":221},[47,36299,36300],{"class":49,"line":32783},[47,36301,32792],{"class":279},[47,36303,36304],{"class":49,"line":32789},[47,36305,32798],{"class":221},[47,36307,36308],{"class":49,"line":32795},[47,36309,32804],{"class":279},[47,36311,36312,36314,36316,36318,36320,36322,36324],{"class":49,"line":32801},[47,36313,32810],{"class":221},[47,36315,9570],{"class":217},[47,36317,32815],{"class":221},[47,36319,674],{"class":217},[47,36321,32820],{"class":221},[47,36323,411],{"class":85},[47,36325,228],{"class":221},[47,36327,36328],{"class":49,"line":32807},[47,36329,32830],{"class":279},[47,36331,36332,36334,36336,36338,36340],{"class":49,"line":32827},[47,36333,32836],{"class":221},[47,36335,9570],{"class":217},[47,36337,32841],{"class":221},[47,36339,3042],{"class":217},[47,36341,32846],{"class":221},[47,36343,36344],{"class":49,"line":32833},[47,36345,32852],{"class":279},[47,36347,36348,36350,36352,36354,36356],{"class":49,"line":32849},[47,36349,32858],{"class":221},[47,36351,9570],{"class":217},[47,36353,32820],{"class":221},[47,36355,411],{"class":85},[47,36357,228],{"class":221},[47,36359,36360],{"class":49,"line":32855},[47,36361,32872],{"class":279},[47,36363,36364,36366,36368,36370,36372],{"class":49,"line":32869},[47,36365,3496],{"class":217},[47,36367,32880],{"class":221},[47,36369,26097],{"class":217},[47,36371,31660],{"class":85},[47,36373,32887],{"class":221},[47,36375,36376],{"class":49,"line":32875},[47,36377,32893],{"class":279},[47,36379,36380,36382,36384],{"class":49,"line":32890},[47,36381,32664],{"class":221},[47,36383,267],{"class":217},[47,36385,32669],{"class":221},[47,36387,36388],{"class":49,"line":32896},[47,36389,32908],{"class":279},[47,36391,36392,36394,36396],{"class":49,"line":32905},[47,36393,32679],{"class":221},[47,36395,267],{"class":217},[47,36397,32684],{"class":221},[47,36399,36400],{"class":49,"line":32911},[47,36401,32923],{"class":279},[47,36403,36404],{"class":49,"line":32920},[47,36405,32929],{"class":221},[47,36407,36408],{"class":49,"line":32926},[47,36409,36410],{"class":279},"            # 验证时不计算梯度以节省内存\u002F计算\n",[47,36412,36413,36415],{"class":49,"line":32932},[47,36414,32935],{"class":217},[47,36416,32938],{"class":221},[47,36418,36419],{"class":49,"line":32941},[47,36420,32944],{"class":279},[47,36422,36423,36426,36428],{"class":49,"line":32947},[47,36424,36425],{"class":221},"                output",[47,36427,267],{"class":217},[47,36429,32719],{"class":221},[47,36431,36432],{"class":49,"line":32958},[47,36433,32961],{"class":279},[47,36435,36436,36439,36441,36443,36445,36447,36449],{"class":49,"line":32964},[47,36437,36438],{"class":221},"                pre_lab",[47,36440,267],{"class":217},[47,36442,32736],{"class":221},[47,36444,32739],{"class":5309},[47,36446,267],{"class":217},[47,36448,436],{"class":85},[47,36450,228],{"class":221},[47,36452,36453],{"class":49,"line":32983},[47,36454,32986],{"class":279},[47,36456,36457,36460,36462],{"class":49,"line":32989},[47,36458,36459],{"class":221},"                val_batch_loss",[47,36461,267],{"class":217},[47,36463,32762],{"class":221},[47,36465,36466],{"class":49,"line":33000},[47,36467,33003],{"class":279},[47,36469,36470,36473,36475,36478,36480,36482,36484],{"class":49,"line":33006},[47,36471,36472],{"class":221},"                val_loss",[47,36474,9570],{"class":217},[47,36476,36477],{"class":221},"val_batch_loss.item()",[47,36479,674],{"class":217},[47,36481,32820],{"class":221},[47,36483,411],{"class":85},[47,36485,228],{"class":221},[47,36487,36488,36491,36493,36495,36497],{"class":49,"line":33026},[47,36489,36490],{"class":221},"                val_corrects",[47,36492,9570],{"class":217},[47,36494,32841],{"class":221},[47,36496,3042],{"class":217},[47,36498,32846],{"class":221},[47,36500,36501],{"class":49,"line":33042},[47,36502,36503],{"class":279},"            # 当前用于验证的样本数量\n",[47,36505,36506,36509,36511,36513,36515],{"class":49,"line":33048},[47,36507,36508],{"class":221},"            val_num",[47,36510,9570],{"class":217},[47,36512,32820],{"class":221},[47,36514,411],{"class":85},[47,36516,228],{"class":221},[47,36518,36519],{"class":49,"line":33062},[47,36520,33065],{"class":279},[47,36522,36523],{"class":49,"line":33068},[47,36524,33071],{"class":279},[47,36526,36527,36529,36531],{"class":49,"line":33074},[47,36528,33077],{"class":221},[47,36530,803],{"class":217},[47,36532,33082],{"class":221},[47,36534,36535],{"class":49,"line":33085},[47,36536,33088],{"class":279},[47,36538,36539],{"class":49,"line":33091},[47,36540,33094],{"class":279},[47,36542,36543,36545,36547],{"class":49,"line":33097},[47,36544,33100],{"class":221},[47,36546,803],{"class":217},[47,36548,33082],{"class":221},[47,36550,36551],{"class":49,"line":33107},[47,36552,33110],{"class":279},[47,36554,36555,36557,36559],{"class":49,"line":33113},[47,36556,33116],{"class":221},[47,36558,803],{"class":217},[47,36560,33121],{"class":221},[47,36562,36563],{"class":49,"line":33124},[47,36564,33127],{"class":279},[47,36566,36567,36569,36571],{"class":49,"line":33130},[47,36568,33133],{"class":221},[47,36570,803],{"class":217},[47,36572,33121],{"class":221},[47,36574,36575],{"class":49,"line":33140},[47,36576,2493],{"emptyLinePlaceholder":145},[47,36578,36579],{"class":49,"line":33145},[47,36580,33148],{"class":279},[47,36582,36583,36585,36587,36589,36591,36593,36595,36597,36599,36601,36603,36605,36607,36609,36611,36613,36615,36617,36619,36621],{"class":49,"line":33151},[47,36584,32505],{"class":85},[47,36586,222],{"class":221},[47,36588,3685],{"class":81},[47,36590,32513],{"class":85},[47,36592,33162],{"class":81},[47,36594,1115],{"class":85},[47,36596,33167],{"class":217},[47,36598,1165],{"class":85},[47,36600,33172],{"class":81},[47,36602,1115],{"class":85},[47,36604,33167],{"class":217},[47,36606,1165],{"class":85},[47,36608,3685],{"class":81},[47,36610,33183],{"class":221},[47,36612,751],{"class":217},[47,36614,436],{"class":85},[47,36616,33190],{"class":221},[47,36618,751],{"class":217},[47,36620,436],{"class":85},[47,36622,33197],{"class":221},[47,36624,36625,36627,36629,36631,36633,36635,36637,36639,36641,36643,36645,36647,36649,36651,36653,36655,36657,36659,36661,36663],{"class":49,"line":33200},[47,36626,32505],{"class":85},[47,36628,222],{"class":221},[47,36630,3685],{"class":81},[47,36632,32513],{"class":85},[47,36634,33211],{"class":81},[47,36636,1115],{"class":85},[47,36638,33167],{"class":217},[47,36640,1165],{"class":85},[47,36642,33220],{"class":81},[47,36644,1115],{"class":85},[47,36646,33167],{"class":217},[47,36648,1165],{"class":85},[47,36650,3685],{"class":81},[47,36652,33231],{"class":221},[47,36654,751],{"class":217},[47,36656,436],{"class":85},[47,36658,33238],{"class":221},[47,36660,751],{"class":217},[47,36662,436],{"class":85},[47,36664,33197],{"class":221},[47,36666,36667],{"class":49,"line":33247},[47,36668,2493],{"emptyLinePlaceholder":145},[47,36670,36671],{"class":49,"line":33252},[47,36672,33255],{"class":279},[47,36674,36675,36677,36679,36681,36683,36685,36687],{"class":49,"line":33258},[47,36676,2590],{"class":217},[47,36678,33263],{"class":221},[47,36680,751],{"class":217},[47,36682,436],{"class":85},[47,36684,1159],{"class":221},[47,36686,1179],{"class":217},[47,36688,33274],{"class":221},[47,36690,36691],{"class":49,"line":33277},[47,36692,33280],{"class":279},[47,36694,36695,36697,36699,36701,36703,36705,36707],{"class":49,"line":33283},[47,36696,33286],{"class":221},[47,36698,261],{"class":85},[47,36700,267],{"class":217},[47,36702,33293],{"class":221},[47,36704,751],{"class":217},[47,36706,436],{"class":85},[47,36708,33300],{"class":221},[47,36710,36711],{"class":49,"line":33303},[47,36712,33306],{"class":279},[47,36714,36715],{"class":49,"line":33309},[47,36716,33312],{"class":279},[47,36718,36719,36721,36723],{"class":49,"line":33315},[47,36720,33318],{"class":221},[47,36722,267],{"class":217},[47,36724,32368],{"class":221},[47,36726,36727],{"class":49,"line":33325},[47,36728,2493],{"emptyLinePlaceholder":145},[47,36730,36731],{"class":49,"line":33330},[47,36732,33333],{"class":279},[47,36734,36735,36737,36739,36741,36743],{"class":49,"line":33336},[47,36736,33339],{"class":221},[47,36738,267],{"class":217},[47,36740,33344],{"class":221},[47,36742,751],{"class":217},[47,36744,33349],{"class":221},[47,36746,36747,36749,36751,36753,36755,36757,36759,36761,36763,36765,36767,36769,36771,36773,36775,36777,36779,36781],{"class":49,"line":33352},[47,36748,32505],{"class":85},[47,36750,222],{"class":221},[47,36752,33359],{"class":81},[47,36754,1115],{"class":85},[47,36756,33364],{"class":217},[47,36758,1165],{"class":85},[47,36760,763],{"class":81},[47,36762,1115],{"class":85},[47,36764,33364],{"class":217},[47,36766,1165],{"class":85},[47,36768,33377],{"class":81},[47,36770,33380],{"class":221},[47,36772,33383],{"class":217},[47,36774,1126],{"class":85},[47,36776,33388],{"class":221},[47,36778,547],{"class":217},[47,36780,1126],{"class":85},[47,36782,30551],{"class":221},[47,36784,36785],{"class":49,"line":33397},[47,36786,36787],{"class":279},"    # 选择最优参数并保存\n",[47,36789,36790],{"class":49,"line":33403},[47,36791,36792],{"class":279},"    # 保存最佳模型权重字典\n",[47,36794,36795,36798,36800],{"class":49,"line":33409},[47,36796,36797],{"class":221},"    torch.save(best_model_wts,",[47,36799,33421],{"class":81},[47,36801,228],{"class":221},[47,36803,36804],{"class":49,"line":33415},[47,36805,33441],{"class":279},[47,36807,36808,36810,36812,36814,36816,36818],{"class":49,"line":33426},[47,36809,33447],{"class":221},[47,36811,267],{"class":217},[47,36813,33452],{"class":221},[47,36815,33455],{"class":5309},[47,36817,267],{"class":217},[47,36819,1640],{"class":221},[47,36821,36822,36824,36826,36828],{"class":49,"line":33432},[47,36823,33465],{"class":81},[47,36825,1078],{"class":221},[47,36827,33470],{"class":85},[47,36829,33473],{"class":221},[47,36831,36832,36834],{"class":49,"line":33438},[47,36833,33479],{"class":81},[47,36835,33482],{"class":221},[47,36837,36838,36840],{"class":49,"line":33444},[47,36839,33488],{"class":81},[47,36841,33491],{"class":221},[47,36843,36844,36846],{"class":49,"line":33462},[47,36845,33497],{"class":81},[47,36847,33500],{"class":221},[47,36849,36850,36852],{"class":49,"line":33476},[47,36851,33506],{"class":81},[47,36853,33509],{"class":221},[47,36855,36856],{"class":49,"line":33485},[47,36857,33515],{"class":221},[47,36859,36860],{"class":49,"line":33494},[47,36861,33521],{"class":279},[47,36863,36864,36866],{"class":49,"line":33503},[47,36865,4183],{"class":217},[47,36867,33529],{"class":221},[47,36869,36870],{"class":49,"line":33512},[47,36871,2493],{"emptyLinePlaceholder":145},[47,36873,36874],{"class":49,"line":33518},[47,36875,33540],{"class":279},[47,36877,36878,36880,36882],{"class":49,"line":33524},[47,36879,32001],{"class":217},[47,36881,33548],{"class":53},[47,36883,33551],{"class":221},[47,36885,36886],{"class":49,"line":33532},[47,36887,33557],{"class":279},[47,36889,36890,36892,36894,36896,36898,36900,36902,36904],{"class":49,"line":33537},[47,36891,33563],{"class":221},[47,36893,31747],{"class":5309},[47,36895,267],{"class":217},[47,36897,222],{"class":221},[47,36899,717],{"class":85},[47,36901,597],{"class":221},[47,36903,512],{"class":85},[47,36905,30551],{"class":221},[47,36907,36908],{"class":49,"line":33543},[47,36909,33583],{"class":279},[47,36911,36912],{"class":49,"line":33554},[47,36913,33589],{"class":279},[47,36915,36916],{"class":49,"line":33560},[47,36917,33595],{"class":279},[47,36919,36920,36922,36924,36926,36928,36930,36932],{"class":49,"line":33580},[47,36921,31781],{"class":221},[47,36923,436],{"class":85},[47,36925,597],{"class":221},[47,36927,298],{"class":85},[47,36929,597],{"class":221},[47,36931,436],{"class":85},[47,36933,228],{"class":221},[47,36935,36936],{"class":49,"line":33586},[47,36937,33618],{"class":279},[47,36939,36940],{"class":49,"line":33592},[47,36941,33624],{"class":279},[47,36943,36944],{"class":49,"line":33598},[47,36945,33630],{"class":279},[47,36947,36948],{"class":49,"line":33615},[47,36949,33636],{"class":279},[47,36951,36952],{"class":49,"line":33621},[47,36953,33642],{"class":279},[47,36955,36956,36958,36960,36962,36964,36966,36968,36970,36972],{"class":49,"line":33627},[47,36957,33648],{"class":221},[47,36959,33651],{"class":81},[47,36961,33654],{"class":221},[47,36963,33657],{"class":81},[47,36965,597],{"class":221},[47,36967,33662],{"class":5309},[47,36969,267],{"class":217},[47,36971,33667],{"class":81},[47,36973,228],{"class":221},[47,36975,36976,36978,36980,36982,36984,36986,36988,36990,36992],{"class":49,"line":33633},[47,36977,33648],{"class":221},[47,36979,33651],{"class":81},[47,36981,33679],{"class":221},[47,36983,33682],{"class":81},[47,36985,597],{"class":221},[47,36987,33662],{"class":5309},[47,36989,267],{"class":217},[47,36991,33691],{"class":81},[47,36993,228],{"class":221},[47,36995,36996],{"class":49,"line":33639},[47,36997,33699],{"class":279},[47,36999,37000],{"class":49,"line":33645},[47,37001,33705],{"class":221},[47,37003,37004],{"class":49,"line":33672},[47,37005,33711],{"class":279},[47,37007,37008,37010,37012],{"class":49,"line":33696},[47,37009,33717],{"class":221},[47,37011,33720],{"class":81},[47,37013,228],{"class":221},[47,37015,37016,37018,37020],{"class":49,"line":33702},[47,37017,33728],{"class":221},[47,37019,33731],{"class":81},[47,37021,228],{"class":221},[47,37023,37024],{"class":49,"line":33708},[47,37025,33739],{"class":279},[47,37027,37028,37030,37032,37034,37036,37038,37040],{"class":49,"line":33714},[47,37029,31781],{"class":221},[47,37031,436],{"class":85},[47,37033,597],{"class":221},[47,37035,298],{"class":85},[47,37037,597],{"class":221},[47,37039,298],{"class":85},[47,37041,228],{"class":221},[47,37043,37044,37046,37048,37050,37052,37054,37056,37058,37060],{"class":49,"line":33725},[47,37045,33648],{"class":221},[47,37047,33651],{"class":81},[47,37049,33766],{"class":221},[47,37051,33657],{"class":81},[47,37053,597],{"class":221},[47,37055,33662],{"class":5309},[47,37057,267],{"class":217},[47,37059,33777],{"class":81},[47,37061,228],{"class":221},[47,37063,37064,37066,37068,37070,37072,37074,37076,37078,37080],{"class":49,"line":33736},[47,37065,33648],{"class":221},[47,37067,33651],{"class":81},[47,37069,33789],{"class":221},[47,37071,33682],{"class":81},[47,37073,597],{"class":221},[47,37075,33662],{"class":5309},[47,37077,267],{"class":217},[47,37079,33800],{"class":81},[47,37081,228],{"class":221},[47,37083,37084],{"class":49,"line":33742},[47,37085,33808],{"class":279},[47,37087,37088],{"class":49,"line":33759},[47,37089,33705],{"class":221},[47,37091,37092,37094,37096],{"class":49,"line":33782},[47,37093,33717],{"class":221},[47,37095,33651],{"class":81},[47,37097,228],{"class":221},[47,37099,37100,37102,37104],{"class":49,"line":33805},[47,37101,33728],{"class":221},[47,37103,33830],{"class":81},[47,37105,228],{"class":221},[47,37107,37108],{"class":49,"line":33811},[47,37109,33838],{"class":221},[47,37111,37112],{"class":49,"line":33816},[47,37113,2493],{"emptyLinePlaceholder":145},[47,37115,37116],{"class":49,"line":33825},[47,37117,33849],{"class":279},[47,37119,37120,37122,37124,37126,37128],{"class":49,"line":33835},[47,37121,1625],{"class":217},[47,37123,31274],{"class":85},[47,37125,3042],{"class":217},[47,37127,31279],{"class":81},[47,37129,3832],{"class":221},[47,37131,37132],{"class":49,"line":33841},[47,37133,33868],{"class":279},[47,37135,37136,37139,37141],{"class":49,"line":33846},[47,37137,37138],{"class":221},"    AlexNet",[47,37140,267],{"class":217},[47,37142,37143],{"class":221},"AlexNet()\n",[47,37145,37146,37148,37150],{"class":49,"line":33852},[47,37147,33885],{"class":221},[47,37149,267],{"class":217},[47,37151,33890],{"class":221},[47,37153,37154,37156,37158,37161,37163,37165,37167],{"class":49,"line":33865},[47,37155,33447],{"class":221},[47,37157,267],{"class":217},[47,37159,37160],{"class":221},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[47,37162,33903],{"class":5309},[47,37164,267],{"class":217},[47,37166,919],{"class":85},[47,37168,228],{"class":221},[47,37170,37171],{"class":49,"line":33871},[47,37172,33915],{"class":221},[171,37174,37175],{"start":1273},[109,37176,33928],{},[38,37178,37180],{"className":30432,"code":37179,"language":30434,"meta":43,"style":43},"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",[26,37181,37182,37188,37198,37208,37218,37222,37232,37242,37253,37257,37261,37265,37273,37289,37299,37315,37325,37339,37343,37353,37363,37373,37379,37383,37387,37395,37399,37415,37423,37427,37431,37439,37447,37451,37455,37459,37463,37469,37473,37483,37491,37499,37503,37507,37511,37519,37523,37539,37543,37547,37551,37563,37567,37579,37583,37587,37599,37603,37613,37617,37621,37633,37637,37645,37649,37653,37661,37665,37673,37677,37681,37685,37689,37693,37709,37717,37721,37725,37773,37779,37783,37793,37801,37809,37813,37817,37821,37825,37833,37837,37853,37857,37865,37873],{"__ignoreMap":43},[47,37183,37184,37186],{"class":49,"line":50},[47,37185,30446],{"class":217},[47,37187,30449],{"class":221},[47,37189,37190,37192,37194,37196],{"class":49,"line":92},[47,37191,30446],{"class":217},[47,37193,31469],{"class":221},[47,37195,31437],{"class":217},[47,37197,31474],{"class":221},[47,37199,37200,37202,37204,37206],{"class":49,"line":1273},[47,37201,30791],{"class":217},[47,37203,33956],{"class":221},[47,37205,30446],{"class":217},[47,37207,33961],{"class":221},[47,37209,37210,37212,37214,37216],{"class":49,"line":1288},[47,37211,30791],{"class":217},[47,37213,31452],{"class":221},[47,37215,30446],{"class":217},[47,37217,31457],{"class":221},[47,37219,37220],{"class":49,"line":1294},[47,37221,33976],{"class":279},[47,37223,37224,37226,37228,37230],{"class":49,"line":1308},[47,37225,30791],{"class":217},[47,37227,31422],{"class":221},[47,37229,30446],{"class":217},[47,37231,31427],{"class":221},[47,37233,37234,37236,37238,37240],{"class":49,"line":1314},[47,37235,30791],{"class":217},[47,37237,31968],{"class":221},[47,37239,30446],{"class":217},[47,37241,35611],{"class":221},[47,37243,37244,37246,37249,37251],{"class":49,"line":1405},[47,37245,30791],{"class":217},[47,37247,37248],{"class":221}," 练习.AlexNet.model ",[47,37250,30446],{"class":217},[47,37252,35611],{"class":221},[47,37254,37255],{"class":49,"line":1411},[47,37256,2493],{"emptyLinePlaceholder":145},[47,37258,37259],{"class":49,"line":1423},[47,37260,2493],{"emptyLinePlaceholder":145},[47,37262,37263],{"class":49,"line":1706},[47,37264,34005],{"class":279},[47,37266,37267,37269,37271],{"class":49,"line":1711},[47,37268,32001],{"class":217},[47,37270,34012],{"class":53},[47,37272,32007],{"class":221},[47,37274,37275,37277,37279,37281,37283,37285,37287],{"class":49,"line":1717},[47,37276,34019],{"class":221},[47,37278,267],{"class":217},[47,37280,31509],{"class":221},[47,37282,31512],{"class":5309},[47,37284,267],{"class":217},[47,37286,31517],{"class":81},[47,37288,31520],{"class":221},[47,37290,37291,37293,37295,37297],{"class":49,"line":1722},[47,37292,34036],{"class":5309},[47,37294,267],{"class":217},[47,37296,34041],{"class":85},[47,37298,31520],{"class":221},[47,37300,37301,37303,37305,37307,37309,37311,37313],{"class":49,"line":1736},[47,37302,34048],{"class":5309},[47,37304,267],{"class":217},[47,37306,31547],{"class":221},[47,37308,31550],{"class":5309},[47,37310,267],{"class":217},[47,37312,35503],{"class":85},[47,37314,31558],{"class":221},[47,37316,37317,37319,37321,37323],{"class":49,"line":1741},[47,37318,34065],{"class":5309},[47,37320,267],{"class":217},[47,37322,31530],{"class":85},[47,37324,228],{"class":221},[47,37326,37327,37329,37331,37333,37335,37337],{"class":49,"line":1747},[47,37328,34076],{"class":221},[47,37330,267],{"class":217},[47,37332,31588],{"class":221},[47,37334,31591],{"class":5309},[47,37336,267],{"class":217},[47,37338,34087],{"class":221},[47,37340,37341],{"class":49,"line":1768},[47,37342,34092],{"class":279},[47,37344,37345,37347,37349,37351],{"class":49,"line":1773},[47,37346,34097],{"class":5309},[47,37348,267],{"class":217},[47,37350,436],{"class":85},[47,37352,31520],{"class":221},[47,37354,37355,37357,37359,37361],{"class":49,"line":1787},[47,37356,34108],{"class":5309},[47,37358,267],{"class":217},[47,37360,31530],{"class":85},[47,37362,31520],{"class":221},[47,37364,37365,37367,37369,37371],{"class":49,"line":1792},[47,37366,34119],{"class":5309},[47,37368,267],{"class":217},[47,37370,411],{"class":85},[47,37372,228],{"class":221},[47,37374,37375,37377],{"class":49,"line":1821},[47,37376,4183],{"class":217},[47,37378,34132],{"class":221},[47,37380,37381],{"class":49,"line":1826},[47,37382,2493],{"emptyLinePlaceholder":145},[47,37384,37385],{"class":49,"line":1843},[47,37386,34141],{"class":279},[47,37388,37389,37391,37393],{"class":49,"line":1848},[47,37390,32001],{"class":217},[47,37392,34148],{"class":53},[47,37394,34151],{"class":221},[47,37396,37397],{"class":49,"line":1853},[47,37398,34156],{"class":279},[47,37400,37401,37403,37405,37407,37409,37411,37413],{"class":49,"line":1858},[47,37402,31291],{"class":221},[47,37404,267],{"class":217},[47,37406,31298],{"class":81},[47,37408,1798],{"class":217},[47,37410,31303],{"class":221},[47,37412,1795],{"class":217},[47,37414,34173],{"class":81},[47,37416,37417,37419,37421],{"class":49,"line":1872},[47,37418,31343],{"class":221},[47,37420,267],{"class":217},[47,37422,32343],{"class":221},[47,37424,37425],{"class":49,"line":1877},[47,37426,2493],{"emptyLinePlaceholder":145},[47,37428,37429],{"class":49,"line":2670},[47,37430,34190],{"class":279},[47,37432,37433,37435,37437],{"class":49,"line":2684},[47,37434,34195],{"class":221},[47,37436,267],{"class":217},[47,37438,32396],{"class":85},[47,37440,37441,37443,37445],{"class":49,"line":2692},[47,37442,34204],{"class":221},[47,37444,267],{"class":217},[47,37446,3178],{"class":85},[47,37448,37449],{"class":49,"line":2697},[47,37450,2493],{"emptyLinePlaceholder":145},[47,37452,37453],{"class":49,"line":2703},[47,37454,34217],{"class":279},[47,37456,37457],{"class":49,"line":2709},[47,37458,34222],{"class":279},[47,37460,37461],{"class":49,"line":2714},[47,37462,34227],{"class":279},[47,37464,37465,37467],{"class":49,"line":8041},[47,37466,34232],{"class":217},[47,37468,32938],{"class":221},[47,37470,37471],{"class":49,"line":8065},[47,37472,34239],{"class":279},[47,37474,37475,37477,37479,37481],{"class":49,"line":8070},[47,37476,3496],{"class":217},[47,37478,34246],{"class":221},[47,37480,26097],{"class":217},[47,37482,34251],{"class":221},[47,37484,37485,37487,37489],{"class":49,"line":8076},[47,37486,34256],{"class":221},[47,37488,267],{"class":217},[47,37490,34261],{"class":221},[47,37492,37493,37495,37497],{"class":49,"line":8103},[47,37494,34266],{"class":221},[47,37496,267],{"class":217},[47,37498,34271],{"class":221},[47,37500,37501],{"class":49,"line":8108},[47,37502,34276],{"class":279},[47,37504,37505],{"class":49,"line":8114},[47,37506,32929],{"class":221},[47,37508,37509],{"class":49,"line":8126},[47,37510,34285],{"class":279},[47,37512,37513,37515,37517],{"class":49,"line":8138},[47,37514,32714],{"class":221},[47,37516,267],{"class":217},[47,37518,34294],{"class":221},[47,37520,37521],{"class":49,"line":8150},[47,37522,34299],{"class":279},[47,37524,37525,37527,37529,37531,37533,37535,37537],{"class":49,"line":9809},[47,37526,32731],{"class":221},[47,37528,267],{"class":217},[47,37530,32736],{"class":221},[47,37532,32739],{"class":5309},[47,37534,267],{"class":217},[47,37536,436],{"class":85},[47,37538,228],{"class":221},[47,37540,37541],{"class":49,"line":9834},[47,37542,34320],{"class":279},[47,37544,37545],{"class":49,"line":9857},[47,37546,34325],{"class":279},[47,37548,37549],{"class":49,"line":9881},[47,37550,34330],{"class":279},[47,37552,37553,37555,37557,37559,37561],{"class":49,"line":9886},[47,37554,34335],{"class":221},[47,37556,9570],{"class":217},[47,37558,32841],{"class":221},[47,37560,3042],{"class":217},[47,37562,34344],{"class":221},[47,37564,37565],{"class":49,"line":9891},[47,37566,34349],{"class":279},[47,37568,37569,37571,37573,37575,37577],{"class":49,"line":9896},[47,37570,34354],{"class":221},[47,37572,9570],{"class":217},[47,37574,34359],{"class":221},[47,37576,411],{"class":85},[47,37578,228],{"class":221},[47,37580,37581],{"class":49,"line":9905},[47,37582,2493],{"emptyLinePlaceholder":145},[47,37584,37585],{"class":49,"line":9910},[47,37586,34372],{"class":279},[47,37588,37589,37591,37593,37595,37597],{"class":49,"line":9916},[47,37590,34377],{"class":221},[47,37592,267],{"class":217},[47,37594,34382],{"class":221},[47,37596,803],{"class":217},[47,37598,34387],{"class":221},[47,37600,37601],{"class":49,"line":9937},[47,37602,34392],{"class":279},[47,37604,37605,37607,37609,37611],{"class":49,"line":9943},[47,37606,32505],{"class":85},[47,37608,222],{"class":221},[47,37610,34401],{"class":81},[47,37612,34404],{"class":221},[47,37614,37615],{"class":49,"line":9957},[47,37616,2493],{"emptyLinePlaceholder":145},[47,37618,37619],{"class":49,"line":9963},[47,37620,34413],{"class":279},[47,37622,37623,37625,37627,37629,37631],{"class":49,"line":9990},[47,37624,1625],{"class":217},[47,37626,31274],{"class":85},[47,37628,3042],{"class":217},[47,37630,31279],{"class":81},[47,37632,3832],{"class":221},[47,37634,37635],{"class":49,"line":9999},[47,37636,34430],{"class":279},[47,37638,37639,37641,37643],{"class":49,"line":10005},[47,37640,31343],{"class":221},[47,37642,267],{"class":217},[47,37644,37143],{"class":221},[47,37646,37647],{"class":49,"line":10013},[47,37648,34443],{"class":279},[47,37650,37651],{"class":49,"line":10018},[47,37652,34448],{"class":279},[47,37654,37655,37657,37659],{"class":49,"line":16697},[47,37656,34453],{"class":221},[47,37658,34456],{"class":81},[47,37660,30551],{"class":221},[47,37662,37663],{"class":49,"line":16703},[47,37664,34463],{"class":279},[47,37666,37667,37669,37671],{"class":49,"line":16726},[47,37668,34076],{"class":221},[47,37670,267],{"class":217},[47,37672,34472],{"class":221},[47,37674,37675],{"class":49,"line":16732},[47,37676,34477],{"class":279},[47,37678,37679],{"class":49,"line":16755},[47,37680,34482],{"class":221},[47,37682,37683],{"class":49,"line":16769},[47,37684,2493],{"emptyLinePlaceholder":145},[47,37686,37687],{"class":49,"line":16789},[47,37688,34491],{"class":279},[47,37690,37691],{"class":49,"line":16795},[47,37692,34496],{"class":279},[47,37694,37695,37697,37699,37701,37703,37705,37707],{"class":49,"line":16806},[47,37696,31291],{"class":221},[47,37698,267],{"class":217},[47,37700,31298],{"class":81},[47,37702,1798],{"class":217},[47,37704,31303],{"class":221},[47,37706,1795],{"class":217},[47,37708,34173],{"class":81},[47,37710,37711,37713,37715],{"class":49,"line":16829},[47,37712,31343],{"class":221},[47,37714,267],{"class":217},[47,37716,32343],{"class":221},[47,37718,37719],{"class":49,"line":16851},[47,37720,34525],{"class":279},[47,37722,37723],{"class":49,"line":16856},[47,37724,34530],{"class":279},[47,37726,37727,37729,37731,37733,37735,37737,37739,37741,37743,37745,37747,37749,37751,37753,37755,37757,37759,37761,37763,37765,37767,37769,37771],{"class":49,"line":16862},[47,37728,34535],{"class":221},[47,37730,267],{"class":217},[47,37732,1109],{"class":221},[47,37734,34542],{"class":81},[47,37736,597],{"class":221},[47,37738,34547],{"class":81},[47,37740,597],{"class":221},[47,37742,34552],{"class":81},[47,37744,597],{"class":221},[47,37746,34557],{"class":81},[47,37748,597],{"class":221},[47,37750,34562],{"class":81},[47,37752,597],{"class":221},[47,37754,34567],{"class":81},[47,37756,597],{"class":221},[47,37758,34572],{"class":81},[47,37760,597],{"class":221},[47,37762,34577],{"class":81},[47,37764,597],{"class":221},[47,37766,34582],{"class":81},[47,37768,597],{"class":221},[47,37770,34587],{"class":81},[47,37772,33300],{"class":221},[47,37774,37775,37777],{"class":49,"line":16876},[47,37776,34232],{"class":217},[47,37778,32938],{"class":221},[47,37780,37781],{"class":49,"line":16889},[47,37782,34600],{"class":279},[47,37784,37785,37787,37789,37791],{"class":49,"line":16894},[47,37786,3496],{"class":217},[47,37788,34607],{"class":221},[47,37790,26097],{"class":217},[47,37792,34251],{"class":221},[47,37794,37795,37797,37799],{"class":49,"line":16908},[47,37796,32664],{"class":221},[47,37798,267],{"class":217},[47,37800,32669],{"class":221},[47,37802,37803,37805,37807],{"class":49,"line":16913},[47,37804,32679],{"class":221},[47,37806,267],{"class":217},[47,37808,32684],{"class":221},[47,37810,37811],{"class":49,"line":16919},[47,37812,2493],{"emptyLinePlaceholder":145},[47,37814,37815],{"class":49,"line":16924},[47,37816,34636],{"class":279},[47,37818,37819],{"class":49,"line":16938},[47,37820,32929],{"class":221},[47,37822,37823],{"class":49,"line":16943},[47,37824,34645],{"class":279},[47,37826,37827,37829,37831],{"class":49,"line":16948},[47,37828,32714],{"class":221},[47,37830,267],{"class":217},[47,37832,32719],{"class":221},[47,37834,37835],{"class":49,"line":16962},[47,37836,34658],{"class":279},[47,37838,37839,37841,37843,37845,37847,37849,37851],{"class":49,"line":16974},[47,37840,32731],{"class":221},[47,37842,267],{"class":217},[47,37844,32736],{"class":221},[47,37846,32739],{"class":5309},[47,37848,267],{"class":217},[47,37850,436],{"class":85},[47,37852,228],{"class":221},[47,37854,37855],{"class":49,"line":16979},[47,37856,34679],{"class":279},[47,37858,37859,37861,37863],{"class":49,"line":16992},[47,37860,34684],{"class":221},[47,37862,267],{"class":217},[47,37864,34689],{"class":221},[47,37866,37867,37869,37871],{"class":49,"line":16997},[47,37868,34694],{"class":221},[47,37870,267],{"class":217},[47,37872,34699],{"class":221},[47,37874,37875,37877,37879,37881,37883,37885,37887,37889],{"class":49,"line":17002},[47,37876,34704],{"class":85},[47,37878,222],{"class":221},[47,37880,34709],{"class":81},[47,37882,34712],{"class":221},[47,37884,34715],{"class":81},[47,37886,597],{"class":221},[47,37888,34720],{"class":81},[47,37890,34723],{"class":221},[187,37892,37894],{"id":37893},"_22vgg","2.2.VGG",[22091,37896,37898],{"id":37897},"_221原理","2.2.1.原理",[19,37900,37901],{},[1556,37902],{"alt":43,"src":37903},"\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,37905,37906],{},[1556,37907],{"alt":43,"src":37908},"\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,37910,37911],{},[1556,37912],{"alt":43,"src":37913},"\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,37915,37916],{},"参数详细描述：",[19,37918,37919],{},[1556,37920],{"alt":43,"src":37921},"\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,37923,37924],{},[1556,37925],{"alt":43,"src":37926},"\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,37928,37929],{},[1556,37930],{"alt":43,"src":37931},"\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,37933,37934],{},[1556,37935],{"alt":43,"src":37936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-021.png",[19,37938,37939],{},[1556,37940],{"alt":43,"src":37941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-022.png",[22091,37943,37945],{"id":37944},"_222代码实现","2.2.2.代码实现",[171,37947,37948],{},[109,37949,37950],{},"网络搭建",[38,37952,37954],{"className":30432,"code":37953,"language":30434,"meta":43,"style":43},"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",[26,37955,37956,37962,37974,37984,37994,37998,38015,38023,38042,38047,38052,38064,38102,38107,38143,38147,38176,38181,38186,38197,38233,38237,38273,38277,38305,38309,38314,38325,38361,38365,38401,38405,38441,38445,38473,38477,38482,38493,38530,38534,38570,38574,38610,38614,38642,38646,38651,38662,38698,38702,38738,38742,38778,38782,38810,38814,38819,38830,38835,38840,38845,38866,38870,38882,38886,38898,38902,38906,38911,38916,38931,38936,38946,38951,38966,38971,38990,38995,39004,39009,39019,39024,39029,39043,39048,39062,39070,39074,39078,39086,39097,39108,39119,39130,39141,39152,39158,39162,39167,39180,39200,39206,39215],{"__ignoreMap":43},[47,37957,37958,37960],{"class":49,"line":50},[47,37959,30446],{"class":217},[47,37961,30449],{"class":221},[47,37963,37964,37966,37969,37971],{"class":49,"line":92},[47,37965,30791],{"class":217},[47,37967,37968],{"class":221}," sympy.core.sympify ",[47,37970,30446],{"class":217},[47,37972,37973],{"class":221}," kernS\n",[47,37975,37976,37978,37980,37982],{"class":49,"line":1273},[47,37977,30791],{"class":217},[47,37979,30794],{"class":221},[47,37981,30446],{"class":217},[47,37983,30799],{"class":221},[47,37985,37986,37988,37990,37992],{"class":49,"line":1288},[47,37987,30791],{"class":217},[47,37989,30811],{"class":221},[47,37991,30446],{"class":217},[47,37993,30816],{"class":221},[47,37995,37996],{"class":49,"line":1294},[47,37997,2493],{"emptyLinePlaceholder":145},[47,37999,38000,38002,38005,38007,38009,38011,38013],{"class":49,"line":1308},[47,38001,14787],{"class":217},[47,38003,38004],{"class":53}," VGG16",[47,38006,222],{"class":221},[47,38008,30832],{"class":53},[47,38010,777],{"class":221},[47,38012,30837],{"class":53},[47,38014,30840],{"class":221},[47,38016,38017,38019,38021],{"class":49,"line":1314},[47,38018,30855],{"class":217},[47,38020,30858],{"class":85},[47,38022,30861],{"class":221},[47,38024,38025,38027,38029,38032,38034,38036,38038,38040],{"class":49,"line":1405},[47,38026,30871],{"class":85},[47,38028,222],{"class":221},[47,38030,38031],{"class":85},"VGG16",[47,38033,12528],{"class":221},[47,38035,30877],{"class":85},[47,38037,30880],{"class":221},[47,38039,30883],{"class":85},[47,38041,2069],{"class":221},[47,38043,38044],{"class":49,"line":1411},[47,38045,38046],{"class":279},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[47,38048,38049],{"class":49,"line":1423},[47,38050,38051],{"class":279},"        # 这里用的是灰度图\n",[47,38053,38054,38056,38059,38061],{"class":49,"line":1706},[47,38055,30899],{"class":85},[47,38057,38058],{"class":221},".block1",[47,38060,267],{"class":217},[47,38062,38063],{"class":221},"nn.Sequential(\n",[47,38065,38066,38069,38071,38073,38075,38077,38079,38081,38083,38085,38087,38089,38091,38093,38095,38097,38099],{"class":49,"line":1711},[47,38067,38068],{"class":221},"            nn.Conv2d(",[47,38070,30910],{"class":5309},[47,38072,267],{"class":217},[47,38074,436],{"class":85},[47,38076,597],{"class":221},[47,38078,30919],{"class":5309},[47,38080,267],{"class":217},[47,38082,423],{"class":85},[47,38084,597],{"class":221},[47,38086,30928],{"class":5309},[47,38088,267],{"class":217},[47,38090,292],{"class":85},[47,38092,597],{"class":221},[47,38094,30937],{"class":5309},[47,38096,267],{"class":217},[47,38098,436],{"class":85},[47,38100,38101],{"class":221},"),\n",[47,38103,38104],{"class":49,"line":1717},[47,38105,38106],{"class":221},"            nn.ReLU(),\n",[47,38108,38109,38111,38113,38115,38117,38119,38121,38123,38125,38127,38129,38131,38133,38135,38137,38139,38141],{"class":49,"line":1722},[47,38110,38068],{"class":221},[47,38112,30910],{"class":5309},[47,38114,267],{"class":217},[47,38116,423],{"class":85},[47,38118,597],{"class":221},[47,38120,30919],{"class":5309},[47,38122,267],{"class":217},[47,38124,423],{"class":85},[47,38126,597],{"class":221},[47,38128,30928],{"class":5309},[47,38130,267],{"class":217},[47,38132,292],{"class":85},[47,38134,597],{"class":221},[47,38136,30937],{"class":5309},[47,38138,267],{"class":217},[47,38140,436],{"class":85},[47,38142,38101],{"class":221},[47,38144,38145],{"class":49,"line":1736},[47,38146,38106],{"class":221},[47,38148,38149,38152,38154,38156,38158,38160,38162,38164,38166,38168,38170,38172,38174],{"class":49,"line":1741},[47,38150,38151],{"class":221},"            nn.MaxPool2d(",[47,38153,30928],{"class":5309},[47,38155,267],{"class":217},[47,38157,298],{"class":85},[47,38159,597],{"class":221},[47,38161,30983],{"class":5309},[47,38163,267],{"class":217},[47,38165,298],{"class":85},[47,38167,597],{"class":221},[47,38169,30937],{"class":5309},[47,38171,267],{"class":217},[47,38173,411],{"class":85},[47,38175,228],{"class":221},[47,38177,38178],{"class":49,"line":1747},[47,38179,38180],{"class":221},"        )\n",[47,38182,38183],{"class":49,"line":1768},[47,38184,38185],{"class":279},"        # 第二层\n",[47,38187,38188,38190,38193,38195],{"class":49,"line":1773},[47,38189,30899],{"class":85},[47,38191,38192],{"class":221},".block2",[47,38194,267],{"class":217},[47,38196,38063],{"class":221},[47,38198,38199,38201,38203,38205,38207,38209,38211,38213,38215,38217,38219,38221,38223,38225,38227,38229,38231],{"class":49,"line":1787},[47,38200,38068],{"class":221},[47,38202,30910],{"class":5309},[47,38204,267],{"class":217},[47,38206,423],{"class":85},[47,38208,597],{"class":221},[47,38210,30919],{"class":5309},[47,38212,267],{"class":217},[47,38214,32124],{"class":85},[47,38216,597],{"class":221},[47,38218,30928],{"class":5309},[47,38220,267],{"class":217},[47,38222,292],{"class":85},[47,38224,597],{"class":221},[47,38226,30937],{"class":5309},[47,38228,267],{"class":217},[47,38230,436],{"class":85},[47,38232,38101],{"class":221},[47,38234,38235],{"class":49,"line":1792},[47,38236,38106],{"class":221},[47,38238,38239,38241,38243,38245,38247,38249,38251,38253,38255,38257,38259,38261,38263,38265,38267,38269,38271],{"class":49,"line":1821},[47,38240,38068],{"class":221},[47,38242,30910],{"class":5309},[47,38244,267],{"class":217},[47,38246,32124],{"class":85},[47,38248,597],{"class":221},[47,38250,30919],{"class":5309},[47,38252,267],{"class":217},[47,38254,32124],{"class":85},[47,38256,597],{"class":221},[47,38258,30928],{"class":5309},[47,38260,267],{"class":217},[47,38262,292],{"class":85},[47,38264,597],{"class":221},[47,38266,30937],{"class":5309},[47,38268,267],{"class":217},[47,38270,436],{"class":85},[47,38272,38101],{"class":221},[47,38274,38275],{"class":49,"line":1826},[47,38276,38106],{"class":221},[47,38278,38279,38281,38283,38285,38287,38289,38291,38293,38295,38297,38299,38301,38303],{"class":49,"line":1843},[47,38280,38151],{"class":221},[47,38282,30928],{"class":5309},[47,38284,267],{"class":217},[47,38286,298],{"class":85},[47,38288,597],{"class":221},[47,38290,30983],{"class":5309},[47,38292,267],{"class":217},[47,38294,298],{"class":85},[47,38296,597],{"class":221},[47,38298,30937],{"class":5309},[47,38300,267],{"class":217},[47,38302,411],{"class":85},[47,38304,228],{"class":221},[47,38306,38307],{"class":49,"line":1848},[47,38308,38180],{"class":221},[47,38310,38311],{"class":49,"line":1853},[47,38312,38313],{"class":279},"        # 第三层\n",[47,38315,38316,38318,38321,38323],{"class":49,"line":1858},[47,38317,30899],{"class":85},[47,38319,38320],{"class":221},".block3",[47,38322,267],{"class":217},[47,38324,38063],{"class":221},[47,38326,38327,38329,38331,38333,38335,38337,38339,38341,38343,38345,38347,38349,38351,38353,38355,38357,38359],{"class":49,"line":1872},[47,38328,38068],{"class":221},[47,38330,30910],{"class":5309},[47,38332,267],{"class":217},[47,38334,32124],{"class":85},[47,38336,597],{"class":221},[47,38338,30919],{"class":5309},[47,38340,267],{"class":217},[47,38342,34924],{"class":85},[47,38344,597],{"class":221},[47,38346,30928],{"class":5309},[47,38348,267],{"class":217},[47,38350,292],{"class":85},[47,38352,597],{"class":221},[47,38354,30937],{"class":5309},[47,38356,267],{"class":217},[47,38358,436],{"class":85},[47,38360,38101],{"class":221},[47,38362,38363],{"class":49,"line":1877},[47,38364,38106],{"class":221},[47,38366,38367,38369,38371,38373,38375,38377,38379,38381,38383,38385,38387,38389,38391,38393,38395,38397,38399],{"class":49,"line":2670},[47,38368,38068],{"class":221},[47,38370,30910],{"class":5309},[47,38372,267],{"class":217},[47,38374,34924],{"class":85},[47,38376,597],{"class":221},[47,38378,30919],{"class":5309},[47,38380,267],{"class":217},[47,38382,34924],{"class":85},[47,38384,597],{"class":221},[47,38386,30928],{"class":5309},[47,38388,267],{"class":217},[47,38390,292],{"class":85},[47,38392,597],{"class":221},[47,38394,30937],{"class":5309},[47,38396,267],{"class":217},[47,38398,436],{"class":85},[47,38400,38101],{"class":221},[47,38402,38403],{"class":49,"line":2684},[47,38404,38106],{"class":221},[47,38406,38407,38409,38411,38413,38415,38417,38419,38421,38423,38425,38427,38429,38431,38433,38435,38437,38439],{"class":49,"line":2692},[47,38408,38068],{"class":221},[47,38410,30910],{"class":5309},[47,38412,267],{"class":217},[47,38414,34924],{"class":85},[47,38416,597],{"class":221},[47,38418,30919],{"class":5309},[47,38420,267],{"class":217},[47,38422,34924],{"class":85},[47,38424,597],{"class":221},[47,38426,30928],{"class":5309},[47,38428,267],{"class":217},[47,38430,292],{"class":85},[47,38432,597],{"class":221},[47,38434,30937],{"class":5309},[47,38436,267],{"class":217},[47,38438,436],{"class":85},[47,38440,38101],{"class":221},[47,38442,38443],{"class":49,"line":2697},[47,38444,38106],{"class":221},[47,38446,38447,38449,38451,38453,38455,38457,38459,38461,38463,38465,38467,38469,38471],{"class":49,"line":2703},[47,38448,38151],{"class":221},[47,38450,30928],{"class":5309},[47,38452,267],{"class":217},[47,38454,298],{"class":85},[47,38456,597],{"class":221},[47,38458,30983],{"class":5309},[47,38460,267],{"class":217},[47,38462,298],{"class":85},[47,38464,597],{"class":221},[47,38466,30937],{"class":5309},[47,38468,267],{"class":217},[47,38470,411],{"class":85},[47,38472,228],{"class":221},[47,38474,38475],{"class":49,"line":2709},[47,38476,38180],{"class":221},[47,38478,38479],{"class":49,"line":2714},[47,38480,38481],{"class":279},"        # 第四层\n",[47,38483,38484,38486,38489,38491],{"class":49,"line":8041},[47,38485,30899],{"class":85},[47,38487,38488],{"class":221},".block4",[47,38490,267],{"class":217},[47,38492,38063],{"class":221},[47,38494,38495,38497,38499,38501,38503,38505,38507,38509,38512,38514,38516,38518,38520,38522,38524,38526,38528],{"class":49,"line":8065},[47,38496,38068],{"class":221},[47,38498,30910],{"class":5309},[47,38500,267],{"class":217},[47,38502,34924],{"class":85},[47,38504,597],{"class":221},[47,38506,30919],{"class":5309},[47,38508,267],{"class":217},[47,38510,38511],{"class":85},"512",[47,38513,597],{"class":221},[47,38515,30928],{"class":5309},[47,38517,267],{"class":217},[47,38519,292],{"class":85},[47,38521,597],{"class":221},[47,38523,30937],{"class":5309},[47,38525,267],{"class":217},[47,38527,436],{"class":85},[47,38529,38101],{"class":221},[47,38531,38532],{"class":49,"line":8070},[47,38533,38106],{"class":221},[47,38535,38536,38538,38540,38542,38544,38546,38548,38550,38552,38554,38556,38558,38560,38562,38564,38566,38568],{"class":49,"line":8076},[47,38537,38068],{"class":221},[47,38539,30910],{"class":5309},[47,38541,267],{"class":217},[47,38543,38511],{"class":85},[47,38545,597],{"class":221},[47,38547,30919],{"class":5309},[47,38549,267],{"class":217},[47,38551,38511],{"class":85},[47,38553,597],{"class":221},[47,38555,30928],{"class":5309},[47,38557,267],{"class":217},[47,38559,292],{"class":85},[47,38561,597],{"class":221},[47,38563,30937],{"class":5309},[47,38565,267],{"class":217},[47,38567,436],{"class":85},[47,38569,38101],{"class":221},[47,38571,38572],{"class":49,"line":8103},[47,38573,38106],{"class":221},[47,38575,38576,38578,38580,38582,38584,38586,38588,38590,38592,38594,38596,38598,38600,38602,38604,38606,38608],{"class":49,"line":8108},[47,38577,38068],{"class":221},[47,38579,30910],{"class":5309},[47,38581,267],{"class":217},[47,38583,38511],{"class":85},[47,38585,597],{"class":221},[47,38587,30919],{"class":5309},[47,38589,267],{"class":217},[47,38591,38511],{"class":85},[47,38593,597],{"class":221},[47,38595,30928],{"class":5309},[47,38597,267],{"class":217},[47,38599,292],{"class":85},[47,38601,597],{"class":221},[47,38603,30937],{"class":5309},[47,38605,267],{"class":217},[47,38607,436],{"class":85},[47,38609,38101],{"class":221},[47,38611,38612],{"class":49,"line":8114},[47,38613,38106],{"class":221},[47,38615,38616,38618,38620,38622,38624,38626,38628,38630,38632,38634,38636,38638,38640],{"class":49,"line":8126},[47,38617,38151],{"class":221},[47,38619,30928],{"class":5309},[47,38621,267],{"class":217},[47,38623,298],{"class":85},[47,38625,597],{"class":221},[47,38627,30983],{"class":5309},[47,38629,267],{"class":217},[47,38631,298],{"class":85},[47,38633,597],{"class":221},[47,38635,30937],{"class":5309},[47,38637,267],{"class":217},[47,38639,411],{"class":85},[47,38641,228],{"class":221},[47,38643,38644],{"class":49,"line":8138},[47,38645,38180],{"class":221},[47,38647,38648],{"class":49,"line":8150},[47,38649,38650],{"class":279},"        # 第五层\n",[47,38652,38653,38655,38658,38660],{"class":49,"line":9809},[47,38654,30899],{"class":85},[47,38656,38657],{"class":221},".block5",[47,38659,267],{"class":217},[47,38661,38063],{"class":221},[47,38663,38664,38666,38668,38670,38672,38674,38676,38678,38680,38682,38684,38686,38688,38690,38692,38694,38696],{"class":49,"line":9834},[47,38665,38068],{"class":221},[47,38667,30910],{"class":5309},[47,38669,267],{"class":217},[47,38671,38511],{"class":85},[47,38673,597],{"class":221},[47,38675,30919],{"class":5309},[47,38677,267],{"class":217},[47,38679,38511],{"class":85},[47,38681,597],{"class":221},[47,38683,30928],{"class":5309},[47,38685,267],{"class":217},[47,38687,292],{"class":85},[47,38689,597],{"class":221},[47,38691,30937],{"class":5309},[47,38693,267],{"class":217},[47,38695,436],{"class":85},[47,38697,38101],{"class":221},[47,38699,38700],{"class":49,"line":9857},[47,38701,38106],{"class":221},[47,38703,38704,38706,38708,38710,38712,38714,38716,38718,38720,38722,38724,38726,38728,38730,38732,38734,38736],{"class":49,"line":9881},[47,38705,38068],{"class":221},[47,38707,30910],{"class":5309},[47,38709,267],{"class":217},[47,38711,38511],{"class":85},[47,38713,597],{"class":221},[47,38715,30919],{"class":5309},[47,38717,267],{"class":217},[47,38719,38511],{"class":85},[47,38721,597],{"class":221},[47,38723,30928],{"class":5309},[47,38725,267],{"class":217},[47,38727,292],{"class":85},[47,38729,597],{"class":221},[47,38731,30937],{"class":5309},[47,38733,267],{"class":217},[47,38735,436],{"class":85},[47,38737,38101],{"class":221},[47,38739,38740],{"class":49,"line":9886},[47,38741,38106],{"class":221},[47,38743,38744,38746,38748,38750,38752,38754,38756,38758,38760,38762,38764,38766,38768,38770,38772,38774,38776],{"class":49,"line":9891},[47,38745,38068],{"class":221},[47,38747,30910],{"class":5309},[47,38749,267],{"class":217},[47,38751,38511],{"class":85},[47,38753,597],{"class":221},[47,38755,30919],{"class":5309},[47,38757,267],{"class":217},[47,38759,38511],{"class":85},[47,38761,597],{"class":221},[47,38763,30928],{"class":5309},[47,38765,267],{"class":217},[47,38767,292],{"class":85},[47,38769,597],{"class":221},[47,38771,30937],{"class":5309},[47,38773,267],{"class":217},[47,38775,436],{"class":85},[47,38777,38101],{"class":221},[47,38779,38780],{"class":49,"line":9896},[47,38781,38106],{"class":221},[47,38783,38784,38786,38788,38790,38792,38794,38796,38798,38800,38802,38804,38806,38808],{"class":49,"line":9905},[47,38785,38151],{"class":221},[47,38787,30928],{"class":5309},[47,38789,267],{"class":217},[47,38791,298],{"class":85},[47,38793,597],{"class":221},[47,38795,30983],{"class":5309},[47,38797,267],{"class":217},[47,38799,298],{"class":85},[47,38801,597],{"class":221},[47,38803,30937],{"class":5309},[47,38805,267],{"class":217},[47,38807,411],{"class":85},[47,38809,228],{"class":221},[47,38811,38812],{"class":49,"line":9910},[47,38813,38180],{"class":221},[47,38815,38816],{"class":49,"line":9916},[47,38817,38818],{"class":279},"        # 全连接层\n",[47,38820,38821,38823,38826,38828],{"class":49,"line":9937},[47,38822,30899],{"class":85},[47,38824,38825],{"class":221},".block6",[47,38827,267],{"class":217},[47,38829,38063],{"class":221},[47,38831,38832],{"class":49,"line":9943},[47,38833,38834],{"class":279},"            # 平展操作\n",[47,38836,38837],{"class":49,"line":9957},[47,38838,38839],{"class":279},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[47,38841,38842],{"class":49,"line":9963},[47,38843,38844],{"class":221},"            nn.Flatten(),\n",[47,38846,38847,38850,38852,38854,38856,38858,38860,38862,38864],{"class":49,"line":9990},[47,38848,38849],{"class":221},"            nn.Linear(",[47,38851,588],{"class":85},[47,38853,674],{"class":217},[47,38855,588],{"class":85},[47,38857,674],{"class":217},[47,38859,38511],{"class":85},[47,38861,597],{"class":221},[47,38863,34924],{"class":85},[47,38865,38101],{"class":221},[47,38867,38868],{"class":49,"line":9999},[47,38869,38106],{"class":221},[47,38871,38872,38874,38876,38878,38880],{"class":49,"line":10005},[47,38873,38849],{"class":221},[47,38875,34924],{"class":85},[47,38877,597],{"class":221},[47,38879,32124],{"class":85},[47,38881,38101],{"class":221},[47,38883,38884],{"class":49,"line":10013},[47,38885,38106],{"class":221},[47,38887,38888,38890,38892,38894,38896],{"class":49,"line":10018},[47,38889,38849],{"class":221},[47,38891,32124],{"class":85},[47,38893,597],{"class":221},[47,38895,665],{"class":85},[47,38897,228],{"class":221},[47,38899,38900],{"class":49,"line":16697},[47,38901,38180],{"class":221},[47,38903,38904],{"class":49,"line":16703},[47,38905,2493],{"emptyLinePlaceholder":145},[47,38907,38908],{"class":49,"line":16726},[47,38909,38910],{"class":279},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[47,38912,38913],{"class":49,"line":16732},[47,38914,38915],{"class":279},"        # 循环遍历模型\n",[47,38917,38918,38920,38923,38925,38928],{"class":49,"line":16755},[47,38919,3496],{"class":217},[47,38921,38922],{"class":221}," m ",[47,38924,26097],{"class":217},[47,38926,38927],{"class":85}," self",[47,38929,38930],{"class":221},".modules():\n",[47,38932,38933],{"class":49,"line":16769},[47,38934,38935],{"class":279},"            # print(m)\n",[47,38937,38938,38940,38943],{"class":49,"line":16789},[47,38939,4735],{"class":217},[47,38941,38942],{"class":85}," isinstance",[47,38944,38945],{"class":221},"(m,nn.Conv2d):\n",[47,38947,38948],{"class":49,"line":16795},[47,38949,38950],{"class":279},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[47,38952,38953,38956,38959,38961,38964],{"class":49,"line":16806},[47,38954,38955],{"class":221},"                nn.init.kaiming_normal_(m.weight,",[47,38957,38958],{"class":5309},"nonlinearity",[47,38960,267],{"class":217},[47,38962,38963],{"class":81},"'relu'",[47,38965,228],{"class":221},[47,38967,38968],{"class":49,"line":16829},[47,38969,38970],{"class":279},"                # 判断b参数是否存在\n",[47,38972,38973,38976,38979,38982,38985,38988],{"class":49,"line":16851},[47,38974,38975],{"class":217},"                if",[47,38977,38978],{"class":221}," m.bias ",[47,38980,38981],{"class":217},"is",[47,38983,38984],{"class":217}," not",[47,38986,38987],{"class":85}," None",[47,38989,3832],{"class":221},[47,38991,38992],{"class":49,"line":16856},[47,38993,38994],{"class":279},"                    # 如果参数不存在的化初始化b=0\n",[47,38996,38997,39000,39002],{"class":49,"line":16862},[47,38998,38999],{"class":221},"                    nn.init.constant_(m.bias,",[47,39001,411],{"class":85},[47,39003,228],{"class":221},[47,39005,39006],{"class":49,"line":16876},[47,39007,39008],{"class":279},"            # 全连接层初始化\n",[47,39010,39011,39014,39016],{"class":49,"line":16889},[47,39012,39013],{"class":217},"            elif",[47,39015,38942],{"class":85},[47,39017,39018],{"class":221},"(m,nn.Linear):\n",[47,39020,39021],{"class":49,"line":16894},[47,39022,39023],{"class":279},"                # 这个初始化方法是利用的是正太分布的方式\n",[47,39025,39026],{"class":49,"line":16908},[47,39027,39028],{"class":279},"                # 均值为0，方差为0.01\n",[47,39030,39031,39034,39036,39038,39041],{"class":49,"line":16913},[47,39032,39033],{"class":221},"                nn.init.normal_(m.weight,",[47,39035,411],{"class":85},[47,39037,597],{"class":221},[47,39039,39040],{"class":85},"0.01",[47,39042,228],{"class":221},[47,39044,39045],{"class":49,"line":16919},[47,39046,39047],{"class":279},"                # 初始化b参数\n",[47,39049,39050,39052,39054,39056,39058,39060],{"class":49,"line":16924},[47,39051,38975],{"class":217},[47,39053,38978],{"class":221},[47,39055,38981],{"class":217},[47,39057,38984],{"class":217},[47,39059,38987],{"class":85},[47,39061,3832],{"class":221},[47,39063,39064,39066,39068],{"class":49,"line":16938},[47,39065,38999],{"class":221},[47,39067,411],{"class":85},[47,39069,228],{"class":221},[47,39071,39072],{"class":49,"line":16943},[47,39073,2493],{"emptyLinePlaceholder":145},[47,39075,39076],{"class":49,"line":16948},[47,39077,35219],{"class":279},[47,39079,39080,39082,39084],{"class":49,"line":16962},[47,39081,30855],{"class":217},[47,39083,31147],{"class":53},[47,39085,31150],{"class":221},[47,39087,39088,39090,39092,39094],{"class":49,"line":16974},[47,39089,31155],{"class":221},[47,39091,267],{"class":217},[47,39093,30877],{"class":85},[47,39095,39096],{"class":221},".block1(x)\n",[47,39098,39099,39101,39103,39105],{"class":49,"line":16979},[47,39100,31155],{"class":221},[47,39102,267],{"class":217},[47,39104,30877],{"class":85},[47,39106,39107],{"class":221},".block2(x)\n",[47,39109,39110,39112,39114,39116],{"class":49,"line":16992},[47,39111,31155],{"class":221},[47,39113,267],{"class":217},[47,39115,30877],{"class":85},[47,39117,39118],{"class":221},".block3(x)\n",[47,39120,39121,39123,39125,39127],{"class":49,"line":16997},[47,39122,31155],{"class":221},[47,39124,267],{"class":217},[47,39126,30877],{"class":85},[47,39128,39129],{"class":221},".block4(x)\n",[47,39131,39132,39134,39136,39138],{"class":49,"line":17002},[47,39133,31155],{"class":221},[47,39135,267],{"class":217},[47,39137,30877],{"class":85},[47,39139,39140],{"class":221},".block5(x)\n",[47,39142,39143,39145,39147,39149],{"class":49,"line":17007},[47,39144,31155],{"class":221},[47,39146,267],{"class":217},[47,39148,30877],{"class":85},[47,39150,39151],{"class":221},".block6(x)\n",[47,39153,39154,39156],{"class":49,"line":17020},[47,39155,14845],{"class":217},[47,39157,31263],{"class":221},[47,39159,39160],{"class":49,"line":17025},[47,39161,2493],{"emptyLinePlaceholder":145},[47,39163,39164],{"class":49,"line":32687},[47,39165,39166],{"class":279},"# 验证模型\n",[47,39168,39169,39171,39173,39175,39178],{"class":49,"line":32693},[47,39170,1625],{"class":217},[47,39172,31274],{"class":85},[47,39174,3042],{"class":217},[47,39176,39177],{"class":81},"'__main__'",[47,39179,3832],{"class":221},[47,39181,39182,39184,39186,39188,39190,39192,39194,39196,39198],{"class":49,"line":32699},[47,39183,31291],{"class":221},[47,39185,267],{"class":217},[47,39187,30505],{"class":221},[47,39189,31298],{"class":81},[47,39191,1798],{"class":217},[47,39193,31303],{"class":221},[47,39195,1795],{"class":217},[47,39197,30530],{"class":81},[47,39199,228],{"class":221},[47,39201,39202,39204],{"class":49,"line":32705},[47,39203,31353],{"class":85},[47,39205,30539],{"class":221},[47,39207,39208,39210,39212],{"class":49,"line":32711},[47,39209,31343],{"class":221},[47,39211,267],{"class":217},[47,39213,39214],{"class":221},"VGG16().to(device)\n",[47,39216,39217,39219,39221,39223,39225,39227,39229,39231],{"class":49,"line":32722},[47,39218,31353],{"class":85},[47,39220,31356],{"class":221},[47,39222,436],{"class":85},[47,39224,597],{"class":221},[47,39226,31555],{"class":85},[47,39228,597],{"class":221},[47,39230,31555],{"class":85},[47,39232,31369],{"class":221},[171,39234,39235],{"start":92},[109,39236,39237],{},"训练代码",[19,39239,39240],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,39242,39243],{},"解决方式:",[19,39245,39246],{},"①权重初始化",[38,39248,39250],{"className":30432,"code":39249,"language":30434,"meta":43,"style":43},"# 权重初始化,保证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",[26,39251,39252,39257,39262,39274,39279,39287,39292,39305,39310,39324,39329,39338,39343,39352,39357,39362,39375,39380,39394],{"__ignoreMap":43},[47,39253,39254],{"class":49,"line":50},[47,39255,39256],{"class":279},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[47,39258,39259],{"class":49,"line":92},[47,39260,39261],{"class":279},"# 循环遍历模型\n",[47,39263,39264,39266,39268,39270,39272],{"class":49,"line":1273},[47,39265,3118],{"class":217},[47,39267,38922],{"class":221},[47,39269,26097],{"class":217},[47,39271,38927],{"class":85},[47,39273,38930],{"class":221},[47,39275,39276],{"class":49,"line":1288},[47,39277,39278],{"class":279},"    # print(m)\n",[47,39280,39281,39283,39285],{"class":49,"line":1294},[47,39282,3194],{"class":217},[47,39284,38942],{"class":85},[47,39286,38945],{"class":221},[47,39288,39289],{"class":49,"line":1308},[47,39290,39291],{"class":279},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[47,39293,39294,39297,39299,39301,39303],{"class":49,"line":1314},[47,39295,39296],{"class":221},"        nn.init.kaiming_normal_(m.weight,",[47,39298,38958],{"class":5309},[47,39300,267],{"class":217},[47,39302,38963],{"class":81},[47,39304,228],{"class":221},[47,39306,39307],{"class":49,"line":1405},[47,39308,39309],{"class":279},"        # 判断b参数是否存在\n",[47,39311,39312,39314,39316,39318,39320,39322],{"class":49,"line":1411},[47,39313,2590],{"class":217},[47,39315,38978],{"class":221},[47,39317,38981],{"class":217},[47,39319,38984],{"class":217},[47,39321,38987],{"class":85},[47,39323,3832],{"class":221},[47,39325,39326],{"class":49,"line":1423},[47,39327,39328],{"class":279},"            # 如果参数不存在的化初始化b=0\n",[47,39330,39331,39334,39336],{"class":49,"line":1706},[47,39332,39333],{"class":221},"            nn.init.constant_(m.bias,",[47,39335,411],{"class":85},[47,39337,228],{"class":221},[47,39339,39340],{"class":49,"line":1711},[47,39341,39342],{"class":279},"    # 全连接层初始化\n",[47,39344,39345,39348,39350],{"class":49,"line":1717},[47,39346,39347],{"class":217},"    elif",[47,39349,38942],{"class":85},[47,39351,39018],{"class":221},[47,39353,39354],{"class":49,"line":1722},[47,39355,39356],{"class":279},"        # 这个初始化方法是利用的是正太分布的方式\n",[47,39358,39359],{"class":49,"line":1736},[47,39360,39361],{"class":279},"        # 均值为0，方差为0.01\n",[47,39363,39364,39367,39369,39371,39373],{"class":49,"line":1741},[47,39365,39366],{"class":221},"        nn.init.normal_(m.weight,",[47,39368,411],{"class":85},[47,39370,597],{"class":221},[47,39372,39040],{"class":85},[47,39374,228],{"class":221},[47,39376,39377],{"class":49,"line":1747},[47,39378,39379],{"class":279},"        # 初始化b参数\n",[47,39381,39382,39384,39386,39388,39390,39392],{"class":49,"line":1768},[47,39383,2590],{"class":217},[47,39385,38978],{"class":221},[47,39387,38981],{"class":217},[47,39389,38984],{"class":217},[47,39391,38987],{"class":85},[47,39393,3832],{"class":221},[47,39395,39396,39398,39400],{"class":49,"line":1773},[47,39397,39333],{"class":221},[47,39399,411],{"class":85},[47,39401,228],{"class":221},[19,39403,39404],{},"②尽可能地增加批次",[19,39406,39407],{},"训练完整代码：",[38,39409,39410],{"className":30432,"code":37953,"language":30434,"meta":43,"style":43},[26,39411,39412,39418,39428,39438,39448,39452,39468,39476,39494,39498,39502,39512,39548,39552,39588,39592,39620,39624,39628,39638,39674,39678,39714,39718,39746,39750,39754,39764,39800,39804,39840,39844,39880,39884,39912,39916,39920,39930,39966,39970,40006,40010,40046,40050,40078,40082,40086,40096,40132,40136,40172,40176,40212,40216,40244,40248,40252,40262,40266,40270,40274,40294,40298,40310,40314,40326,40330,40334,40338,40342,40354,40358,40366,40370,40382,40386,40400,40404,40412,40416,40424,40428,40432,40444,40448,40462,40470,40474,40478,40486,40496,40506,40516,40526,40536,40546,40552,40556,40560,40572,40592,40598,40606],{"__ignoreMap":43},[47,39413,39414,39416],{"class":49,"line":50},[47,39415,30446],{"class":217},[47,39417,30449],{"class":221},[47,39419,39420,39422,39424,39426],{"class":49,"line":92},[47,39421,30791],{"class":217},[47,39423,37968],{"class":221},[47,39425,30446],{"class":217},[47,39427,37973],{"class":221},[47,39429,39430,39432,39434,39436],{"class":49,"line":1273},[47,39431,30791],{"class":217},[47,39433,30794],{"class":221},[47,39435,30446],{"class":217},[47,39437,30799],{"class":221},[47,39439,39440,39442,39444,39446],{"class":49,"line":1288},[47,39441,30791],{"class":217},[47,39443,30811],{"class":221},[47,39445,30446],{"class":217},[47,39447,30816],{"class":221},[47,39449,39450],{"class":49,"line":1294},[47,39451,2493],{"emptyLinePlaceholder":145},[47,39453,39454,39456,39458,39460,39462,39464,39466],{"class":49,"line":1308},[47,39455,14787],{"class":217},[47,39457,38004],{"class":53},[47,39459,222],{"class":221},[47,39461,30832],{"class":53},[47,39463,777],{"class":221},[47,39465,30837],{"class":53},[47,39467,30840],{"class":221},[47,39469,39470,39472,39474],{"class":49,"line":1314},[47,39471,30855],{"class":217},[47,39473,30858],{"class":85},[47,39475,30861],{"class":221},[47,39477,39478,39480,39482,39484,39486,39488,39490,39492],{"class":49,"line":1405},[47,39479,30871],{"class":85},[47,39481,222],{"class":221},[47,39483,38031],{"class":85},[47,39485,12528],{"class":221},[47,39487,30877],{"class":85},[47,39489,30880],{"class":221},[47,39491,30883],{"class":85},[47,39493,2069],{"class":221},[47,39495,39496],{"class":49,"line":1411},[47,39497,38046],{"class":279},[47,39499,39500],{"class":49,"line":1423},[47,39501,38051],{"class":279},[47,39503,39504,39506,39508,39510],{"class":49,"line":1706},[47,39505,30899],{"class":85},[47,39507,38058],{"class":221},[47,39509,267],{"class":217},[47,39511,38063],{"class":221},[47,39513,39514,39516,39518,39520,39522,39524,39526,39528,39530,39532,39534,39536,39538,39540,39542,39544,39546],{"class":49,"line":1711},[47,39515,38068],{"class":221},[47,39517,30910],{"class":5309},[47,39519,267],{"class":217},[47,39521,436],{"class":85},[47,39523,597],{"class":221},[47,39525,30919],{"class":5309},[47,39527,267],{"class":217},[47,39529,423],{"class":85},[47,39531,597],{"class":221},[47,39533,30928],{"class":5309},[47,39535,267],{"class":217},[47,39537,292],{"class":85},[47,39539,597],{"class":221},[47,39541,30937],{"class":5309},[47,39543,267],{"class":217},[47,39545,436],{"class":85},[47,39547,38101],{"class":221},[47,39549,39550],{"class":49,"line":1717},[47,39551,38106],{"class":221},[47,39553,39554,39556,39558,39560,39562,39564,39566,39568,39570,39572,39574,39576,39578,39580,39582,39584,39586],{"class":49,"line":1722},[47,39555,38068],{"class":221},[47,39557,30910],{"class":5309},[47,39559,267],{"class":217},[47,39561,423],{"class":85},[47,39563,597],{"class":221},[47,39565,30919],{"class":5309},[47,39567,267],{"class":217},[47,39569,423],{"class":85},[47,39571,597],{"class":221},[47,39573,30928],{"class":5309},[47,39575,267],{"class":217},[47,39577,292],{"class":85},[47,39579,597],{"class":221},[47,39581,30937],{"class":5309},[47,39583,267],{"class":217},[47,39585,436],{"class":85},[47,39587,38101],{"class":221},[47,39589,39590],{"class":49,"line":1736},[47,39591,38106],{"class":221},[47,39593,39594,39596,39598,39600,39602,39604,39606,39608,39610,39612,39614,39616,39618],{"class":49,"line":1741},[47,39595,38151],{"class":221},[47,39597,30928],{"class":5309},[47,39599,267],{"class":217},[47,39601,298],{"class":85},[47,39603,597],{"class":221},[47,39605,30983],{"class":5309},[47,39607,267],{"class":217},[47,39609,298],{"class":85},[47,39611,597],{"class":221},[47,39613,30937],{"class":5309},[47,39615,267],{"class":217},[47,39617,411],{"class":85},[47,39619,228],{"class":221},[47,39621,39622],{"class":49,"line":1747},[47,39623,38180],{"class":221},[47,39625,39626],{"class":49,"line":1768},[47,39627,38185],{"class":279},[47,39629,39630,39632,39634,39636],{"class":49,"line":1773},[47,39631,30899],{"class":85},[47,39633,38192],{"class":221},[47,39635,267],{"class":217},[47,39637,38063],{"class":221},[47,39639,39640,39642,39644,39646,39648,39650,39652,39654,39656,39658,39660,39662,39664,39666,39668,39670,39672],{"class":49,"line":1787},[47,39641,38068],{"class":221},[47,39643,30910],{"class":5309},[47,39645,267],{"class":217},[47,39647,423],{"class":85},[47,39649,597],{"class":221},[47,39651,30919],{"class":5309},[47,39653,267],{"class":217},[47,39655,32124],{"class":85},[47,39657,597],{"class":221},[47,39659,30928],{"class":5309},[47,39661,267],{"class":217},[47,39663,292],{"class":85},[47,39665,597],{"class":221},[47,39667,30937],{"class":5309},[47,39669,267],{"class":217},[47,39671,436],{"class":85},[47,39673,38101],{"class":221},[47,39675,39676],{"class":49,"line":1792},[47,39677,38106],{"class":221},[47,39679,39680,39682,39684,39686,39688,39690,39692,39694,39696,39698,39700,39702,39704,39706,39708,39710,39712],{"class":49,"line":1821},[47,39681,38068],{"class":221},[47,39683,30910],{"class":5309},[47,39685,267],{"class":217},[47,39687,32124],{"class":85},[47,39689,597],{"class":221},[47,39691,30919],{"class":5309},[47,39693,267],{"class":217},[47,39695,32124],{"class":85},[47,39697,597],{"class":221},[47,39699,30928],{"class":5309},[47,39701,267],{"class":217},[47,39703,292],{"class":85},[47,39705,597],{"class":221},[47,39707,30937],{"class":5309},[47,39709,267],{"class":217},[47,39711,436],{"class":85},[47,39713,38101],{"class":221},[47,39715,39716],{"class":49,"line":1826},[47,39717,38106],{"class":221},[47,39719,39720,39722,39724,39726,39728,39730,39732,39734,39736,39738,39740,39742,39744],{"class":49,"line":1843},[47,39721,38151],{"class":221},[47,39723,30928],{"class":5309},[47,39725,267],{"class":217},[47,39727,298],{"class":85},[47,39729,597],{"class":221},[47,39731,30983],{"class":5309},[47,39733,267],{"class":217},[47,39735,298],{"class":85},[47,39737,597],{"class":221},[47,39739,30937],{"class":5309},[47,39741,267],{"class":217},[47,39743,411],{"class":85},[47,39745,228],{"class":221},[47,39747,39748],{"class":49,"line":1848},[47,39749,38180],{"class":221},[47,39751,39752],{"class":49,"line":1853},[47,39753,38313],{"class":279},[47,39755,39756,39758,39760,39762],{"class":49,"line":1858},[47,39757,30899],{"class":85},[47,39759,38320],{"class":221},[47,39761,267],{"class":217},[47,39763,38063],{"class":221},[47,39765,39766,39768,39770,39772,39774,39776,39778,39780,39782,39784,39786,39788,39790,39792,39794,39796,39798],{"class":49,"line":1872},[47,39767,38068],{"class":221},[47,39769,30910],{"class":5309},[47,39771,267],{"class":217},[47,39773,32124],{"class":85},[47,39775,597],{"class":221},[47,39777,30919],{"class":5309},[47,39779,267],{"class":217},[47,39781,34924],{"class":85},[47,39783,597],{"class":221},[47,39785,30928],{"class":5309},[47,39787,267],{"class":217},[47,39789,292],{"class":85},[47,39791,597],{"class":221},[47,39793,30937],{"class":5309},[47,39795,267],{"class":217},[47,39797,436],{"class":85},[47,39799,38101],{"class":221},[47,39801,39802],{"class":49,"line":1877},[47,39803,38106],{"class":221},[47,39805,39806,39808,39810,39812,39814,39816,39818,39820,39822,39824,39826,39828,39830,39832,39834,39836,39838],{"class":49,"line":2670},[47,39807,38068],{"class":221},[47,39809,30910],{"class":5309},[47,39811,267],{"class":217},[47,39813,34924],{"class":85},[47,39815,597],{"class":221},[47,39817,30919],{"class":5309},[47,39819,267],{"class":217},[47,39821,34924],{"class":85},[47,39823,597],{"class":221},[47,39825,30928],{"class":5309},[47,39827,267],{"class":217},[47,39829,292],{"class":85},[47,39831,597],{"class":221},[47,39833,30937],{"class":5309},[47,39835,267],{"class":217},[47,39837,436],{"class":85},[47,39839,38101],{"class":221},[47,39841,39842],{"class":49,"line":2684},[47,39843,38106],{"class":221},[47,39845,39846,39848,39850,39852,39854,39856,39858,39860,39862,39864,39866,39868,39870,39872,39874,39876,39878],{"class":49,"line":2692},[47,39847,38068],{"class":221},[47,39849,30910],{"class":5309},[47,39851,267],{"class":217},[47,39853,34924],{"class":85},[47,39855,597],{"class":221},[47,39857,30919],{"class":5309},[47,39859,267],{"class":217},[47,39861,34924],{"class":85},[47,39863,597],{"class":221},[47,39865,30928],{"class":5309},[47,39867,267],{"class":217},[47,39869,292],{"class":85},[47,39871,597],{"class":221},[47,39873,30937],{"class":5309},[47,39875,267],{"class":217},[47,39877,436],{"class":85},[47,39879,38101],{"class":221},[47,39881,39882],{"class":49,"line":2697},[47,39883,38106],{"class":221},[47,39885,39886,39888,39890,39892,39894,39896,39898,39900,39902,39904,39906,39908,39910],{"class":49,"line":2703},[47,39887,38151],{"class":221},[47,39889,30928],{"class":5309},[47,39891,267],{"class":217},[47,39893,298],{"class":85},[47,39895,597],{"class":221},[47,39897,30983],{"class":5309},[47,39899,267],{"class":217},[47,39901,298],{"class":85},[47,39903,597],{"class":221},[47,39905,30937],{"class":5309},[47,39907,267],{"class":217},[47,39909,411],{"class":85},[47,39911,228],{"class":221},[47,39913,39914],{"class":49,"line":2709},[47,39915,38180],{"class":221},[47,39917,39918],{"class":49,"line":2714},[47,39919,38481],{"class":279},[47,39921,39922,39924,39926,39928],{"class":49,"line":8041},[47,39923,30899],{"class":85},[47,39925,38488],{"class":221},[47,39927,267],{"class":217},[47,39929,38063],{"class":221},[47,39931,39932,39934,39936,39938,39940,39942,39944,39946,39948,39950,39952,39954,39956,39958,39960,39962,39964],{"class":49,"line":8065},[47,39933,38068],{"class":221},[47,39935,30910],{"class":5309},[47,39937,267],{"class":217},[47,39939,34924],{"class":85},[47,39941,597],{"class":221},[47,39943,30919],{"class":5309},[47,39945,267],{"class":217},[47,39947,38511],{"class":85},[47,39949,597],{"class":221},[47,39951,30928],{"class":5309},[47,39953,267],{"class":217},[47,39955,292],{"class":85},[47,39957,597],{"class":221},[47,39959,30937],{"class":5309},[47,39961,267],{"class":217},[47,39963,436],{"class":85},[47,39965,38101],{"class":221},[47,39967,39968],{"class":49,"line":8070},[47,39969,38106],{"class":221},[47,39971,39972,39974,39976,39978,39980,39982,39984,39986,39988,39990,39992,39994,39996,39998,40000,40002,40004],{"class":49,"line":8076},[47,39973,38068],{"class":221},[47,39975,30910],{"class":5309},[47,39977,267],{"class":217},[47,39979,38511],{"class":85},[47,39981,597],{"class":221},[47,39983,30919],{"class":5309},[47,39985,267],{"class":217},[47,39987,38511],{"class":85},[47,39989,597],{"class":221},[47,39991,30928],{"class":5309},[47,39993,267],{"class":217},[47,39995,292],{"class":85},[47,39997,597],{"class":221},[47,39999,30937],{"class":5309},[47,40001,267],{"class":217},[47,40003,436],{"class":85},[47,40005,38101],{"class":221},[47,40007,40008],{"class":49,"line":8103},[47,40009,38106],{"class":221},[47,40011,40012,40014,40016,40018,40020,40022,40024,40026,40028,40030,40032,40034,40036,40038,40040,40042,40044],{"class":49,"line":8108},[47,40013,38068],{"class":221},[47,40015,30910],{"class":5309},[47,40017,267],{"class":217},[47,40019,38511],{"class":85},[47,40021,597],{"class":221},[47,40023,30919],{"class":5309},[47,40025,267],{"class":217},[47,40027,38511],{"class":85},[47,40029,597],{"class":221},[47,40031,30928],{"class":5309},[47,40033,267],{"class":217},[47,40035,292],{"class":85},[47,40037,597],{"class":221},[47,40039,30937],{"class":5309},[47,40041,267],{"class":217},[47,40043,436],{"class":85},[47,40045,38101],{"class":221},[47,40047,40048],{"class":49,"line":8114},[47,40049,38106],{"class":221},[47,40051,40052,40054,40056,40058,40060,40062,40064,40066,40068,40070,40072,40074,40076],{"class":49,"line":8126},[47,40053,38151],{"class":221},[47,40055,30928],{"class":5309},[47,40057,267],{"class":217},[47,40059,298],{"class":85},[47,40061,597],{"class":221},[47,40063,30983],{"class":5309},[47,40065,267],{"class":217},[47,40067,298],{"class":85},[47,40069,597],{"class":221},[47,40071,30937],{"class":5309},[47,40073,267],{"class":217},[47,40075,411],{"class":85},[47,40077,228],{"class":221},[47,40079,40080],{"class":49,"line":8138},[47,40081,38180],{"class":221},[47,40083,40084],{"class":49,"line":8150},[47,40085,38650],{"class":279},[47,40087,40088,40090,40092,40094],{"class":49,"line":9809},[47,40089,30899],{"class":85},[47,40091,38657],{"class":221},[47,40093,267],{"class":217},[47,40095,38063],{"class":221},[47,40097,40098,40100,40102,40104,40106,40108,40110,40112,40114,40116,40118,40120,40122,40124,40126,40128,40130],{"class":49,"line":9834},[47,40099,38068],{"class":221},[47,40101,30910],{"class":5309},[47,40103,267],{"class":217},[47,40105,38511],{"class":85},[47,40107,597],{"class":221},[47,40109,30919],{"class":5309},[47,40111,267],{"class":217},[47,40113,38511],{"class":85},[47,40115,597],{"class":221},[47,40117,30928],{"class":5309},[47,40119,267],{"class":217},[47,40121,292],{"class":85},[47,40123,597],{"class":221},[47,40125,30937],{"class":5309},[47,40127,267],{"class":217},[47,40129,436],{"class":85},[47,40131,38101],{"class":221},[47,40133,40134],{"class":49,"line":9857},[47,40135,38106],{"class":221},[47,40137,40138,40140,40142,40144,40146,40148,40150,40152,40154,40156,40158,40160,40162,40164,40166,40168,40170],{"class":49,"line":9881},[47,40139,38068],{"class":221},[47,40141,30910],{"class":5309},[47,40143,267],{"class":217},[47,40145,38511],{"class":85},[47,40147,597],{"class":221},[47,40149,30919],{"class":5309},[47,40151,267],{"class":217},[47,40153,38511],{"class":85},[47,40155,597],{"class":221},[47,40157,30928],{"class":5309},[47,40159,267],{"class":217},[47,40161,292],{"class":85},[47,40163,597],{"class":221},[47,40165,30937],{"class":5309},[47,40167,267],{"class":217},[47,40169,436],{"class":85},[47,40171,38101],{"class":221},[47,40173,40174],{"class":49,"line":9886},[47,40175,38106],{"class":221},[47,40177,40178,40180,40182,40184,40186,40188,40190,40192,40194,40196,40198,40200,40202,40204,40206,40208,40210],{"class":49,"line":9891},[47,40179,38068],{"class":221},[47,40181,30910],{"class":5309},[47,40183,267],{"class":217},[47,40185,38511],{"class":85},[47,40187,597],{"class":221},[47,40189,30919],{"class":5309},[47,40191,267],{"class":217},[47,40193,38511],{"class":85},[47,40195,597],{"class":221},[47,40197,30928],{"class":5309},[47,40199,267],{"class":217},[47,40201,292],{"class":85},[47,40203,597],{"class":221},[47,40205,30937],{"class":5309},[47,40207,267],{"class":217},[47,40209,436],{"class":85},[47,40211,38101],{"class":221},[47,40213,40214],{"class":49,"line":9896},[47,40215,38106],{"class":221},[47,40217,40218,40220,40222,40224,40226,40228,40230,40232,40234,40236,40238,40240,40242],{"class":49,"line":9905},[47,40219,38151],{"class":221},[47,40221,30928],{"class":5309},[47,40223,267],{"class":217},[47,40225,298],{"class":85},[47,40227,597],{"class":221},[47,40229,30983],{"class":5309},[47,40231,267],{"class":217},[47,40233,298],{"class":85},[47,40235,597],{"class":221},[47,40237,30937],{"class":5309},[47,40239,267],{"class":217},[47,40241,411],{"class":85},[47,40243,228],{"class":221},[47,40245,40246],{"class":49,"line":9910},[47,40247,38180],{"class":221},[47,40249,40250],{"class":49,"line":9916},[47,40251,38818],{"class":279},[47,40253,40254,40256,40258,40260],{"class":49,"line":9937},[47,40255,30899],{"class":85},[47,40257,38825],{"class":221},[47,40259,267],{"class":217},[47,40261,38063],{"class":221},[47,40263,40264],{"class":49,"line":9943},[47,40265,38834],{"class":279},[47,40267,40268],{"class":49,"line":9957},[47,40269,38839],{"class":279},[47,40271,40272],{"class":49,"line":9963},[47,40273,38844],{"class":221},[47,40275,40276,40278,40280,40282,40284,40286,40288,40290,40292],{"class":49,"line":9990},[47,40277,38849],{"class":221},[47,40279,588],{"class":85},[47,40281,674],{"class":217},[47,40283,588],{"class":85},[47,40285,674],{"class":217},[47,40287,38511],{"class":85},[47,40289,597],{"class":221},[47,40291,34924],{"class":85},[47,40293,38101],{"class":221},[47,40295,40296],{"class":49,"line":9999},[47,40297,38106],{"class":221},[47,40299,40300,40302,40304,40306,40308],{"class":49,"line":10005},[47,40301,38849],{"class":221},[47,40303,34924],{"class":85},[47,40305,597],{"class":221},[47,40307,32124],{"class":85},[47,40309,38101],{"class":221},[47,40311,40312],{"class":49,"line":10013},[47,40313,38106],{"class":221},[47,40315,40316,40318,40320,40322,40324],{"class":49,"line":10018},[47,40317,38849],{"class":221},[47,40319,32124],{"class":85},[47,40321,597],{"class":221},[47,40323,665],{"class":85},[47,40325,228],{"class":221},[47,40327,40328],{"class":49,"line":16697},[47,40329,38180],{"class":221},[47,40331,40332],{"class":49,"line":16703},[47,40333,2493],{"emptyLinePlaceholder":145},[47,40335,40336],{"class":49,"line":16726},[47,40337,38910],{"class":279},[47,40339,40340],{"class":49,"line":16732},[47,40341,38915],{"class":279},[47,40343,40344,40346,40348,40350,40352],{"class":49,"line":16755},[47,40345,3496],{"class":217},[47,40347,38922],{"class":221},[47,40349,26097],{"class":217},[47,40351,38927],{"class":85},[47,40353,38930],{"class":221},[47,40355,40356],{"class":49,"line":16769},[47,40357,38935],{"class":279},[47,40359,40360,40362,40364],{"class":49,"line":16789},[47,40361,4735],{"class":217},[47,40363,38942],{"class":85},[47,40365,38945],{"class":221},[47,40367,40368],{"class":49,"line":16795},[47,40369,38950],{"class":279},[47,40371,40372,40374,40376,40378,40380],{"class":49,"line":16806},[47,40373,38955],{"class":221},[47,40375,38958],{"class":5309},[47,40377,267],{"class":217},[47,40379,38963],{"class":81},[47,40381,228],{"class":221},[47,40383,40384],{"class":49,"line":16829},[47,40385,38970],{"class":279},[47,40387,40388,40390,40392,40394,40396,40398],{"class":49,"line":16851},[47,40389,38975],{"class":217},[47,40391,38978],{"class":221},[47,40393,38981],{"class":217},[47,40395,38984],{"class":217},[47,40397,38987],{"class":85},[47,40399,3832],{"class":221},[47,40401,40402],{"class":49,"line":16856},[47,40403,38994],{"class":279},[47,40405,40406,40408,40410],{"class":49,"line":16862},[47,40407,38999],{"class":221},[47,40409,411],{"class":85},[47,40411,228],{"class":221},[47,40413,40414],{"class":49,"line":16876},[47,40415,39008],{"class":279},[47,40417,40418,40420,40422],{"class":49,"line":16889},[47,40419,39013],{"class":217},[47,40421,38942],{"class":85},[47,40423,39018],{"class":221},[47,40425,40426],{"class":49,"line":16894},[47,40427,39023],{"class":279},[47,40429,40430],{"class":49,"line":16908},[47,40431,39028],{"class":279},[47,40433,40434,40436,40438,40440,40442],{"class":49,"line":16913},[47,40435,39033],{"class":221},[47,40437,411],{"class":85},[47,40439,597],{"class":221},[47,40441,39040],{"class":85},[47,40443,228],{"class":221},[47,40445,40446],{"class":49,"line":16919},[47,40447,39047],{"class":279},[47,40449,40450,40452,40454,40456,40458,40460],{"class":49,"line":16924},[47,40451,38975],{"class":217},[47,40453,38978],{"class":221},[47,40455,38981],{"class":217},[47,40457,38984],{"class":217},[47,40459,38987],{"class":85},[47,40461,3832],{"class":221},[47,40463,40464,40466,40468],{"class":49,"line":16938},[47,40465,38999],{"class":221},[47,40467,411],{"class":85},[47,40469,228],{"class":221},[47,40471,40472],{"class":49,"line":16943},[47,40473,2493],{"emptyLinePlaceholder":145},[47,40475,40476],{"class":49,"line":16948},[47,40477,35219],{"class":279},[47,40479,40480,40482,40484],{"class":49,"line":16962},[47,40481,30855],{"class":217},[47,40483,31147],{"class":53},[47,40485,31150],{"class":221},[47,40487,40488,40490,40492,40494],{"class":49,"line":16974},[47,40489,31155],{"class":221},[47,40491,267],{"class":217},[47,40493,30877],{"class":85},[47,40495,39096],{"class":221},[47,40497,40498,40500,40502,40504],{"class":49,"line":16979},[47,40499,31155],{"class":221},[47,40501,267],{"class":217},[47,40503,30877],{"class":85},[47,40505,39107],{"class":221},[47,40507,40508,40510,40512,40514],{"class":49,"line":16992},[47,40509,31155],{"class":221},[47,40511,267],{"class":217},[47,40513,30877],{"class":85},[47,40515,39118],{"class":221},[47,40517,40518,40520,40522,40524],{"class":49,"line":16997},[47,40519,31155],{"class":221},[47,40521,267],{"class":217},[47,40523,30877],{"class":85},[47,40525,39129],{"class":221},[47,40527,40528,40530,40532,40534],{"class":49,"line":17002},[47,40529,31155],{"class":221},[47,40531,267],{"class":217},[47,40533,30877],{"class":85},[47,40535,39140],{"class":221},[47,40537,40538,40540,40542,40544],{"class":49,"line":17007},[47,40539,31155],{"class":221},[47,40541,267],{"class":217},[47,40543,30877],{"class":85},[47,40545,39151],{"class":221},[47,40547,40548,40550],{"class":49,"line":17020},[47,40549,14845],{"class":217},[47,40551,31263],{"class":221},[47,40553,40554],{"class":49,"line":17025},[47,40555,2493],{"emptyLinePlaceholder":145},[47,40557,40558],{"class":49,"line":32687},[47,40559,39166],{"class":279},[47,40561,40562,40564,40566,40568,40570],{"class":49,"line":32693},[47,40563,1625],{"class":217},[47,40565,31274],{"class":85},[47,40567,3042],{"class":217},[47,40569,39177],{"class":81},[47,40571,3832],{"class":221},[47,40573,40574,40576,40578,40580,40582,40584,40586,40588,40590],{"class":49,"line":32699},[47,40575,31291],{"class":221},[47,40577,267],{"class":217},[47,40579,30505],{"class":221},[47,40581,31298],{"class":81},[47,40583,1798],{"class":217},[47,40585,31303],{"class":221},[47,40587,1795],{"class":217},[47,40589,30530],{"class":81},[47,40591,228],{"class":221},[47,40593,40594,40596],{"class":49,"line":32705},[47,40595,31353],{"class":85},[47,40597,30539],{"class":221},[47,40599,40600,40602,40604],{"class":49,"line":32711},[47,40601,31343],{"class":221},[47,40603,267],{"class":217},[47,40605,39214],{"class":221},[47,40607,40608,40610,40612,40614,40616,40618,40620,40622],{"class":49,"line":32722},[47,40609,31353],{"class":85},[47,40611,31356],{"class":221},[47,40613,436],{"class":85},[47,40615,597],{"class":221},[47,40617,31555],{"class":85},[47,40619,597],{"class":221},[47,40621,31555],{"class":85},[47,40623,31369],{"class":221},[171,40625,40626],{"start":1273},[109,40627,40628],{},"测试代码",[38,40630,40632],{"className":30432,"code":40631,"language":30434,"meta":43,"style":43},"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",[26,40633,40634,40640,40650,40660,40664,40674,40685,40689,40693,40697,40705,40721,40731,40747,40757,40771,40775,40785,40795,40805,40811,40815,40819,40827,40831,40847,40855,40859,40863,40871,40879,40883,40887,40891,40895,40901,40905,40915,40923,40931,40935,40939,40943,40951,40955,40971,40975,40979,40983,40995,40999,41011,41015,41019,41031,41035,41045,41049,41053,41065,41069,41078,41082,41086,41094,41098,41106,41110,41114,41118,41122,41126,41142,41150,41154,41158,41206,41212,41216,41226,41234,41242,41246,41250,41254,41258,41266,41270,41286,41290,41298,41306],{"__ignoreMap":43},[47,40635,40636,40638],{"class":49,"line":50},[47,40637,30446],{"class":217},[47,40639,30449],{"class":221},[47,40641,40642,40644,40646,40648],{"class":49,"line":92},[47,40643,30446],{"class":217},[47,40645,31469],{"class":221},[47,40647,31437],{"class":217},[47,40649,31474],{"class":221},[47,40651,40652,40654,40656,40658],{"class":49,"line":1273},[47,40653,30791],{"class":217},[47,40655,31452],{"class":221},[47,40657,30446],{"class":217},[47,40659,31457],{"class":221},[47,40661,40662],{"class":49,"line":1288},[47,40663,33976],{"class":279},[47,40665,40666,40668,40670,40672],{"class":49,"line":1294},[47,40667,30791],{"class":217},[47,40669,31422],{"class":221},[47,40671,30446],{"class":217},[47,40673,31427],{"class":221},[47,40675,40676,40678,40680,40682],{"class":49,"line":1308},[47,40677,30791],{"class":217},[47,40679,31968],{"class":221},[47,40681,30446],{"class":217},[47,40683,40684],{"class":85}," VGG16\n",[47,40686,40687],{"class":49,"line":1314},[47,40688,2493],{"emptyLinePlaceholder":145},[47,40690,40691],{"class":49,"line":1405},[47,40692,2493],{"emptyLinePlaceholder":145},[47,40694,40695],{"class":49,"line":1411},[47,40696,34005],{"class":279},[47,40698,40699,40701,40703],{"class":49,"line":1423},[47,40700,32001],{"class":217},[47,40702,34012],{"class":53},[47,40704,32007],{"class":221},[47,40706,40707,40709,40711,40713,40715,40717,40719],{"class":49,"line":1706},[47,40708,34019],{"class":221},[47,40710,267],{"class":217},[47,40712,31509],{"class":221},[47,40714,31512],{"class":5309},[47,40716,267],{"class":217},[47,40718,31517],{"class":81},[47,40720,31520],{"class":221},[47,40722,40723,40725,40727,40729],{"class":49,"line":1711},[47,40724,34036],{"class":5309},[47,40726,267],{"class":217},[47,40728,34041],{"class":85},[47,40730,31520],{"class":221},[47,40732,40733,40735,40737,40739,40741,40743,40745],{"class":49,"line":1717},[47,40734,34048],{"class":5309},[47,40736,267],{"class":217},[47,40738,31547],{"class":221},[47,40740,31550],{"class":5309},[47,40742,267],{"class":217},[47,40744,31555],{"class":85},[47,40746,31558],{"class":221},[47,40748,40749,40751,40753,40755],{"class":49,"line":1722},[47,40750,34065],{"class":5309},[47,40752,267],{"class":217},[47,40754,31530],{"class":85},[47,40756,228],{"class":221},[47,40758,40759,40761,40763,40765,40767,40769],{"class":49,"line":1736},[47,40760,34076],{"class":221},[47,40762,267],{"class":217},[47,40764,31588],{"class":221},[47,40766,31591],{"class":5309},[47,40768,267],{"class":217},[47,40770,34087],{"class":221},[47,40772,40773],{"class":49,"line":1741},[47,40774,34092],{"class":279},[47,40776,40777,40779,40781,40783],{"class":49,"line":1747},[47,40778,34097],{"class":5309},[47,40780,267],{"class":217},[47,40782,436],{"class":85},[47,40784,31520],{"class":221},[47,40786,40787,40789,40791,40793],{"class":49,"line":1768},[47,40788,34108],{"class":5309},[47,40790,267],{"class":217},[47,40792,31530],{"class":85},[47,40794,31520],{"class":221},[47,40796,40797,40799,40801,40803],{"class":49,"line":1773},[47,40798,34119],{"class":5309},[47,40800,267],{"class":217},[47,40802,411],{"class":85},[47,40804,228],{"class":221},[47,40806,40807,40809],{"class":49,"line":1787},[47,40808,4183],{"class":217},[47,40810,34132],{"class":221},[47,40812,40813],{"class":49,"line":1792},[47,40814,2493],{"emptyLinePlaceholder":145},[47,40816,40817],{"class":49,"line":1821},[47,40818,34141],{"class":279},[47,40820,40821,40823,40825],{"class":49,"line":1826},[47,40822,32001],{"class":217},[47,40824,34148],{"class":53},[47,40826,34151],{"class":221},[47,40828,40829],{"class":49,"line":1843},[47,40830,34156],{"class":279},[47,40832,40833,40835,40837,40839,40841,40843,40845],{"class":49,"line":1848},[47,40834,31291],{"class":221},[47,40836,267],{"class":217},[47,40838,31298],{"class":81},[47,40840,1798],{"class":217},[47,40842,31303],{"class":221},[47,40844,1795],{"class":217},[47,40846,34173],{"class":81},[47,40848,40849,40851,40853],{"class":49,"line":1853},[47,40850,31343],{"class":221},[47,40852,267],{"class":217},[47,40854,32343],{"class":221},[47,40856,40857],{"class":49,"line":1858},[47,40858,2493],{"emptyLinePlaceholder":145},[47,40860,40861],{"class":49,"line":1872},[47,40862,34190],{"class":279},[47,40864,40865,40867,40869],{"class":49,"line":1877},[47,40866,34195],{"class":221},[47,40868,267],{"class":217},[47,40870,32396],{"class":85},[47,40872,40873,40875,40877],{"class":49,"line":2670},[47,40874,34204],{"class":221},[47,40876,267],{"class":217},[47,40878,3178],{"class":85},[47,40880,40881],{"class":49,"line":2684},[47,40882,2493],{"emptyLinePlaceholder":145},[47,40884,40885],{"class":49,"line":2692},[47,40886,34217],{"class":279},[47,40888,40889],{"class":49,"line":2697},[47,40890,34222],{"class":279},[47,40892,40893],{"class":49,"line":2703},[47,40894,34227],{"class":279},[47,40896,40897,40899],{"class":49,"line":2709},[47,40898,34232],{"class":217},[47,40900,32938],{"class":221},[47,40902,40903],{"class":49,"line":2714},[47,40904,34239],{"class":279},[47,40906,40907,40909,40911,40913],{"class":49,"line":8041},[47,40908,3496],{"class":217},[47,40910,34246],{"class":221},[47,40912,26097],{"class":217},[47,40914,34251],{"class":221},[47,40916,40917,40919,40921],{"class":49,"line":8065},[47,40918,34256],{"class":221},[47,40920,267],{"class":217},[47,40922,34261],{"class":221},[47,40924,40925,40927,40929],{"class":49,"line":8070},[47,40926,34266],{"class":221},[47,40928,267],{"class":217},[47,40930,34271],{"class":221},[47,40932,40933],{"class":49,"line":8076},[47,40934,34276],{"class":279},[47,40936,40937],{"class":49,"line":8103},[47,40938,32929],{"class":221},[47,40940,40941],{"class":49,"line":8108},[47,40942,34285],{"class":279},[47,40944,40945,40947,40949],{"class":49,"line":8114},[47,40946,32714],{"class":221},[47,40948,267],{"class":217},[47,40950,34294],{"class":221},[47,40952,40953],{"class":49,"line":8126},[47,40954,34299],{"class":279},[47,40956,40957,40959,40961,40963,40965,40967,40969],{"class":49,"line":8138},[47,40958,32731],{"class":221},[47,40960,267],{"class":217},[47,40962,32736],{"class":221},[47,40964,32739],{"class":5309},[47,40966,267],{"class":217},[47,40968,436],{"class":85},[47,40970,228],{"class":221},[47,40972,40973],{"class":49,"line":8150},[47,40974,34320],{"class":279},[47,40976,40977],{"class":49,"line":9809},[47,40978,34325],{"class":279},[47,40980,40981],{"class":49,"line":9834},[47,40982,34330],{"class":279},[47,40984,40985,40987,40989,40991,40993],{"class":49,"line":9857},[47,40986,34335],{"class":221},[47,40988,9570],{"class":217},[47,40990,32841],{"class":221},[47,40992,3042],{"class":217},[47,40994,34344],{"class":221},[47,40996,40997],{"class":49,"line":9881},[47,40998,34349],{"class":279},[47,41000,41001,41003,41005,41007,41009],{"class":49,"line":9886},[47,41002,34354],{"class":221},[47,41004,9570],{"class":217},[47,41006,34359],{"class":221},[47,41008,411],{"class":85},[47,41010,228],{"class":221},[47,41012,41013],{"class":49,"line":9891},[47,41014,2493],{"emptyLinePlaceholder":145},[47,41016,41017],{"class":49,"line":9896},[47,41018,34372],{"class":279},[47,41020,41021,41023,41025,41027,41029],{"class":49,"line":9905},[47,41022,34377],{"class":221},[47,41024,267],{"class":217},[47,41026,34382],{"class":221},[47,41028,803],{"class":217},[47,41030,34387],{"class":221},[47,41032,41033],{"class":49,"line":9910},[47,41034,34392],{"class":279},[47,41036,41037,41039,41041,41043],{"class":49,"line":9916},[47,41038,32505],{"class":85},[47,41040,222],{"class":221},[47,41042,34401],{"class":81},[47,41044,34404],{"class":221},[47,41046,41047],{"class":49,"line":9937},[47,41048,2493],{"emptyLinePlaceholder":145},[47,41050,41051],{"class":49,"line":9943},[47,41052,34413],{"class":279},[47,41054,41055,41057,41059,41061,41063],{"class":49,"line":9957},[47,41056,1625],{"class":217},[47,41058,31274],{"class":85},[47,41060,3042],{"class":217},[47,41062,31279],{"class":81},[47,41064,3832],{"class":221},[47,41066,41067],{"class":49,"line":9963},[47,41068,34430],{"class":279},[47,41070,41071,41073,41075],{"class":49,"line":9990},[47,41072,31343],{"class":221},[47,41074,267],{"class":217},[47,41076,41077],{"class":221},"VGG16()\n",[47,41079,41080],{"class":49,"line":9999},[47,41081,34443],{"class":279},[47,41083,41084],{"class":49,"line":10005},[47,41085,34448],{"class":279},[47,41087,41088,41090,41092],{"class":49,"line":10013},[47,41089,34453],{"class":221},[47,41091,34456],{"class":81},[47,41093,30551],{"class":221},[47,41095,41096],{"class":49,"line":10018},[47,41097,34463],{"class":279},[47,41099,41100,41102,41104],{"class":49,"line":16697},[47,41101,34076],{"class":221},[47,41103,267],{"class":217},[47,41105,34472],{"class":221},[47,41107,41108],{"class":49,"line":16703},[47,41109,34477],{"class":279},[47,41111,41112],{"class":49,"line":16726},[47,41113,34482],{"class":221},[47,41115,41116],{"class":49,"line":16732},[47,41117,2493],{"emptyLinePlaceholder":145},[47,41119,41120],{"class":49,"line":16755},[47,41121,34491],{"class":279},[47,41123,41124],{"class":49,"line":16769},[47,41125,34496],{"class":279},[47,41127,41128,41130,41132,41134,41136,41138,41140],{"class":49,"line":16789},[47,41129,31291],{"class":221},[47,41131,267],{"class":217},[47,41133,31298],{"class":81},[47,41135,1798],{"class":217},[47,41137,31303],{"class":221},[47,41139,1795],{"class":217},[47,41141,34173],{"class":81},[47,41143,41144,41146,41148],{"class":49,"line":16795},[47,41145,31343],{"class":221},[47,41147,267],{"class":217},[47,41149,32343],{"class":221},[47,41151,41152],{"class":49,"line":16806},[47,41153,34525],{"class":279},[47,41155,41156],{"class":49,"line":16829},[47,41157,34530],{"class":279},[47,41159,41160,41162,41164,41166,41168,41170,41172,41174,41176,41178,41180,41182,41184,41186,41188,41190,41192,41194,41196,41198,41200,41202,41204],{"class":49,"line":16851},[47,41161,34535],{"class":221},[47,41163,267],{"class":217},[47,41165,1109],{"class":221},[47,41167,34542],{"class":81},[47,41169,597],{"class":221},[47,41171,34547],{"class":81},[47,41173,597],{"class":221},[47,41175,34552],{"class":81},[47,41177,597],{"class":221},[47,41179,34557],{"class":81},[47,41181,597],{"class":221},[47,41183,34562],{"class":81},[47,41185,597],{"class":221},[47,41187,34567],{"class":81},[47,41189,597],{"class":221},[47,41191,34572],{"class":81},[47,41193,597],{"class":221},[47,41195,34577],{"class":81},[47,41197,597],{"class":221},[47,41199,34582],{"class":81},[47,41201,597],{"class":221},[47,41203,34587],{"class":81},[47,41205,33300],{"class":221},[47,41207,41208,41210],{"class":49,"line":16856},[47,41209,34232],{"class":217},[47,41211,32938],{"class":221},[47,41213,41214],{"class":49,"line":16862},[47,41215,34600],{"class":279},[47,41217,41218,41220,41222,41224],{"class":49,"line":16876},[47,41219,3496],{"class":217},[47,41221,34607],{"class":221},[47,41223,26097],{"class":217},[47,41225,34251],{"class":221},[47,41227,41228,41230,41232],{"class":49,"line":16889},[47,41229,32664],{"class":221},[47,41231,267],{"class":217},[47,41233,32669],{"class":221},[47,41235,41236,41238,41240],{"class":49,"line":16894},[47,41237,32679],{"class":221},[47,41239,267],{"class":217},[47,41241,32684],{"class":221},[47,41243,41244],{"class":49,"line":16908},[47,41245,2493],{"emptyLinePlaceholder":145},[47,41247,41248],{"class":49,"line":16913},[47,41249,34636],{"class":279},[47,41251,41252],{"class":49,"line":16919},[47,41253,32929],{"class":221},[47,41255,41256],{"class":49,"line":16924},[47,41257,34645],{"class":279},[47,41259,41260,41262,41264],{"class":49,"line":16938},[47,41261,32714],{"class":221},[47,41263,267],{"class":217},[47,41265,32719],{"class":221},[47,41267,41268],{"class":49,"line":16943},[47,41269,34658],{"class":279},[47,41271,41272,41274,41276,41278,41280,41282,41284],{"class":49,"line":16948},[47,41273,32731],{"class":221},[47,41275,267],{"class":217},[47,41277,32736],{"class":221},[47,41279,32739],{"class":5309},[47,41281,267],{"class":217},[47,41283,436],{"class":85},[47,41285,228],{"class":221},[47,41287,41288],{"class":49,"line":16962},[47,41289,34679],{"class":279},[47,41291,41292,41294,41296],{"class":49,"line":16974},[47,41293,34684],{"class":221},[47,41295,267],{"class":217},[47,41297,34689],{"class":221},[47,41299,41300,41302,41304],{"class":49,"line":16979},[47,41301,34694],{"class":221},[47,41303,267],{"class":217},[47,41305,34699],{"class":221},[47,41307,41308,41310,41312,41314,41316,41318,41320,41322],{"class":49,"line":16992},[47,41309,34704],{"class":85},[47,41311,222],{"class":221},[47,41313,34709],{"class":81},[47,41315,34712],{"class":221},[47,41317,34715],{"class":81},[47,41319,597],{"class":221},[47,41321,34720],{"class":81},[47,41323,34723],{"class":221},[187,41325,41327],{"id":41326},"_23googlenet","2.3.GoogLeNet",[22091,41329,41331],{"id":41330},"_231原理","2.3.1.原理",[171,41333,41334],{},[109,41335,41336],{},"网络结构",[19,41338,41339],{},[1556,41340],{"alt":43,"src":41341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-023.png",[19,41343,41344],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,41346,41347],{},[1556,41348],{"alt":43,"src":41349},"\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,41351,41352],{},[1556,41353],{"alt":43,"src":41354},"\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,41356,41357],{},[1556,41358],{"alt":43,"src":41359},"\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",[171,41361,41362],{"start":92},[109,41363,41364],{},"1x1卷积的优点",[19,41366,41367],{},[1556,41368],{"alt":43,"src":41369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-027.png",[171,41371,41372],{"start":1273},[109,41373,41374],{},"全局平均池化层优点",[19,41376,41377],{},[1556,41378],{"alt":43,"src":41379},"\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,41381,41382],{},[1556,41383],{"alt":43,"src":41384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-029.png",[171,41386,41387],{"start":1288},[109,41388,41389],{},"参数详细描述",[19,41391,41392],{},[1556,41393],{"alt":43,"src":41394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-030.png",[19,41396,41397],{},[1556,41398],{"alt":43,"src":41399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-031.png",[19,41401,41402],{},[1556,41403],{"alt":43,"src":41404},"\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,41406,41407],{},[1556,41408],{"alt":43,"src":41409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-033.png",[19,41411,41412],{},[1556,41413],{"alt":43,"src":41414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-034.png",[19,41416,41417],{},[1556,41418],{"alt":43,"src":41419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-035.png",[19,41421,41422],{},[1556,41423],{"alt":43,"src":41424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-036.png",[19,41426,41427],{},[1556,41428],{"alt":43,"src":41429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-037.png",[19,41431,41432],{},[1556,41433],{"alt":43,"src":41434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-038.png",[19,41436,41437],{},[1556,41438],{"alt":43,"src":41439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-039.png",[19,41441,41442],{},[1556,41443],{"alt":43,"src":41444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-040.png",[19,41446,41447],{},[1556,41448],{"alt":43,"src":41449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-041.png",[19,41451,41452],{},[1556,41453],{"alt":43,"src":41454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-042.png",[19,41456,41457],{},[1556,41458],{"alt":43,"src":41459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-043.png",[19,41461,41462],{},[1556,41463],{"alt":43,"src":41464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-044.png",[19,41466,41467],{},[1556,41468],{"alt":43,"src":41469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-045.png",[19,41471,41472],{},[1556,41473],{"alt":43,"src":41474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-046.png",[19,41476,41477],{},[1556,41478],{"alt":43,"src":41479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-047.png",[19,41481,41482],{},[1556,41483],{"alt":43,"src":41484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-048.png",[19,41486,41487],{},[1556,41488],{"alt":43,"src":41489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-049.png",[19,41491,41492],{},[1556,41493],{"alt":43,"src":41494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-050.png",[22091,41496,41498],{"id":41497},"_232代码实现","2.3.2.代码实现",[171,41500,41501],{},[109,41502,30765],{},[19,41504,41505],{},"根据原理一步一步搭建即可",[38,41507,41509],{"className":30432,"code":41508,"language":30434,"meta":43,"style":43},"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",[26,41510,41511,41517,41527,41537,41541,41558,41567,41582,41592,41597,41630,41635,41672,41719,41724,41760,41807,41812,41817,41852,41884,41888,41896,41912,41936,41961,41982,41987,42002,42006,42010,42015,42032,42037,42046,42061,42072,42116,42120,42148,42152,42163,42191,42195,42232,42236,42264,42268,42279,42315,42347,42375,42379,42390,42424,42456,42488,42521,42555,42583,42587,42598,42631,42663,42677,42681,42694,42698,42703,42715,42723,42745,42750,42755,42760,42765,42770,42775,42789,42797,42806,42819,42834,42843,42847,42855,42866,42877,42888,42899,42910,42916,42920,42925,42937,42957,42966],{"__ignoreMap":43},[47,41512,41513,41515],{"class":49,"line":50},[47,41514,30446],{"class":217},[47,41516,30449],{"class":221},[47,41518,41519,41521,41523,41525],{"class":49,"line":92},[47,41520,30791],{"class":217},[47,41522,30794],{"class":221},[47,41524,30446],{"class":217},[47,41526,30799],{"class":221},[47,41528,41529,41531,41533,41535],{"class":49,"line":1273},[47,41530,30791],{"class":217},[47,41532,30811],{"class":221},[47,41534,30446],{"class":217},[47,41536,30816],{"class":221},[47,41538,41539],{"class":49,"line":1288},[47,41540,2493],{"emptyLinePlaceholder":145},[47,41542,41543,41545,41548,41550,41552,41554,41556],{"class":49,"line":1294},[47,41544,14787],{"class":217},[47,41546,41547],{"class":53}," Inception",[47,41549,222],{"class":221},[47,41551,30832],{"class":53},[47,41553,777],{"class":221},[47,41555,30837],{"class":53},[47,41557,30840],{"class":221},[47,41559,41560,41562,41564],{"class":49,"line":1308},[47,41561,30855],{"class":217},[47,41563,30858],{"class":85},[47,41565,41566],{"class":221},"(self,in_channels,c1,c2,c3,c4):\n",[47,41568,41569,41571,41574,41576,41578,41580],{"class":49,"line":1314},[47,41570,30871],{"class":85},[47,41572,41573],{"class":221},"(Inception,",[47,41575,30877],{"class":85},[47,41577,30880],{"class":221},[47,41579,30883],{"class":85},[47,41581,2069],{"class":221},[47,41583,41584,41586,41588,41590],{"class":49,"line":1405},[47,41585,30899],{"class":85},[47,41587,34825],{"class":221},[47,41589,267],{"class":217},[47,41591,34830],{"class":221},[47,41593,41594],{"class":49,"line":1411},[47,41595,41596],{"class":279},"        # 路线1：定义1*1卷积\n",[47,41598,41599,41601,41604,41606,41608,41610,41612,41615,41617,41619,41622,41624,41626,41628],{"class":49,"line":1423},[47,41600,30899],{"class":85},[47,41602,41603],{"class":221},".p1_1",[47,41605,267],{"class":217},[47,41607,30907],{"class":221},[47,41609,30910],{"class":5309},[47,41611,267],{"class":217},[47,41613,41614],{"class":221},"in_channels,",[47,41616,30919],{"class":5309},[47,41618,267],{"class":217},[47,41620,41621],{"class":221},"c1,",[47,41623,30928],{"class":5309},[47,41625,267],{"class":217},[47,41627,436],{"class":85},[47,41629,228],{"class":221},[47,41631,41632],{"class":49,"line":1706},[47,41633,41634],{"class":279},"        # 路线2：定义1*1卷积和3*3\n",[47,41636,41637,41639,41642,41644,41646,41648,41650,41652,41654,41656,41659,41661,41664,41666,41668,41670],{"class":49,"line":1711},[47,41638,30899],{"class":85},[47,41640,41641],{"class":221},".p2_1",[47,41643,267],{"class":217},[47,41645,30907],{"class":221},[47,41647,30910],{"class":5309},[47,41649,267],{"class":217},[47,41651,41614],{"class":221},[47,41653,30919],{"class":5309},[47,41655,267],{"class":217},[47,41657,41658],{"class":221},"c2[",[47,41660,411],{"class":85},[47,41662,41663],{"class":221},"],",[47,41665,30928],{"class":5309},[47,41667,267],{"class":217},[47,41669,436],{"class":85},[47,41671,228],{"class":221},[47,41673,41674,41676,41679,41681,41683,41685,41687,41689,41691,41693,41695,41697,41699,41701,41703,41705,41707,41709,41711,41713,41715,41717],{"class":49,"line":1717},[47,41675,30899],{"class":85},[47,41677,41678],{"class":221},".p2_2",[47,41680,267],{"class":217},[47,41682,30907],{"class":221},[47,41684,30910],{"class":5309},[47,41686,267],{"class":217},[47,41688,41658],{"class":221},[47,41690,411],{"class":85},[47,41692,41663],{"class":221},[47,41694,30919],{"class":5309},[47,41696,267],{"class":217},[47,41698,41658],{"class":221},[47,41700,436],{"class":85},[47,41702,41663],{"class":221},[47,41704,30928],{"class":5309},[47,41706,267],{"class":217},[47,41708,292],{"class":85},[47,41710,597],{"class":221},[47,41712,30937],{"class":5309},[47,41714,267],{"class":217},[47,41716,436],{"class":85},[47,41718,228],{"class":221},[47,41720,41721],{"class":49,"line":1722},[47,41722,41723],{"class":279},"        # 路线3：定义1*1卷积和5*5\n",[47,41725,41726,41728,41731,41733,41735,41737,41739,41741,41743,41745,41748,41750,41752,41754,41756,41758],{"class":49,"line":1736},[47,41727,30899],{"class":85},[47,41729,41730],{"class":221},".p3_1",[47,41732,267],{"class":217},[47,41734,30907],{"class":221},[47,41736,30910],{"class":5309},[47,41738,267],{"class":217},[47,41740,41614],{"class":221},[47,41742,30919],{"class":5309},[47,41744,267],{"class":217},[47,41746,41747],{"class":221},"c3[",[47,41749,411],{"class":85},[47,41751,41663],{"class":221},[47,41753,30928],{"class":5309},[47,41755,267],{"class":217},[47,41757,436],{"class":85},[47,41759,228],{"class":221},[47,41761,41762,41764,41767,41769,41771,41773,41775,41777,41779,41781,41783,41785,41787,41789,41791,41793,41795,41797,41799,41801,41803,41805],{"class":49,"line":1741},[47,41763,30899],{"class":85},[47,41765,41766],{"class":221},".p3_2",[47,41768,267],{"class":217},[47,41770,30907],{"class":221},[47,41772,30910],{"class":5309},[47,41774,267],{"class":217},[47,41776,41747],{"class":221},[47,41778,411],{"class":85},[47,41780,41663],{"class":221},[47,41782,30919],{"class":5309},[47,41784,267],{"class":217},[47,41786,41747],{"class":221},[47,41788,436],{"class":85},[47,41790,41663],{"class":221},[47,41792,30928],{"class":5309},[47,41794,267],{"class":217},[47,41796,538],{"class":85},[47,41798,597],{"class":221},[47,41800,30937],{"class":5309},[47,41802,267],{"class":217},[47,41804,298],{"class":85},[47,41806,228],{"class":221},[47,41808,41809],{"class":49,"line":1747},[47,41810,41811],{"class":279},"        # 路线4：定义3*3最大池化和1*1卷积\n",[47,41813,41814],{"class":49,"line":1768},[47,41815,41816],{"class":279},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[47,41818,41819,41821,41824,41826,41828,41830,41832,41834,41836,41838,41840,41842,41844,41846,41848,41850],{"class":49,"line":1773},[47,41820,30899],{"class":85},[47,41822,41823],{"class":221},".p4_1",[47,41825,267],{"class":217},[47,41827,34883],{"class":221},[47,41829,30928],{"class":5309},[47,41831,267],{"class":217},[47,41833,292],{"class":85},[47,41835,597],{"class":221},[47,41837,30983],{"class":5309},[47,41839,267],{"class":217},[47,41841,436],{"class":85},[47,41843,597],{"class":221},[47,41845,30937],{"class":5309},[47,41847,267],{"class":217},[47,41849,436],{"class":85},[47,41851,228],{"class":221},[47,41853,41854,41856,41859,41861,41863,41865,41867,41869,41871,41873,41876,41878,41880,41882],{"class":49,"line":1787},[47,41855,30899],{"class":85},[47,41857,41858],{"class":221},".p4_2",[47,41860,267],{"class":217},[47,41862,30907],{"class":221},[47,41864,30910],{"class":5309},[47,41866,267],{"class":217},[47,41868,41614],{"class":221},[47,41870,30919],{"class":5309},[47,41872,267],{"class":217},[47,41874,41875],{"class":221},"c4,",[47,41877,30928],{"class":5309},[47,41879,267],{"class":217},[47,41881,436],{"class":85},[47,41883,228],{"class":221},[47,41885,41886],{"class":49,"line":1792},[47,41887,2493],{"emptyLinePlaceholder":145},[47,41889,41890,41892,41894],{"class":49,"line":1821},[47,41891,30855],{"class":217},[47,41893,31147],{"class":53},[47,41895,31150],{"class":221},[47,41897,41898,41901,41903,41905,41907,41909],{"class":49,"line":1826},[47,41899,41900],{"class":221},"        p1",[47,41902,267],{"class":217},[47,41904,30877],{"class":85},[47,41906,35238],{"class":221},[47,41908,30877],{"class":85},[47,41910,41911],{"class":221},".p1_1(x))\n",[47,41913,41914,41916,41918,41920,41922,41924,41927,41929,41931,41933],{"class":49,"line":1843},[47,41915,7178],{"class":221},[47,41917,267],{"class":217},[47,41919,30877],{"class":85},[47,41921,35238],{"class":221},[47,41923,30877],{"class":85},[47,41925,41926],{"class":221},".p2_2(",[47,41928,30877],{"class":85},[47,41930,35238],{"class":221},[47,41932,30877],{"class":85},[47,41934,41935],{"class":221},".p2_1(x))))\n",[47,41937,41938,41941,41943,41945,41947,41949,41952,41954,41956,41958],{"class":49,"line":1848},[47,41939,41940],{"class":221},"        p3",[47,41942,267],{"class":217},[47,41944,30877],{"class":85},[47,41946,35238],{"class":221},[47,41948,30877],{"class":85},[47,41950,41951],{"class":221},".p3_2(",[47,41953,30877],{"class":85},[47,41955,35238],{"class":221},[47,41957,30877],{"class":85},[47,41959,41960],{"class":221},".p3_1(x))))\n",[47,41962,41963,41966,41968,41970,41972,41974,41977,41979],{"class":49,"line":1853},[47,41964,41965],{"class":221},"        p4",[47,41967,267],{"class":217},[47,41969,30877],{"class":85},[47,41971,35238],{"class":221},[47,41973,30877],{"class":85},[47,41975,41976],{"class":221},".p4_2(",[47,41978,30877],{"class":85},[47,41980,41981],{"class":221},".p4_1(x)))\n",[47,41983,41984],{"class":49,"line":1858},[47,41985,41986],{"class":279},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[47,41988,41989,41991,41994,41996,41998,42000],{"class":49,"line":1872},[47,41990,14845],{"class":217},[47,41992,41993],{"class":221}," torch.cat((p1,p2,p3,p4),",[47,41995,32739],{"class":5309},[47,41997,267],{"class":217},[47,41999,436],{"class":85},[47,42001,228],{"class":221},[47,42003,42004],{"class":49,"line":1877},[47,42005,2493],{"emptyLinePlaceholder":145},[47,42007,42008],{"class":49,"line":2670},[47,42009,2493],{"emptyLinePlaceholder":145},[47,42011,42012],{"class":49,"line":2684},[47,42013,42014],{"class":279},"# 搭建GoogLeNet网络\n",[47,42016,42017,42019,42022,42024,42026,42028,42030],{"class":49,"line":2692},[47,42018,14787],{"class":217},[47,42020,42021],{"class":53}," GoogLeNet",[47,42023,222],{"class":221},[47,42025,30832],{"class":53},[47,42027,777],{"class":221},[47,42029,30837],{"class":53},[47,42031,30840],{"class":221},[47,42033,42034],{"class":49,"line":2697},[47,42035,42036],{"class":279},"    # 必须把Inception导入到里边\n",[47,42038,42039,42041,42043],{"class":49,"line":2703},[47,42040,30855],{"class":217},[47,42042,30858],{"class":85},[47,42044,42045],{"class":221},"(self,Inception):\n",[47,42047,42048,42050,42053,42055,42057,42059],{"class":49,"line":2709},[47,42049,30871],{"class":85},[47,42051,42052],{"class":221},"(GoogLeNet,",[47,42054,30877],{"class":85},[47,42056,30880],{"class":221},[47,42058,30883],{"class":85},[47,42060,2069],{"class":221},[47,42062,42063,42065,42068,42070],{"class":49,"line":2714},[47,42064,30899],{"class":85},[47,42066,42067],{"class":221},".b1",[47,42069,267],{"class":217},[47,42071,38063],{"class":221},[47,42073,42074,42076,42078,42080,42082,42084,42086,42088,42090,42092,42094,42096,42098,42100,42102,42104,42106,42108,42110,42112,42114],{"class":49,"line":8041},[47,42075,38068],{"class":221},[47,42077,30910],{"class":5309},[47,42079,267],{"class":217},[47,42081,436],{"class":85},[47,42083,597],{"class":221},[47,42085,30919],{"class":5309},[47,42087,267],{"class":217},[47,42089,423],{"class":85},[47,42091,597],{"class":221},[47,42093,30928],{"class":5309},[47,42095,267],{"class":217},[47,42097,588],{"class":85},[47,42099,597],{"class":221},[47,42101,30983],{"class":5309},[47,42103,267],{"class":217},[47,42105,298],{"class":85},[47,42107,597],{"class":221},[47,42109,30937],{"class":5309},[47,42111,267],{"class":217},[47,42113,292],{"class":85},[47,42115,38101],{"class":221},[47,42117,42118],{"class":49,"line":8065},[47,42119,38106],{"class":221},[47,42121,42122,42124,42126,42128,42130,42132,42134,42136,42138,42140,42142,42144,42146],{"class":49,"line":8070},[47,42123,38151],{"class":221},[47,42125,30928],{"class":5309},[47,42127,267],{"class":217},[47,42129,292],{"class":85},[47,42131,597],{"class":221},[47,42133,30983],{"class":5309},[47,42135,267],{"class":217},[47,42137,298],{"class":85},[47,42139,597],{"class":221},[47,42141,30937],{"class":5309},[47,42143,267],{"class":217},[47,42145,436],{"class":85},[47,42147,228],{"class":221},[47,42149,42150],{"class":49,"line":8076},[47,42151,38180],{"class":221},[47,42153,42154,42156,42159,42161],{"class":49,"line":8103},[47,42155,30899],{"class":85},[47,42157,42158],{"class":221},".b2",[47,42160,267],{"class":217},[47,42162,38063],{"class":221},[47,42164,42165,42167,42169,42171,42173,42175,42177,42179,42181,42183,42185,42187,42189],{"class":49,"line":8108},[47,42166,38068],{"class":221},[47,42168,30910],{"class":5309},[47,42170,267],{"class":217},[47,42172,423],{"class":85},[47,42174,597],{"class":221},[47,42176,30919],{"class":5309},[47,42178,267],{"class":217},[47,42180,423],{"class":85},[47,42182,597],{"class":221},[47,42184,30928],{"class":5309},[47,42186,267],{"class":217},[47,42188,436],{"class":85},[47,42190,38101],{"class":221},[47,42192,42193],{"class":49,"line":8114},[47,42194,38106],{"class":221},[47,42196,42197,42199,42201,42203,42205,42207,42209,42211,42214,42216,42218,42220,42222,42224,42226,42228,42230],{"class":49,"line":8126},[47,42198,38068],{"class":221},[47,42200,30910],{"class":5309},[47,42202,267],{"class":217},[47,42204,423],{"class":85},[47,42206,597],{"class":221},[47,42208,30919],{"class":5309},[47,42210,267],{"class":217},[47,42212,42213],{"class":85},"192",[47,42215,597],{"class":221},[47,42217,30928],{"class":5309},[47,42219,267],{"class":217},[47,42221,292],{"class":85},[47,42223,597],{"class":221},[47,42225,30937],{"class":5309},[47,42227,267],{"class":217},[47,42229,436],{"class":85},[47,42231,38101],{"class":221},[47,42233,42234],{"class":49,"line":8138},[47,42235,38106],{"class":221},[47,42237,42238,42240,42242,42244,42246,42248,42250,42252,42254,42256,42258,42260,42262],{"class":49,"line":8150},[47,42239,38151],{"class":221},[47,42241,30928],{"class":5309},[47,42243,267],{"class":217},[47,42245,292],{"class":85},[47,42247,597],{"class":221},[47,42249,30983],{"class":5309},[47,42251,267],{"class":217},[47,42253,298],{"class":85},[47,42255,597],{"class":221},[47,42257,30937],{"class":5309},[47,42259,267],{"class":217},[47,42261,436],{"class":85},[47,42263,228],{"class":221},[47,42265,42266],{"class":49,"line":9809},[47,42267,38180],{"class":221},[47,42269,42270,42272,42275,42277],{"class":49,"line":9834},[47,42271,30899],{"class":85},[47,42273,42274],{"class":221},".b3",[47,42276,267],{"class":217},[47,42278,38063],{"class":221},[47,42280,42281,42284,42286,42288,42290,42293,42295,42297,42299,42302,42304,42306,42308,42311,42313],{"class":49,"line":9857},[47,42282,42283],{"class":221},"            Inception(",[47,42285,42213],{"class":85},[47,42287,597],{"class":221},[47,42289,423],{"class":85},[47,42291,42292],{"class":221},",(",[47,42294,429],{"class":85},[47,42296,597],{"class":221},[47,42298,32124],{"class":85},[47,42300,42301],{"class":221},"),(",[47,42303,820],{"class":85},[47,42305,597],{"class":221},[47,42307,417],{"class":85},[47,42309,42310],{"class":221},"),",[47,42312,417],{"class":85},[47,42314,38101],{"class":221},[47,42316,42317,42319,42321,42323,42325,42327,42329,42331,42333,42335,42337,42339,42341,42343,42345],{"class":49,"line":9881},[47,42318,42283],{"class":221},[47,42320,34924],{"class":85},[47,42322,597],{"class":221},[47,42324,32124],{"class":85},[47,42326,42292],{"class":221},[47,42328,32124],{"class":85},[47,42330,597],{"class":221},[47,42332,42213],{"class":85},[47,42334,42301],{"class":221},[47,42336,417],{"class":85},[47,42338,597],{"class":221},[47,42340,429],{"class":85},[47,42342,42310],{"class":221},[47,42344,423],{"class":85},[47,42346,38101],{"class":221},[47,42348,42349,42351,42353,42355,42357,42359,42361,42363,42365,42367,42369,42371,42373],{"class":49,"line":9886},[47,42350,38151],{"class":221},[47,42352,30928],{"class":5309},[47,42354,267],{"class":217},[47,42356,292],{"class":85},[47,42358,597],{"class":221},[47,42360,30983],{"class":5309},[47,42362,267],{"class":217},[47,42364,298],{"class":85},[47,42366,597],{"class":221},[47,42368,30937],{"class":5309},[47,42370,267],{"class":217},[47,42372,436],{"class":85},[47,42374,228],{"class":221},[47,42376,42377],{"class":49,"line":9891},[47,42378,38180],{"class":221},[47,42380,42381,42383,42386,42388],{"class":49,"line":9896},[47,42382,30899],{"class":85},[47,42384,42385],{"class":221},".b4",[47,42387,267],{"class":217},[47,42389,38063],{"class":221},[47,42391,42392,42394,42397,42399,42401,42403,42405,42407,42410,42412,42414,42416,42418,42420,42422],{"class":49,"line":9905},[47,42393,42283],{"class":221},[47,42395,42396],{"class":85},"480",[47,42398,597],{"class":221},[47,42400,42213],{"class":85},[47,42402,42292],{"class":221},[47,42404,429],{"class":85},[47,42406,597],{"class":221},[47,42408,42409],{"class":85},"208",[47,42411,42301],{"class":221},[47,42413,820],{"class":85},[47,42415,597],{"class":221},[47,42417,826],{"class":85},[47,42419,42310],{"class":221},[47,42421,423],{"class":85},[47,42423,38101],{"class":221},[47,42425,42426,42428,42430,42432,42434,42436,42438,42440,42442,42444,42446,42448,42450,42452,42454],{"class":49,"line":9910},[47,42427,42283],{"class":221},[47,42429,38511],{"class":85},[47,42431,597],{"class":221},[47,42433,21141],{"class":85},[47,42435,42292],{"class":221},[47,42437,837],{"class":85},[47,42439,597],{"class":221},[47,42441,31555],{"class":85},[47,42443,42301],{"class":221},[47,42445,1019],{"class":85},[47,42447,597],{"class":221},[47,42449,423],{"class":85},[47,42451,42310],{"class":221},[47,42453,423],{"class":85},[47,42455,38101],{"class":221},[47,42457,42458,42460,42462,42464,42466,42468,42470,42472,42474,42476,42478,42480,42482,42484,42486],{"class":49,"line":9916},[47,42459,42283],{"class":221},[47,42461,38511],{"class":85},[47,42463,597],{"class":221},[47,42465,32124],{"class":85},[47,42467,42292],{"class":221},[47,42469,32124],{"class":85},[47,42471,597],{"class":221},[47,42473,34924],{"class":85},[47,42475,42301],{"class":221},[47,42477,1019],{"class":85},[47,42479,597],{"class":221},[47,42481,423],{"class":85},[47,42483,42310],{"class":221},[47,42485,423],{"class":85},[47,42487,38101],{"class":221},[47,42489,42490,42492,42494,42496,42498,42500,42502,42504,42507,42509,42511,42513,42515,42517,42519],{"class":49,"line":9937},[47,42491,42283],{"class":221},[47,42493,38511],{"class":85},[47,42495,597],{"class":221},[47,42497,837],{"class":85},[47,42499,42292],{"class":221},[47,42501,32124],{"class":85},[47,42503,597],{"class":221},[47,42505,42506],{"class":85},"288",[47,42508,42301],{"class":221},[47,42510,417],{"class":85},[47,42512,597],{"class":221},[47,42514,423],{"class":85},[47,42516,42310],{"class":221},[47,42518,423],{"class":85},[47,42520,38101],{"class":221},[47,42522,42523,42525,42528,42530,42532,42534,42536,42538,42541,42543,42545,42547,42549,42551,42553],{"class":49,"line":9943},[47,42524,42283],{"class":221},[47,42526,42527],{"class":85},"528",[47,42529,597],{"class":221},[47,42531,34924],{"class":85},[47,42533,42292],{"class":221},[47,42535,21141],{"class":85},[47,42537,597],{"class":221},[47,42539,42540],{"class":85},"320",[47,42542,42301],{"class":221},[47,42544,417],{"class":85},[47,42546,597],{"class":221},[47,42548,32124],{"class":85},[47,42550,42310],{"class":221},[47,42552,32124],{"class":85},[47,42554,38101],{"class":221},[47,42556,42557,42559,42561,42563,42565,42567,42569,42571,42573,42575,42577,42579,42581],{"class":49,"line":9957},[47,42558,38151],{"class":221},[47,42560,30928],{"class":5309},[47,42562,267],{"class":217},[47,42564,292],{"class":85},[47,42566,597],{"class":221},[47,42568,30983],{"class":5309},[47,42570,267],{"class":217},[47,42572,298],{"class":85},[47,42574,597],{"class":221},[47,42576,30937],{"class":5309},[47,42578,267],{"class":217},[47,42580,436],{"class":85},[47,42582,228],{"class":221},[47,42584,42585],{"class":49,"line":9963},[47,42586,38180],{"class":221},[47,42588,42589,42591,42594,42596],{"class":49,"line":9990},[47,42590,30899],{"class":85},[47,42592,42593],{"class":221},".b5",[47,42595,267],{"class":217},[47,42597,38063],{"class":221},[47,42599,42600,42602,42605,42607,42609,42611,42613,42615,42617,42619,42621,42623,42625,42627,42629],{"class":49,"line":9999},[47,42601,42283],{"class":221},[47,42603,42604],{"class":85},"832",[47,42606,597],{"class":221},[47,42608,34924],{"class":85},[47,42610,42292],{"class":221},[47,42612,21141],{"class":85},[47,42614,597],{"class":221},[47,42616,42540],{"class":85},[47,42618,42301],{"class":221},[47,42620,417],{"class":85},[47,42622,597],{"class":221},[47,42624,32124],{"class":85},[47,42626,42310],{"class":221},[47,42628,32124],{"class":85},[47,42630,38101],{"class":221},[47,42632,42633,42635,42637,42639,42641,42643,42645,42647,42649,42651,42653,42655,42657,42659,42661],{"class":49,"line":10005},[47,42634,42283],{"class":221},[47,42636,42604],{"class":85},[47,42638,597],{"class":221},[47,42640,34994],{"class":85},[47,42642,42292],{"class":221},[47,42644,42213],{"class":85},[47,42646,597],{"class":221},[47,42648,34994],{"class":85},[47,42650,42301],{"class":221},[47,42652,826],{"class":85},[47,42654,597],{"class":221},[47,42656,32124],{"class":85},[47,42658,42310],{"class":221},[47,42660,32124],{"class":85},[47,42662,38101],{"class":221},[47,42664,42665,42668,42670,42672,42674],{"class":49,"line":10013},[47,42666,42667],{"class":221},"            nn.AdaptiveAvgPool2d((",[47,42669,436],{"class":85},[47,42671,597],{"class":221},[47,42673,436],{"class":85},[47,42675,42676],{"class":221},")),\n",[47,42678,42679],{"class":49,"line":10018},[47,42680,38844],{"class":221},[47,42682,42683,42685,42688,42690,42692],{"class":49,"line":16697},[47,42684,38849],{"class":221},[47,42686,42687],{"class":85},"1024",[47,42689,597],{"class":221},[47,42691,665],{"class":85},[47,42693,228],{"class":221},[47,42695,42696],{"class":49,"line":16703},[47,42697,38180],{"class":221},[47,42699,42700],{"class":49,"line":16726},[47,42701,42702],{"class":279},"        # 对模型参数初始化\n",[47,42704,42705,42707,42709,42711,42713],{"class":49,"line":16732},[47,42706,3496],{"class":217},[47,42708,38922],{"class":221},[47,42710,26097],{"class":217},[47,42712,38927],{"class":85},[47,42714,38930],{"class":221},[47,42716,42717,42719,42721],{"class":49,"line":16755},[47,42718,4735],{"class":217},[47,42720,38942],{"class":85},[47,42722,38945],{"class":221},[47,42724,42725,42727,42730,42732,42735,42737,42739,42741,42743],{"class":49,"line":16769},[47,42726,38955],{"class":221},[47,42728,42729],{"class":5309},"mode",[47,42731,267],{"class":217},[47,42733,42734],{"class":81},"'fan_out'",[47,42736,597],{"class":221},[47,42738,38958],{"class":5309},[47,42740,267],{"class":217},[47,42742,38963],{"class":81},[47,42744,228],{"class":221},[47,42746,42747],{"class":49,"line":16789},[47,42748,42749],{"class":279},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[47,42751,42752],{"class":49,"line":16795},[47,42753,42754],{"class":279},"                # ② mode = 'fan_out'决定使用的fan值：\n",[47,42756,42757],{"class":49,"line":16806},[47,42758,42759],{"class":279},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[47,42761,42762],{"class":49,"line":16829},[47,42763,42764],{"class":279},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[47,42766,42767],{"class":49,"line":16851},[47,42768,42769],{"class":279},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[47,42771,42772],{"class":49,"line":16856},[47,42773,42774],{"class":279},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[47,42776,42777,42779,42781,42783,42785,42787],{"class":49,"line":16862},[47,42778,38975],{"class":217},[47,42780,38978],{"class":221},[47,42782,38981],{"class":217},[47,42784,38984],{"class":217},[47,42786,38987],{"class":85},[47,42788,3832],{"class":221},[47,42790,42791,42793,42795],{"class":49,"line":16876},[47,42792,38999],{"class":221},[47,42794,411],{"class":85},[47,42796,228],{"class":221},[47,42798,42799,42802,42804],{"class":49,"line":16889},[47,42800,42801],{"class":217},"                elif",[47,42803,38942],{"class":85},[47,42805,39018],{"class":221},[47,42807,42808,42811,42813,42815,42817],{"class":49,"line":16894},[47,42809,42810],{"class":221},"                    nn.init.normal_(m.weight,",[47,42812,411],{"class":85},[47,42814,597],{"class":221},[47,42816,39040],{"class":85},[47,42818,228],{"class":221},[47,42820,42821,42824,42826,42828,42830,42832],{"class":49,"line":16908},[47,42822,42823],{"class":217},"                    if",[47,42825,38978],{"class":221},[47,42827,38981],{"class":217},[47,42829,38984],{"class":217},[47,42831,38987],{"class":85},[47,42833,3832],{"class":221},[47,42835,42836,42839,42841],{"class":49,"line":16913},[47,42837,42838],{"class":221},"                        nn.init.constant_(m.bias,",[47,42840,411],{"class":85},[47,42842,228],{"class":221},[47,42844,42845],{"class":49,"line":16919},[47,42846,35219],{"class":279},[47,42848,42849,42851,42853],{"class":49,"line":16924},[47,42850,30855],{"class":217},[47,42852,31147],{"class":53},[47,42854,31150],{"class":221},[47,42856,42857,42859,42861,42863],{"class":49,"line":16938},[47,42858,31155],{"class":221},[47,42860,267],{"class":217},[47,42862,30877],{"class":85},[47,42864,42865],{"class":221},".b1(x)\n",[47,42867,42868,42870,42872,42874],{"class":49,"line":16943},[47,42869,31155],{"class":221},[47,42871,267],{"class":217},[47,42873,30877],{"class":85},[47,42875,42876],{"class":221},".b2(x)\n",[47,42878,42879,42881,42883,42885],{"class":49,"line":16948},[47,42880,31155],{"class":221},[47,42882,267],{"class":217},[47,42884,30877],{"class":85},[47,42886,42887],{"class":221},".b3(x)\n",[47,42889,42890,42892,42894,42896],{"class":49,"line":16962},[47,42891,31155],{"class":221},[47,42893,267],{"class":217},[47,42895,30877],{"class":85},[47,42897,42898],{"class":221},".b4(x)\n",[47,42900,42901,42903,42905,42907],{"class":49,"line":16974},[47,42902,31155],{"class":221},[47,42904,267],{"class":217},[47,42906,30877],{"class":85},[47,42908,42909],{"class":221},".b5(x)\n",[47,42911,42912,42914],{"class":49,"line":16979},[47,42913,14845],{"class":217},[47,42915,31263],{"class":221},[47,42917,42918],{"class":49,"line":16992},[47,42919,2493],{"emptyLinePlaceholder":145},[47,42921,42922],{"class":49,"line":16997},[47,42923,42924],{"class":279},"# 模型展示\n",[47,42926,42927,42929,42931,42933,42935],{"class":49,"line":17002},[47,42928,1625],{"class":217},[47,42930,31274],{"class":85},[47,42932,3042],{"class":217},[47,42934,31279],{"class":81},[47,42936,3832],{"class":221},[47,42938,42939,42941,42943,42945,42947,42949,42951,42953,42955],{"class":49,"line":17007},[47,42940,31291],{"class":221},[47,42942,267],{"class":217},[47,42944,30505],{"class":221},[47,42946,31298],{"class":81},[47,42948,1798],{"class":217},[47,42950,31303],{"class":221},[47,42952,1795],{"class":217},[47,42954,30530],{"class":81},[47,42956,228],{"class":221},[47,42958,42959,42961,42963],{"class":49,"line":17020},[47,42960,31343],{"class":221},[47,42962,267],{"class":217},[47,42964,42965],{"class":221},"GoogLeNet(Inception).to(device)\n",[47,42967,42968,42970,42972,42974,42976,42978,42980,42982],{"class":49,"line":17025},[47,42969,31353],{"class":85},[47,42971,31356],{"class":221},[47,42973,436],{"class":85},[47,42975,597],{"class":221},[47,42977,31555],{"class":85},[47,42979,597],{"class":221},[47,42981,31555],{"class":85},[47,42983,31369],{"class":221},[171,42985,42986],{"start":92},[109,42987,39237],{},[38,42989,42991],{"className":30432,"code":42990,"language":30434,"meta":43,"style":43},"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",[26,42992,42993,42999,43005,43015,43021,43031,43041,43051,43061,43071,43075,43086,43096,43100,43104,43108,43116,43128,43138,43154,43164,43196,43210,43220,43230,43234,43244,43258,43268,43278,43288,43294,43298,43302,43306,43310,43314,43322,43342,43346,43350,43354,43358,43362,43378,43382,43386,43394,43398,43402,43410,43414,43418,43422,43430,43434,43438,43442,43446,43454,43458,43466,43470,43478,43482,43490,43494,43502,43506,43510,43518,43522,43526,43530,43542,43566,43580,43584,43588,43592,43600,43604,43612,43616,43624,43628,43636,43640,43648,43652,43660,43664,43676,43680,43688,43692,43700,43704,43708,43712,43716,43724,43728,43744,43748,43756,43760,43764,43768,43772,43776,43780,43784,43800,43804,43816,43820,43832,43836,43848,43852,43860,43864,43872,43876,43880,43884,43890,43894,43902,43906,43922,43926,43934,43938,43954,43966,43970,43982,43986,43990,43998,44002,44006,44014,44018,44026,44030,44038,44042,44046,44088,44130,44134,44138,44154,44158,44174,44178,44182,44190,44194,44198,44210,44248,44252,44256,44264,44268,44282,44292,44298,44304,44310,44316,44320,44324,44330,44334,44338,44346,44350,44368,44372,44376,44380,44396,44400,44404,44408,44412,44416,44436,44456,44460,44464,44468,44476,44484,44488,44504,44524,44544,44548,44552,44560,44568,44572,44576,44580,44592,44596,44606,44614,44631],{"__ignoreMap":43},[47,42994,42995,42997],{"class":49,"line":50},[47,42996,30446],{"class":217},[47,42998,31876],{"class":221},[47,43000,43001,43003],{"class":49,"line":92},[47,43002,30446],{"class":217},[47,43004,31883],{"class":221},[47,43006,43007,43009,43011,43013],{"class":49,"line":1273},[47,43008,30446],{"class":217},[47,43010,31894],{"class":221},[47,43012,31437],{"class":217},[47,43014,31899],{"class":221},[47,43016,43017,43019],{"class":49,"line":1288},[47,43018,30446],{"class":217},[47,43020,30449],{"class":221},[47,43022,43023,43025,43027,43029],{"class":49,"line":1294},[47,43024,30791],{"class":217},[47,43026,31469],{"class":221},[47,43028,30446],{"class":217},[47,43030,31916],{"class":221},[47,43032,43033,43035,43037,43039],{"class":49,"line":1308},[47,43034,30791],{"class":217},[47,43036,31422],{"class":221},[47,43038,30446],{"class":217},[47,43040,31427],{"class":221},[47,43042,43043,43045,43047,43049],{"class":49,"line":1314},[47,43044,30791],{"class":217},[47,43046,31452],{"class":221},[47,43048,30446],{"class":217},[47,43050,31457],{"class":221},[47,43052,43053,43055,43057,43059],{"class":49,"line":1405},[47,43054,30446],{"class":217},[47,43056,31469],{"class":221},[47,43058,31437],{"class":217},[47,43060,31474],{"class":221},[47,43062,43063,43065,43067,43069],{"class":49,"line":1411},[47,43064,30446],{"class":217},[47,43066,31486],{"class":221},[47,43068,31437],{"class":217},[47,43070,31491],{"class":221},[47,43072,43073],{"class":49,"line":1423},[47,43074,31961],{"class":279},[47,43076,43077,43079,43081,43083],{"class":49,"line":1706},[47,43078,30791],{"class":217},[47,43080,31968],{"class":221},[47,43082,30446],{"class":217},[47,43084,43085],{"class":221}," GoogLeNet, Inception\n",[47,43087,43088,43090,43092,43094],{"class":49,"line":1711},[47,43089,30791],{"class":217},[47,43091,30794],{"class":221},[47,43093,30446],{"class":217},[47,43095,30799],{"class":221},[47,43097,43098],{"class":49,"line":1717},[47,43099,2493],{"emptyLinePlaceholder":145},[47,43101,43102],{"class":49,"line":1722},[47,43103,2493],{"emptyLinePlaceholder":145},[47,43105,43106],{"class":49,"line":1736},[47,43107,31996],{"class":279},[47,43109,43110,43112,43114],{"class":49,"line":1741},[47,43111,32001],{"class":217},[47,43113,32004],{"class":53},[47,43115,32007],{"class":221},[47,43117,43118,43120,43122,43124,43126],{"class":49,"line":1747},[47,43119,32012],{"class":221},[47,43121,267],{"class":217},[47,43123,31509],{"class":221},[47,43125,31517],{"class":81},[47,43127,31520],{"class":221},[47,43129,43130,43132,43134,43136],{"class":49,"line":1768},[47,43131,32025],{"class":5309},[47,43133,267],{"class":217},[47,43135,31530],{"class":85},[47,43137,31520],{"class":221},[47,43139,43140,43142,43144,43146,43148,43150,43152],{"class":49,"line":1773},[47,43141,32036],{"class":5309},[47,43143,267],{"class":217},[47,43145,31547],{"class":221},[47,43147,31550],{"class":5309},[47,43149,267],{"class":217},[47,43151,35503],{"class":85},[47,43153,31558],{"class":221},[47,43155,43156,43158,43160,43162],{"class":49,"line":1787},[47,43157,32053],{"class":5309},[47,43159,267],{"class":217},[47,43161,31530],{"class":85},[47,43163,228],{"class":221},[47,43165,43166,43168,43170,43172,43174,43176,43178,43180,43182,43184,43186,43188,43190,43192,43194],{"class":49,"line":1792},[47,43167,32064],{"class":221},[47,43169,267],{"class":217},[47,43171,32069],{"class":221},[47,43173,32072],{"class":85},[47,43175,222],{"class":221},[47,43177,32077],{"class":85},[47,43179,674],{"class":217},[47,43181,7451],{"class":85},[47,43183,32084],{"class":221},[47,43185,32072],{"class":85},[47,43187,222],{"class":221},[47,43189,32091],{"class":85},[47,43191,674],{"class":217},[47,43193,7451],{"class":85},[47,43195,32098],{"class":221},[47,43197,43198,43200,43202,43204,43206,43208],{"class":49,"line":1821},[47,43199,32103],{"class":221},[47,43201,267],{"class":217},[47,43203,32108],{"class":221},[47,43205,31591],{"class":5309},[47,43207,267],{"class":217},[47,43209,31596],{"class":221},[47,43211,43212,43214,43216,43218],{"class":49,"line":1826},[47,43213,32119],{"class":5309},[47,43215,267],{"class":217},[47,43217,417],{"class":85},[47,43219,31520],{"class":221},[47,43221,43222,43224,43226,43228],{"class":49,"line":1843},[47,43223,32131],{"class":5309},[47,43225,267],{"class":217},[47,43227,31530],{"class":85},[47,43229,31520],{"class":221},[47,43231,43232],{"class":49,"line":1848},[47,43233,32142],{"class":279},[47,43235,43236,43238,43240,43242],{"class":49,"line":1853},[47,43237,32147],{"class":5309},[47,43239,267],{"class":217},[47,43241,614],{"class":85},[47,43243,228],{"class":221},[47,43245,43246,43248,43250,43252,43254,43256],{"class":49,"line":1858},[47,43247,32158],{"class":221},[47,43249,267],{"class":217},[47,43251,31588],{"class":221},[47,43253,31591],{"class":5309},[47,43255,267],{"class":217},[47,43257,32169],{"class":221},[47,43259,43260,43262,43264,43266],{"class":49,"line":1872},[47,43261,32174],{"class":5309},[47,43263,267],{"class":217},[47,43265,417],{"class":85},[47,43267,31520],{"class":221},[47,43269,43270,43272,43274,43276],{"class":49,"line":1877},[47,43271,32185],{"class":5309},[47,43273,267],{"class":217},[47,43275,31530],{"class":85},[47,43277,31520],{"class":221},[47,43279,43280,43282,43284,43286],{"class":49,"line":2670},[47,43281,32196],{"class":5309},[47,43283,267],{"class":217},[47,43285,614],{"class":85},[47,43287,228],{"class":221},[47,43289,43290,43292],{"class":49,"line":2684},[47,43291,4183],{"class":217},[47,43293,32209],{"class":221},[47,43295,43296],{"class":49,"line":2692},[47,43297,2493],{"emptyLinePlaceholder":145},[47,43299,43300],{"class":49,"line":2697},[47,43301,32218],{"class":279},[47,43303,43304],{"class":49,"line":2703},[47,43305,32223],{"class":279},[47,43307,43308],{"class":49,"line":2709},[47,43309,2493],{"emptyLinePlaceholder":145},[47,43311,43312],{"class":49,"line":2714},[47,43313,32232],{"class":279},[47,43315,43316,43318,43320],{"class":49,"line":8041},[47,43317,32001],{"class":217},[47,43319,32239],{"class":53},[47,43321,32242],{"class":221},[47,43323,43324,43326,43328,43330,43332,43334,43336,43338,43340],{"class":49,"line":8065},[47,43325,31291],{"class":221},[47,43327,267],{"class":217},[47,43329,30505],{"class":221},[47,43331,31298],{"class":81},[47,43333,1798],{"class":217},[47,43335,31303],{"class":221},[47,43337,1795],{"class":217},[47,43339,32261],{"class":81},[47,43341,228],{"class":221},[47,43343,43344],{"class":49,"line":8070},[47,43345,2493],{"emptyLinePlaceholder":145},[47,43347,43348],{"class":49,"line":8076},[47,43349,2493],{"emptyLinePlaceholder":145},[47,43351,43352],{"class":49,"line":8103},[47,43353,32276],{"class":279},[47,43355,43356],{"class":49,"line":8108},[47,43357,32281],{"class":279},[47,43359,43360],{"class":49,"line":8114},[47,43361,32286],{"class":279},[47,43363,43364,43366,43368,43370,43372,43374,43376],{"class":49,"line":8126},[47,43365,32291],{"class":221},[47,43367,267],{"class":217},[47,43369,32296],{"class":221},[47,43371,32299],{"class":5309},[47,43373,267],{"class":217},[47,43375,32304],{"class":85},[47,43377,228],{"class":221},[47,43379,43380],{"class":49,"line":8138},[47,43381,2493],{"emptyLinePlaceholder":145},[47,43383,43384],{"class":49,"line":8150},[47,43385,32315],{"class":279},[47,43387,43388,43390,43392],{"class":49,"line":9809},[47,43389,32320],{"class":221},[47,43391,267],{"class":217},[47,43393,32325],{"class":221},[47,43395,43396],{"class":49,"line":9834},[47,43397,2493],{"emptyLinePlaceholder":145},[47,43399,43400],{"class":49,"line":9857},[47,43401,32334],{"class":279},[47,43403,43404,43406,43408],{"class":49,"line":9881},[47,43405,31343],{"class":221},[47,43407,267],{"class":217},[47,43409,32343],{"class":221},[47,43411,43412],{"class":49,"line":9886},[47,43413,32348],{"class":279},[47,43415,43416],{"class":49,"line":9891},[47,43417,32353],{"class":279},[47,43419,43420],{"class":49,"line":9896},[47,43421,32358],{"class":279},[47,43423,43424,43426,43428],{"class":49,"line":9905},[47,43425,32363],{"class":221},[47,43427,267],{"class":217},[47,43429,32368],{"class":221},[47,43431,43432],{"class":49,"line":9910},[47,43433,2493],{"emptyLinePlaceholder":145},[47,43435,43436],{"class":49,"line":9916},[47,43437,2493],{"emptyLinePlaceholder":145},[47,43439,43440],{"class":49,"line":9937},[47,43441,32381],{"class":279},[47,43443,43444],{"class":49,"line":9943},[47,43445,32386],{"class":279},[47,43447,43448,43450,43452],{"class":49,"line":9957},[47,43449,32391],{"class":221},[47,43451,267],{"class":217},[47,43453,32396],{"class":85},[47,43455,43456],{"class":49,"line":9963},[47,43457,32401],{"class":279},[47,43459,43460,43462,43464],{"class":49,"line":9990},[47,43461,32406],{"class":221},[47,43463,267],{"class":217},[47,43465,32411],{"class":221},[47,43467,43468],{"class":49,"line":9999},[47,43469,32416],{"class":279},[47,43471,43472,43474,43476],{"class":49,"line":10005},[47,43473,32421],{"class":221},[47,43475,267],{"class":217},[47,43477,32411],{"class":221},[47,43479,43480],{"class":49,"line":10013},[47,43481,32430],{"class":279},[47,43483,43484,43486,43488],{"class":49,"line":10018},[47,43485,32435],{"class":221},[47,43487,267],{"class":217},[47,43489,32411],{"class":221},[47,43491,43492],{"class":49,"line":16697},[47,43493,32444],{"class":279},[47,43495,43496,43498,43500],{"class":49,"line":16703},[47,43497,32449],{"class":221},[47,43499,267],{"class":217},[47,43501,32411],{"class":221},[47,43503,43504],{"class":49,"line":16726},[47,43505,2493],{"emptyLinePlaceholder":145},[47,43507,43508],{"class":49,"line":16732},[47,43509,32462],{"class":279},[47,43511,43512,43514,43516],{"class":49,"line":16755},[47,43513,32467],{"class":221},[47,43515,267],{"class":217},[47,43517,32472],{"class":221},[47,43519,43520],{"class":49,"line":16769},[47,43521,2493],{"emptyLinePlaceholder":145},[47,43523,43524],{"class":49,"line":16789},[47,43525,2493],{"emptyLinePlaceholder":145},[47,43527,43528],{"class":49,"line":16795},[47,43529,32485],{"class":279},[47,43531,43532,43534,43536,43538,43540],{"class":49,"line":16806},[47,43533,3294],{"class":217},[47,43535,32492],{"class":221},[47,43537,26097],{"class":217},[47,43539,32497],{"class":85},[47,43541,32500],{"class":221},[47,43543,43544,43546,43548,43550,43552,43554,43556,43558,43560,43562,43564],{"class":49,"line":16829},[47,43545,32505],{"class":85},[47,43547,222],{"class":221},[47,43549,32510],{"class":81},[47,43551,32513],{"class":85},[47,43553,803],{"class":81},[47,43555,32513],{"class":85},[47,43557,470],{"class":81},[47,43559,32522],{"class":221},[47,43561,751],{"class":217},[47,43563,436],{"class":85},[47,43565,30551],{"class":221},[47,43567,43568,43570,43572,43574,43576,43578],{"class":49,"line":16851},[47,43569,32505],{"class":85},[47,43571,222],{"class":221},[47,43573,32537],{"class":81},[47,43575,674],{"class":217},[47,43577,665],{"class":85},[47,43579,228],{"class":221},[47,43581,43582],{"class":49,"line":16856},[47,43583,2493],{"emptyLinePlaceholder":145},[47,43585,43586],{"class":49,"line":16862},[47,43587,32552],{"class":279},[47,43589,43590],{"class":49,"line":16876},[47,43591,32557],{"class":279},[47,43593,43594,43596,43598],{"class":49,"line":16889},[47,43595,32562],{"class":221},[47,43597,267],{"class":217},[47,43599,32396],{"class":85},[47,43601,43602],{"class":49,"line":16894},[47,43603,32571],{"class":279},[47,43605,43606,43608,43610],{"class":49,"line":16908},[47,43607,32576],{"class":221},[47,43609,267],{"class":217},[47,43611,3178],{"class":85},[47,43613,43614],{"class":49,"line":16913},[47,43615,32585],{"class":279},[47,43617,43618,43620,43622],{"class":49,"line":16919},[47,43619,32590],{"class":221},[47,43621,267],{"class":217},[47,43623,32396],{"class":85},[47,43625,43626],{"class":49,"line":16924},[47,43627,32599],{"class":279},[47,43629,43630,43632,43634],{"class":49,"line":16938},[47,43631,32604],{"class":221},[47,43633,267],{"class":217},[47,43635,3178],{"class":85},[47,43637,43638],{"class":49,"line":16943},[47,43639,32613],{"class":279},[47,43641,43642,43644,43646],{"class":49,"line":16948},[47,43643,32618],{"class":221},[47,43645,267],{"class":217},[47,43647,3178],{"class":85},[47,43649,43650],{"class":49,"line":16962},[47,43651,32627],{"class":279},[47,43653,43654,43656,43658],{"class":49,"line":16974},[47,43655,32632],{"class":221},[47,43657,267],{"class":217},[47,43659,3178],{"class":85},[47,43661,43662],{"class":49,"line":16979},[47,43663,32641],{"class":279},[47,43665,43666,43668,43670,43672,43674],{"class":49,"line":16992},[47,43667,3496],{"class":217},[47,43669,31655],{"class":221},[47,43671,26097],{"class":217},[47,43673,31660],{"class":85},[47,43675,32654],{"class":221},[47,43677,43678],{"class":49,"line":16997},[47,43679,32659],{"class":279},[47,43681,43682,43684,43686],{"class":49,"line":17002},[47,43683,32664],{"class":221},[47,43685,267],{"class":217},[47,43687,32669],{"class":221},[47,43689,43690],{"class":49,"line":17007},[47,43691,32674],{"class":279},[47,43693,43694,43696,43698],{"class":49,"line":17020},[47,43695,32679],{"class":221},[47,43697,267],{"class":217},[47,43699,32684],{"class":221},[47,43701,43702],{"class":49,"line":17025},[47,43703,32690],{"class":279},[47,43705,43706],{"class":49,"line":32687},[47,43707,32696],{"class":221},[47,43709,43710],{"class":49,"line":32693},[47,43711,32702],{"class":279},[47,43713,43714],{"class":49,"line":32699},[47,43715,32708],{"class":279},[47,43717,43718,43720,43722],{"class":49,"line":32705},[47,43719,32714],{"class":221},[47,43721,267],{"class":217},[47,43723,32719],{"class":221},[47,43725,43726],{"class":49,"line":32711},[47,43727,32725],{"class":279},[47,43729,43730,43732,43734,43736,43738,43740,43742],{"class":49,"line":32722},[47,43731,32731],{"class":221},[47,43733,267],{"class":217},[47,43735,32736],{"class":221},[47,43737,32739],{"class":5309},[47,43739,267],{"class":217},[47,43741,436],{"class":85},[47,43743,228],{"class":221},[47,43745,43746],{"class":49,"line":32728},[47,43747,32751],{"class":279},[47,43749,43750,43752,43754],{"class":49,"line":32748},[47,43751,32757],{"class":221},[47,43753,267],{"class":217},[47,43755,32762],{"class":221},[47,43757,43758],{"class":49,"line":32754},[47,43759,32768],{"class":279},[47,43761,43762],{"class":49,"line":32765},[47,43763,32774],{"class":221},[47,43765,43766],{"class":49,"line":32771},[47,43767,32780],{"class":279},[47,43769,43770],{"class":49,"line":32777},[47,43771,32786],{"class":221},[47,43773,43774],{"class":49,"line":32783},[47,43775,32792],{"class":279},[47,43777,43778],{"class":49,"line":32789},[47,43779,32798],{"class":221},[47,43781,43782],{"class":49,"line":32795},[47,43783,32804],{"class":279},[47,43785,43786,43788,43790,43792,43794,43796,43798],{"class":49,"line":32801},[47,43787,32810],{"class":221},[47,43789,9570],{"class":217},[47,43791,32815],{"class":221},[47,43793,674],{"class":217},[47,43795,32820],{"class":221},[47,43797,411],{"class":85},[47,43799,228],{"class":221},[47,43801,43802],{"class":49,"line":32807},[47,43803,32830],{"class":279},[47,43805,43806,43808,43810,43812,43814],{"class":49,"line":32827},[47,43807,32836],{"class":221},[47,43809,9570],{"class":217},[47,43811,32841],{"class":221},[47,43813,3042],{"class":217},[47,43815,32846],{"class":221},[47,43817,43818],{"class":49,"line":32833},[47,43819,32852],{"class":279},[47,43821,43822,43824,43826,43828,43830],{"class":49,"line":32849},[47,43823,32858],{"class":221},[47,43825,9570],{"class":217},[47,43827,32820],{"class":221},[47,43829,411],{"class":85},[47,43831,228],{"class":221},[47,43833,43834],{"class":49,"line":32855},[47,43835,32872],{"class":279},[47,43837,43838,43840,43842,43844,43846],{"class":49,"line":32869},[47,43839,3496],{"class":217},[47,43841,32880],{"class":221},[47,43843,26097],{"class":217},[47,43845,31660],{"class":85},[47,43847,32887],{"class":221},[47,43849,43850],{"class":49,"line":32875},[47,43851,32893],{"class":279},[47,43853,43854,43856,43858],{"class":49,"line":32890},[47,43855,32664],{"class":221},[47,43857,267],{"class":217},[47,43859,32669],{"class":221},[47,43861,43862],{"class":49,"line":32896},[47,43863,32908],{"class":279},[47,43865,43866,43868,43870],{"class":49,"line":32905},[47,43867,32679],{"class":221},[47,43869,267],{"class":217},[47,43871,32684],{"class":221},[47,43873,43874],{"class":49,"line":32911},[47,43875,32923],{"class":279},[47,43877,43878],{"class":49,"line":32920},[47,43879,32929],{"class":221},[47,43881,43882],{"class":49,"line":32926},[47,43883,36410],{"class":279},[47,43885,43886,43888],{"class":49,"line":32932},[47,43887,32935],{"class":217},[47,43889,32938],{"class":221},[47,43891,43892],{"class":49,"line":32941},[47,43893,32944],{"class":279},[47,43895,43896,43898,43900],{"class":49,"line":32947},[47,43897,36425],{"class":221},[47,43899,267],{"class":217},[47,43901,32719],{"class":221},[47,43903,43904],{"class":49,"line":32958},[47,43905,32961],{"class":279},[47,43907,43908,43910,43912,43914,43916,43918,43920],{"class":49,"line":32964},[47,43909,36438],{"class":221},[47,43911,267],{"class":217},[47,43913,32736],{"class":221},[47,43915,32739],{"class":5309},[47,43917,267],{"class":217},[47,43919,436],{"class":85},[47,43921,228],{"class":221},[47,43923,43924],{"class":49,"line":32983},[47,43925,32986],{"class":279},[47,43927,43928,43930,43932],{"class":49,"line":32989},[47,43929,36459],{"class":221},[47,43931,267],{"class":217},[47,43933,32762],{"class":221},[47,43935,43936],{"class":49,"line":33000},[47,43937,33003],{"class":279},[47,43939,43940,43942,43944,43946,43948,43950,43952],{"class":49,"line":33006},[47,43941,36472],{"class":221},[47,43943,9570],{"class":217},[47,43945,36477],{"class":221},[47,43947,674],{"class":217},[47,43949,32820],{"class":221},[47,43951,411],{"class":85},[47,43953,228],{"class":221},[47,43955,43956,43958,43960,43962,43964],{"class":49,"line":33026},[47,43957,36490],{"class":221},[47,43959,9570],{"class":217},[47,43961,32841],{"class":221},[47,43963,3042],{"class":217},[47,43965,32846],{"class":221},[47,43967,43968],{"class":49,"line":33042},[47,43969,36503],{"class":279},[47,43971,43972,43974,43976,43978,43980],{"class":49,"line":33048},[47,43973,36508],{"class":221},[47,43975,9570],{"class":217},[47,43977,32820],{"class":221},[47,43979,411],{"class":85},[47,43981,228],{"class":221},[47,43983,43984],{"class":49,"line":33062},[47,43985,33065],{"class":279},[47,43987,43988],{"class":49,"line":33068},[47,43989,33071],{"class":279},[47,43991,43992,43994,43996],{"class":49,"line":33074},[47,43993,33077],{"class":221},[47,43995,803],{"class":217},[47,43997,33082],{"class":221},[47,43999,44000],{"class":49,"line":33085},[47,44001,33088],{"class":279},[47,44003,44004],{"class":49,"line":33091},[47,44005,33094],{"class":279},[47,44007,44008,44010,44012],{"class":49,"line":33097},[47,44009,33100],{"class":221},[47,44011,803],{"class":217},[47,44013,33082],{"class":221},[47,44015,44016],{"class":49,"line":33107},[47,44017,33110],{"class":279},[47,44019,44020,44022,44024],{"class":49,"line":33113},[47,44021,33116],{"class":221},[47,44023,803],{"class":217},[47,44025,33121],{"class":221},[47,44027,44028],{"class":49,"line":33124},[47,44029,33127],{"class":279},[47,44031,44032,44034,44036],{"class":49,"line":33130},[47,44033,33133],{"class":221},[47,44035,803],{"class":217},[47,44037,33121],{"class":221},[47,44039,44040],{"class":49,"line":33140},[47,44041,2493],{"emptyLinePlaceholder":145},[47,44043,44044],{"class":49,"line":33145},[47,44045,33148],{"class":279},[47,44047,44048,44050,44052,44054,44056,44058,44060,44062,44064,44066,44068,44070,44072,44074,44076,44078,44080,44082,44084,44086],{"class":49,"line":33151},[47,44049,32505],{"class":85},[47,44051,222],{"class":221},[47,44053,3685],{"class":81},[47,44055,32513],{"class":85},[47,44057,33162],{"class":81},[47,44059,1115],{"class":85},[47,44061,33167],{"class":217},[47,44063,1165],{"class":85},[47,44065,33172],{"class":81},[47,44067,1115],{"class":85},[47,44069,33167],{"class":217},[47,44071,1165],{"class":85},[47,44073,3685],{"class":81},[47,44075,33183],{"class":221},[47,44077,751],{"class":217},[47,44079,436],{"class":85},[47,44081,33190],{"class":221},[47,44083,751],{"class":217},[47,44085,436],{"class":85},[47,44087,33197],{"class":221},[47,44089,44090,44092,44094,44096,44098,44100,44102,44104,44106,44108,44110,44112,44114,44116,44118,44120,44122,44124,44126,44128],{"class":49,"line":33200},[47,44091,32505],{"class":85},[47,44093,222],{"class":221},[47,44095,3685],{"class":81},[47,44097,32513],{"class":85},[47,44099,33211],{"class":81},[47,44101,1115],{"class":85},[47,44103,33167],{"class":217},[47,44105,1165],{"class":85},[47,44107,33220],{"class":81},[47,44109,1115],{"class":85},[47,44111,33167],{"class":217},[47,44113,1165],{"class":85},[47,44115,3685],{"class":81},[47,44117,33231],{"class":221},[47,44119,751],{"class":217},[47,44121,436],{"class":85},[47,44123,33238],{"class":221},[47,44125,751],{"class":217},[47,44127,436],{"class":85},[47,44129,33197],{"class":221},[47,44131,44132],{"class":49,"line":33247},[47,44133,2493],{"emptyLinePlaceholder":145},[47,44135,44136],{"class":49,"line":33252},[47,44137,33255],{"class":279},[47,44139,44140,44142,44144,44146,44148,44150,44152],{"class":49,"line":33258},[47,44141,2590],{"class":217},[47,44143,33263],{"class":221},[47,44145,751],{"class":217},[47,44147,436],{"class":85},[47,44149,1159],{"class":221},[47,44151,1179],{"class":217},[47,44153,33274],{"class":221},[47,44155,44156],{"class":49,"line":33277},[47,44157,33280],{"class":279},[47,44159,44160,44162,44164,44166,44168,44170,44172],{"class":49,"line":33283},[47,44161,33286],{"class":221},[47,44163,261],{"class":85},[47,44165,267],{"class":217},[47,44167,33293],{"class":221},[47,44169,751],{"class":217},[47,44171,436],{"class":85},[47,44173,33300],{"class":221},[47,44175,44176],{"class":49,"line":33303},[47,44177,33306],{"class":279},[47,44179,44180],{"class":49,"line":33309},[47,44181,33312],{"class":279},[47,44183,44184,44186,44188],{"class":49,"line":33315},[47,44185,33318],{"class":221},[47,44187,267],{"class":217},[47,44189,32368],{"class":221},[47,44191,44192],{"class":49,"line":33325},[47,44193,2493],{"emptyLinePlaceholder":145},[47,44195,44196],{"class":49,"line":33330},[47,44197,33333],{"class":279},[47,44199,44200,44202,44204,44206,44208],{"class":49,"line":33336},[47,44201,33339],{"class":221},[47,44203,267],{"class":217},[47,44205,33344],{"class":221},[47,44207,751],{"class":217},[47,44209,33349],{"class":221},[47,44211,44212,44214,44216,44218,44220,44222,44224,44226,44228,44230,44232,44234,44236,44238,44240,44242,44244,44246],{"class":49,"line":33352},[47,44213,32505],{"class":85},[47,44215,222],{"class":221},[47,44217,33359],{"class":81},[47,44219,1115],{"class":85},[47,44221,33364],{"class":217},[47,44223,1165],{"class":85},[47,44225,763],{"class":81},[47,44227,1115],{"class":85},[47,44229,33364],{"class":217},[47,44231,1165],{"class":85},[47,44233,33377],{"class":81},[47,44235,33380],{"class":221},[47,44237,33383],{"class":217},[47,44239,1126],{"class":85},[47,44241,33388],{"class":221},[47,44243,547],{"class":217},[47,44245,1126],{"class":85},[47,44247,30551],{"class":221},[47,44249,44250],{"class":49,"line":33397},[47,44251,36787],{"class":279},[47,44253,44254],{"class":49,"line":33403},[47,44255,36792],{"class":279},[47,44257,44258,44260,44262],{"class":49,"line":33409},[47,44259,36797],{"class":221},[47,44261,33421],{"class":81},[47,44263,228],{"class":221},[47,44265,44266],{"class":49,"line":33415},[47,44267,33441],{"class":279},[47,44269,44270,44272,44274,44276,44278,44280],{"class":49,"line":33426},[47,44271,33447],{"class":221},[47,44273,267],{"class":217},[47,44275,33452],{"class":221},[47,44277,33455],{"class":5309},[47,44279,267],{"class":217},[47,44281,1640],{"class":221},[47,44283,44284,44286,44288,44290],{"class":49,"line":33432},[47,44285,33465],{"class":81},[47,44287,1078],{"class":221},[47,44289,33470],{"class":85},[47,44291,33473],{"class":221},[47,44293,44294,44296],{"class":49,"line":33438},[47,44295,33479],{"class":81},[47,44297,33482],{"class":221},[47,44299,44300,44302],{"class":49,"line":33444},[47,44301,33488],{"class":81},[47,44303,33491],{"class":221},[47,44305,44306,44308],{"class":49,"line":33462},[47,44307,33497],{"class":81},[47,44309,33500],{"class":221},[47,44311,44312,44314],{"class":49,"line":33476},[47,44313,33506],{"class":81},[47,44315,33509],{"class":221},[47,44317,44318],{"class":49,"line":33485},[47,44319,33515],{"class":221},[47,44321,44322],{"class":49,"line":33494},[47,44323,33521],{"class":279},[47,44325,44326,44328],{"class":49,"line":33503},[47,44327,4183],{"class":217},[47,44329,33529],{"class":221},[47,44331,44332],{"class":49,"line":33512},[47,44333,2493],{"emptyLinePlaceholder":145},[47,44335,44336],{"class":49,"line":33518},[47,44337,33540],{"class":279},[47,44339,44340,44342,44344],{"class":49,"line":33524},[47,44341,32001],{"class":217},[47,44343,33548],{"class":53},[47,44345,33551],{"class":221},[47,44347,44348],{"class":49,"line":33532},[47,44349,33557],{"class":279},[47,44351,44352,44354,44356,44358,44360,44362,44364,44366],{"class":49,"line":33537},[47,44353,33563],{"class":221},[47,44355,31747],{"class":5309},[47,44357,267],{"class":217},[47,44359,222],{"class":221},[47,44361,717],{"class":85},[47,44363,597],{"class":221},[47,44365,512],{"class":85},[47,44367,30551],{"class":221},[47,44369,44370],{"class":49,"line":33543},[47,44371,33583],{"class":279},[47,44373,44374],{"class":49,"line":33554},[47,44375,33589],{"class":279},[47,44377,44378],{"class":49,"line":33560},[47,44379,33595],{"class":279},[47,44381,44382,44384,44386,44388,44390,44392,44394],{"class":49,"line":33580},[47,44383,31781],{"class":221},[47,44385,436],{"class":85},[47,44387,597],{"class":221},[47,44389,298],{"class":85},[47,44391,597],{"class":221},[47,44393,436],{"class":85},[47,44395,228],{"class":221},[47,44397,44398],{"class":49,"line":33586},[47,44399,33618],{"class":279},[47,44401,44402],{"class":49,"line":33592},[47,44403,33624],{"class":279},[47,44405,44406],{"class":49,"line":33598},[47,44407,33630],{"class":279},[47,44409,44410],{"class":49,"line":33615},[47,44411,33636],{"class":279},[47,44413,44414],{"class":49,"line":33621},[47,44415,33642],{"class":279},[47,44417,44418,44420,44422,44424,44426,44428,44430,44432,44434],{"class":49,"line":33627},[47,44419,33648],{"class":221},[47,44421,33651],{"class":81},[47,44423,33654],{"class":221},[47,44425,33657],{"class":81},[47,44427,597],{"class":221},[47,44429,33662],{"class":5309},[47,44431,267],{"class":217},[47,44433,33667],{"class":81},[47,44435,228],{"class":221},[47,44437,44438,44440,44442,44444,44446,44448,44450,44452,44454],{"class":49,"line":33633},[47,44439,33648],{"class":221},[47,44441,33651],{"class":81},[47,44443,33679],{"class":221},[47,44445,33682],{"class":81},[47,44447,597],{"class":221},[47,44449,33662],{"class":5309},[47,44451,267],{"class":217},[47,44453,33691],{"class":81},[47,44455,228],{"class":221},[47,44457,44458],{"class":49,"line":33639},[47,44459,33699],{"class":279},[47,44461,44462],{"class":49,"line":33645},[47,44463,33705],{"class":221},[47,44465,44466],{"class":49,"line":33672},[47,44467,33711],{"class":279},[47,44469,44470,44472,44474],{"class":49,"line":33696},[47,44471,33717],{"class":221},[47,44473,33720],{"class":81},[47,44475,228],{"class":221},[47,44477,44478,44480,44482],{"class":49,"line":33702},[47,44479,33728],{"class":221},[47,44481,33731],{"class":81},[47,44483,228],{"class":221},[47,44485,44486],{"class":49,"line":33708},[47,44487,33739],{"class":279},[47,44489,44490,44492,44494,44496,44498,44500,44502],{"class":49,"line":33714},[47,44491,31781],{"class":221},[47,44493,436],{"class":85},[47,44495,597],{"class":221},[47,44497,298],{"class":85},[47,44499,597],{"class":221},[47,44501,298],{"class":85},[47,44503,228],{"class":221},[47,44505,44506,44508,44510,44512,44514,44516,44518,44520,44522],{"class":49,"line":33725},[47,44507,33648],{"class":221},[47,44509,33651],{"class":81},[47,44511,33766],{"class":221},[47,44513,33657],{"class":81},[47,44515,597],{"class":221},[47,44517,33662],{"class":5309},[47,44519,267],{"class":217},[47,44521,33777],{"class":81},[47,44523,228],{"class":221},[47,44525,44526,44528,44530,44532,44534,44536,44538,44540,44542],{"class":49,"line":33736},[47,44527,33648],{"class":221},[47,44529,33651],{"class":81},[47,44531,33789],{"class":221},[47,44533,33682],{"class":81},[47,44535,597],{"class":221},[47,44537,33662],{"class":5309},[47,44539,267],{"class":217},[47,44541,33800],{"class":81},[47,44543,228],{"class":221},[47,44545,44546],{"class":49,"line":33742},[47,44547,33808],{"class":279},[47,44549,44550],{"class":49,"line":33759},[47,44551,33705],{"class":221},[47,44553,44554,44556,44558],{"class":49,"line":33782},[47,44555,33717],{"class":221},[47,44557,33651],{"class":81},[47,44559,228],{"class":221},[47,44561,44562,44564,44566],{"class":49,"line":33805},[47,44563,33728],{"class":221},[47,44565,33830],{"class":81},[47,44567,228],{"class":221},[47,44569,44570],{"class":49,"line":33811},[47,44571,33838],{"class":221},[47,44573,44574],{"class":49,"line":33816},[47,44575,2493],{"emptyLinePlaceholder":145},[47,44577,44578],{"class":49,"line":33825},[47,44579,33849],{"class":279},[47,44581,44582,44584,44586,44588,44590],{"class":49,"line":33835},[47,44583,1625],{"class":217},[47,44585,31274],{"class":85},[47,44587,3042],{"class":217},[47,44589,31279],{"class":81},[47,44591,3832],{"class":221},[47,44593,44594],{"class":49,"line":33841},[47,44595,33868],{"class":279},[47,44597,44598,44601,44603],{"class":49,"line":33846},[47,44599,44600],{"class":221},"    GoogLeNet",[47,44602,267],{"class":217},[47,44604,44605],{"class":221},"GoogLeNet(Inception)\n",[47,44607,44608,44610,44612],{"class":49,"line":33852},[47,44609,33885],{"class":221},[47,44611,267],{"class":217},[47,44613,33890],{"class":221},[47,44615,44616,44618,44620,44623,44625,44627,44629],{"class":49,"line":33865},[47,44617,33447],{"class":221},[47,44619,267],{"class":217},[47,44621,44622],{"class":221},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[47,44624,33903],{"class":5309},[47,44626,267],{"class":217},[47,44628,1170],{"class":85},[47,44630,228],{"class":221},[47,44632,44633],{"class":49,"line":33871},[47,44634,33915],{"class":221},[171,44636,44637],{"start":1273},[109,44638,40628],{},[38,44640,44642],{"className":30432,"code":44641,"language":30434,"meta":43,"style":43},"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",[26,44643,44644,44650,44660,44670,44674,44684,44695,44699,44703,44707,44715,44731,44741,44757,44767,44781,44785,44795,44805,44815,44821,44825,44829,44837,44841,44857,44865,44869,44873,44881,44889,44893,44897,44901,44905,44911,44915,44925,44933,44941,44945,44949,44953,44961,44965,44981,44985,44989,44993,45005,45009,45021,45025,45029,45041,45045,45055,45059,45063,45075,45079,45087,45091,45095,45103,45107,45115,45119,45123,45127,45131,45135,45151,45159,45163,45167,45215,45221,45225,45235,45243,45251,45255,45259,45263,45267,45275,45279,45295,45299,45307,45315],{"__ignoreMap":43},[47,44645,44646,44648],{"class":49,"line":50},[47,44647,30446],{"class":217},[47,44649,30449],{"class":221},[47,44651,44652,44654,44656,44658],{"class":49,"line":92},[47,44653,30446],{"class":217},[47,44655,31469],{"class":221},[47,44657,31437],{"class":217},[47,44659,31474],{"class":221},[47,44661,44662,44664,44666,44668],{"class":49,"line":1273},[47,44663,30791],{"class":217},[47,44665,31452],{"class":221},[47,44667,30446],{"class":217},[47,44669,31457],{"class":221},[47,44671,44672],{"class":49,"line":1288},[47,44673,33976],{"class":279},[47,44675,44676,44678,44680,44682],{"class":49,"line":1294},[47,44677,30791],{"class":217},[47,44679,31422],{"class":221},[47,44681,30446],{"class":217},[47,44683,31427],{"class":221},[47,44685,44686,44688,44690,44692],{"class":49,"line":1308},[47,44687,30791],{"class":217},[47,44689,31968],{"class":221},[47,44691,30446],{"class":217},[47,44693,44694],{"class":221}," GoogLeNet,Inception\n",[47,44696,44697],{"class":49,"line":1314},[47,44698,2493],{"emptyLinePlaceholder":145},[47,44700,44701],{"class":49,"line":1405},[47,44702,2493],{"emptyLinePlaceholder":145},[47,44704,44705],{"class":49,"line":1411},[47,44706,34005],{"class":279},[47,44708,44709,44711,44713],{"class":49,"line":1423},[47,44710,32001],{"class":217},[47,44712,34012],{"class":53},[47,44714,32007],{"class":221},[47,44716,44717,44719,44721,44723,44725,44727,44729],{"class":49,"line":1706},[47,44718,34019],{"class":221},[47,44720,267],{"class":217},[47,44722,31509],{"class":221},[47,44724,31512],{"class":5309},[47,44726,267],{"class":217},[47,44728,31517],{"class":81},[47,44730,31520],{"class":221},[47,44732,44733,44735,44737,44739],{"class":49,"line":1711},[47,44734,34036],{"class":5309},[47,44736,267],{"class":217},[47,44738,34041],{"class":85},[47,44740,31520],{"class":221},[47,44742,44743,44745,44747,44749,44751,44753,44755],{"class":49,"line":1717},[47,44744,34048],{"class":5309},[47,44746,267],{"class":217},[47,44748,31547],{"class":221},[47,44750,31550],{"class":5309},[47,44752,267],{"class":217},[47,44754,35503],{"class":85},[47,44756,31558],{"class":221},[47,44758,44759,44761,44763,44765],{"class":49,"line":1722},[47,44760,34065],{"class":5309},[47,44762,267],{"class":217},[47,44764,31530],{"class":85},[47,44766,228],{"class":221},[47,44768,44769,44771,44773,44775,44777,44779],{"class":49,"line":1736},[47,44770,34076],{"class":221},[47,44772,267],{"class":217},[47,44774,31588],{"class":221},[47,44776,31591],{"class":5309},[47,44778,267],{"class":217},[47,44780,34087],{"class":221},[47,44782,44783],{"class":49,"line":1741},[47,44784,34092],{"class":279},[47,44786,44787,44789,44791,44793],{"class":49,"line":1747},[47,44788,34097],{"class":5309},[47,44790,267],{"class":217},[47,44792,436],{"class":85},[47,44794,31520],{"class":221},[47,44796,44797,44799,44801,44803],{"class":49,"line":1768},[47,44798,34108],{"class":5309},[47,44800,267],{"class":217},[47,44802,31530],{"class":85},[47,44804,31520],{"class":221},[47,44806,44807,44809,44811,44813],{"class":49,"line":1773},[47,44808,34119],{"class":5309},[47,44810,267],{"class":217},[47,44812,411],{"class":85},[47,44814,228],{"class":221},[47,44816,44817,44819],{"class":49,"line":1787},[47,44818,4183],{"class":217},[47,44820,34132],{"class":221},[47,44822,44823],{"class":49,"line":1792},[47,44824,2493],{"emptyLinePlaceholder":145},[47,44826,44827],{"class":49,"line":1821},[47,44828,34141],{"class":279},[47,44830,44831,44833,44835],{"class":49,"line":1826},[47,44832,32001],{"class":217},[47,44834,34148],{"class":53},[47,44836,34151],{"class":221},[47,44838,44839],{"class":49,"line":1843},[47,44840,34156],{"class":279},[47,44842,44843,44845,44847,44849,44851,44853,44855],{"class":49,"line":1848},[47,44844,31291],{"class":221},[47,44846,267],{"class":217},[47,44848,31298],{"class":81},[47,44850,1798],{"class":217},[47,44852,31303],{"class":221},[47,44854,1795],{"class":217},[47,44856,34173],{"class":81},[47,44858,44859,44861,44863],{"class":49,"line":1853},[47,44860,31343],{"class":221},[47,44862,267],{"class":217},[47,44864,32343],{"class":221},[47,44866,44867],{"class":49,"line":1858},[47,44868,2493],{"emptyLinePlaceholder":145},[47,44870,44871],{"class":49,"line":1872},[47,44872,34190],{"class":279},[47,44874,44875,44877,44879],{"class":49,"line":1877},[47,44876,34195],{"class":221},[47,44878,267],{"class":217},[47,44880,32396],{"class":85},[47,44882,44883,44885,44887],{"class":49,"line":2670},[47,44884,34204],{"class":221},[47,44886,267],{"class":217},[47,44888,3178],{"class":85},[47,44890,44891],{"class":49,"line":2684},[47,44892,2493],{"emptyLinePlaceholder":145},[47,44894,44895],{"class":49,"line":2692},[47,44896,34217],{"class":279},[47,44898,44899],{"class":49,"line":2697},[47,44900,34222],{"class":279},[47,44902,44903],{"class":49,"line":2703},[47,44904,34227],{"class":279},[47,44906,44907,44909],{"class":49,"line":2709},[47,44908,34232],{"class":217},[47,44910,32938],{"class":221},[47,44912,44913],{"class":49,"line":2714},[47,44914,34239],{"class":279},[47,44916,44917,44919,44921,44923],{"class":49,"line":8041},[47,44918,3496],{"class":217},[47,44920,34246],{"class":221},[47,44922,26097],{"class":217},[47,44924,34251],{"class":221},[47,44926,44927,44929,44931],{"class":49,"line":8065},[47,44928,34256],{"class":221},[47,44930,267],{"class":217},[47,44932,34261],{"class":221},[47,44934,44935,44937,44939],{"class":49,"line":8070},[47,44936,34266],{"class":221},[47,44938,267],{"class":217},[47,44940,34271],{"class":221},[47,44942,44943],{"class":49,"line":8076},[47,44944,34276],{"class":279},[47,44946,44947],{"class":49,"line":8103},[47,44948,32929],{"class":221},[47,44950,44951],{"class":49,"line":8108},[47,44952,34285],{"class":279},[47,44954,44955,44957,44959],{"class":49,"line":8114},[47,44956,32714],{"class":221},[47,44958,267],{"class":217},[47,44960,34294],{"class":221},[47,44962,44963],{"class":49,"line":8126},[47,44964,34299],{"class":279},[47,44966,44967,44969,44971,44973,44975,44977,44979],{"class":49,"line":8138},[47,44968,32731],{"class":221},[47,44970,267],{"class":217},[47,44972,32736],{"class":221},[47,44974,32739],{"class":5309},[47,44976,267],{"class":217},[47,44978,436],{"class":85},[47,44980,228],{"class":221},[47,44982,44983],{"class":49,"line":8150},[47,44984,34320],{"class":279},[47,44986,44987],{"class":49,"line":9809},[47,44988,34325],{"class":279},[47,44990,44991],{"class":49,"line":9834},[47,44992,34330],{"class":279},[47,44994,44995,44997,44999,45001,45003],{"class":49,"line":9857},[47,44996,34335],{"class":221},[47,44998,9570],{"class":217},[47,45000,32841],{"class":221},[47,45002,3042],{"class":217},[47,45004,34344],{"class":221},[47,45006,45007],{"class":49,"line":9881},[47,45008,34349],{"class":279},[47,45010,45011,45013,45015,45017,45019],{"class":49,"line":9886},[47,45012,34354],{"class":221},[47,45014,9570],{"class":217},[47,45016,34359],{"class":221},[47,45018,411],{"class":85},[47,45020,228],{"class":221},[47,45022,45023],{"class":49,"line":9891},[47,45024,2493],{"emptyLinePlaceholder":145},[47,45026,45027],{"class":49,"line":9896},[47,45028,34372],{"class":279},[47,45030,45031,45033,45035,45037,45039],{"class":49,"line":9905},[47,45032,34377],{"class":221},[47,45034,267],{"class":217},[47,45036,34382],{"class":221},[47,45038,803],{"class":217},[47,45040,34387],{"class":221},[47,45042,45043],{"class":49,"line":9910},[47,45044,34392],{"class":279},[47,45046,45047,45049,45051,45053],{"class":49,"line":9916},[47,45048,32505],{"class":85},[47,45050,222],{"class":221},[47,45052,34401],{"class":81},[47,45054,34404],{"class":221},[47,45056,45057],{"class":49,"line":9937},[47,45058,2493],{"emptyLinePlaceholder":145},[47,45060,45061],{"class":49,"line":9943},[47,45062,34413],{"class":279},[47,45064,45065,45067,45069,45071,45073],{"class":49,"line":9957},[47,45066,1625],{"class":217},[47,45068,31274],{"class":85},[47,45070,3042],{"class":217},[47,45072,31279],{"class":81},[47,45074,3832],{"class":221},[47,45076,45077],{"class":49,"line":9963},[47,45078,34430],{"class":279},[47,45080,45081,45083,45085],{"class":49,"line":9990},[47,45082,31343],{"class":221},[47,45084,267],{"class":217},[47,45086,44605],{"class":221},[47,45088,45089],{"class":49,"line":9999},[47,45090,34443],{"class":279},[47,45092,45093],{"class":49,"line":10005},[47,45094,34448],{"class":279},[47,45096,45097,45099,45101],{"class":49,"line":10013},[47,45098,34453],{"class":221},[47,45100,34456],{"class":81},[47,45102,30551],{"class":221},[47,45104,45105],{"class":49,"line":10018},[47,45106,34463],{"class":279},[47,45108,45109,45111,45113],{"class":49,"line":16697},[47,45110,34076],{"class":221},[47,45112,267],{"class":217},[47,45114,34472],{"class":221},[47,45116,45117],{"class":49,"line":16703},[47,45118,34477],{"class":279},[47,45120,45121],{"class":49,"line":16726},[47,45122,34482],{"class":221},[47,45124,45125],{"class":49,"line":16732},[47,45126,2493],{"emptyLinePlaceholder":145},[47,45128,45129],{"class":49,"line":16755},[47,45130,34491],{"class":279},[47,45132,45133],{"class":49,"line":16769},[47,45134,34496],{"class":279},[47,45136,45137,45139,45141,45143,45145,45147,45149],{"class":49,"line":16789},[47,45138,31291],{"class":221},[47,45140,267],{"class":217},[47,45142,31298],{"class":81},[47,45144,1798],{"class":217},[47,45146,31303],{"class":221},[47,45148,1795],{"class":217},[47,45150,34173],{"class":81},[47,45152,45153,45155,45157],{"class":49,"line":16795},[47,45154,31343],{"class":221},[47,45156,267],{"class":217},[47,45158,32343],{"class":221},[47,45160,45161],{"class":49,"line":16806},[47,45162,34525],{"class":279},[47,45164,45165],{"class":49,"line":16829},[47,45166,34530],{"class":279},[47,45168,45169,45171,45173,45175,45177,45179,45181,45183,45185,45187,45189,45191,45193,45195,45197,45199,45201,45203,45205,45207,45209,45211,45213],{"class":49,"line":16851},[47,45170,34535],{"class":221},[47,45172,267],{"class":217},[47,45174,1109],{"class":221},[47,45176,34542],{"class":81},[47,45178,597],{"class":221},[47,45180,34547],{"class":81},[47,45182,597],{"class":221},[47,45184,34552],{"class":81},[47,45186,597],{"class":221},[47,45188,34557],{"class":81},[47,45190,597],{"class":221},[47,45192,34562],{"class":81},[47,45194,597],{"class":221},[47,45196,34567],{"class":81},[47,45198,597],{"class":221},[47,45200,34572],{"class":81},[47,45202,597],{"class":221},[47,45204,34577],{"class":81},[47,45206,597],{"class":221},[47,45208,34582],{"class":81},[47,45210,597],{"class":221},[47,45212,34587],{"class":81},[47,45214,33300],{"class":221},[47,45216,45217,45219],{"class":49,"line":16856},[47,45218,34232],{"class":217},[47,45220,32938],{"class":221},[47,45222,45223],{"class":49,"line":16862},[47,45224,34600],{"class":279},[47,45226,45227,45229,45231,45233],{"class":49,"line":16876},[47,45228,3496],{"class":217},[47,45230,34607],{"class":221},[47,45232,26097],{"class":217},[47,45234,34251],{"class":221},[47,45236,45237,45239,45241],{"class":49,"line":16889},[47,45238,32664],{"class":221},[47,45240,267],{"class":217},[47,45242,32669],{"class":221},[47,45244,45245,45247,45249],{"class":49,"line":16894},[47,45246,32679],{"class":221},[47,45248,267],{"class":217},[47,45250,32684],{"class":221},[47,45252,45253],{"class":49,"line":16908},[47,45254,2493],{"emptyLinePlaceholder":145},[47,45256,45257],{"class":49,"line":16913},[47,45258,34636],{"class":279},[47,45260,45261],{"class":49,"line":16919},[47,45262,32929],{"class":221},[47,45264,45265],{"class":49,"line":16924},[47,45266,34645],{"class":279},[47,45268,45269,45271,45273],{"class":49,"line":16938},[47,45270,32714],{"class":221},[47,45272,267],{"class":217},[47,45274,32719],{"class":221},[47,45276,45277],{"class":49,"line":16943},[47,45278,34658],{"class":279},[47,45280,45281,45283,45285,45287,45289,45291,45293],{"class":49,"line":16948},[47,45282,32731],{"class":221},[47,45284,267],{"class":217},[47,45286,32736],{"class":221},[47,45288,32739],{"class":5309},[47,45290,267],{"class":217},[47,45292,436],{"class":85},[47,45294,228],{"class":221},[47,45296,45297],{"class":49,"line":16962},[47,45298,34679],{"class":279},[47,45300,45301,45303,45305],{"class":49,"line":16974},[47,45302,34684],{"class":221},[47,45304,267],{"class":217},[47,45306,34689],{"class":221},[47,45308,45309,45311,45313],{"class":49,"line":16979},[47,45310,34694],{"class":221},[47,45312,267],{"class":217},[47,45314,34699],{"class":221},[47,45316,45317,45319,45321,45323,45325,45327,45329,45331],{"class":49,"line":16992},[47,45318,34704],{"class":85},[47,45320,222],{"class":221},[47,45322,34709],{"class":81},[47,45324,34712],{"class":221},[47,45326,34715],{"class":81},[47,45328,597],{"class":221},[47,45330,34720],{"class":81},[47,45332,34723],{"class":221},[187,45334,45336],{"id":45335},"_24训练自己的数据集","2.4.训练自己的数据集",[19,45338,45339],{},"猫狗分类任务",[19,45341,45342],{},"划分数据集和验证集",[38,45344,45346],{"className":30432,"code":45345,"language":30434,"meta":43,"style":43},"# 创建脚本，用于划分数据集和验证集\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",[26,45347,45348,45353,45360,45365,45376,45383,45387,45397,45411,45420,45424,45429,45439,45459,45463,45468,45478,45489,45502,45506,45511,45520,45530,45541,45545,45550,45560,45564,45569,45574,45579,45584,45589,45593,45603,45630,45643,45655,45682,45687,45692,45706,45711,45723,45738,45753,45761,45765,45770,45776,45788,45801,45806,45811,45816,45866,45872,45876],{"__ignoreMap":43},[47,45349,45350],{"class":49,"line":50},[47,45351,45352],{"class":279},"# 创建脚本，用于划分数据集和验证集\n",[47,45354,45355,45357],{"class":49,"line":92},[47,45356,30446],{"class":217},[47,45358,45359],{"class":221}," os\n",[47,45361,45362],{"class":49,"line":1273},[47,45363,45364],{"class":279},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[47,45366,45367,45369,45372,45374],{"class":49,"line":1288},[47,45368,30791],{"class":217},[47,45370,45371],{"class":221}," shutil ",[47,45373,30446],{"class":217},[47,45375,31876],{"class":221},[47,45377,45378,45380],{"class":49,"line":1294},[47,45379,30446],{"class":217},[47,45381,45382],{"class":221}," random\n",[47,45384,45385],{"class":49,"line":1308},[47,45386,2493],{"emptyLinePlaceholder":145},[47,45388,45389,45391,45394],{"class":49,"line":1314},[47,45390,32001],{"class":217},[47,45392,45393],{"class":53}," mkfile",[47,45395,45396],{"class":221},"(file):\n",[47,45398,45399,45401,45403,45406,45409],{"class":49,"line":1405},[47,45400,3194],{"class":217},[47,45402,38984],{"class":217},[47,45404,45405],{"class":221}," os.path.exists(",[47,45407,45408],{"class":5309},"file",[47,45410,30840],{"class":221},[47,45412,45413,45416,45418],{"class":49,"line":1411},[47,45414,45415],{"class":221},"        os.makedirs(",[47,45417,45408],{"class":5309},[47,45419,228],{"class":221},[47,45421,45422],{"class":49,"line":1423},[47,45423,2493],{"emptyLinePlaceholder":145},[47,45425,45426],{"class":49,"line":1706},[47,45427,45428],{"class":279},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[47,45430,45431,45434,45436],{"class":49,"line":1711},[47,45432,45433],{"class":221},"file_path",[47,45435,267],{"class":217},[47,45437,45438],{"class":81},"'data_cat_dog'\n",[47,45440,45441,45444,45446,45449,45451,45454,45456],{"class":49,"line":1717},[47,45442,45443],{"class":221},"flower_class",[47,45445,267],{"class":217},[47,45447,45448],{"class":221},"[cla ",[47,45450,3118],{"class":217},[47,45452,45453],{"class":221}," cla ",[47,45455,26097],{"class":217},[47,45457,45458],{"class":221}," os.listdir(file_path)]\n",[47,45460,45461],{"class":49,"line":1722},[47,45462,2493],{"emptyLinePlaceholder":145},[47,45464,45465],{"class":49,"line":1736},[47,45466,45467],{"class":279},"# 创建训练集train文件夹\n",[47,45469,45470,45473,45476],{"class":49,"line":1741},[47,45471,45472],{"class":221},"mkfile(",[47,45474,45475],{"class":81},"'data\u002Ftrain'",[47,45477,228],{"class":221},[47,45479,45480,45482,45484,45486],{"class":49,"line":1747},[47,45481,3118],{"class":217},[47,45483,45453],{"class":221},[47,45485,26097],{"class":217},[47,45487,45488],{"class":221}," flower_class:\n",[47,45490,45491,45494,45497,45499],{"class":49,"line":1768},[47,45492,45493],{"class":221},"    mkfile(",[47,45495,45496],{"class":81},"'data\u002Ftrain\u002F'",[47,45498,700],{"class":217},[47,45500,45501],{"class":221},"cla)\n",[47,45503,45504],{"class":49,"line":1773},[47,45505,2493],{"emptyLinePlaceholder":145},[47,45507,45508],{"class":49,"line":1787},[47,45509,45510],{"class":279},"# 创建验证集val文件夹\n",[47,45512,45513,45515,45518],{"class":49,"line":1792},[47,45514,45472],{"class":221},[47,45516,45517],{"class":81},"'data\u002Ftest'",[47,45519,228],{"class":221},[47,45521,45522,45524,45526,45528],{"class":49,"line":1821},[47,45523,3118],{"class":217},[47,45525,45453],{"class":221},[47,45527,26097],{"class":217},[47,45529,45488],{"class":221},[47,45531,45532,45534,45537,45539],{"class":49,"line":1826},[47,45533,45493],{"class":221},[47,45535,45536],{"class":81},"'data\u002Ftest\u002F'",[47,45538,700],{"class":217},[47,45540,45501],{"class":221},[47,45542,45543],{"class":49,"line":1843},[47,45544,2493],{"emptyLinePlaceholder":145},[47,45546,45547],{"class":49,"line":1848},[47,45548,45549],{"class":279},"# 划分比例，训练集：测试集=9：1\n",[47,45551,45552,45555,45557],{"class":49,"line":1853},[47,45553,45554],{"class":221},"split_rate",[47,45556,267],{"class":217},[47,45558,45559],{"class":85},"0.1\n",[47,45561,45562],{"class":49,"line":1858},[47,45563,2493],{"emptyLinePlaceholder":145},[47,45565,45566],{"class":49,"line":1872},[47,45567,45568],{"class":279},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[47,45570,45571],{"class":49,"line":1877},[47,45572,45573],{"class":279},"# cla_path：当前类别的原始图片路径\n",[47,45575,45576],{"class":49,"line":2670},[47,45577,45578],{"class":279},"# images：当前类别下所有图片的文件名列表\n",[47,45580,45581],{"class":49,"line":2684},[47,45582,45583],{"class":279},"# num：该类别图片总数\n",[47,45585,45586],{"class":49,"line":2692},[47,45587,45588],{"class":279},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[47,45590,45591],{"class":49,"line":2697},[47,45592,2493],{"emptyLinePlaceholder":145},[47,45594,45595,45597,45599,45601],{"class":49,"line":2703},[47,45596,3118],{"class":217},[47,45598,45453],{"class":221},[47,45600,26097],{"class":217},[47,45602,45488],{"class":221},[47,45604,45605,45608,45610,45613,45615,45618,45621,45623,45625,45627],{"class":49,"line":2709},[47,45606,45607],{"class":221},"    cla_path ",[47,45609,267],{"class":217},[47,45611,45612],{"class":221}," file_path ",[47,45614,700],{"class":217},[47,45616,45617],{"class":81}," '\u002F'",[47,45619,45620],{"class":217}," +",[47,45622,45453],{"class":221},[47,45624,700],{"class":217},[47,45626,45617],{"class":81},[47,45628,45629],{"class":279},"  # 某一类别的子目录\n",[47,45631,45632,45635,45637,45640],{"class":49,"line":2714},[47,45633,45634],{"class":221},"    images ",[47,45636,267],{"class":217},[47,45638,45639],{"class":221}," os.listdir(cla_path)  ",[47,45641,45642],{"class":279},"# iamges 列表存储了该目录下所有图像的名称\n",[47,45644,45645,45648,45650,45652],{"class":49,"line":8041},[47,45646,45647],{"class":221},"    num ",[47,45649,267],{"class":217},[47,45651,7424],{"class":85},[47,45653,45654],{"class":221},"(images)\n",[47,45656,45657,45660,45662,45665,45667,45669,45671,45674,45676,45679],{"class":49,"line":8065},[47,45658,45659],{"class":221},"    eval_index ",[47,45661,267],{"class":217},[47,45663,45664],{"class":221}," random.sample(images, ",[47,45666,712],{"class":5309},[47,45668,267],{"class":217},[47,45670,225],{"class":85},[47,45672,45673],{"class":221},"(num ",[47,45675,674],{"class":217},[47,45677,45678],{"class":221}," split_rate))  ",[47,45680,45681],{"class":279},"# 从images列表中随机抽取 k 个图像名称\n",[47,45683,45684],{"class":49,"line":8070},[47,45685,45686],{"class":279},"    # 遍历该类别下的所有图片\n",[47,45688,45689],{"class":49,"line":8076},[47,45690,45691],{"class":279},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[47,45693,45694,45696,45699,45701,45703],{"class":49,"line":8103},[47,45695,3294],{"class":217},[47,45697,45698],{"class":221}," index, image ",[47,45700,26097],{"class":217},[47,45702,31660],{"class":85},[47,45704,45705],{"class":221},"(images):\n",[47,45707,45708],{"class":49,"line":8108},[47,45709,45710],{"class":279},"        # eval_index 中保存验证集val的图像名称\n",[47,45712,45713,45715,45718,45720],{"class":49,"line":8114},[47,45714,2590],{"class":217},[47,45716,45717],{"class":221}," image ",[47,45719,26097],{"class":217},[47,45721,45722],{"class":221}," eval_index:\n",[47,45724,45725,45728,45730,45733,45735],{"class":49,"line":8126},[47,45726,45727],{"class":221},"            image_path ",[47,45729,267],{"class":217},[47,45731,45732],{"class":221}," cla_path ",[47,45734,700],{"class":217},[47,45736,45737],{"class":221}," image\n",[47,45739,45740,45743,45745,45748,45750],{"class":49,"line":8138},[47,45741,45742],{"class":221},"            new_path ",[47,45744,267],{"class":217},[47,45746,45747],{"class":81}," 'data\u002Ftest\u002F'",[47,45749,45620],{"class":217},[47,45751,45752],{"class":221}," cla\n",[47,45754,45755,45758],{"class":49,"line":8150},[47,45756,45757],{"class":221},"            copy(image_path, new_path)  ",[47,45759,45760],{"class":279},"# 将选中的图像复制到新路径\n",[47,45762,45763],{"class":49,"line":9809},[47,45764,2493],{"emptyLinePlaceholder":145},[47,45766,45767],{"class":49,"line":9834},[47,45768,45769],{"class":279},"        # 其余的图像保存在训练集train中\n",[47,45771,45772,45774],{"class":49,"line":9857},[47,45773,2627],{"class":217},[47,45775,3832],{"class":221},[47,45777,45778,45780,45782,45784,45786],{"class":49,"line":9881},[47,45779,45727],{"class":221},[47,45781,267],{"class":217},[47,45783,45732],{"class":221},[47,45785,700],{"class":217},[47,45787,45737],{"class":221},[47,45789,45790,45792,45794,45797,45799],{"class":49,"line":9886},[47,45791,45742],{"class":221},[47,45793,267],{"class":217},[47,45795,45796],{"class":81}," 'data\u002Ftrain\u002F'",[47,45798,45620],{"class":217},[47,45800,45752],{"class":221},[47,45802,45803],{"class":49,"line":9891},[47,45804,45805],{"class":221},"            copy(image_path, new_path)\n",[47,45807,45808],{"class":49,"line":9896},[47,45809,45810],{"class":279},"            # 打印进度条信息\n",[47,45812,45813],{"class":49,"line":9905},[47,45814,45815],{"class":279},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[47,45817,45818,45820,45822,45824,45827,45829,45831,45834,45836,45838,45840,45843,45846,45848,45850,45853,45856,45858,45860,45863],{"class":49,"line":9910},[47,45819,32505],{"class":85},[47,45821,222],{"class":221},[47,45823,470],{"class":81},[47,45825,45826],{"class":85},"\\r",[47,45828,1109],{"class":81},[47,45830,32513],{"class":85},[47,45832,45833],{"class":81},"] processing [",[47,45835,32513],{"class":85},[47,45837,803],{"class":81},[47,45839,32513],{"class":85},[47,45841,45842],{"class":81},"]\"",[47,45844,45845],{"class":221},".format(cla, index ",[47,45847,700],{"class":217},[47,45849,25172],{"class":85},[47,45851,45852],{"class":221},", num), ",[47,45854,45855],{"class":5309},"end",[47,45857,267],{"class":217},[47,45859,7745],{"class":81},[47,45861,45862],{"class":221},")  ",[47,45864,45865],{"class":279},"# processing bar\n",[47,45867,45868,45870],{"class":49,"line":9916},[47,45869,31353],{"class":85},[47,45871,2069],{"class":221},[47,45873,45874],{"class":49,"line":9937},[47,45875,2493],{"emptyLinePlaceholder":145},[47,45877,45878,45880,45882,45885],{"class":49,"line":9943},[47,45879,30469],{"class":85},[47,45881,222],{"class":221},[47,45883,45884],{"class":81},"\"processing done!\"",[47,45886,228],{"class":221},[19,45888,45889],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22091,45891,45893],{"id":45892},"_242模型代码","2.4.2.模型代码",[19,45895,45896],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[38,45898,45900],{"className":30432,"code":45899,"language":30434,"meta":43,"style":43},"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",[26,45901,45902,45908,45918,45928,45932,45948,45956,45970,45980,45984,46014,46018,46052,46098,46102,46136,46182,46186,46190,46224,46254,46258,46266,46280,46302,46324,46342,46346,46360,46364,46368,46384,46388,46396,46410,46420,46464,46468,46496,46500,46510,46538,46542,46578,46582,46610,46614,46624,46656,46688,46716,46720,46730,46762,46794,46826,46858,46890,46918,46922,46932,46964,46996,47008,47012,47024,47028,47032,47044,47052,47072,47076,47080,47084,47088,47092,47096,47110,47118,47126,47138,47152,47160,47164,47172,47182,47192,47202,47212,47222,47228,47232,47236,47248,47268,47276],{"__ignoreMap":43},[47,45903,45904,45906],{"class":49,"line":50},[47,45905,30446],{"class":217},[47,45907,30449],{"class":221},[47,45909,45910,45912,45914,45916],{"class":49,"line":92},[47,45911,30791],{"class":217},[47,45913,30794],{"class":221},[47,45915,30446],{"class":217},[47,45917,30799],{"class":221},[47,45919,45920,45922,45924,45926],{"class":49,"line":1273},[47,45921,30791],{"class":217},[47,45923,30811],{"class":221},[47,45925,30446],{"class":217},[47,45927,30816],{"class":221},[47,45929,45930],{"class":49,"line":1288},[47,45931,2493],{"emptyLinePlaceholder":145},[47,45933,45934,45936,45938,45940,45942,45944,45946],{"class":49,"line":1294},[47,45935,14787],{"class":217},[47,45937,41547],{"class":53},[47,45939,222],{"class":221},[47,45941,30832],{"class":53},[47,45943,777],{"class":221},[47,45945,30837],{"class":53},[47,45947,30840],{"class":221},[47,45949,45950,45952,45954],{"class":49,"line":1308},[47,45951,30855],{"class":217},[47,45953,30858],{"class":85},[47,45955,41566],{"class":221},[47,45957,45958,45960,45962,45964,45966,45968],{"class":49,"line":1314},[47,45959,30871],{"class":85},[47,45961,41573],{"class":221},[47,45963,30877],{"class":85},[47,45965,30880],{"class":221},[47,45967,30883],{"class":85},[47,45969,2069],{"class":221},[47,45971,45972,45974,45976,45978],{"class":49,"line":1405},[47,45973,30899],{"class":85},[47,45975,34825],{"class":221},[47,45977,267],{"class":217},[47,45979,34830],{"class":221},[47,45981,45982],{"class":49,"line":1411},[47,45983,41596],{"class":279},[47,45985,45986,45988,45990,45992,45994,45996,45998,46000,46002,46004,46006,46008,46010,46012],{"class":49,"line":1423},[47,45987,30899],{"class":85},[47,45989,41603],{"class":221},[47,45991,267],{"class":217},[47,45993,30907],{"class":221},[47,45995,30910],{"class":5309},[47,45997,267],{"class":217},[47,45999,41614],{"class":221},[47,46001,30919],{"class":5309},[47,46003,267],{"class":217},[47,46005,41621],{"class":221},[47,46007,30928],{"class":5309},[47,46009,267],{"class":217},[47,46011,436],{"class":85},[47,46013,228],{"class":221},[47,46015,46016],{"class":49,"line":1706},[47,46017,41634],{"class":279},[47,46019,46020,46022,46024,46026,46028,46030,46032,46034,46036,46038,46040,46042,46044,46046,46048,46050],{"class":49,"line":1711},[47,46021,30899],{"class":85},[47,46023,41641],{"class":221},[47,46025,267],{"class":217},[47,46027,30907],{"class":221},[47,46029,30910],{"class":5309},[47,46031,267],{"class":217},[47,46033,41614],{"class":221},[47,46035,30919],{"class":5309},[47,46037,267],{"class":217},[47,46039,41658],{"class":221},[47,46041,411],{"class":85},[47,46043,41663],{"class":221},[47,46045,30928],{"class":5309},[47,46047,267],{"class":217},[47,46049,436],{"class":85},[47,46051,228],{"class":221},[47,46053,46054,46056,46058,46060,46062,46064,46066,46068,46070,46072,46074,46076,46078,46080,46082,46084,46086,46088,46090,46092,46094,46096],{"class":49,"line":1717},[47,46055,30899],{"class":85},[47,46057,41678],{"class":221},[47,46059,267],{"class":217},[47,46061,30907],{"class":221},[47,46063,30910],{"class":5309},[47,46065,267],{"class":217},[47,46067,41658],{"class":221},[47,46069,411],{"class":85},[47,46071,41663],{"class":221},[47,46073,30919],{"class":5309},[47,46075,267],{"class":217},[47,46077,41658],{"class":221},[47,46079,436],{"class":85},[47,46081,41663],{"class":221},[47,46083,30928],{"class":5309},[47,46085,267],{"class":217},[47,46087,292],{"class":85},[47,46089,597],{"class":221},[47,46091,30937],{"class":5309},[47,46093,267],{"class":217},[47,46095,436],{"class":85},[47,46097,228],{"class":221},[47,46099,46100],{"class":49,"line":1722},[47,46101,41723],{"class":279},[47,46103,46104,46106,46108,46110,46112,46114,46116,46118,46120,46122,46124,46126,46128,46130,46132,46134],{"class":49,"line":1736},[47,46105,30899],{"class":85},[47,46107,41730],{"class":221},[47,46109,267],{"class":217},[47,46111,30907],{"class":221},[47,46113,30910],{"class":5309},[47,46115,267],{"class":217},[47,46117,41614],{"class":221},[47,46119,30919],{"class":5309},[47,46121,267],{"class":217},[47,46123,41747],{"class":221},[47,46125,411],{"class":85},[47,46127,41663],{"class":221},[47,46129,30928],{"class":5309},[47,46131,267],{"class":217},[47,46133,436],{"class":85},[47,46135,228],{"class":221},[47,46137,46138,46140,46142,46144,46146,46148,46150,46152,46154,46156,46158,46160,46162,46164,46166,46168,46170,46172,46174,46176,46178,46180],{"class":49,"line":1741},[47,46139,30899],{"class":85},[47,46141,41766],{"class":221},[47,46143,267],{"class":217},[47,46145,30907],{"class":221},[47,46147,30910],{"class":5309},[47,46149,267],{"class":217},[47,46151,41747],{"class":221},[47,46153,411],{"class":85},[47,46155,41663],{"class":221},[47,46157,30919],{"class":5309},[47,46159,267],{"class":217},[47,46161,41747],{"class":221},[47,46163,436],{"class":85},[47,46165,41663],{"class":221},[47,46167,30928],{"class":5309},[47,46169,267],{"class":217},[47,46171,538],{"class":85},[47,46173,597],{"class":221},[47,46175,30937],{"class":5309},[47,46177,267],{"class":217},[47,46179,298],{"class":85},[47,46181,228],{"class":221},[47,46183,46184],{"class":49,"line":1747},[47,46185,41811],{"class":279},[47,46187,46188],{"class":49,"line":1768},[47,46189,41816],{"class":279},[47,46191,46192,46194,46196,46198,46200,46202,46204,46206,46208,46210,46212,46214,46216,46218,46220,46222],{"class":49,"line":1773},[47,46193,30899],{"class":85},[47,46195,41823],{"class":221},[47,46197,267],{"class":217},[47,46199,34883],{"class":221},[47,46201,30928],{"class":5309},[47,46203,267],{"class":217},[47,46205,292],{"class":85},[47,46207,597],{"class":221},[47,46209,30983],{"class":5309},[47,46211,267],{"class":217},[47,46213,436],{"class":85},[47,46215,597],{"class":221},[47,46217,30937],{"class":5309},[47,46219,267],{"class":217},[47,46221,436],{"class":85},[47,46223,228],{"class":221},[47,46225,46226,46228,46230,46232,46234,46236,46238,46240,46242,46244,46246,46248,46250,46252],{"class":49,"line":1787},[47,46227,30899],{"class":85},[47,46229,41858],{"class":221},[47,46231,267],{"class":217},[47,46233,30907],{"class":221},[47,46235,30910],{"class":5309},[47,46237,267],{"class":217},[47,46239,41614],{"class":221},[47,46241,30919],{"class":5309},[47,46243,267],{"class":217},[47,46245,41875],{"class":221},[47,46247,30928],{"class":5309},[47,46249,267],{"class":217},[47,46251,436],{"class":85},[47,46253,228],{"class":221},[47,46255,46256],{"class":49,"line":1792},[47,46257,2493],{"emptyLinePlaceholder":145},[47,46259,46260,46262,46264],{"class":49,"line":1821},[47,46261,30855],{"class":217},[47,46263,31147],{"class":53},[47,46265,31150],{"class":221},[47,46267,46268,46270,46272,46274,46276,46278],{"class":49,"line":1826},[47,46269,41900],{"class":221},[47,46271,267],{"class":217},[47,46273,30877],{"class":85},[47,46275,35238],{"class":221},[47,46277,30877],{"class":85},[47,46279,41911],{"class":221},[47,46281,46282,46284,46286,46288,46290,46292,46294,46296,46298,46300],{"class":49,"line":1843},[47,46283,7178],{"class":221},[47,46285,267],{"class":217},[47,46287,30877],{"class":85},[47,46289,35238],{"class":221},[47,46291,30877],{"class":85},[47,46293,41926],{"class":221},[47,46295,30877],{"class":85},[47,46297,35238],{"class":221},[47,46299,30877],{"class":85},[47,46301,41935],{"class":221},[47,46303,46304,46306,46308,46310,46312,46314,46316,46318,46320,46322],{"class":49,"line":1848},[47,46305,41940],{"class":221},[47,46307,267],{"class":217},[47,46309,30877],{"class":85},[47,46311,35238],{"class":221},[47,46313,30877],{"class":85},[47,46315,41951],{"class":221},[47,46317,30877],{"class":85},[47,46319,35238],{"class":221},[47,46321,30877],{"class":85},[47,46323,41960],{"class":221},[47,46325,46326,46328,46330,46332,46334,46336,46338,46340],{"class":49,"line":1853},[47,46327,41965],{"class":221},[47,46329,267],{"class":217},[47,46331,30877],{"class":85},[47,46333,35238],{"class":221},[47,46335,30877],{"class":85},[47,46337,41976],{"class":221},[47,46339,30877],{"class":85},[47,46341,41981],{"class":221},[47,46343,46344],{"class":49,"line":1858},[47,46345,41986],{"class":279},[47,46347,46348,46350,46352,46354,46356,46358],{"class":49,"line":1872},[47,46349,14845],{"class":217},[47,46351,41993],{"class":221},[47,46353,32739],{"class":5309},[47,46355,267],{"class":217},[47,46357,436],{"class":85},[47,46359,228],{"class":221},[47,46361,46362],{"class":49,"line":1877},[47,46363,2493],{"emptyLinePlaceholder":145},[47,46365,46366],{"class":49,"line":2670},[47,46367,42014],{"class":279},[47,46369,46370,46372,46374,46376,46378,46380,46382],{"class":49,"line":2684},[47,46371,14787],{"class":217},[47,46373,42021],{"class":53},[47,46375,222],{"class":221},[47,46377,30832],{"class":53},[47,46379,777],{"class":221},[47,46381,30837],{"class":53},[47,46383,30840],{"class":221},[47,46385,46386],{"class":49,"line":2692},[47,46387,42036],{"class":279},[47,46389,46390,46392,46394],{"class":49,"line":2697},[47,46391,30855],{"class":217},[47,46393,30858],{"class":85},[47,46395,42045],{"class":221},[47,46397,46398,46400,46402,46404,46406,46408],{"class":49,"line":2703},[47,46399,30871],{"class":85},[47,46401,42052],{"class":221},[47,46403,30877],{"class":85},[47,46405,30880],{"class":221},[47,46407,30883],{"class":85},[47,46409,2069],{"class":221},[47,46411,46412,46414,46416,46418],{"class":49,"line":2709},[47,46413,30899],{"class":85},[47,46415,42067],{"class":221},[47,46417,267],{"class":217},[47,46419,38063],{"class":221},[47,46421,46422,46424,46426,46428,46430,46432,46434,46436,46438,46440,46442,46444,46446,46448,46450,46452,46454,46456,46458,46460,46462],{"class":49,"line":2714},[47,46423,38068],{"class":221},[47,46425,30910],{"class":5309},[47,46427,267],{"class":217},[47,46429,292],{"class":85},[47,46431,597],{"class":221},[47,46433,30919],{"class":5309},[47,46435,267],{"class":217},[47,46437,423],{"class":85},[47,46439,597],{"class":221},[47,46441,30928],{"class":5309},[47,46443,267],{"class":217},[47,46445,588],{"class":85},[47,46447,597],{"class":221},[47,46449,30983],{"class":5309},[47,46451,267],{"class":217},[47,46453,298],{"class":85},[47,46455,597],{"class":221},[47,46457,30937],{"class":5309},[47,46459,267],{"class":217},[47,46461,292],{"class":85},[47,46463,38101],{"class":221},[47,46465,46466],{"class":49,"line":8041},[47,46467,38106],{"class":221},[47,46469,46470,46472,46474,46476,46478,46480,46482,46484,46486,46488,46490,46492,46494],{"class":49,"line":8065},[47,46471,38151],{"class":221},[47,46473,30928],{"class":5309},[47,46475,267],{"class":217},[47,46477,292],{"class":85},[47,46479,597],{"class":221},[47,46481,30983],{"class":5309},[47,46483,267],{"class":217},[47,46485,298],{"class":85},[47,46487,597],{"class":221},[47,46489,30937],{"class":5309},[47,46491,267],{"class":217},[47,46493,436],{"class":85},[47,46495,228],{"class":221},[47,46497,46498],{"class":49,"line":8070},[47,46499,38180],{"class":221},[47,46501,46502,46504,46506,46508],{"class":49,"line":8076},[47,46503,30899],{"class":85},[47,46505,42158],{"class":221},[47,46507,267],{"class":217},[47,46509,38063],{"class":221},[47,46511,46512,46514,46516,46518,46520,46522,46524,46526,46528,46530,46532,46534,46536],{"class":49,"line":8103},[47,46513,38068],{"class":221},[47,46515,30910],{"class":5309},[47,46517,267],{"class":217},[47,46519,423],{"class":85},[47,46521,597],{"class":221},[47,46523,30919],{"class":5309},[47,46525,267],{"class":217},[47,46527,423],{"class":85},[47,46529,597],{"class":221},[47,46531,30928],{"class":5309},[47,46533,267],{"class":217},[47,46535,436],{"class":85},[47,46537,38101],{"class":221},[47,46539,46540],{"class":49,"line":8108},[47,46541,38106],{"class":221},[47,46543,46544,46546,46548,46550,46552,46554,46556,46558,46560,46562,46564,46566,46568,46570,46572,46574,46576],{"class":49,"line":8114},[47,46545,38068],{"class":221},[47,46547,30910],{"class":5309},[47,46549,267],{"class":217},[47,46551,423],{"class":85},[47,46553,597],{"class":221},[47,46555,30919],{"class":5309},[47,46557,267],{"class":217},[47,46559,42213],{"class":85},[47,46561,597],{"class":221},[47,46563,30928],{"class":5309},[47,46565,267],{"class":217},[47,46567,292],{"class":85},[47,46569,597],{"class":221},[47,46571,30937],{"class":5309},[47,46573,267],{"class":217},[47,46575,436],{"class":85},[47,46577,38101],{"class":221},[47,46579,46580],{"class":49,"line":8126},[47,46581,38106],{"class":221},[47,46583,46584,46586,46588,46590,46592,46594,46596,46598,46600,46602,46604,46606,46608],{"class":49,"line":8138},[47,46585,38151],{"class":221},[47,46587,30928],{"class":5309},[47,46589,267],{"class":217},[47,46591,292],{"class":85},[47,46593,597],{"class":221},[47,46595,30983],{"class":5309},[47,46597,267],{"class":217},[47,46599,298],{"class":85},[47,46601,597],{"class":221},[47,46603,30937],{"class":5309},[47,46605,267],{"class":217},[47,46607,436],{"class":85},[47,46609,228],{"class":221},[47,46611,46612],{"class":49,"line":8150},[47,46613,38180],{"class":221},[47,46615,46616,46618,46620,46622],{"class":49,"line":9809},[47,46617,30899],{"class":85},[47,46619,42274],{"class":221},[47,46621,267],{"class":217},[47,46623,38063],{"class":221},[47,46625,46626,46628,46630,46632,46634,46636,46638,46640,46642,46644,46646,46648,46650,46652,46654],{"class":49,"line":9834},[47,46627,42283],{"class":221},[47,46629,42213],{"class":85},[47,46631,597],{"class":221},[47,46633,423],{"class":85},[47,46635,42292],{"class":221},[47,46637,429],{"class":85},[47,46639,597],{"class":221},[47,46641,32124],{"class":85},[47,46643,42301],{"class":221},[47,46645,820],{"class":85},[47,46647,597],{"class":221},[47,46649,417],{"class":85},[47,46651,42310],{"class":221},[47,46653,417],{"class":85},[47,46655,38101],{"class":221},[47,46657,46658,46660,46662,46664,46666,46668,46670,46672,46674,46676,46678,46680,46682,46684,46686],{"class":49,"line":9857},[47,46659,42283],{"class":221},[47,46661,34924],{"class":85},[47,46663,597],{"class":221},[47,46665,32124],{"class":85},[47,46667,42292],{"class":221},[47,46669,32124],{"class":85},[47,46671,597],{"class":221},[47,46673,42213],{"class":85},[47,46675,42301],{"class":221},[47,46677,417],{"class":85},[47,46679,597],{"class":221},[47,46681,429],{"class":85},[47,46683,42310],{"class":221},[47,46685,423],{"class":85},[47,46687,38101],{"class":221},[47,46689,46690,46692,46694,46696,46698,46700,46702,46704,46706,46708,46710,46712,46714],{"class":49,"line":9881},[47,46691,38151],{"class":221},[47,46693,30928],{"class":5309},[47,46695,267],{"class":217},[47,46697,292],{"class":85},[47,46699,597],{"class":221},[47,46701,30983],{"class":5309},[47,46703,267],{"class":217},[47,46705,298],{"class":85},[47,46707,597],{"class":221},[47,46709,30937],{"class":5309},[47,46711,267],{"class":217},[47,46713,436],{"class":85},[47,46715,228],{"class":221},[47,46717,46718],{"class":49,"line":9886},[47,46719,38180],{"class":221},[47,46721,46722,46724,46726,46728],{"class":49,"line":9891},[47,46723,30899],{"class":85},[47,46725,42385],{"class":221},[47,46727,267],{"class":217},[47,46729,38063],{"class":221},[47,46731,46732,46734,46736,46738,46740,46742,46744,46746,46748,46750,46752,46754,46756,46758,46760],{"class":49,"line":9896},[47,46733,42283],{"class":221},[47,46735,42396],{"class":85},[47,46737,597],{"class":221},[47,46739,42213],{"class":85},[47,46741,42292],{"class":221},[47,46743,429],{"class":85},[47,46745,597],{"class":221},[47,46747,42409],{"class":85},[47,46749,42301],{"class":221},[47,46751,820],{"class":85},[47,46753,597],{"class":221},[47,46755,826],{"class":85},[47,46757,42310],{"class":221},[47,46759,423],{"class":85},[47,46761,38101],{"class":221},[47,46763,46764,46766,46768,46770,46772,46774,46776,46778,46780,46782,46784,46786,46788,46790,46792],{"class":49,"line":9905},[47,46765,42283],{"class":221},[47,46767,38511],{"class":85},[47,46769,597],{"class":221},[47,46771,21141],{"class":85},[47,46773,42292],{"class":221},[47,46775,837],{"class":85},[47,46777,597],{"class":221},[47,46779,31555],{"class":85},[47,46781,42301],{"class":221},[47,46783,1019],{"class":85},[47,46785,597],{"class":221},[47,46787,423],{"class":85},[47,46789,42310],{"class":221},[47,46791,423],{"class":85},[47,46793,38101],{"class":221},[47,46795,46796,46798,46800,46802,46804,46806,46808,46810,46812,46814,46816,46818,46820,46822,46824],{"class":49,"line":9910},[47,46797,42283],{"class":221},[47,46799,38511],{"class":85},[47,46801,597],{"class":221},[47,46803,32124],{"class":85},[47,46805,42292],{"class":221},[47,46807,32124],{"class":85},[47,46809,597],{"class":221},[47,46811,34924],{"class":85},[47,46813,42301],{"class":221},[47,46815,1019],{"class":85},[47,46817,597],{"class":221},[47,46819,423],{"class":85},[47,46821,42310],{"class":221},[47,46823,423],{"class":85},[47,46825,38101],{"class":221},[47,46827,46828,46830,46832,46834,46836,46838,46840,46842,46844,46846,46848,46850,46852,46854,46856],{"class":49,"line":9916},[47,46829,42283],{"class":221},[47,46831,38511],{"class":85},[47,46833,597],{"class":221},[47,46835,837],{"class":85},[47,46837,42292],{"class":221},[47,46839,32124],{"class":85},[47,46841,597],{"class":221},[47,46843,42506],{"class":85},[47,46845,42301],{"class":221},[47,46847,417],{"class":85},[47,46849,597],{"class":221},[47,46851,423],{"class":85},[47,46853,42310],{"class":221},[47,46855,423],{"class":85},[47,46857,38101],{"class":221},[47,46859,46860,46862,46864,46866,46868,46870,46872,46874,46876,46878,46880,46882,46884,46886,46888],{"class":49,"line":9937},[47,46861,42283],{"class":221},[47,46863,42527],{"class":85},[47,46865,597],{"class":221},[47,46867,34924],{"class":85},[47,46869,42292],{"class":221},[47,46871,21141],{"class":85},[47,46873,597],{"class":221},[47,46875,42540],{"class":85},[47,46877,42301],{"class":221},[47,46879,417],{"class":85},[47,46881,597],{"class":221},[47,46883,32124],{"class":85},[47,46885,42310],{"class":221},[47,46887,32124],{"class":85},[47,46889,38101],{"class":221},[47,46891,46892,46894,46896,46898,46900,46902,46904,46906,46908,46910,46912,46914,46916],{"class":49,"line":9943},[47,46893,38151],{"class":221},[47,46895,30928],{"class":5309},[47,46897,267],{"class":217},[47,46899,292],{"class":85},[47,46901,597],{"class":221},[47,46903,30983],{"class":5309},[47,46905,267],{"class":217},[47,46907,298],{"class":85},[47,46909,597],{"class":221},[47,46911,30937],{"class":5309},[47,46913,267],{"class":217},[47,46915,436],{"class":85},[47,46917,228],{"class":221},[47,46919,46920],{"class":49,"line":9957},[47,46921,38180],{"class":221},[47,46923,46924,46926,46928,46930],{"class":49,"line":9963},[47,46925,30899],{"class":85},[47,46927,42593],{"class":221},[47,46929,267],{"class":217},[47,46931,38063],{"class":221},[47,46933,46934,46936,46938,46940,46942,46944,46946,46948,46950,46952,46954,46956,46958,46960,46962],{"class":49,"line":9990},[47,46935,42283],{"class":221},[47,46937,42604],{"class":85},[47,46939,597],{"class":221},[47,46941,34924],{"class":85},[47,46943,42292],{"class":221},[47,46945,21141],{"class":85},[47,46947,597],{"class":221},[47,46949,42540],{"class":85},[47,46951,42301],{"class":221},[47,46953,417],{"class":85},[47,46955,597],{"class":221},[47,46957,32124],{"class":85},[47,46959,42310],{"class":221},[47,46961,32124],{"class":85},[47,46963,38101],{"class":221},[47,46965,46966,46968,46970,46972,46974,46976,46978,46980,46982,46984,46986,46988,46990,46992,46994],{"class":49,"line":9999},[47,46967,42283],{"class":221},[47,46969,42604],{"class":85},[47,46971,597],{"class":221},[47,46973,34994],{"class":85},[47,46975,42292],{"class":221},[47,46977,42213],{"class":85},[47,46979,597],{"class":221},[47,46981,34994],{"class":85},[47,46983,42301],{"class":221},[47,46985,826],{"class":85},[47,46987,597],{"class":221},[47,46989,32124],{"class":85},[47,46991,42310],{"class":221},[47,46993,32124],{"class":85},[47,46995,38101],{"class":221},[47,46997,46998,47000,47002,47004,47006],{"class":49,"line":10005},[47,46999,42667],{"class":221},[47,47001,436],{"class":85},[47,47003,597],{"class":221},[47,47005,436],{"class":85},[47,47007,42676],{"class":221},[47,47009,47010],{"class":49,"line":10013},[47,47011,38844],{"class":221},[47,47013,47014,47016,47018,47020,47022],{"class":49,"line":10018},[47,47015,38849],{"class":221},[47,47017,42687],{"class":85},[47,47019,597],{"class":221},[47,47021,298],{"class":85},[47,47023,228],{"class":221},[47,47025,47026],{"class":49,"line":16697},[47,47027,38180],{"class":221},[47,47029,47030],{"class":49,"line":16703},[47,47031,42702],{"class":279},[47,47033,47034,47036,47038,47040,47042],{"class":49,"line":16726},[47,47035,3496],{"class":217},[47,47037,38922],{"class":221},[47,47039,26097],{"class":217},[47,47041,38927],{"class":85},[47,47043,38930],{"class":221},[47,47045,47046,47048,47050],{"class":49,"line":16732},[47,47047,4735],{"class":217},[47,47049,38942],{"class":85},[47,47051,38945],{"class":221},[47,47053,47054,47056,47058,47060,47062,47064,47066,47068,47070],{"class":49,"line":16755},[47,47055,38955],{"class":221},[47,47057,42729],{"class":5309},[47,47059,267],{"class":217},[47,47061,42734],{"class":81},[47,47063,597],{"class":221},[47,47065,38958],{"class":5309},[47,47067,267],{"class":217},[47,47069,38963],{"class":81},[47,47071,228],{"class":221},[47,47073,47074],{"class":49,"line":16769},[47,47075,42749],{"class":279},[47,47077,47078],{"class":49,"line":16789},[47,47079,42754],{"class":279},[47,47081,47082],{"class":49,"line":16795},[47,47083,42759],{"class":279},[47,47085,47086],{"class":49,"line":16806},[47,47087,42764],{"class":279},[47,47089,47090],{"class":49,"line":16829},[47,47091,42769],{"class":279},[47,47093,47094],{"class":49,"line":16851},[47,47095,42774],{"class":279},[47,47097,47098,47100,47102,47104,47106,47108],{"class":49,"line":16856},[47,47099,38975],{"class":217},[47,47101,38978],{"class":221},[47,47103,38981],{"class":217},[47,47105,38984],{"class":217},[47,47107,38987],{"class":85},[47,47109,3832],{"class":221},[47,47111,47112,47114,47116],{"class":49,"line":16862},[47,47113,38999],{"class":221},[47,47115,411],{"class":85},[47,47117,228],{"class":221},[47,47119,47120,47122,47124],{"class":49,"line":16876},[47,47121,42801],{"class":217},[47,47123,38942],{"class":85},[47,47125,39018],{"class":221},[47,47127,47128,47130,47132,47134,47136],{"class":49,"line":16889},[47,47129,42810],{"class":221},[47,47131,411],{"class":85},[47,47133,597],{"class":221},[47,47135,39040],{"class":85},[47,47137,228],{"class":221},[47,47139,47140,47142,47144,47146,47148,47150],{"class":49,"line":16894},[47,47141,42823],{"class":217},[47,47143,38978],{"class":221},[47,47145,38981],{"class":217},[47,47147,38984],{"class":217},[47,47149,38987],{"class":85},[47,47151,3832],{"class":221},[47,47153,47154,47156,47158],{"class":49,"line":16908},[47,47155,42838],{"class":221},[47,47157,411],{"class":85},[47,47159,228],{"class":221},[47,47161,47162],{"class":49,"line":16913},[47,47163,35219],{"class":279},[47,47165,47166,47168,47170],{"class":49,"line":16919},[47,47167,30855],{"class":217},[47,47169,31147],{"class":53},[47,47171,31150],{"class":221},[47,47173,47174,47176,47178,47180],{"class":49,"line":16924},[47,47175,31155],{"class":221},[47,47177,267],{"class":217},[47,47179,30877],{"class":85},[47,47181,42865],{"class":221},[47,47183,47184,47186,47188,47190],{"class":49,"line":16938},[47,47185,31155],{"class":221},[47,47187,267],{"class":217},[47,47189,30877],{"class":85},[47,47191,42876],{"class":221},[47,47193,47194,47196,47198,47200],{"class":49,"line":16943},[47,47195,31155],{"class":221},[47,47197,267],{"class":217},[47,47199,30877],{"class":85},[47,47201,42887],{"class":221},[47,47203,47204,47206,47208,47210],{"class":49,"line":16948},[47,47205,31155],{"class":221},[47,47207,267],{"class":217},[47,47209,30877],{"class":85},[47,47211,42898],{"class":221},[47,47213,47214,47216,47218,47220],{"class":49,"line":16962},[47,47215,31155],{"class":221},[47,47217,267],{"class":217},[47,47219,30877],{"class":85},[47,47221,42909],{"class":221},[47,47223,47224,47226],{"class":49,"line":16974},[47,47225,14845],{"class":217},[47,47227,31263],{"class":221},[47,47229,47230],{"class":49,"line":16979},[47,47231,2493],{"emptyLinePlaceholder":145},[47,47233,47234],{"class":49,"line":16992},[47,47235,42924],{"class":279},[47,47237,47238,47240,47242,47244,47246],{"class":49,"line":16997},[47,47239,1625],{"class":217},[47,47241,31274],{"class":85},[47,47243,3042],{"class":217},[47,47245,31279],{"class":81},[47,47247,3832],{"class":221},[47,47249,47250,47252,47254,47256,47258,47260,47262,47264,47266],{"class":49,"line":17002},[47,47251,31291],{"class":221},[47,47253,267],{"class":217},[47,47255,30505],{"class":221},[47,47257,31298],{"class":81},[47,47259,1798],{"class":217},[47,47261,31303],{"class":221},[47,47263,1795],{"class":217},[47,47265,30530],{"class":81},[47,47267,228],{"class":221},[47,47269,47270,47272,47274],{"class":49,"line":17007},[47,47271,31343],{"class":221},[47,47273,267],{"class":217},[47,47275,42965],{"class":221},[47,47277,47278,47280,47282,47284,47286,47288,47290,47292],{"class":49,"line":17020},[47,47279,31353],{"class":85},[47,47281,31356],{"class":221},[47,47283,436],{"class":85},[47,47285,597],{"class":221},[47,47287,31555],{"class":85},[47,47289,597],{"class":221},[47,47291,31555],{"class":85},[47,47293,31369],{"class":221},[22091,47295,47297],{"id":47296},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,47299,47300],{},"计算图片的均值与方差，用于训练中归一化处理操作",[38,47302,47304],{"className":30432,"code":47303,"language":30434,"meta":43,"style":43},"# 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",[26,47305,47306,47311,47324,47329,47335,47340,47350,47354,47359,47369,47373,47378,47388,47405,47409,47414,47426,47438,47469,47478,47488,47498,47502,47507,47522,47526,47531,47536,47541,47551,47556,47581,47585,47590,47605,47609,47622,47626,47631,47636,47641,47646,47651,47661,47671,47694,47702,47710,47718,47722,47734,47738,47743,47747,47751,47758,47778,47802,47809,47823,47828,47833,47837,47851,47855,47867],{"__ignoreMap":43},[47,47307,47308],{"class":49,"line":50},[47,47309,47310],{"class":279},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[47,47312,47313,47315,47318,47321],{"class":49,"line":92},[47,47314,30791],{"class":217},[47,47316,47317],{"class":85}," PIL",[47,47319,47320],{"class":217}," import",[47,47322,47323],{"class":221}," Image\n",[47,47325,47326],{"class":49,"line":1273},[47,47327,47328],{"class":279},"# os 用来处理文件夹和文件路径\n",[47,47330,47331,47333],{"class":49,"line":1288},[47,47332,30446],{"class":217},[47,47334,45359],{"class":221},[47,47336,47337],{"class":49,"line":1294},[47,47338,47339],{"class":279},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[47,47341,47342,47344,47346,47348],{"class":49,"line":1308},[47,47343,30446],{"class":217},[47,47345,31434],{"class":221},[47,47347,31437],{"class":217},[47,47349,31440],{"class":221},[47,47351,47352],{"class":49,"line":1314},[47,47353,2493],{"emptyLinePlaceholder":145},[47,47355,47356],{"class":49,"line":1405},[47,47357,47358],{"class":279},"# 文件夹路径，包含所有图片文件\n",[47,47360,47361,47364,47366],{"class":49,"line":1411},[47,47362,47363],{"class":221},"folder_path ",[47,47365,267],{"class":217},[47,47367,47368],{"class":81}," 'data_cat_dog'\n",[47,47370,47371],{"class":49,"line":1423},[47,47372,2493],{"emptyLinePlaceholder":145},[47,47374,47375],{"class":49,"line":1706},[47,47376,47377],{"class":279},"# 初始化累积变量\n",[47,47379,47380,47383,47385],{"class":49,"line":1711},[47,47381,47382],{"class":221},"total_pixels ",[47,47384,267],{"class":217},[47,47386,47387],{"class":85}," 0\n",[47,47389,47390,47393,47395,47398,47400,47402],{"class":49,"line":1717},[47,47391,47392],{"class":221},"sum_normalized_pixel_values ",[47,47394,267],{"class":217},[47,47396,47397],{"class":221}," np.zeros(",[47,47399,292],{"class":85},[47,47401,45862],{"class":221},[47,47403,47404],{"class":279},"# 如果是RGB图像，需要三个通道的均值和方差\n",[47,47406,47407],{"class":49,"line":1722},[47,47408,2493],{"emptyLinePlaceholder":145},[47,47410,47411],{"class":49,"line":1736},[47,47412,47413],{"class":279},"# 遍历文件夹中的图片文件\n",[47,47415,47416,47418,47421,47423],{"class":49,"line":1741},[47,47417,3118],{"class":217},[47,47419,47420],{"class":221}," root, dirs, files ",[47,47422,26097],{"class":217},[47,47424,47425],{"class":221}," os.walk(folder_path):\n",[47,47427,47428,47430,47433,47435],{"class":49,"line":1747},[47,47429,3294],{"class":217},[47,47431,47432],{"class":221}," filename ",[47,47434,26097],{"class":217},[47,47436,47437],{"class":221}," files:\n",[47,47439,47440,47442,47445,47448,47450,47453,47455,47458,47460,47463,47466],{"class":49,"line":1768},[47,47441,2590],{"class":217},[47,47443,47444],{"class":221}," filename.endswith((",[47,47446,47447],{"class":81},"'.jpg'",[47,47449,12528],{"class":221},[47,47451,47452],{"class":81},"'.jpeg'",[47,47454,12528],{"class":221},[47,47456,47457],{"class":81},"'.png'",[47,47459,12528],{"class":221},[47,47461,47462],{"class":81},"'.bmp'",[47,47464,47465],{"class":221},")):  ",[47,47467,47468],{"class":279},"# 可根据实际情况添加其他格式\n",[47,47470,47471,47473,47475],{"class":49,"line":1773},[47,47472,45727],{"class":221},[47,47474,267],{"class":217},[47,47476,47477],{"class":221}," os.path.join(root, filename)\n",[47,47479,47480,47483,47485],{"class":49,"line":1787},[47,47481,47482],{"class":221},"            image ",[47,47484,267],{"class":217},[47,47486,47487],{"class":221}," Image.open(image_path)\n",[47,47489,47490,47493,47495],{"class":49,"line":1792},[47,47491,47492],{"class":221},"            image_array ",[47,47494,267],{"class":217},[47,47496,47497],{"class":221}," np.array(image)\n",[47,47499,47500],{"class":49,"line":1821},[47,47501,2493],{"emptyLinePlaceholder":145},[47,47503,47504],{"class":49,"line":1826},[47,47505,47506],{"class":279},"            # 归一化像素值到0-1之间\n",[47,47508,47509,47512,47514,47517,47519],{"class":49,"line":1843},[47,47510,47511],{"class":221},"            normalized_image_array ",[47,47513,267],{"class":217},[47,47515,47516],{"class":221}," image_array ",[47,47518,803],{"class":217},[47,47520,47521],{"class":85}," 255.0\n",[47,47523,47524],{"class":49,"line":1848},[47,47525,2493],{"emptyLinePlaceholder":145},[47,47527,47528],{"class":49,"line":1853},[47,47529,47530],{"class":279},"            # print(image_path)\n",[47,47532,47533],{"class":49,"line":1858},[47,47534,47535],{"class":279},"            # print(normalized_image_array.shape)\n",[47,47537,47538],{"class":49,"line":1872},[47,47539,47540],{"class":279},"            # 累积归一化后的像素值和像素数量\n",[47,47542,47543,47546,47548],{"class":49,"line":1877},[47,47544,47545],{"class":221},"            total_pixels ",[47,47547,9570],{"class":217},[47,47549,47550],{"class":221}," normalized_image_array.size\n",[47,47552,47553],{"class":49,"line":2670},[47,47554,47555],{"class":279},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[47,47557,47558,47561,47563,47566,47569,47571,47573,47575,47577,47579],{"class":49,"line":2684},[47,47559,47560],{"class":221},"            sum_normalized_pixel_values ",[47,47562,9570],{"class":217},[47,47564,47565],{"class":221}," np.sum(normalized_image_array, ",[47,47567,47568],{"class":5309},"axis",[47,47570,267],{"class":217},[47,47572,222],{"class":221},[47,47574,411],{"class":85},[47,47576,12528],{"class":221},[47,47578,436],{"class":85},[47,47580,30551],{"class":221},[47,47582,47583],{"class":49,"line":2692},[47,47584,2493],{"emptyLinePlaceholder":145},[47,47586,47587],{"class":49,"line":2697},[47,47588,47589],{"class":279},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[47,47591,47592,47595,47597,47600,47602],{"class":49,"line":2703},[47,47593,47594],{"class":221},"mean ",[47,47596,267],{"class":217},[47,47598,47599],{"class":221}," sum_normalized_pixel_values ",[47,47601,803],{"class":217},[47,47603,47604],{"class":221}," total_pixels\n",[47,47606,47607],{"class":49,"line":2709},[47,47608,2493],{"emptyLinePlaceholder":145},[47,47610,47611,47614,47616,47618,47620],{"class":49,"line":2714},[47,47612,47613],{"class":221},"sum_squared_diff ",[47,47615,267],{"class":217},[47,47617,47397],{"class":221},[47,47619,292],{"class":85},[47,47621,228],{"class":221},[47,47623,47624],{"class":49,"line":8041},[47,47625,2493],{"emptyLinePlaceholder":145},[47,47627,47628],{"class":49,"line":8065},[47,47629,47630],{"class":279},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[47,47632,47633],{"class":49,"line":8070},[47,47634,47635],{"class":279},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[47,47637,47638],{"class":49,"line":8076},[47,47639,47640],{"class":279},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[47,47642,47643],{"class":49,"line":8103},[47,47644,47645],{"class":279},"# Image.open(image_path)：打开图片\n",[47,47647,47648],{"class":49,"line":8108},[47,47649,47650],{"class":279},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[47,47652,47653,47655,47657,47659],{"class":49,"line":8114},[47,47654,3118],{"class":217},[47,47656,47420],{"class":221},[47,47658,26097],{"class":217},[47,47660,47425],{"class":221},[47,47662,47663,47665,47667,47669],{"class":49,"line":8126},[47,47664,3294],{"class":217},[47,47666,47432],{"class":221},[47,47668,26097],{"class":217},[47,47670,47437],{"class":221},[47,47672,47673,47675,47677,47679,47681,47683,47685,47687,47689,47691],{"class":49,"line":8138},[47,47674,2590],{"class":217},[47,47676,47444],{"class":221},[47,47678,47447],{"class":81},[47,47680,12528],{"class":221},[47,47682,47452],{"class":81},[47,47684,12528],{"class":221},[47,47686,47457],{"class":81},[47,47688,12528],{"class":221},[47,47690,47462],{"class":81},[47,47692,47693],{"class":221},")):\n",[47,47695,47696,47698,47700],{"class":49,"line":8150},[47,47697,45727],{"class":221},[47,47699,267],{"class":217},[47,47701,47477],{"class":221},[47,47703,47704,47706,47708],{"class":49,"line":9809},[47,47705,47482],{"class":221},[47,47707,267],{"class":217},[47,47709,47487],{"class":221},[47,47711,47712,47714,47716],{"class":49,"line":9834},[47,47713,47492],{"class":221},[47,47715,267],{"class":217},[47,47717,47497],{"class":221},[47,47719,47720],{"class":49,"line":9857},[47,47721,47506],{"class":279},[47,47723,47724,47726,47728,47730,47732],{"class":49,"line":9881},[47,47725,47511],{"class":221},[47,47727,267],{"class":217},[47,47729,47516],{"class":221},[47,47731,803],{"class":217},[47,47733,47521],{"class":85},[47,47735,47736],{"class":49,"line":9886},[47,47737,47535],{"class":279},[47,47739,47740],{"class":49,"line":9891},[47,47741,47742],{"class":279},"            # print(mean.shape)\n",[47,47744,47745],{"class":49,"line":9896},[47,47746,47530],{"class":279},[47,47748,47749],{"class":49,"line":9905},[47,47750,2493],{"emptyLinePlaceholder":145},[47,47752,47753,47756],{"class":49,"line":9910},[47,47754,47755],{"class":217},"            try",[47,47757,3832],{"class":221},[47,47759,47760,47763,47765,47768,47770,47773,47775],{"class":49,"line":9916},[47,47761,47762],{"class":221},"                diff ",[47,47764,267],{"class":217},[47,47766,47767],{"class":221}," (normalized_image_array ",[47,47769,751],{"class":217},[47,47771,47772],{"class":221}," mean) ",[47,47774,10754],{"class":217},[47,47776,47777],{"class":85}," 2\n",[47,47779,47780,47783,47785,47788,47790,47792,47794,47796,47798,47800],{"class":49,"line":9937},[47,47781,47782],{"class":221},"                sum_squared_diff ",[47,47784,9570],{"class":217},[47,47786,47787],{"class":221}," np.sum(diff, ",[47,47789,47568],{"class":5309},[47,47791,267],{"class":217},[47,47793,222],{"class":221},[47,47795,411],{"class":85},[47,47797,12528],{"class":221},[47,47799,436],{"class":85},[47,47801,30551],{"class":221},[47,47803,47804,47807],{"class":49,"line":9943},[47,47805,47806],{"class":217},"            except",[47,47808,3832],{"class":221},[47,47810,47811,47814,47816,47818,47821],{"class":49,"line":9957},[47,47812,47813],{"class":85},"                print",[47,47815,222],{"class":221},[47,47817,273],{"class":217},[47,47819,47820],{"class":81},"\"捕获到自定义异常\"",[47,47822,228],{"class":221},[47,47824,47825],{"class":49,"line":9963},[47,47826,47827],{"class":279},"            # diff = (normalized_image_array - mean) ** 2\n",[47,47829,47830],{"class":49,"line":9990},[47,47831,47832],{"class":279},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[47,47834,47835],{"class":49,"line":9999},[47,47836,2493],{"emptyLinePlaceholder":145},[47,47838,47839,47842,47844,47847,47849],{"class":49,"line":10005},[47,47840,47841],{"class":221},"variance ",[47,47843,267],{"class":217},[47,47845,47846],{"class":221}," sum_squared_diff ",[47,47848,803],{"class":217},[47,47850,47604],{"class":221},[47,47852,47853],{"class":49,"line":10013},[47,47854,2493],{"emptyLinePlaceholder":145},[47,47856,47857,47859,47861,47864],{"class":49,"line":10018},[47,47858,30469],{"class":85},[47,47860,222],{"class":221},[47,47862,47863],{"class":81},"\"Mean:\"",[47,47865,47866],{"class":221},", mean)\n",[47,47868,47869,47871,47873,47876],{"class":49,"line":16697},[47,47870,30469],{"class":85},[47,47872,222],{"class":221},[47,47874,47875],{"class":81},"\"Variance:\"",[47,47877,47878],{"class":221},", variance)\n",[38,47880,47882],{"className":30432,"code":47881,"language":30434,"meta":43,"style":43},"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",[26,47883,47884,47890,47896,47906,47912,47922,47936,47946,47956,47966,47970,47980,47990,47994,47998,48006,48011,48016,48035,48039,48044,48049,48054,48059,48100,48105,48115,48120,48133,48138,48143,48148,48153,48158,48162,48167,48172,48194,48198,48230,48244,48254,48264,48268,48278,48292,48302,48312,48322,48328,48332,48336,48340,48344,48348,48356,48376,48380,48384,48388,48392,48408,48412,48416,48424,48428,48432,48440,48444,48448,48452,48460,48464,48468,48472,48480,48484,48492,48496,48504,48508,48516,48520,48528,48532,48536,48544,48548,48552,48564,48588,48602,48606,48610,48614,48622,48626,48634,48638,48646,48650,48658,48662,48670,48674,48682,48686,48698,48702,48710,48714,48722,48726,48730,48734,48738,48746,48750,48766,48770,48778,48782,48786,48790,48794,48798,48802,48806,48822,48826,48838,48842,48854,48858,48870,48874,48882,48886,48894,48898,48902,48906,48912,48916,48924,48928,48944,48948,48956,48960,48976,48988,48992,49004,49008,49012,49020,49024,49028,49036,49040,49048,49052,49060,49064,49068,49110,49152,49156,49160,49176,49180,49196,49200,49204,49212,49216,49220,49232,49270,49274,49278,49286,49290,49304,49314,49320,49326,49332,49338,49342,49346,49352,49356,49360,49368,49372,49390,49394,49398,49402,49418,49422,49426,49430,49434,49438,49458,49478,49482,49486,49490,49498,49506,49510,49526,49546,49566,49570,49575,49584,49593,49598,49603,49608,49621,49626,49635,49644,49661],{"__ignoreMap":43},[47,47885,47886,47888],{"class":49,"line":50},[47,47887,30446],{"class":217},[47,47889,31876],{"class":221},[47,47891,47892,47894],{"class":49,"line":92},[47,47893,30446],{"class":217},[47,47895,31883],{"class":221},[47,47897,47898,47900,47902,47904],{"class":49,"line":1273},[47,47899,30446],{"class":217},[47,47901,31894],{"class":221},[47,47903,31437],{"class":217},[47,47905,31899],{"class":221},[47,47907,47908,47910],{"class":49,"line":1288},[47,47909,30446],{"class":217},[47,47911,30449],{"class":221},[47,47913,47914,47916,47918,47920],{"class":49,"line":1294},[47,47915,30791],{"class":217},[47,47917,31469],{"class":221},[47,47919,30446],{"class":217},[47,47921,31916],{"class":221},[47,47923,47924,47926,47928,47930,47933],{"class":49,"line":1308},[47,47925,30791],{"class":217},[47,47927,31422],{"class":221},[47,47929,30446],{"class":217},[47,47931,47932],{"class":221}," ImageFolder ",[47,47934,47935],{"class":279},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[47,47937,47938,47940,47942,47944],{"class":49,"line":1314},[47,47939,30791],{"class":217},[47,47941,31452],{"class":221},[47,47943,30446],{"class":217},[47,47945,31457],{"class":221},[47,47947,47948,47950,47952,47954],{"class":49,"line":1405},[47,47949,30446],{"class":217},[47,47951,31469],{"class":221},[47,47953,31437],{"class":217},[47,47955,31474],{"class":221},[47,47957,47958,47960,47962,47964],{"class":49,"line":1411},[47,47959,30446],{"class":217},[47,47961,31486],{"class":221},[47,47963,31437],{"class":217},[47,47965,31491],{"class":221},[47,47967,47968],{"class":49,"line":1423},[47,47969,31961],{"class":279},[47,47971,47972,47974,47976,47978],{"class":49,"line":1706},[47,47973,30791],{"class":217},[47,47975,31968],{"class":221},[47,47977,30446],{"class":217},[47,47979,43085],{"class":221},[47,47981,47982,47984,47986,47988],{"class":49,"line":1711},[47,47983,30791],{"class":217},[47,47985,30794],{"class":221},[47,47987,30446],{"class":217},[47,47989,30799],{"class":221},[47,47991,47992],{"class":49,"line":1717},[47,47993,2493],{"emptyLinePlaceholder":145},[47,47995,47996],{"class":49,"line":1722},[47,47997,31996],{"class":279},[47,47999,48000,48002,48004],{"class":49,"line":1736},[47,48001,32001],{"class":217},[47,48003,32004],{"class":53},[47,48005,32007],{"class":221},[47,48007,48008],{"class":49,"line":1741},[47,48009,48010],{"class":279},"    # 导入自己的数据集，并进行数据处理\n",[47,48012,48013],{"class":49,"line":1747},[47,48014,48015],{"class":279},"    # 定义数据集的路径\n",[47,48017,48018,48021,48023,48025,48027,48029,48033],{"class":49,"line":1768},[47,48019,48020],{"class":85},"    ROOT_PATH",[47,48022,267],{"class":217},[47,48024,889],{"class":217},[47,48026,470],{"class":81},[47,48028,777],{"class":85},[47,48030,48032],{"class":48031},"sA_wV","\u002Fdata\u002Ftrain",[47,48034,25187],{"class":81},[47,48036,48037],{"class":49,"line":1773},[47,48038,2493],{"emptyLinePlaceholder":145},[47,48040,48041],{"class":49,"line":1787},[47,48042,48043],{"class":279},"    # 定义归一化方法\n",[47,48045,48046],{"class":49,"line":1792},[47,48047,48048],{"class":279},"    # 这里需要先计算一下数据集的均值和方差\n",[47,48050,48051],{"class":49,"line":1821},[47,48052,48053],{"class":279},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[47,48055,48056],{"class":49,"line":1826},[47,48057,48058],{"class":279},"    # 第一个参数是均值，第二个参数是方差\n",[47,48060,48061,48064,48066,48069,48072,48074,48077,48079,48082,48085,48088,48090,48093,48095,48098],{"class":49,"line":1843},[47,48062,48063],{"class":221},"    normalize",[47,48065,267],{"class":217},[47,48067,48068],{"class":221},"transforms.Normalize([",[47,48070,48071],{"class":85},"0.162",[47,48073,597],{"class":221},[47,48075,48076],{"class":85},"0.151",[47,48078,597],{"class":221},[47,48080,48081],{"class":85},"0.138",[47,48083,48084],{"class":221},"],[",[47,48086,48087],{"class":85},"0.058",[47,48089,597],{"class":221},[47,48091,48092],{"class":85},"0.052",[47,48094,597],{"class":221},[47,48096,48097],{"class":85},"0.048",[47,48099,4750],{"class":221},[47,48101,48102],{"class":49,"line":1848},[47,48103,48104],{"class":279},"    # 定义数据集处理方法变量\n",[47,48106,48107,48110,48112],{"class":49,"line":1853},[47,48108,48109],{"class":221},"    train_transform",[47,48111,267],{"class":217},[47,48113,48114],{"class":221},"transforms.Compose([\n",[47,48116,48117],{"class":49,"line":1858},[47,48118,48119],{"class":279},"        # 调整图像大小为224*224\n",[47,48121,48122,48125,48127,48129,48131],{"class":49,"line":1872},[47,48123,48124],{"class":221},"        transforms.Resize((",[47,48126,31555],{"class":85},[47,48128,597],{"class":221},[47,48130,31555],{"class":85},[47,48132,42676],{"class":221},[47,48134,48135],{"class":49,"line":1877},[47,48136,48137],{"class":279},"        # 将图像转换为张量\n",[47,48139,48140],{"class":49,"line":2670},[47,48141,48142],{"class":221},"        transforms.ToTensor(),\n",[47,48144,48145],{"class":49,"line":2684},[47,48146,48147],{"class":221},"        normalize])\n",[47,48149,48150],{"class":49,"line":2692},[47,48151,48152],{"class":279},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[47,48154,48155],{"class":49,"line":2697},[47,48156,48157],{"class":279},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[47,48159,48160],{"class":49,"line":2703},[47,48161,2493],{"emptyLinePlaceholder":145},[47,48163,48164],{"class":49,"line":2709},[47,48165,48166],{"class":279},"    # 加载数据集\n",[47,48168,48169],{"class":49,"line":2714},[47,48170,48171],{"class":279},"    # 传入数据集路径与处理方法\n",[47,48173,48174,48176,48178,48181,48184,48186,48189,48191],{"class":49,"line":8041},[47,48175,32012],{"class":221},[47,48177,267],{"class":217},[47,48179,48180],{"class":221},"ImageFolder(",[47,48182,48183],{"class":85},"ROOT_PATH",[47,48185,597],{"class":221},[47,48187,48188],{"class":5309},"transform",[47,48190,267],{"class":217},[47,48192,48193],{"class":221},"train_transform)\n",[47,48195,48196],{"class":49,"line":8065},[47,48197,2493],{"emptyLinePlaceholder":145},[47,48199,48200,48202,48204,48206,48208,48210,48212,48214,48216,48218,48220,48222,48224,48226,48228],{"class":49,"line":8070},[47,48201,32064],{"class":221},[47,48203,267],{"class":217},[47,48205,32069],{"class":221},[47,48207,32072],{"class":85},[47,48209,222],{"class":221},[47,48211,32077],{"class":85},[47,48213,674],{"class":217},[47,48215,7451],{"class":85},[47,48217,32084],{"class":221},[47,48219,32072],{"class":85},[47,48221,222],{"class":221},[47,48223,32091],{"class":85},[47,48225,674],{"class":217},[47,48227,7451],{"class":85},[47,48229,32098],{"class":221},[47,48231,48232,48234,48236,48238,48240,48242],{"class":49,"line":8076},[47,48233,32103],{"class":221},[47,48235,267],{"class":217},[47,48237,32108],{"class":221},[47,48239,31591],{"class":5309},[47,48241,267],{"class":217},[47,48243,31596],{"class":221},[47,48245,48246,48248,48250,48252],{"class":49,"line":8103},[47,48247,32119],{"class":5309},[47,48249,267],{"class":217},[47,48251,417],{"class":85},[47,48253,31520],{"class":221},[47,48255,48256,48258,48260,48262],{"class":49,"line":8108},[47,48257,32131],{"class":5309},[47,48259,267],{"class":217},[47,48261,31530],{"class":85},[47,48263,31520],{"class":221},[47,48265,48266],{"class":49,"line":8114},[47,48267,32142],{"class":279},[47,48269,48270,48272,48274,48276],{"class":49,"line":8126},[47,48271,32147],{"class":5309},[47,48273,267],{"class":217},[47,48275,614],{"class":85},[47,48277,228],{"class":221},[47,48279,48280,48282,48284,48286,48288,48290],{"class":49,"line":8138},[47,48281,32158],{"class":221},[47,48283,267],{"class":217},[47,48285,31588],{"class":221},[47,48287,31591],{"class":5309},[47,48289,267],{"class":217},[47,48291,32169],{"class":221},[47,48293,48294,48296,48298,48300],{"class":49,"line":8150},[47,48295,32174],{"class":5309},[47,48297,267],{"class":217},[47,48299,417],{"class":85},[47,48301,31520],{"class":221},[47,48303,48304,48306,48308,48310],{"class":49,"line":9809},[47,48305,32185],{"class":5309},[47,48307,267],{"class":217},[47,48309,31530],{"class":85},[47,48311,31520],{"class":221},[47,48313,48314,48316,48318,48320],{"class":49,"line":9834},[47,48315,32196],{"class":5309},[47,48317,267],{"class":217},[47,48319,614],{"class":85},[47,48321,228],{"class":221},[47,48323,48324,48326],{"class":49,"line":9857},[47,48325,4183],{"class":217},[47,48327,32209],{"class":221},[47,48329,48330],{"class":49,"line":9881},[47,48331,2493],{"emptyLinePlaceholder":145},[47,48333,48334],{"class":49,"line":9886},[47,48335,32218],{"class":279},[47,48337,48338],{"class":49,"line":9891},[47,48339,32223],{"class":279},[47,48341,48342],{"class":49,"line":9896},[47,48343,2493],{"emptyLinePlaceholder":145},[47,48345,48346],{"class":49,"line":9905},[47,48347,32232],{"class":279},[47,48349,48350,48352,48354],{"class":49,"line":9910},[47,48351,32001],{"class":217},[47,48353,32239],{"class":53},[47,48355,32242],{"class":221},[47,48357,48358,48360,48362,48364,48366,48368,48370,48372,48374],{"class":49,"line":9916},[47,48359,31291],{"class":221},[47,48361,267],{"class":217},[47,48363,30505],{"class":221},[47,48365,31298],{"class":81},[47,48367,1798],{"class":217},[47,48369,31303],{"class":221},[47,48371,1795],{"class":217},[47,48373,32261],{"class":81},[47,48375,228],{"class":221},[47,48377,48378],{"class":49,"line":9937},[47,48379,2493],{"emptyLinePlaceholder":145},[47,48381,48382],{"class":49,"line":9943},[47,48383,32276],{"class":279},[47,48385,48386],{"class":49,"line":9957},[47,48387,32281],{"class":279},[47,48389,48390],{"class":49,"line":9963},[47,48391,32286],{"class":279},[47,48393,48394,48396,48398,48400,48402,48404,48406],{"class":49,"line":9990},[47,48395,32291],{"class":221},[47,48397,267],{"class":217},[47,48399,32296],{"class":221},[47,48401,32299],{"class":5309},[47,48403,267],{"class":217},[47,48405,32304],{"class":85},[47,48407,228],{"class":221},[47,48409,48410],{"class":49,"line":9999},[47,48411,2493],{"emptyLinePlaceholder":145},[47,48413,48414],{"class":49,"line":10005},[47,48415,32315],{"class":279},[47,48417,48418,48420,48422],{"class":49,"line":10013},[47,48419,32320],{"class":221},[47,48421,267],{"class":217},[47,48423,32325],{"class":221},[47,48425,48426],{"class":49,"line":10018},[47,48427,2493],{"emptyLinePlaceholder":145},[47,48429,48430],{"class":49,"line":16697},[47,48431,32334],{"class":279},[47,48433,48434,48436,48438],{"class":49,"line":16703},[47,48435,31343],{"class":221},[47,48437,267],{"class":217},[47,48439,32343],{"class":221},[47,48441,48442],{"class":49,"line":16726},[47,48443,32348],{"class":279},[47,48445,48446],{"class":49,"line":16732},[47,48447,32353],{"class":279},[47,48449,48450],{"class":49,"line":16755},[47,48451,32358],{"class":279},[47,48453,48454,48456,48458],{"class":49,"line":16769},[47,48455,32363],{"class":221},[47,48457,267],{"class":217},[47,48459,32368],{"class":221},[47,48461,48462],{"class":49,"line":16789},[47,48463,2493],{"emptyLinePlaceholder":145},[47,48465,48466],{"class":49,"line":16795},[47,48467,32381],{"class":279},[47,48469,48470],{"class":49,"line":16806},[47,48471,32386],{"class":279},[47,48473,48474,48476,48478],{"class":49,"line":16829},[47,48475,32391],{"class":221},[47,48477,267],{"class":217},[47,48479,32396],{"class":85},[47,48481,48482],{"class":49,"line":16851},[47,48483,32401],{"class":279},[47,48485,48486,48488,48490],{"class":49,"line":16856},[47,48487,32406],{"class":221},[47,48489,267],{"class":217},[47,48491,32411],{"class":221},[47,48493,48494],{"class":49,"line":16862},[47,48495,32416],{"class":279},[47,48497,48498,48500,48502],{"class":49,"line":16876},[47,48499,32421],{"class":221},[47,48501,267],{"class":217},[47,48503,32411],{"class":221},[47,48505,48506],{"class":49,"line":16889},[47,48507,32430],{"class":279},[47,48509,48510,48512,48514],{"class":49,"line":16894},[47,48511,32435],{"class":221},[47,48513,267],{"class":217},[47,48515,32411],{"class":221},[47,48517,48518],{"class":49,"line":16908},[47,48519,32444],{"class":279},[47,48521,48522,48524,48526],{"class":49,"line":16913},[47,48523,32449],{"class":221},[47,48525,267],{"class":217},[47,48527,32411],{"class":221},[47,48529,48530],{"class":49,"line":16919},[47,48531,2493],{"emptyLinePlaceholder":145},[47,48533,48534],{"class":49,"line":16924},[47,48535,32462],{"class":279},[47,48537,48538,48540,48542],{"class":49,"line":16938},[47,48539,32467],{"class":221},[47,48541,267],{"class":217},[47,48543,32472],{"class":221},[47,48545,48546],{"class":49,"line":16943},[47,48547,2493],{"emptyLinePlaceholder":145},[47,48549,48550],{"class":49,"line":16948},[47,48551,32485],{"class":279},[47,48553,48554,48556,48558,48560,48562],{"class":49,"line":16962},[47,48555,3294],{"class":217},[47,48557,32492],{"class":221},[47,48559,26097],{"class":217},[47,48561,32497],{"class":85},[47,48563,32500],{"class":221},[47,48565,48566,48568,48570,48572,48574,48576,48578,48580,48582,48584,48586],{"class":49,"line":16974},[47,48567,32505],{"class":85},[47,48569,222],{"class":221},[47,48571,32510],{"class":81},[47,48573,32513],{"class":85},[47,48575,803],{"class":81},[47,48577,32513],{"class":85},[47,48579,470],{"class":81},[47,48581,32522],{"class":221},[47,48583,751],{"class":217},[47,48585,436],{"class":85},[47,48587,30551],{"class":221},[47,48589,48590,48592,48594,48596,48598,48600],{"class":49,"line":16979},[47,48591,32505],{"class":85},[47,48593,222],{"class":221},[47,48595,32537],{"class":81},[47,48597,674],{"class":217},[47,48599,665],{"class":85},[47,48601,228],{"class":221},[47,48603,48604],{"class":49,"line":16992},[47,48605,2493],{"emptyLinePlaceholder":145},[47,48607,48608],{"class":49,"line":16997},[47,48609,32552],{"class":279},[47,48611,48612],{"class":49,"line":17002},[47,48613,32557],{"class":279},[47,48615,48616,48618,48620],{"class":49,"line":17007},[47,48617,32562],{"class":221},[47,48619,267],{"class":217},[47,48621,32396],{"class":85},[47,48623,48624],{"class":49,"line":17020},[47,48625,32571],{"class":279},[47,48627,48628,48630,48632],{"class":49,"line":17025},[47,48629,32576],{"class":221},[47,48631,267],{"class":217},[47,48633,3178],{"class":85},[47,48635,48636],{"class":49,"line":32687},[47,48637,32585],{"class":279},[47,48639,48640,48642,48644],{"class":49,"line":32693},[47,48641,32590],{"class":221},[47,48643,267],{"class":217},[47,48645,32396],{"class":85},[47,48647,48648],{"class":49,"line":32699},[47,48649,32599],{"class":279},[47,48651,48652,48654,48656],{"class":49,"line":32705},[47,48653,32604],{"class":221},[47,48655,267],{"class":217},[47,48657,3178],{"class":85},[47,48659,48660],{"class":49,"line":32711},[47,48661,32613],{"class":279},[47,48663,48664,48666,48668],{"class":49,"line":32722},[47,48665,32618],{"class":221},[47,48667,267],{"class":217},[47,48669,3178],{"class":85},[47,48671,48672],{"class":49,"line":32728},[47,48673,32627],{"class":279},[47,48675,48676,48678,48680],{"class":49,"line":32748},[47,48677,32632],{"class":221},[47,48679,267],{"class":217},[47,48681,3178],{"class":85},[47,48683,48684],{"class":49,"line":32754},[47,48685,32641],{"class":279},[47,48687,48688,48690,48692,48694,48696],{"class":49,"line":32765},[47,48689,3496],{"class":217},[47,48691,31655],{"class":221},[47,48693,26097],{"class":217},[47,48695,31660],{"class":85},[47,48697,32654],{"class":221},[47,48699,48700],{"class":49,"line":32771},[47,48701,32659],{"class":279},[47,48703,48704,48706,48708],{"class":49,"line":32777},[47,48705,32664],{"class":221},[47,48707,267],{"class":217},[47,48709,32669],{"class":221},[47,48711,48712],{"class":49,"line":32783},[47,48713,32674],{"class":279},[47,48715,48716,48718,48720],{"class":49,"line":32789},[47,48717,32679],{"class":221},[47,48719,267],{"class":217},[47,48721,32684],{"class":221},[47,48723,48724],{"class":49,"line":32795},[47,48725,32690],{"class":279},[47,48727,48728],{"class":49,"line":32801},[47,48729,32696],{"class":221},[47,48731,48732],{"class":49,"line":32807},[47,48733,32702],{"class":279},[47,48735,48736],{"class":49,"line":32827},[47,48737,32708],{"class":279},[47,48739,48740,48742,48744],{"class":49,"line":32833},[47,48741,32714],{"class":221},[47,48743,267],{"class":217},[47,48745,32719],{"class":221},[47,48747,48748],{"class":49,"line":32849},[47,48749,32725],{"class":279},[47,48751,48752,48754,48756,48758,48760,48762,48764],{"class":49,"line":32855},[47,48753,32731],{"class":221},[47,48755,267],{"class":217},[47,48757,32736],{"class":221},[47,48759,32739],{"class":5309},[47,48761,267],{"class":217},[47,48763,436],{"class":85},[47,48765,228],{"class":221},[47,48767,48768],{"class":49,"line":32869},[47,48769,32751],{"class":279},[47,48771,48772,48774,48776],{"class":49,"line":32875},[47,48773,32757],{"class":221},[47,48775,267],{"class":217},[47,48777,32762],{"class":221},[47,48779,48780],{"class":49,"line":32890},[47,48781,32768],{"class":279},[47,48783,48784],{"class":49,"line":32896},[47,48785,32774],{"class":221},[47,48787,48788],{"class":49,"line":32905},[47,48789,32780],{"class":279},[47,48791,48792],{"class":49,"line":32911},[47,48793,32786],{"class":221},[47,48795,48796],{"class":49,"line":32920},[47,48797,32792],{"class":279},[47,48799,48800],{"class":49,"line":32926},[47,48801,32798],{"class":221},[47,48803,48804],{"class":49,"line":32932},[47,48805,32804],{"class":279},[47,48807,48808,48810,48812,48814,48816,48818,48820],{"class":49,"line":32941},[47,48809,32810],{"class":221},[47,48811,9570],{"class":217},[47,48813,32815],{"class":221},[47,48815,674],{"class":217},[47,48817,32820],{"class":221},[47,48819,411],{"class":85},[47,48821,228],{"class":221},[47,48823,48824],{"class":49,"line":32947},[47,48825,32830],{"class":279},[47,48827,48828,48830,48832,48834,48836],{"class":49,"line":32958},[47,48829,32836],{"class":221},[47,48831,9570],{"class":217},[47,48833,32841],{"class":221},[47,48835,3042],{"class":217},[47,48837,32846],{"class":221},[47,48839,48840],{"class":49,"line":32964},[47,48841,32852],{"class":279},[47,48843,48844,48846,48848,48850,48852],{"class":49,"line":32983},[47,48845,32858],{"class":221},[47,48847,9570],{"class":217},[47,48849,32820],{"class":221},[47,48851,411],{"class":85},[47,48853,228],{"class":221},[47,48855,48856],{"class":49,"line":32989},[47,48857,32872],{"class":279},[47,48859,48860,48862,48864,48866,48868],{"class":49,"line":33000},[47,48861,3496],{"class":217},[47,48863,32880],{"class":221},[47,48865,26097],{"class":217},[47,48867,31660],{"class":85},[47,48869,32887],{"class":221},[47,48871,48872],{"class":49,"line":33006},[47,48873,32893],{"class":279},[47,48875,48876,48878,48880],{"class":49,"line":33026},[47,48877,32664],{"class":221},[47,48879,267],{"class":217},[47,48881,32669],{"class":221},[47,48883,48884],{"class":49,"line":33042},[47,48885,32908],{"class":279},[47,48887,48888,48890,48892],{"class":49,"line":33048},[47,48889,32679],{"class":221},[47,48891,267],{"class":217},[47,48893,32684],{"class":221},[47,48895,48896],{"class":49,"line":33062},[47,48897,32923],{"class":279},[47,48899,48900],{"class":49,"line":33068},[47,48901,32929],{"class":221},[47,48903,48904],{"class":49,"line":33074},[47,48905,36410],{"class":279},[47,48907,48908,48910],{"class":49,"line":33085},[47,48909,32935],{"class":217},[47,48911,32938],{"class":221},[47,48913,48914],{"class":49,"line":33091},[47,48915,32944],{"class":279},[47,48917,48918,48920,48922],{"class":49,"line":33097},[47,48919,36425],{"class":221},[47,48921,267],{"class":217},[47,48923,32719],{"class":221},[47,48925,48926],{"class":49,"line":33107},[47,48927,32961],{"class":279},[47,48929,48930,48932,48934,48936,48938,48940,48942],{"class":49,"line":33113},[47,48931,36438],{"class":221},[47,48933,267],{"class":217},[47,48935,32736],{"class":221},[47,48937,32739],{"class":5309},[47,48939,267],{"class":217},[47,48941,436],{"class":85},[47,48943,228],{"class":221},[47,48945,48946],{"class":49,"line":33124},[47,48947,32986],{"class":279},[47,48949,48950,48952,48954],{"class":49,"line":33130},[47,48951,36459],{"class":221},[47,48953,267],{"class":217},[47,48955,32762],{"class":221},[47,48957,48958],{"class":49,"line":33140},[47,48959,33003],{"class":279},[47,48961,48962,48964,48966,48968,48970,48972,48974],{"class":49,"line":33145},[47,48963,36472],{"class":221},[47,48965,9570],{"class":217},[47,48967,36477],{"class":221},[47,48969,674],{"class":217},[47,48971,32820],{"class":221},[47,48973,411],{"class":85},[47,48975,228],{"class":221},[47,48977,48978,48980,48982,48984,48986],{"class":49,"line":33151},[47,48979,36490],{"class":221},[47,48981,9570],{"class":217},[47,48983,32841],{"class":221},[47,48985,3042],{"class":217},[47,48987,32846],{"class":221},[47,48989,48990],{"class":49,"line":33200},[47,48991,36503],{"class":279},[47,48993,48994,48996,48998,49000,49002],{"class":49,"line":33247},[47,48995,36508],{"class":221},[47,48997,9570],{"class":217},[47,48999,32820],{"class":221},[47,49001,411],{"class":85},[47,49003,228],{"class":221},[47,49005,49006],{"class":49,"line":33252},[47,49007,33065],{"class":279},[47,49009,49010],{"class":49,"line":33258},[47,49011,33071],{"class":279},[47,49013,49014,49016,49018],{"class":49,"line":33277},[47,49015,33077],{"class":221},[47,49017,803],{"class":217},[47,49019,33082],{"class":221},[47,49021,49022],{"class":49,"line":33283},[47,49023,33088],{"class":279},[47,49025,49026],{"class":49,"line":33303},[47,49027,33094],{"class":279},[47,49029,49030,49032,49034],{"class":49,"line":33309},[47,49031,33100],{"class":221},[47,49033,803],{"class":217},[47,49035,33082],{"class":221},[47,49037,49038],{"class":49,"line":33315},[47,49039,33110],{"class":279},[47,49041,49042,49044,49046],{"class":49,"line":33325},[47,49043,33116],{"class":221},[47,49045,803],{"class":217},[47,49047,33121],{"class":221},[47,49049,49050],{"class":49,"line":33330},[47,49051,33127],{"class":279},[47,49053,49054,49056,49058],{"class":49,"line":33336},[47,49055,33133],{"class":221},[47,49057,803],{"class":217},[47,49059,33121],{"class":221},[47,49061,49062],{"class":49,"line":33352},[47,49063,2493],{"emptyLinePlaceholder":145},[47,49065,49066],{"class":49,"line":33397},[47,49067,33148],{"class":279},[47,49069,49070,49072,49074,49076,49078,49080,49082,49084,49086,49088,49090,49092,49094,49096,49098,49100,49102,49104,49106,49108],{"class":49,"line":33403},[47,49071,32505],{"class":85},[47,49073,222],{"class":221},[47,49075,3685],{"class":81},[47,49077,32513],{"class":85},[47,49079,33162],{"class":81},[47,49081,1115],{"class":85},[47,49083,33167],{"class":217},[47,49085,1165],{"class":85},[47,49087,33172],{"class":81},[47,49089,1115],{"class":85},[47,49091,33167],{"class":217},[47,49093,1165],{"class":85},[47,49095,3685],{"class":81},[47,49097,33183],{"class":221},[47,49099,751],{"class":217},[47,49101,436],{"class":85},[47,49103,33190],{"class":221},[47,49105,751],{"class":217},[47,49107,436],{"class":85},[47,49109,33197],{"class":221},[47,49111,49112,49114,49116,49118,49120,49122,49124,49126,49128,49130,49132,49134,49136,49138,49140,49142,49144,49146,49148,49150],{"class":49,"line":33409},[47,49113,32505],{"class":85},[47,49115,222],{"class":221},[47,49117,3685],{"class":81},[47,49119,32513],{"class":85},[47,49121,33211],{"class":81},[47,49123,1115],{"class":85},[47,49125,33167],{"class":217},[47,49127,1165],{"class":85},[47,49129,33220],{"class":81},[47,49131,1115],{"class":85},[47,49133,33167],{"class":217},[47,49135,1165],{"class":85},[47,49137,3685],{"class":81},[47,49139,33231],{"class":221},[47,49141,751],{"class":217},[47,49143,436],{"class":85},[47,49145,33238],{"class":221},[47,49147,751],{"class":217},[47,49149,436],{"class":85},[47,49151,33197],{"class":221},[47,49153,49154],{"class":49,"line":33415},[47,49155,2493],{"emptyLinePlaceholder":145},[47,49157,49158],{"class":49,"line":33426},[47,49159,33255],{"class":279},[47,49161,49162,49164,49166,49168,49170,49172,49174],{"class":49,"line":33432},[47,49163,2590],{"class":217},[47,49165,33263],{"class":221},[47,49167,751],{"class":217},[47,49169,436],{"class":85},[47,49171,1159],{"class":221},[47,49173,1179],{"class":217},[47,49175,33274],{"class":221},[47,49177,49178],{"class":49,"line":33438},[47,49179,33280],{"class":279},[47,49181,49182,49184,49186,49188,49190,49192,49194],{"class":49,"line":33444},[47,49183,33286],{"class":221},[47,49185,261],{"class":85},[47,49187,267],{"class":217},[47,49189,33293],{"class":221},[47,49191,751],{"class":217},[47,49193,436],{"class":85},[47,49195,33300],{"class":221},[47,49197,49198],{"class":49,"line":33462},[47,49199,33306],{"class":279},[47,49201,49202],{"class":49,"line":33476},[47,49203,33312],{"class":279},[47,49205,49206,49208,49210],{"class":49,"line":33485},[47,49207,33318],{"class":221},[47,49209,267],{"class":217},[47,49211,32368],{"class":221},[47,49213,49214],{"class":49,"line":33494},[47,49215,2493],{"emptyLinePlaceholder":145},[47,49217,49218],{"class":49,"line":33503},[47,49219,33333],{"class":279},[47,49221,49222,49224,49226,49228,49230],{"class":49,"line":33512},[47,49223,33339],{"class":221},[47,49225,267],{"class":217},[47,49227,33344],{"class":221},[47,49229,751],{"class":217},[47,49231,33349],{"class":221},[47,49233,49234,49236,49238,49240,49242,49244,49246,49248,49250,49252,49254,49256,49258,49260,49262,49264,49266,49268],{"class":49,"line":33518},[47,49235,32505],{"class":85},[47,49237,222],{"class":221},[47,49239,33359],{"class":81},[47,49241,1115],{"class":85},[47,49243,33364],{"class":217},[47,49245,1165],{"class":85},[47,49247,763],{"class":81},[47,49249,1115],{"class":85},[47,49251,33364],{"class":217},[47,49253,1165],{"class":85},[47,49255,33377],{"class":81},[47,49257,33380],{"class":221},[47,49259,33383],{"class":217},[47,49261,1126],{"class":85},[47,49263,33388],{"class":221},[47,49265,547],{"class":217},[47,49267,1126],{"class":85},[47,49269,30551],{"class":221},[47,49271,49272],{"class":49,"line":33524},[47,49273,36787],{"class":279},[47,49275,49276],{"class":49,"line":33532},[47,49277,36792],{"class":279},[47,49279,49280,49282,49284],{"class":49,"line":33537},[47,49281,36797],{"class":221},[47,49283,33421],{"class":81},[47,49285,228],{"class":221},[47,49287,49288],{"class":49,"line":33543},[47,49289,33441],{"class":279},[47,49291,49292,49294,49296,49298,49300,49302],{"class":49,"line":33554},[47,49293,33447],{"class":221},[47,49295,267],{"class":217},[47,49297,33452],{"class":221},[47,49299,33455],{"class":5309},[47,49301,267],{"class":217},[47,49303,1640],{"class":221},[47,49305,49306,49308,49310,49312],{"class":49,"line":33560},[47,49307,33465],{"class":81},[47,49309,1078],{"class":221},[47,49311,33470],{"class":85},[47,49313,33473],{"class":221},[47,49315,49316,49318],{"class":49,"line":33580},[47,49317,33479],{"class":81},[47,49319,33482],{"class":221},[47,49321,49322,49324],{"class":49,"line":33586},[47,49323,33488],{"class":81},[47,49325,33491],{"class":221},[47,49327,49328,49330],{"class":49,"line":33592},[47,49329,33497],{"class":81},[47,49331,33500],{"class":221},[47,49333,49334,49336],{"class":49,"line":33598},[47,49335,33506],{"class":81},[47,49337,33509],{"class":221},[47,49339,49340],{"class":49,"line":33615},[47,49341,33515],{"class":221},[47,49343,49344],{"class":49,"line":33621},[47,49345,33521],{"class":279},[47,49347,49348,49350],{"class":49,"line":33627},[47,49349,4183],{"class":217},[47,49351,33529],{"class":221},[47,49353,49354],{"class":49,"line":33633},[47,49355,2493],{"emptyLinePlaceholder":145},[47,49357,49358],{"class":49,"line":33639},[47,49359,33540],{"class":279},[47,49361,49362,49364,49366],{"class":49,"line":33645},[47,49363,32001],{"class":217},[47,49365,33548],{"class":53},[47,49367,33551],{"class":221},[47,49369,49370],{"class":49,"line":33672},[47,49371,33557],{"class":279},[47,49373,49374,49376,49378,49380,49382,49384,49386,49388],{"class":49,"line":33696},[47,49375,33563],{"class":221},[47,49377,31747],{"class":5309},[47,49379,267],{"class":217},[47,49381,222],{"class":221},[47,49383,717],{"class":85},[47,49385,597],{"class":221},[47,49387,512],{"class":85},[47,49389,30551],{"class":221},[47,49391,49392],{"class":49,"line":33702},[47,49393,33583],{"class":279},[47,49395,49396],{"class":49,"line":33708},[47,49397,33589],{"class":279},[47,49399,49400],{"class":49,"line":33714},[47,49401,33595],{"class":279},[47,49403,49404,49406,49408,49410,49412,49414,49416],{"class":49,"line":33725},[47,49405,31781],{"class":221},[47,49407,436],{"class":85},[47,49409,597],{"class":221},[47,49411,298],{"class":85},[47,49413,597],{"class":221},[47,49415,436],{"class":85},[47,49417,228],{"class":221},[47,49419,49420],{"class":49,"line":33736},[47,49421,33618],{"class":279},[47,49423,49424],{"class":49,"line":33742},[47,49425,33624],{"class":279},[47,49427,49428],{"class":49,"line":33759},[47,49429,33630],{"class":279},[47,49431,49432],{"class":49,"line":33782},[47,49433,33636],{"class":279},[47,49435,49436],{"class":49,"line":33805},[47,49437,33642],{"class":279},[47,49439,49440,49442,49444,49446,49448,49450,49452,49454,49456],{"class":49,"line":33811},[47,49441,33648],{"class":221},[47,49443,33651],{"class":81},[47,49445,33654],{"class":221},[47,49447,33657],{"class":81},[47,49449,597],{"class":221},[47,49451,33662],{"class":5309},[47,49453,267],{"class":217},[47,49455,33667],{"class":81},[47,49457,228],{"class":221},[47,49459,49460,49462,49464,49466,49468,49470,49472,49474,49476],{"class":49,"line":33816},[47,49461,33648],{"class":221},[47,49463,33651],{"class":81},[47,49465,33679],{"class":221},[47,49467,33682],{"class":81},[47,49469,597],{"class":221},[47,49471,33662],{"class":5309},[47,49473,267],{"class":217},[47,49475,33691],{"class":81},[47,49477,228],{"class":221},[47,49479,49480],{"class":49,"line":33825},[47,49481,33699],{"class":279},[47,49483,49484],{"class":49,"line":33835},[47,49485,33705],{"class":221},[47,49487,49488],{"class":49,"line":33841},[47,49489,33711],{"class":279},[47,49491,49492,49494,49496],{"class":49,"line":33846},[47,49493,33717],{"class":221},[47,49495,33720],{"class":81},[47,49497,228],{"class":221},[47,49499,49500,49502,49504],{"class":49,"line":33852},[47,49501,33728],{"class":221},[47,49503,33731],{"class":81},[47,49505,228],{"class":221},[47,49507,49508],{"class":49,"line":33865},[47,49509,33739],{"class":279},[47,49511,49512,49514,49516,49518,49520,49522,49524],{"class":49,"line":33871},[47,49513,31781],{"class":221},[47,49515,436],{"class":85},[47,49517,597],{"class":221},[47,49519,298],{"class":85},[47,49521,597],{"class":221},[47,49523,298],{"class":85},[47,49525,228],{"class":221},[47,49527,49528,49530,49532,49534,49536,49538,49540,49542,49544],{"class":49,"line":33882},[47,49529,33648],{"class":221},[47,49531,33651],{"class":81},[47,49533,33766],{"class":221},[47,49535,33657],{"class":81},[47,49537,597],{"class":221},[47,49539,33662],{"class":5309},[47,49541,267],{"class":217},[47,49543,33777],{"class":81},[47,49545,228],{"class":221},[47,49547,49548,49550,49552,49554,49556,49558,49560,49562,49564],{"class":49,"line":33893},[47,49549,33648],{"class":221},[47,49551,33651],{"class":81},[47,49553,33789],{"class":221},[47,49555,33682],{"class":81},[47,49557,597],{"class":221},[47,49559,33662],{"class":5309},[47,49561,267],{"class":217},[47,49563,33800],{"class":81},[47,49565,228],{"class":221},[47,49567,49568],{"class":49,"line":33912},[47,49569,33808],{"class":279},[47,49571,49573],{"class":49,"line":49572},219,[47,49574,33705],{"class":221},[47,49576,49578,49580,49582],{"class":49,"line":49577},220,[47,49579,33717],{"class":221},[47,49581,33651],{"class":81},[47,49583,228],{"class":221},[47,49585,49587,49589,49591],{"class":49,"line":49586},221,[47,49588,33728],{"class":221},[47,49590,33830],{"class":81},[47,49592,228],{"class":221},[47,49594,49596],{"class":49,"line":49595},222,[47,49597,33838],{"class":221},[47,49599,49601],{"class":49,"line":49600},223,[47,49602,2493],{"emptyLinePlaceholder":145},[47,49604,49606],{"class":49,"line":49605},224,[47,49607,33849],{"class":279},[47,49609,49611,49613,49615,49617,49619],{"class":49,"line":49610},225,[47,49612,1625],{"class":217},[47,49614,31274],{"class":85},[47,49616,3042],{"class":217},[47,49618,31279],{"class":81},[47,49620,3832],{"class":221},[47,49622,49624],{"class":49,"line":49623},226,[47,49625,33868],{"class":279},[47,49627,49629,49631,49633],{"class":49,"line":49628},227,[47,49630,44600],{"class":221},[47,49632,267],{"class":217},[47,49634,44605],{"class":221},[47,49636,49638,49640,49642],{"class":49,"line":49637},228,[47,49639,33885],{"class":221},[47,49641,267],{"class":217},[47,49643,33890],{"class":221},[47,49645,49647,49649,49651,49653,49655,49657,49659],{"class":49,"line":49646},229,[47,49648,33447],{"class":221},[47,49650,267],{"class":217},[47,49652,44622],{"class":221},[47,49654,33903],{"class":5309},[47,49656,267],{"class":217},[47,49658,1126],{"class":85},[47,49660,228],{"class":221},[47,49662,49664],{"class":49,"line":49663},230,[47,49665,33915],{"class":221},[22091,49667,49669],{"id":49668},"_242测试代码","2.4.2.测试代码",[19,49671,49672],{},"使用测试集进行测试与推理",[38,49674,49676],{"className":30432,"code":49675,"language":30434,"meta":43,"style":43},"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",[26,49677,49678,49684,49694,49704,49715,49725,49729,49733,49741,49746,49750,49767,49771,49775,49779,49783,49787,49819,49823,49831,49835,49847,49851,49855,49859,49863,49867,49871,49875,49879,49897,49911,49915,49925,49935,49945,49951,49955,49959,49967,49971,49987,49995,49999,50003,50011,50019,50023,50027,50031,50035,50041,50045,50055,50063,50071,50075,50079,50083,50091,50095,50111,50115,50119,50123,50135,50139,50151,50155,50159,50171,50175,50185,50189,50193,50205,50209,50217,50221,50225,50233,50237,50245,50249,50253,50257,50261,50265,50281,50289,50293,50297,50315,50321,50325,50335,50343,50351,50355,50359,50363,50367,50375,50379,50395,50399,50407,50415],{"__ignoreMap":43},[47,49679,49680,49682],{"class":49,"line":50},[47,49681,30446],{"class":217},[47,49683,30449],{"class":221},[47,49685,49686,49688,49690,49692],{"class":49,"line":92},[47,49687,30446],{"class":217},[47,49689,31469],{"class":221},[47,49691,31437],{"class":217},[47,49693,31474],{"class":221},[47,49695,49696,49698,49700,49702],{"class":49,"line":1273},[47,49697,30791],{"class":217},[47,49699,31452],{"class":221},[47,49701,30446],{"class":217},[47,49703,31457],{"class":221},[47,49705,49706,49708,49710,49712],{"class":49,"line":1288},[47,49707,30791],{"class":217},[47,49709,31422],{"class":221},[47,49711,30446],{"class":217},[47,49713,49714],{"class":221}," ImageFolder\n",[47,49716,49717,49719,49721,49723],{"class":49,"line":1294},[47,49718,30791],{"class":217},[47,49720,31968],{"class":221},[47,49722,30446],{"class":217},[47,49724,44694],{"class":221},[47,49726,49727],{"class":49,"line":1308},[47,49728,2493],{"emptyLinePlaceholder":145},[47,49730,49731],{"class":49,"line":1314},[47,49732,34005],{"class":279},[47,49734,49735,49737,49739],{"class":49,"line":1405},[47,49736,32001],{"class":217},[47,49738,34012],{"class":53},[47,49740,32007],{"class":221},[47,49742,49743],{"class":49,"line":1411},[47,49744,49745],{"class":279},"   # 导入自己的数据集，并进行数据处理\n",[47,49747,49748],{"class":49,"line":1423},[47,49749,48015],{"class":279},[47,49751,49752,49754,49756,49758,49760,49762,49765],{"class":49,"line":1706},[47,49753,48020],{"class":85},[47,49755,267],{"class":217},[47,49757,889],{"class":217},[47,49759,470],{"class":81},[47,49761,777],{"class":85},[47,49763,49764],{"class":48031},"\u002Fdata\u002Ftest",[47,49766,25187],{"class":81},[47,49768,49769],{"class":49,"line":1711},[47,49770,2493],{"emptyLinePlaceholder":145},[47,49772,49773],{"class":49,"line":1717},[47,49774,48043],{"class":279},[47,49776,49777],{"class":49,"line":1722},[47,49778,48048],{"class":279},[47,49780,49781],{"class":49,"line":1736},[47,49782,48053],{"class":279},[47,49784,49785],{"class":49,"line":1741},[47,49786,48058],{"class":279},[47,49788,49789,49791,49793,49795,49797,49799,49801,49803,49805,49807,49809,49811,49813,49815,49817],{"class":49,"line":1747},[47,49790,48063],{"class":221},[47,49792,267],{"class":217},[47,49794,48068],{"class":221},[47,49796,48071],{"class":85},[47,49798,597],{"class":221},[47,49800,48076],{"class":85},[47,49802,597],{"class":221},[47,49804,48081],{"class":85},[47,49806,48084],{"class":221},[47,49808,48087],{"class":85},[47,49810,597],{"class":221},[47,49812,48092],{"class":85},[47,49814,597],{"class":221},[47,49816,48097],{"class":85},[47,49818,4750],{"class":221},[47,49820,49821],{"class":49,"line":1768},[47,49822,48104],{"class":279},[47,49824,49825,49827,49829],{"class":49,"line":1773},[47,49826,48109],{"class":221},[47,49828,267],{"class":217},[47,49830,48114],{"class":221},[47,49832,49833],{"class":49,"line":1787},[47,49834,48119],{"class":279},[47,49836,49837,49839,49841,49843,49845],{"class":49,"line":1792},[47,49838,48124],{"class":221},[47,49840,31555],{"class":85},[47,49842,597],{"class":221},[47,49844,31555],{"class":85},[47,49846,42676],{"class":221},[47,49848,49849],{"class":49,"line":1821},[47,49850,48137],{"class":279},[47,49852,49853],{"class":49,"line":1826},[47,49854,48142],{"class":221},[47,49856,49857],{"class":49,"line":1843},[47,49858,48147],{"class":221},[47,49860,49861],{"class":49,"line":1848},[47,49862,48152],{"class":279},[47,49864,49865],{"class":49,"line":1853},[47,49866,48157],{"class":279},[47,49868,49869],{"class":49,"line":1858},[47,49870,2493],{"emptyLinePlaceholder":145},[47,49872,49873],{"class":49,"line":1872},[47,49874,48166],{"class":279},[47,49876,49877],{"class":49,"line":1877},[47,49878,48171],{"class":279},[47,49880,49881,49883,49885,49887,49889,49891,49893,49895],{"class":49,"line":2670},[47,49882,34019],{"class":221},[47,49884,267],{"class":217},[47,49886,48180],{"class":221},[47,49888,48183],{"class":85},[47,49890,597],{"class":221},[47,49892,48188],{"class":5309},[47,49894,267],{"class":217},[47,49896,48193],{"class":221},[47,49898,49899,49901,49903,49905,49907,49909],{"class":49,"line":2684},[47,49900,34076],{"class":221},[47,49902,267],{"class":217},[47,49904,31588],{"class":221},[47,49906,31591],{"class":5309},[47,49908,267],{"class":217},[47,49910,34087],{"class":221},[47,49912,49913],{"class":49,"line":2692},[47,49914,34092],{"class":279},[47,49916,49917,49919,49921,49923],{"class":49,"line":2697},[47,49918,34097],{"class":5309},[47,49920,267],{"class":217},[47,49922,436],{"class":85},[47,49924,31520],{"class":221},[47,49926,49927,49929,49931,49933],{"class":49,"line":2703},[47,49928,34108],{"class":5309},[47,49930,267],{"class":217},[47,49932,31530],{"class":85},[47,49934,31520],{"class":221},[47,49936,49937,49939,49941,49943],{"class":49,"line":2709},[47,49938,34119],{"class":5309},[47,49940,267],{"class":217},[47,49942,411],{"class":85},[47,49944,228],{"class":221},[47,49946,49947,49949],{"class":49,"line":2714},[47,49948,4183],{"class":217},[47,49950,34132],{"class":221},[47,49952,49953],{"class":49,"line":8041},[47,49954,2493],{"emptyLinePlaceholder":145},[47,49956,49957],{"class":49,"line":8065},[47,49958,34141],{"class":279},[47,49960,49961,49963,49965],{"class":49,"line":8070},[47,49962,32001],{"class":217},[47,49964,34148],{"class":53},[47,49966,34151],{"class":221},[47,49968,49969],{"class":49,"line":8076},[47,49970,34156],{"class":279},[47,49972,49973,49975,49977,49979,49981,49983,49985],{"class":49,"line":8103},[47,49974,31291],{"class":221},[47,49976,267],{"class":217},[47,49978,31298],{"class":81},[47,49980,1798],{"class":217},[47,49982,31303],{"class":221},[47,49984,1795],{"class":217},[47,49986,34173],{"class":81},[47,49988,49989,49991,49993],{"class":49,"line":8108},[47,49990,31343],{"class":221},[47,49992,267],{"class":217},[47,49994,32343],{"class":221},[47,49996,49997],{"class":49,"line":8114},[47,49998,2493],{"emptyLinePlaceholder":145},[47,50000,50001],{"class":49,"line":8126},[47,50002,34190],{"class":279},[47,50004,50005,50007,50009],{"class":49,"line":8138},[47,50006,34195],{"class":221},[47,50008,267],{"class":217},[47,50010,32396],{"class":85},[47,50012,50013,50015,50017],{"class":49,"line":8150},[47,50014,34204],{"class":221},[47,50016,267],{"class":217},[47,50018,3178],{"class":85},[47,50020,50021],{"class":49,"line":9809},[47,50022,2493],{"emptyLinePlaceholder":145},[47,50024,50025],{"class":49,"line":9834},[47,50026,34217],{"class":279},[47,50028,50029],{"class":49,"line":9857},[47,50030,34222],{"class":279},[47,50032,50033],{"class":49,"line":9881},[47,50034,34227],{"class":279},[47,50036,50037,50039],{"class":49,"line":9886},[47,50038,34232],{"class":217},[47,50040,32938],{"class":221},[47,50042,50043],{"class":49,"line":9891},[47,50044,34239],{"class":279},[47,50046,50047,50049,50051,50053],{"class":49,"line":9896},[47,50048,3496],{"class":217},[47,50050,34246],{"class":221},[47,50052,26097],{"class":217},[47,50054,34251],{"class":221},[47,50056,50057,50059,50061],{"class":49,"line":9905},[47,50058,34256],{"class":221},[47,50060,267],{"class":217},[47,50062,34261],{"class":221},[47,50064,50065,50067,50069],{"class":49,"line":9910},[47,50066,34266],{"class":221},[47,50068,267],{"class":217},[47,50070,34271],{"class":221},[47,50072,50073],{"class":49,"line":9916},[47,50074,34276],{"class":279},[47,50076,50077],{"class":49,"line":9937},[47,50078,32929],{"class":221},[47,50080,50081],{"class":49,"line":9943},[47,50082,34285],{"class":279},[47,50084,50085,50087,50089],{"class":49,"line":9957},[47,50086,32714],{"class":221},[47,50088,267],{"class":217},[47,50090,34294],{"class":221},[47,50092,50093],{"class":49,"line":9963},[47,50094,34299],{"class":279},[47,50096,50097,50099,50101,50103,50105,50107,50109],{"class":49,"line":9990},[47,50098,32731],{"class":221},[47,50100,267],{"class":217},[47,50102,32736],{"class":221},[47,50104,32739],{"class":5309},[47,50106,267],{"class":217},[47,50108,436],{"class":85},[47,50110,228],{"class":221},[47,50112,50113],{"class":49,"line":9999},[47,50114,34320],{"class":279},[47,50116,50117],{"class":49,"line":10005},[47,50118,34325],{"class":279},[47,50120,50121],{"class":49,"line":10013},[47,50122,34330],{"class":279},[47,50124,50125,50127,50129,50131,50133],{"class":49,"line":10018},[47,50126,34335],{"class":221},[47,50128,9570],{"class":217},[47,50130,32841],{"class":221},[47,50132,3042],{"class":217},[47,50134,34344],{"class":221},[47,50136,50137],{"class":49,"line":16697},[47,50138,34349],{"class":279},[47,50140,50141,50143,50145,50147,50149],{"class":49,"line":16703},[47,50142,34354],{"class":221},[47,50144,9570],{"class":217},[47,50146,34359],{"class":221},[47,50148,411],{"class":85},[47,50150,228],{"class":221},[47,50152,50153],{"class":49,"line":16726},[47,50154,2493],{"emptyLinePlaceholder":145},[47,50156,50157],{"class":49,"line":16732},[47,50158,34372],{"class":279},[47,50160,50161,50163,50165,50167,50169],{"class":49,"line":16755},[47,50162,34377],{"class":221},[47,50164,267],{"class":217},[47,50166,34382],{"class":221},[47,50168,803],{"class":217},[47,50170,34387],{"class":221},[47,50172,50173],{"class":49,"line":16769},[47,50174,34392],{"class":279},[47,50176,50177,50179,50181,50183],{"class":49,"line":16789},[47,50178,32505],{"class":85},[47,50180,222],{"class":221},[47,50182,34401],{"class":81},[47,50184,34404],{"class":221},[47,50186,50187],{"class":49,"line":16795},[47,50188,2493],{"emptyLinePlaceholder":145},[47,50190,50191],{"class":49,"line":16806},[47,50192,34413],{"class":279},[47,50194,50195,50197,50199,50201,50203],{"class":49,"line":16829},[47,50196,1625],{"class":217},[47,50198,31274],{"class":85},[47,50200,3042],{"class":217},[47,50202,31279],{"class":81},[47,50204,3832],{"class":221},[47,50206,50207],{"class":49,"line":16851},[47,50208,34430],{"class":279},[47,50210,50211,50213,50215],{"class":49,"line":16856},[47,50212,31343],{"class":221},[47,50214,267],{"class":217},[47,50216,44605],{"class":221},[47,50218,50219],{"class":49,"line":16862},[47,50220,34443],{"class":279},[47,50222,50223],{"class":49,"line":16876},[47,50224,34448],{"class":279},[47,50226,50227,50229,50231],{"class":49,"line":16889},[47,50228,34453],{"class":221},[47,50230,34456],{"class":81},[47,50232,30551],{"class":221},[47,50234,50235],{"class":49,"line":16894},[47,50236,34463],{"class":279},[47,50238,50239,50241,50243],{"class":49,"line":16908},[47,50240,34076],{"class":221},[47,50242,267],{"class":217},[47,50244,34472],{"class":221},[47,50246,50247],{"class":49,"line":16913},[47,50248,34477],{"class":279},[47,50250,50251],{"class":49,"line":16919},[47,50252,34482],{"class":221},[47,50254,50255],{"class":49,"line":16924},[47,50256,2493],{"emptyLinePlaceholder":145},[47,50258,50259],{"class":49,"line":16938},[47,50260,34491],{"class":279},[47,50262,50263],{"class":49,"line":16943},[47,50264,34496],{"class":279},[47,50266,50267,50269,50271,50273,50275,50277,50279],{"class":49,"line":16948},[47,50268,31291],{"class":221},[47,50270,267],{"class":217},[47,50272,31298],{"class":81},[47,50274,1798],{"class":217},[47,50276,31303],{"class":221},[47,50278,1795],{"class":217},[47,50280,34173],{"class":81},[47,50282,50283,50285,50287],{"class":49,"line":16962},[47,50284,31343],{"class":221},[47,50286,267],{"class":217},[47,50288,32343],{"class":221},[47,50290,50291],{"class":49,"line":16974},[47,50292,34525],{"class":279},[47,50294,50295],{"class":49,"line":16979},[47,50296,34530],{"class":279},[47,50298,50299,50301,50303,50305,50308,50310,50313],{"class":49,"line":16992},[47,50300,34535],{"class":221},[47,50302,267],{"class":217},[47,50304,1109],{"class":221},[47,50306,50307],{"class":81},"'猫'",[47,50309,597],{"class":221},[47,50311,50312],{"class":81},"'狗'",[47,50314,33300],{"class":221},[47,50316,50317,50319],{"class":49,"line":16997},[47,50318,34232],{"class":217},[47,50320,32938],{"class":221},[47,50322,50323],{"class":49,"line":17002},[47,50324,34600],{"class":279},[47,50326,50327,50329,50331,50333],{"class":49,"line":17007},[47,50328,3496],{"class":217},[47,50330,34607],{"class":221},[47,50332,26097],{"class":217},[47,50334,34251],{"class":221},[47,50336,50337,50339,50341],{"class":49,"line":17020},[47,50338,32664],{"class":221},[47,50340,267],{"class":217},[47,50342,32669],{"class":221},[47,50344,50345,50347,50349],{"class":49,"line":17025},[47,50346,32679],{"class":221},[47,50348,267],{"class":217},[47,50350,32684],{"class":221},[47,50352,50353],{"class":49,"line":32687},[47,50354,2493],{"emptyLinePlaceholder":145},[47,50356,50357],{"class":49,"line":32693},[47,50358,34636],{"class":279},[47,50360,50361],{"class":49,"line":32699},[47,50362,32929],{"class":221},[47,50364,50365],{"class":49,"line":32705},[47,50366,34645],{"class":279},[47,50368,50369,50371,50373],{"class":49,"line":32711},[47,50370,32714],{"class":221},[47,50372,267],{"class":217},[47,50374,32719],{"class":221},[47,50376,50377],{"class":49,"line":32722},[47,50378,34658],{"class":279},[47,50380,50381,50383,50385,50387,50389,50391,50393],{"class":49,"line":32728},[47,50382,32731],{"class":221},[47,50384,267],{"class":217},[47,50386,32736],{"class":221},[47,50388,32739],{"class":5309},[47,50390,267],{"class":217},[47,50392,436],{"class":85},[47,50394,228],{"class":221},[47,50396,50397],{"class":49,"line":32748},[47,50398,34679],{"class":279},[47,50400,50401,50403,50405],{"class":49,"line":32754},[47,50402,34684],{"class":221},[47,50404,267],{"class":217},[47,50406,34689],{"class":221},[47,50408,50409,50411,50413],{"class":49,"line":32765},[47,50410,34694],{"class":221},[47,50412,267],{"class":217},[47,50414,34699],{"class":221},[47,50416,50417,50419,50421,50423,50425,50427,50429,50431],{"class":49,"line":32771},[47,50418,34704],{"class":85},[47,50420,222],{"class":221},[47,50422,34709],{"class":81},[47,50424,34712],{"class":221},[47,50426,34715],{"class":81},[47,50428,597],{"class":221},[47,50430,34720],{"class":81},[47,50432,34723],{"class":221},[134,50434,50435],{},"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":43,"searchDepth":92,"depth":92,"links":50437},[50438,50439,50440,50441],{"id":30645,"depth":1273,"text":30646},{"id":37893,"depth":1273,"text":37894},{"id":41326,"depth":1273,"text":41327},{"id":45335,"depth":1273,"text":45336},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30637,"description":142},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50448,"title":50449,"body":50450,"description":142,"extension":143,"meta":50457,"navigation":145,"path":50458,"seo":50459,"stem":50460,"__hash__":50461},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50451,"toc":50455},[50452],[10,50453,50449],{"id":50454},"_3yolo模型学习",{"title":43,"searchDepth":92,"depth":92,"links":50456},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50449,"description":142},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50463,"title":50464,"body":50465,"description":50472,"extension":143,"meta":50473,"navigation":145,"path":50475,"seo":50476,"stem":50477,"__hash__":50478},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50466,"toc":50470},[50467],[19,50468,50469],{},"yolo模型还未补充",{"title":43,"searchDepth":92,"depth":92,"links":50471},[],"深度学习学习",{"category":50474},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50464,"description":50472},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50480,"title":50481,"body":50482,"description":142,"extension":143,"meta":50507,"navigation":145,"path":50508,"seo":50509,"stem":50510,"__hash__":50511},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50483,"toc":50505},[50484,50487,50490,50495,50502],[10,50485,50481],{"id":50486},"_1工具",[19,50488,50489],{},"提示错误插件：有问题会提前报错",[19,50491,50492],{},[1556,50493],{"alt":43,"src":50494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,50496,50497],{},[457,50498,50501],{"href":50499,"rel":50500},"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",[23956],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,50503,50504],{},"alt键加上下箭头可以实现语句的移动",{"title":43,"searchDepth":92,"depth":92,"links":50506},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50481,"description":142},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50513,"title":50514,"body":50515,"description":142,"extension":143,"meta":53379,"navigation":145,"path":53380,"seo":53381,"stem":53382,"__hash__":53383},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50516,"toc":53330},[50517,50520,50524,50528,50533,50536,50541,50545,50552,50557,50564,50569,50576,50581,50585,50590,50593,50597,50602,50606,50611,50614,50617,50620,50623,50626,50629,50632,50635,50640,50645,50650,50654,50657,50660,50664,50669,50672,50680,50685,50702,50710,50715,50720,50725,50730,50735,50738,50743,50748,50752,50761,50766,50771,50775,50780,50783,50787,50792,50800,50805,50810,50813,50818,50823,50828,50831,50834,50837,50842,50847,50850,50855,50858,50863,50866,50869,50872,50877,50880,50883,50898,50903,50908,50913,50916,50919,50922,50936,50939,50944,50949,50952,50955,50958,50961,50964,50967,50970,50974,50978,50983,50987,50990,50995,51000,51003,51008,51011,51015,51020,51023,51026,51029,51032,51035,51038,51041,51044,51047,51051,51056,51061,51066,51069,51072,51076,51081,51084,51088,51091,51094,51099,51102,51105,51109,51113,51116,51121,51126,51129,51158,51163,51168,51173,51178,51182,51187,51191,51196,51199,51203,51207,51212,51216,51221,51226,51230,51235,51238,51240,51243,51248,51252,51257,51261,51265,51270,51275,51280,51285,51289,51294,51299,51304,51307,51310,51315,51318,51323,51328,51333,51338,51342,52149,52153,52496,52501,52504,52507,52510,52513,52516,52519,52522,52525,52527,52530,52532,52535,52539,52544,52547,52550,52553,52557,52562,52567,52587,52590,52594,52599,52604,52621,52625,52654,52658,52680,52682,52721,52729,52735,52739,52742,52745,52750,52755,52758,52761,52764,52769,52774,52777,52780,52783,52786,52789,52792,52795,52798,52801,52804,52807,52809,52812,52815,52818,52821,52824,52827,52830,52833,52837,52842,52845,52850,52853,52856,52859,52862,52865,52868,52871,52873,52876,52879,52882,52885,52888,52891,52895,52898,52907,52910,52915,52918,52923,52926,52929,52932,52935,52938,52941,52944,52948,52952,52955,52958,52963,52968,52973,52977,52982,52987,52990,52993,52996,52999,53002,53007,53010,53015,53017,53022,53025,53029,53034,53037,53040,53045,53049,53052,53057,53060,53063,53092,53097,53100,53103,53106,53109,53112,53116,53119,53205,53209,53212,53217,53222,53229,53232,53235,53238,53241,53244,53249,53254,53257,53260,53263,53266,53269,53272,53275,53278,53281,53283,53286,53290,53295,53300,53305,53308,53313,53318,53321,53324,53327],[10,50518,50514],{"id":50519},"_2基础语法",[14,50521,50523],{"id":50522},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[187,50525,50527],{"id":50526},"_211-js组成","2.1.1 js组成",[171,50529,50530],{},[109,50531,50532],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,50534,50535],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[171,50537,50538],{"start":92},[109,50539,50540],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[187,50542,50544],{"id":50543},"_212-js书写位置","2.1.2 js书写位置",[171,50546,50547],{},[109,50548,50549],{},[369,50550,50551],{},"内部 JavaScript",[19,50553,50554],{},[1556,50555],{"alt":43,"src":50556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[171,50558,50559],{"start":92},[109,50560,50561],{},[369,50562,50563],{},"外部 JavaScript",[19,50565,50566],{},[1556,50567],{"alt":43,"src":50568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[171,50570,50571],{"start":1273},[109,50572,50573],{},[369,50574,50575],{},"内联 JavaScript",[19,50577,50578],{},[1556,50579],{"alt":43,"src":50580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[187,50582,50584],{"id":50583},"_213-javascript注释","2.1.3 JavaScript注释",[19,50586,50587],{},[1556,50588],{"alt":43,"src":50589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,50591,50592],{},"alt+shift+a一定要记住！",[187,50594,50596],{"id":50595},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,50598,50599],{},[1556,50600],{"alt":43,"src":50601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[187,50603,50605],{"id":50604},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[171,50607,50608],{},[109,50609,50610],{},"输出语法：",[19,50612,50613],{},"①document.write('要出的内容')",[19,50615,50616],{},"向body内输出内容；",[19,50618,50619],{},"如果输出的内容写的是标签，也会被解析cheng",[19,50621,50622],{},"②alert('要出的内容')",[19,50624,50625],{},"页面弹出警告对话框",[19,50627,50628],{},"③console.log('控制台打印')",[19,50630,50631],{},"控制台输出语法，程序员调试使用",[19,50633,50634],{},"输入log就行，自动生成：",[19,50636,50637],{},[1556,50638],{"alt":43,"src":50639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[171,50641,50642],{"start":92},[109,50643,50644],{},"输入语法：",[19,50646,50647],{},[1556,50648],{"alt":43,"src":50649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[187,50651,50653],{"id":50652},"_2116-字面量","21.1.6 字面量",[19,50655,50656],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,50658,50659],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,50661,50663],{"id":50662},"_22-变量","2.2 变量",[171,50665,50666],{},[109,50667,50668],{},"变量声明",[19,50670,50671],{},"let 变量名",[106,50673,50674,50677],{},[109,50675,50676],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[109,50678,50679],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[171,50681,50682],{"start":92},[109,50683,50684],{},"变量赋值",[38,50686,50690],{"className":50687,"code":50688,"language":50689,"meta":43,"style":43},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[26,50691,50692,50697],{"__ignoreMap":43},[47,50693,50694],{"class":49,"line":50},[47,50695,50696],{"class":221},"let age\n",[47,50698,50699],{"class":49,"line":92},[47,50700,50701],{"class":221},"age=18\n",[171,50703,50704,50707],{"start":1273},[109,50705,50706],{},"连这些（变量的初始化）：let age=18",[109,50708,50709],{},"更新变量",[19,50711,50712],{},[1556,50713],{"alt":43,"src":50714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[171,50716,50717],{"start":1294},[109,50718,50719],{},"声明多个变量",[19,50721,50722],{},[1556,50723],{"alt":43,"src":50724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[171,50726,50727],{"start":1308},[109,50728,50729],{},"变量命名规则与规范",[19,50731,50732],{},[1556,50733],{"alt":43,"src":50734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,50736,50737],{},"遵守小驼峰！",[171,50739,50740],{"start":1314},[109,50741,50742],{},"变量拓展-let和var的区别",[19,50744,50745],{},[1556,50746],{"alt":43,"src":50747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,50749,50751],{"id":50750},"_23-数组","2.3 数组",[38,50753,50755],{"className":50687,"code":50754,"language":50689,"meta":43,"style":43},"let arr = []\n",[26,50756,50757],{"__ignoreMap":43},[47,50758,50759],{"class":49,"line":50},[47,50760,50754],{"class":221},[19,50762,50763],{},[1556,50764],{"alt":43,"src":50765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,50767,50768],{},[1556,50769],{"alt":43,"src":50770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,50772,50774],{"id":50773},"_24-常量","2.4 常量",[19,50776,50777],{},[1556,50778],{"alt":43,"src":50779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,50781,50782],{},"const — 类似于 let ，但是变量的值无法被修改",[14,50784,50786],{"id":50785},"_25-数据类型","2.5 数据类型",[19,50788,50789],{},[1556,50790],{"alt":43,"src":50791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[171,50793,50794,50797],{},[109,50795,50796],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[109,50798,50799],{},"算数运算符：",[19,50801,50802],{},[1556,50803],{"alt":43,"src":50804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[171,50806,50807],{"start":1273},[109,50808,50809],{},"数字类型（Number）",[19,50811,50812],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,50814,50815],{},[1556,50816],{"alt":43,"src":50817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[171,50819,50820],{"start":1288},[109,50821,50822],{},"字符串类型（string）",[19,50824,50825],{},[1556,50826],{"alt":43,"src":50827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,50829,50830],{},"反引号也是可以使用的",[19,50832,50833],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,50835,50836],{},"例如：document.write(\"我今年\"+age+\"岁\")",[171,50838,50839],{"start":1294},[109,50840,50841],{},"模板字符串",[19,50843,50844],{},[1556,50845],{"alt":43,"src":50846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,50848,50849],{},"类似于python的字符串格式化",[171,50851,50852],{"start":1308},[109,50853,50854],{},"布尔类型",[19,50856,50857],{},"true 和 false",[171,50859,50860],{"start":1314},[109,50861,50862],{},"未定义类型（underfined）",[19,50864,50865],{},"表示没有赋值",[19,50867,50868],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,50870,50871],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[171,50873,50874],{"start":1405},[109,50875,50876],{},"null（空类型）",[19,50878,50879],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,50881,50882],{},"赋值了，但是内容为空",[38,50884,50886],{"className":50687,"code":50885,"language":50689,"meta":43,"style":43},"typeof null\n输出的是'object'，是一个对象数据类型\n",[26,50887,50888,50893],{"__ignoreMap":43},[47,50889,50890],{"class":49,"line":50},[47,50891,50892],{"class":221},"typeof null\n",[47,50894,50895],{"class":49,"line":92},[47,50896,50897],{"class":221},"输出的是'object'，是一个对象数据类型\n",[171,50899,50900],{"start":1411},[109,50901,50902],{},"控制台检测数据类型",[19,50904,50905],{},[1556,50906],{"alt":43,"src":50907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[171,50909,50910],{"start":1423},[109,50911,50912],{},"类型转换",[19,50914,50915],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,50917,50918],{},"转换方式：隐式转换和显示转换",[19,50920,50921],{},"①隐式转换",[106,50923,50924,50927,50930,50933],{},[109,50925,50926],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[109,50928,50929],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[109,50931,50932],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[109,50934,50935],{},"任何数据和字符串相加结果都是字符串",[19,50937,50938],{},"②显示转换",[19,50940,50941],{},[1556,50942],{"alt":43,"src":50943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,50945,50946],{},[1556,50947],{"alt":43,"src":50948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,50950,50951],{},"在输入的时候要用好隐式转换，简单写起来",[19,50953,50954],{},"let num = +prompt(’请输入数字：‘)",[19,50956,50957],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,50959,50960],{},"console.log(parseInt('12.333px'))",[19,50962,50963],{},"输出为：12",[19,50965,50966],{},"console.log(parseInt('a'a'a12.333px'))",[19,50968,50969],{},"输出：NaN",[14,50971,50973],{"id":50972},"_26-运算符","2.6 运算符",[187,50975,50977],{"id":50976},"_261-赋值运算符","2.6.1 赋值运算符",[19,50979,50980],{},[1556,50981],{"alt":43,"src":50982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[187,50984,50986],{"id":50985},"_262-一元运算符","2.6.2 一元运算符",[19,50988,50989],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,50991,50992],{},[1556,50993],{"alt":43,"src":50994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,50996,50997],{},[1556,50998],{"alt":43,"src":50999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,51001,51002],{},"两者的区别：",[19,51004,51005],{},[1556,51006],{"alt":43,"src":51007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,51009,51010],{},"前置先自加；后置后加，代码执行完之后再加",[187,51012,51014],{"id":51013},"_263-比较运算符","2.6.3 比较运算符",[19,51016,51017],{},[1556,51018],{"alt":43,"src":51019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,51021,51022],{},"比较运算符也有隐式转换",[19,51024,51025],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,51027,51028],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,51030,51031],{},"要使用三等，开发的时候",[19,51033,51034],{},"NaN不等于任何人，包括它自己",[19,51036,51037],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,51039,51040],{},"7\u002F10=0.7",[19,51042,51043],{},"最后：0.5+0.2=0.7",[19,51045,51046],{},"字符串比较，比较的是字符对应的ASCII码",[187,51048,51050],{"id":51049},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,51052,51053],{},[1556,51054],{"alt":43,"src":51055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,51057,51058],{},[1556,51059],{"alt":43,"src":51060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,51062,51063],{},[1556,51064],{"alt":43,"src":51065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,51067,51068],{},"上述题目选D",[19,51070,51071],{},"与真2假1；或真1假2",[187,51073,51075],{"id":51074},"_265-运算符优先级","2.6.5 运算符优先级",[19,51077,51078],{},[1556,51079],{"alt":43,"src":51080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,51082,51083],{},"先算逻辑与，后算逻辑或",[14,51085,51087],{"id":51086},"_27-语句","2.7 语句",[19,51089,51090],{},"表达式：是可以被求值的代码，会有结果给我们",[19,51092,51093],{},"语句：语句是可以被执行的代码，例如prompt()",[19,51095,51096],{},[1556,51097],{"alt":43,"src":51098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,51100,51101],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,51103,51104],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[187,51106,51108],{"id":51107},"_271-分支语句","2.7.1 分支语句",[22091,51110,51112],{"id":51111},"_2711-if分支语句","2.7.1.1 if分支语句",[19,51114,51115],{},"if语句单行简单的话，可以不写{}，写在一行就行",[171,51117,51118],{},[109,51119,51120],{},"单分支语句",[19,51122,51123],{},[1556,51124],{"alt":43,"src":51125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,51127,51128],{},"除了0，所有数字都为真",[38,51130,51132],{"className":50687,"code":51131,"language":50689,"meta":43,"style":43},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[26,51133,51134,51139,51144,51149,51153],{"__ignoreMap":43},[47,51135,51136],{"class":49,"line":50},[47,51137,51138],{"class":221},"if（0) {\n",[47,51140,51141],{"class":49,"line":92},[47,51142,51143],{"class":221},"    let a=1\n",[47,51145,51146],{"class":49,"line":1273},[47,51147,51148],{"class":221},"    alert(typeof a)\n",[47,51150,51151],{"class":49,"line":1288},[47,51152,1659],{"class":221},[47,51154,51155],{"class":49,"line":1294},[47,51156,51157],{"class":221},"不输出，括号为假\n",[171,51159,51160],{"start":92},[109,51161,51162],{},"双分支语句",[19,51164,51165],{},[1556,51166],{"alt":43,"src":51167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[171,51169,51170],{"start":1273},[109,51171,51172],{},"多分支语句",[19,51174,51175],{},[1556,51176],{"alt":43,"src":51177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22091,51179,51181],{"id":51180},"_2712-三元运算符","2.7.1.2 三元运算符",[19,51183,51184],{},[1556,51185],{"alt":43,"src":51186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22091,51188,51190],{"id":51189},"_2713-switch语句","2.7.1.3 switch语句",[19,51192,51193],{},[1556,51194],{"alt":43,"src":51195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,51197,51198],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[187,51200,51202],{"id":51201},"_272-循环语句","2.7.2 循环语句",[22091,51204,51206],{"id":51205},"_2721-断点演示","2.7.2.1 断点演示",[19,51208,51209],{},[1556,51210],{"alt":43,"src":51211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22091,51213,51215],{"id":51214},"_2722-while循环","2.7.2.2 while循环",[19,51217,51218],{},[1556,51219],{"alt":43,"src":51220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,51222,51223],{},[1556,51224],{"alt":43,"src":51225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22091,51227,51229],{"id":51228},"_2723-for循环","2.7.2.3 for循环",[19,51231,51232],{},[1556,51233],{"alt":43,"src":51234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,51236,51237],{},"for(;;) {",[19,51239,1165],{},[19,51241,51242],{},"表示无限循环",[19,51244,51245],{},[1556,51246],{"alt":43,"src":51247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22091,51249,51251],{"id":51250},"_2724-循环的退出","2.7.2.4 循环的退出",[19,51253,51254],{},[1556,51255],{"alt":43,"src":51256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,51258,51260],{"id":51259},"_28-数组","2.8 数组",[187,51262,51264],{"id":51263},"_281-基础认识","2.8.1 基础认识",[19,51266,51267],{},[1556,51268],{"alt":43,"src":51269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,51271,51272],{},[1556,51273],{"alt":43,"src":51274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,51276,51277],{},[1556,51278],{"alt":43,"src":51279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,51281,51282],{},[1556,51283],{"alt":43,"src":51284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[187,51286,51288],{"id":51287},"_282-操作数组","2.8.2 操作数组",[19,51290,51291],{},[1556,51292],{"alt":43,"src":51293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[171,51295,51296],{},[109,51297,51298],{},"添加元素",[19,51300,51301],{},[1556,51302],{"alt":43,"src":51303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,51305,51306],{},"console.log(arr.push('green'))",[19,51308,51309],{},"输出结果：为新数组的长度",[19,51311,51312],{},[1556,51313],{"alt":43,"src":51314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,51316,51317],{},"push用的非常多，一定要记住",[171,51319,51320],{},[109,51321,51322],{},"删除元素",[19,51324,51325],{},[1556,51326],{"alt":43,"src":51327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,51329,51330],{},[1556,51331],{"alt":43,"src":51332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,51334,51335],{},[1556,51336],{"alt":43,"src":51337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[187,51339,51341],{"id":51340},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[38,51343,51345],{"className":50687,"code":51344,"language":50689,"meta":43,"style":43},"\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",[26,51346,51347,51362,51378,51382,51391,51409,51433,51455,51469,51477,51484,51496,51507,51511,51515,51522,51534,51549,51562,51581,51598,51613,51625,51637,51649,51653,51657,51668,51678,51690,51702,51714,51725,51729,51733,51745,51749,51763,51767,51771,51782,51796,51808,51822,51826,51835,51844,51848,51857,51861,51870,51875,51880,51893,51921,51926,51931,51956,51961,51965,51970,51975,51990,51994,51999,52029,52041,52057,52073,52087,52092,52099,52103,52108,52121,52129,52137,52141],{"__ignoreMap":43},[47,51348,51349,51352,51356,51359],{"class":49,"line":50},[47,51350,51351],{"class":221},"\u003C!",[47,51353,51355],{"class":51354},"s9eBZ","DOCTYPE",[47,51357,51358],{"class":53}," html",[47,51360,51361],{"class":221},">\n",[47,51363,51364,51366,51368,51371,51373,51376],{"class":49,"line":92},[47,51365,1129],{"class":221},[47,51367,50689],{"class":51354},[47,51369,51370],{"class":53}," lang",[47,51372,267],{"class":221},[47,51374,51375],{"class":81},"\"en\"",[47,51377,51361],{"class":221},[47,51379,51380],{"class":49,"line":1273},[47,51381,2493],{"emptyLinePlaceholder":145},[47,51383,51384,51386,51389],{"class":49,"line":1288},[47,51385,1129],{"class":221},[47,51387,51388],{"class":51354},"head",[47,51390,51361],{"class":221},[47,51392,51393,51396,51399,51402,51404,51407],{"class":49,"line":1294},[47,51394,51395],{"class":221},"    \u003C",[47,51397,51398],{"class":51354},"meta",[47,51400,51401],{"class":53}," charset",[47,51403,267],{"class":221},[47,51405,51406],{"class":81},"\"UTF-8\"",[47,51408,51361],{"class":221},[47,51410,51411,51413,51415,51418,51420,51423,51426,51428,51431],{"class":49,"line":1308},[47,51412,51395],{"class":221},[47,51414,51398],{"class":51354},[47,51416,51417],{"class":53}," http-equiv",[47,51419,267],{"class":221},[47,51421,51422],{"class":81},"\"X-UA-Compatible\"",[47,51424,51425],{"class":53}," content",[47,51427,267],{"class":221},[47,51429,51430],{"class":81},"\"IE=edge\"",[47,51432,51361],{"class":221},[47,51434,51435,51437,51439,51441,51443,51446,51448,51450,51453],{"class":49,"line":1314},[47,51436,51395],{"class":221},[47,51438,51398],{"class":51354},[47,51440,15013],{"class":53},[47,51442,267],{"class":221},[47,51444,51445],{"class":81},"\"viewport\"",[47,51447,51425],{"class":53},[47,51449,267],{"class":221},[47,51451,51452],{"class":81},"\"width=device-width, initial-scale=1.0\"",[47,51454,51361],{"class":221},[47,51456,51457,51459,51462,51465,51467],{"class":49,"line":1405},[47,51458,51395],{"class":221},[47,51460,51461],{"class":51354},"title",[47,51463,51464],{"class":221},">Document\u003C\u002F",[47,51466,51461],{"class":51354},[47,51468,51361],{"class":221},[47,51470,51471,51473,51475],{"class":49,"line":1411},[47,51472,51395],{"class":221},[47,51474,134],{"class":51354},[47,51476,51361],{"class":221},[47,51478,51479,51482],{"class":49,"line":1423},[47,51480,51481],{"class":51354},"        *",[47,51483,15665],{"class":221},[47,51485,51486,51489,51492,51494],{"class":49,"line":1706},[47,51487,51488],{"class":85},"            margin",[47,51490,51491],{"class":221},": ",[47,51493,411],{"class":85},[47,51495,1384],{"class":221},[47,51497,51498,51501,51503,51505],{"class":49,"line":1711},[47,51499,51500],{"class":85},"            padding",[47,51502,51491],{"class":221},[47,51504,411],{"class":85},[47,51506,1384],{"class":221},[47,51508,51509],{"class":49,"line":1717},[47,51510,2622],{"class":221},[47,51512,51513],{"class":49,"line":1722},[47,51514,2493],{"emptyLinePlaceholder":145},[47,51516,51517,51520],{"class":49,"line":1736},[47,51518,51519],{"class":53},"        .box",[47,51521,15665],{"class":221},[47,51523,51524,51527,51529,51532],{"class":49,"line":1741},[47,51525,51526],{"class":85},"            display",[47,51528,51491],{"class":221},[47,51530,51531],{"class":85},"flex",[47,51533,1384],{"class":221},[47,51535,51536,51539,51541,51544,51547],{"class":49,"line":1747},[47,51537,51538],{"class":85},"            width",[47,51540,51491],{"class":221},[47,51542,51543],{"class":85},"700",[47,51545,51546],{"class":217},"px",[47,51548,1384],{"class":221},[47,51550,51551,51554,51556,51558,51560],{"class":49,"line":1768},[47,51552,51553],{"class":85},"            height",[47,51555,51491],{"class":221},[47,51557,4066],{"class":85},[47,51559,51546],{"class":217},[47,51561,1384],{"class":221},[47,51563,51564,51567,51569,51571,51573,51576,51579],{"class":49,"line":1773},[47,51565,51566],{"class":85},"            border-left",[47,51568,51491],{"class":221},[47,51570,436],{"class":85},[47,51572,51546],{"class":217},[47,51574,51575],{"class":85}," solid",[47,51577,51578],{"class":85}," pink",[47,51580,1384],{"class":221},[47,51582,51583,51586,51588,51590,51592,51594,51596],{"class":49,"line":1787},[47,51584,51585],{"class":85},"            border-bottom",[47,51587,51491],{"class":221},[47,51589,436],{"class":85},[47,51591,51546],{"class":217},[47,51593,51575],{"class":85},[47,51595,51578],{"class":85},[47,51597,1384],{"class":221},[47,51599,51600,51602,51604,51606,51608,51611],{"class":49,"line":1792},[47,51601,51488],{"class":85},[47,51603,51491],{"class":221},[47,51605,875],{"class":85},[47,51607,51546],{"class":217},[47,51609,51610],{"class":85}," auto",[47,51612,1384],{"class":221},[47,51614,51615,51618,51620,51623],{"class":49,"line":1821},[47,51616,51617],{"class":85},"            justify-content",[47,51619,51491],{"class":221},[47,51621,51622],{"class":85},"space-around",[47,51624,1384],{"class":221},[47,51626,51627,51630,51632,51635],{"class":49,"line":1826},[47,51628,51629],{"class":85},"            align-items",[47,51631,51491],{"class":221},[47,51633,51634],{"class":85},"flex-end",[47,51636,1384],{"class":221},[47,51638,51639,51642,51644,51647],{"class":49,"line":1843},[47,51640,51641],{"class":85},"            text-align",[47,51643,51491],{"class":221},[47,51645,51646],{"class":85},"center",[47,51648,1384],{"class":221},[47,51650,51651],{"class":49,"line":1848},[47,51652,2622],{"class":221},[47,51654,51655],{"class":49,"line":1853},[47,51656,2493],{"emptyLinePlaceholder":145},[47,51658,51659,51661,51663,51666],{"class":49,"line":1858},[47,51660,51519],{"class":53},[47,51662,1179],{"class":217},[47,51664,51665],{"class":51354},"div",[47,51667,15665],{"class":221},[47,51669,51670,51672,51674,51676],{"class":49,"line":1872},[47,51671,51526],{"class":85},[47,51673,51491],{"class":221},[47,51675,51531],{"class":85},[47,51677,1384],{"class":221},[47,51679,51680,51682,51684,51686,51688],{"class":49,"line":1877},[47,51681,51538],{"class":85},[47,51683,51491],{"class":221},[47,51685,875],{"class":85},[47,51687,51546],{"class":217},[47,51689,1384],{"class":221},[47,51691,51692,51695,51697,51700],{"class":49,"line":2670},[47,51693,51694],{"class":85},"            background-color",[47,51696,51491],{"class":221},[47,51698,51699],{"class":85},"pink",[47,51701,1384],{"class":221},[47,51703,51704,51707,51709,51712],{"class":49,"line":2684},[47,51705,51706],{"class":85},"            flex-direction",[47,51708,51491],{"class":221},[47,51710,51711],{"class":85},"column",[47,51713,1384],{"class":221},[47,51715,51716,51718,51720,51723],{"class":49,"line":2692},[47,51717,51617],{"class":85},[47,51719,51491],{"class":221},[47,51721,51722],{"class":85},"space-between",[47,51724,1384],{"class":221},[47,51726,51727],{"class":49,"line":2697},[47,51728,2622],{"class":221},[47,51730,51731],{"class":49,"line":2703},[47,51732,2493],{"emptyLinePlaceholder":145},[47,51734,51735,51737,51740,51743],{"class":49,"line":2709},[47,51736,51519],{"class":53},[47,51738,51739],{"class":51354}," div",[47,51741,51742],{"class":51354}," span",[47,51744,15665],{"class":221},[47,51746,51747],{"class":49,"line":2714},[47,51748,2493],{"emptyLinePlaceholder":145},[47,51750,51751,51754,51756,51759,51761],{"class":49,"line":8041},[47,51752,51753],{"class":85},"            margin-top",[47,51755,51491],{"class":221},[47,51757,51758],{"class":85},"-20",[47,51760,51546],{"class":217},[47,51762,1384],{"class":221},[47,51764,51765],{"class":49,"line":8065},[47,51766,2622],{"class":221},[47,51768,51769],{"class":49,"line":8070},[47,51770,2493],{"emptyLinePlaceholder":145},[47,51772,51773,51775,51777,51780],{"class":49,"line":8076},[47,51774,51519],{"class":53},[47,51776,51739],{"class":51354},[47,51778,51779],{"class":51354}," h4",[47,51781,15665],{"class":221},[47,51783,51784,51787,51789,51792,51794],{"class":49,"line":8103},[47,51785,51786],{"class":85},"            margin-bottom",[47,51788,51491],{"class":221},[47,51790,51791],{"class":85},"-35",[47,51793,51546],{"class":217},[47,51795,1384],{"class":221},[47,51797,51798,51800,51802,51804,51806],{"class":49,"line":8108},[47,51799,51538],{"class":85},[47,51801,51491],{"class":221},[47,51803,575],{"class":85},[47,51805,51546],{"class":217},[47,51807,1384],{"class":221},[47,51809,51810,51813,51815,51818,51820],{"class":49,"line":8114},[47,51811,51812],{"class":85},"            margin-left",[47,51814,51491],{"class":221},[47,51816,51817],{"class":85},"-10",[47,51819,51546],{"class":217},[47,51821,1384],{"class":221},[47,51823,51824],{"class":49,"line":8126},[47,51825,2622],{"class":221},[47,51827,51828,51831,51833],{"class":49,"line":8138},[47,51829,51830],{"class":221},"    \u003C\u002F",[47,51832,134],{"class":51354},[47,51834,51361],{"class":221},[47,51836,51837,51840,51842],{"class":49,"line":8150},[47,51838,51839],{"class":221},"\u003C\u002F",[47,51841,51388],{"class":51354},[47,51843,51361],{"class":221},[47,51845,51846],{"class":49,"line":9809},[47,51847,2493],{"emptyLinePlaceholder":145},[47,51849,51850,51852,51855],{"class":49,"line":9834},[47,51851,1129],{"class":221},[47,51853,51854],{"class":51354},"body",[47,51856,51361],{"class":221},[47,51858,51859],{"class":49,"line":9857},[47,51860,2493],{"emptyLinePlaceholder":145},[47,51862,51863,51865,51868],{"class":49,"line":9881},[47,51864,51395],{"class":221},[47,51866,51867],{"class":51354},"script",[47,51869,51361],{"class":221},[47,51871,51872],{"class":49,"line":9886},[47,51873,51874],{"class":279},"        \u002F\u002F 1. 四次弹框效果\n",[47,51876,51877],{"class":49,"line":9891},[47,51878,51879],{"class":279},"        \u002F\u002F 声明一个新的数组\n",[47,51881,51882,51885,51888,51890],{"class":49,"line":9896},[47,51883,51884],{"class":217},"        let",[47,51886,51887],{"class":221}," arr ",[47,51889,267],{"class":217},[47,51891,51892],{"class":221}," []\n",[47,51894,51895,51897,51899,51902,51904,51906,51908,51910,51912,51915,51917,51919],{"class":49,"line":9905},[47,51896,3496],{"class":217},[47,51898,1752],{"class":221},[47,51900,51901],{"class":217},"let",[47,51903,9531],{"class":221},[47,51905,267],{"class":217},[47,51907,25172],{"class":85},[47,51909,9538],{"class":221},[47,51911,1682],{"class":217},[47,51913,51914],{"class":85}," 4",[47,51916,3307],{"class":221},[47,51918,2385],{"class":217},[47,51920,12535],{"class":221},[47,51922,51923],{"class":49,"line":9910},[47,51924,51925],{"class":279},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[47,51927,51928],{"class":49,"line":9916},[47,51929,51930],{"class":279},"            \u002F\u002F arr.push(num)\n",[47,51932,51933,51936,51939,51941,51944,51946,51949,51951,51954],{"class":49,"line":9937},[47,51934,51935],{"class":221},"            arr.",[47,51937,51938],{"class":53},"push",[47,51940,222],{"class":221},[47,51942,51943],{"class":53},"prompt",[47,51945,222],{"class":221},[47,51947,51948],{"class":81},"`请输入第${",[47,51950,660],{"class":221},[47,51952,51953],{"class":81},"}季度的数据:`",[47,51955,30551],{"class":221},[47,51957,51958],{"class":49,"line":9943},[47,51959,51960],{"class":279},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[47,51962,51963],{"class":49,"line":9957},[47,51964,2622],{"class":221},[47,51966,51967],{"class":49,"line":9963},[47,51968,51969],{"class":279},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[47,51971,51972],{"class":49,"line":9990},[47,51973,51974],{"class":279},"        \u002F\u002F 盒子开头\n",[47,51976,51977,51980,51983,51985,51988],{"class":49,"line":9999},[47,51978,51979],{"class":221},"        document.",[47,51981,51982],{"class":53},"write",[47,51984,222],{"class":221},[47,51986,51987],{"class":81},"` \u003Cdiv class=\"box\">`",[47,51989,228],{"class":221},[47,51991,51992],{"class":49,"line":10005},[47,51993,2493],{"emptyLinePlaceholder":145},[47,51995,51996],{"class":49,"line":10013},[47,51997,51998],{"class":279},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[47,52000,52001,52003,52005,52007,52009,52011,52013,52015,52017,52020,52023,52025,52027],{"class":49,"line":10018},[47,52002,3496],{"class":217},[47,52004,1752],{"class":221},[47,52006,51901],{"class":217},[47,52008,9531],{"class":221},[47,52010,267],{"class":217},[47,52012,4186],{"class":85},[47,52014,9538],{"class":221},[47,52016,1129],{"class":217},[47,52018,52019],{"class":221}," arr.",[47,52021,52022],{"class":85},"length",[47,52024,3307],{"class":221},[47,52026,2385],{"class":217},[47,52028,12535],{"class":221},[47,52030,52031,52034,52036,52038],{"class":49,"line":16697},[47,52032,52033],{"class":221},"            document.",[47,52035,51982],{"class":53},[47,52037,222],{"class":221},[47,52039,52040],{"class":81},"`\n",[47,52042,52043,52046,52048,52050,52052,52054],{"class":49,"line":16703},[47,52044,52045],{"class":81},"              \u003Cdiv style=\"height: ${",[47,52047,3973],{"class":221},[47,52049,1109],{"class":81},[47,52051,660],{"class":221},[47,52053,1159],{"class":81},[47,52055,52056],{"class":81},"}px;\">\n",[47,52058,52059,52062,52064,52066,52068,52070],{"class":49,"line":16726},[47,52060,52061],{"class":81},"                \u003Cspan>${",[47,52063,3973],{"class":221},[47,52065,1109],{"class":81},[47,52067,660],{"class":221},[47,52069,1159],{"class":81},[47,52071,52072],{"class":81},"}\u003C\u002Fspan>\n",[47,52074,52075,52078,52080,52082,52084],{"class":49,"line":16732},[47,52076,52077],{"class":81},"                \u003Ch4>第${",[47,52079,660],{"class":221},[47,52081,45620],{"class":217},[47,52083,25172],{"class":85},[47,52085,52086],{"class":81},"}季度\u003C\u002Fh4>\n",[47,52088,52089],{"class":49,"line":16755},[47,52090,52091],{"class":81},"              \u003C\u002Fdiv>          \n",[47,52093,52094,52097],{"class":49,"line":16769},[47,52095,52096],{"class":81},"            `",[47,52098,228],{"class":221},[47,52100,52101],{"class":49,"line":16789},[47,52102,2622],{"class":221},[47,52104,52105],{"class":49,"line":16795},[47,52106,52107],{"class":279},"        \u002F\u002F 盒子结尾\n",[47,52109,52110,52112,52114,52116,52119],{"class":49,"line":16806},[47,52111,51979],{"class":221},[47,52113,51982],{"class":53},[47,52115,222],{"class":221},[47,52117,52118],{"class":81},"` \u003C\u002Fdiv>`",[47,52120,228],{"class":221},[47,52122,52123,52125,52127],{"class":49,"line":16829},[47,52124,51830],{"class":221},[47,52126,51867],{"class":51354},[47,52128,51361],{"class":221},[47,52130,52131,52133,52135],{"class":49,"line":16851},[47,52132,51839],{"class":221},[47,52134,51854],{"class":51354},[47,52136,51361],{"class":221},[47,52138,52139],{"class":49,"line":16856},[47,52140,2493],{"emptyLinePlaceholder":145},[47,52142,52143,52145,52147],{"class":49,"line":16862},[47,52144,51839],{"class":221},[47,52146,50689],{"class":51354},[47,52148,51361],{"class":221},[187,52150,52152],{"id":52151},"_284-冒泡排序","2.8.4 冒泡排序",[38,52154,52156],{"className":50687,"code":52155,"language":50689,"meta":43,"style":43},"\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",[26,52157,52158,52168,52182,52186,52194,52209,52229,52241,52249,52253,52261,52269,52301,52334,52371,52376,52395,52400,52413,52428,52444,52448,52453,52457,52467,52476,52484,52488],{"__ignoreMap":43},[47,52159,52160,52162,52164,52166],{"class":49,"line":50},[47,52161,51351],{"class":221},[47,52163,51355],{"class":51354},[47,52165,51358],{"class":53},[47,52167,51361],{"class":221},[47,52169,52170,52172,52174,52176,52178,52180],{"class":49,"line":92},[47,52171,1129],{"class":221},[47,52173,50689],{"class":51354},[47,52175,51370],{"class":53},[47,52177,267],{"class":221},[47,52179,51375],{"class":81},[47,52181,51361],{"class":221},[47,52183,52184],{"class":49,"line":1273},[47,52185,2493],{"emptyLinePlaceholder":145},[47,52187,52188,52190,52192],{"class":49,"line":1288},[47,52189,1129],{"class":221},[47,52191,51388],{"class":51354},[47,52193,51361],{"class":221},[47,52195,52196,52199,52201,52203,52205,52207],{"class":49,"line":1294},[47,52197,52198],{"class":221},"  \u003C",[47,52200,51398],{"class":51354},[47,52202,51401],{"class":53},[47,52204,267],{"class":221},[47,52206,51406],{"class":81},[47,52208,51361],{"class":221},[47,52210,52211,52213,52215,52217,52219,52221,52223,52225,52227],{"class":49,"line":1308},[47,52212,52198],{"class":221},[47,52214,51398],{"class":51354},[47,52216,15013],{"class":53},[47,52218,267],{"class":221},[47,52220,51445],{"class":81},[47,52222,51425],{"class":53},[47,52224,267],{"class":221},[47,52226,51452],{"class":81},[47,52228,51361],{"class":221},[47,52230,52231,52233,52235,52237,52239],{"class":49,"line":1314},[47,52232,52198],{"class":221},[47,52234,51461],{"class":51354},[47,52236,51464],{"class":221},[47,52238,51461],{"class":51354},[47,52240,51361],{"class":221},[47,52242,52243,52245,52247],{"class":49,"line":1405},[47,52244,51839],{"class":221},[47,52246,51388],{"class":51354},[47,52248,51361],{"class":221},[47,52250,52251],{"class":49,"line":1411},[47,52252,2493],{"emptyLinePlaceholder":145},[47,52254,52255,52257,52259],{"class":49,"line":1423},[47,52256,1129],{"class":221},[47,52258,51854],{"class":51354},[47,52260,51361],{"class":221},[47,52262,52263,52265,52267],{"class":49,"line":1706},[47,52264,52198],{"class":221},[47,52266,51867],{"class":51354},[47,52268,51361],{"class":221},[47,52270,52271,52274,52276,52278,52281,52283,52285,52287,52289,52291,52293,52295,52297,52299],{"class":49,"line":1711},[47,52272,52273],{"class":217},"    let",[47,52275,51887],{"class":221},[47,52277,267],{"class":217},[47,52279,52280],{"class":221}," [",[47,52282,538],{"class":85},[47,52284,12528],{"class":221},[47,52286,512],{"class":85},[47,52288,12528],{"class":221},[47,52290,292],{"class":85},[47,52292,12528],{"class":221},[47,52294,298],{"class":85},[47,52296,12528],{"class":221},[47,52298,436],{"class":85},[47,52300,33300],{"class":221},[47,52302,52303,52305,52307,52309,52311,52313,52315,52317,52319,52321,52323,52326,52328,52330,52332],{"class":49,"line":1717},[47,52304,3294],{"class":217},[47,52306,1752],{"class":221},[47,52308,51901],{"class":217},[47,52310,9531],{"class":221},[47,52312,267],{"class":217},[47,52314,4186],{"class":85},[47,52316,9538],{"class":221},[47,52318,1129],{"class":217},[47,52320,52019],{"class":221},[47,52322,52022],{"class":85},[47,52324,52325],{"class":217}," -",[47,52327,25172],{"class":85},[47,52329,3307],{"class":221},[47,52331,2385],{"class":217},[47,52333,12535],{"class":221},[47,52335,52336,52339,52341,52343,52345,52347,52349,52351,52353,52355,52357,52359,52361,52363,52365,52367,52369],{"class":49,"line":1722},[47,52337,52338],{"class":217},"      for",[47,52340,1752],{"class":221},[47,52342,51901],{"class":217},[47,52344,9593],{"class":221},[47,52346,267],{"class":217},[47,52348,4186],{"class":85},[47,52350,9600],{"class":221},[47,52352,1129],{"class":217},[47,52354,52019],{"class":221},[47,52356,52022],{"class":85},[47,52358,52325],{"class":217},[47,52360,9531],{"class":221},[47,52362,751],{"class":217},[47,52364,25172],{"class":85},[47,52366,9607],{"class":221},[47,52368,2385],{"class":217},[47,52370,12535],{"class":221},[47,52372,52373],{"class":49,"line":1736},[47,52374,52375],{"class":279},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[47,52377,52378,52380,52383,52385,52388,52390,52392],{"class":49,"line":1741},[47,52379,2590],{"class":217},[47,52381,52382],{"class":221}," (arr[j] ",[47,52384,1179],{"class":217},[47,52386,52387],{"class":221}," arr[j ",[47,52389,700],{"class":217},[47,52391,25172],{"class":85},[47,52393,52394],{"class":221},"]) {\n",[47,52396,52397],{"class":49,"line":1747},[47,52398,52399],{"class":279},"          \u002F\u002F 交换两个变量\n",[47,52401,52402,52405,52408,52410],{"class":49,"line":1768},[47,52403,52404],{"class":217},"          let",[47,52406,52407],{"class":221}," tmp ",[47,52409,267],{"class":217},[47,52411,52412],{"class":221}," arr[j]\n",[47,52414,52415,52418,52420,52422,52424,52426],{"class":49,"line":1773},[47,52416,52417],{"class":221},"          arr[j] ",[47,52419,267],{"class":217},[47,52421,52387],{"class":221},[47,52423,700],{"class":217},[47,52425,25172],{"class":85},[47,52427,33300],{"class":221},[47,52429,52430,52433,52435,52437,52439,52441],{"class":49,"line":1787},[47,52431,52432],{"class":221},"          arr[j ",[47,52434,700],{"class":217},[47,52436,25172],{"class":85},[47,52438,4536],{"class":221},[47,52440,267],{"class":217},[47,52442,52443],{"class":221}," tmp\n",[47,52445,52446],{"class":49,"line":1792},[47,52447,2622],{"class":221},[47,52449,52450],{"class":49,"line":1821},[47,52451,52452],{"class":221},"      }\n",[47,52454,52455],{"class":49,"line":1826},[47,52456,2280],{"class":221},[47,52458,52459,52462,52464],{"class":49,"line":1843},[47,52460,52461],{"class":221},"    document.",[47,52463,51982],{"class":53},[47,52465,52466],{"class":221},"(arr)\n",[47,52468,52469,52472,52474],{"class":49,"line":1848},[47,52470,52471],{"class":221},"  \u003C\u002F",[47,52473,51867],{"class":51354},[47,52475,51361],{"class":221},[47,52477,52478,52480,52482],{"class":49,"line":1853},[47,52479,51839],{"class":221},[47,52481,51854],{"class":51354},[47,52483,51361],{"class":221},[47,52485,52486],{"class":49,"line":1858},[47,52487,2493],{"emptyLinePlaceholder":145},[47,52489,52490,52492,52494],{"class":49,"line":1872},[47,52491,51839],{"class":221},[47,52493,50689],{"class":51354},[47,52495,51361],{"class":221},[19,52497,52498],{},[1556,52499],{"alt":43,"src":52500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,52502,52503],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,52505,52506],{},"let arr = [4, 2, 5, 1, 3]",[19,52508,52509],{},"\u002F\u002F 1.升序排列写法",[19,52511,52512],{},"arr.sort(function (a, b) {",[19,52514,52515],{},"return a - b",[19,52517,52518],{},"})",[19,52520,52521],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,52523,52524],{},"\u002F\u002F 降序排列写法",[19,52526,52512],{},[19,52528,52529],{},"return b - a",[19,52531,52518],{},[19,52533,52534],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,52536,52538],{"id":52537},"_29-函数","2.9 函数",[19,52540,52541],{},[1556,52542],{"alt":43,"src":52543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,52545,52546],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,52548,52549],{},"函数的声明用function",[19,52551,52552],{},"函数里边可以嵌套函数",[187,52554,52556],{"id":52555},"_291-函数传参","2.9.1 函数传参",[19,52558,52559],{},[1556,52560],{"alt":43,"src":52561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,52563,52564],{},[1556,52565],{"alt":43,"src":52566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[106,52568,52569,52572,52575,52578,52581,52584],{},[109,52570,52571],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[109,52573,52574],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[109,52576,52577],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[109,52579,52580],{},"开发中尽量保持形参和实参个数一致",[109,52582,52583],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[109,52585,52586],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,52588,52589],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[187,52591,52593],{"id":52592},"_292-函数的返回值","2.9.2 函数的返回值",[19,52595,52596],{},[1556,52597],{"alt":43,"src":52598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,52600,52601],{},[1556,52602],{"alt":43,"src":52603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[106,52605,52606,52609,52612,52615,52618],{},[109,52607,52608],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[109,52610,52611],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[109,52613,52614],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[109,52616,52617],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[109,52619,52620],{},"断点调试:进入函数内部看执行过程F11",[187,52622,52624],{"id":52623},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[38,52626,52628],{"className":50687,"code":52627,"language":50689,"meta":43,"style":43},"    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",[26,52629,52630,52635,52640,52644,52649],{"__ignoreMap":43},[47,52631,52632],{"class":49,"line":50},[47,52633,52634],{"class":221},"    function fn(a, b) {\n",[47,52636,52637],{"class":49,"line":92},[47,52638,52639],{"class":221},"      console.log(a + b);\n",[47,52641,52642],{"class":49,"line":1273},[47,52643,2280],{"class":221},[47,52645,52646],{"class":49,"line":1288},[47,52647,52648],{"class":221},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[47,52650,52651],{"class":49,"line":1294},[47,52652,52653],{"class":221},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[187,52655,52657],{"id":52656},"_294-作用域","2.9.4 作用域",[106,52659,52660,52666,52671,52674,52677],{},[109,52661,52662,52663],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[369,52664,52665],{},"作用域",[109,52667,52668],{},[369,52669,52670],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[109,52672,52673],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[109,52675,52676],{},"函数内部可以直接所使用全局变量",[109,52678,52679],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,52681,14726],{},[38,52683,52685],{"className":50687,"code":52684,"language":50689,"meta":43,"style":43},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[26,52686,52687,52692,52697,52701,52706,52711,52716],{"__ignoreMap":43},[47,52688,52689],{"class":49,"line":50},[47,52690,52691],{"class":221},"    function fun() {\n",[47,52693,52694],{"class":49,"line":92},[47,52695,52696],{"class":221},"      num = 10\n",[47,52698,52699],{"class":49,"line":1273},[47,52700,2280],{"class":221},[47,52702,52703],{"class":49,"line":1288},[47,52704,52705],{"class":221},"    fun()\n",[47,52707,52708],{"class":49,"line":1294},[47,52709,52710],{"class":221},"    console.log(num)\n",[47,52712,52713],{"class":49,"line":1308},[47,52714,52715],{"class":221},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[47,52717,52718],{"class":49,"line":1314},[47,52719,52720],{"class":221},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[106,52722,52723,52726],{},[109,52724,52725],{},"函数内部的形参可以看做是局部变量",[109,52727,52728],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,52730,52731,52732],{},"变量访问原则： ",[369,52733,52734],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[187,52736,52738],{"id":52737},"_295-匿名函数","2.9.5 匿名函数",[19,52740,52741],{},"函数可以分为具名函数和匿名函数",[19,52743,52744],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[171,52746,52747],{},[109,52748,52749],{},"函数表达式",[19,52751,52752],{},[1556,52753],{"alt":43,"src":52754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,52756,52757],{},"里边也可以写参数",[19,52759,52760],{},"具名函数调用位置可以随意调整；",[19,52762,52763],{},"匿名函数函数表达式形式只能在声明后才可以使用",[171,52765,52766],{"start":92},[109,52767,52768],{},"立即执行函数",[19,52770,52771],{},[1556,52772],{"alt":43,"src":52773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,52775,52776],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,52778,52779],{},"写法：两个小括号，然后在第一个小括号中写function",[19,52781,52782],{},"(function () {})();",[19,52784,52785],{},"不要落下最后的;",[19,52787,52788],{},"立即执行函数必须要加;",[19,52790,52791],{},"分号写前写后都没问题",[19,52793,52794],{},"写前：",[19,52796,52797],{},"(function() {})()",[19,52799,52800],{},";(function () {})();",[19,52802,52803],{},"写后:",[19,52805,52806],{},"(function() {})();",[19,52808,52782],{},[19,52810,52811],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,52813,52814],{},"还有一种写法：",[19,52816,52817],{},"(function(){}());",[19,52819,52820],{},"或者:",[19,52822,52823],{},"!function(){}();",[19,52825,52826],{},"立即执行函数有时候也是可以加名字的：",[19,52828,52829],{},"(function flexible(window,document) {}(window,document));",[19,52831,52832],{},"省一些调用方法",[187,52834,52836],{"id":52835},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,52838,52839],{},[1556,52840],{"alt":43,"src":52841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,52843,52844],{},"这样就不用非得给x,y初始化了",[19,52846,52847],{},[1556,52848],{"alt":43,"src":52849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,52851,52852],{},"代码执行时先看左边",[19,52854,52855],{},"例如：console.log(false && 3+5)",[19,52857,52858],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,52860,52861],{},"&&都是真时，就返回最后一个真值",[19,52863,52864],{},"console.log(11 && 22)",[19,52866,52867],{},"输出22",[19,52869,52870],{},"逻辑与：遇真则真",[19,52872,14726],{},[19,52874,52875],{},"let age=1",[19,52877,52878],{},"console.log(11 || age++)",[19,52880,52881],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,52883,52884],{},"console.log(11 || 22)",[19,52886,52887],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,52889,52890],{},"||如果都是假的话，就取最后一个假的值了",[187,52892,52894],{"id":52893},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,52896,52897],{},"显示转换：",[19,52899,52900,52903,52904],{},[369,52901,52902],{},"记忆","： ",[369,52905,52906],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,52908,52909],{},"空字符串为假，其他字符串全为真",[19,52911,52912],{},[1556,52913],{"alt":43,"src":52914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,52916,52917],{},"隐式转换：",[19,52919,52920],{},[1556,52921],{"alt":43,"src":52922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,52924,52925],{},"隐式转换:",[19,52927,52928],{},"null+3=3",[19,52930,52931],{},"undefined+3=NaN",[19,52933,52934],{},"null==undefined 输出true,他两个都当0看",[19,52936,52937],{},"null===undefined 输出false",[19,52939,52940],{},"undefined做任何操作都是NaN",[19,52942,52943],{},"NaN不等于NaN，NaN表示计算错误",[14,52945,52947],{"id":52946},"_210-对象","2.10 对象",[187,52949,52951],{"id":52950},"_2101-对象的介绍","2.10.1 对象的介绍",[19,52953,52954],{},"对象也是一种数据类型，里边的数据是无序的",[19,52956,52957],{},"对象由属性和方法组成",[19,52959,52960],{},[1556,52961],{"alt":43,"src":52962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,52964,52965],{},[1556,52966],{"alt":43,"src":52967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,52969,52970],{},[1556,52971],{"alt":43,"src":52972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[187,52974,52976],{"id":52975},"_2102-对象属性","2.10.2 对象属性",[19,52978,52979],{},[1556,52980],{"alt":43,"src":52981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[171,52983,52984],{},[109,52985,52986],{},"查询对象",[19,52988,52989],{},"对象名.属性 goods.uname",[19,52991,52992],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,52994,52995],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,52997,52998],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,53000,53001],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[171,53003,53004],{"start":92},[109,53005,53006],{},"重新赋值",[19,53008,53009],{},"对象名.属性=新值",[171,53011,53012],{"start":1273},[109,53013,53014],{},"增加新数据",[19,53016,53009],{},[171,53018,53019],{"start":1288},[109,53020,53021],{},"删除对象中的属性",[19,53023,53024],{},"delete 对象名.属性",[187,53026,53028],{"id":53027},"_2103-对象方法","2.10.3 对象方法",[19,53030,53031],{},[1556,53032],{"alt":43,"src":53033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,53035,53036],{},"后边跟的是匿名函数",[19,53038,53039],{},"对象外面的叫函数；对象内部的叫方法",[19,53041,53042],{},[1556,53043],{"alt":43,"src":53044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[187,53046,53048],{"id":53047},"_2104-遍历对象","2.10.4 遍历对象",[19,53050,53051],{},"理解为加括号的python字典遍历",[19,53053,53054],{},[1556,53055],{"alt":43,"src":53056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,53058,53059],{},"k是字符串类型",[19,53061,53062],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[38,53064,53066],{"className":50687,"code":53065,"language":50689,"meta":43,"style":43},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[26,53067,53068,53073,53078,53083,53088],{"__ignoreMap":43},[47,53069,53070],{"class":49,"line":50},[47,53071,53072],{"class":221},"   let arr = [1, 2, 3]\n",[47,53074,53075],{"class":49,"line":92},[47,53076,53077],{"class":221},"    for (let k in arr) {\n",[47,53079,53080],{"class":49,"line":1273},[47,53081,53082],{"class":221},"      console.log(k)\n",[47,53084,53085],{"class":49,"line":1288},[47,53086,53087],{"class":221},"      console.log(arr[k])\n",[47,53089,53090],{"class":49,"line":1294},[47,53091,2280],{"class":221},[19,53093,53094],{},[1556,53095],{"alt":43,"src":53096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,53098,53099],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,53101,53102],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,53104,53105],{},"for in 得到的k是属性名",[51867,53107,53108],{},"\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,53110,53111],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[187,53113,53115],{"id":53114},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,53117,53118],{},"数组中放对象信息",[38,53120,53124],{"className":53121,"code":53122,"language":53123,"meta":43,"style":43},"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",[26,53125,53126,53134,53139,53144,53149,53154,53159,53164,53169,53174,53179,53184,53189,53193,53197],{"__ignoreMap":43},[47,53127,53128,53130,53132],{"class":49,"line":50},[47,53129,1129],{"class":221},[47,53131,51867],{"class":51354},[47,53133,51361],{"class":221},[47,53135,53136],{"class":49,"line":92},[47,53137,53138],{"class":221},"    let students = [\n",[47,53140,53141],{"class":49,"line":1273},[47,53142,53143],{"class":221},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[47,53145,53146],{"class":49,"line":1288},[47,53147,53148],{"class":221},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[47,53150,53151],{"class":49,"line":1294},[47,53152,53153],{"class":221},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[47,53155,53156],{"class":49,"line":1308},[47,53157,53158],{"class":221},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[47,53160,53161],{"class":49,"line":1314},[47,53162,53163],{"class":221},"    ]\n",[47,53165,53166],{"class":49,"line":1405},[47,53167,53168],{"class":221},"    for (let i = 0; i \u003C students.length; i++) {\n",[47,53170,53171],{"class":49,"line":1411},[47,53172,53173],{"class":221},"      for (let k in students[i]) {\n",[47,53175,53176],{"class":49,"line":1423},[47,53177,53178],{"class":221},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[47,53180,53181],{"class":49,"line":1706},[47,53182,53183],{"class":221},"        \u002F\u002F输出每个人的名字：\n",[47,53185,53186],{"class":49,"line":1711},[47,53187,53188],{"class":221},"        \u002F\u002Fconsole.log(students[i].name)\n",[47,53190,53191],{"class":49,"line":1717},[47,53192,52452],{"class":221},[47,53194,53195],{"class":49,"line":1722},[47,53196,2280],{"class":221},[47,53198,53199,53201,53203],{"class":49,"line":1736},[47,53200,52471],{"class":221},[47,53202,51867],{"class":51354},[47,53204,51361],{"class":221},[187,53206,53208],{"id":53207},"_2106-内置对象","2.10.6 内置对象",[19,53210,53211],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[171,53213,53214],{},[109,53215,53216],{},"数学对象Math",[19,53218,53219],{},[1556,53220],{"alt":43,"src":53221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,53223,53224],{},[457,53225,53228],{"href":53226,"rel":53227},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[23956],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,53230,53231],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,53233,53234],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,53236,53237],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,53239,53240],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,53242,53243],{},"null属于对象数据类型",[171,53245,53246],{"start":92},[109,53247,53248],{},"生成任意范围随机数",[19,53250,53251],{},[1556,53252],{"alt":43,"src":53253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,53255,53256],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,53258,53259],{},"乘以几就取不到几",[19,53261,53262],{},"取数组中的随机元素：",[19,53264,53265],{},"let arr = ['red', 'green', 'blue']",[19,53267,53268],{},"let random = Math.floor(Math.random() * arr.length)",[19,53270,53271],{},"console.log(arr[random])",[19,53273,53274],{},"这个函数得到的是全闭区间",[19,53276,53277],{},"function getRandom(N, M) {",[19,53279,53280],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,53282,1165],{},[19,53284,53285],{},"console.log(getRandom(4, 8))",[187,53287,53289],{"id":53288},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,53291,53292],{},[1556,53293],{"alt":43,"src":53294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,53296,53297],{},[1556,53298],{"alt":43,"src":53299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,53301,53302],{},[1556,53303],{"alt":43,"src":53304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,53306,53307],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,53309,53310],{},[1556,53311],{"alt":43,"src":53312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,53314,53315],{},[1556,53316],{"alt":43,"src":53317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,53319,53320],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,53322,53323],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,53325,53326],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[134,53328,53329],{},"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":43,"searchDepth":92,"depth":92,"links":53331},[53332,53340,53341,53342,53343,53344,53351,53355,53361,53370],{"id":50522,"depth":92,"text":50523,"children":53333},[53334,53335,53336,53337,53338,53339],{"id":50526,"depth":1273,"text":50527},{"id":50543,"depth":1273,"text":50544},{"id":50583,"depth":1273,"text":50584},{"id":50595,"depth":1273,"text":50596},{"id":50604,"depth":1273,"text":50605},{"id":50652,"depth":1273,"text":50653},{"id":50662,"depth":92,"text":50663},{"id":50750,"depth":92,"text":50751},{"id":50773,"depth":92,"text":50774},{"id":50785,"depth":92,"text":50786},{"id":50972,"depth":92,"text":50973,"children":53345},[53346,53347,53348,53349,53350],{"id":50976,"depth":1273,"text":50977},{"id":50985,"depth":1273,"text":50986},{"id":51013,"depth":1273,"text":51014},{"id":51049,"depth":1273,"text":51050},{"id":51074,"depth":1273,"text":51075},{"id":51086,"depth":92,"text":51087,"children":53352},[53353,53354],{"id":51107,"depth":1273,"text":51108},{"id":51201,"depth":1273,"text":51202},{"id":51259,"depth":92,"text":51260,"children":53356},[53357,53358,53359,53360],{"id":51263,"depth":1273,"text":51264},{"id":51287,"depth":1273,"text":51288},{"id":51340,"depth":1273,"text":51341},{"id":52151,"depth":1273,"text":52152},{"id":52537,"depth":92,"text":52538,"children":53362},[53363,53364,53365,53366,53367,53368,53369],{"id":52555,"depth":1273,"text":52556},{"id":52592,"depth":1273,"text":52593},{"id":52623,"depth":1273,"text":52624},{"id":52656,"depth":1273,"text":52657},{"id":52737,"depth":1273,"text":52738},{"id":52835,"depth":1273,"text":52836},{"id":52893,"depth":1273,"text":52894},{"id":52946,"depth":92,"text":52947,"children":53371},[53372,53373,53374,53375,53376,53377,53378],{"id":52950,"depth":1273,"text":52951},{"id":52975,"depth":1273,"text":52976},{"id":53027,"depth":1273,"text":53028},{"id":53047,"depth":1273,"text":53048},{"id":53114,"depth":1273,"text":53115},{"id":53207,"depth":1273,"text":53208},{"id":53288,"depth":1273,"text":53289},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50514,"description":142},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53385,"title":53386,"body":53387,"description":142,"extension":143,"meta":76727,"navigation":145,"path":76728,"seo":76729,"stem":76730,"__hash__":76731},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53388,"toc":76667},[53389,53392,53395,53398,53403,53406,53409,53412,53416,53420,53426,53431,53439,53446,53449,53453,53458,53463,53468,53471,53474,53485,53488,53492,53495,53498,53503,53508,53513,53516,53519,53611,53614,53619,53622,53627,53630,53633,53638,53641,53646,53650,53653,53667,53671,53676,53679,53682,53686,53691,53694,53698,53702,53707,53711,53716,53719,53722,53725,53728,53731,53734,53739,53744,53772,53775,53778,53781,53786,53789,53792,53795,53798,53802,53831,53835,53840,53845,53848,53851,53854,53859,53974,53979,53984,54145,54150,54153,54157,54162,54167,54170,54173,54176,54179,54182,54185,54188,54191,54194,54197,54200,54203,54206,54209,54211,54214,54217,54220,54225,54229,54626,54629,54635,54639,54644,55926,55931,55934,55937,55940,55945,57141,57145,57151,57156,57159,57164,57169,57173,57177,57182,57185,57190,57193,57196,57200,58108,58111,58115,58336,58339,58342,58345,58571,58574,58798,58801,58805,58810,58813,58816,59044,59047,59080,59083,59087,59092,59096,59099,59102,59105,59108,59111,59114,59117,59122,60402,60406,60409,61502,61506,61509,61512,61515,61518,61522,61525,61528,61530,61538,63019,63023,63026,63029,63032,63241,63244,63248,63252,63257,63262,63265,63268,63273,63277,63282,63285,63394,63398,63403,63408,63411,63414,63418,63423,63428,63433,63436,63439,63450,63453,63458,63463,63466,63469,63542,63546,63551,63554,63556,63567,63571,63576,64902,64905,64908,64911,64913,64916,64919,64922,64925,64928,64931,64934,64937,64940,64943,64946,64949,64951,64953,64956,64960,66054,66057,66060,66076,66090,66093,66098,66104,66109,66113,66117,66122,66126,66131,66573,66578,66581,66585,66590,66593,66596,66600,66605,66609,66614,66619,66623,66628,66633,66636,66641,66646,66650,66655,66660,66764,66767,66771,66776,67142,67145,67148,67151,67154,67157,67160,67163,67166,68462,68466,68471,68476,68479,68482,68485,68488,68490,68495,68500,68503,68507,68512,68517,68522,68525,68528,68531,68534,68537,68542,68545,68549,68554,68559,68563,68568,68571,68576,68579,68582,68585,68588,68591,68596,68599,68602,68605,68608,68612,68617,68620,68624,68629,68632,68635,68639,68668,68671,68675,68679,68684,68688,68693,68696,68699,68702,68705,68708,68711,68714,68717,68720,68723,68726,68729,68732,68735,68739,68744,68749,68752,68756,68760,68765,68768,68772,68775,68778,68783,68788,68793,68798,68803,68806,68809,68814,68819,68823,68828,68831,68836,68839,68842,68845,68848,68853,68856,68865,68869,68874,68877,68880,68884,68887,68892,68896,68899,68905,68911,68915,68941,68944,70505,70508,71004,71007,71012,71017,71022,71026,71031,71036,71041,71045,71050,71053,71056,71059,71062,71066,71069,71074,71077,71082,71086,71091,71094,71099,71104,71109,71112,71115,71120,71125,71128,71131,71135,71138,71143,71146,71151,71154,71159,71164,71169,71172,71177,71242,71245,71256,71260,71265,71437,71441,71446,71449,71452,71455,71459,71470,71474,71477,71482,71487,71490,71493,71496,71499,71502,71504,71507,71510,71513,71518,71521,71526,71529,71533,71536,71539,71553,71557,71560,71615,71620,71623,71626,71631,71634,71638,71643,71773,71777,71782,71787,71868,71873,71877,71880,71885,71890,71896,71899,71902,71905,71909,71914,71917,71928,71932,71949,74996,75000,75003,75006,75009,75030,75034,75037,75045,75048,75053,75056,75059,75064,75069,75073,75094,75098,75103,75106,75109,75112,75115,75119,75124,75127,75131,75136,75139,75144,75147,75152,75155,75160,76363,76367,76372,76375,76380,76664],[10,53390,53386],{"id":53391},"_3web-apis",[19,53393,53394],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,53396,53397],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,53399,53400],{},[1556,53401],{"alt":43,"src":53402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,53404,53405],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,53407,53408],{},"建议数组和对象使用 const 来声明",[19,53410,53411],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,53413,53415],{"id":53414},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[187,53417,53419],{"id":53418},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,53421,53422,53425],{},[26,53423,53424],{},"document"," = HTML 文件解析后的对象化表示；",[19,53427,53428,53430],{},[26,53429,53424],{}," ≠ HTML 文件本身",[19,53432,53433,53438],{},[369,53434,53435],{},[26,53436,53437],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,53440,53441,53445],{},[369,53442,53443],{},[26,53444,53424],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,53447,53448],{},"document实际上为window.document的简写",[187,53450,53452],{"id":53451},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,53454,53455],{},[1556,53456],{"alt":43,"src":53457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,53459,53460],{},[1556,53461],{"alt":43,"src":53462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,53464,53465],{},[1556,53466],{"alt":43,"src":53467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,53469,53470],{},"console.dir()",[19,53472,53473],{},"dir用来打印对象",[106,53475,53476,53479,53482],{},[109,53477,53478],{},"任何一个标签，都是一个对象",[109,53480,53481],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[109,53483,53484],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,53486,53487],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[187,53489,53491],{"id":53490},"_312-获取dom对象","3.1.2 获取DoM对象",[19,53493,53494],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,53496,53497],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,53499,53500],{},[369,53501,53502],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[171,53504,53505],{},[109,53506,53507],{},"利用CSS选择器来获取标签元素",[19,53509,53510],{},[1556,53511],{"alt":43,"src":53512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,53514,53515],{},"里边的选择器必须必须加引号！！！",[19,53517,53518],{},"只选择第一个元素",[38,53520,53522],{"className":53121,"code":53521,"language":53123,"meta":43,"style":43},"\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",[26,53523,53524,53532,53553,53572,53580,53585,53590,53595,53603],{"__ignoreMap":43},[47,53525,53526,53528,53530],{"class":49,"line":50},[47,53527,1129],{"class":221},[47,53529,51854],{"class":51354},[47,53531,51361],{"class":221},[47,53533,53534,53536,53538,53541,53543,53546,53549,53551],{"class":49,"line":92},[47,53535,52198],{"class":221},[47,53537,51665],{"class":51354},[47,53539,53540],{"class":53}," class",[47,53542,267],{"class":221},[47,53544,53545],{"class":81},"\"box\"",[47,53547,53548],{"class":221},">123\u003C\u002F",[47,53550,51665],{"class":51354},[47,53552,51361],{"class":221},[47,53554,53555,53557,53559,53561,53563,53565,53568,53570],{"class":49,"line":1273},[47,53556,52198],{"class":221},[47,53558,51665],{"class":51354},[47,53560,53540],{"class":53},[47,53562,267],{"class":221},[47,53564,53545],{"class":81},[47,53566,53567],{"class":221},">456\u003C\u002F",[47,53569,51665],{"class":51354},[47,53571,51361],{"class":221},[47,53573,53574,53576,53578],{"class":49,"line":1288},[47,53575,52198],{"class":221},[47,53577,51867],{"class":51354},[47,53579,51361],{"class":221},[47,53581,53582],{"class":49,"line":1294},[47,53583,53584],{"class":221},"    \u002F\u002F 1.获取匹配的第一个元素\n",[47,53586,53587],{"class":49,"line":1308},[47,53588,53589],{"class":221},"    const box = document.querySelector('div')\n",[47,53591,53592],{"class":49,"line":1314},[47,53593,53594],{"class":221},"    console.dir(box)\n",[47,53596,53597,53599,53601],{"class":49,"line":1405},[47,53598,52471],{"class":221},[47,53600,51867],{"class":51354},[47,53602,51361],{"class":221},[47,53604,53605,53607,53609],{"class":49,"line":1411},[47,53606,51839],{"class":221},[47,53608,51854],{"class":51354},[47,53610,51361],{"class":221},[19,53612,53613],{},"只选123，不选456",[19,53615,53616],{},[1556,53617],{"alt":43,"src":53618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,53620,53621],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,53623,53624],{},[1556,53625],{"alt":43,"src":53626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,53628,53629],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,53631,53632],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[171,53634,53635],{"start":92},[109,53636,53637],{},"其他方法来获取标签元素",[19,53639,53640],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,53642,53643],{},[1556,53644],{"alt":43,"src":53645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[187,53647,53649],{"id":53648},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,53651,53652],{},"设置修改DOM元素内容有两种方式：",[106,53654,53655,53658,53661,53664],{},[109,53656,53657],{},"元素.innerText=''",[109,53659,53660],{},"元素.innerHTML=''",[109,53662,53663],{},"不写字符串输出数字也是可以的",[109,53665,53666],{},"元素.innerHtml=1",[22091,53668,53670],{"id":53669},"_3131-innertext","3.1.3.1 innerText",[19,53672,53673],{},[1556,53674],{"alt":43,"src":53675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,53677,53678],{},"思路：实现了修改盒子中的内容！",[19,53680,53681],{},"它只显示纯文本，不解析标签",[22091,53683,53685],{"id":53684},"_3132-innerhtml","3.1.3.2 innerHTML",[19,53687,53688],{},[1556,53689],{"alt":43,"src":53690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,53692,53693],{},"相比于innerText，他的强大之处在于可以解析标签",[187,53695,53697],{"id":53696},"_314-操作元素属性","3.1.4 操作元素属性",[22091,53699,53701],{"id":53700},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,53703,53704],{},[1556,53705],{"alt":43,"src":53706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22091,53708,53710],{"id":53709},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,53712,53713],{},[1556,53714],{"alt":43,"src":53715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,53717,53718],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,53720,53721],{},"div.style.backgroundColor = 'hotpink'",[19,53723,53724],{},"如果按照css的写法，-表示减，就会出错",[19,53726,53727],{},"body元素不需要再获取，直接用就行！！！！！！",[19,53729,53730],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,53732,53733],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,53735,53736],{},[1556,53737],{"alt":43,"src":53738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,53740,53741],{},[1556,53742],{"alt":43,"src":53743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[171,53745,53746,53749,53752,53755,53758,53761],{},[109,53747,53748],{},"className这个方式就是修改很多样式的时候来使用的！",[109,53750,53751],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[109,53753,53754],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[109,53756,53757],{},"className为属性名，如果还用class的话就导致与关键字冲突",[109,53759,53760],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[109,53762,53763,53764,53769],{},"解析标签的时候就变为了",[51665,53765],{"className":53766},[53767,53768],"nav","box",[53770,53771],"br",{},[19,53773,53774],{},"例子：",[51665,53776],{"className":53777},[53767],[51867,53779,53780],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,53782,53783],{},[1556,53784],{"alt":43,"src":53785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,53787,53788],{},"追加和删除类名用classList",[19,53790,53791],{},"常用于类似于开关的操作",[19,53793,53794],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,53796,53797],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22091,53799,53801],{"id":53800},"_3143-牢记点","3.1.4.3 牢记点",[171,53803,53804,53807,53810,53813,53816,53819,53822,53825,53828],{},[109,53805,53806],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[109,53808,53809],{},"使用style属性操作css时不要忘记引号",[109,53811,53812],{},"使用className或者classList时也不要忘记引号",[109,53814,53815],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[109,53817,53818],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[109,53820,53821],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[109,53823,53824],{},"若： let arr=['1','2',3] arr[0]=1",[109,53826,53827],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[109,53829,53830],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[187,53832,53834],{"id":53833},"_315-操作表单元素","3.1.5 操作表单元素",[171,53836,53837],{},[109,53838,53839],{},"天生的属性",[19,53841,53842],{},[1556,53843],{"alt":43,"src":53844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,53846,53847],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,53849,53850],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,53852,53853],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,53855,53856],{},[1556,53857],{"alt":43,"src":53858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[38,53860,53862],{"className":50687,"code":53861,"language":50689,"meta":43,"style":43},"在复选框中如果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",[26,53863,53864,53869,53901,53906,53911,53916,53921,53925,53930,53935,53952,53964,53969],{"__ignoreMap":43},[47,53865,53866],{"class":49,"line":50},[47,53867,53868],{"class":221},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[47,53870,53871,53873,53876,53879,53881,53884,53886,53888,53890,53892,53894,53896,53899],{"class":49,"line":92},[47,53872,1129],{"class":221},[47,53874,53875],{"class":51354},"input",[47,53877,53878],{"class":53}," type",[47,53880,267],{"class":221},[47,53882,53883],{"class":81},"\"checkbox\"",[47,53885,15013],{"class":53},[47,53887,267],{"class":221},[47,53889,7745],{"class":81},[47,53891,15052],{"class":53},[47,53893,267],{"class":221},[47,53895,7745],{"class":81},[47,53897,53898],{"class":53}," checked",[47,53900,51361],{"class":221},[47,53902,53903],{"class":49,"line":1273},[47,53904,53905],{"class":221},"不选的话：\n",[47,53907,53908],{"class":49,"line":1288},[47,53909,53910],{"class":221},"const input = document.querySelector('input')\n",[47,53912,53913],{"class":49,"line":1294},[47,53914,53915],{"class":221},"input.checked=false\n",[47,53917,53918],{"class":49,"line":1308},[47,53919,53920],{"class":221},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[47,53922,53923],{"class":49,"line":1314},[47,53924,2493],{"emptyLinePlaceholder":145},[47,53926,53927],{"class":49,"line":1405},[47,53928,53929],{"class":221},"禁用按钮：\n",[47,53931,53932],{"class":49,"line":1411},[47,53933,53934],{"class":221},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[47,53936,53937,53939,53942,53945,53948,53950],{"class":49,"line":1423},[47,53938,1129],{"class":221},[47,53940,53941],{"class":51354},"button",[47,53943,53944],{"class":53}," disabled",[47,53946,53947],{"class":221},">点击\u003C\u002F",[47,53949,53941],{"class":51354},[47,53951,51361],{"class":221},[47,53953,53954,53956,53958,53960,53962],{"class":49,"line":1706},[47,53955,1129],{"class":221},[47,53957,53941],{"class":51354},[47,53959,53947],{"class":221},[47,53961,53941],{"class":51354},[47,53963,51361],{"class":221},[47,53965,53966],{"class":49,"line":1711},[47,53967,53968],{"class":221},"const bt = document.querySelector('button')\n",[47,53970,53971],{"class":49,"line":1717},[47,53972,53973],{"class":221},"bt.disabled = false\n",[171,53975,53976],{"start":92},[109,53977,53978],{},"自定义属性",[19,53980,53981],{},[1556,53982],{"alt":43,"src":53983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[38,53985,53987],{"className":53121,"code":53986,"language":53123,"meta":43,"style":43},"\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",[26,53988,53989,53997,54025,54044,54063,54082,54101,54109,54114,54119,54124,54129,54137],{"__ignoreMap":43},[47,53990,53991,53993,53995],{"class":49,"line":50},[47,53992,1129],{"class":221},[47,53994,51854],{"class":51354},[47,53996,51361],{"class":221},[47,53998,53999,54001,54003,54006,54008,54010,54013,54015,54018,54021,54023],{"class":49,"line":92},[47,54000,52198],{"class":221},[47,54002,51665],{"class":51354},[47,54004,54005],{"class":53}," data-id",[47,54007,267],{"class":221},[47,54009,3771],{"class":81},[47,54011,54012],{"class":53}," data-spm",[47,54014,267],{"class":221},[47,54016,54017],{"class":81},"\"我不知道\"",[47,54019,54020],{"class":221},">1\u003C\u002F",[47,54022,51665],{"class":51354},[47,54024,51361],{"class":221},[47,54026,54027,54029,54031,54033,54035,54037,54040,54042],{"class":49,"line":1273},[47,54028,52198],{"class":221},[47,54030,51665],{"class":51354},[47,54032,54005],{"class":53},[47,54034,267],{"class":221},[47,54036,3794],{"class":81},[47,54038,54039],{"class":221},">2\u003C\u002F",[47,54041,51665],{"class":51354},[47,54043,51361],{"class":221},[47,54045,54046,54048,54050,54052,54054,54056,54059,54061],{"class":49,"line":1288},[47,54047,52198],{"class":221},[47,54049,51665],{"class":51354},[47,54051,54005],{"class":53},[47,54053,267],{"class":221},[47,54055,3807],{"class":81},[47,54057,54058],{"class":221},">3\u003C\u002F",[47,54060,51665],{"class":51354},[47,54062,51361],{"class":221},[47,54064,54065,54067,54069,54071,54073,54075,54078,54080],{"class":49,"line":1294},[47,54066,52198],{"class":221},[47,54068,51665],{"class":51354},[47,54070,54005],{"class":53},[47,54072,267],{"class":221},[47,54074,3820],{"class":81},[47,54076,54077],{"class":221},">4\u003C\u002F",[47,54079,51665],{"class":51354},[47,54081,51361],{"class":221},[47,54083,54084,54086,54088,54090,54092,54094,54097,54099],{"class":49,"line":1308},[47,54085,52198],{"class":221},[47,54087,51665],{"class":51354},[47,54089,54005],{"class":53},[47,54091,267],{"class":221},[47,54093,3841],{"class":81},[47,54095,54096],{"class":221},">5\u003C\u002F",[47,54098,51665],{"class":51354},[47,54100,51361],{"class":221},[47,54102,54103,54105,54107],{"class":49,"line":1314},[47,54104,52198],{"class":221},[47,54106,51867],{"class":51354},[47,54108,51361],{"class":221},[47,54110,54111],{"class":49,"line":1405},[47,54112,54113],{"class":221},"    const one = document.querySelector('div')\n",[47,54115,54116],{"class":49,"line":1411},[47,54117,54118],{"class":221},"    console.log(one.dataset)\n",[47,54120,54121],{"class":49,"line":1423},[47,54122,54123],{"class":221},"    console.log(one.dataset.id)\n",[47,54125,54126],{"class":49,"line":1706},[47,54127,54128],{"class":221},"    console.log(one.dataset.spm)\n",[47,54130,54131,54133,54135],{"class":49,"line":1711},[47,54132,52471],{"class":221},[47,54134,51867],{"class":51354},[47,54136,51361],{"class":221},[47,54138,54139,54141,54143],{"class":49,"line":1717},[47,54140,51839],{"class":221},[47,54142,51854],{"class":51354},[47,54144,51361],{"class":221},[19,54146,54147],{},[1556,54148],{"alt":43,"src":54149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,54151,54152],{},"document.querySelector选择的是第一个对象（元素）",[187,54154,54156],{"id":54155},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,54158,54159],{},[1556,54160],{"alt":43,"src":54161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,54163,54164],{},[1556,54165],{"alt":43,"src":54166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,54168,54169],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51867,54171,54172],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,54174,54175],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51867,54177,54178],{},"\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,54180,54181],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,54183,54184],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,54186,54187],{},"单位为毫秒！！！",[19,54189,54190],{},"可以搭配匿名函数来用！！！",[19,54192,54193],{},"setInterval(function () {",[19,54195,54196],{},"alert('两秒执行一次')",[19,54198,54199],{},"}, 2000)",[19,54201,54202],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,54204,54205],{},"function fn() {",[19,54207,54208],{},"document.write(1)",[19,54210,1165],{},[19,54212,54213],{},"setInterval(fn, 1000)",[19,54215,54216],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,54218,54219],{},"setInterval('fn()', 1000)",[19,54221,54222],{},[1556,54223],{"alt":43,"src":54224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22091,54226,54228],{"id":54227},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[38,54230,54232],{"className":50687,"code":54231,"language":50689,"meta":43,"style":43},"\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",[26,54233,54234,54244,54258,54262,54270,54284,54304,54316,54324,54328,54336,54373,54378,54383,54388,54396,54404,54426,54434,54439,54461,54466,54471,54482,54487,54507,54515,54530,54545,54556,54561,54571,54581,54585,54594,54598,54606,54614,54618],{"__ignoreMap":43},[47,54235,54236,54238,54240,54242],{"class":49,"line":50},[47,54237,51351],{"class":221},[47,54239,51355],{"class":51354},[47,54241,51358],{"class":53},[47,54243,51361],{"class":221},[47,54245,54246,54248,54250,54252,54254,54256],{"class":49,"line":92},[47,54247,1129],{"class":221},[47,54249,50689],{"class":51354},[47,54251,51370],{"class":53},[47,54253,267],{"class":221},[47,54255,51375],{"class":81},[47,54257,51361],{"class":221},[47,54259,54260],{"class":49,"line":1273},[47,54261,2493],{"emptyLinePlaceholder":145},[47,54263,54264,54266,54268],{"class":49,"line":1288},[47,54265,1129],{"class":221},[47,54267,51388],{"class":51354},[47,54269,51361],{"class":221},[47,54271,54272,54274,54276,54278,54280,54282],{"class":49,"line":1294},[47,54273,52198],{"class":221},[47,54275,51398],{"class":51354},[47,54277,51401],{"class":53},[47,54279,267],{"class":221},[47,54281,51406],{"class":81},[47,54283,51361],{"class":221},[47,54285,54286,54288,54290,54292,54294,54296,54298,54300,54302],{"class":49,"line":1308},[47,54287,52198],{"class":221},[47,54289,51398],{"class":51354},[47,54291,15013],{"class":53},[47,54293,267],{"class":221},[47,54295,51445],{"class":81},[47,54297,51425],{"class":53},[47,54299,267],{"class":221},[47,54301,51452],{"class":81},[47,54303,51361],{"class":221},[47,54305,54306,54308,54310,54312,54314],{"class":49,"line":1314},[47,54307,52198],{"class":221},[47,54309,51461],{"class":51354},[47,54311,51464],{"class":221},[47,54313,51461],{"class":51354},[47,54315,51361],{"class":221},[47,54317,54318,54320,54322],{"class":49,"line":1405},[47,54319,51839],{"class":221},[47,54321,51388],{"class":51354},[47,54323,51361],{"class":221},[47,54325,54326],{"class":49,"line":1411},[47,54327,2493],{"emptyLinePlaceholder":145},[47,54329,54330,54332,54334],{"class":49,"line":1423},[47,54331,1129],{"class":221},[47,54333,51854],{"class":51354},[47,54335,51361],{"class":221},[47,54337,54338,54340,54343,54345,54347,54349,54351,54353,54355,54358,54360,54363,54366,54368,54371],{"class":49,"line":1706},[47,54339,52198],{"class":221},[47,54341,54342],{"class":51354},"textarea",[47,54344,15013],{"class":53},[47,54346,267],{"class":221},[47,54348,7745],{"class":81},[47,54350,15052],{"class":53},[47,54352,267],{"class":221},[47,54354,7745],{"class":81},[47,54356,54357],{"class":53}," cols",[47,54359,267],{"class":221},[47,54361,54362],{"class":81},"\"30\"",[47,54364,54365],{"class":53}," rows",[47,54367,267],{"class":221},[47,54369,54370],{"class":81},"\"10\"",[47,54372,51361],{"class":221},[47,54374,54375],{"class":49,"line":1711},[47,54376,54377],{"class":221},"        用户注册协议\n",[47,54379,54380],{"class":49,"line":1717},[47,54381,54382],{"class":221},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[47,54384,54385],{"class":49,"line":1722},[47,54386,54387],{"class":221},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[47,54389,54390,54392,54394],{"class":49,"line":1736},[47,54391,51830],{"class":221},[47,54393,54342],{"class":51354},[47,54395,51361],{"class":221},[47,54397,54398,54400,54402],{"class":49,"line":1741},[47,54399,52198],{"class":221},[47,54401,53770],{"class":51354},[47,54403,51361],{"class":221},[47,54405,54406,54408,54410,54412,54414,54417,54419,54422,54424],{"class":49,"line":1747},[47,54407,52198],{"class":221},[47,54409,53941],{"class":51354},[47,54411,53540],{"class":53},[47,54413,267],{"class":221},[47,54415,54416],{"class":81},"\"btn\"",[47,54418,53944],{"class":53},[47,54420,54421],{"class":221},">我已经阅读用户协议(5)\u003C\u002F",[47,54423,53941],{"class":51354},[47,54425,51361],{"class":221},[47,54427,54428,54430,54432],{"class":49,"line":1768},[47,54429,52198],{"class":221},[47,54431,51867],{"class":51354},[47,54433,51361],{"class":221},[47,54435,54436],{"class":49,"line":1773},[47,54437,54438],{"class":279},"    \u002F\u002F 1. 获取元素\n",[47,54440,54441,54443,54446,54448,54451,54454,54456,54459],{"class":49,"line":1787},[47,54442,11314],{"class":217},[47,54444,54445],{"class":85}," btn",[47,54447,13657],{"class":217},[47,54449,54450],{"class":221}," document.",[47,54452,54453],{"class":53},"querySelector",[47,54455,222],{"class":221},[47,54457,54458],{"class":81},"'.btn'",[47,54460,228],{"class":221},[47,54462,54463],{"class":49,"line":1792},[47,54464,54465],{"class":279},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[47,54467,54468],{"class":49,"line":1821},[47,54469,54470],{"class":279},"    \u002F\u002F 2. 倒计时\n",[47,54472,54473,54475,54477,54479],{"class":49,"line":1826},[47,54474,52273],{"class":217},[47,54476,9531],{"class":221},[47,54478,267],{"class":217},[47,54480,54481],{"class":85}," 5\n",[47,54483,54484],{"class":49,"line":1843},[47,54485,54486],{"class":279},"    \u002F\u002F 2.1 开启定时器\n",[47,54488,54489,54491,54494,54496,54499,54501,54504],{"class":49,"line":1848},[47,54490,52273],{"class":217},[47,54492,54493],{"class":221}," n ",[47,54495,267],{"class":217},[47,54497,54498],{"class":53}," setInterval",[47,54500,222],{"class":221},[47,54502,54503],{"class":217},"function",[47,54505,54506],{"class":221}," () {\n",[47,54508,54509,54512],{"class":49,"line":1853},[47,54510,54511],{"class":221},"      i",[47,54513,54514],{"class":217},"--\n",[47,54516,54517,54520,54522,54525,54527],{"class":49,"line":1858},[47,54518,54519],{"class":221},"      btn.innerHTML ",[47,54521,267],{"class":217},[47,54523,54524],{"class":81}," `我已经阅读用户协议(${",[47,54526,660],{"class":221},[47,54528,54529],{"class":81},"})`\n",[47,54531,54532,54535,54538,54541,54543],{"class":49,"line":1872},[47,54533,54534],{"class":217},"      if",[47,54536,54537],{"class":221}," (i ",[47,54539,54540],{"class":217},"===",[47,54542,4186],{"class":85},[47,54544,12535],{"class":221},[47,54546,54547,54550,54553],{"class":49,"line":1877},[47,54548,54549],{"class":53},"        clearInterval",[47,54551,54552],{"class":221},"(n)  ",[47,54554,54555],{"class":279},"\u002F\u002F 关闭定时器\n",[47,54557,54558],{"class":49,"line":2670},[47,54559,54560],{"class":279},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[47,54562,54563,54566,54568],{"class":49,"line":2684},[47,54564,54565],{"class":221},"        btn.disabled ",[47,54567,267],{"class":217},[47,54569,54570],{"class":85}," false\n",[47,54572,54573,54576,54578],{"class":49,"line":2692},[47,54574,54575],{"class":221},"        btn.innerHTML ",[47,54577,267],{"class":217},[47,54579,54580],{"class":81}," '同意'\n",[47,54582,54583],{"class":49,"line":2697},[47,54584,52452],{"class":221},[47,54586,54587,54590,54592],{"class":49,"line":2703},[47,54588,54589],{"class":221},"    }, ",[47,54591,6503],{"class":85},[47,54593,228],{"class":221},[47,54595,54596],{"class":49,"line":2709},[47,54597,2493],{"emptyLinePlaceholder":145},[47,54599,54600,54602,54604],{"class":49,"line":2714},[47,54601,52471],{"class":221},[47,54603,51867],{"class":51354},[47,54605,51361],{"class":221},[47,54607,54608,54610,54612],{"class":49,"line":8041},[47,54609,51839],{"class":221},[47,54611,51854],{"class":51354},[47,54613,51361],{"class":221},[47,54615,54616],{"class":49,"line":8065},[47,54617,2493],{"emptyLinePlaceholder":145},[47,54619,54620,54622,54624],{"class":49,"line":8070},[47,54621,51839],{"class":221},[47,54623,50689],{"class":51354},[47,54625,51361],{"class":221},[19,54627,54628],{},"不要一直想着用死循环,避免死循环",[19,54630,54631,54634],{},[26,54632,54633],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22091,54636,54638],{"id":54637},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[171,54640,54641],{},[109,54642,54643],{},"法1",[38,54645,54647],{"className":50687,"code":54646,"language":50689,"meta":43,"style":43},"\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",[26,54648,54649,54659,54673,54677,54685,54699,54719,54731,54739,54745,54756,54767,54771,54775,54782,54794,54798,54802,54809,54821,54835,54848,54862,54866,54870,54877,54888,54899,54910,54922,54934,54946,54950,54954,54962,54972,54985,54997,55010,55014,55018,55025,55035,55047,55059,55070,55081,55091,55103,55115,55119,55123,55132,55144,55156,55184,55197,55201,55205,55212,55223,55227,55235,55243,55247,55255,55269,55284,55308,55316,55331,55344,55352,55373,55385,55397,55409,55421,55433,55445,55457,55466,55474,55482,55490,55502,55525,55544,55563,55582,55601,55620,55639,55659,55663,55683,55702,55722,55743,55754,55771,55781,55791,55801,55806,55811,55816,55821,55846,55859,55863,55886,55890,55898,55906,55914,55918],{"__ignoreMap":43},[47,54650,54651,54653,54655,54657],{"class":49,"line":50},[47,54652,51351],{"class":221},[47,54654,51355],{"class":51354},[47,54656,51358],{"class":53},[47,54658,51361],{"class":221},[47,54660,54661,54663,54665,54667,54669,54671],{"class":49,"line":92},[47,54662,1129],{"class":221},[47,54664,50689],{"class":51354},[47,54666,51370],{"class":53},[47,54668,267],{"class":221},[47,54670,51375],{"class":81},[47,54672,51361],{"class":221},[47,54674,54675],{"class":49,"line":1273},[47,54676,2493],{"emptyLinePlaceholder":145},[47,54678,54679,54681,54683],{"class":49,"line":1288},[47,54680,1129],{"class":221},[47,54682,51388],{"class":51354},[47,54684,51361],{"class":221},[47,54686,54687,54689,54691,54693,54695,54697],{"class":49,"line":1294},[47,54688,52198],{"class":221},[47,54690,51398],{"class":51354},[47,54692,51401],{"class":53},[47,54694,267],{"class":221},[47,54696,51406],{"class":81},[47,54698,51361],{"class":221},[47,54700,54701,54703,54705,54707,54709,54711,54713,54715,54717],{"class":49,"line":1308},[47,54702,52198],{"class":221},[47,54704,51398],{"class":51354},[47,54706,15013],{"class":53},[47,54708,267],{"class":221},[47,54710,51445],{"class":81},[47,54712,51425],{"class":53},[47,54714,267],{"class":221},[47,54716,51452],{"class":81},[47,54718,51361],{"class":221},[47,54720,54721,54723,54725,54727,54729],{"class":49,"line":1314},[47,54722,52198],{"class":221},[47,54724,51461],{"class":51354},[47,54726,51464],{"class":221},[47,54728,51461],{"class":51354},[47,54730,51361],{"class":221},[47,54732,54733,54735,54737],{"class":49,"line":1405},[47,54734,52198],{"class":221},[47,54736,134],{"class":51354},[47,54738,51361],{"class":221},[47,54740,54741,54743],{"class":49,"line":1411},[47,54742,6496],{"class":51354},[47,54744,15665],{"class":221},[47,54746,54747,54750,54752,54754],{"class":49,"line":1423},[47,54748,54749],{"class":85},"      padding",[47,54751,51491],{"class":221},[47,54753,411],{"class":85},[47,54755,1384],{"class":221},[47,54757,54758,54761,54763,54765],{"class":49,"line":1706},[47,54759,54760],{"class":85},"      margin",[47,54762,51491],{"class":221},[47,54764,411],{"class":85},[47,54766,1384],{"class":221},[47,54768,54769],{"class":49,"line":1711},[47,54770,2280],{"class":221},[47,54772,54773],{"class":49,"line":1717},[47,54774,2493],{"emptyLinePlaceholder":145},[47,54776,54777,54780],{"class":49,"line":1722},[47,54778,54779],{"class":51354},"    li",[47,54781,15665],{"class":221},[47,54783,54784,54787,54789,54792],{"class":49,"line":1736},[47,54785,54786],{"class":85},"      list-style",[47,54788,51491],{"class":221},[47,54790,54791],{"class":85},"none",[47,54793,1384],{"class":221},[47,54795,54796],{"class":49,"line":1741},[47,54797,2280],{"class":221},[47,54799,54800],{"class":49,"line":1747},[47,54801,2493],{"emptyLinePlaceholder":145},[47,54803,54804,54807],{"class":49,"line":1768},[47,54805,54806],{"class":53},"    .box",[47,54808,15665],{"class":221},[47,54810,54811,54814,54816,54819],{"class":49,"line":1773},[47,54812,54813],{"class":85},"      position",[47,54815,51491],{"class":221},[47,54817,54818],{"class":85},"relative",[47,54820,1384],{"class":221},[47,54822,54823,54826,54828,54831,54833],{"class":49,"line":1787},[47,54824,54825],{"class":85},"      width",[47,54827,51491],{"class":221},[47,54829,54830],{"class":85},"976",[47,54832,51546],{"class":217},[47,54834,1384],{"class":221},[47,54836,54837,54840,54842,54844,54846],{"class":49,"line":1792},[47,54838,54839],{"class":85},"      height",[47,54841,51491],{"class":221},[47,54843,1633],{"class":85},[47,54845,51546],{"class":217},[47,54847,1384],{"class":221},[47,54849,54850,54852,54854,54856,54858,54860],{"class":49,"line":1821},[47,54851,54760],{"class":85},[47,54853,51491],{"class":221},[47,54855,530],{"class":85},[47,54857,51546],{"class":217},[47,54859,51610],{"class":85},[47,54861,1384],{"class":221},[47,54863,54864],{"class":49,"line":1826},[47,54865,2280],{"class":221},[47,54867,54868],{"class":49,"line":1843},[47,54869,2493],{"emptyLinePlaceholder":145},[47,54871,54872,54875],{"class":49,"line":1848},[47,54873,54874],{"class":53},"    .slider-footer",[47,54876,15665],{"class":221},[47,54878,54879,54881,54883,54886],{"class":49,"line":1853},[47,54880,54813],{"class":85},[47,54882,51491],{"class":221},[47,54884,54885],{"class":85},"absolute",[47,54887,1384],{"class":221},[47,54889,54890,54893,54895,54897],{"class":49,"line":1858},[47,54891,54892],{"class":85},"      left",[47,54894,51491],{"class":221},[47,54896,411],{"class":85},[47,54898,1384],{"class":221},[47,54900,54901,54904,54906,54908],{"class":49,"line":1872},[47,54902,54903],{"class":85},"      bottom",[47,54905,51491],{"class":221},[47,54907,411],{"class":85},[47,54909,1384],{"class":221},[47,54911,54912,54914,54916,54918,54920],{"class":49,"line":1877},[47,54913,54825],{"class":85},[47,54915,51491],{"class":221},[47,54917,530],{"class":85},[47,54919,547],{"class":217},[47,54921,1384],{"class":221},[47,54923,54924,54926,54928,54930,54932],{"class":49,"line":2670},[47,54925,54839],{"class":85},[47,54927,51491],{"class":221},[47,54929,794],{"class":85},[47,54931,547],{"class":217},[47,54933,1384],{"class":221},[47,54935,54936,54939,54941,54944],{"class":49,"line":2684},[47,54937,54938],{"class":85},"      background-color",[47,54940,51491],{"class":221},[47,54942,54943],{"class":85},"skyblue",[47,54945,1384],{"class":221},[47,54947,54948],{"class":49,"line":2692},[47,54949,2280],{"class":221},[47,54951,54952],{"class":49,"line":2697},[47,54953,2493],{"emptyLinePlaceholder":145},[47,54955,54956,54958,54960],{"class":49,"line":2703},[47,54957,54874],{"class":53},[47,54959,6918],{"class":51354},[47,54961,15665],{"class":221},[47,54963,54964,54966,54968,54970],{"class":49,"line":2709},[47,54965,54813],{"class":85},[47,54967,51491],{"class":221},[47,54969,54885],{"class":85},[47,54971,1384],{"class":221},[47,54973,54974,54977,54979,54981,54983],{"class":49,"line":2714},[47,54975,54976],{"class":85},"      font-size",[47,54978,51491],{"class":221},[47,54980,1120],{"class":85},[47,54982,51546],{"class":217},[47,54984,1384],{"class":221},[47,54986,54987,54989,54991,54993,54995],{"class":49,"line":8041},[47,54988,54892],{"class":85},[47,54990,51491],{"class":221},[47,54992,919],{"class":85},[47,54994,51546],{"class":217},[47,54996,1384],{"class":221},[47,54998,54999,55002,55004,55006,55008],{"class":49,"line":8065},[47,55000,55001],{"class":85},"      top",[47,55003,51491],{"class":221},[47,55005,538],{"class":85},[47,55007,51546],{"class":217},[47,55009,1384],{"class":221},[47,55011,55012],{"class":49,"line":8070},[47,55013,2280],{"class":221},[47,55015,55016],{"class":49,"line":8076},[47,55017,2493],{"emptyLinePlaceholder":145},[47,55019,55020,55023],{"class":49,"line":8103},[47,55021,55022],{"class":51354},"    ul",[47,55024,15665],{"class":221},[47,55026,55027,55029,55031,55033],{"class":49,"line":8108},[47,55028,54813],{"class":85},[47,55030,51491],{"class":221},[47,55032,54885],{"class":85},[47,55034,1384],{"class":221},[47,55036,55037,55039,55041,55043,55045],{"class":49,"line":8114},[47,55038,55001],{"class":85},[47,55040,51491],{"class":221},[47,55042,1000],{"class":85},[47,55044,51546],{"class":217},[47,55046,1384],{"class":221},[47,55048,55049,55051,55053,55055,55057],{"class":49,"line":8126},[47,55050,54892],{"class":85},[47,55052,51491],{"class":221},[47,55054,919],{"class":85},[47,55056,51546],{"class":217},[47,55058,1384],{"class":221},[47,55060,55061,55064,55066,55068],{"class":49,"line":8138},[47,55062,55063],{"class":85},"      display",[47,55065,51491],{"class":221},[47,55067,51531],{"class":85},[47,55069,1384],{"class":221},[47,55071,55072,55075,55077,55079],{"class":49,"line":8150},[47,55073,55074],{"class":85},"      justify-content",[47,55076,51491],{"class":221},[47,55078,51722],{"class":85},[47,55080,1384],{"class":221},[47,55082,55083,55085,55087,55089],{"class":49,"line":9809},[47,55084,54813],{"class":85},[47,55086,51491],{"class":221},[47,55088,54885],{"class":85},[47,55090,1384],{"class":221},[47,55092,55093,55095,55097,55099,55101],{"class":49,"line":9834},[47,55094,54825],{"class":85},[47,55096,51491],{"class":221},[47,55098,4085],{"class":85},[47,55100,51546],{"class":217},[47,55102,1384],{"class":221},[47,55104,55105,55107,55109,55111,55113],{"class":49,"line":9857},[47,55106,54839],{"class":85},[47,55108,51491],{"class":221},[47,55110,919],{"class":85},[47,55112,51546],{"class":217},[47,55114,1384],{"class":221},[47,55116,55117],{"class":49,"line":9881},[47,55118,2280],{"class":221},[47,55120,55121],{"class":49,"line":9886},[47,55122,2493],{"emptyLinePlaceholder":145},[47,55124,55125,55127,55130],{"class":49,"line":9891},[47,55126,55022],{"class":51354},[47,55128,55129],{"class":51354}," li",[47,55131,15665],{"class":221},[47,55133,55134,55136,55138,55140,55142],{"class":49,"line":9896},[47,55135,54825],{"class":85},[47,55137,51491],{"class":221},[47,55139,919],{"class":85},[47,55141,51546],{"class":217},[47,55143,1384],{"class":221},[47,55145,55146,55148,55150,55152,55154],{"class":49,"line":9905},[47,55147,54839],{"class":85},[47,55149,51491],{"class":221},[47,55151,919],{"class":85},[47,55153,51546],{"class":217},[47,55155,1384],{"class":221},[47,55157,55158,55160,55162,55165,55167,55169,55171,55173,55175,55177,55179,55182],{"class":49,"line":9910},[47,55159,54938],{"class":85},[47,55161,51491],{"class":221},[47,55163,55164],{"class":85},"rgba",[47,55166,222],{"class":221},[47,55168,411],{"class":85},[47,55170,12528],{"class":221},[47,55172,411],{"class":85},[47,55174,12528],{"class":221},[47,55176,411],{"class":85},[47,55178,12528],{"class":221},[47,55180,55181],{"class":85},".4",[47,55183,2812],{"class":221},[47,55185,55186,55189,55191,55193,55195],{"class":49,"line":9916},[47,55187,55188],{"class":85},"      border-radius",[47,55190,51491],{"class":221},[47,55192,665],{"class":85},[47,55194,51546],{"class":217},[47,55196,1384],{"class":221},[47,55198,55199],{"class":49,"line":9937},[47,55200,2280],{"class":221},[47,55202,55203],{"class":49,"line":9943},[47,55204,2493],{"emptyLinePlaceholder":145},[47,55206,55207,55210],{"class":49,"line":9957},[47,55208,55209],{"class":53},"    .activate",[47,55211,15665],{"class":221},[47,55213,55214,55216,55218,55221],{"class":49,"line":9963},[47,55215,54938],{"class":85},[47,55217,51491],{"class":221},[47,55219,55220],{"class":85},"#f7f7f7",[47,55222,1384],{"class":221},[47,55224,55225],{"class":49,"line":9990},[47,55226,2280],{"class":221},[47,55228,55229,55231,55233],{"class":49,"line":9999},[47,55230,52471],{"class":221},[47,55232,134],{"class":51354},[47,55234,51361],{"class":221},[47,55236,55237,55239,55241],{"class":49,"line":10005},[47,55238,51839],{"class":221},[47,55240,51388],{"class":51354},[47,55242,51361],{"class":221},[47,55244,55245],{"class":49,"line":10013},[47,55246,2493],{"emptyLinePlaceholder":145},[47,55248,55249,55251,55253],{"class":49,"line":10018},[47,55250,1129],{"class":221},[47,55252,51854],{"class":51354},[47,55254,51361],{"class":221},[47,55256,55257,55259,55261,55263,55265,55267],{"class":49,"line":16697},[47,55258,52198],{"class":221},[47,55260,51665],{"class":51354},[47,55262,53540],{"class":53},[47,55264,267],{"class":221},[47,55266,53545],{"class":81},[47,55268,51361],{"class":221},[47,55270,55271,55273,55275,55277,55279,55282],{"class":49,"line":16703},[47,55272,51395],{"class":221},[47,55274,51665],{"class":51354},[47,55276,53540],{"class":53},[47,55278,267],{"class":221},[47,55280,55281],{"class":81},"\"slider-wrapper\"",[47,55283,51361],{"class":221},[47,55285,55286,55289,55291,55294,55296,55299,55302,55304,55306],{"class":49,"line":16726},[47,55287,55288],{"class":221},"      \u003C",[47,55290,1556],{"class":51354},[47,55292,55293],{"class":53}," src",[47,55295,267],{"class":221},[47,55297,55298],{"class":81},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[47,55300,55301],{"class":53}," alt",[47,55303,267],{"class":221},[47,55305,7745],{"class":81},[47,55307,51361],{"class":221},[47,55309,55310,55312,55314],{"class":49,"line":16732},[47,55311,51830],{"class":221},[47,55313,51665],{"class":51354},[47,55315,51361],{"class":221},[47,55317,55318,55320,55322,55324,55326,55329],{"class":49,"line":16755},[47,55319,51395],{"class":221},[47,55321,51665],{"class":51354},[47,55323,53540],{"class":53},[47,55325,267],{"class":221},[47,55327,55328],{"class":81},"\"slider-footer\"",[47,55330,51361],{"class":221},[47,55332,55333,55335,55337,55340,55342],{"class":49,"line":16769},[47,55334,55288],{"class":221},[47,55336,19],{"class":51354},[47,55338,55339],{"class":221},">对人类来说会不会太超前了?\u003C\u002F",[47,55341,19],{"class":51354},[47,55343,51361],{"class":221},[47,55345,55346,55348,55350],{"class":49,"line":16789},[47,55347,55288],{"class":221},[47,55349,106],{"class":51354},[47,55351,51361],{"class":221},[47,55353,55354,55357,55359,55361,55363,55366,55369,55371],{"class":49,"line":16795},[47,55355,55356],{"class":221},"        \u003C",[47,55358,109],{"class":51354},[47,55360,53540],{"class":53},[47,55362,267],{"class":221},[47,55364,55365],{"class":81},"\"activate\"",[47,55367,55368],{"class":221},">\u003C\u002F",[47,55370,109],{"class":51354},[47,55372,51361],{"class":221},[47,55374,55375,55377,55379,55381,55383],{"class":49,"line":16806},[47,55376,55356],{"class":221},[47,55378,109],{"class":51354},[47,55380,55368],{"class":221},[47,55382,109],{"class":51354},[47,55384,51361],{"class":221},[47,55386,55387,55389,55391,55393,55395],{"class":49,"line":16829},[47,55388,55356],{"class":221},[47,55390,109],{"class":51354},[47,55392,55368],{"class":221},[47,55394,109],{"class":51354},[47,55396,51361],{"class":221},[47,55398,55399,55401,55403,55405,55407],{"class":49,"line":16851},[47,55400,55356],{"class":221},[47,55402,109],{"class":51354},[47,55404,55368],{"class":221},[47,55406,109],{"class":51354},[47,55408,51361],{"class":221},[47,55410,55411,55413,55415,55417,55419],{"class":49,"line":16856},[47,55412,55356],{"class":221},[47,55414,109],{"class":51354},[47,55416,55368],{"class":221},[47,55418,109],{"class":51354},[47,55420,51361],{"class":221},[47,55422,55423,55425,55427,55429,55431],{"class":49,"line":16862},[47,55424,55356],{"class":221},[47,55426,109],{"class":51354},[47,55428,55368],{"class":221},[47,55430,109],{"class":51354},[47,55432,51361],{"class":221},[47,55434,55435,55437,55439,55441,55443],{"class":49,"line":16876},[47,55436,55356],{"class":221},[47,55438,109],{"class":51354},[47,55440,55368],{"class":221},[47,55442,109],{"class":51354},[47,55444,51361],{"class":221},[47,55446,55447,55449,55451,55453,55455],{"class":49,"line":16889},[47,55448,55356],{"class":221},[47,55450,109],{"class":51354},[47,55452,55368],{"class":221},[47,55454,109],{"class":51354},[47,55456,51361],{"class":221},[47,55458,55459,55462,55464],{"class":49,"line":16894},[47,55460,55461],{"class":221},"      \u003C\u002F",[47,55463,106],{"class":51354},[47,55465,51361],{"class":221},[47,55467,55468,55470,55472],{"class":49,"line":16908},[47,55469,51830],{"class":221},[47,55471,51665],{"class":51354},[47,55473,51361],{"class":221},[47,55475,55476,55478,55480],{"class":49,"line":16913},[47,55477,52471],{"class":221},[47,55479,51665],{"class":51354},[47,55481,51361],{"class":221},[47,55483,55484,55486,55488],{"class":49,"line":16919},[47,55485,52198],{"class":221},[47,55487,51867],{"class":51354},[47,55489,51361],{"class":221},[47,55491,55492,55494,55497,55499],{"class":49,"line":16924},[47,55493,11314],{"class":217},[47,55495,55496],{"class":85}," arrImage",[47,55498,13657],{"class":217},[47,55500,55501],{"class":221}," [\n",[47,55503,55504,55507,55510,55513,55516,55519,55522],{"class":49,"line":16938},[47,55505,55506],{"class":221},"      { url: ",[47,55508,55509],{"class":81},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[47,55511,55512],{"class":221},", title: ",[47,55514,55515],{"class":81},"'对人类来说会不会太超前了?'",[47,55517,55518],{"class":221},", color: ",[47,55520,55521],{"class":81},"'rgba(100,67,68)'",[47,55523,55524],{"class":221}," },\n",[47,55526,55527,55529,55532,55534,55537,55539,55542],{"class":49,"line":16943},[47,55528,55506],{"class":221},[47,55530,55531],{"class":81},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[47,55533,55512],{"class":221},[47,55535,55536],{"class":81},"'开启剑与雪的黑暗传说!'",[47,55538,55518],{"class":221},[47,55540,55541],{"class":81},"'rgba(43,35,26)'",[47,55543,55524],{"class":221},[47,55545,55546,55548,55551,55553,55556,55558,55561],{"class":49,"line":16948},[47,55547,55506],{"class":221},[47,55549,55550],{"class":81},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[47,55552,55512],{"class":221},[47,55554,55555],{"class":81},"'真正的jo厨出现了!'",[47,55557,55518],{"class":221},[47,55559,55560],{"class":81},"'rgba(36,31,33)'",[47,55562,55524],{"class":221},[47,55564,55565,55567,55570,55572,55575,55577,55580],{"class":49,"line":16962},[47,55566,55506],{"class":221},[47,55568,55569],{"class":81},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[47,55571,55512],{"class":221},[47,55573,55574],{"class":81},"'李玉刚:让世界通过b站看到东方大国文化'",[47,55576,55518],{"class":221},[47,55578,55579],{"class":81},"'rgba(139,98,66)'",[47,55581,55524],{"class":221},[47,55583,55584,55586,55589,55591,55594,55596,55599],{"class":49,"line":16974},[47,55585,55506],{"class":221},[47,55587,55588],{"class":81},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[47,55590,55512],{"class":221},[47,55592,55593],{"class":81},"'快来分享你的寒假日常吧'",[47,55595,55518],{"class":221},[47,55597,55598],{"class":81},"'rgba(67,90,92)'",[47,55600,55524],{"class":221},[47,55602,55603,55605,55608,55610,55613,55615,55618],{"class":49,"line":16979},[47,55604,55506],{"class":221},[47,55606,55607],{"class":81},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[47,55609,55512],{"class":221},[47,55611,55612],{"class":81},"'哔哩哔哩小年YEAR'",[47,55614,55518],{"class":221},[47,55616,55617],{"class":81},"'rgba(166,131,143)'",[47,55619,55524],{"class":221},[47,55621,55622,55624,55627,55629,55632,55634,55637],{"class":49,"line":16992},[47,55623,55506],{"class":221},[47,55625,55626],{"class":81},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[47,55628,55512],{"class":221},[47,55630,55631],{"class":81},"'一站式解决你的电脑配置问题'",[47,55633,55518],{"class":221},[47,55635,55636],{"class":81},"'rgba(53,29,25)'",[47,55638,55524],{"class":221},[47,55640,55641,55643,55646,55648,55651,55653,55656],{"class":49,"line":16997},[47,55642,55506],{"class":221},[47,55644,55645],{"class":81},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[47,55647,55512],{"class":221},[47,55649,55650],{"class":81},"'谁不想和小猫咪贴贴呢?'",[47,55652,55518],{"class":221},[47,55654,55655],{"class":81},"'rgba(99,72,114)'",[47,55657,55658],{"class":221}," }\n",[47,55660,55661],{"class":49,"line":17002},[47,55662,53163],{"class":221},[47,55664,55665,55667,55670,55672,55674,55676,55678,55681],{"class":49,"line":17007},[47,55666,11314],{"class":217},[47,55668,55669],{"class":85}," img",[47,55671,13657],{"class":217},[47,55673,54450],{"class":221},[47,55675,54453],{"class":53},[47,55677,222],{"class":221},[47,55679,55680],{"class":81},"'.slider-wrapper img'",[47,55682,228],{"class":221},[47,55684,55685,55687,55689,55691,55693,55695,55697,55700],{"class":49,"line":17020},[47,55686,11314],{"class":217},[47,55688,6918],{"class":85},[47,55690,13657],{"class":217},[47,55692,54450],{"class":221},[47,55694,54453],{"class":53},[47,55696,222],{"class":221},[47,55698,55699],{"class":81},"'.slider-footer p'",[47,55701,228],{"class":221},[47,55703,55704,55706,55709,55711,55713,55715,55717,55720],{"class":49,"line":17025},[47,55705,11314],{"class":217},[47,55707,55708],{"class":85}," color",[47,55710,13657],{"class":217},[47,55712,54450],{"class":221},[47,55714,54453],{"class":53},[47,55716,222],{"class":221},[47,55718,55719],{"class":81},"'.slider-footer'",[47,55721,228],{"class":221},[47,55723,55724,55726,55729,55731,55733,55736,55738,55741],{"class":49,"line":32687},[47,55725,11314],{"class":217},[47,55727,55728],{"class":85}," lis",[47,55730,13657],{"class":217},[47,55732,54450],{"class":221},[47,55734,55735],{"class":53},"querySelectorAll",[47,55737,222],{"class":221},[47,55739,55740],{"class":81},"'.slider-footer ul li'",[47,55742,228],{"class":221},[47,55744,55745,55747,55749,55751],{"class":49,"line":32693},[47,55746,52273],{"class":217},[47,55748,9531],{"class":221},[47,55750,267],{"class":217},[47,55752,55753],{"class":85}," 1\n",[47,55755,55756,55758,55761,55763,55765,55767,55769],{"class":49,"line":32699},[47,55757,52273],{"class":217},[47,55759,55760],{"class":221}," timer ",[47,55762,267],{"class":217},[47,55764,54498],{"class":53},[47,55766,222],{"class":221},[47,55768,54503],{"class":217},[47,55770,54506],{"class":221},[47,55772,55773,55776,55778],{"class":49,"line":32705},[47,55774,55775],{"class":221},"      img.src ",[47,55777,267],{"class":217},[47,55779,55780],{"class":221}," arrImage[i].url\n",[47,55782,55783,55786,55788],{"class":49,"line":32711},[47,55784,55785],{"class":221},"      p.innerHTML ",[47,55787,267],{"class":217},[47,55789,55790],{"class":221}," arrImage[i].title\n",[47,55792,55793,55796,55798],{"class":49,"line":32722},[47,55794,55795],{"class":221},"      color.style.backgroundColor ",[47,55797,267],{"class":217},[47,55799,55800],{"class":221}," arrImage[i].color\n",[47,55802,55803],{"class":49,"line":32728},[47,55804,55805],{"class":279},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[47,55807,55808],{"class":49,"line":32748},[47,55809,55810],{"class":279},"      \u002F\u002F li.classList.add('activate')\n",[47,55812,55813],{"class":49,"line":32754},[47,55814,55815],{"class":279},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[47,55817,55818],{"class":49,"line":32765},[47,55819,55820],{"class":279},"      \u002F\u002F lis[i].classList.remove('activate')\n",[47,55822,55823,55826,55828,55830,55833,55836,55839,55841,55844],{"class":49,"line":32771},[47,55824,55825],{"class":221},"      document.",[47,55827,54453],{"class":53},[47,55829,222],{"class":221},[47,55831,55832],{"class":81},"'.activate'",[47,55834,55835],{"class":221},")?.classList.",[47,55837,55838],{"class":53},"toggle",[47,55840,222],{"class":221},[47,55842,55843],{"class":81},"'activate'",[47,55845,228],{"class":221},[47,55847,55848,55851,55853,55855,55857],{"class":49,"line":32777},[47,55849,55850],{"class":221},"      lis[i].classList.",[47,55852,5427],{"class":53},[47,55854,222],{"class":221},[47,55856,55843],{"class":81},[47,55858,228],{"class":221},[47,55860,55861],{"class":49,"line":32783},[47,55862,2493],{"emptyLinePlaceholder":145},[47,55864,55865,55868,55870,55872,55874,55876,55878,55880,55883],{"class":49,"line":32789},[47,55866,55867],{"class":221},"      i ",[47,55869,267],{"class":217},[47,55871,54537],{"class":221},[47,55873,700],{"class":217},[47,55875,25172],{"class":85},[47,55877,13807],{"class":221},[47,55879,547],{"class":217},[47,55881,55882],{"class":221}," arrImage.",[47,55884,55885],{"class":85},"length\n",[47,55887,55888],{"class":49,"line":32795},[47,55889,2493],{"emptyLinePlaceholder":145},[47,55891,55892,55894,55896],{"class":49,"line":32801},[47,55893,54589],{"class":221},[47,55895,6503],{"class":85},[47,55897,228],{"class":221},[47,55899,55900,55902,55904],{"class":49,"line":32807},[47,55901,52471],{"class":221},[47,55903,51867],{"class":51354},[47,55905,51361],{"class":221},[47,55907,55908,55910,55912],{"class":49,"line":32827},[47,55909,51839],{"class":221},[47,55911,51854],{"class":51354},[47,55913,51361],{"class":221},[47,55915,55916],{"class":49,"line":32833},[47,55917,2493],{"emptyLinePlaceholder":145},[47,55919,55920,55922,55924],{"class":49,"line":32849},[47,55921,51839],{"class":221},[47,55923,50689],{"class":51354},[47,55925,51361],{"class":221},[19,55927,55928],{},[1556,55929],{"alt":43,"src":55930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,55932,55933],{},"?.就是短路保护,确保输出正常进行",[19,55935,55936],{},"不要忘记取余%,有时候可以用",[19,55938,55939],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[171,55941,55942],{"start":92},[109,55943,55944],{},"法2",[38,55946,55948],{"className":50687,"code":55947,"language":50689,"meta":43,"style":43},"\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",[26,55949,55950,55960,55974,55978,55986,56000,56020,56032,56040,56046,56056,56066,56070,56074,56080,56090,56094,56098,56104,56114,56126,56138,56152,56156,56160,56166,56176,56186,56196,56208,56220,56230,56234,56238,56246,56256,56268,56280,56292,56296,56300,56306,56316,56328,56340,56350,56360,56370,56382,56394,56398,56402,56410,56422,56434,56460,56472,56476,56480,56486,56496,56500,56508,56516,56520,56528,56542,56556,56576,56584,56598,56610,56618,56636,56648,56660,56672,56684,56696,56708,56720,56728,56736,56744,56752,56763,56779,56795,56811,56827,56843,56859,56875,56891,56895,56900,56918,56936,56946,56951,56956,56967,56973,56988,56997,57001,57006,57015,57020,57029,57034,57039,57044,57067,57097,57101,57109,57113,57121,57129,57133],{"__ignoreMap":43},[47,55951,55952,55954,55956,55958],{"class":49,"line":50},[47,55953,51351],{"class":221},[47,55955,51355],{"class":51354},[47,55957,51358],{"class":53},[47,55959,51361],{"class":221},[47,55961,55962,55964,55966,55968,55970,55972],{"class":49,"line":92},[47,55963,1129],{"class":221},[47,55965,50689],{"class":51354},[47,55967,51370],{"class":53},[47,55969,267],{"class":221},[47,55971,51375],{"class":81},[47,55973,51361],{"class":221},[47,55975,55976],{"class":49,"line":1273},[47,55977,2493],{"emptyLinePlaceholder":145},[47,55979,55980,55982,55984],{"class":49,"line":1288},[47,55981,1129],{"class":221},[47,55983,51388],{"class":51354},[47,55985,51361],{"class":221},[47,55987,55988,55990,55992,55994,55996,55998],{"class":49,"line":1294},[47,55989,52198],{"class":221},[47,55991,51398],{"class":51354},[47,55993,51401],{"class":53},[47,55995,267],{"class":221},[47,55997,51406],{"class":81},[47,55999,51361],{"class":221},[47,56001,56002,56004,56006,56008,56010,56012,56014,56016,56018],{"class":49,"line":1308},[47,56003,52198],{"class":221},[47,56005,51398],{"class":51354},[47,56007,15013],{"class":53},[47,56009,267],{"class":221},[47,56011,51445],{"class":81},[47,56013,51425],{"class":53},[47,56015,267],{"class":221},[47,56017,51452],{"class":81},[47,56019,51361],{"class":221},[47,56021,56022,56024,56026,56028,56030],{"class":49,"line":1314},[47,56023,52198],{"class":221},[47,56025,51461],{"class":51354},[47,56027,51464],{"class":221},[47,56029,51461],{"class":51354},[47,56031,51361],{"class":221},[47,56033,56034,56036,56038],{"class":49,"line":1405},[47,56035,52198],{"class":221},[47,56037,134],{"class":51354},[47,56039,51361],{"class":221},[47,56041,56042,56044],{"class":49,"line":1411},[47,56043,6496],{"class":51354},[47,56045,15665],{"class":221},[47,56047,56048,56050,56052,56054],{"class":49,"line":1423},[47,56049,54749],{"class":85},[47,56051,51491],{"class":221},[47,56053,411],{"class":85},[47,56055,1384],{"class":221},[47,56057,56058,56060,56062,56064],{"class":49,"line":1706},[47,56059,54760],{"class":85},[47,56061,51491],{"class":221},[47,56063,411],{"class":85},[47,56065,1384],{"class":221},[47,56067,56068],{"class":49,"line":1711},[47,56069,2280],{"class":221},[47,56071,56072],{"class":49,"line":1717},[47,56073,2493],{"emptyLinePlaceholder":145},[47,56075,56076,56078],{"class":49,"line":1722},[47,56077,54779],{"class":51354},[47,56079,15665],{"class":221},[47,56081,56082,56084,56086,56088],{"class":49,"line":1736},[47,56083,54786],{"class":85},[47,56085,51491],{"class":221},[47,56087,54791],{"class":85},[47,56089,1384],{"class":221},[47,56091,56092],{"class":49,"line":1741},[47,56093,2280],{"class":221},[47,56095,56096],{"class":49,"line":1747},[47,56097,2493],{"emptyLinePlaceholder":145},[47,56099,56100,56102],{"class":49,"line":1768},[47,56101,54806],{"class":53},[47,56103,15665],{"class":221},[47,56105,56106,56108,56110,56112],{"class":49,"line":1773},[47,56107,54813],{"class":85},[47,56109,51491],{"class":221},[47,56111,54818],{"class":85},[47,56113,1384],{"class":221},[47,56115,56116,56118,56120,56122,56124],{"class":49,"line":1787},[47,56117,54825],{"class":85},[47,56119,51491],{"class":221},[47,56121,54830],{"class":85},[47,56123,51546],{"class":217},[47,56125,1384],{"class":221},[47,56127,56128,56130,56132,56134,56136],{"class":49,"line":1792},[47,56129,54839],{"class":85},[47,56131,51491],{"class":221},[47,56133,1633],{"class":85},[47,56135,51546],{"class":217},[47,56137,1384],{"class":221},[47,56139,56140,56142,56144,56146,56148,56150],{"class":49,"line":1821},[47,56141,54760],{"class":85},[47,56143,51491],{"class":221},[47,56145,530],{"class":85},[47,56147,51546],{"class":217},[47,56149,51610],{"class":85},[47,56151,1384],{"class":221},[47,56153,56154],{"class":49,"line":1826},[47,56155,2280],{"class":221},[47,56157,56158],{"class":49,"line":1843},[47,56159,2493],{"emptyLinePlaceholder":145},[47,56161,56162,56164],{"class":49,"line":1848},[47,56163,54874],{"class":53},[47,56165,15665],{"class":221},[47,56167,56168,56170,56172,56174],{"class":49,"line":1853},[47,56169,54813],{"class":85},[47,56171,51491],{"class":221},[47,56173,54885],{"class":85},[47,56175,1384],{"class":221},[47,56177,56178,56180,56182,56184],{"class":49,"line":1858},[47,56179,54892],{"class":85},[47,56181,51491],{"class":221},[47,56183,411],{"class":85},[47,56185,1384],{"class":221},[47,56187,56188,56190,56192,56194],{"class":49,"line":1872},[47,56189,54903],{"class":85},[47,56191,51491],{"class":221},[47,56193,411],{"class":85},[47,56195,1384],{"class":221},[47,56197,56198,56200,56202,56204,56206],{"class":49,"line":1877},[47,56199,54825],{"class":85},[47,56201,51491],{"class":221},[47,56203,530],{"class":85},[47,56205,547],{"class":217},[47,56207,1384],{"class":221},[47,56209,56210,56212,56214,56216,56218],{"class":49,"line":2670},[47,56211,54839],{"class":85},[47,56213,51491],{"class":221},[47,56215,794],{"class":85},[47,56217,547],{"class":217},[47,56219,1384],{"class":221},[47,56221,56222,56224,56226,56228],{"class":49,"line":2684},[47,56223,54938],{"class":85},[47,56225,51491],{"class":221},[47,56227,54943],{"class":85},[47,56229,1384],{"class":221},[47,56231,56232],{"class":49,"line":2692},[47,56233,2280],{"class":221},[47,56235,56236],{"class":49,"line":2697},[47,56237,2493],{"emptyLinePlaceholder":145},[47,56239,56240,56242,56244],{"class":49,"line":2703},[47,56241,54874],{"class":53},[47,56243,6918],{"class":51354},[47,56245,15665],{"class":221},[47,56247,56248,56250,56252,56254],{"class":49,"line":2709},[47,56249,54813],{"class":85},[47,56251,51491],{"class":221},[47,56253,54885],{"class":85},[47,56255,1384],{"class":221},[47,56257,56258,56260,56262,56264,56266],{"class":49,"line":2714},[47,56259,54976],{"class":85},[47,56261,51491],{"class":221},[47,56263,1120],{"class":85},[47,56265,51546],{"class":217},[47,56267,1384],{"class":221},[47,56269,56270,56272,56274,56276,56278],{"class":49,"line":8041},[47,56271,54892],{"class":85},[47,56273,51491],{"class":221},[47,56275,919],{"class":85},[47,56277,51546],{"class":217},[47,56279,1384],{"class":221},[47,56281,56282,56284,56286,56288,56290],{"class":49,"line":8065},[47,56283,55001],{"class":85},[47,56285,51491],{"class":221},[47,56287,538],{"class":85},[47,56289,51546],{"class":217},[47,56291,1384],{"class":221},[47,56293,56294],{"class":49,"line":8070},[47,56295,2280],{"class":221},[47,56297,56298],{"class":49,"line":8076},[47,56299,2493],{"emptyLinePlaceholder":145},[47,56301,56302,56304],{"class":49,"line":8103},[47,56303,55022],{"class":51354},[47,56305,15665],{"class":221},[47,56307,56308,56310,56312,56314],{"class":49,"line":8108},[47,56309,54813],{"class":85},[47,56311,51491],{"class":221},[47,56313,54885],{"class":85},[47,56315,1384],{"class":221},[47,56317,56318,56320,56322,56324,56326],{"class":49,"line":8114},[47,56319,55001],{"class":85},[47,56321,51491],{"class":221},[47,56323,1000],{"class":85},[47,56325,51546],{"class":217},[47,56327,1384],{"class":221},[47,56329,56330,56332,56334,56336,56338],{"class":49,"line":8126},[47,56331,54892],{"class":85},[47,56333,51491],{"class":221},[47,56335,919],{"class":85},[47,56337,51546],{"class":217},[47,56339,1384],{"class":221},[47,56341,56342,56344,56346,56348],{"class":49,"line":8138},[47,56343,55063],{"class":85},[47,56345,51491],{"class":221},[47,56347,51531],{"class":85},[47,56349,1384],{"class":221},[47,56351,56352,56354,56356,56358],{"class":49,"line":8150},[47,56353,55074],{"class":85},[47,56355,51491],{"class":221},[47,56357,51722],{"class":85},[47,56359,1384],{"class":221},[47,56361,56362,56364,56366,56368],{"class":49,"line":9809},[47,56363,54813],{"class":85},[47,56365,51491],{"class":221},[47,56367,54885],{"class":85},[47,56369,1384],{"class":221},[47,56371,56372,56374,56376,56378,56380],{"class":49,"line":9834},[47,56373,54825],{"class":85},[47,56375,51491],{"class":221},[47,56377,4085],{"class":85},[47,56379,51546],{"class":217},[47,56381,1384],{"class":221},[47,56383,56384,56386,56388,56390,56392],{"class":49,"line":9857},[47,56385,54839],{"class":85},[47,56387,51491],{"class":221},[47,56389,919],{"class":85},[47,56391,51546],{"class":217},[47,56393,1384],{"class":221},[47,56395,56396],{"class":49,"line":9881},[47,56397,2280],{"class":221},[47,56399,56400],{"class":49,"line":9886},[47,56401,2493],{"emptyLinePlaceholder":145},[47,56403,56404,56406,56408],{"class":49,"line":9891},[47,56405,55022],{"class":51354},[47,56407,55129],{"class":51354},[47,56409,15665],{"class":221},[47,56411,56412,56414,56416,56418,56420],{"class":49,"line":9896},[47,56413,54825],{"class":85},[47,56415,51491],{"class":221},[47,56417,919],{"class":85},[47,56419,51546],{"class":217},[47,56421,1384],{"class":221},[47,56423,56424,56426,56428,56430,56432],{"class":49,"line":9905},[47,56425,54839],{"class":85},[47,56427,51491],{"class":221},[47,56429,919],{"class":85},[47,56431,51546],{"class":217},[47,56433,1384],{"class":221},[47,56435,56436,56438,56440,56442,56444,56446,56448,56450,56452,56454,56456,56458],{"class":49,"line":9910},[47,56437,54938],{"class":85},[47,56439,51491],{"class":221},[47,56441,55164],{"class":85},[47,56443,222],{"class":221},[47,56445,411],{"class":85},[47,56447,12528],{"class":221},[47,56449,411],{"class":85},[47,56451,12528],{"class":221},[47,56453,411],{"class":85},[47,56455,12528],{"class":221},[47,56457,55181],{"class":85},[47,56459,2812],{"class":221},[47,56461,56462,56464,56466,56468,56470],{"class":49,"line":9916},[47,56463,55188],{"class":85},[47,56465,51491],{"class":221},[47,56467,665],{"class":85},[47,56469,51546],{"class":217},[47,56471,1384],{"class":221},[47,56473,56474],{"class":49,"line":9937},[47,56475,2280],{"class":221},[47,56477,56478],{"class":49,"line":9943},[47,56479,2493],{"emptyLinePlaceholder":145},[47,56481,56482,56484],{"class":49,"line":9957},[47,56483,55209],{"class":53},[47,56485,15665],{"class":221},[47,56487,56488,56490,56492,56494],{"class":49,"line":9963},[47,56489,54938],{"class":85},[47,56491,51491],{"class":221},[47,56493,55220],{"class":85},[47,56495,1384],{"class":221},[47,56497,56498],{"class":49,"line":9990},[47,56499,2280],{"class":221},[47,56501,56502,56504,56506],{"class":49,"line":9999},[47,56503,52471],{"class":221},[47,56505,134],{"class":51354},[47,56507,51361],{"class":221},[47,56509,56510,56512,56514],{"class":49,"line":10005},[47,56511,51839],{"class":221},[47,56513,51388],{"class":51354},[47,56515,51361],{"class":221},[47,56517,56518],{"class":49,"line":10013},[47,56519,2493],{"emptyLinePlaceholder":145},[47,56521,56522,56524,56526],{"class":49,"line":10018},[47,56523,1129],{"class":221},[47,56525,51854],{"class":51354},[47,56527,51361],{"class":221},[47,56529,56530,56532,56534,56536,56538,56540],{"class":49,"line":16697},[47,56531,52198],{"class":221},[47,56533,51665],{"class":51354},[47,56535,53540],{"class":53},[47,56537,267],{"class":221},[47,56539,53545],{"class":81},[47,56541,51361],{"class":221},[47,56543,56544,56546,56548,56550,56552,56554],{"class":49,"line":16703},[47,56545,51395],{"class":221},[47,56547,51665],{"class":51354},[47,56549,53540],{"class":53},[47,56551,267],{"class":221},[47,56553,55281],{"class":81},[47,56555,51361],{"class":221},[47,56557,56558,56560,56562,56564,56566,56568,56570,56572,56574],{"class":49,"line":16726},[47,56559,55288],{"class":221},[47,56561,1556],{"class":51354},[47,56563,55293],{"class":53},[47,56565,267],{"class":221},[47,56567,55298],{"class":81},[47,56569,55301],{"class":53},[47,56571,267],{"class":221},[47,56573,7745],{"class":81},[47,56575,51361],{"class":221},[47,56577,56578,56580,56582],{"class":49,"line":16732},[47,56579,51830],{"class":221},[47,56581,51665],{"class":51354},[47,56583,51361],{"class":221},[47,56585,56586,56588,56590,56592,56594,56596],{"class":49,"line":16755},[47,56587,51395],{"class":221},[47,56589,51665],{"class":51354},[47,56591,53540],{"class":53},[47,56593,267],{"class":221},[47,56595,55328],{"class":81},[47,56597,51361],{"class":221},[47,56599,56600,56602,56604,56606,56608],{"class":49,"line":16769},[47,56601,55288],{"class":221},[47,56603,19],{"class":51354},[47,56605,55339],{"class":221},[47,56607,19],{"class":51354},[47,56609,51361],{"class":221},[47,56611,56612,56614,56616],{"class":49,"line":16789},[47,56613,55288],{"class":221},[47,56615,106],{"class":51354},[47,56617,51361],{"class":221},[47,56619,56620,56622,56624,56626,56628,56630,56632,56634],{"class":49,"line":16795},[47,56621,55356],{"class":221},[47,56623,109],{"class":51354},[47,56625,53540],{"class":53},[47,56627,267],{"class":221},[47,56629,55365],{"class":81},[47,56631,55368],{"class":221},[47,56633,109],{"class":51354},[47,56635,51361],{"class":221},[47,56637,56638,56640,56642,56644,56646],{"class":49,"line":16806},[47,56639,55356],{"class":221},[47,56641,109],{"class":51354},[47,56643,55368],{"class":221},[47,56645,109],{"class":51354},[47,56647,51361],{"class":221},[47,56649,56650,56652,56654,56656,56658],{"class":49,"line":16829},[47,56651,55356],{"class":221},[47,56653,109],{"class":51354},[47,56655,55368],{"class":221},[47,56657,109],{"class":51354},[47,56659,51361],{"class":221},[47,56661,56662,56664,56666,56668,56670],{"class":49,"line":16851},[47,56663,55356],{"class":221},[47,56665,109],{"class":51354},[47,56667,55368],{"class":221},[47,56669,109],{"class":51354},[47,56671,51361],{"class":221},[47,56673,56674,56676,56678,56680,56682],{"class":49,"line":16856},[47,56675,55356],{"class":221},[47,56677,109],{"class":51354},[47,56679,55368],{"class":221},[47,56681,109],{"class":51354},[47,56683,51361],{"class":221},[47,56685,56686,56688,56690,56692,56694],{"class":49,"line":16862},[47,56687,55356],{"class":221},[47,56689,109],{"class":51354},[47,56691,55368],{"class":221},[47,56693,109],{"class":51354},[47,56695,51361],{"class":221},[47,56697,56698,56700,56702,56704,56706],{"class":49,"line":16876},[47,56699,55356],{"class":221},[47,56701,109],{"class":51354},[47,56703,55368],{"class":221},[47,56705,109],{"class":51354},[47,56707,51361],{"class":221},[47,56709,56710,56712,56714,56716,56718],{"class":49,"line":16889},[47,56711,55356],{"class":221},[47,56713,109],{"class":51354},[47,56715,55368],{"class":221},[47,56717,109],{"class":51354},[47,56719,51361],{"class":221},[47,56721,56722,56724,56726],{"class":49,"line":16894},[47,56723,55461],{"class":221},[47,56725,106],{"class":51354},[47,56727,51361],{"class":221},[47,56729,56730,56732,56734],{"class":49,"line":16908},[47,56731,51830],{"class":221},[47,56733,51665],{"class":51354},[47,56735,51361],{"class":221},[47,56737,56738,56740,56742],{"class":49,"line":16913},[47,56739,52471],{"class":221},[47,56741,51665],{"class":51354},[47,56743,51361],{"class":221},[47,56745,56746,56748,56750],{"class":49,"line":16919},[47,56747,52198],{"class":221},[47,56749,51867],{"class":51354},[47,56751,51361],{"class":221},[47,56753,56754,56756,56759,56761],{"class":49,"line":16924},[47,56755,11314],{"class":217},[47,56757,56758],{"class":85}," sliderData",[47,56760,13657],{"class":217},[47,56762,55501],{"class":221},[47,56764,56765,56767,56769,56771,56773,56775,56777],{"class":49,"line":16938},[47,56766,55506],{"class":221},[47,56768,55509],{"class":81},[47,56770,55512],{"class":221},[47,56772,55515],{"class":81},[47,56774,55518],{"class":221},[47,56776,55521],{"class":81},[47,56778,55524],{"class":221},[47,56780,56781,56783,56785,56787,56789,56791,56793],{"class":49,"line":16943},[47,56782,55506],{"class":221},[47,56784,55531],{"class":81},[47,56786,55512],{"class":221},[47,56788,55536],{"class":81},[47,56790,55518],{"class":221},[47,56792,55541],{"class":81},[47,56794,55524],{"class":221},[47,56796,56797,56799,56801,56803,56805,56807,56809],{"class":49,"line":16948},[47,56798,55506],{"class":221},[47,56800,55550],{"class":81},[47,56802,55512],{"class":221},[47,56804,55555],{"class":81},[47,56806,55518],{"class":221},[47,56808,55560],{"class":81},[47,56810,55524],{"class":221},[47,56812,56813,56815,56817,56819,56821,56823,56825],{"class":49,"line":16962},[47,56814,55506],{"class":221},[47,56816,55569],{"class":81},[47,56818,55512],{"class":221},[47,56820,55574],{"class":81},[47,56822,55518],{"class":221},[47,56824,55579],{"class":81},[47,56826,55524],{"class":221},[47,56828,56829,56831,56833,56835,56837,56839,56841],{"class":49,"line":16974},[47,56830,55506],{"class":221},[47,56832,55588],{"class":81},[47,56834,55512],{"class":221},[47,56836,55593],{"class":81},[47,56838,55518],{"class":221},[47,56840,55598],{"class":81},[47,56842,55524],{"class":221},[47,56844,56845,56847,56849,56851,56853,56855,56857],{"class":49,"line":16979},[47,56846,55506],{"class":221},[47,56848,55607],{"class":81},[47,56850,55512],{"class":221},[47,56852,55612],{"class":81},[47,56854,55518],{"class":221},[47,56856,55617],{"class":81},[47,56858,55524],{"class":221},[47,56860,56861,56863,56865,56867,56869,56871,56873],{"class":49,"line":16992},[47,56862,55506],{"class":221},[47,56864,55626],{"class":81},[47,56866,55512],{"class":221},[47,56868,55631],{"class":81},[47,56870,55518],{"class":221},[47,56872,55636],{"class":81},[47,56874,55524],{"class":221},[47,56876,56877,56879,56881,56883,56885,56887,56889],{"class":49,"line":16997},[47,56878,55506],{"class":221},[47,56880,55645],{"class":81},[47,56882,55512],{"class":221},[47,56884,55650],{"class":81},[47,56886,55518],{"class":221},[47,56888,55655],{"class":81},[47,56890,55658],{"class":221},[47,56892,56893],{"class":49,"line":17002},[47,56894,53163],{"class":221},[47,56896,56897],{"class":49,"line":17007},[47,56898,56899],{"class":279},"    \u002F\u002F 1.获取元素\n",[47,56901,56902,56904,56906,56908,56910,56912,56914,56916],{"class":49,"line":17020},[47,56903,11314],{"class":217},[47,56905,55669],{"class":85},[47,56907,13657],{"class":217},[47,56909,54450],{"class":221},[47,56911,54453],{"class":53},[47,56913,222],{"class":221},[47,56915,55680],{"class":81},[47,56917,228],{"class":221},[47,56919,56920,56922,56924,56926,56928,56930,56932,56934],{"class":49,"line":17025},[47,56921,11314],{"class":217},[47,56923,6918],{"class":85},[47,56925,13657],{"class":217},[47,56927,54450],{"class":221},[47,56929,54453],{"class":53},[47,56931,222],{"class":221},[47,56933,55699],{"class":81},[47,56935,228],{"class":221},[47,56937,56938,56940,56942,56944],{"class":49,"line":32687},[47,56939,52273],{"class":217},[47,56941,9531],{"class":221},[47,56943,267],{"class":217},[47,56945,47387],{"class":85},[47,56947,56948],{"class":49,"line":32693},[47,56949,56950],{"class":279},"    \u002F\u002F 2.开启定时器\n",[47,56952,56953],{"class":49,"line":32699},[47,56954,56955],{"class":279},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[47,56957,56958,56961,56963,56965],{"class":49,"line":32705},[47,56959,56960],{"class":53},"    setInterval",[47,56962,222],{"class":221},[47,56964,54503],{"class":217},[47,56966,54506],{"class":221},[47,56968,56969,56971],{"class":49,"line":32711},[47,56970,54511],{"class":221},[47,56972,2795],{"class":217},[47,56974,56975,56977,56979,56981,56984,56986],{"class":49,"line":32722},[47,56976,54534],{"class":217},[47,56978,54537],{"class":221},[47,56980,1804],{"class":217},[47,56982,56983],{"class":221}," sliderData.",[47,56985,52022],{"class":85},[47,56987,12535],{"class":221},[47,56989,56990,56993,56995],{"class":49,"line":32728},[47,56991,56992],{"class":221},"        i ",[47,56994,267],{"class":217},[47,56996,47387],{"class":85},[47,56998,56999],{"class":49,"line":32748},[47,57000,52452],{"class":221},[47,57002,57003],{"class":49,"line":32754},[47,57004,57005],{"class":279},"      \u002F\u002F 更换图片路径\n",[47,57007,57008,57010,57012],{"class":49,"line":32765},[47,57009,55775],{"class":221},[47,57011,267],{"class":217},[47,57013,57014],{"class":221}," sliderData[i].url\n",[47,57016,57017],{"class":49,"line":32771},[47,57018,57019],{"class":279},"      \u002F\u002F 把文字写到p里面\n",[47,57021,57022,57024,57026],{"class":49,"line":32777},[47,57023,55785],{"class":221},[47,57025,267],{"class":217},[47,57027,57028],{"class":221}," sliderData[i].title\n",[47,57030,57031],{"class":49,"line":32783},[47,57032,57033],{"class":279},"      \u002F\u002F 小圆点\n",[47,57035,57036],{"class":49,"line":32789},[47,57037,57038],{"class":279},"      \u002F\u002F 先删除以前的active\n",[47,57040,57041],{"class":49,"line":32795},[47,57042,57043],{"class":279},"      \u002F\u002F 只让当前li添加active\n",[47,57045,57046,57048,57050,57052,57055,57058,57061,57063,57065],{"class":49,"line":32801},[47,57047,55825],{"class":221},[47,57049,54453],{"class":53},[47,57051,222],{"class":221},[47,57053,57054],{"class":81},"'.slider-footer .activate'",[47,57056,57057],{"class":221},").classList.",[47,57059,57060],{"class":53},"remove",[47,57062,222],{"class":221},[47,57064,55843],{"class":81},[47,57066,228],{"class":221},[47,57068,57069,57071,57073,57075,57078,57080,57082,57084,57087,57089,57091,57093,57095],{"class":49,"line":32807},[47,57070,55825],{"class":221},[47,57072,54453],{"class":53},[47,57074,222],{"class":221},[47,57076,57077],{"class":81},"`.slider-footer ul li:nth-child(${",[47,57079,660],{"class":221},[47,57081,45620],{"class":217},[47,57083,25172],{"class":85},[47,57085,57086],{"class":81},"})`",[47,57088,57057],{"class":221},[47,57090,5427],{"class":53},[47,57092,222],{"class":221},[47,57094,55843],{"class":81},[47,57096,228],{"class":221},[47,57098,57099],{"class":49,"line":32827},[47,57100,2493],{"emptyLinePlaceholder":145},[47,57102,57103,57105,57107],{"class":49,"line":32833},[47,57104,54589],{"class":221},[47,57106,6503],{"class":85},[47,57108,228],{"class":221},[47,57110,57111],{"class":49,"line":32849},[47,57112,2493],{"emptyLinePlaceholder":145},[47,57114,57115,57117,57119],{"class":49,"line":32855},[47,57116,52471],{"class":221},[47,57118,51867],{"class":51354},[47,57120,51361],{"class":221},[47,57122,57123,57125,57127],{"class":49,"line":32869},[47,57124,51839],{"class":221},[47,57126,51854],{"class":51354},[47,57128,51361],{"class":221},[47,57130,57131],{"class":49,"line":32875},[47,57132,2493],{"emptyLinePlaceholder":145},[47,57134,57135,57137,57139],{"class":49,"line":32890},[47,57136,51839],{"class":221},[47,57138,50689],{"class":51354},[47,57140,51361],{"class":221},[187,57142,57144],{"id":57143},"_317-重要知识点","3.1.7 重要知识点",[19,57146,57147,57148],{},"浏览器在渲染文本时， ",[369,57149,57150],{},"没有空格或换行符就没有“断行点”",[19,57152,57153],{},[1556,57154],{"alt":43,"src":57155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,57157,57158],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,57160,57161],{},[1556,57162],{"alt":43,"src":57163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,57165,57166],{},[1556,57167],{"alt":43,"src":57168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,57170,57172],{"id":57171},"_32-dom事件基础","3.2 DOM事件基础",[187,57174,57176],{"id":57175},"_321-事件监听","3.2.1 事件监听",[19,57178,57179],{},[1556,57180],{"alt":43,"src":57181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,57183,57184],{},"事件监听有响应的发生",[19,57186,57187],{},[1556,57188],{"alt":43,"src":57189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,57191,57192],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,57194,57195],{},"对于有名函数,要执行的函数名后边不要加()",[187,57197,57199],{"id":57198},"_322-随机点名案例","3.2.2 随机点名案例",[38,57201,57203],{"className":50687,"code":57202,"language":50689,"meta":43,"style":43},"\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",[26,57204,57205,57215,57229,57233,57241,57255,57275,57287,57295,57301,57311,57321,57325,57329,57336,57347,57351,57355,57361,57373,57387,57397,57409,57422,57426,57430,57437,57441,57454,57466,57478,57482,57486,57490,57497,57507,57511,57515,57524,57536,57548,57563,57567,57575,57583,57587,57595,57608,57622,57635,57655,57663,57678,57698,57718,57726,57730,57738,57743,57779,57799,57804,57823,57828,57839,57844,57855,57860,57879,57894,57899,57925,57935,57944,57949,57965,57970,57975,57980,57995,57999,58003,58008,58027,58044,58052,58057,58072,58076,58080,58088,58096,58100],{"__ignoreMap":43},[47,57206,57207,57209,57211,57213],{"class":49,"line":50},[47,57208,51351],{"class":221},[47,57210,51355],{"class":51354},[47,57212,51358],{"class":53},[47,57214,51361],{"class":221},[47,57216,57217,57219,57221,57223,57225,57227],{"class":49,"line":92},[47,57218,1129],{"class":221},[47,57220,50689],{"class":51354},[47,57222,51370],{"class":53},[47,57224,267],{"class":221},[47,57226,51375],{"class":81},[47,57228,51361],{"class":221},[47,57230,57231],{"class":49,"line":1273},[47,57232,2493],{"emptyLinePlaceholder":145},[47,57234,57235,57237,57239],{"class":49,"line":1288},[47,57236,1129],{"class":221},[47,57238,51388],{"class":51354},[47,57240,51361],{"class":221},[47,57242,57243,57245,57247,57249,57251,57253],{"class":49,"line":1294},[47,57244,52198],{"class":221},[47,57246,51398],{"class":51354},[47,57248,51401],{"class":53},[47,57250,267],{"class":221},[47,57252,51406],{"class":81},[47,57254,51361],{"class":221},[47,57256,57257,57259,57261,57263,57265,57267,57269,57271,57273],{"class":49,"line":1308},[47,57258,52198],{"class":221},[47,57260,51398],{"class":51354},[47,57262,15013],{"class":53},[47,57264,267],{"class":221},[47,57266,51445],{"class":81},[47,57268,51425],{"class":53},[47,57270,267],{"class":221},[47,57272,51452],{"class":81},[47,57274,51361],{"class":221},[47,57276,57277,57279,57281,57283,57285],{"class":49,"line":1314},[47,57278,52198],{"class":221},[47,57280,51461],{"class":51354},[47,57282,51464],{"class":221},[47,57284,51461],{"class":51354},[47,57286,51361],{"class":221},[47,57288,57289,57291,57293],{"class":49,"line":1405},[47,57290,52198],{"class":221},[47,57292,134],{"class":51354},[47,57294,51361],{"class":221},[47,57296,57297,57299],{"class":49,"line":1411},[47,57298,6496],{"class":51354},[47,57300,15665],{"class":221},[47,57302,57303,57305,57307,57309],{"class":49,"line":1423},[47,57304,54760],{"class":85},[47,57306,51491],{"class":221},[47,57308,411],{"class":85},[47,57310,1384],{"class":221},[47,57312,57313,57315,57317,57319],{"class":49,"line":1706},[47,57314,54749],{"class":85},[47,57316,51491],{"class":221},[47,57318,411],{"class":85},[47,57320,1384],{"class":221},[47,57322,57323],{"class":49,"line":1711},[47,57324,2280],{"class":221},[47,57326,57327],{"class":49,"line":1717},[47,57328,2493],{"emptyLinePlaceholder":145},[47,57330,57331,57334],{"class":49,"line":1722},[47,57332,57333],{"class":51354},"    h2",[47,57335,15665],{"class":221},[47,57337,57338,57341,57343,57345],{"class":49,"line":1736},[47,57339,57340],{"class":85},"      text-align",[47,57342,51491],{"class":221},[47,57344,51646],{"class":85},[47,57346,1384],{"class":221},[47,57348,57349],{"class":49,"line":1741},[47,57350,2280],{"class":221},[47,57352,57353],{"class":49,"line":1747},[47,57354,2493],{"emptyLinePlaceholder":145},[47,57356,57357,57359],{"class":49,"line":1768},[47,57358,54806],{"class":53},[47,57360,15665],{"class":221},[47,57362,57363,57365,57367,57369,57371],{"class":49,"line":1773},[47,57364,54825],{"class":85},[47,57366,51491],{"class":221},[47,57368,1633],{"class":85},[47,57370,51546],{"class":217},[47,57372,1384],{"class":221},[47,57374,57375,57377,57379,57381,57383,57385],{"class":49,"line":1787},[47,57376,54760],{"class":85},[47,57378,51491],{"class":221},[47,57380,875],{"class":85},[47,57382,51546],{"class":217},[47,57384,51610],{"class":85},[47,57386,1384],{"class":221},[47,57388,57389,57391,57393,57395],{"class":49,"line":1792},[47,57390,55063],{"class":85},[47,57392,51491],{"class":221},[47,57394,51531],{"class":85},[47,57396,1384],{"class":221},[47,57398,57399,57401,57403,57405,57407],{"class":49,"line":1821},[47,57400,54976],{"class":85},[47,57402,51491],{"class":221},[47,57404,1044],{"class":85},[47,57406,51546],{"class":217},[47,57408,1384],{"class":221},[47,57410,57411,57414,57416,57418,57420],{"class":49,"line":1826},[47,57412,57413],{"class":85},"      line-height",[47,57415,51491],{"class":221},[47,57417,620],{"class":85},[47,57419,51546],{"class":217},[47,57421,1384],{"class":221},[47,57423,57424],{"class":49,"line":1843},[47,57425,2280],{"class":221},[47,57427,57428],{"class":49,"line":1848},[47,57429,2493],{"emptyLinePlaceholder":145},[47,57431,57432,57435],{"class":49,"line":1853},[47,57433,57434],{"class":53},"    .qs",[47,57436,15665],{"class":221},[47,57438,57439],{"class":49,"line":1858},[47,57440,2493],{"emptyLinePlaceholder":145},[47,57442,57443,57445,57447,57450,57452],{"class":49,"line":1872},[47,57444,54825],{"class":85},[47,57446,51491],{"class":221},[47,57448,57449],{"class":85},"450",[47,57451,51546],{"class":217},[47,57453,1384],{"class":221},[47,57455,57456,57458,57460,57462,57464],{"class":49,"line":1877},[47,57457,54839],{"class":85},[47,57459,51491],{"class":221},[47,57461,620],{"class":85},[47,57463,51546],{"class":217},[47,57465,1384],{"class":221},[47,57467,57468,57471,57473,57476],{"class":49,"line":2670},[47,57469,57470],{"class":85},"      color",[47,57472,51491],{"class":221},[47,57474,57475],{"class":85},"red",[47,57477,1384],{"class":221},[47,57479,57480],{"class":49,"line":2684},[47,57481,2493],{"emptyLinePlaceholder":145},[47,57483,57484],{"class":49,"line":2692},[47,57485,2280],{"class":221},[47,57487,57488],{"class":49,"line":2697},[47,57489,2493],{"emptyLinePlaceholder":145},[47,57491,57492,57495],{"class":49,"line":2703},[47,57493,57494],{"class":53},"    .btns",[47,57496,15665],{"class":221},[47,57498,57499,57501,57503,57505],{"class":49,"line":2709},[47,57500,57340],{"class":85},[47,57502,51491],{"class":221},[47,57504,51646],{"class":85},[47,57506,1384],{"class":221},[47,57508,57509],{"class":49,"line":2714},[47,57510,2280],{"class":221},[47,57512,57513],{"class":49,"line":8041},[47,57514,2493],{"emptyLinePlaceholder":145},[47,57516,57517,57519,57522],{"class":49,"line":8065},[47,57518,57494],{"class":53},[47,57520,57521],{"class":51354}," button",[47,57523,15665],{"class":221},[47,57525,57526,57528,57530,57532,57534],{"class":49,"line":8070},[47,57527,54825],{"class":85},[47,57529,51491],{"class":221},[47,57531,1036],{"class":85},[47,57533,51546],{"class":217},[47,57535,1384],{"class":221},[47,57537,57538,57540,57542,57544,57546],{"class":49,"line":8076},[47,57539,54839],{"class":85},[47,57541,51491],{"class":221},[47,57543,492],{"class":85},[47,57545,51546],{"class":217},[47,57547,1384],{"class":221},[47,57549,57550,57552,57554,57556,57559,57561],{"class":49,"line":8103},[47,57551,54760],{"class":85},[47,57553,51491],{"class":221},[47,57555,411],{"class":85},[47,57557,57558],{"class":85}," 50",[47,57560,51546],{"class":217},[47,57562,1384],{"class":221},[47,57564,57565],{"class":49,"line":8108},[47,57566,2280],{"class":221},[47,57568,57569,57571,57573],{"class":49,"line":8114},[47,57570,52471],{"class":221},[47,57572,134],{"class":51354},[47,57574,51361],{"class":221},[47,57576,57577,57579,57581],{"class":49,"line":8126},[47,57578,51839],{"class":221},[47,57580,51388],{"class":51354},[47,57582,51361],{"class":221},[47,57584,57585],{"class":49,"line":8138},[47,57586,2493],{"emptyLinePlaceholder":145},[47,57588,57589,57591,57593],{"class":49,"line":8150},[47,57590,1129],{"class":221},[47,57592,51854],{"class":51354},[47,57594,51361],{"class":221},[47,57596,57597,57599,57601,57604,57606],{"class":49,"line":9809},[47,57598,52198],{"class":221},[47,57600,14],{"class":51354},[47,57602,57603],{"class":221},">随机点名\u003C\u002F",[47,57605,14],{"class":51354},[47,57607,51361],{"class":221},[47,57609,57610,57612,57614,57616,57618,57620],{"class":49,"line":9834},[47,57611,52198],{"class":221},[47,57613,51665],{"class":51354},[47,57615,53540],{"class":53},[47,57617,267],{"class":221},[47,57619,53545],{"class":81},[47,57621,51361],{"class":221},[47,57623,57624,57626,57628,57631,57633],{"class":49,"line":9857},[47,57625,51395],{"class":221},[47,57627,47],{"class":51354},[47,57629,57630],{"class":221},">名字是：\u003C\u002F",[47,57632,47],{"class":51354},[47,57634,51361],{"class":221},[47,57636,57637,57639,57641,57643,57645,57648,57651,57653],{"class":49,"line":9881},[47,57638,51395],{"class":221},[47,57640,51665],{"class":51354},[47,57642,53540],{"class":53},[47,57644,267],{"class":221},[47,57646,57647],{"class":81},"\"qs\"",[47,57649,57650],{"class":221},">这里显示姓名\u003C\u002F",[47,57652,51665],{"class":51354},[47,57654,51361],{"class":221},[47,57656,57657,57659,57661],{"class":49,"line":9886},[47,57658,52471],{"class":221},[47,57660,51665],{"class":51354},[47,57662,51361],{"class":221},[47,57664,57665,57667,57669,57671,57673,57676],{"class":49,"line":9891},[47,57666,52198],{"class":221},[47,57668,51665],{"class":51354},[47,57670,53540],{"class":53},[47,57672,267],{"class":221},[47,57674,57675],{"class":81},"\"btns\"",[47,57677,51361],{"class":221},[47,57679,57680,57682,57684,57686,57688,57691,57694,57696],{"class":49,"line":9896},[47,57681,51395],{"class":221},[47,57683,53941],{"class":51354},[47,57685,53540],{"class":53},[47,57687,267],{"class":221},[47,57689,57690],{"class":81},"\"start\"",[47,57692,57693],{"class":221},">开始\u003C\u002F",[47,57695,53941],{"class":51354},[47,57697,51361],{"class":221},[47,57699,57700,57702,57704,57706,57708,57711,57714,57716],{"class":49,"line":9905},[47,57701,51395],{"class":221},[47,57703,53941],{"class":51354},[47,57705,53540],{"class":53},[47,57707,267],{"class":221},[47,57709,57710],{"class":81},"\"end\"",[47,57712,57713],{"class":221},">结束\u003C\u002F",[47,57715,53941],{"class":51354},[47,57717,51361],{"class":221},[47,57719,57720,57722,57724],{"class":49,"line":9910},[47,57721,52471],{"class":221},[47,57723,51665],{"class":51354},[47,57725,51361],{"class":221},[47,57727,57728],{"class":49,"line":9916},[47,57729,2493],{"emptyLinePlaceholder":145},[47,57731,57732,57734,57736],{"class":49,"line":9937},[47,57733,52198],{"class":221},[47,57735,51867],{"class":51354},[47,57737,51361],{"class":221},[47,57739,57740],{"class":49,"line":9943},[47,57741,57742],{"class":279},"    \u002F\u002F 数据数组\n",[47,57744,57745,57747,57750,57752,57754,57757,57759,57762,57764,57767,57769,57772,57774,57777],{"class":49,"line":9957},[47,57746,11314],{"class":217},[47,57748,57749],{"class":85}," arr",[47,57751,13657],{"class":217},[47,57753,52280],{"class":221},[47,57755,57756],{"class":81},"'马超'",[47,57758,12528],{"class":221},[47,57760,57761],{"class":81},"'黄忠'",[47,57763,12528],{"class":221},[47,57765,57766],{"class":81},"'赵云'",[47,57768,12528],{"class":221},[47,57770,57771],{"class":81},"'关羽'",[47,57773,12528],{"class":221},[47,57775,57776],{"class":81},"'张飞'",[47,57778,33300],{"class":221},[47,57780,57781,57783,57786,57788,57790,57792,57794,57797],{"class":49,"line":9963},[47,57782,11314],{"class":217},[47,57784,57785],{"class":85}," qs",[47,57787,13657],{"class":217},[47,57789,54450],{"class":221},[47,57791,54453],{"class":53},[47,57793,222],{"class":221},[47,57795,57796],{"class":81},"'.qs'",[47,57798,228],{"class":221},[47,57800,57801],{"class":49,"line":9990},[47,57802,57803],{"class":279},"    \u002F\u002F 1.业务1.开始按钮模块\n",[47,57805,57806,57808,57810,57812,57814,57816,57818,57821],{"class":49,"line":9999},[47,57807,11314],{"class":217},[47,57809,4277],{"class":85},[47,57811,13657],{"class":217},[47,57813,54450],{"class":221},[47,57815,54453],{"class":53},[47,57817,222],{"class":221},[47,57819,57820],{"class":81},"'.start'",[47,57822,228],{"class":221},[47,57824,57825],{"class":49,"line":10005},[47,57826,57827],{"class":279},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[47,57829,57830,57832,57835,57837],{"class":49,"line":10013},[47,57831,52273],{"class":217},[47,57833,57834],{"class":221}," timerId ",[47,57836,267],{"class":217},[47,57838,47387],{"class":85},[47,57840,57841],{"class":49,"line":10018},[47,57842,57843],{"class":279},"    \u002F\u002F 随机号要全局变量\n",[47,57845,57846,57848,57851,57853],{"class":49,"line":16697},[47,57847,52273],{"class":217},[47,57849,57850],{"class":221}," random ",[47,57852,267],{"class":217},[47,57854,47387],{"class":85},[47,57856,57857],{"class":49,"line":16703},[47,57858,57859],{"class":279},"    \u002F\u002F 1.1 添加点击事件\n",[47,57861,57862,57865,57868,57870,57873,57875,57877],{"class":49,"line":16726},[47,57863,57864],{"class":221},"    start.",[47,57866,57867],{"class":53},"addEventListener",[47,57869,222],{"class":221},[47,57871,57872],{"class":81},"'click'",[47,57874,12528],{"class":221},[47,57876,54503],{"class":217},[47,57878,54506],{"class":221},[47,57880,57881,57884,57886,57888,57890,57892],{"class":49,"line":16732},[47,57882,57883],{"class":221},"      timerId ",[47,57885,267],{"class":217},[47,57887,54498],{"class":53},[47,57889,222],{"class":221},[47,57891,54503],{"class":217},[47,57893,54506],{"class":221},[47,57895,57896],{"class":49,"line":16755},[47,57897,57898],{"class":279},"        \u002F\u002F 随机数\n",[47,57900,57901,57904,57906,57909,57912,57915,57917,57919,57921,57923],{"class":49,"line":16769},[47,57902,57903],{"class":221},"        random ",[47,57905,267],{"class":217},[47,57907,57908],{"class":53}," parseInt",[47,57910,57911],{"class":221},"(Math.",[47,57913,57914],{"class":53},"random",[47,57916,13143],{"class":221},[47,57918,674],{"class":217},[47,57920,52019],{"class":221},[47,57922,52022],{"class":85},[47,57924,228],{"class":221},[47,57926,57927,57930,57932],{"class":49,"line":16789},[47,57928,57929],{"class":221},"        qs.innerHTML ",[47,57931,267],{"class":217},[47,57933,57934],{"class":221}," arr[random]\n",[47,57936,57937,57940,57942],{"class":49,"line":16795},[47,57938,57939],{"class":221},"      }, ",[47,57941,492],{"class":85},[47,57943,228],{"class":221},[47,57945,57946],{"class":49,"line":16806},[47,57947,57948],{"class":279},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[47,57950,57951,57953,57956,57958,57961,57963],{"class":49,"line":16829},[47,57952,54534],{"class":217},[47,57954,57955],{"class":221}," (arr.",[47,57957,52022],{"class":85},[47,57959,57960],{"class":217}," ===",[47,57962,25172],{"class":85},[47,57964,12535],{"class":221},[47,57966,57967],{"class":49,"line":16851},[47,57968,57969],{"class":279},"        \u002F\u002F start.disabled = true\n",[47,57971,57972],{"class":49,"line":16856},[47,57973,57974],{"class":279},"        \u002F\u002F end.disabled = true\n",[47,57976,57977],{"class":49,"line":16862},[47,57978,57979],{"class":279},"        \u002F\u002F 可以合起来写\n",[47,57981,57982,57985,57987,57990,57992],{"class":49,"line":16876},[47,57983,57984],{"class":221},"        start.disabled ",[47,57986,267],{"class":217},[47,57988,57989],{"class":221}," end.disabled ",[47,57991,267],{"class":217},[47,57993,57994],{"class":85}," true\n",[47,57996,57997],{"class":49,"line":16889},[47,57998,52452],{"class":221},[47,58000,58001],{"class":49,"line":16894},[47,58002,33515],{"class":221},[47,58004,58005],{"class":49,"line":16908},[47,58006,58007],{"class":279},"    \u002F\u002F 1.2 关闭按钮模块\n",[47,58009,58010,58012,58014,58016,58018,58020,58022,58025],{"class":49,"line":16913},[47,58011,11314],{"class":217},[47,58013,4293],{"class":85},[47,58015,13657],{"class":217},[47,58017,54450],{"class":221},[47,58019,54453],{"class":53},[47,58021,222],{"class":221},[47,58023,58024],{"class":81},"'.end'",[47,58026,228],{"class":221},[47,58028,58029,58032,58034,58036,58038,58040,58042],{"class":49,"line":16919},[47,58030,58031],{"class":221},"    end.",[47,58033,57867],{"class":53},[47,58035,222],{"class":221},[47,58037,57872],{"class":81},[47,58039,12528],{"class":221},[47,58041,54503],{"class":217},[47,58043,54506],{"class":221},[47,58045,58046,58049],{"class":49,"line":16924},[47,58047,58048],{"class":53},"      clearInterval",[47,58050,58051],{"class":221},"(timerId)\n",[47,58053,58054],{"class":49,"line":16938},[47,58055,58056],{"class":279},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[47,58058,58059,58062,58065,58068,58070],{"class":49,"line":16943},[47,58060,58061],{"class":221},"      arr.",[47,58063,58064],{"class":53},"splice",[47,58066,58067],{"class":221},"(random, ",[47,58069,436],{"class":85},[47,58071,228],{"class":221},[47,58073,58074],{"class":49,"line":16948},[47,58075,33515],{"class":221},[47,58077,58078],{"class":49,"line":16962},[47,58079,2493],{"emptyLinePlaceholder":145},[47,58081,58082,58084,58086],{"class":49,"line":16974},[47,58083,52471],{"class":221},[47,58085,51867],{"class":51354},[47,58087,51361],{"class":221},[47,58089,58090,58092,58094],{"class":49,"line":16979},[47,58091,51839],{"class":221},[47,58093,51854],{"class":51354},[47,58095,51361],{"class":221},[47,58097,58098],{"class":49,"line":16992},[47,58099,2493],{"emptyLinePlaceholder":145},[47,58101,58102,58104,58106],{"class":49,"line":16997},[47,58103,51839],{"class":221},[47,58105,50689],{"class":51354},[47,58107,51361],{"class":221},[19,58109,58110],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[187,58112,58114],{"id":58113},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[38,58116,58118],{"className":50687,"code":58117,"language":50689,"meta":43,"style":43},"\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",[26,58119,58120,58130,58144,58148,58156,58170,58190,58202,58210,58214,58222,58234,58242,58261,58278,58294,58304,58308,58316,58324,58328],{"__ignoreMap":43},[47,58121,58122,58124,58126,58128],{"class":49,"line":50},[47,58123,51351],{"class":221},[47,58125,51355],{"class":51354},[47,58127,51358],{"class":53},[47,58129,51361],{"class":221},[47,58131,58132,58134,58136,58138,58140,58142],{"class":49,"line":92},[47,58133,1129],{"class":221},[47,58135,50689],{"class":51354},[47,58137,51370],{"class":53},[47,58139,267],{"class":221},[47,58141,51375],{"class":81},[47,58143,51361],{"class":221},[47,58145,58146],{"class":49,"line":1273},[47,58147,2493],{"emptyLinePlaceholder":145},[47,58149,58150,58152,58154],{"class":49,"line":1288},[47,58151,1129],{"class":221},[47,58153,51388],{"class":51354},[47,58155,51361],{"class":221},[47,58157,58158,58160,58162,58164,58166,58168],{"class":49,"line":1294},[47,58159,52198],{"class":221},[47,58161,51398],{"class":51354},[47,58163,51401],{"class":53},[47,58165,267],{"class":221},[47,58167,51406],{"class":81},[47,58169,51361],{"class":221},[47,58171,58172,58174,58176,58178,58180,58182,58184,58186,58188],{"class":49,"line":1308},[47,58173,52198],{"class":221},[47,58175,51398],{"class":51354},[47,58177,15013],{"class":53},[47,58179,267],{"class":221},[47,58181,51445],{"class":81},[47,58183,51425],{"class":53},[47,58185,267],{"class":221},[47,58187,51452],{"class":81},[47,58189,51361],{"class":221},[47,58191,58192,58194,58196,58198,58200],{"class":49,"line":1314},[47,58193,52198],{"class":221},[47,58195,51461],{"class":51354},[47,58197,51464],{"class":221},[47,58199,51461],{"class":51354},[47,58201,51361],{"class":221},[47,58203,58204,58206,58208],{"class":49,"line":1405},[47,58205,51839],{"class":221},[47,58207,51388],{"class":51354},[47,58209,51361],{"class":221},[47,58211,58212],{"class":49,"line":1411},[47,58213,2493],{"emptyLinePlaceholder":145},[47,58215,58216,58218,58220],{"class":49,"line":1423},[47,58217,1129],{"class":221},[47,58219,51854],{"class":51354},[47,58221,51361],{"class":221},[47,58223,58224,58226,58228,58230,58232],{"class":49,"line":1706},[47,58225,52198],{"class":221},[47,58227,53941],{"class":51354},[47,58229,53947],{"class":221},[47,58231,53941],{"class":51354},[47,58233,51361],{"class":221},[47,58235,58236,58238,58240],{"class":49,"line":1711},[47,58237,52198],{"class":221},[47,58239,51867],{"class":51354},[47,58241,51361],{"class":221},[47,58243,58244,58246,58248,58250,58252,58254,58256,58259],{"class":49,"line":1717},[47,58245,11314],{"class":217},[47,58247,54445],{"class":85},[47,58249,13657],{"class":217},[47,58251,54450],{"class":221},[47,58253,54453],{"class":53},[47,58255,222],{"class":221},[47,58257,58258],{"class":81},"'button'",[47,58260,228],{"class":221},[47,58262,58263,58266,58268,58270,58272,58274,58276],{"class":49,"line":1722},[47,58264,58265],{"class":221},"    btn.",[47,58267,57867],{"class":53},[47,58269,222],{"class":221},[47,58271,57872],{"class":81},[47,58273,12528],{"class":221},[47,58275,54503],{"class":217},[47,58277,54506],{"class":221},[47,58279,58280,58283,58285,58287,58290,58292],{"class":49,"line":1736},[47,58281,58282],{"class":217},"      const",[47,58284,2333],{"class":85},[47,58286,13657],{"class":217},[47,58288,58289],{"class":221}," Math.",[47,58291,57914],{"class":53},[47,58293,2069],{"class":221},[47,58295,58296,58299,58302],{"class":49,"line":1741},[47,58297,58298],{"class":221},"      console.",[47,58300,58301],{"class":53},"log",[47,58303,235],{"class":221},[47,58305,58306],{"class":49,"line":1747},[47,58307,33515],{"class":221},[47,58309,58310,58312,58314],{"class":49,"line":1768},[47,58311,52471],{"class":221},[47,58313,51867],{"class":51354},[47,58315,51361],{"class":221},[47,58317,58318,58320,58322],{"class":49,"line":1773},[47,58319,51839],{"class":221},[47,58321,51854],{"class":51354},[47,58323,51361],{"class":221},[47,58325,58326],{"class":49,"line":1787},[47,58327,2493],{"emptyLinePlaceholder":145},[47,58329,58330,58332,58334],{"class":49,"line":1792},[47,58331,51839],{"class":221},[47,58333,50689],{"class":51354},[47,58335,51361],{"class":221},[19,58337,58338],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,58340,58341],{},"常量不可以重新赋值",[19,58343,58344],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[38,58346,58348],{"className":50687,"code":58347,"language":50689,"meta":43,"style":43},"\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",[26,58349,58350,58360,58374,58378,58386,58400,58420,58432,58440,58444,58452,58464,58472,58483,58501,58517,58531,58539,58543,58551,58559,58563],{"__ignoreMap":43},[47,58351,58352,58354,58356,58358],{"class":49,"line":50},[47,58353,51351],{"class":221},[47,58355,51355],{"class":51354},[47,58357,51358],{"class":53},[47,58359,51361],{"class":221},[47,58361,58362,58364,58366,58368,58370,58372],{"class":49,"line":92},[47,58363,1129],{"class":221},[47,58365,50689],{"class":51354},[47,58367,51370],{"class":53},[47,58369,267],{"class":221},[47,58371,51375],{"class":81},[47,58373,51361],{"class":221},[47,58375,58376],{"class":49,"line":1273},[47,58377,2493],{"emptyLinePlaceholder":145},[47,58379,58380,58382,58384],{"class":49,"line":1288},[47,58381,1129],{"class":221},[47,58383,51388],{"class":51354},[47,58385,51361],{"class":221},[47,58387,58388,58390,58392,58394,58396,58398],{"class":49,"line":1294},[47,58389,52198],{"class":221},[47,58391,51398],{"class":51354},[47,58393,51401],{"class":53},[47,58395,267],{"class":221},[47,58397,51406],{"class":81},[47,58399,51361],{"class":221},[47,58401,58402,58404,58406,58408,58410,58412,58414,58416,58418],{"class":49,"line":1308},[47,58403,52198],{"class":221},[47,58405,51398],{"class":51354},[47,58407,15013],{"class":53},[47,58409,267],{"class":221},[47,58411,51445],{"class":81},[47,58413,51425],{"class":53},[47,58415,267],{"class":221},[47,58417,51452],{"class":81},[47,58419,51361],{"class":221},[47,58421,58422,58424,58426,58428,58430],{"class":49,"line":1314},[47,58423,52198],{"class":221},[47,58425,51461],{"class":51354},[47,58427,51464],{"class":221},[47,58429,51461],{"class":51354},[47,58431,51361],{"class":221},[47,58433,58434,58436,58438],{"class":49,"line":1405},[47,58435,51839],{"class":221},[47,58437,51388],{"class":51354},[47,58439,51361],{"class":221},[47,58441,58442],{"class":49,"line":1411},[47,58443,2493],{"emptyLinePlaceholder":145},[47,58445,58446,58448,58450],{"class":49,"line":1423},[47,58447,1129],{"class":221},[47,58449,51854],{"class":51354},[47,58451,51361],{"class":221},[47,58453,58454,58456,58458,58460,58462],{"class":49,"line":1706},[47,58455,52198],{"class":221},[47,58457,53941],{"class":51354},[47,58459,53947],{"class":221},[47,58461,53941],{"class":51354},[47,58463,51361],{"class":221},[47,58465,58466,58468,58470],{"class":49,"line":1711},[47,58467,52198],{"class":221},[47,58469,51867],{"class":51354},[47,58471,51361],{"class":221},[47,58473,58474,58476,58478,58480],{"class":49,"line":1717},[47,58475,11314],{"class":217},[47,58477,2333],{"class":85},[47,58479,13657],{"class":217},[47,58481,58482],{"class":85}," 10\n",[47,58484,58485,58487,58489,58491,58493,58495,58497,58499],{"class":49,"line":1722},[47,58486,11314],{"class":217},[47,58488,54445],{"class":85},[47,58490,13657],{"class":217},[47,58492,54450],{"class":221},[47,58494,54453],{"class":53},[47,58496,222],{"class":221},[47,58498,58258],{"class":81},[47,58500,228],{"class":221},[47,58502,58503,58505,58507,58509,58511,58513,58515],{"class":49,"line":1736},[47,58504,58265],{"class":221},[47,58506,57867],{"class":53},[47,58508,222],{"class":221},[47,58510,57872],{"class":81},[47,58512,12528],{"class":221},[47,58514,54503],{"class":217},[47,58516,54506],{"class":221},[47,58518,58519,58521,58523,58525,58527,58529],{"class":49,"line":1741},[47,58520,58282],{"class":217},[47,58522,2333],{"class":85},[47,58524,13657],{"class":217},[47,58526,58289],{"class":221},[47,58528,57914],{"class":53},[47,58530,2069],{"class":221},[47,58532,58533,58535,58537],{"class":49,"line":1747},[47,58534,58298],{"class":221},[47,58536,58301],{"class":53},[47,58538,235],{"class":221},[47,58540,58541],{"class":49,"line":1768},[47,58542,33515],{"class":221},[47,58544,58545,58547,58549],{"class":49,"line":1773},[47,58546,52471],{"class":221},[47,58548,51867],{"class":51354},[47,58550,51361],{"class":221},[47,58552,58553,58555,58557],{"class":49,"line":1787},[47,58554,51839],{"class":221},[47,58556,51854],{"class":51354},[47,58558,51361],{"class":221},[47,58560,58561],{"class":49,"line":1792},[47,58562,2493],{"emptyLinePlaceholder":145},[47,58564,58565,58567,58569],{"class":49,"line":1821},[47,58566,51839],{"class":221},[47,58568,50689],{"class":51354},[47,58570,51361],{"class":221},[19,58572,58573],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[38,58575,58577],{"className":50687,"code":58576,"language":50689,"meta":43,"style":43},"\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",[26,58578,58579,58589,58603,58607,58615,58629,58649,58661,58669,58673,58681,58693,58701,58711,58729,58745,58758,58766,58770,58778,58786,58790],{"__ignoreMap":43},[47,58580,58581,58583,58585,58587],{"class":49,"line":50},[47,58582,51351],{"class":221},[47,58584,51355],{"class":51354},[47,58586,51358],{"class":53},[47,58588,51361],{"class":221},[47,58590,58591,58593,58595,58597,58599,58601],{"class":49,"line":92},[47,58592,1129],{"class":221},[47,58594,50689],{"class":51354},[47,58596,51370],{"class":53},[47,58598,267],{"class":221},[47,58600,51375],{"class":81},[47,58602,51361],{"class":221},[47,58604,58605],{"class":49,"line":1273},[47,58606,2493],{"emptyLinePlaceholder":145},[47,58608,58609,58611,58613],{"class":49,"line":1288},[47,58610,1129],{"class":221},[47,58612,51388],{"class":51354},[47,58614,51361],{"class":221},[47,58616,58617,58619,58621,58623,58625,58627],{"class":49,"line":1294},[47,58618,52198],{"class":221},[47,58620,51398],{"class":51354},[47,58622,51401],{"class":53},[47,58624,267],{"class":221},[47,58626,51406],{"class":81},[47,58628,51361],{"class":221},[47,58630,58631,58633,58635,58637,58639,58641,58643,58645,58647],{"class":49,"line":1308},[47,58632,52198],{"class":221},[47,58634,51398],{"class":51354},[47,58636,15013],{"class":53},[47,58638,267],{"class":221},[47,58640,51445],{"class":81},[47,58642,51425],{"class":53},[47,58644,267],{"class":221},[47,58646,51452],{"class":81},[47,58648,51361],{"class":221},[47,58650,58651,58653,58655,58657,58659],{"class":49,"line":1314},[47,58652,52198],{"class":221},[47,58654,51461],{"class":51354},[47,58656,51464],{"class":221},[47,58658,51461],{"class":51354},[47,58660,51361],{"class":221},[47,58662,58663,58665,58667],{"class":49,"line":1405},[47,58664,51839],{"class":221},[47,58666,51388],{"class":51354},[47,58668,51361],{"class":221},[47,58670,58671],{"class":49,"line":1411},[47,58672,2493],{"emptyLinePlaceholder":145},[47,58674,58675,58677,58679],{"class":49,"line":1423},[47,58676,1129],{"class":221},[47,58678,51854],{"class":51354},[47,58680,51361],{"class":221},[47,58682,58683,58685,58687,58689,58691],{"class":49,"line":1706},[47,58684,52198],{"class":221},[47,58686,53941],{"class":51354},[47,58688,53947],{"class":221},[47,58690,53941],{"class":51354},[47,58692,51361],{"class":221},[47,58694,58695,58697,58699],{"class":49,"line":1711},[47,58696,52198],{"class":221},[47,58698,51867],{"class":51354},[47,58700,51361],{"class":221},[47,58702,58703,58705,58707,58709],{"class":49,"line":1717},[47,58704,11314],{"class":217},[47,58706,2333],{"class":85},[47,58708,13657],{"class":217},[47,58710,58482],{"class":85},[47,58712,58713,58715,58717,58719,58721,58723,58725,58727],{"class":49,"line":1722},[47,58714,11314],{"class":217},[47,58716,54445],{"class":85},[47,58718,13657],{"class":217},[47,58720,54450],{"class":221},[47,58722,54453],{"class":53},[47,58724,222],{"class":221},[47,58726,58258],{"class":81},[47,58728,228],{"class":221},[47,58730,58731,58733,58735,58737,58739,58741,58743],{"class":49,"line":1736},[47,58732,58265],{"class":221},[47,58734,57867],{"class":53},[47,58736,222],{"class":221},[47,58738,57872],{"class":81},[47,58740,12528],{"class":221},[47,58742,54503],{"class":217},[47,58744,54506],{"class":221},[47,58746,58747,58750,58752,58754,58756],{"class":49,"line":1741},[47,58748,58749],{"class":221},"      num ",[47,58751,267],{"class":217},[47,58753,58289],{"class":221},[47,58755,57914],{"class":53},[47,58757,2069],{"class":221},[47,58759,58760,58762,58764],{"class":49,"line":1747},[47,58761,58298],{"class":221},[47,58763,58301],{"class":53},[47,58765,235],{"class":221},[47,58767,58768],{"class":49,"line":1768},[47,58769,33515],{"class":221},[47,58771,58772,58774,58776],{"class":49,"line":1773},[47,58773,52471],{"class":221},[47,58775,51867],{"class":51354},[47,58777,51361],{"class":221},[47,58779,58780,58782,58784],{"class":49,"line":1787},[47,58781,51839],{"class":221},[47,58783,51854],{"class":51354},[47,58785,51361],{"class":221},[47,58787,58788],{"class":49,"line":1792},[47,58789,2493],{"emptyLinePlaceholder":145},[47,58791,58792,58794,58796],{"class":49,"line":1821},[47,58793,51839],{"class":221},[47,58795,50689],{"class":51354},[47,58797,51361],{"class":221},[19,58799,58800],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[187,58802,58804],{"id":58803},"_324-事件监听版本","3.2.4 事件监听版本",[19,58806,58807],{},[1556,58808],{"alt":43,"src":58809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,58811,58812],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,58814,58815],{},"这种方式会覆盖前边的事件监听:",[38,58817,58819],{"className":50687,"code":58818,"language":50689,"meta":43,"style":43},"\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",[26,58820,58821,58831,58845,58849,58857,58871,58891,58903,58911,58915,58923,58935,58943,58961,58975,58986,58990,59002,59012,59016,59024,59032,59036],{"__ignoreMap":43},[47,58822,58823,58825,58827,58829],{"class":49,"line":50},[47,58824,51351],{"class":221},[47,58826,51355],{"class":51354},[47,58828,51358],{"class":53},[47,58830,51361],{"class":221},[47,58832,58833,58835,58837,58839,58841,58843],{"class":49,"line":92},[47,58834,1129],{"class":221},[47,58836,50689],{"class":51354},[47,58838,51370],{"class":53},[47,58840,267],{"class":221},[47,58842,51375],{"class":81},[47,58844,51361],{"class":221},[47,58846,58847],{"class":49,"line":1273},[47,58848,2493],{"emptyLinePlaceholder":145},[47,58850,58851,58853,58855],{"class":49,"line":1288},[47,58852,1129],{"class":221},[47,58854,51388],{"class":51354},[47,58856,51361],{"class":221},[47,58858,58859,58861,58863,58865,58867,58869],{"class":49,"line":1294},[47,58860,52198],{"class":221},[47,58862,51398],{"class":51354},[47,58864,51401],{"class":53},[47,58866,267],{"class":221},[47,58868,51406],{"class":81},[47,58870,51361],{"class":221},[47,58872,58873,58875,58877,58879,58881,58883,58885,58887,58889],{"class":49,"line":1308},[47,58874,52198],{"class":221},[47,58876,51398],{"class":51354},[47,58878,15013],{"class":53},[47,58880,267],{"class":221},[47,58882,51445],{"class":81},[47,58884,51425],{"class":53},[47,58886,267],{"class":221},[47,58888,51452],{"class":81},[47,58890,51361],{"class":221},[47,58892,58893,58895,58897,58899,58901],{"class":49,"line":1314},[47,58894,52198],{"class":221},[47,58896,51461],{"class":51354},[47,58898,51464],{"class":221},[47,58900,51461],{"class":51354},[47,58902,51361],{"class":221},[47,58904,58905,58907,58909],{"class":49,"line":1405},[47,58906,51839],{"class":221},[47,58908,51388],{"class":51354},[47,58910,51361],{"class":221},[47,58912,58913],{"class":49,"line":1411},[47,58914,2493],{"emptyLinePlaceholder":145},[47,58916,58917,58919,58921],{"class":49,"line":1423},[47,58918,1129],{"class":221},[47,58920,51854],{"class":51354},[47,58922,51361],{"class":221},[47,58924,58925,58927,58929,58931,58933],{"class":49,"line":1706},[47,58926,52198],{"class":221},[47,58928,53941],{"class":51354},[47,58930,53947],{"class":221},[47,58932,53941],{"class":51354},[47,58934,51361],{"class":221},[47,58936,58937,58939,58941],{"class":49,"line":1711},[47,58938,52198],{"class":221},[47,58940,51867],{"class":51354},[47,58942,51361],{"class":221},[47,58944,58945,58947,58949,58951,58953,58955,58957,58959],{"class":49,"line":1717},[47,58946,11314],{"class":217},[47,58948,54445],{"class":85},[47,58950,13657],{"class":217},[47,58952,54450],{"class":221},[47,58954,54453],{"class":53},[47,58956,222],{"class":221},[47,58958,58258],{"class":81},[47,58960,228],{"class":221},[47,58962,58963,58965,58968,58970,58973],{"class":49,"line":1722},[47,58964,58265],{"class":221},[47,58966,58967],{"class":53},"onclick",[47,58969,13657],{"class":217},[47,58971,58972],{"class":217}," function",[47,58974,54506],{"class":221},[47,58976,58977,58980,58982,58984],{"class":49,"line":1736},[47,58978,58979],{"class":53},"      alert",[47,58981,222],{"class":221},[47,58983,691],{"class":85},[47,58985,228],{"class":221},[47,58987,58988],{"class":49,"line":1741},[47,58989,2280],{"class":221},[47,58991,58992,58994,58996,58998,59000],{"class":49,"line":1747},[47,58993,58265],{"class":221},[47,58995,58967],{"class":53},[47,58997,13657],{"class":217},[47,58999,58972],{"class":217},[47,59001,54506],{"class":221},[47,59003,59004,59006,59008,59010],{"class":49,"line":1768},[47,59005,58979],{"class":53},[47,59007,222],{"class":221},[47,59009,969],{"class":85},[47,59011,228],{"class":221},[47,59013,59014],{"class":49,"line":1773},[47,59015,2280],{"class":221},[47,59017,59018,59020,59022],{"class":49,"line":1787},[47,59019,52471],{"class":221},[47,59021,51867],{"class":51354},[47,59023,51361],{"class":221},[47,59025,59026,59028,59030],{"class":49,"line":1792},[47,59027,51839],{"class":221},[47,59029,51854],{"class":51354},[47,59031,51361],{"class":221},[47,59033,59034],{"class":49,"line":1821},[47,59035,2493],{"emptyLinePlaceholder":145},[47,59037,59038,59040,59042],{"class":49,"line":1826},[47,59039,51839],{"class":221},[47,59041,50689],{"class":51354},[47,59043,51361],{"class":221},[19,59045,59046],{},"只要点击就输出结果为22,前边11被覆盖了",[38,59048,59050],{"className":50687,"code":59049,"language":50689,"meta":43,"style":43},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[26,59051,59052,59057,59062,59066,59071,59076],{"__ignoreMap":43},[47,59053,59054],{"class":49,"line":50},[47,59055,59056],{"class":221},"  btn.addEventListener('click', function () {\n",[47,59058,59059],{"class":49,"line":92},[47,59060,59061],{"class":221},"      alert(11)\n",[47,59063,59064],{"class":49,"line":1273},[47,59065,33515],{"class":221},[47,59067,59068],{"class":49,"line":1288},[47,59069,59070],{"class":221},"    btn.addEventListener('click', function () {\n",[47,59072,59073],{"class":49,"line":1294},[47,59074,59075],{"class":221},"      alert(22)\n",[47,59077,59078],{"class":49,"line":1308},[47,59079,33515],{"class":221},[19,59081,59082],{},"点击第一次输出11,第二次点击为22",[187,59084,59086],{"id":59085},"_325-事件类型","3.2.5 事件类型",[19,59088,59089],{},[1556,59090],{"alt":43,"src":59091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22091,59093,59095],{"id":59094},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,59097,59098],{},"补充知识:",[19,59100,59101],{},"轮播图自动播放模块,可以使用",[19,59103,59104],{},"let timerId = setInterval(function () {",[19,59106,59107],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,59109,59110],{},"用js方法模拟进行点击事件,click必须加()",[19,59112,59113],{},"next.click()",[19,59115,59116],{},"}, 1000)",[19,59118,59119],{},[1556,59120],{"alt":43,"src":59121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[38,59123,59125],{"className":53121,"code":59124,"language":53123,"meta":43,"style":43},"\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",[26,59126,59127,59131,59141,59155,59159,59167,59182,59202,59222,59235,59243,59248,59253,59257,59261,59266,59271,59276,59281,59285,59289,59294,59299,59304,59308,59312,59317,59321,59326,59331,59335,59339,59344,59349,59354,59359,59364,59368,59372,59377,59382,59387,59392,59397,59401,59405,59410,59415,59420,59425,59430,59435,59440,59445,59450,59455,59459,59463,59468,59473,59477,59481,59486,59491,59495,59500,59505,59509,59513,59518,59522,59527,59532,59536,59541,59545,59549,59554,59559,59564,59569,59574,59579,59584,59588,59592,59596,59601,59606,59611,59616,59620,59628,59636,59640,59648,59663,59677,59698,59706,59720,59733,59748,59767,59779,59791,59803,59815,59827,59839,59851,59859,59874,59898,59922,59930,59938,59946,59954,59959,59964,59969,59974,59979,59984,59989,59994,59999,60004,60008,60013,60018,60023,60028,60033,60038,60043,60048,60053,60057,60062,60067,60072,60077,60082,60087,60092,60097,60102,60107,60112,60117,60121,60125,60130,60135,60140,60144,60149,60154,60159,60164,60169,60173,60178,60182,60186,60190,60194,60198,60202,60207,60212,60217,60222,60227,60232,60237,60242,60247,60251,60255,60260,60265,60270,60275,60280,60284,60289,60294,60299,60304,60309,60314,60318,60322,60327,60331,60336,60340,60345,60350,60355,60360,60365,60370,60374,60382,60390,60394],{"__ignoreMap":43},[47,59128,59129],{"class":49,"line":50},[47,59130,2493],{"emptyLinePlaceholder":145},[47,59132,59133,59135,59137,59139],{"class":49,"line":92},[47,59134,51351],{"class":221},[47,59136,51355],{"class":217},[47,59138,51358],{"class":85},[47,59140,51361],{"class":221},[47,59142,59143,59145,59147,59149,59151,59153],{"class":49,"line":1273},[47,59144,1129],{"class":221},[47,59146,50689],{"class":51354},[47,59148,51370],{"class":53},[47,59150,267],{"class":221},[47,59152,51375],{"class":81},[47,59154,51361],{"class":221},[47,59156,59157],{"class":49,"line":1288},[47,59158,2493],{"emptyLinePlaceholder":145},[47,59160,59161,59163,59165],{"class":49,"line":1294},[47,59162,1129],{"class":221},[47,59164,51388],{"class":51354},[47,59166,51361],{"class":221},[47,59168,59169,59171,59173,59175,59177,59179],{"class":49,"line":1308},[47,59170,52198],{"class":221},[47,59172,51398],{"class":51354},[47,59174,51401],{"class":53},[47,59176,267],{"class":221},[47,59178,51406],{"class":81},[47,59180,59181],{"class":221}," \u002F>\n",[47,59183,59184,59186,59188,59190,59192,59194,59196,59198,59200],{"class":49,"line":1314},[47,59185,52198],{"class":221},[47,59187,51398],{"class":51354},[47,59189,51417],{"class":53},[47,59191,267],{"class":221},[47,59193,51422],{"class":81},[47,59195,51425],{"class":53},[47,59197,267],{"class":221},[47,59199,51430],{"class":81},[47,59201,59181],{"class":221},[47,59203,59204,59206,59208,59210,59212,59214,59216,59218,59220],{"class":49,"line":1405},[47,59205,52198],{"class":221},[47,59207,51398],{"class":51354},[47,59209,15013],{"class":53},[47,59211,267],{"class":221},[47,59213,51445],{"class":81},[47,59215,51425],{"class":53},[47,59217,267],{"class":221},[47,59219,51452],{"class":81},[47,59221,59181],{"class":221},[47,59223,59224,59226,59228,59231,59233],{"class":49,"line":1411},[47,59225,52198],{"class":221},[47,59227,51461],{"class":51354},[47,59229,59230],{"class":221},">轮播图点击切换\u003C\u002F",[47,59232,51461],{"class":51354},[47,59234,51361],{"class":221},[47,59236,59237,59239,59241],{"class":49,"line":1423},[47,59238,52198],{"class":221},[47,59240,134],{"class":51354},[47,59242,51361],{"class":221},[47,59244,59245],{"class":49,"line":1706},[47,59246,59247],{"class":221},"    * {\n",[47,59249,59250],{"class":49,"line":1711},[47,59251,59252],{"class":221},"      box-sizing: border-box;\n",[47,59254,59255],{"class":49,"line":1717},[47,59256,2280],{"class":221},[47,59258,59259],{"class":49,"line":1722},[47,59260,2493],{"emptyLinePlaceholder":145},[47,59262,59263],{"class":49,"line":1736},[47,59264,59265],{"class":221},"    .slider {\n",[47,59267,59268],{"class":49,"line":1741},[47,59269,59270],{"class":221},"      width: 560px;\n",[47,59272,59273],{"class":49,"line":1747},[47,59274,59275],{"class":221},"      height: 400px;\n",[47,59277,59278],{"class":49,"line":1768},[47,59279,59280],{"class":221},"      overflow: hidden;\n",[47,59282,59283],{"class":49,"line":1773},[47,59284,2280],{"class":221},[47,59286,59287],{"class":49,"line":1787},[47,59288,2493],{"emptyLinePlaceholder":145},[47,59290,59291],{"class":49,"line":1792},[47,59292,59293],{"class":221},"    .slider-wrapper {\n",[47,59295,59296],{"class":49,"line":1821},[47,59297,59298],{"class":221},"      width: 100%;\n",[47,59300,59301],{"class":49,"line":1826},[47,59302,59303],{"class":221},"      height: 320px;\n",[47,59305,59306],{"class":49,"line":1843},[47,59307,2280],{"class":221},[47,59309,59310],{"class":49,"line":1848},[47,59311,2493],{"emptyLinePlaceholder":145},[47,59313,59314],{"class":49,"line":1853},[47,59315,59316],{"class":221},"    .slider-wrapper img {\n",[47,59318,59319],{"class":49,"line":1858},[47,59320,59298],{"class":221},[47,59322,59323],{"class":49,"line":1872},[47,59324,59325],{"class":221},"      height: 100%;\n",[47,59327,59328],{"class":49,"line":1877},[47,59329,59330],{"class":221},"      display: block;\n",[47,59332,59333],{"class":49,"line":2670},[47,59334,2280],{"class":221},[47,59336,59337],{"class":49,"line":2684},[47,59338,2493],{"emptyLinePlaceholder":145},[47,59340,59341],{"class":49,"line":2692},[47,59342,59343],{"class":221},"    .slider-footer {\n",[47,59345,59346],{"class":49,"line":2697},[47,59347,59348],{"class":221},"      height: 80px;\n",[47,59350,59351],{"class":49,"line":2703},[47,59352,59353],{"class":221},"      background-color: rgb(100, 67, 68);\n",[47,59355,59356],{"class":49,"line":2709},[47,59357,59358],{"class":221},"      padding: 12px 12px 0 12px;\n",[47,59360,59361],{"class":49,"line":2714},[47,59362,59363],{"class":221},"      position: relative;\n",[47,59365,59366],{"class":49,"line":8041},[47,59367,2280],{"class":221},[47,59369,59370],{"class":49,"line":8065},[47,59371,2493],{"emptyLinePlaceholder":145},[47,59373,59374],{"class":49,"line":8070},[47,59375,59376],{"class":221},"    .slider-footer .toggle {\n",[47,59378,59379],{"class":49,"line":8076},[47,59380,59381],{"class":221},"      position: absolute;\n",[47,59383,59384],{"class":49,"line":8103},[47,59385,59386],{"class":221},"      right: 0;\n",[47,59388,59389],{"class":49,"line":8108},[47,59390,59391],{"class":221},"      top: 12px;\n",[47,59393,59394],{"class":49,"line":8114},[47,59395,59396],{"class":221},"      display: flex;\n",[47,59398,59399],{"class":49,"line":8126},[47,59400,2280],{"class":221},[47,59402,59403],{"class":49,"line":8138},[47,59404,2493],{"emptyLinePlaceholder":145},[47,59406,59407],{"class":49,"line":8150},[47,59408,59409],{"class":221},"    .slider-footer .toggle button {\n",[47,59411,59412],{"class":49,"line":9809},[47,59413,59414],{"class":221},"      margin-right: 12px;\n",[47,59416,59417],{"class":49,"line":9834},[47,59418,59419],{"class":221},"      width: 28px;\n",[47,59421,59422],{"class":49,"line":9857},[47,59423,59424],{"class":221},"      height: 28px;\n",[47,59426,59427],{"class":49,"line":9881},[47,59428,59429],{"class":221},"      appearance: none;\n",[47,59431,59432],{"class":49,"line":9886},[47,59433,59434],{"class":221},"      border: none;\n",[47,59436,59437],{"class":49,"line":9891},[47,59438,59439],{"class":221},"      background: rgba(255, 255, 255, 0.1);\n",[47,59441,59442],{"class":49,"line":9896},[47,59443,59444],{"class":221},"      color: #fff;\n",[47,59446,59447],{"class":49,"line":9905},[47,59448,59449],{"class":221},"      border-radius: 4px;\n",[47,59451,59452],{"class":49,"line":9910},[47,59453,59454],{"class":221},"      cursor: pointer;\n",[47,59456,59457],{"class":49,"line":9916},[47,59458,2280],{"class":221},[47,59460,59461],{"class":49,"line":9937},[47,59462,2493],{"emptyLinePlaceholder":145},[47,59464,59465],{"class":49,"line":9943},[47,59466,59467],{"class":221},"    .slider-footer .toggle button:hover {\n",[47,59469,59470],{"class":49,"line":9957},[47,59471,59472],{"class":221},"      background: rgba(255, 255, 255, 0.2);\n",[47,59474,59475],{"class":49,"line":9963},[47,59476,2280],{"class":221},[47,59478,59479],{"class":49,"line":9990},[47,59480,2493],{"emptyLinePlaceholder":145},[47,59482,59483],{"class":49,"line":9999},[47,59484,59485],{"class":221},"    .slider-footer p {\n",[47,59487,59488],{"class":49,"line":10005},[47,59489,59490],{"class":221},"      margin: 0;\n",[47,59492,59493],{"class":49,"line":10013},[47,59494,59444],{"class":221},[47,59496,59497],{"class":49,"line":10018},[47,59498,59499],{"class":221},"      font-size: 18px;\n",[47,59501,59502],{"class":49,"line":16697},[47,59503,59504],{"class":221},"      margin-bottom: 10px;\n",[47,59506,59507],{"class":49,"line":16703},[47,59508,2280],{"class":221},[47,59510,59511],{"class":49,"line":16726},[47,59512,2493],{"emptyLinePlaceholder":145},[47,59514,59515],{"class":49,"line":16732},[47,59516,59517],{"class":221},"    .slider-indicator {\n",[47,59519,59520],{"class":49,"line":16755},[47,59521,59490],{"class":221},[47,59523,59524],{"class":49,"line":16769},[47,59525,59526],{"class":221},"      padding: 0;\n",[47,59528,59529],{"class":49,"line":16789},[47,59530,59531],{"class":221},"      list-style: none;\n",[47,59533,59534],{"class":49,"line":16795},[47,59535,59396],{"class":221},[47,59537,59538],{"class":49,"line":16806},[47,59539,59540],{"class":221},"      align-items: center;\n",[47,59542,59543],{"class":49,"line":16829},[47,59544,2280],{"class":221},[47,59546,59547],{"class":49,"line":16851},[47,59548,2493],{"emptyLinePlaceholder":145},[47,59550,59551],{"class":49,"line":16856},[47,59552,59553],{"class":221},"    .slider-indicator li {\n",[47,59555,59556],{"class":49,"line":16862},[47,59557,59558],{"class":221},"      width: 8px;\n",[47,59560,59561],{"class":49,"line":16876},[47,59562,59563],{"class":221},"      height: 8px;\n",[47,59565,59566],{"class":49,"line":16889},[47,59567,59568],{"class":221},"      margin: 4px;\n",[47,59570,59571],{"class":49,"line":16894},[47,59572,59573],{"class":221},"      border-radius: 50%;\n",[47,59575,59576],{"class":49,"line":16908},[47,59577,59578],{"class":221},"      background: #fff;\n",[47,59580,59581],{"class":49,"line":16913},[47,59582,59583],{"class":221},"      opacity: 0.4;\n",[47,59585,59586],{"class":49,"line":16919},[47,59587,59454],{"class":221},[47,59589,59590],{"class":49,"line":16924},[47,59591,2280],{"class":221},[47,59593,59594],{"class":49,"line":16938},[47,59595,2493],{"emptyLinePlaceholder":145},[47,59597,59598],{"class":49,"line":16943},[47,59599,59600],{"class":221},"    .slider-indicator li.active {\n",[47,59602,59603],{"class":49,"line":16948},[47,59604,59605],{"class":221},"      width: 12px;\n",[47,59607,59608],{"class":49,"line":16962},[47,59609,59610],{"class":221},"      height: 12px;\n",[47,59612,59613],{"class":49,"line":16974},[47,59614,59615],{"class":221},"      opacity: 1;\n",[47,59617,59618],{"class":49,"line":16979},[47,59619,2280],{"class":221},[47,59621,59622,59624,59626],{"class":49,"line":16992},[47,59623,52471],{"class":221},[47,59625,134],{"class":51354},[47,59627,51361],{"class":221},[47,59629,59630,59632,59634],{"class":49,"line":16997},[47,59631,51839],{"class":221},[47,59633,51388],{"class":51354},[47,59635,51361],{"class":221},[47,59637,59638],{"class":49,"line":17002},[47,59639,2493],{"emptyLinePlaceholder":145},[47,59641,59642,59644,59646],{"class":49,"line":17007},[47,59643,1129],{"class":221},[47,59645,51854],{"class":51354},[47,59647,51361],{"class":221},[47,59649,59650,59652,59654,59656,59658,59661],{"class":49,"line":17020},[47,59651,52198],{"class":221},[47,59653,51665],{"class":51354},[47,59655,53540],{"class":53},[47,59657,267],{"class":221},[47,59659,59660],{"class":81},"\"slider\"",[47,59662,51361],{"class":221},[47,59664,59665,59667,59669,59671,59673,59675],{"class":49,"line":17025},[47,59666,51395],{"class":221},[47,59668,51665],{"class":51354},[47,59670,53540],{"class":53},[47,59672,267],{"class":221},[47,59674,55281],{"class":81},[47,59676,51361],{"class":221},[47,59678,59679,59681,59683,59685,59687,59690,59692,59694,59696],{"class":49,"line":32687},[47,59680,55288],{"class":221},[47,59682,1556],{"class":51354},[47,59684,55293],{"class":53},[47,59686,267],{"class":221},[47,59688,59689],{"class":81},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[47,59691,55301],{"class":53},[47,59693,267],{"class":221},[47,59695,7745],{"class":81},[47,59697,59181],{"class":221},[47,59699,59700,59702,59704],{"class":49,"line":32693},[47,59701,51830],{"class":221},[47,59703,51665],{"class":51354},[47,59705,51361],{"class":221},[47,59707,59708,59710,59712,59714,59716,59718],{"class":49,"line":32699},[47,59709,51395],{"class":221},[47,59711,51665],{"class":51354},[47,59713,53540],{"class":53},[47,59715,267],{"class":221},[47,59717,55328],{"class":81},[47,59719,51361],{"class":221},[47,59721,59722,59724,59726,59729,59731],{"class":49,"line":32705},[47,59723,55288],{"class":221},[47,59725,19],{"class":51354},[47,59727,59728],{"class":221},">对人类来说会不会太超前了？\u003C\u002F",[47,59730,19],{"class":51354},[47,59732,51361],{"class":221},[47,59734,59735,59737,59739,59741,59743,59746],{"class":49,"line":32711},[47,59736,55288],{"class":221},[47,59738,106],{"class":51354},[47,59740,53540],{"class":53},[47,59742,267],{"class":221},[47,59744,59745],{"class":81},"\"slider-indicator\"",[47,59747,51361],{"class":221},[47,59749,59750,59752,59754,59756,59758,59761,59763,59765],{"class":49,"line":32722},[47,59751,55356],{"class":221},[47,59753,109],{"class":51354},[47,59755,53540],{"class":53},[47,59757,267],{"class":221},[47,59759,59760],{"class":81},"\"active\"",[47,59762,55368],{"class":221},[47,59764,109],{"class":51354},[47,59766,51361],{"class":221},[47,59768,59769,59771,59773,59775,59777],{"class":49,"line":32728},[47,59770,55356],{"class":221},[47,59772,109],{"class":51354},[47,59774,55368],{"class":221},[47,59776,109],{"class":51354},[47,59778,51361],{"class":221},[47,59780,59781,59783,59785,59787,59789],{"class":49,"line":32748},[47,59782,55356],{"class":221},[47,59784,109],{"class":51354},[47,59786,55368],{"class":221},[47,59788,109],{"class":51354},[47,59790,51361],{"class":221},[47,59792,59793,59795,59797,59799,59801],{"class":49,"line":32754},[47,59794,55356],{"class":221},[47,59796,109],{"class":51354},[47,59798,55368],{"class":221},[47,59800,109],{"class":51354},[47,59802,51361],{"class":221},[47,59804,59805,59807,59809,59811,59813],{"class":49,"line":32765},[47,59806,55356],{"class":221},[47,59808,109],{"class":51354},[47,59810,55368],{"class":221},[47,59812,109],{"class":51354},[47,59814,51361],{"class":221},[47,59816,59817,59819,59821,59823,59825],{"class":49,"line":32771},[47,59818,55356],{"class":221},[47,59820,109],{"class":51354},[47,59822,55368],{"class":221},[47,59824,109],{"class":51354},[47,59826,51361],{"class":221},[47,59828,59829,59831,59833,59835,59837],{"class":49,"line":32777},[47,59830,55356],{"class":221},[47,59832,109],{"class":51354},[47,59834,55368],{"class":221},[47,59836,109],{"class":51354},[47,59838,51361],{"class":221},[47,59840,59841,59843,59845,59847,59849],{"class":49,"line":32783},[47,59842,55356],{"class":221},[47,59844,109],{"class":51354},[47,59846,55368],{"class":221},[47,59848,109],{"class":51354},[47,59850,51361],{"class":221},[47,59852,59853,59855,59857],{"class":49,"line":32789},[47,59854,55461],{"class":221},[47,59856,106],{"class":51354},[47,59858,51361],{"class":221},[47,59860,59861,59863,59865,59867,59869,59872],{"class":49,"line":32795},[47,59862,55288],{"class":221},[47,59864,51665],{"class":51354},[47,59866,53540],{"class":53},[47,59868,267],{"class":221},[47,59870,59871],{"class":81},"\"toggle\"",[47,59873,51361],{"class":221},[47,59875,59876,59878,59880,59882,59884,59887,59889,59892,59894,59896],{"class":49,"line":32801},[47,59877,55356],{"class":221},[47,59879,53941],{"class":51354},[47,59881,53540],{"class":53},[47,59883,267],{"class":221},[47,59885,59886],{"class":81},"\"prev\"",[47,59888,1179],{"class":221},[47,59890,59891],{"class":85},"&lt;",[47,59893,51839],{"class":221},[47,59895,53941],{"class":51354},[47,59897,51361],{"class":221},[47,59899,59900,59902,59904,59906,59908,59911,59913,59916,59918,59920],{"class":49,"line":32807},[47,59901,55356],{"class":221},[47,59903,53941],{"class":51354},[47,59905,53540],{"class":53},[47,59907,267],{"class":221},[47,59909,59910],{"class":81},"\"next\"",[47,59912,1179],{"class":221},[47,59914,59915],{"class":85},"&gt;",[47,59917,51839],{"class":221},[47,59919,53941],{"class":51354},[47,59921,51361],{"class":221},[47,59923,59924,59926,59928],{"class":49,"line":32827},[47,59925,55461],{"class":221},[47,59927,51665],{"class":51354},[47,59929,51361],{"class":221},[47,59931,59932,59934,59936],{"class":49,"line":32833},[47,59933,51830],{"class":221},[47,59935,51665],{"class":51354},[47,59937,51361],{"class":221},[47,59939,59940,59942,59944],{"class":49,"line":32849},[47,59941,52471],{"class":221},[47,59943,51665],{"class":51354},[47,59945,51361],{"class":221},[47,59947,59948,59950,59952],{"class":49,"line":32855},[47,59949,52198],{"class":221},[47,59951,51867],{"class":51354},[47,59953,51361],{"class":221},[47,59955,59956],{"class":49,"line":32869},[47,59957,59958],{"class":221},"    \u002F\u002F 1. 初始数据\n",[47,59960,59961],{"class":49,"line":32875},[47,59962,59963],{"class":221},"    const data = [\n",[47,59965,59966],{"class":49,"line":32890},[47,59967,59968],{"class":221},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[47,59970,59971],{"class":49,"line":32896},[47,59972,59973],{"class":221},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[47,59975,59976],{"class":49,"line":32905},[47,59977,59978],{"class":221},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[47,59980,59981],{"class":49,"line":32911},[47,59982,59983],{"class":221},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[47,59985,59986],{"class":49,"line":32920},[47,59987,59988],{"class":221},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[47,59990,59991],{"class":49,"line":32926},[47,59992,59993],{"class":221},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[47,59995,59996],{"class":49,"line":32932},[47,59997,59998],{"class":221},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[47,60000,60001],{"class":49,"line":32941},[47,60002,60003],{"class":221},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[47,60005,60006],{"class":49,"line":32947},[47,60007,53163],{"class":221},[47,60009,60010],{"class":49,"line":32958},[47,60011,60012],{"class":221},"    \u002F\u002F 获取元素\n",[47,60014,60015],{"class":49,"line":32964},[47,60016,60017],{"class":221},"    const img = document.querySelector('.slider-wrapper img')\n",[47,60019,60020],{"class":49,"line":32983},[47,60021,60022],{"class":221},"    const p = document.querySelector('.slider-footer p')\n",[47,60024,60025],{"class":49,"line":32989},[47,60026,60027],{"class":221},"    const footer = document.querySelector('.slider-footer')\n",[47,60029,60030],{"class":49,"line":33000},[47,60031,60032],{"class":221},"    \u002F\u002F 1. 右按钮业务\n",[47,60034,60035],{"class":49,"line":33006},[47,60036,60037],{"class":221},"    \u002F\u002F 1.1 获取右侧按钮 \n",[47,60039,60040],{"class":49,"line":33026},[47,60041,60042],{"class":221},"    const next = document.querySelector('.next')\n",[47,60044,60045],{"class":49,"line":33042},[47,60046,60047],{"class":221},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[47,60049,60050],{"class":49,"line":33048},[47,60051,60052],{"class":221},"    \u002F\u002F 1.2 注册点击事件\n",[47,60054,60055],{"class":49,"line":33062},[47,60056,2493],{"emptyLinePlaceholder":145},[47,60058,60059],{"class":49,"line":33068},[47,60060,60061],{"class":221},"    next.addEventListener('click', function () {\n",[47,60063,60064],{"class":49,"line":33074},[47,60065,60066],{"class":221},"      \u002F\u002F console.log(11)\n",[47,60068,60069],{"class":49,"line":33085},[47,60070,60071],{"class":221},"      i++\n",[47,60073,60074],{"class":49,"line":33091},[47,60075,60076],{"class":221},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[47,60078,60079],{"class":49,"line":33097},[47,60080,60081],{"class":221},"      \u002F\u002F if (i >= 8) {\n",[47,60083,60084],{"class":49,"line":33107},[47,60085,60086],{"class":221},"      \u002F\u002F   i = 0\n",[47,60088,60089],{"class":49,"line":33113},[47,60090,60091],{"class":221},"      \u002F\u002F }\n",[47,60093,60094],{"class":49,"line":33124},[47,60095,60096],{"class":221},"      i = i >= data.length ? 0 : i\n",[47,60098,60099],{"class":49,"line":33130},[47,60100,60101],{"class":221},"      \u002F\u002F 1.3 得到对应的对象\n",[47,60103,60104],{"class":49,"line":33140},[47,60105,60106],{"class":221},"      \u002F\u002F console.log(data[i])\n",[47,60108,60109],{"class":49,"line":33145},[47,60110,60111],{"class":221},"      \u002F\u002F 调用函数\n",[47,60113,60114],{"class":49,"line":33151},[47,60115,60116],{"class":221},"      toggle()\n",[47,60118,60119],{"class":49,"line":33200},[47,60120,33515],{"class":221},[47,60122,60123],{"class":49,"line":33247},[47,60124,2493],{"emptyLinePlaceholder":145},[47,60126,60127],{"class":49,"line":33252},[47,60128,60129],{"class":221},"    \u002F\u002F 2. 左侧按钮业务\n",[47,60131,60132],{"class":49,"line":33258},[47,60133,60134],{"class":221},"    \u002F\u002F 2.1 获取左侧按钮 \n",[47,60136,60137],{"class":49,"line":33277},[47,60138,60139],{"class":221},"    const prev = document.querySelector('.prev')\n",[47,60141,60142],{"class":49,"line":33283},[47,60143,60052],{"class":221},[47,60145,60146],{"class":49,"line":33303},[47,60147,60148],{"class":221},"    prev.addEventListener('click', function () {\n",[47,60150,60151],{"class":49,"line":33309},[47,60152,60153],{"class":221},"      i--\n",[47,60155,60156],{"class":49,"line":33315},[47,60157,60158],{"class":221},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[47,60160,60161],{"class":49,"line":33325},[47,60162,60163],{"class":221},"      \u002F\u002F if (i \u003C 0) {\n",[47,60165,60166],{"class":49,"line":33330},[47,60167,60168],{"class":221},"      \u002F\u002F   i = 7\n",[47,60170,60171],{"class":49,"line":33336},[47,60172,60091],{"class":221},[47,60174,60175],{"class":49,"line":33352},[47,60176,60177],{"class":221},"      i = i \u003C 0 ? data.length - 1 : i\n",[47,60179,60180],{"class":49,"line":33397},[47,60181,60101],{"class":221},[47,60183,60184],{"class":49,"line":33403},[47,60185,60106],{"class":221},[47,60187,60188],{"class":49,"line":33409},[47,60189,60111],{"class":221},[47,60191,60192],{"class":49,"line":33415},[47,60193,60116],{"class":221},[47,60195,60196],{"class":49,"line":33426},[47,60197,33515],{"class":221},[47,60199,60200],{"class":49,"line":33432},[47,60201,2493],{"emptyLinePlaceholder":145},[47,60203,60204],{"class":49,"line":33438},[47,60205,60206],{"class":221},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[47,60208,60209],{"class":49,"line":33444},[47,60210,60211],{"class":221},"    function toggle() {\n",[47,60213,60214],{"class":49,"line":33462},[47,60215,60216],{"class":221},"      \u002F\u002F 1.4 渲染对应的数据\n",[47,60218,60219],{"class":49,"line":33476},[47,60220,60221],{"class":221},"      img.src = data[i].url\n",[47,60223,60224],{"class":49,"line":33485},[47,60225,60226],{"class":221},"      p.innerHTML = data[i].title\n",[47,60228,60229],{"class":49,"line":33494},[47,60230,60231],{"class":221},"      footer.style.backgroundColor = data[i].color\n",[47,60233,60234],{"class":49,"line":33503},[47,60235,60236],{"class":221},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[47,60238,60239],{"class":49,"line":33512},[47,60240,60241],{"class":221},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[47,60243,60244],{"class":49,"line":33518},[47,60245,60246],{"class":221},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[47,60248,60249],{"class":49,"line":33524},[47,60250,2280],{"class":221},[47,60252,60253],{"class":49,"line":33532},[47,60254,2493],{"emptyLinePlaceholder":145},[47,60256,60257],{"class":49,"line":33537},[47,60258,60259],{"class":221},"    \u002F\u002F 3. 自动播放模块\n",[47,60261,60262],{"class":49,"line":33543},[47,60263,60264],{"class":221},"    let timerId = setInterval(function () {\n",[47,60266,60267],{"class":49,"line":33554},[47,60268,60269],{"class":221},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[47,60271,60272],{"class":49,"line":33560},[47,60273,60274],{"class":221},"      next.click()\n",[47,60276,60277],{"class":49,"line":33580},[47,60278,60279],{"class":221},"    }, 1000)\n",[47,60281,60282],{"class":49,"line":33586},[47,60283,2493],{"emptyLinePlaceholder":145},[47,60285,60286],{"class":49,"line":33592},[47,60287,60288],{"class":221},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[47,60290,60291],{"class":49,"line":33598},[47,60292,60293],{"class":221},"    const slider = document.querySelector('.slider')\n",[47,60295,60296],{"class":49,"line":33615},[47,60297,60298],{"class":221},"    \u002F\u002F 注册事件\n",[47,60300,60301],{"class":49,"line":33621},[47,60302,60303],{"class":221},"    slider.addEventListener('mouseenter', function () {\n",[47,60305,60306],{"class":49,"line":33627},[47,60307,60308],{"class":221},"      \u002F\u002F 停止定时器\n",[47,60310,60311],{"class":49,"line":33633},[47,60312,60313],{"class":221},"      clearInterval(timerId)\n",[47,60315,60316],{"class":49,"line":33639},[47,60317,33515],{"class":221},[47,60319,60320],{"class":49,"line":33645},[47,60321,2493],{"emptyLinePlaceholder":145},[47,60323,60324],{"class":49,"line":33672},[47,60325,60326],{"class":221},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[47,60328,60329],{"class":49,"line":33696},[47,60330,60298],{"class":221},[47,60332,60333],{"class":49,"line":33702},[47,60334,60335],{"class":221},"    slider.addEventListener('mouseleave', function () {\n",[47,60337,60338],{"class":49,"line":33708},[47,60339,60308],{"class":221},[47,60341,60342],{"class":49,"line":33714},[47,60343,60344],{"class":221},"      if (timerId) clearInterval(timerId)\n",[47,60346,60347],{"class":49,"line":33725},[47,60348,60349],{"class":221},"      \u002F\u002F 开启定时器\n",[47,60351,60352],{"class":49,"line":33736},[47,60353,60354],{"class":221},"      timerId = setInterval(function () {\n",[47,60356,60357],{"class":49,"line":33742},[47,60358,60359],{"class":221},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[47,60361,60362],{"class":49,"line":33759},[47,60363,60364],{"class":221},"        next.click()\n",[47,60366,60367],{"class":49,"line":33782},[47,60368,60369],{"class":221},"      }, 1000)\n",[47,60371,60372],{"class":49,"line":33805},[47,60373,33515],{"class":221},[47,60375,60376,60378,60380],{"class":49,"line":33811},[47,60377,52471],{"class":221},[47,60379,51867],{"class":51354},[47,60381,51361],{"class":221},[47,60383,60384,60386,60388],{"class":49,"line":33816},[47,60385,51839],{"class":221},[47,60387,51854],{"class":51354},[47,60389,51361],{"class":221},[47,60391,60392],{"class":49,"line":33825},[47,60393,2493],{"emptyLinePlaceholder":145},[47,60395,60396,60398,60400],{"class":49,"line":33835},[47,60397,51839],{"class":221},[47,60399,50689],{"class":51354},[47,60401,51361],{"class":221},[22091,60403,60405],{"id":60404},"_3252-焦点事件","3.2.5.2 焦点事件",[19,60407,60408],{},"小米搜索框案例：",[38,60410,60412],{"className":50687,"code":60411,"language":50689,"meta":43,"style":43},"\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",[26,60413,60414,60424,60438,60442,60450,60464,60484,60504,60516,60524,60530,60540,60550,60562,60566,60570,60577,60581,60592,60596,60600,60607,60618,60631,60645,60649,60653,60662,60674,60686,60700,60713,60726,60744,60755,60759,60763,60772,60789,60793,60797,60804,60814,60824,60835,60848,60860,60876,60887,60899,60903,60907,60915,60926,60943,60955,60967,60978,60982,60986,60997,61008,61012,61020,61024,61032,61036,61044,61059,61082,61097,61128,61155,61182,61209,61236,61263,61290,61299,61307,61315,61320,61340,61360,61365,61370,61388,61393,61403,61408,61422,61427,61432,61449,61458,61470,61474,61482,61490,61494],{"__ignoreMap":43},[47,60415,60416,60418,60420,60422],{"class":49,"line":50},[47,60417,51351],{"class":221},[47,60419,51355],{"class":51354},[47,60421,51358],{"class":53},[47,60423,51361],{"class":221},[47,60425,60426,60428,60430,60432,60434,60436],{"class":49,"line":92},[47,60427,1129],{"class":221},[47,60429,50689],{"class":51354},[47,60431,51370],{"class":53},[47,60433,267],{"class":221},[47,60435,51375],{"class":81},[47,60437,51361],{"class":221},[47,60439,60440],{"class":49,"line":1273},[47,60441,2493],{"emptyLinePlaceholder":145},[47,60443,60444,60446,60448],{"class":49,"line":1288},[47,60445,1129],{"class":221},[47,60447,51388],{"class":51354},[47,60449,51361],{"class":221},[47,60451,60452,60454,60456,60458,60460,60462],{"class":49,"line":1294},[47,60453,51395],{"class":221},[47,60455,51398],{"class":51354},[47,60457,51401],{"class":53},[47,60459,267],{"class":221},[47,60461,51406],{"class":81},[47,60463,51361],{"class":221},[47,60465,60466,60468,60470,60472,60474,60476,60478,60480,60482],{"class":49,"line":1308},[47,60467,51395],{"class":221},[47,60469,51398],{"class":51354},[47,60471,51417],{"class":53},[47,60473,267],{"class":221},[47,60475,51422],{"class":81},[47,60477,51425],{"class":53},[47,60479,267],{"class":221},[47,60481,51430],{"class":81},[47,60483,51361],{"class":221},[47,60485,60486,60488,60490,60492,60494,60496,60498,60500,60502],{"class":49,"line":1314},[47,60487,51395],{"class":221},[47,60489,51398],{"class":51354},[47,60491,15013],{"class":53},[47,60493,267],{"class":221},[47,60495,51445],{"class":81},[47,60497,51425],{"class":53},[47,60499,267],{"class":221},[47,60501,51452],{"class":81},[47,60503,51361],{"class":221},[47,60505,60506,60508,60510,60512,60514],{"class":49,"line":1405},[47,60507,51395],{"class":221},[47,60509,51461],{"class":51354},[47,60511,51464],{"class":221},[47,60513,51461],{"class":51354},[47,60515,51361],{"class":221},[47,60517,60518,60520,60522],{"class":49,"line":1411},[47,60519,51395],{"class":221},[47,60521,134],{"class":51354},[47,60523,51361],{"class":221},[47,60525,60526,60528],{"class":49,"line":1423},[47,60527,51481],{"class":51354},[47,60529,15665],{"class":221},[47,60531,60532,60534,60536,60538],{"class":49,"line":1706},[47,60533,51488],{"class":85},[47,60535,51491],{"class":221},[47,60537,411],{"class":85},[47,60539,1384],{"class":221},[47,60541,60542,60544,60546,60548],{"class":49,"line":1711},[47,60543,51500],{"class":85},[47,60545,51491],{"class":221},[47,60547,411],{"class":85},[47,60549,1384],{"class":221},[47,60551,60552,60555,60557,60560],{"class":49,"line":1717},[47,60553,60554],{"class":85},"            box-sizing",[47,60556,51491],{"class":221},[47,60558,60559],{"class":85},"border-box",[47,60561,1384],{"class":221},[47,60563,60564],{"class":49,"line":1722},[47,60565,2622],{"class":221},[47,60567,60568],{"class":49,"line":1736},[47,60569,2493],{"emptyLinePlaceholder":145},[47,60571,60572,60575],{"class":49,"line":1741},[47,60573,60574],{"class":51354},"        ul",[47,60576,15665],{"class":221},[47,60578,60579],{"class":49,"line":1747},[47,60580,2493],{"emptyLinePlaceholder":145},[47,60582,60583,60586,60588,60590],{"class":49,"line":1768},[47,60584,60585],{"class":85},"            list-style",[47,60587,51491],{"class":221},[47,60589,54791],{"class":85},[47,60591,1384],{"class":221},[47,60593,60594],{"class":49,"line":1773},[47,60595,2622],{"class":221},[47,60597,60598],{"class":49,"line":1787},[47,60599,2493],{"emptyLinePlaceholder":145},[47,60601,60602,60605],{"class":49,"line":1792},[47,60603,60604],{"class":53},"        .mi",[47,60606,15665],{"class":221},[47,60608,60609,60612,60614,60616],{"class":49,"line":1821},[47,60610,60611],{"class":85},"            position",[47,60613,51491],{"class":221},[47,60615,54818],{"class":85},[47,60617,1384],{"class":221},[47,60619,60620,60622,60624,60627,60629],{"class":49,"line":1826},[47,60621,51538],{"class":85},[47,60623,51491],{"class":221},[47,60625,60626],{"class":85},"223",[47,60628,51546],{"class":217},[47,60630,1384],{"class":221},[47,60632,60633,60635,60637,60639,60641,60643],{"class":49,"line":1843},[47,60634,51488],{"class":85},[47,60636,51491],{"class":221},[47,60638,530],{"class":85},[47,60640,51546],{"class":217},[47,60642,51610],{"class":85},[47,60644,1384],{"class":221},[47,60646,60647],{"class":49,"line":1848},[47,60648,2622],{"class":221},[47,60650,60651],{"class":49,"line":1853},[47,60652,2493],{"emptyLinePlaceholder":145},[47,60654,60655,60657,60660],{"class":49,"line":1858},[47,60656,60604],{"class":53},[47,60658,60659],{"class":51354}," input",[47,60661,15665],{"class":221},[47,60663,60664,60666,60668,60670,60672],{"class":49,"line":1872},[47,60665,51538],{"class":85},[47,60667,51491],{"class":221},[47,60669,60626],{"class":85},[47,60671,51546],{"class":217},[47,60673,1384],{"class":221},[47,60675,60676,60678,60680,60682,60684],{"class":49,"line":1877},[47,60677,51553],{"class":85},[47,60679,51491],{"class":221},[47,60681,826],{"class":85},[47,60683,51546],{"class":217},[47,60685,1384],{"class":221},[47,60687,60688,60690,60692,60694,60696,60698],{"class":49,"line":2670},[47,60689,51500],{"class":85},[47,60691,51491],{"class":221},[47,60693,411],{"class":85},[47,60695,2131],{"class":85},[47,60697,51546],{"class":217},[47,60699,1384],{"class":221},[47,60701,60702,60705,60707,60709,60711],{"class":49,"line":2684},[47,60703,60704],{"class":85},"            font-size",[47,60706,51491],{"class":221},[47,60708,768],{"class":85},[47,60710,51546],{"class":217},[47,60712,1384],{"class":221},[47,60714,60715,60718,60720,60722,60724],{"class":49,"line":2692},[47,60716,60717],{"class":85},"            line-height",[47,60719,51491],{"class":221},[47,60721,826],{"class":85},[47,60723,51546],{"class":217},[47,60725,1384],{"class":221},[47,60727,60728,60731,60733,60735,60737,60739,60742],{"class":49,"line":2697},[47,60729,60730],{"class":85},"            border",[47,60732,51491],{"class":221},[47,60734,436],{"class":85},[47,60736,51546],{"class":217},[47,60738,51575],{"class":85},[47,60740,60741],{"class":85}," #e0e0e0",[47,60743,1384],{"class":221},[47,60745,60746,60749,60751,60753],{"class":49,"line":2703},[47,60747,60748],{"class":85},"            outline",[47,60750,51491],{"class":221},[47,60752,54791],{"class":85},[47,60754,1384],{"class":221},[47,60756,60757],{"class":49,"line":2709},[47,60758,2622],{"class":221},[47,60760,60761],{"class":49,"line":2714},[47,60762,2493],{"emptyLinePlaceholder":145},[47,60764,60765,60767,60770],{"class":49,"line":8041},[47,60766,60604],{"class":53},[47,60768,60769],{"class":53}," .search",[47,60771,15665],{"class":221},[47,60773,60774,60776,60778,60780,60782,60784,60787],{"class":49,"line":8065},[47,60775,60730],{"class":85},[47,60777,51491],{"class":221},[47,60779,436],{"class":85},[47,60781,51546],{"class":217},[47,60783,51575],{"class":85},[47,60785,60786],{"class":85}," #ff6700",[47,60788,1384],{"class":221},[47,60790,60791],{"class":49,"line":8070},[47,60792,2622],{"class":221},[47,60794,60795],{"class":49,"line":8076},[47,60796,2493],{"emptyLinePlaceholder":145},[47,60798,60799,60802],{"class":49,"line":8103},[47,60800,60801],{"class":53},"        .result-list",[47,60803,15665],{"class":221},[47,60805,60806,60808,60810,60812],{"class":49,"line":8108},[47,60807,51526],{"class":85},[47,60809,51491],{"class":221},[47,60811,54791],{"class":85},[47,60813,1384],{"class":221},[47,60815,60816,60818,60820,60822],{"class":49,"line":8114},[47,60817,60611],{"class":85},[47,60819,51491],{"class":221},[47,60821,54885],{"class":85},[47,60823,1384],{"class":221},[47,60825,60826,60829,60831,60833],{"class":49,"line":8126},[47,60827,60828],{"class":85},"            left",[47,60830,51491],{"class":221},[47,60832,411],{"class":85},[47,60834,1384],{"class":221},[47,60836,60837,60840,60842,60844,60846],{"class":49,"line":8138},[47,60838,60839],{"class":85},"            top",[47,60841,51491],{"class":221},[47,60843,826],{"class":85},[47,60845,51546],{"class":217},[47,60847,1384],{"class":221},[47,60849,60850,60852,60854,60856,60858],{"class":49,"line":8150},[47,60851,51538],{"class":85},[47,60853,51491],{"class":221},[47,60855,60626],{"class":85},[47,60857,51546],{"class":217},[47,60859,1384],{"class":221},[47,60861,60862,60864,60866,60868,60870,60872,60874],{"class":49,"line":9809},[47,60863,60730],{"class":85},[47,60865,51491],{"class":221},[47,60867,436],{"class":85},[47,60869,51546],{"class":217},[47,60871,51575],{"class":85},[47,60873,60786],{"class":85},[47,60875,1384],{"class":221},[47,60877,60878,60881,60883,60885],{"class":49,"line":9834},[47,60879,60880],{"class":85},"            border-top",[47,60882,51491],{"class":221},[47,60884,411],{"class":85},[47,60886,1384],{"class":221},[47,60888,60889,60892,60894,60897],{"class":49,"line":9857},[47,60890,60891],{"class":85},"            background",[47,60893,51491],{"class":221},[47,60895,60896],{"class":85},"#fff",[47,60898,1384],{"class":221},[47,60900,60901],{"class":49,"line":9881},[47,60902,2622],{"class":221},[47,60904,60905],{"class":49,"line":9886},[47,60906,2493],{"emptyLinePlaceholder":145},[47,60908,60909,60911,60913],{"class":49,"line":9891},[47,60910,60801],{"class":53},[47,60912,1492],{"class":51354},[47,60914,15665],{"class":221},[47,60916,60917,60919,60921,60924],{"class":49,"line":9896},[47,60918,51526],{"class":85},[47,60920,51491],{"class":221},[47,60922,60923],{"class":85},"block",[47,60925,1384],{"class":221},[47,60927,60928,60930,60932,60934,60936,60939,60941],{"class":49,"line":9905},[47,60929,51500],{"class":85},[47,60931,51491],{"class":221},[47,60933,563],{"class":85},[47,60935,51546],{"class":217},[47,60937,60938],{"class":85}," 15",[47,60940,51546],{"class":217},[47,60942,1384],{"class":221},[47,60944,60945,60947,60949,60951,60953],{"class":49,"line":9910},[47,60946,60704],{"class":85},[47,60948,51491],{"class":221},[47,60950,717],{"class":85},[47,60952,51546],{"class":217},[47,60954,1384],{"class":221},[47,60956,60957,60960,60962,60965],{"class":49,"line":9916},[47,60958,60959],{"class":85},"            color",[47,60961,51491],{"class":221},[47,60963,60964],{"class":85},"#424242",[47,60966,1384],{"class":221},[47,60968,60969,60972,60974,60976],{"class":49,"line":9937},[47,60970,60971],{"class":85},"            text-decoration",[47,60973,51491],{"class":221},[47,60975,54791],{"class":85},[47,60977,1384],{"class":221},[47,60979,60980],{"class":49,"line":9943},[47,60981,2622],{"class":221},[47,60983,60984],{"class":49,"line":9957},[47,60985,2493],{"emptyLinePlaceholder":145},[47,60987,60988,60990,60992,60995],{"class":49,"line":9963},[47,60989,60801],{"class":53},[47,60991,1492],{"class":51354},[47,60993,60994],{"class":53},":hover",[47,60996,15665],{"class":221},[47,60998,60999,61001,61003,61006],{"class":49,"line":9990},[47,61000,51694],{"class":85},[47,61002,51491],{"class":221},[47,61004,61005],{"class":85},"#eee",[47,61007,1384],{"class":221},[47,61009,61010],{"class":49,"line":9999},[47,61011,2622],{"class":221},[47,61013,61014,61016,61018],{"class":49,"line":10005},[47,61015,51830],{"class":221},[47,61017,134],{"class":51354},[47,61019,51361],{"class":221},[47,61021,61022],{"class":49,"line":10013},[47,61023,2493],{"emptyLinePlaceholder":145},[47,61025,61026,61028,61030],{"class":49,"line":10018},[47,61027,51839],{"class":221},[47,61029,51388],{"class":51354},[47,61031,51361],{"class":221},[47,61033,61034],{"class":49,"line":16697},[47,61035,2493],{"emptyLinePlaceholder":145},[47,61037,61038,61040,61042],{"class":49,"line":16703},[47,61039,1129],{"class":221},[47,61041,51854],{"class":51354},[47,61043,51361],{"class":221},[47,61045,61046,61048,61050,61052,61054,61057],{"class":49,"line":16726},[47,61047,51395],{"class":221},[47,61049,51665],{"class":51354},[47,61051,53540],{"class":53},[47,61053,267],{"class":221},[47,61055,61056],{"class":81},"\"mi\"",[47,61058,51361],{"class":221},[47,61060,61061,61063,61065,61067,61069,61072,61075,61077,61080],{"class":49,"line":16732},[47,61062,55356],{"class":221},[47,61064,53875],{"class":51354},[47,61066,53878],{"class":53},[47,61068,267],{"class":221},[47,61070,61071],{"class":81},"\"search\"",[47,61073,61074],{"class":53}," placeholder",[47,61076,267],{"class":221},[47,61078,61079],{"class":81},"\"小米笔记本\"",[47,61081,51361],{"class":221},[47,61083,61084,61086,61088,61090,61092,61095],{"class":49,"line":16755},[47,61085,55356],{"class":221},[47,61087,106],{"class":51354},[47,61089,53540],{"class":53},[47,61091,267],{"class":221},[47,61093,61094],{"class":81},"\"result-list\"",[47,61096,51361],{"class":221},[47,61098,61099,61102,61104,61107,61109,61112,61114,61117,61120,61122,61124,61126],{"class":49,"line":16769},[47,61100,61101],{"class":221},"            \u003C",[47,61103,109],{"class":51354},[47,61105,61106],{"class":221},">\u003C",[47,61108,457],{"class":51354},[47,61110,61111],{"class":53}," href",[47,61113,267],{"class":221},[47,61115,61116],{"class":81},"\"#\"",[47,61118,61119],{"class":221},">全部商品\u003C\u002F",[47,61121,457],{"class":51354},[47,61123,55368],{"class":221},[47,61125,109],{"class":51354},[47,61127,51361],{"class":221},[47,61129,61130,61132,61134,61136,61138,61140,61142,61144,61147,61149,61151,61153],{"class":49,"line":16789},[47,61131,61101],{"class":221},[47,61133,109],{"class":51354},[47,61135,61106],{"class":221},[47,61137,457],{"class":51354},[47,61139,61111],{"class":53},[47,61141,267],{"class":221},[47,61143,61116],{"class":81},[47,61145,61146],{"class":221},">小米11\u003C\u002F",[47,61148,457],{"class":51354},[47,61150,55368],{"class":221},[47,61152,109],{"class":51354},[47,61154,51361],{"class":221},[47,61156,61157,61159,61161,61163,61165,61167,61169,61171,61174,61176,61178,61180],{"class":49,"line":16795},[47,61158,61101],{"class":221},[47,61160,109],{"class":51354},[47,61162,61106],{"class":221},[47,61164,457],{"class":51354},[47,61166,61111],{"class":53},[47,61168,267],{"class":221},[47,61170,61116],{"class":81},[47,61172,61173],{"class":221},">小米10S\u003C\u002F",[47,61175,457],{"class":51354},[47,61177,55368],{"class":221},[47,61179,109],{"class":51354},[47,61181,51361],{"class":221},[47,61183,61184,61186,61188,61190,61192,61194,61196,61198,61201,61203,61205,61207],{"class":49,"line":16806},[47,61185,61101],{"class":221},[47,61187,109],{"class":51354},[47,61189,61106],{"class":221},[47,61191,457],{"class":51354},[47,61193,61111],{"class":53},[47,61195,267],{"class":221},[47,61197,61116],{"class":81},[47,61199,61200],{"class":221},">小米笔记本\u003C\u002F",[47,61202,457],{"class":51354},[47,61204,55368],{"class":221},[47,61206,109],{"class":51354},[47,61208,51361],{"class":221},[47,61210,61211,61213,61215,61217,61219,61221,61223,61225,61228,61230,61232,61234],{"class":49,"line":16829},[47,61212,61101],{"class":221},[47,61214,109],{"class":51354},[47,61216,61106],{"class":221},[47,61218,457],{"class":51354},[47,61220,61111],{"class":53},[47,61222,267],{"class":221},[47,61224,61116],{"class":81},[47,61226,61227],{"class":221},">小米手机\u003C\u002F",[47,61229,457],{"class":51354},[47,61231,55368],{"class":221},[47,61233,109],{"class":51354},[47,61235,51361],{"class":221},[47,61237,61238,61240,61242,61244,61246,61248,61250,61252,61255,61257,61259,61261],{"class":49,"line":16851},[47,61239,61101],{"class":221},[47,61241,109],{"class":51354},[47,61243,61106],{"class":221},[47,61245,457],{"class":51354},[47,61247,61111],{"class":53},[47,61249,267],{"class":221},[47,61251,61116],{"class":81},[47,61253,61254],{"class":221},">黑鲨4\u003C\u002F",[47,61256,457],{"class":51354},[47,61258,55368],{"class":221},[47,61260,109],{"class":51354},[47,61262,51361],{"class":221},[47,61264,61265,61267,61269,61271,61273,61275,61277,61279,61282,61284,61286,61288],{"class":49,"line":16856},[47,61266,61101],{"class":221},[47,61268,109],{"class":51354},[47,61270,61106],{"class":221},[47,61272,457],{"class":51354},[47,61274,61111],{"class":53},[47,61276,267],{"class":221},[47,61278,61116],{"class":81},[47,61280,61281],{"class":221},">空调\u003C\u002F",[47,61283,457],{"class":51354},[47,61285,55368],{"class":221},[47,61287,109],{"class":51354},[47,61289,51361],{"class":221},[47,61291,61292,61295,61297],{"class":49,"line":16862},[47,61293,61294],{"class":221},"        \u003C\u002F",[47,61296,106],{"class":51354},[47,61298,51361],{"class":221},[47,61300,61301,61303,61305],{"class":49,"line":16876},[47,61302,51830],{"class":221},[47,61304,51665],{"class":51354},[47,61306,51361],{"class":221},[47,61308,61309,61311,61313],{"class":49,"line":16889},[47,61310,51395],{"class":221},[47,61312,51867],{"class":51354},[47,61314,51361],{"class":221},[47,61316,61317],{"class":49,"line":16894},[47,61318,61319],{"class":279},"        \u002F\u002F 1. 获取元素\n",[47,61321,61322,61325,61327,61329,61331,61333,61335,61338],{"class":49,"line":16908},[47,61323,61324],{"class":217},"        const",[47,61326,60659],{"class":85},[47,61328,13657],{"class":217},[47,61330,54450],{"class":221},[47,61332,54453],{"class":53},[47,61334,222],{"class":221},[47,61336,61337],{"class":81},"'[type=search]'",[47,61339,228],{"class":221},[47,61341,61342,61344,61347,61349,61351,61353,61355,61358],{"class":49,"line":16913},[47,61343,61324],{"class":217},[47,61345,61346],{"class":85}," ul",[47,61348,13657],{"class":217},[47,61350,54450],{"class":221},[47,61352,54453],{"class":53},[47,61354,222],{"class":221},[47,61356,61357],{"class":81},"'.result-list'",[47,61359,228],{"class":221},[47,61361,61362],{"class":49,"line":16919},[47,61363,61364],{"class":279},"        \u002F\u002F console.log(input)\n",[47,61366,61367],{"class":49,"line":16924},[47,61368,61369],{"class":279},"        \u002F\u002F 2. 监听事件 获得焦点\n",[47,61371,61372,61375,61377,61379,61382,61384,61386],{"class":49,"line":16938},[47,61373,61374],{"class":221},"        input.",[47,61376,57867],{"class":53},[47,61378,222],{"class":221},[47,61380,61381],{"class":81},"'focus'",[47,61383,12528],{"class":221},[47,61385,54503],{"class":217},[47,61387,54506],{"class":221},[47,61389,61390],{"class":49,"line":16943},[47,61391,61392],{"class":279},"            \u002F\u002F ul显示\n",[47,61394,61395,61398,61400],{"class":49,"line":16948},[47,61396,61397],{"class":221},"            ul.style.display ",[47,61399,267],{"class":217},[47,61401,61402],{"class":81}," 'block'\n",[47,61404,61405],{"class":49,"line":16962},[47,61406,61407],{"class":279},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[47,61409,61410,61413,61415,61417,61420],{"class":49,"line":16974},[47,61411,61412],{"class":221},"            input.classList.",[47,61414,5427],{"class":53},[47,61416,222],{"class":221},[47,61418,61419],{"class":81},"'search'",[47,61421,228],{"class":221},[47,61423,61424],{"class":49,"line":16979},[47,61425,61426],{"class":221},"        })\n",[47,61428,61429],{"class":49,"line":16992},[47,61430,61431],{"class":279},"        \u002F\u002F 3. 监听事件 失去焦点\n",[47,61433,61434,61436,61438,61440,61443,61445,61447],{"class":49,"line":16997},[47,61435,61374],{"class":221},[47,61437,57867],{"class":53},[47,61439,222],{"class":221},[47,61441,61442],{"class":81},"'blur'",[47,61444,12528],{"class":221},[47,61446,54503],{"class":217},[47,61448,54506],{"class":221},[47,61450,61451,61453,61455],{"class":49,"line":17002},[47,61452,61397],{"class":221},[47,61454,267],{"class":217},[47,61456,61457],{"class":81}," 'none'\n",[47,61459,61460,61462,61464,61466,61468],{"class":49,"line":17007},[47,61461,61412],{"class":221},[47,61463,57060],{"class":53},[47,61465,222],{"class":221},[47,61467,61419],{"class":81},[47,61469,228],{"class":221},[47,61471,61472],{"class":49,"line":17020},[47,61473,61426],{"class":221},[47,61475,61476,61478,61480],{"class":49,"line":17025},[47,61477,51830],{"class":221},[47,61479,51867],{"class":51354},[47,61481,51361],{"class":221},[47,61483,61484,61486,61488],{"class":49,"line":32687},[47,61485,51839],{"class":221},[47,61487,51854],{"class":51354},[47,61489,51361],{"class":221},[47,61491,61492],{"class":49,"line":32693},[47,61493,2493],{"emptyLinePlaceholder":145},[47,61495,61496,61498,61500],{"class":49,"line":32699},[47,61497,51839],{"class":221},[47,61499,50689],{"class":51354},[47,61501,51361],{"class":221},[22091,61503,61505],{"id":61504},"_3253-键盘事件","3.2.5.3 键盘事件",[19,61507,61508],{},"评论字数统计案例",[19,61510,61511],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,61513,61514],{},"牢记focus伪类选择器",[51398,61516],{"charSet":61517},"UTF-8",[51398,61519],{"name":61520,"content":61521},"viewport","width=device-width, initial-scale=1.0",[51461,61523,61524],{},"Document",[134,61526,61527],{},"\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",[53875,61529],{"type":5280},[106,61531,61532,61535],{},[109,61533,61534],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[109,61536,61537],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[38,61539,61541],{"className":50687,"code":61540,"language":50689,"meta":43,"style":43},"\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",[26,61542,61543,61553,61567,61571,61579,61593,61613,61633,61646,61654,61661,61674,61688,61698,61708,61712,61716,61723,61735,61747,61759,61771,61800,61813,61817,61821,61830,61841,61853,61864,61875,61887,61898,61910,61926,61938,61942,61946,61957,61968,61978,61990,61994,61998,62006,62017,62027,62038,62050,62063,62075,62087,62091,62095,62104,62116,62127,62140,62151,62165,62169,62173,62180,62192,62204,62214,62218,62222,62231,62243,62253,62257,62261,62272,62282,62301,62314,62318,62322,62332,62342,62346,62350,62361,62372,62384,62396,62400,62404,62415,62426,62440,62444,62448,62459,62469,62481,62485,62493,62501,62505,62513,62528,62547,62587,62600,62608,62622,62642,62650,62665,62688,62706,62721,62741,62761,62781,62789,62797,62805,62813,62833,62853,62858,62875,62884,62888,62893,62909,62917,62921,62926,62943,62948,62973,62977,62981,62986,62991,62999,63007,63011],{"__ignoreMap":43},[47,61544,61545,61547,61549,61551],{"class":49,"line":50},[47,61546,51351],{"class":221},[47,61548,51355],{"class":51354},[47,61550,51358],{"class":53},[47,61552,51361],{"class":221},[47,61554,61555,61557,61559,61561,61563,61565],{"class":49,"line":92},[47,61556,1129],{"class":221},[47,61558,50689],{"class":51354},[47,61560,51370],{"class":53},[47,61562,267],{"class":221},[47,61564,51375],{"class":81},[47,61566,51361],{"class":221},[47,61568,61569],{"class":49,"line":1273},[47,61570,2493],{"emptyLinePlaceholder":145},[47,61572,61573,61575,61577],{"class":49,"line":1288},[47,61574,1129],{"class":221},[47,61576,51388],{"class":51354},[47,61578,51361],{"class":221},[47,61580,61581,61583,61585,61587,61589,61591],{"class":49,"line":1294},[47,61582,52198],{"class":221},[47,61584,51398],{"class":51354},[47,61586,51401],{"class":53},[47,61588,267],{"class":221},[47,61590,51406],{"class":81},[47,61592,51361],{"class":221},[47,61594,61595,61597,61599,61601,61603,61605,61607,61609,61611],{"class":49,"line":1308},[47,61596,52198],{"class":221},[47,61598,51398],{"class":51354},[47,61600,51417],{"class":53},[47,61602,267],{"class":221},[47,61604,51422],{"class":81},[47,61606,51425],{"class":53},[47,61608,267],{"class":221},[47,61610,51430],{"class":81},[47,61612,51361],{"class":221},[47,61614,61615,61617,61619,61621,61623,61625,61627,61629,61631],{"class":49,"line":1314},[47,61616,52198],{"class":221},[47,61618,51398],{"class":51354},[47,61620,15013],{"class":53},[47,61622,267],{"class":221},[47,61624,51445],{"class":81},[47,61626,51425],{"class":53},[47,61628,267],{"class":221},[47,61630,51452],{"class":81},[47,61632,51361],{"class":221},[47,61634,61635,61637,61639,61642,61644],{"class":49,"line":1405},[47,61636,52198],{"class":221},[47,61638,51461],{"class":51354},[47,61640,61641],{"class":221},">评论回车发布\u003C\u002F",[47,61643,51461],{"class":51354},[47,61645,51361],{"class":221},[47,61647,61648,61650,61652],{"class":49,"line":1411},[47,61649,52198],{"class":221},[47,61651,134],{"class":51354},[47,61653,51361],{"class":221},[47,61655,61656,61659],{"class":49,"line":1423},[47,61657,61658],{"class":53},"    .wrapper",[47,61660,15665],{"class":221},[47,61662,61663,61666,61668,61670,61672],{"class":49,"line":1706},[47,61664,61665],{"class":85},"      min-width",[47,61667,51491],{"class":221},[47,61669,4080],{"class":85},[47,61671,51546],{"class":217},[47,61673,1384],{"class":221},[47,61675,61676,61679,61681,61684,61686],{"class":49,"line":1711},[47,61677,61678],{"class":85},"      max-width",[47,61680,51491],{"class":221},[47,61682,61683],{"class":85},"800",[47,61685,51546],{"class":217},[47,61687,1384],{"class":221},[47,61689,61690,61692,61694,61696],{"class":49,"line":1717},[47,61691,55063],{"class":85},[47,61693,51491],{"class":221},[47,61695,51531],{"class":85},[47,61697,1384],{"class":221},[47,61699,61700,61702,61704,61706],{"class":49,"line":1722},[47,61701,55074],{"class":85},[47,61703,51491],{"class":221},[47,61705,51634],{"class":85},[47,61707,1384],{"class":221},[47,61709,61710],{"class":49,"line":1736},[47,61711,2280],{"class":221},[47,61713,61714],{"class":49,"line":1741},[47,61715,2493],{"emptyLinePlaceholder":145},[47,61717,61718,61721],{"class":49,"line":1747},[47,61719,61720],{"class":53},"    .avatar",[47,61722,15665],{"class":221},[47,61724,61725,61727,61729,61731,61733],{"class":49,"line":1768},[47,61726,54825],{"class":85},[47,61728,51491],{"class":221},[47,61730,826],{"class":85},[47,61732,51546],{"class":217},[47,61734,1384],{"class":221},[47,61736,61737,61739,61741,61743,61745],{"class":49,"line":1773},[47,61738,54839],{"class":85},[47,61740,51491],{"class":221},[47,61742,826],{"class":85},[47,61744,51546],{"class":217},[47,61746,1384],{"class":221},[47,61748,61749,61751,61753,61755,61757],{"class":49,"line":1787},[47,61750,55188],{"class":85},[47,61752,51491],{"class":221},[47,61754,875],{"class":85},[47,61756,547],{"class":217},[47,61758,1384],{"class":221},[47,61760,61761,61764,61766,61769],{"class":49,"line":1792},[47,61762,61763],{"class":85},"      overflow",[47,61765,51491],{"class":221},[47,61767,61768],{"class":85},"hidden",[47,61770,1384],{"class":221},[47,61772,61773,61776,61778,61781,61783,61786,61788,61791,61793,61795,61798],{"class":49,"line":1821},[47,61774,61775],{"class":85},"      background",[47,61777,51491],{"class":221},[47,61779,61780],{"class":85},"url",[47,61782,222],{"class":221},[47,61784,61785],{"class":5309},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[47,61787,13807],{"class":221},[47,61789,61790],{"class":85},"no-repeat",[47,61792,17237],{"class":85},[47,61794,25032],{"class":221},[47,61796,61797],{"class":85},"cover",[47,61799,1384],{"class":221},[47,61801,61802,61805,61807,61809,61811],{"class":49,"line":1826},[47,61803,61804],{"class":85},"      margin-right",[47,61806,51491],{"class":221},[47,61808,919],{"class":85},[47,61810,51546],{"class":217},[47,61812,1384],{"class":221},[47,61814,61815],{"class":49,"line":1843},[47,61816,2280],{"class":221},[47,61818,61819],{"class":49,"line":1848},[47,61820,2493],{"emptyLinePlaceholder":145},[47,61822,61823,61825,61828],{"class":49,"line":1853},[47,61824,61658],{"class":53},[47,61826,61827],{"class":51354}," textarea",[47,61829,15665],{"class":221},[47,61831,61832,61835,61837,61839],{"class":49,"line":1858},[47,61833,61834],{"class":85},"      outline",[47,61836,51491],{"class":221},[47,61838,54791],{"class":85},[47,61840,1384],{"class":221},[47,61842,61843,61846,61848,61851],{"class":49,"line":1872},[47,61844,61845],{"class":85},"      border-color",[47,61847,51491],{"class":221},[47,61849,61850],{"class":85},"transparent",[47,61852,1384],{"class":221},[47,61854,61855,61858,61860,61862],{"class":49,"line":1877},[47,61856,61857],{"class":85},"      resize",[47,61859,51491],{"class":221},[47,61861,54791],{"class":85},[47,61863,1384],{"class":221},[47,61865,61866,61868,61870,61873],{"class":49,"line":2670},[47,61867,61775],{"class":85},[47,61869,51491],{"class":221},[47,61871,61872],{"class":85},"#f5f5f5",[47,61874,1384],{"class":221},[47,61876,61877,61879,61881,61883,61885],{"class":49,"line":2684},[47,61878,55188],{"class":85},[47,61880,51491],{"class":221},[47,61882,512],{"class":85},[47,61884,51546],{"class":217},[47,61886,1384],{"class":221},[47,61888,61889,61892,61894,61896],{"class":49,"line":2692},[47,61890,61891],{"class":85},"      flex",[47,61893,51491],{"class":221},[47,61895,436],{"class":85},[47,61897,1384],{"class":221},[47,61899,61900,61902,61904,61906,61908],{"class":49,"line":2697},[47,61901,54749],{"class":85},[47,61903,51491],{"class":221},[47,61905,665],{"class":85},[47,61907,51546],{"class":217},[47,61909,1384],{"class":221},[47,61911,61912,61915,61917,61919,61922,61924],{"class":49,"line":2703},[47,61913,61914],{"class":85},"      transition",[47,61916,51491],{"class":221},[47,61918,28175],{"class":85},[47,61920,61921],{"class":85}," 0.5",[47,61923,914],{"class":217},[47,61925,1384],{"class":221},[47,61927,61928,61930,61932,61934,61936],{"class":49,"line":2709},[47,61929,54839],{"class":85},[47,61931,51491],{"class":221},[47,61933,1170],{"class":85},[47,61935,51546],{"class":217},[47,61937,1384],{"class":221},[47,61939,61940],{"class":49,"line":2714},[47,61941,2280],{"class":221},[47,61943,61944],{"class":49,"line":8041},[47,61945,2493],{"emptyLinePlaceholder":145},[47,61947,61948,61950,61952,61955],{"class":49,"line":8065},[47,61949,61658],{"class":53},[47,61951,61827],{"class":51354},[47,61953,61954],{"class":53},":focus",[47,61956,15665],{"class":221},[47,61958,61959,61961,61963,61966],{"class":49,"line":8070},[47,61960,61845],{"class":85},[47,61962,51491],{"class":221},[47,61964,61965],{"class":85},"#e4e4e4",[47,61967,1384],{"class":221},[47,61969,61970,61972,61974,61976],{"class":49,"line":8076},[47,61971,61775],{"class":85},[47,61973,51491],{"class":221},[47,61975,60896],{"class":85},[47,61977,1384],{"class":221},[47,61979,61980,61982,61984,61986,61988],{"class":49,"line":8103},[47,61981,54839],{"class":85},[47,61983,51491],{"class":221},[47,61985,875],{"class":85},[47,61987,51546],{"class":217},[47,61989,1384],{"class":221},[47,61991,61992],{"class":49,"line":8108},[47,61993,2280],{"class":221},[47,61995,61996],{"class":49,"line":8114},[47,61997,2493],{"emptyLinePlaceholder":145},[47,61999,62000,62002,62004],{"class":49,"line":8126},[47,62001,61658],{"class":53},[47,62003,57521],{"class":51354},[47,62005,15665],{"class":221},[47,62007,62008,62010,62012,62015],{"class":49,"line":8138},[47,62009,61775],{"class":85},[47,62011,51491],{"class":221},[47,62013,62014],{"class":85},"#00aeec",[47,62016,1384],{"class":221},[47,62018,62019,62021,62023,62025],{"class":49,"line":8150},[47,62020,57470],{"class":85},[47,62022,51491],{"class":221},[47,62024,60896],{"class":85},[47,62026,1384],{"class":221},[47,62028,62029,62032,62034,62036],{"class":49,"line":9809},[47,62030,62031],{"class":85},"      border",[47,62033,51491],{"class":221},[47,62035,54791],{"class":85},[47,62037,1384],{"class":221},[47,62039,62040,62042,62044,62046,62048],{"class":49,"line":9834},[47,62041,55188],{"class":85},[47,62043,51491],{"class":221},[47,62045,512],{"class":85},[47,62047,51546],{"class":217},[47,62049,1384],{"class":221},[47,62051,62052,62055,62057,62059,62061],{"class":49,"line":9857},[47,62053,62054],{"class":85},"      margin-left",[47,62056,51491],{"class":221},[47,62058,665],{"class":85},[47,62060,51546],{"class":217},[47,62062,1384],{"class":221},[47,62064,62065,62067,62069,62071,62073],{"class":49,"line":9881},[47,62066,54825],{"class":85},[47,62068,51491],{"class":221},[47,62070,575],{"class":85},[47,62072,51546],{"class":217},[47,62074,1384],{"class":221},[47,62076,62077,62080,62082,62085],{"class":49,"line":9886},[47,62078,62079],{"class":85},"      cursor",[47,62081,51491],{"class":221},[47,62083,62084],{"class":85},"pointer",[47,62086,1384],{"class":221},[47,62088,62089],{"class":49,"line":9891},[47,62090,2280],{"class":221},[47,62092,62093],{"class":49,"line":9896},[47,62094,2493],{"emptyLinePlaceholder":145},[47,62096,62097,62099,62102],{"class":49,"line":9905},[47,62098,61658],{"class":53},[47,62100,62101],{"class":53}," .total",[47,62103,15665],{"class":221},[47,62105,62106,62108,62110,62112,62114],{"class":49,"line":9910},[47,62107,61804],{"class":85},[47,62109,51491],{"class":221},[47,62111,831],{"class":85},[47,62113,51546],{"class":217},[47,62115,1384],{"class":221},[47,62117,62118,62120,62122,62125],{"class":49,"line":9916},[47,62119,57470],{"class":85},[47,62121,51491],{"class":221},[47,62123,62124],{"class":85},"#999",[47,62126,1384],{"class":221},[47,62128,62129,62132,62134,62136,62138],{"class":49,"line":9937},[47,62130,62131],{"class":85},"      margin-top",[47,62133,51491],{"class":221},[47,62135,538],{"class":85},[47,62137,51546],{"class":217},[47,62139,1384],{"class":221},[47,62141,62142,62145,62147,62149],{"class":49,"line":9943},[47,62143,62144],{"class":85},"      opacity",[47,62146,51491],{"class":221},[47,62148,411],{"class":85},[47,62150,1384],{"class":221},[47,62152,62153,62155,62157,62159,62161,62163],{"class":49,"line":9957},[47,62154,61914],{"class":85},[47,62156,51491],{"class":221},[47,62158,28175],{"class":85},[47,62160,61921],{"class":85},[47,62162,914],{"class":217},[47,62164,1384],{"class":221},[47,62166,62167],{"class":49,"line":9963},[47,62168,2280],{"class":221},[47,62170,62171],{"class":49,"line":9990},[47,62172,2493],{"emptyLinePlaceholder":145},[47,62174,62175,62178],{"class":49,"line":9999},[47,62176,62177],{"class":53},"    .list",[47,62179,15665],{"class":221},[47,62181,62182,62184,62186,62188,62190],{"class":49,"line":10005},[47,62183,61665],{"class":85},[47,62185,51491],{"class":221},[47,62187,4080],{"class":85},[47,62189,51546],{"class":217},[47,62191,1384],{"class":221},[47,62193,62194,62196,62198,62200,62202],{"class":49,"line":10013},[47,62195,61678],{"class":85},[47,62197,51491],{"class":221},[47,62199,61683],{"class":85},[47,62201,51546],{"class":217},[47,62203,1384],{"class":221},[47,62205,62206,62208,62210,62212],{"class":49,"line":10018},[47,62207,55063],{"class":85},[47,62209,51491],{"class":221},[47,62211,51531],{"class":85},[47,62213,1384],{"class":221},[47,62215,62216],{"class":49,"line":16697},[47,62217,2280],{"class":221},[47,62219,62220],{"class":49,"line":16703},[47,62221,2493],{"emptyLinePlaceholder":145},[47,62223,62224,62226,62229],{"class":49,"line":16726},[47,62225,62177],{"class":53},[47,62227,62228],{"class":53}," .item",[47,62230,15665],{"class":221},[47,62232,62233,62235,62237,62239,62241],{"class":49,"line":16732},[47,62234,54825],{"class":85},[47,62236,51491],{"class":221},[47,62238,530],{"class":85},[47,62240,547],{"class":217},[47,62242,1384],{"class":221},[47,62244,62245,62247,62249,62251],{"class":49,"line":16755},[47,62246,55063],{"class":85},[47,62248,51491],{"class":221},[47,62250,51531],{"class":85},[47,62252,1384],{"class":221},[47,62254,62255],{"class":49,"line":16769},[47,62256,2280],{"class":221},[47,62258,62259],{"class":49,"line":16789},[47,62260,2493],{"emptyLinePlaceholder":145},[47,62262,62263,62265,62267,62270],{"class":49,"line":16795},[47,62264,62177],{"class":53},[47,62266,62228],{"class":53},[47,62268,62269],{"class":53}," .info",[47,62271,15665],{"class":221},[47,62273,62274,62276,62278,62280],{"class":49,"line":16806},[47,62275,61891],{"class":85},[47,62277,51491],{"class":221},[47,62279,436],{"class":85},[47,62281,1384],{"class":221},[47,62283,62284,62287,62289,62291,62293,62296,62299],{"class":49,"line":16829},[47,62285,62286],{"class":85},"      border-bottom",[47,62288,51491],{"class":221},[47,62290,436],{"class":85},[47,62292,51546],{"class":217},[47,62294,62295],{"class":85}," dashed",[47,62297,62298],{"class":85}," #e4e4e4",[47,62300,1384],{"class":221},[47,62302,62303,62306,62308,62310,62312],{"class":49,"line":16851},[47,62304,62305],{"class":85},"      padding-bottom",[47,62307,51491],{"class":221},[47,62309,665],{"class":85},[47,62311,51546],{"class":217},[47,62313,1384],{"class":221},[47,62315,62316],{"class":49,"line":16856},[47,62317,2280],{"class":221},[47,62319,62320],{"class":49,"line":16862},[47,62321,2493],{"emptyLinePlaceholder":145},[47,62323,62324,62326,62328,62330],{"class":49,"line":16876},[47,62325,62177],{"class":53},[47,62327,62228],{"class":53},[47,62329,6918],{"class":51354},[47,62331,15665],{"class":221},[47,62333,62334,62336,62338,62340],{"class":49,"line":16889},[47,62335,54760],{"class":85},[47,62337,51491],{"class":221},[47,62339,411],{"class":85},[47,62341,1384],{"class":221},[47,62343,62344],{"class":49,"line":16894},[47,62345,2280],{"class":221},[47,62347,62348],{"class":49,"line":16908},[47,62349,2493],{"emptyLinePlaceholder":145},[47,62351,62352,62354,62356,62359],{"class":49,"line":16913},[47,62353,62177],{"class":53},[47,62355,62228],{"class":53},[47,62357,62358],{"class":53}," .name",[47,62360,15665],{"class":221},[47,62362,62363,62365,62367,62370],{"class":49,"line":16919},[47,62364,57470],{"class":85},[47,62366,51491],{"class":221},[47,62368,62369],{"class":85},"#FB7299",[47,62371,1384],{"class":221},[47,62373,62374,62376,62378,62380,62382],{"class":49,"line":16924},[47,62375,54976],{"class":85},[47,62377,51491],{"class":221},[47,62379,768],{"class":85},[47,62381,51546],{"class":217},[47,62383,1384],{"class":221},[47,62385,62386,62389,62391,62394],{"class":49,"line":16938},[47,62387,62388],{"class":85},"      font-weight",[47,62390,51491],{"class":221},[47,62392,62393],{"class":85},"bold",[47,62395,1384],{"class":221},[47,62397,62398],{"class":49,"line":16943},[47,62399,2280],{"class":221},[47,62401,62402],{"class":49,"line":16948},[47,62403,2493],{"emptyLinePlaceholder":145},[47,62405,62406,62408,62410,62413],{"class":49,"line":16962},[47,62407,62177],{"class":53},[47,62409,62228],{"class":53},[47,62411,62412],{"class":53}," .text",[47,62414,15665],{"class":221},[47,62416,62417,62419,62421,62424],{"class":49,"line":16974},[47,62418,57470],{"class":85},[47,62420,51491],{"class":221},[47,62422,62423],{"class":85},"#333",[47,62425,1384],{"class":221},[47,62427,62428,62430,62432,62434,62436,62438],{"class":49,"line":16979},[47,62429,54749],{"class":85},[47,62431,51491],{"class":221},[47,62433,665],{"class":85},[47,62435,51546],{"class":217},[47,62437,4186],{"class":85},[47,62439,1384],{"class":221},[47,62441,62442],{"class":49,"line":16992},[47,62443,2280],{"class":221},[47,62445,62446],{"class":49,"line":16997},[47,62447,2493],{"emptyLinePlaceholder":145},[47,62449,62450,62452,62454,62457],{"class":49,"line":17002},[47,62451,62177],{"class":53},[47,62453,62228],{"class":53},[47,62455,62456],{"class":53}," .time",[47,62458,15665],{"class":221},[47,62460,62461,62463,62465,62467],{"class":49,"line":17007},[47,62462,57470],{"class":85},[47,62464,51491],{"class":221},[47,62466,62124],{"class":85},[47,62468,1384],{"class":221},[47,62470,62471,62473,62475,62477,62479],{"class":49,"line":17020},[47,62472,54976],{"class":85},[47,62474,51491],{"class":221},[47,62476,717],{"class":85},[47,62478,51546],{"class":217},[47,62480,1384],{"class":221},[47,62482,62483],{"class":49,"line":17025},[47,62484,2280],{"class":221},[47,62486,62487,62489,62491],{"class":49,"line":32687},[47,62488,52471],{"class":221},[47,62490,134],{"class":51354},[47,62492,51361],{"class":221},[47,62494,62495,62497,62499],{"class":49,"line":32693},[47,62496,51839],{"class":221},[47,62498,51388],{"class":51354},[47,62500,51361],{"class":221},[47,62502,62503],{"class":49,"line":32699},[47,62504,2493],{"emptyLinePlaceholder":145},[47,62506,62507,62509,62511],{"class":49,"line":32705},[47,62508,1129],{"class":221},[47,62510,51854],{"class":51354},[47,62512,51361],{"class":221},[47,62514,62515,62517,62519,62521,62523,62526],{"class":49,"line":32711},[47,62516,52198],{"class":221},[47,62518,51665],{"class":51354},[47,62520,53540],{"class":53},[47,62522,267],{"class":221},[47,62524,62525],{"class":81},"\"wrapper\"",[47,62527,51361],{"class":221},[47,62529,62530,62532,62534,62536,62538,62541,62543,62545],{"class":49,"line":32722},[47,62531,51395],{"class":221},[47,62533,660],{"class":51354},[47,62535,53540],{"class":53},[47,62537,267],{"class":221},[47,62539,62540],{"class":81},"\"avatar\"",[47,62542,55368],{"class":221},[47,62544,660],{"class":51354},[47,62546,51361],{"class":221},[47,62548,62549,62551,62553,62555,62557,62560,62562,62564,62567,62569,62571,62573,62576,62578,62581,62583,62585],{"class":49,"line":32728},[47,62550,51395],{"class":221},[47,62552,54342],{"class":51354},[47,62554,15052],{"class":53},[47,62556,267],{"class":221},[47,62558,62559],{"class":81},"\"tx\"",[47,62561,61074],{"class":53},[47,62563,267],{"class":221},[47,62565,62566],{"class":81},"\"发一条友善的评论\"",[47,62568,54365],{"class":53},[47,62570,267],{"class":221},[47,62572,3794],{"class":81},[47,62574,62575],{"class":53}," maxlength",[47,62577,267],{"class":221},[47,62579,62580],{"class":81},"\"200\"",[47,62582,55368],{"class":221},[47,62584,54342],{"class":51354},[47,62586,51361],{"class":221},[47,62588,62589,62591,62593,62596,62598],{"class":49,"line":32748},[47,62590,51395],{"class":221},[47,62592,53941],{"class":51354},[47,62594,62595],{"class":221},">发布\u003C\u002F",[47,62597,53941],{"class":51354},[47,62599,51361],{"class":221},[47,62601,62602,62604,62606],{"class":49,"line":32754},[47,62603,52471],{"class":221},[47,62605,51665],{"class":51354},[47,62607,51361],{"class":221},[47,62609,62610,62612,62614,62616,62618,62620],{"class":49,"line":32765},[47,62611,52198],{"class":221},[47,62613,51665],{"class":51354},[47,62615,53540],{"class":53},[47,62617,267],{"class":221},[47,62619,62525],{"class":81},[47,62621,51361],{"class":221},[47,62623,62624,62626,62628,62630,62632,62635,62638,62640],{"class":49,"line":32771},[47,62625,51395],{"class":221},[47,62627,47],{"class":51354},[47,62629,53540],{"class":53},[47,62631,267],{"class":221},[47,62633,62634],{"class":81},"\"total\"",[47,62636,62637],{"class":221},">0\u002F200字\u003C\u002F",[47,62639,47],{"class":51354},[47,62641,51361],{"class":221},[47,62643,62644,62646,62648],{"class":49,"line":32777},[47,62645,52471],{"class":221},[47,62647,51665],{"class":51354},[47,62649,51361],{"class":221},[47,62651,62652,62654,62656,62658,62660,62663],{"class":49,"line":32783},[47,62653,52198],{"class":221},[47,62655,51665],{"class":51354},[47,62657,53540],{"class":53},[47,62659,267],{"class":221},[47,62661,62662],{"class":81},"\"list\"",[47,62664,51361],{"class":221},[47,62666,62667,62669,62671,62673,62675,62678,62681,62683,62686],{"class":49,"line":32789},[47,62668,51395],{"class":221},[47,62670,51665],{"class":51354},[47,62672,53540],{"class":53},[47,62674,267],{"class":221},[47,62676,62677],{"class":81},"\"item\"",[47,62679,62680],{"class":53}," style",[47,62682,267],{"class":221},[47,62684,62685],{"class":81},"\"display: none;\"",[47,62687,51361],{"class":221},[47,62689,62690,62692,62694,62696,62698,62700,62702,62704],{"class":49,"line":32795},[47,62691,55288],{"class":221},[47,62693,660],{"class":51354},[47,62695,53540],{"class":53},[47,62697,267],{"class":221},[47,62699,62540],{"class":81},[47,62701,55368],{"class":221},[47,62703,660],{"class":51354},[47,62705,51361],{"class":221},[47,62707,62708,62710,62712,62714,62716,62719],{"class":49,"line":32801},[47,62709,55288],{"class":221},[47,62711,51665],{"class":51354},[47,62713,53540],{"class":53},[47,62715,267],{"class":221},[47,62717,62718],{"class":81},"\"info\"",[47,62720,51361],{"class":221},[47,62722,62723,62725,62727,62729,62731,62734,62737,62739],{"class":49,"line":32807},[47,62724,55356],{"class":221},[47,62726,19],{"class":51354},[47,62728,53540],{"class":53},[47,62730,267],{"class":221},[47,62732,62733],{"class":81},"\"name\"",[47,62735,62736],{"class":221},">清风徐来\u003C\u002F",[47,62738,19],{"class":51354},[47,62740,51361],{"class":221},[47,62742,62743,62745,62747,62749,62751,62754,62757,62759],{"class":49,"line":32827},[47,62744,55356],{"class":221},[47,62746,19],{"class":51354},[47,62748,53540],{"class":53},[47,62750,267],{"class":221},[47,62752,62753],{"class":81},"\"text\"",[47,62755,62756],{"class":221},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[47,62758,19],{"class":51354},[47,62760,51361],{"class":221},[47,62762,62763,62765,62767,62769,62771,62774,62777,62779],{"class":49,"line":32833},[47,62764,55356],{"class":221},[47,62766,19],{"class":51354},[47,62768,53540],{"class":53},[47,62770,267],{"class":221},[47,62772,62773],{"class":81},"\"time\"",[47,62775,62776],{"class":221},">2022-10-10 20:29:21\u003C\u002F",[47,62778,19],{"class":51354},[47,62780,51361],{"class":221},[47,62782,62783,62785,62787],{"class":49,"line":32849},[47,62784,55461],{"class":221},[47,62786,51665],{"class":51354},[47,62788,51361],{"class":221},[47,62790,62791,62793,62795],{"class":49,"line":32855},[47,62792,51830],{"class":221},[47,62794,51665],{"class":51354},[47,62796,51361],{"class":221},[47,62798,62799,62801,62803],{"class":49,"line":32869},[47,62800,52471],{"class":221},[47,62802,51665],{"class":51354},[47,62804,51361],{"class":221},[47,62806,62807,62809,62811],{"class":49,"line":32875},[47,62808,52198],{"class":221},[47,62810,51867],{"class":51354},[47,62812,51361],{"class":221},[47,62814,62815,62817,62820,62822,62824,62826,62828,62831],{"class":49,"line":32890},[47,62816,11314],{"class":217},[47,62818,62819],{"class":85}," tx",[47,62821,13657],{"class":217},[47,62823,54450],{"class":221},[47,62825,54453],{"class":53},[47,62827,222],{"class":221},[47,62829,62830],{"class":81},"'#tx'",[47,62832,228],{"class":221},[47,62834,62835,62837,62840,62842,62844,62846,62848,62851],{"class":49,"line":32896},[47,62836,11314],{"class":217},[47,62838,62839],{"class":85}," total",[47,62841,13657],{"class":217},[47,62843,54450],{"class":221},[47,62845,54453],{"class":53},[47,62847,222],{"class":221},[47,62849,62850],{"class":81},"'.total'",[47,62852,228],{"class":221},[47,62854,62855],{"class":49,"line":32905},[47,62856,62857],{"class":279},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[47,62859,62860,62863,62865,62867,62869,62871,62873],{"class":49,"line":32911},[47,62861,62862],{"class":221},"    tx.",[47,62864,57867],{"class":53},[47,62866,222],{"class":221},[47,62868,61381],{"class":81},[47,62870,12528],{"class":221},[47,62872,54503],{"class":217},[47,62874,54506],{"class":221},[47,62876,62877,62880,62882],{"class":49,"line":32920},[47,62878,62879],{"class":221},"      total.style.opacity ",[47,62881,267],{"class":217},[47,62883,55753],{"class":85},[47,62885,62886],{"class":49,"line":32926},[47,62887,33515],{"class":221},[47,62889,62890],{"class":49,"line":32932},[47,62891,62892],{"class":279},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[47,62894,62895,62897,62899,62901,62903,62905,62907],{"class":49,"line":32941},[47,62896,62862],{"class":221},[47,62898,57867],{"class":53},[47,62900,222],{"class":221},[47,62902,61442],{"class":81},[47,62904,12528],{"class":221},[47,62906,54503],{"class":217},[47,62908,54506],{"class":221},[47,62910,62911,62913,62915],{"class":49,"line":32947},[47,62912,62879],{"class":221},[47,62914,267],{"class":217},[47,62916,47387],{"class":85},[47,62918,62919],{"class":49,"line":32958},[47,62920,33515],{"class":221},[47,62922,62923],{"class":49,"line":32964},[47,62924,62925],{"class":279},"    \u002F\u002F 3. 检测用户输入\n",[47,62927,62928,62930,62932,62934,62937,62939,62941],{"class":49,"line":32983},[47,62929,62862],{"class":221},[47,62931,57867],{"class":53},[47,62933,222],{"class":221},[47,62935,62936],{"class":81},"'input'",[47,62938,12528],{"class":221},[47,62940,54503],{"class":217},[47,62942,54506],{"class":221},[47,62944,62945],{"class":49,"line":32989},[47,62946,62947],{"class":279},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[47,62949,62950,62953,62955,62958,62961,62963,62966,62968,62970],{"class":49,"line":33000},[47,62951,62952],{"class":221},"      total.innerHTML ",[47,62954,267],{"class":217},[47,62956,62957],{"class":81}," `${",[47,62959,62960],{"class":221},"tx",[47,62962,777],{"class":81},[47,62964,62965],{"class":221},"value",[47,62967,777],{"class":81},[47,62969,52022],{"class":85},[47,62971,62972],{"class":81},"}\u002F200字`\n",[47,62974,62975],{"class":49,"line":33006},[47,62976,33515],{"class":221},[47,62978,62979],{"class":49,"line":33026},[47,62980,2493],{"emptyLinePlaceholder":145},[47,62982,62983],{"class":49,"line":33042},[47,62984,62985],{"class":279},"    \u002F\u002F const str = 'andy'\n",[47,62987,62988],{"class":49,"line":33048},[47,62989,62990],{"class":279},"    \u002F\u002F console.log(str.length)\n",[47,62992,62993,62995,62997],{"class":49,"line":33062},[47,62994,52471],{"class":221},[47,62996,51867],{"class":51354},[47,62998,51361],{"class":221},[47,63000,63001,63003,63005],{"class":49,"line":33068},[47,63002,51839],{"class":221},[47,63004,51854],{"class":51354},[47,63006,51361],{"class":221},[47,63008,63009],{"class":49,"line":33074},[47,63010,2493],{"emptyLinePlaceholder":145},[47,63012,63013,63015,63017],{"class":49,"line":33085},[47,63014,51839],{"class":221},[47,63016,50689],{"class":51354},[47,63018,51361],{"class":221},[22091,63020,63022],{"id":63021},"_3254-change事件","3.2.5.4 change事件",[19,63024,63025],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,63027,63028],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,63030,63031],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[38,63033,63035],{"className":50687,"code":63034,"language":50689,"meta":43,"style":43},"\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",[26,63036,63037,63047,63061,63065,63073,63087,63107,63119,63127,63131,63139,63153,63161,63179,63197,63209,63213,63221,63229,63233],{"__ignoreMap":43},[47,63038,63039,63041,63043,63045],{"class":49,"line":50},[47,63040,51351],{"class":221},[47,63042,51355],{"class":51354},[47,63044,51358],{"class":53},[47,63046,51361],{"class":221},[47,63048,63049,63051,63053,63055,63057,63059],{"class":49,"line":92},[47,63050,1129],{"class":221},[47,63052,50689],{"class":51354},[47,63054,51370],{"class":53},[47,63056,267],{"class":221},[47,63058,51375],{"class":81},[47,63060,51361],{"class":221},[47,63062,63063],{"class":49,"line":1273},[47,63064,2493],{"emptyLinePlaceholder":145},[47,63066,63067,63069,63071],{"class":49,"line":1288},[47,63068,1129],{"class":221},[47,63070,51388],{"class":51354},[47,63072,51361],{"class":221},[47,63074,63075,63077,63079,63081,63083,63085],{"class":49,"line":1294},[47,63076,52198],{"class":221},[47,63078,51398],{"class":51354},[47,63080,51401],{"class":53},[47,63082,267],{"class":221},[47,63084,51406],{"class":81},[47,63086,51361],{"class":221},[47,63088,63089,63091,63093,63095,63097,63099,63101,63103,63105],{"class":49,"line":1308},[47,63090,52198],{"class":221},[47,63092,51398],{"class":51354},[47,63094,15013],{"class":53},[47,63096,267],{"class":221},[47,63098,51445],{"class":81},[47,63100,51425],{"class":53},[47,63102,267],{"class":221},[47,63104,51452],{"class":81},[47,63106,51361],{"class":221},[47,63108,63109,63111,63113,63115,63117],{"class":49,"line":1314},[47,63110,52198],{"class":221},[47,63112,51461],{"class":51354},[47,63114,51464],{"class":221},[47,63116,51461],{"class":51354},[47,63118,51361],{"class":221},[47,63120,63121,63123,63125],{"class":49,"line":1405},[47,63122,51839],{"class":221},[47,63124,51388],{"class":51354},[47,63126,51361],{"class":221},[47,63128,63129],{"class":49,"line":1411},[47,63130,2493],{"emptyLinePlaceholder":145},[47,63132,63133,63135,63137],{"class":49,"line":1423},[47,63134,1129],{"class":221},[47,63136,51854],{"class":51354},[47,63138,51361],{"class":221},[47,63140,63141,63143,63145,63147,63149,63151],{"class":49,"line":1706},[47,63142,52198],{"class":221},[47,63144,53875],{"class":51354},[47,63146,53878],{"class":53},[47,63148,267],{"class":221},[47,63150,62753],{"class":81},[47,63152,51361],{"class":221},[47,63154,63155,63157,63159],{"class":49,"line":1711},[47,63156,52198],{"class":221},[47,63158,51867],{"class":51354},[47,63160,51361],{"class":221},[47,63162,63163,63165,63167,63169,63171,63173,63175,63177],{"class":49,"line":1717},[47,63164,11314],{"class":217},[47,63166,60659],{"class":85},[47,63168,13657],{"class":217},[47,63170,54450],{"class":221},[47,63172,54453],{"class":53},[47,63174,222],{"class":221},[47,63176,62936],{"class":81},[47,63178,228],{"class":221},[47,63180,63181,63184,63186,63188,63191,63193,63195],{"class":49,"line":1722},[47,63182,63183],{"class":221},"    input.",[47,63185,57867],{"class":53},[47,63187,222],{"class":221},[47,63189,63190],{"class":81},"'change'",[47,63192,12528],{"class":221},[47,63194,54503],{"class":217},[47,63196,54506],{"class":221},[47,63198,63199,63201,63203,63205,63207],{"class":49,"line":1736},[47,63200,58298],{"class":221},[47,63202,58301],{"class":53},[47,63204,222],{"class":221},[47,63206,812],{"class":85},[47,63208,228],{"class":221},[47,63210,63211],{"class":49,"line":1741},[47,63212,33515],{"class":221},[47,63214,63215,63217,63219],{"class":49,"line":1747},[47,63216,52471],{"class":221},[47,63218,51867],{"class":51354},[47,63220,51361],{"class":221},[47,63222,63223,63225,63227],{"class":49,"line":1768},[47,63224,51839],{"class":221},[47,63226,51854],{"class":51354},[47,63228,51361],{"class":221},[47,63230,63231],{"class":49,"line":1773},[47,63232,2493],{"emptyLinePlaceholder":145},[47,63234,63235,63237,63239],{"class":49,"line":1787},[47,63236,51839],{"class":221},[47,63238,50689],{"class":51354},[47,63240,51361],{"class":221},[19,63242,63243],{},"总结：内容发生改变才回去触发",[187,63245,63247],{"id":63246},"_326-事件对象","3.2.6 事件对象",[22091,63249,63251],{"id":63250},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,63253,63254],{},[1556,63255],{"alt":43,"src":63256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,63258,63259],{},[1556,63260],{"alt":43,"src":63261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,63263,63264],{},"点击一次，就输出了事件对象，它是个对象",[19,63266,63267],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,63269,63270],{},[1556,63271],{"alt":43,"src":63272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22091,63274,63276],{"id":63275},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,63278,63279],{},[1556,63280],{"alt":43,"src":63281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,63283,63284],{},"实现按特殊字符才是实现打印输出效果：",[38,63286,63288],{"className":53121,"code":63287,"language":53123,"meta":43,"style":43},"\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",[26,63289,63290,63298,63303,63317,63325,63330,63335,63340,63345,63350,63355,63360,63365,63370,63374,63378,63386],{"__ignoreMap":43},[47,63291,63292,63294,63296],{"class":49,"line":50},[47,63293,1129],{"class":221},[47,63295,51854],{"class":51354},[47,63297,51361],{"class":221},[47,63299,63300],{"class":49,"line":92},[47,63301,63302],{"class":279},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[47,63304,63305,63307,63309,63311,63313,63315],{"class":49,"line":1273},[47,63306,52198],{"class":221},[47,63308,53875],{"class":51354},[47,63310,53878],{"class":53},[47,63312,267],{"class":221},[47,63314,62753],{"class":81},[47,63316,51361],{"class":221},[47,63318,63319,63321,63323],{"class":49,"line":1288},[47,63320,52198],{"class":221},[47,63322,51867],{"class":51354},[47,63324,51361],{"class":221},[47,63326,63327],{"class":49,"line":1294},[47,63328,63329],{"class":221},"    \u002F\u002F const btn = document.querySelector('button')\n",[47,63331,63332],{"class":49,"line":1308},[47,63333,63334],{"class":221},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[47,63336,63337],{"class":49,"line":1314},[47,63338,63339],{"class":221},"    \u002F\u002F   console.log(e);\n",[47,63341,63342],{"class":49,"line":1405},[47,63343,63344],{"class":221},"    \u002F\u002F })\n",[47,63346,63347],{"class":49,"line":1411},[47,63348,63349],{"class":221},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[47,63351,63352],{"class":49,"line":1423},[47,63353,63354],{"class":221},"    const input = document.querySelector('input')\n",[47,63356,63357],{"class":49,"line":1706},[47,63358,63359],{"class":221},"    input.addEventListener('keyup', function (e) {\n",[47,63361,63362],{"class":49,"line":1711},[47,63363,63364],{"class":221},"      if (e.key === 'Enter') {\n",[47,63366,63367],{"class":49,"line":1717},[47,63368,63369],{"class":221},"        console.log('我按下了回车键')\n",[47,63371,63372],{"class":49,"line":1722},[47,63373,52452],{"class":221},[47,63375,63376],{"class":49,"line":1736},[47,63377,33515],{"class":221},[47,63379,63380,63382,63384],{"class":49,"line":1741},[47,63381,52471],{"class":221},[47,63383,51867],{"class":51354},[47,63385,51361],{"class":221},[47,63387,63388,63390,63392],{"class":49,"line":1747},[47,63389,51839],{"class":221},[47,63391,51854],{"class":51354},[47,63393,51361],{"class":221},[22091,63395,63397],{"id":63396},"_3263-trim方法","3.2.6.3 trim方法",[19,63399,63400],{},[1556,63401],{"alt":43,"src":63402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,63404,63405],{},[1556,63406],{"alt":43,"src":63407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,63409,63410],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,63412,63413],{},"str.trim()",[187,63415,63417],{"id":63416},"_327-环境对象","3.2.7 环境对象",[19,63419,63420],{},[1556,63421],{"alt":43,"src":63422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,63424,63425],{},[1556,63426],{"alt":43,"src":63427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,63429,63430],{},[1556,63431],{"alt":43,"src":63432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,63434,63435],{},"实际函数调用是window.fn()",[19,63437,63438],{},"普通函数里面this指向的是window",[106,63440,63441,63444,63447],{},[109,63442,63443],{},"在普通函数下，this指向的是window",[109,63445,63446],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[109,63448,63449],{},"箭头函数没有this",[19,63451,63452],{},"粗略记法就是：谁调用，this就指向谁",[19,63454,63455],{},[1556,63456],{"alt":43,"src":63457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,63459,63460],{},[1556,63461],{"alt":43,"src":63462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,63464,63465],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,63467,63468],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[38,63470,63472],{"className":53121,"code":63471,"language":53123,"meta":43,"style":43},"\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",[26,63473,63474,63482,63494,63502,63507,63512,63517,63522,63526,63534],{"__ignoreMap":43},[47,63475,63476,63478,63480],{"class":49,"line":50},[47,63477,1129],{"class":221},[47,63479,51854],{"class":51354},[47,63481,51361],{"class":221},[47,63483,63484,63486,63488,63490,63492],{"class":49,"line":92},[47,63485,52198],{"class":221},[47,63487,53941],{"class":51354},[47,63489,53947],{"class":221},[47,63491,53941],{"class":51354},[47,63493,51361],{"class":221},[47,63495,63496,63498,63500],{"class":49,"line":1273},[47,63497,52198],{"class":221},[47,63499,51867],{"class":51354},[47,63501,51361],{"class":221},[47,63503,63504],{"class":49,"line":1288},[47,63505,63506],{"class":221},"    const button = document.querySelector('button')\n",[47,63508,63509],{"class":49,"line":1294},[47,63510,63511],{"class":221},"    button.addEventListener('click', function () {\n",[47,63513,63514],{"class":49,"line":1308},[47,63515,63516],{"class":221},"      \u002F\u002F console.log(this);\n",[47,63518,63519],{"class":49,"line":1314},[47,63520,63521],{"class":221},"      this.style.color = 'pink'\n",[47,63523,63524],{"class":49,"line":1405},[47,63525,33515],{"class":221},[47,63527,63528,63530,63532],{"class":49,"line":1411},[47,63529,52471],{"class":221},[47,63531,51867],{"class":51354},[47,63533,51361],{"class":221},[47,63535,63536,63538,63540],{"class":49,"line":1423},[47,63537,51839],{"class":221},[47,63539,51854],{"class":51354},[47,63541,51361],{"class":221},[187,63543,63545],{"id":63544},"_328-回调函数","3.2.8 回调函数",[19,63547,63548],{},[1556,63549],{"alt":43,"src":63550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,63552,63553],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,63555,11425],{},[106,63557,63558,63561,63564],{},[109,63559,63560],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[109,63562,63563],{},"回调函数本质还是函数，只不过把它当成参数使用",[109,63565,63566],{},"使用匿名函数做为回调函数比较常见",[187,63568,63570],{"id":63569},"_329-tab栏切换","3.2.9 tab栏切换",[19,63572,63573],{},[1556,63574],{"alt":43,"src":63575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[38,63577,63579],{"className":50687,"code":63578,"language":50689,"meta":43,"style":43},"\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",[26,63580,63581,63591,63605,63609,63617,63631,63651,63671,63684,63692,63698,63708,63718,63722,63726,63733,63746,63759,63771,63787,63791,63795,63802,63814,63826,63838,63848,63858,63862,63866,63875,63887,63898,63910,63914,63918,63926,63936,63946,63956,63960,63964,63974,63988,64000,64004,64008,64020,64031,64048,64058,64062,64066,64081,64092,64102,64106,64110,64117,64132,64136,64140,64148,64158,64162,64166,64175,64185,64189,64197,64205,64209,64217,64232,64247,64260,64268,64302,64329,64356,64383,64410,64418,64426,64441,64478,64513,64548,64583,64618,64626,64634,64642,64647,64652,64672,64677,64706,64711,64716,64734,64739,64744,64749,64771,64776,64792,64796,64801,64806,64827,64832,64861,64865,64870,64874,64882,64890,64894],{"__ignoreMap":43},[47,63582,63583,63585,63587,63589],{"class":49,"line":50},[47,63584,51351],{"class":221},[47,63586,51355],{"class":51354},[47,63588,51358],{"class":53},[47,63590,51361],{"class":221},[47,63592,63593,63595,63597,63599,63601,63603],{"class":49,"line":92},[47,63594,1129],{"class":221},[47,63596,50689],{"class":51354},[47,63598,51370],{"class":53},[47,63600,267],{"class":221},[47,63602,51375],{"class":81},[47,63604,51361],{"class":221},[47,63606,63607],{"class":49,"line":1273},[47,63608,2493],{"emptyLinePlaceholder":145},[47,63610,63611,63613,63615],{"class":49,"line":1288},[47,63612,1129],{"class":221},[47,63614,51388],{"class":51354},[47,63616,51361],{"class":221},[47,63618,63619,63621,63623,63625,63627,63629],{"class":49,"line":1294},[47,63620,52198],{"class":221},[47,63622,51398],{"class":51354},[47,63624,51401],{"class":53},[47,63626,267],{"class":221},[47,63628,51406],{"class":81},[47,63630,59181],{"class":221},[47,63632,63633,63635,63637,63639,63641,63643,63645,63647,63649],{"class":49,"line":1308},[47,63634,52198],{"class":221},[47,63636,51398],{"class":51354},[47,63638,51417],{"class":53},[47,63640,267],{"class":221},[47,63642,51422],{"class":81},[47,63644,51425],{"class":53},[47,63646,267],{"class":221},[47,63648,51430],{"class":81},[47,63650,59181],{"class":221},[47,63652,63653,63655,63657,63659,63661,63663,63665,63667,63669],{"class":49,"line":1314},[47,63654,52198],{"class":221},[47,63656,51398],{"class":51354},[47,63658,15013],{"class":53},[47,63660,267],{"class":221},[47,63662,51445],{"class":81},[47,63664,51425],{"class":53},[47,63666,267],{"class":221},[47,63668,51452],{"class":81},[47,63670,59181],{"class":221},[47,63672,63673,63675,63677,63680,63682],{"class":49,"line":1405},[47,63674,52198],{"class":221},[47,63676,51461],{"class":51354},[47,63678,63679],{"class":221},">tab栏切换\u003C\u002F",[47,63681,51461],{"class":51354},[47,63683,51361],{"class":221},[47,63685,63686,63688,63690],{"class":49,"line":1411},[47,63687,52198],{"class":221},[47,63689,134],{"class":51354},[47,63691,51361],{"class":221},[47,63693,63694,63696],{"class":49,"line":1423},[47,63695,6496],{"class":51354},[47,63697,15665],{"class":221},[47,63699,63700,63702,63704,63706],{"class":49,"line":1706},[47,63701,54760],{"class":85},[47,63703,51491],{"class":221},[47,63705,411],{"class":85},[47,63707,1384],{"class":221},[47,63709,63710,63712,63714,63716],{"class":49,"line":1711},[47,63711,54749],{"class":85},[47,63713,51491],{"class":221},[47,63715,411],{"class":85},[47,63717,1384],{"class":221},[47,63719,63720],{"class":49,"line":1717},[47,63721,2280],{"class":221},[47,63723,63724],{"class":49,"line":1722},[47,63725,2493],{"emptyLinePlaceholder":145},[47,63727,63728,63731],{"class":49,"line":1736},[47,63729,63730],{"class":53},"    .tab",[47,63732,15665],{"class":221},[47,63734,63735,63737,63739,63742,63744],{"class":49,"line":1741},[47,63736,54825],{"class":85},[47,63738,51491],{"class":221},[47,63740,63741],{"class":85},"590",[47,63743,51546],{"class":217},[47,63745,1384],{"class":221},[47,63747,63748,63750,63752,63755,63757],{"class":49,"line":1747},[47,63749,54839],{"class":85},[47,63751,51491],{"class":221},[47,63753,63754],{"class":85},"340",[47,63756,51546],{"class":217},[47,63758,1384],{"class":221},[47,63760,63761,63763,63765,63767,63769],{"class":49,"line":1768},[47,63762,54760],{"class":85},[47,63764,51491],{"class":221},[47,63766,919],{"class":85},[47,63768,51546],{"class":217},[47,63770,1384],{"class":221},[47,63772,63773,63775,63777,63779,63781,63783,63785],{"class":49,"line":1773},[47,63774,62031],{"class":85},[47,63776,51491],{"class":221},[47,63778,436],{"class":85},[47,63780,51546],{"class":217},[47,63782,51575],{"class":85},[47,63784,62298],{"class":85},[47,63786,1384],{"class":221},[47,63788,63789],{"class":49,"line":1787},[47,63790,2280],{"class":221},[47,63792,63793],{"class":49,"line":1792},[47,63794,2493],{"emptyLinePlaceholder":145},[47,63796,63797,63800],{"class":49,"line":1821},[47,63798,63799],{"class":53},"    .tab-nav",[47,63801,15665],{"class":221},[47,63803,63804,63806,63808,63810,63812],{"class":49,"line":1826},[47,63805,54825],{"class":85},[47,63807,51491],{"class":221},[47,63809,530],{"class":85},[47,63811,547],{"class":217},[47,63813,1384],{"class":221},[47,63815,63816,63818,63820,63822,63824],{"class":49,"line":1843},[47,63817,54839],{"class":85},[47,63819,51491],{"class":221},[47,63821,1126],{"class":85},[47,63823,51546],{"class":217},[47,63825,1384],{"class":221},[47,63827,63828,63830,63832,63834,63836],{"class":49,"line":1848},[47,63829,57413],{"class":85},[47,63831,51491],{"class":221},[47,63833,1126],{"class":85},[47,63835,51546],{"class":217},[47,63837,1384],{"class":221},[47,63839,63840,63842,63844,63846],{"class":49,"line":1853},[47,63841,55063],{"class":85},[47,63843,51491],{"class":221},[47,63845,51531],{"class":85},[47,63847,1384],{"class":221},[47,63849,63850,63852,63854,63856],{"class":49,"line":1858},[47,63851,55074],{"class":85},[47,63853,51491],{"class":221},[47,63855,51722],{"class":85},[47,63857,1384],{"class":221},[47,63859,63860],{"class":49,"line":1872},[47,63861,2280],{"class":221},[47,63863,63864],{"class":49,"line":1877},[47,63865,2493],{"emptyLinePlaceholder":145},[47,63867,63868,63870,63873],{"class":49,"line":2670},[47,63869,63799],{"class":53},[47,63871,63872],{"class":51354}," h3",[47,63874,15665],{"class":221},[47,63876,63877,63879,63881,63883,63885],{"class":49,"line":2684},[47,63878,54976],{"class":85},[47,63880,51491],{"class":221},[47,63882,1019],{"class":85},[47,63884,51546],{"class":217},[47,63886,1384],{"class":221},[47,63888,63889,63891,63893,63896],{"class":49,"line":2692},[47,63890,62388],{"class":85},[47,63892,51491],{"class":221},[47,63894,63895],{"class":85},"normal",[47,63897,1384],{"class":221},[47,63899,63900,63902,63904,63906,63908],{"class":49,"line":2697},[47,63901,62054],{"class":85},[47,63903,51491],{"class":221},[47,63905,919],{"class":85},[47,63907,51546],{"class":217},[47,63909,1384],{"class":221},[47,63911,63912],{"class":49,"line":2703},[47,63913,2280],{"class":221},[47,63915,63916],{"class":49,"line":2709},[47,63917,2493],{"emptyLinePlaceholder":145},[47,63919,63920,63922,63924],{"class":49,"line":2714},[47,63921,63799],{"class":53},[47,63923,61346],{"class":51354},[47,63925,15665],{"class":221},[47,63927,63928,63930,63932,63934],{"class":49,"line":8041},[47,63929,54786],{"class":85},[47,63931,51491],{"class":221},[47,63933,54791],{"class":85},[47,63935,1384],{"class":221},[47,63937,63938,63940,63942,63944],{"class":49,"line":8065},[47,63939,55063],{"class":85},[47,63941,51491],{"class":221},[47,63943,51531],{"class":85},[47,63945,1384],{"class":221},[47,63947,63948,63950,63952,63954],{"class":49,"line":8070},[47,63949,55074],{"class":85},[47,63951,51491],{"class":221},[47,63953,51634],{"class":85},[47,63955,1384],{"class":221},[47,63957,63958],{"class":49,"line":8076},[47,63959,2280],{"class":221},[47,63961,63962],{"class":49,"line":8103},[47,63963,2493],{"emptyLinePlaceholder":145},[47,63965,63966,63968,63970,63972],{"class":49,"line":8108},[47,63967,63799],{"class":53},[47,63969,61346],{"class":51354},[47,63971,55129],{"class":51354},[47,63973,15665],{"class":221},[47,63975,63976,63978,63980,63982,63984,63986],{"class":49,"line":8114},[47,63977,54760],{"class":85},[47,63979,51491],{"class":221},[47,63981,411],{"class":85},[47,63983,9043],{"class":85},[47,63985,51546],{"class":217},[47,63987,1384],{"class":221},[47,63989,63990,63992,63994,63996,63998],{"class":49,"line":8126},[47,63991,54976],{"class":85},[47,63993,51491],{"class":221},[47,63995,768],{"class":85},[47,63997,51546],{"class":217},[47,63999,1384],{"class":221},[47,64001,64002],{"class":49,"line":8138},[47,64003,2280],{"class":221},[47,64005,64006],{"class":49,"line":8150},[47,64007,2493],{"emptyLinePlaceholder":145},[47,64009,64010,64012,64014,64016,64018],{"class":49,"line":9809},[47,64011,63799],{"class":53},[47,64013,61346],{"class":51354},[47,64015,55129],{"class":51354},[47,64017,1492],{"class":51354},[47,64019,15665],{"class":221},[47,64021,64022,64025,64027,64029],{"class":49,"line":9834},[47,64023,64024],{"class":85},"      text-decoration",[47,64026,51491],{"class":221},[47,64028,54791],{"class":85},[47,64030,1384],{"class":221},[47,64032,64033,64035,64037,64039,64041,64043,64046],{"class":49,"line":9857},[47,64034,62286],{"class":85},[47,64036,51491],{"class":221},[47,64038,298],{"class":85},[47,64040,51546],{"class":217},[47,64042,51575],{"class":85},[47,64044,64045],{"class":85}," transparent",[47,64047,1384],{"class":221},[47,64049,64050,64052,64054,64056],{"class":49,"line":9881},[47,64051,57470],{"class":85},[47,64053,51491],{"class":221},[47,64055,62423],{"class":85},[47,64057,1384],{"class":221},[47,64059,64060],{"class":49,"line":9886},[47,64061,2280],{"class":221},[47,64063,64064],{"class":49,"line":9891},[47,64065,2493],{"emptyLinePlaceholder":145},[47,64067,64068,64070,64072,64074,64076,64079],{"class":49,"line":9896},[47,64069,63799],{"class":53},[47,64071,61346],{"class":51354},[47,64073,55129],{"class":51354},[47,64075,1492],{"class":51354},[47,64077,64078],{"class":53},".active",[47,64080,15665],{"class":221},[47,64082,64083,64085,64087,64090],{"class":49,"line":9905},[47,64084,61845],{"class":85},[47,64086,51491],{"class":221},[47,64088,64089],{"class":85},"#e1251b",[47,64091,1384],{"class":221},[47,64093,64094,64096,64098,64100],{"class":49,"line":9910},[47,64095,57470],{"class":85},[47,64097,51491],{"class":221},[47,64099,64089],{"class":85},[47,64101,1384],{"class":221},[47,64103,64104],{"class":49,"line":9916},[47,64105,2280],{"class":221},[47,64107,64108],{"class":49,"line":9937},[47,64109,2493],{"emptyLinePlaceholder":145},[47,64111,64112,64115],{"class":49,"line":9943},[47,64113,64114],{"class":53},"    .tab-content",[47,64116,15665],{"class":221},[47,64118,64119,64121,64123,64125,64128,64130],{"class":49,"line":9957},[47,64120,54749],{"class":85},[47,64122,51491],{"class":221},[47,64124,411],{"class":85},[47,64126,64127],{"class":85}," 16",[47,64129,51546],{"class":217},[47,64131,1384],{"class":221},[47,64133,64134],{"class":49,"line":9963},[47,64135,2280],{"class":221},[47,64137,64138],{"class":49,"line":9990},[47,64139,2493],{"emptyLinePlaceholder":145},[47,64141,64142,64144,64146],{"class":49,"line":9999},[47,64143,64114],{"class":53},[47,64145,62228],{"class":53},[47,64147,15665],{"class":221},[47,64149,64150,64152,64154,64156],{"class":49,"line":10005},[47,64151,55063],{"class":85},[47,64153,51491],{"class":221},[47,64155,54791],{"class":85},[47,64157,1384],{"class":221},[47,64159,64160],{"class":49,"line":10013},[47,64161,2280],{"class":221},[47,64163,64164],{"class":49,"line":10018},[47,64165,2493],{"emptyLinePlaceholder":145},[47,64167,64168,64170,64173],{"class":49,"line":16697},[47,64169,64114],{"class":53},[47,64171,64172],{"class":53}," .item.active",[47,64174,15665],{"class":221},[47,64176,64177,64179,64181,64183],{"class":49,"line":16703},[47,64178,55063],{"class":85},[47,64180,51491],{"class":221},[47,64182,60923],{"class":85},[47,64184,1384],{"class":221},[47,64186,64187],{"class":49,"line":16726},[47,64188,2280],{"class":221},[47,64190,64191,64193,64195],{"class":49,"line":16732},[47,64192,52471],{"class":221},[47,64194,134],{"class":51354},[47,64196,51361],{"class":221},[47,64198,64199,64201,64203],{"class":49,"line":16755},[47,64200,51839],{"class":221},[47,64202,51388],{"class":51354},[47,64204,51361],{"class":221},[47,64206,64207],{"class":49,"line":16769},[47,64208,2493],{"emptyLinePlaceholder":145},[47,64210,64211,64213,64215],{"class":49,"line":16789},[47,64212,1129],{"class":221},[47,64214,51854],{"class":51354},[47,64216,51361],{"class":221},[47,64218,64219,64221,64223,64225,64227,64230],{"class":49,"line":16795},[47,64220,52198],{"class":221},[47,64222,51665],{"class":51354},[47,64224,53540],{"class":53},[47,64226,267],{"class":221},[47,64228,64229],{"class":81},"\"tab\"",[47,64231,51361],{"class":221},[47,64233,64234,64236,64238,64240,64242,64245],{"class":49,"line":16806},[47,64235,51395],{"class":221},[47,64237,51665],{"class":51354},[47,64239,53540],{"class":53},[47,64241,267],{"class":221},[47,64243,64244],{"class":81},"\"tab-nav\"",[47,64246,51361],{"class":221},[47,64248,64249,64251,64253,64256,64258],{"class":49,"line":16829},[47,64250,55288],{"class":221},[47,64252,187],{"class":51354},[47,64254,64255],{"class":221},">每日特价\u003C\u002F",[47,64257,187],{"class":51354},[47,64259,51361],{"class":221},[47,64261,64262,64264,64266],{"class":49,"line":16851},[47,64263,55288],{"class":221},[47,64265,106],{"class":51354},[47,64267,51361],{"class":221},[47,64269,64270,64272,64274,64276,64278,64280,64282,64284,64286,64288,64291,64294,64296,64298,64300],{"class":49,"line":16856},[47,64271,55356],{"class":221},[47,64273,109],{"class":51354},[47,64275,61106],{"class":221},[47,64277,457],{"class":51354},[47,64279,53540],{"class":53},[47,64281,267],{"class":221},[47,64283,59760],{"class":81},[47,64285,61111],{"class":53},[47,64287,267],{"class":221},[47,64289,64290],{"class":81},"\"javascript:;\"",[47,64292,64293],{"class":221},">精选\u003C\u002F",[47,64295,457],{"class":51354},[47,64297,55368],{"class":221},[47,64299,109],{"class":51354},[47,64301,51361],{"class":221},[47,64303,64304,64306,64308,64310,64312,64314,64316,64318,64321,64323,64325,64327],{"class":49,"line":16862},[47,64305,55356],{"class":221},[47,64307,109],{"class":51354},[47,64309,61106],{"class":221},[47,64311,457],{"class":51354},[47,64313,61111],{"class":53},[47,64315,267],{"class":221},[47,64317,64290],{"class":81},[47,64319,64320],{"class":221},">美食\u003C\u002F",[47,64322,457],{"class":51354},[47,64324,55368],{"class":221},[47,64326,109],{"class":51354},[47,64328,51361],{"class":221},[47,64330,64331,64333,64335,64337,64339,64341,64343,64345,64348,64350,64352,64354],{"class":49,"line":16876},[47,64332,55356],{"class":221},[47,64334,109],{"class":51354},[47,64336,61106],{"class":221},[47,64338,457],{"class":51354},[47,64340,61111],{"class":53},[47,64342,267],{"class":221},[47,64344,64290],{"class":81},[47,64346,64347],{"class":221},">百货\u003C\u002F",[47,64349,457],{"class":51354},[47,64351,55368],{"class":221},[47,64353,109],{"class":51354},[47,64355,51361],{"class":221},[47,64357,64358,64360,64362,64364,64366,64368,64370,64372,64375,64377,64379,64381],{"class":49,"line":16889},[47,64359,55356],{"class":221},[47,64361,109],{"class":51354},[47,64363,61106],{"class":221},[47,64365,457],{"class":51354},[47,64367,61111],{"class":53},[47,64369,267],{"class":221},[47,64371,64290],{"class":81},[47,64373,64374],{"class":221},">个护\u003C\u002F",[47,64376,457],{"class":51354},[47,64378,55368],{"class":221},[47,64380,109],{"class":51354},[47,64382,51361],{"class":221},[47,64384,64385,64387,64389,64391,64393,64395,64397,64399,64402,64404,64406,64408],{"class":49,"line":16894},[47,64386,55356],{"class":221},[47,64388,109],{"class":51354},[47,64390,61106],{"class":221},[47,64392,457],{"class":51354},[47,64394,61111],{"class":53},[47,64396,267],{"class":221},[47,64398,64290],{"class":81},[47,64400,64401],{"class":221},">预告\u003C\u002F",[47,64403,457],{"class":51354},[47,64405,55368],{"class":221},[47,64407,109],{"class":51354},[47,64409,51361],{"class":221},[47,64411,64412,64414,64416],{"class":49,"line":16908},[47,64413,55461],{"class":221},[47,64415,106],{"class":51354},[47,64417,51361],{"class":221},[47,64419,64420,64422,64424],{"class":49,"line":16913},[47,64421,51830],{"class":221},[47,64423,51665],{"class":51354},[47,64425,51361],{"class":221},[47,64427,64428,64430,64432,64434,64436,64439],{"class":49,"line":16919},[47,64429,51395],{"class":221},[47,64431,51665],{"class":51354},[47,64433,53540],{"class":53},[47,64435,267],{"class":221},[47,64437,64438],{"class":81},"\"tab-content\"",[47,64440,51361],{"class":221},[47,64442,64443,64445,64447,64449,64451,64454,64456,64458,64460,64462,64465,64467,64469,64471,64474,64476],{"class":49,"line":16924},[47,64444,55288],{"class":221},[47,64446,51665],{"class":51354},[47,64448,53540],{"class":53},[47,64450,267],{"class":221},[47,64452,64453],{"class":81},"\"item active\"",[47,64455,61106],{"class":221},[47,64457,1556],{"class":51354},[47,64459,55293],{"class":53},[47,64461,267],{"class":221},[47,64463,64464],{"class":81},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[47,64466,55301],{"class":53},[47,64468,267],{"class":221},[47,64470,7745],{"class":81},[47,64472,64473],{"class":221}," \u002F>\u003C\u002F",[47,64475,51665],{"class":51354},[47,64477,51361],{"class":221},[47,64479,64480,64482,64484,64486,64488,64490,64492,64494,64496,64498,64501,64503,64505,64507,64509,64511],{"class":49,"line":16938},[47,64481,55288],{"class":221},[47,64483,51665],{"class":51354},[47,64485,53540],{"class":53},[47,64487,267],{"class":221},[47,64489,62677],{"class":81},[47,64491,61106],{"class":221},[47,64493,1556],{"class":51354},[47,64495,55293],{"class":53},[47,64497,267],{"class":221},[47,64499,64500],{"class":81},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[47,64502,55301],{"class":53},[47,64504,267],{"class":221},[47,64506,7745],{"class":81},[47,64508,64473],{"class":221},[47,64510,51665],{"class":51354},[47,64512,51361],{"class":221},[47,64514,64515,64517,64519,64521,64523,64525,64527,64529,64531,64533,64536,64538,64540,64542,64544,64546],{"class":49,"line":16943},[47,64516,55288],{"class":221},[47,64518,51665],{"class":51354},[47,64520,53540],{"class":53},[47,64522,267],{"class":221},[47,64524,62677],{"class":81},[47,64526,61106],{"class":221},[47,64528,1556],{"class":51354},[47,64530,55293],{"class":53},[47,64532,267],{"class":221},[47,64534,64535],{"class":81},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[47,64537,55301],{"class":53},[47,64539,267],{"class":221},[47,64541,7745],{"class":81},[47,64543,64473],{"class":221},[47,64545,51665],{"class":51354},[47,64547,51361],{"class":221},[47,64549,64550,64552,64554,64556,64558,64560,64562,64564,64566,64568,64571,64573,64575,64577,64579,64581],{"class":49,"line":16948},[47,64551,55288],{"class":221},[47,64553,51665],{"class":51354},[47,64555,53540],{"class":53},[47,64557,267],{"class":221},[47,64559,62677],{"class":81},[47,64561,61106],{"class":221},[47,64563,1556],{"class":51354},[47,64565,55293],{"class":53},[47,64567,267],{"class":221},[47,64569,64570],{"class":81},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[47,64572,55301],{"class":53},[47,64574,267],{"class":221},[47,64576,7745],{"class":81},[47,64578,64473],{"class":221},[47,64580,51665],{"class":51354},[47,64582,51361],{"class":221},[47,64584,64585,64587,64589,64591,64593,64595,64597,64599,64601,64603,64606,64608,64610,64612,64614,64616],{"class":49,"line":16962},[47,64586,55288],{"class":221},[47,64588,51665],{"class":51354},[47,64590,53540],{"class":53},[47,64592,267],{"class":221},[47,64594,62677],{"class":81},[47,64596,61106],{"class":221},[47,64598,1556],{"class":51354},[47,64600,55293],{"class":53},[47,64602,267],{"class":221},[47,64604,64605],{"class":81},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[47,64607,55301],{"class":53},[47,64609,267],{"class":221},[47,64611,7745],{"class":81},[47,64613,64473],{"class":221},[47,64615,51665],{"class":51354},[47,64617,51361],{"class":221},[47,64619,64620,64622,64624],{"class":49,"line":16974},[47,64621,51830],{"class":221},[47,64623,51665],{"class":51354},[47,64625,51361],{"class":221},[47,64627,64628,64630,64632],{"class":49,"line":16979},[47,64629,52471],{"class":221},[47,64631,51665],{"class":51354},[47,64633,51361],{"class":221},[47,64635,64636,64638,64640],{"class":49,"line":16992},[47,64637,52198],{"class":221},[47,64639,51867],{"class":51354},[47,64641,51361],{"class":221},[47,64643,64644],{"class":49,"line":16997},[47,64645,64646],{"class":279},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[47,64648,64649],{"class":49,"line":17002},[47,64650,64651],{"class":279},"    \u002F\u002F 1.1 获取 a 元素 \n",[47,64653,64654,64656,64659,64661,64663,64665,64667,64670],{"class":49,"line":17007},[47,64655,11314],{"class":217},[47,64657,64658],{"class":85}," as",[47,64660,13657],{"class":217},[47,64662,54450],{"class":221},[47,64664,55735],{"class":53},[47,64666,222],{"class":221},[47,64668,64669],{"class":81},"'.tab-nav a'",[47,64671,228],{"class":221},[47,64673,64674],{"class":49,"line":17020},[47,64675,64676],{"class":279},"    \u002F\u002F console.log(as) \n",[47,64678,64679,64681,64683,64685,64687,64689,64691,64693,64695,64698,64700,64702,64704],{"class":49,"line":17025},[47,64680,3294],{"class":217},[47,64682,1752],{"class":221},[47,64684,51901],{"class":217},[47,64686,9531],{"class":221},[47,64688,267],{"class":217},[47,64690,4186],{"class":85},[47,64692,9538],{"class":221},[47,64694,1129],{"class":217},[47,64696,64697],{"class":221}," as.",[47,64699,52022],{"class":85},[47,64701,3307],{"class":221},[47,64703,2385],{"class":217},[47,64705,12535],{"class":221},[47,64707,64708],{"class":49,"line":32687},[47,64709,64710],{"class":279},"      \u002F\u002F console.log(as[i])\n",[47,64712,64713],{"class":49,"line":32693},[47,64714,64715],{"class":279},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[47,64717,64718,64721,64723,64725,64728,64730,64732],{"class":49,"line":32699},[47,64719,64720],{"class":221},"      as[i].",[47,64722,57867],{"class":53},[47,64724,222],{"class":221},[47,64726,64727],{"class":81},"'mouseenter'",[47,64729,12528],{"class":221},[47,64731,54503],{"class":217},[47,64733,54506],{"class":221},[47,64735,64736],{"class":49,"line":32705},[47,64737,64738],{"class":279},"        \u002F\u002F console.log('鼠标经过')\n",[47,64740,64741],{"class":49,"line":32711},[47,64742,64743],{"class":279},"        \u002F\u002F 排他思想  \n",[47,64745,64746],{"class":49,"line":32722},[47,64747,64748],{"class":279},"        \u002F\u002F 干掉别人 移除类active\n",[47,64750,64751,64753,64755,64757,64760,64762,64764,64766,64769],{"class":49,"line":32728},[47,64752,51979],{"class":221},[47,64754,54453],{"class":53},[47,64756,222],{"class":221},[47,64758,64759],{"class":81},"'.tab-nav .active'",[47,64761,57057],{"class":221},[47,64763,57060],{"class":53},[47,64765,222],{"class":221},[47,64767,64768],{"class":81},"'active'",[47,64770,228],{"class":221},[47,64772,64773],{"class":49,"line":32748},[47,64774,64775],{"class":279},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[47,64777,64778,64781,64784,64786,64788,64790],{"class":49,"line":32754},[47,64779,64780],{"class":85},"        this",[47,64782,64783],{"class":221},".classList.",[47,64785,5427],{"class":53},[47,64787,222],{"class":221},[47,64789,64768],{"class":81},[47,64791,228],{"class":221},[47,64793,64794],{"class":49,"line":32765},[47,64795,2493],{"emptyLinePlaceholder":145},[47,64797,64798],{"class":49,"line":32771},[47,64799,64800],{"class":279},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[47,64802,64803],{"class":49,"line":32777},[47,64804,64805],{"class":279},"        \u002F\u002F 干掉别人\n",[47,64807,64808,64810,64812,64814,64817,64819,64821,64823,64825],{"class":49,"line":32783},[47,64809,51979],{"class":221},[47,64811,54453],{"class":53},[47,64813,222],{"class":221},[47,64815,64816],{"class":81},"'.tab-content .active'",[47,64818,57057],{"class":221},[47,64820,57060],{"class":53},[47,64822,222],{"class":221},[47,64824,64768],{"class":81},[47,64826,228],{"class":221},[47,64828,64829],{"class":49,"line":32789},[47,64830,64831],{"class":279},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[47,64833,64834,64836,64838,64840,64843,64845,64847,64849,64851,64853,64855,64857,64859],{"class":49,"line":32795},[47,64835,51979],{"class":221},[47,64837,54453],{"class":53},[47,64839,222],{"class":221},[47,64841,64842],{"class":81},"`.tab-content .item:nth-child(${",[47,64844,660],{"class":221},[47,64846,45620],{"class":217},[47,64848,25172],{"class":85},[47,64850,57086],{"class":81},[47,64852,57057],{"class":221},[47,64854,5427],{"class":53},[47,64856,222],{"class":221},[47,64858,64768],{"class":81},[47,64860,228],{"class":221},[47,64862,64863],{"class":49,"line":32801},[47,64864,2493],{"emptyLinePlaceholder":145},[47,64866,64867],{"class":49,"line":32807},[47,64868,64869],{"class":221},"      })\n",[47,64871,64872],{"class":49,"line":32827},[47,64873,2280],{"class":221},[47,64875,64876,64878,64880],{"class":49,"line":32833},[47,64877,52471],{"class":221},[47,64879,51867],{"class":51354},[47,64881,51361],{"class":221},[47,64883,64884,64886,64888],{"class":49,"line":32849},[47,64885,51839],{"class":221},[47,64887,51854],{"class":51354},[47,64889,51361],{"class":221},[47,64891,64892],{"class":49,"line":32855},[47,64893,2493],{"emptyLinePlaceholder":145},[47,64895,64896,64898,64900],{"class":49,"line":32869},[47,64897,51839],{"class":221},[47,64899,50689],{"class":51354},[47,64901,51361],{"class":221},[19,64903,64904],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,64906,64907],{},"在监听事件中，this指向的就是他的调用者",[19,64909,64910],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,64912,53774],{},[19,64914,64915],{},"(function () {",[19,64917,64918],{},"const list = document.querySelector('.xtx-elevator-list')",[19,64920,64921],{},"list.addEventListener('click', function (e) {",[19,64923,64924],{},"if (e.target.tagName === 'A') {",[19,64926,64927],{},"\u002F\u002F 排他思想",[19,64929,64930],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,64932,64933],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,64935,64936],{},"\u002F\u002F console.log(old);",[19,64938,64939],{},"\u002F\u002F 判断",[19,64941,64942],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,64944,64945],{},"if (old) old.classList.remove('active')",[19,64947,64948],{},"e.target.classList.add('active')",[19,64950,1165],{},[19,64952,52518],{},[19,64954,64955],{},"})();",[187,64957,64959],{"id":64958},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[38,64961,64963],{"className":50687,"code":64962,"language":50689,"meta":43,"style":43},"\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",[26,64964,64965,64975,64979,64987,64991,65005,65019,65031,65039,65045,65055,65065,65069,65073,65080,65092,65103,65120,65133,65147,65157,65161,65165,65172,65183,65201,65211,65223,65227,65231,65238,65255,65266,65278,65282,65286,65293,65305,65309,65317,65325,65329,65337,65345,65353,65368,65412,65420,65433,65446,65459,65467,65475,65483,65511,65519,65531,65544,65557,65565,65573,65581,65607,65615,65628,65640,65653,65661,65669,65677,65703,65711,65724,65736,65749,65757,65765,65773,65778,65798,65803,65823,65828,65845,65850,65858,65863,65892,65905,65909,65913,65918,65922,65950,65955,65972,65977,65982,65987,65992,66018,66022,66026,66034,66042,66046],{"__ignoreMap":43},[47,64966,64967,64969,64971,64973],{"class":49,"line":50},[47,64968,51351],{"class":221},[47,64970,51355],{"class":51354},[47,64972,51358],{"class":53},[47,64974,51361],{"class":221},[47,64976,64977],{"class":49,"line":92},[47,64978,2493],{"emptyLinePlaceholder":145},[47,64980,64981,64983,64985],{"class":49,"line":1273},[47,64982,1129],{"class":221},[47,64984,50689],{"class":51354},[47,64986,51361],{"class":221},[47,64988,64989],{"class":49,"line":1288},[47,64990,2493],{"emptyLinePlaceholder":145},[47,64992,64993,64995,64997,64999,65001,65003],{"class":49,"line":1294},[47,64994,1129],{"class":221},[47,64996,51388],{"class":51354},[47,64998,51370],{"class":53},[47,65000,267],{"class":221},[47,65002,51375],{"class":81},[47,65004,51361],{"class":221},[47,65006,65007,65009,65011,65013,65015,65017],{"class":49,"line":1308},[47,65008,52198],{"class":221},[47,65010,51398],{"class":51354},[47,65012,51401],{"class":53},[47,65014,267],{"class":221},[47,65016,51406],{"class":81},[47,65018,51361],{"class":221},[47,65020,65021,65023,65025,65027,65029],{"class":49,"line":1314},[47,65022,52198],{"class":221},[47,65024,51461],{"class":51354},[47,65026,55368],{"class":221},[47,65028,51461],{"class":51354},[47,65030,51361],{"class":221},[47,65032,65033,65035,65037],{"class":49,"line":1405},[47,65034,52198],{"class":221},[47,65036,134],{"class":51354},[47,65038,51361],{"class":221},[47,65040,65041,65043],{"class":49,"line":1411},[47,65042,6496],{"class":51354},[47,65044,15665],{"class":221},[47,65046,65047,65049,65051,65053],{"class":49,"line":1423},[47,65048,54760],{"class":85},[47,65050,51491],{"class":221},[47,65052,411],{"class":85},[47,65054,1384],{"class":221},[47,65056,65057,65059,65061,65063],{"class":49,"line":1706},[47,65058,54749],{"class":85},[47,65060,51491],{"class":221},[47,65062,411],{"class":85},[47,65064,1384],{"class":221},[47,65066,65067],{"class":49,"line":1711},[47,65068,2280],{"class":221},[47,65070,65071],{"class":49,"line":1717},[47,65072,2493],{"emptyLinePlaceholder":145},[47,65074,65075,65078],{"class":49,"line":1722},[47,65076,65077],{"class":51354},"    table",[47,65079,15665],{"class":221},[47,65081,65082,65085,65087,65090],{"class":49,"line":1736},[47,65083,65084],{"class":85},"      border-collapse",[47,65086,51491],{"class":221},[47,65088,65089],{"class":85},"collapse",[47,65091,1384],{"class":221},[47,65093,65094,65097,65099,65101],{"class":49,"line":1741},[47,65095,65096],{"class":85},"      border-spacing",[47,65098,51491],{"class":221},[47,65100,411],{"class":85},[47,65102,1384],{"class":221},[47,65104,65105,65107,65109,65111,65113,65115,65118],{"class":49,"line":1747},[47,65106,62031],{"class":85},[47,65108,51491],{"class":221},[47,65110,436],{"class":85},[47,65112,51546],{"class":217},[47,65114,51575],{"class":85},[47,65116,65117],{"class":85}," #c0c0c0",[47,65119,1384],{"class":221},[47,65121,65122,65124,65126,65129,65131],{"class":49,"line":1768},[47,65123,54825],{"class":85},[47,65125,51491],{"class":221},[47,65127,65128],{"class":85},"500",[47,65130,51546],{"class":217},[47,65132,1384],{"class":221},[47,65134,65135,65137,65139,65141,65143,65145],{"class":49,"line":1773},[47,65136,54760],{"class":85},[47,65138,51491],{"class":221},[47,65140,530],{"class":85},[47,65142,51546],{"class":217},[47,65144,51610],{"class":85},[47,65146,1384],{"class":221},[47,65148,65149,65151,65153,65155],{"class":49,"line":1787},[47,65150,57340],{"class":85},[47,65152,51491],{"class":221},[47,65154,51646],{"class":85},[47,65156,1384],{"class":221},[47,65158,65159],{"class":49,"line":1792},[47,65160,2280],{"class":221},[47,65162,65163],{"class":49,"line":1821},[47,65164,2493],{"emptyLinePlaceholder":145},[47,65166,65167,65170],{"class":49,"line":1826},[47,65168,65169],{"class":51354},"    th",[47,65171,15665],{"class":221},[47,65173,65174,65176,65178,65181],{"class":49,"line":1843},[47,65175,54938],{"class":85},[47,65177,51491],{"class":221},[47,65179,65180],{"class":85},"#09c",[47,65182,1384],{"class":221},[47,65184,65185,65188,65190,65192,65194,65196,65199],{"class":49,"line":1848},[47,65186,65187],{"class":85},"      font",[47,65189,51491],{"class":221},[47,65191,62393],{"class":85},[47,65193,64127],{"class":85},[47,65195,51546],{"class":217},[47,65197,65198],{"class":81}," \"微软雅黑\"",[47,65200,1384],{"class":221},[47,65202,65203,65205,65207,65209],{"class":49,"line":1853},[47,65204,57470],{"class":85},[47,65206,51491],{"class":221},[47,65208,60896],{"class":85},[47,65210,1384],{"class":221},[47,65212,65213,65215,65217,65219,65221],{"class":49,"line":1858},[47,65214,54839],{"class":85},[47,65216,51491],{"class":221},[47,65218,1019],{"class":85},[47,65220,51546],{"class":217},[47,65222,1384],{"class":221},[47,65224,65225],{"class":49,"line":1872},[47,65226,2280],{"class":221},[47,65228,65229],{"class":49,"line":1877},[47,65230,2493],{"emptyLinePlaceholder":145},[47,65232,65233,65236],{"class":49,"line":2670},[47,65234,65235],{"class":51354},"    td",[47,65237,15665],{"class":221},[47,65239,65240,65242,65244,65246,65248,65250,65253],{"class":49,"line":2684},[47,65241,62031],{"class":85},[47,65243,51491],{"class":221},[47,65245,436],{"class":85},[47,65247,51546],{"class":217},[47,65249,51575],{"class":85},[47,65251,65252],{"class":85}," #d0d0d0",[47,65254,1384],{"class":221},[47,65256,65257,65259,65261,65264],{"class":49,"line":2692},[47,65258,57470],{"class":85},[47,65260,51491],{"class":221},[47,65262,65263],{"class":85},"#404060",[47,65265,1384],{"class":221},[47,65267,65268,65270,65272,65274,65276],{"class":49,"line":2697},[47,65269,54749],{"class":85},[47,65271,51491],{"class":221},[47,65273,665],{"class":85},[47,65275,51546],{"class":217},[47,65277,1384],{"class":221},[47,65279,65280],{"class":49,"line":2703},[47,65281,2280],{"class":221},[47,65283,65284],{"class":49,"line":2709},[47,65285,2493],{"emptyLinePlaceholder":145},[47,65287,65288,65291],{"class":49,"line":2714},[47,65289,65290],{"class":53},"    .allCheck",[47,65292,15665],{"class":221},[47,65294,65295,65297,65299,65301,65303],{"class":49,"line":8041},[47,65296,54825],{"class":85},[47,65298,51491],{"class":221},[47,65300,831],{"class":85},[47,65302,51546],{"class":217},[47,65304,1384],{"class":221},[47,65306,65307],{"class":49,"line":8065},[47,65308,2280],{"class":221},[47,65310,65311,65313,65315],{"class":49,"line":8070},[47,65312,52471],{"class":221},[47,65314,134],{"class":51354},[47,65316,51361],{"class":221},[47,65318,65319,65321,65323],{"class":49,"line":8076},[47,65320,51839],{"class":221},[47,65322,51388],{"class":51354},[47,65324,51361],{"class":221},[47,65326,65327],{"class":49,"line":8103},[47,65328,2493],{"emptyLinePlaceholder":145},[47,65330,65331,65333,65335],{"class":49,"line":8108},[47,65332,1129],{"class":221},[47,65334,51854],{"class":51354},[47,65336,51361],{"class":221},[47,65338,65339,65341,65343],{"class":49,"line":8114},[47,65340,52198],{"class":221},[47,65342,357],{"class":51354},[47,65344,51361],{"class":221},[47,65346,65347,65349,65351],{"class":49,"line":8126},[47,65348,51395],{"class":221},[47,65350,363],{"class":51354},[47,65352,51361],{"class":221},[47,65354,65355,65357,65359,65361,65363,65366],{"class":49,"line":8138},[47,65356,55288],{"class":221},[47,65358,366],{"class":51354},[47,65360,53540],{"class":53},[47,65362,267],{"class":221},[47,65364,65365],{"class":81},"\"allCheck\"",[47,65367,51361],{"class":221},[47,65369,65370,65372,65374,65376,65378,65380,65382,65384,65386,65388,65390,65393,65396,65398,65400,65402,65405,65408,65410],{"class":49,"line":8150},[47,65371,55356],{"class":221},[47,65373,53875],{"class":51354},[47,65375,53878],{"class":53},[47,65377,267],{"class":221},[47,65379,53883],{"class":81},[47,65381,15013],{"class":53},[47,65383,267],{"class":221},[47,65385,7745],{"class":81},[47,65387,15052],{"class":53},[47,65389,267],{"class":221},[47,65391,65392],{"class":81},"\"checkAll\"",[47,65394,65395],{"class":221},"> \u003C",[47,65397,47],{"class":51354},[47,65399,53540],{"class":53},[47,65401,267],{"class":221},[47,65403,65404],{"class":81},"\"all\"",[47,65406,65407],{"class":221},">全选\u003C\u002F",[47,65409,47],{"class":51354},[47,65411,51361],{"class":221},[47,65413,65414,65416,65418],{"class":49,"line":9809},[47,65415,55461],{"class":221},[47,65417,366],{"class":51354},[47,65419,51361],{"class":221},[47,65421,65422,65424,65426,65429,65431],{"class":49,"line":9834},[47,65423,55288],{"class":221},[47,65425,366],{"class":51354},[47,65427,65428],{"class":221},">商品\u003C\u002F",[47,65430,366],{"class":51354},[47,65432,51361],{"class":221},[47,65434,65435,65437,65439,65442,65444],{"class":49,"line":9857},[47,65436,55288],{"class":221},[47,65438,366],{"class":51354},[47,65440,65441],{"class":221},">商家\u003C\u002F",[47,65443,366],{"class":51354},[47,65445,51361],{"class":221},[47,65447,65448,65450,65452,65455,65457],{"class":49,"line":9881},[47,65449,55288],{"class":221},[47,65451,366],{"class":51354},[47,65453,65454],{"class":221},">价格\u003C\u002F",[47,65456,366],{"class":51354},[47,65458,51361],{"class":221},[47,65460,65461,65463,65465],{"class":49,"line":9886},[47,65462,51830],{"class":221},[47,65464,363],{"class":51354},[47,65466,51361],{"class":221},[47,65468,65469,65471,65473],{"class":49,"line":9891},[47,65470,51395],{"class":221},[47,65472,363],{"class":51354},[47,65474,51361],{"class":221},[47,65476,65477,65479,65481],{"class":49,"line":9896},[47,65478,55288],{"class":221},[47,65480,409],{"class":51354},[47,65482,51361],{"class":221},[47,65484,65485,65487,65489,65491,65493,65495,65497,65499,65502,65504,65506,65509],{"class":49,"line":9905},[47,65486,55356],{"class":221},[47,65488,53875],{"class":51354},[47,65490,53878],{"class":53},[47,65492,267],{"class":221},[47,65494,53883],{"class":81},[47,65496,15013],{"class":53},[47,65498,267],{"class":221},[47,65500,65501],{"class":81},"\"check\"",[47,65503,53540],{"class":53},[47,65505,267],{"class":221},[47,65507,65508],{"class":81},"\"ck\"",[47,65510,51361],{"class":221},[47,65512,65513,65515,65517],{"class":49,"line":9910},[47,65514,55461],{"class":221},[47,65516,409],{"class":51354},[47,65518,51361],{"class":221},[47,65520,65521,65523,65525,65527,65529],{"class":49,"line":9916},[47,65522,55288],{"class":221},[47,65524,409],{"class":51354},[47,65526,61227],{"class":221},[47,65528,409],{"class":51354},[47,65530,51361],{"class":221},[47,65532,65533,65535,65537,65540,65542],{"class":49,"line":9937},[47,65534,55288],{"class":221},[47,65536,409],{"class":51354},[47,65538,65539],{"class":221},">小米\u003C\u002F",[47,65541,409],{"class":51354},[47,65543,51361],{"class":221},[47,65545,65546,65548,65550,65553,65555],{"class":49,"line":9943},[47,65547,55288],{"class":221},[47,65549,409],{"class":51354},[47,65551,65552],{"class":221},">￥1999\u003C\u002F",[47,65554,409],{"class":51354},[47,65556,51361],{"class":221},[47,65558,65559,65561,65563],{"class":49,"line":9957},[47,65560,51830],{"class":221},[47,65562,363],{"class":51354},[47,65564,51361],{"class":221},[47,65566,65567,65569,65571],{"class":49,"line":9963},[47,65568,51395],{"class":221},[47,65570,363],{"class":51354},[47,65572,51361],{"class":221},[47,65574,65575,65577,65579],{"class":49,"line":9990},[47,65576,55288],{"class":221},[47,65578,409],{"class":51354},[47,65580,51361],{"class":221},[47,65582,65583,65585,65587,65589,65591,65593,65595,65597,65599,65601,65603,65605],{"class":49,"line":9999},[47,65584,55356],{"class":221},[47,65586,53875],{"class":51354},[47,65588,53878],{"class":53},[47,65590,267],{"class":221},[47,65592,53883],{"class":81},[47,65594,15013],{"class":53},[47,65596,267],{"class":221},[47,65598,65501],{"class":81},[47,65600,53540],{"class":53},[47,65602,267],{"class":221},[47,65604,65508],{"class":81},[47,65606,51361],{"class":221},[47,65608,65609,65611,65613],{"class":49,"line":10005},[47,65610,55461],{"class":221},[47,65612,409],{"class":51354},[47,65614,51361],{"class":221},[47,65616,65617,65619,65621,65624,65626],{"class":49,"line":10013},[47,65618,55288],{"class":221},[47,65620,409],{"class":51354},[47,65622,65623],{"class":221},">小米净水器\u003C\u002F",[47,65625,409],{"class":51354},[47,65627,51361],{"class":221},[47,65629,65630,65632,65634,65636,65638],{"class":49,"line":10018},[47,65631,55288],{"class":221},[47,65633,409],{"class":51354},[47,65635,65539],{"class":221},[47,65637,409],{"class":51354},[47,65639,51361],{"class":221},[47,65641,65642,65644,65646,65649,65651],{"class":49,"line":16697},[47,65643,55288],{"class":221},[47,65645,409],{"class":51354},[47,65647,65648],{"class":221},">￥4999\u003C\u002F",[47,65650,409],{"class":51354},[47,65652,51361],{"class":221},[47,65654,65655,65657,65659],{"class":49,"line":16703},[47,65656,51830],{"class":221},[47,65658,363],{"class":51354},[47,65660,51361],{"class":221},[47,65662,65663,65665,65667],{"class":49,"line":16726},[47,65664,51395],{"class":221},[47,65666,363],{"class":51354},[47,65668,51361],{"class":221},[47,65670,65671,65673,65675],{"class":49,"line":16732},[47,65672,55288],{"class":221},[47,65674,409],{"class":51354},[47,65676,51361],{"class":221},[47,65678,65679,65681,65683,65685,65687,65689,65691,65693,65695,65697,65699,65701],{"class":49,"line":16755},[47,65680,55356],{"class":221},[47,65682,53875],{"class":51354},[47,65684,53878],{"class":53},[47,65686,267],{"class":221},[47,65688,53883],{"class":81},[47,65690,15013],{"class":53},[47,65692,267],{"class":221},[47,65694,65501],{"class":81},[47,65696,53540],{"class":53},[47,65698,267],{"class":221},[47,65700,65508],{"class":81},[47,65702,51361],{"class":221},[47,65704,65705,65707,65709],{"class":49,"line":16769},[47,65706,55461],{"class":221},[47,65708,409],{"class":51354},[47,65710,51361],{"class":221},[47,65712,65713,65715,65717,65720,65722],{"class":49,"line":16789},[47,65714,55288],{"class":221},[47,65716,409],{"class":51354},[47,65718,65719],{"class":221},">小米电视\u003C\u002F",[47,65721,409],{"class":51354},[47,65723,51361],{"class":221},[47,65725,65726,65728,65730,65732,65734],{"class":49,"line":16795},[47,65727,55288],{"class":221},[47,65729,409],{"class":51354},[47,65731,65539],{"class":221},[47,65733,409],{"class":51354},[47,65735,51361],{"class":221},[47,65737,65738,65740,65742,65745,65747],{"class":49,"line":16806},[47,65739,55288],{"class":221},[47,65741,409],{"class":51354},[47,65743,65744],{"class":221},">￥5999\u003C\u002F",[47,65746,409],{"class":51354},[47,65748,51361],{"class":221},[47,65750,65751,65753,65755],{"class":49,"line":16829},[47,65752,51830],{"class":221},[47,65754,363],{"class":51354},[47,65756,51361],{"class":221},[47,65758,65759,65761,65763],{"class":49,"line":16851},[47,65760,52471],{"class":221},[47,65762,357],{"class":51354},[47,65764,51361],{"class":221},[47,65766,65767,65769,65771],{"class":49,"line":16856},[47,65768,52198],{"class":221},[47,65770,51867],{"class":51354},[47,65772,51361],{"class":221},[47,65774,65775],{"class":49,"line":16862},[47,65776,65777],{"class":279},"    \u002F\u002F 1. 获取大复选框\n",[47,65779,65780,65782,65785,65787,65789,65791,65793,65796],{"class":49,"line":16876},[47,65781,11314],{"class":217},[47,65783,65784],{"class":85}," checkAll",[47,65786,13657],{"class":217},[47,65788,54450],{"class":221},[47,65790,54453],{"class":53},[47,65792,222],{"class":221},[47,65794,65795],{"class":81},"'#checkAll'",[47,65797,228],{"class":221},[47,65799,65800],{"class":49,"line":16889},[47,65801,65802],{"class":279},"    \u002F\u002F 2. 获取所有的小复选框\n",[47,65804,65805,65807,65810,65812,65814,65816,65818,65821],{"class":49,"line":16894},[47,65806,11314],{"class":217},[47,65808,65809],{"class":85}," cks",[47,65811,13657],{"class":217},[47,65813,54450],{"class":221},[47,65815,55735],{"class":53},[47,65817,222],{"class":221},[47,65819,65820],{"class":81},"'.ck'",[47,65822,228],{"class":221},[47,65824,65825],{"class":49,"line":16908},[47,65826,65827],{"class":279},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[47,65829,65830,65833,65835,65837,65839,65841,65843],{"class":49,"line":16913},[47,65831,65832],{"class":221},"    checkAll.",[47,65834,57867],{"class":53},[47,65836,222],{"class":221},[47,65838,57872],{"class":81},[47,65840,12528],{"class":221},[47,65842,54503],{"class":217},[47,65844,54506],{"class":221},[47,65846,65847],{"class":49,"line":16919},[47,65848,65849],{"class":279},"      \u002F\u002F 得到当前大复选框的选中状态\n",[47,65851,65852,65855],{"class":49,"line":16924},[47,65853,65854],{"class":279},"      \u002F\u002F console.log(checkAll.checked)",[47,65856,65857],{"class":279},"  \u002F\u002F 得到 是 true 或者是 false\n",[47,65859,65860],{"class":49,"line":16938},[47,65861,65862],{"class":279},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[47,65864,65865,65867,65869,65871,65873,65875,65877,65879,65881,65884,65886,65888,65890],{"class":49,"line":16943},[47,65866,52338],{"class":217},[47,65868,1752],{"class":221},[47,65870,51901],{"class":217},[47,65872,9531],{"class":221},[47,65874,267],{"class":217},[47,65876,4186],{"class":85},[47,65878,9538],{"class":221},[47,65880,1129],{"class":217},[47,65882,65883],{"class":221}," cks.",[47,65885,52022],{"class":85},[47,65887,3307],{"class":221},[47,65889,2385],{"class":217},[47,65891,12535],{"class":221},[47,65893,65894,65897,65899,65902],{"class":49,"line":16948},[47,65895,65896],{"class":221},"        cks[i].checked ",[47,65898,267],{"class":217},[47,65900,65901],{"class":85}," this",[47,65903,65904],{"class":221},".checked\n",[47,65906,65907],{"class":49,"line":16962},[47,65908,52452],{"class":221},[47,65910,65911],{"class":49,"line":16974},[47,65912,33515],{"class":221},[47,65914,65915],{"class":49,"line":16979},[47,65916,65917],{"class":279},"    \u002F\u002F 5. 小复选框控制大复选框\n",[47,65919,65920],{"class":49,"line":16992},[47,65921,2493],{"emptyLinePlaceholder":145},[47,65923,65924,65926,65928,65930,65932,65934,65936,65938,65940,65942,65944,65946,65948],{"class":49,"line":16997},[47,65925,3294],{"class":217},[47,65927,1752],{"class":221},[47,65929,51901],{"class":217},[47,65931,9531],{"class":221},[47,65933,267],{"class":217},[47,65935,4186],{"class":85},[47,65937,9538],{"class":221},[47,65939,1129],{"class":217},[47,65941,65883],{"class":221},[47,65943,52022],{"class":85},[47,65945,3307],{"class":221},[47,65947,2385],{"class":217},[47,65949,12535],{"class":221},[47,65951,65952],{"class":49,"line":17002},[47,65953,65954],{"class":279},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[47,65956,65957,65960,65962,65964,65966,65968,65970],{"class":49,"line":17007},[47,65958,65959],{"class":221},"      cks[i].",[47,65961,57867],{"class":53},[47,65963,222],{"class":221},[47,65965,57872],{"class":81},[47,65967,12528],{"class":221},[47,65969,54503],{"class":217},[47,65971,54506],{"class":221},[47,65973,65974],{"class":49,"line":17020},[47,65975,65976],{"class":279},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[47,65978,65979],{"class":49,"line":17025},[47,65980,65981],{"class":279},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[47,65983,65984],{"class":49,"line":32687},[47,65985,65986],{"class":279},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[47,65988,65989],{"class":49,"line":32693},[47,65990,65991],{"class":279},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[47,65993,65994,65997,65999,66001,66003,66005,66008,66010,66012,66014,66016],{"class":49,"line":32699},[47,65995,65996],{"class":221},"        checkAll.checked ",[47,65998,267],{"class":217},[47,66000,54450],{"class":221},[47,66002,55735],{"class":53},[47,66004,222],{"class":221},[47,66006,66007],{"class":81},"'.ck:checked'",[47,66009,30880],{"class":221},[47,66011,52022],{"class":85},[47,66013,57960],{"class":217},[47,66015,65883],{"class":221},[47,66017,55885],{"class":85},[47,66019,66020],{"class":49,"line":32705},[47,66021,64869],{"class":221},[47,66023,66024],{"class":49,"line":32711},[47,66025,2280],{"class":221},[47,66027,66028,66030,66032],{"class":49,"line":32722},[47,66029,52471],{"class":221},[47,66031,51867],{"class":51354},[47,66033,51361],{"class":221},[47,66035,66036,66038,66040],{"class":49,"line":32728},[47,66037,51839],{"class":221},[47,66039,51854],{"class":51354},[47,66041,51361],{"class":221},[47,66043,66044],{"class":49,"line":32748},[47,66045,2493],{"emptyLinePlaceholder":145},[47,66047,66048,66050,66052],{"class":49,"line":32754},[47,66049,51839],{"class":221},[47,66051,50689],{"class":51354},[47,66053,51361],{"class":221},[19,66055,66056],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,66058,66059],{},"用好之间比较得到的布尔值！！！",[19,66061,66062,66063,66066,66067,1752,66070,803,66072,66075],{},"在 JS 里访问的时候，",[26,66064,66065],{},"checkbox.checked"," 是一个 ",[369,66068,66069],{},"布尔值",[26,66071,1456],{},[26,66073,66074],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,66077,66078,66079,66082,66083],{},"HTML 的 ",[26,66080,66081],{},"checked=\"checked\""," 只是 ",[369,66084,66085,66086,66089],{},"初始值；JS 的 ",[26,66087,66088],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,66091,66092],{},"：checked是一个伪类选择器",[19,66094,66095],{},[1556,66096],{"alt":43,"src":66097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,66099,66100,66103],{},[66101,66102],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,66105,66106],{},[1556,66107],{"alt":43,"src":66108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,66110,66112],{"id":66111},"_33-dom事件进阶","3.3 DOM事件进阶",[187,66114,66116],{"id":66115},"_331-事件流","3.3.1 事件流",[19,66118,66119],{},[1556,66120],{"alt":43,"src":66121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22091,66123,66125],{"id":66124},"_3311-事件捕获","3.3.1.1 事件捕获",[19,66127,66128],{},[1556,66129],{"alt":43,"src":66130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[38,66132,66134],{"className":50687,"code":66133,"language":50689,"meta":43,"style":43},"\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",[26,66135,66136,66146,66160,66164,66172,66186,66206,66218,66226,66233,66245,66257,66267,66271,66275,66282,66294,66306,66316,66320,66328,66336,66340,66348,66363,66382,66390,66398,66418,66438,66454,66465,66473,66490,66501,66509,66526,66537,66545,66553,66561,66565],{"__ignoreMap":43},[47,66137,66138,66140,66142,66144],{"class":49,"line":50},[47,66139,51351],{"class":221},[47,66141,51355],{"class":51354},[47,66143,51358],{"class":53},[47,66145,51361],{"class":221},[47,66147,66148,66150,66152,66154,66156,66158],{"class":49,"line":92},[47,66149,1129],{"class":221},[47,66151,50689],{"class":51354},[47,66153,51370],{"class":53},[47,66155,267],{"class":221},[47,66157,51375],{"class":81},[47,66159,51361],{"class":221},[47,66161,66162],{"class":49,"line":1273},[47,66163,2493],{"emptyLinePlaceholder":145},[47,66165,66166,66168,66170],{"class":49,"line":1288},[47,66167,1129],{"class":221},[47,66169,51388],{"class":51354},[47,66171,51361],{"class":221},[47,66173,66174,66176,66178,66180,66182,66184],{"class":49,"line":1294},[47,66175,52198],{"class":221},[47,66177,51398],{"class":51354},[47,66179,51401],{"class":53},[47,66181,267],{"class":221},[47,66183,51406],{"class":81},[47,66185,51361],{"class":221},[47,66187,66188,66190,66192,66194,66196,66198,66200,66202,66204],{"class":49,"line":1308},[47,66189,52198],{"class":221},[47,66191,51398],{"class":51354},[47,66193,15013],{"class":53},[47,66195,267],{"class":221},[47,66197,51445],{"class":81},[47,66199,51425],{"class":53},[47,66201,267],{"class":221},[47,66203,51452],{"class":81},[47,66205,51361],{"class":221},[47,66207,66208,66210,66212,66214,66216],{"class":49,"line":1314},[47,66209,52198],{"class":221},[47,66211,51461],{"class":51354},[47,66213,51464],{"class":221},[47,66215,51461],{"class":51354},[47,66217,51361],{"class":221},[47,66219,66220,66222,66224],{"class":49,"line":1405},[47,66221,52198],{"class":221},[47,66223,134],{"class":51354},[47,66225,51361],{"class":221},[47,66227,66228,66231],{"class":49,"line":1411},[47,66229,66230],{"class":53},"    .father",[47,66232,15665],{"class":221},[47,66234,66235,66237,66239,66241,66243],{"class":49,"line":1423},[47,66236,54825],{"class":85},[47,66238,51491],{"class":221},[47,66240,65128],{"class":85},[47,66242,51546],{"class":217},[47,66244,1384],{"class":221},[47,66246,66247,66249,66251,66253,66255],{"class":49,"line":1706},[47,66248,54839],{"class":85},[47,66250,51491],{"class":221},[47,66252,65128],{"class":85},[47,66254,51546],{"class":217},[47,66256,1384],{"class":221},[47,66258,66259,66261,66263,66265],{"class":49,"line":1711},[47,66260,54938],{"class":85},[47,66262,51491],{"class":221},[47,66264,51699],{"class":85},[47,66266,1384],{"class":221},[47,66268,66269],{"class":49,"line":1717},[47,66270,2280],{"class":221},[47,66272,66273],{"class":49,"line":1722},[47,66274,2493],{"emptyLinePlaceholder":145},[47,66276,66277,66280],{"class":49,"line":1736},[47,66278,66279],{"class":53},"    .son",[47,66281,15665],{"class":221},[47,66283,66284,66286,66288,66290,66292],{"class":49,"line":1741},[47,66285,54825],{"class":85},[47,66287,51491],{"class":221},[47,66289,1816],{"class":85},[47,66291,51546],{"class":217},[47,66293,1384],{"class":221},[47,66295,66296,66298,66300,66302,66304],{"class":49,"line":1747},[47,66297,54839],{"class":85},[47,66299,51491],{"class":221},[47,66301,1816],{"class":85},[47,66303,51546],{"class":217},[47,66305,1384],{"class":221},[47,66307,66308,66310,66312,66314],{"class":49,"line":1768},[47,66309,54938],{"class":85},[47,66311,51491],{"class":221},[47,66313,54943],{"class":85},[47,66315,1384],{"class":221},[47,66317,66318],{"class":49,"line":1773},[47,66319,2280],{"class":221},[47,66321,66322,66324,66326],{"class":49,"line":1787},[47,66323,52471],{"class":221},[47,66325,134],{"class":51354},[47,66327,51361],{"class":221},[47,66329,66330,66332,66334],{"class":49,"line":1792},[47,66331,51839],{"class":221},[47,66333,51388],{"class":51354},[47,66335,51361],{"class":221},[47,66337,66338],{"class":49,"line":1821},[47,66339,2493],{"emptyLinePlaceholder":145},[47,66341,66342,66344,66346],{"class":49,"line":1826},[47,66343,1129],{"class":221},[47,66345,51854],{"class":51354},[47,66347,51361],{"class":221},[47,66349,66350,66352,66354,66356,66358,66361],{"class":49,"line":1843},[47,66351,52198],{"class":221},[47,66353,51665],{"class":51354},[47,66355,53540],{"class":53},[47,66357,267],{"class":221},[47,66359,66360],{"class":81},"\"father\"",[47,66362,51361],{"class":221},[47,66364,66365,66367,66369,66371,66373,66376,66378,66380],{"class":49,"line":1848},[47,66366,51395],{"class":221},[47,66368,51665],{"class":51354},[47,66370,53540],{"class":53},[47,66372,267],{"class":221},[47,66374,66375],{"class":81},"\"son\"",[47,66377,55368],{"class":221},[47,66379,51665],{"class":51354},[47,66381,51361],{"class":221},[47,66383,66384,66386,66388],{"class":49,"line":1853},[47,66385,52471],{"class":221},[47,66387,51665],{"class":51354},[47,66389,51361],{"class":221},[47,66391,66392,66394,66396],{"class":49,"line":1858},[47,66393,52198],{"class":221},[47,66395,51867],{"class":51354},[47,66397,51361],{"class":221},[47,66399,66400,66402,66405,66407,66409,66411,66413,66416],{"class":49,"line":1872},[47,66401,11314],{"class":217},[47,66403,66404],{"class":85}," fa",[47,66406,13657],{"class":217},[47,66408,54450],{"class":221},[47,66410,54453],{"class":53},[47,66412,222],{"class":221},[47,66414,66415],{"class":81},"'.father'",[47,66417,228],{"class":221},[47,66419,66420,66422,66425,66427,66429,66431,66433,66436],{"class":49,"line":1877},[47,66421,11314],{"class":217},[47,66423,66424],{"class":85}," son",[47,66426,13657],{"class":217},[47,66428,54450],{"class":221},[47,66430,54453],{"class":53},[47,66432,222],{"class":221},[47,66434,66435],{"class":81},"'.son'",[47,66437,228],{"class":221},[47,66439,66440,66442,66444,66446,66448,66450,66452],{"class":49,"line":2670},[47,66441,52461],{"class":221},[47,66443,57867],{"class":53},[47,66445,222],{"class":221},[47,66447,57872],{"class":81},[47,66449,12528],{"class":221},[47,66451,54503],{"class":217},[47,66453,54506],{"class":221},[47,66455,66456,66458,66460,66463],{"class":49,"line":2684},[47,66457,58979],{"class":53},[47,66459,222],{"class":221},[47,66461,66462],{"class":81},"'woshiu1'",[47,66464,228],{"class":221},[47,66466,66467,66469,66471],{"class":49,"line":2692},[47,66468,54589],{"class":221},[47,66470,1456],{"class":85},[47,66472,228],{"class":221},[47,66474,66475,66478,66480,66482,66484,66486,66488],{"class":49,"line":2697},[47,66476,66477],{"class":221},"    fa.",[47,66479,57867],{"class":53},[47,66481,222],{"class":221},[47,66483,57872],{"class":81},[47,66485,12528],{"class":221},[47,66487,54503],{"class":217},[47,66489,54506],{"class":221},[47,66491,66492,66494,66496,66499],{"class":49,"line":2703},[47,66493,58979],{"class":53},[47,66495,222],{"class":221},[47,66497,66498],{"class":81},"'1'",[47,66500,228],{"class":221},[47,66502,66503,66505,66507],{"class":49,"line":2709},[47,66504,54589],{"class":221},[47,66506,1456],{"class":85},[47,66508,228],{"class":221},[47,66510,66511,66514,66516,66518,66520,66522,66524],{"class":49,"line":2714},[47,66512,66513],{"class":221},"    son.",[47,66515,57867],{"class":53},[47,66517,222],{"class":221},[47,66519,57872],{"class":81},[47,66521,12528],{"class":221},[47,66523,54503],{"class":217},[47,66525,54506],{"class":221},[47,66527,66528,66530,66532,66535],{"class":49,"line":8041},[47,66529,58979],{"class":53},[47,66531,222],{"class":221},[47,66533,66534],{"class":81},"'2'",[47,66536,228],{"class":221},[47,66538,66539,66541,66543],{"class":49,"line":8065},[47,66540,54589],{"class":221},[47,66542,1456],{"class":85},[47,66544,228],{"class":221},[47,66546,66547,66549,66551],{"class":49,"line":8070},[47,66548,52471],{"class":221},[47,66550,51867],{"class":51354},[47,66552,51361],{"class":221},[47,66554,66555,66557,66559],{"class":49,"line":8076},[47,66556,51839],{"class":221},[47,66558,51854],{"class":51354},[47,66560,51361],{"class":221},[47,66562,66563],{"class":49,"line":8103},[47,66564,2493],{"emptyLinePlaceholder":145},[47,66566,66567,66569,66571],{"class":49,"line":8108},[47,66568,51839],{"class":221},[47,66570,50689],{"class":51354},[47,66572,51361],{"class":221},[19,66574,66575],{},[1556,66576],{"alt":43,"src":66577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,66579,66580],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22091,66582,66584],{"id":66583},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,66586,66587],{},[1556,66588],{"alt":43,"src":66589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,66591,66592],{},"反着来",[19,66594,66595],{},"注意是同名事件，比如都是‘click’",[22091,66597,66599],{"id":66598},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,66601,66602],{},[1556,66603],{"alt":43,"src":66604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22091,66606,66608],{"id":66607},"_3314-解绑事件","3.3.1.4 解绑事件",[19,66610,66611],{},[1556,66612],{"alt":43,"src":66613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,66615,66616],{},[1556,66617],{"alt":43,"src":66618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22091,66620,66622],{"id":66621},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[171,66624,66625],{},[109,66626,66627],{},"事件类型的区别",[19,66629,66630],{},[1556,66631],{"alt":43,"src":66632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,66634,66635],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[171,66637,66638],{"start":92},[109,66639,66640],{},"注册事件的区别",[19,66642,66643],{},[1556,66644],{"alt":43,"src":66645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22091,66647,66649],{"id":66648},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,66651,66652],{},[1556,66653],{"alt":43,"src":66654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,66656,66657],{},[1556,66658],{"alt":43,"src":66659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[38,66661,66663],{"className":53121,"code":66662,"language":53123,"meta":43,"style":43},"\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",[26,66664,66665,66673,66690,66713,66721,66726,66731,66736,66740,66748,66756],{"__ignoreMap":43},[47,66666,66667,66669,66671],{"class":49,"line":50},[47,66668,1129],{"class":221},[47,66670,51854],{"class":51354},[47,66672,51361],{"class":221},[47,66674,66675,66677,66680,66683,66685,66688],{"class":49,"line":92},[47,66676,52198],{"class":221},[47,66678,66679],{"class":51354},"form",[47,66681,66682],{"class":53}," action",[47,66684,267],{"class":221},[47,66686,66687],{"class":81},"\"http:\u002F\u002Fwww.itcast.cn\"",[47,66689,51361],{"class":221},[47,66691,66692,66694,66696,66698,66700,66703,66706,66708,66711],{"class":49,"line":1273},[47,66693,51395],{"class":221},[47,66695,53875],{"class":51354},[47,66697,53878],{"class":53},[47,66699,267],{"class":221},[47,66701,66702],{"class":81},"\"submit\"",[47,66704,66705],{"class":53}," value",[47,66707,267],{"class":221},[47,66709,66710],{"class":81},"\"免费注册\"",[47,66712,51361],{"class":221},[47,66714,66715,66717,66719],{"class":49,"line":1288},[47,66716,51395],{"class":221},[47,66718,51867],{"class":51354},[47,66720,51361],{"class":221},[47,66722,66723],{"class":49,"line":1294},[47,66724,66725],{"class":221},"      const form = document.querySelector('form')\n",[47,66727,66728],{"class":49,"line":1308},[47,66729,66730],{"class":221},"      form.addEventListener('submit', function (e) {\n",[47,66732,66733],{"class":49,"line":1314},[47,66734,66735],{"class":221},"        e.preventDefault()\n",[47,66737,66738],{"class":49,"line":1405},[47,66739,64869],{"class":221},[47,66741,66742,66744,66746],{"class":49,"line":1411},[47,66743,51830],{"class":221},[47,66745,51867],{"class":51354},[47,66747,51361],{"class":221},[47,66749,66750,66752,66754],{"class":49,"line":1423},[47,66751,52471],{"class":221},[47,66753,66679],{"class":51354},[47,66755,51361],{"class":221},[47,66757,66758,66760,66762],{"class":49,"line":1706},[47,66759,51839],{"class":221},[47,66761,51854],{"class":51354},[47,66763,51361],{"class":221},[19,66765,66766],{},"点击不在跳转！！！",[187,66768,66770],{"id":66769},"_332-事件委托","3.3.2 事件委托",[19,66772,66773],{},[1556,66774],{"alt":43,"src":66775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[38,66777,66779],{"className":50687,"code":66778,"language":50689,"meta":43,"style":43},"\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",[26,66780,66781,66791,66805,66809,66817,66831,66851,66863,66871,66875,66883,66891,66903,66915,66927,66939,66951,66964,66972,66980,66985,67004,67025,67030,67035,67040,67045,67054,67058,67068,67072,67077,67082,67096,67106,67110,67114,67122,67130,67134],{"__ignoreMap":43},[47,66782,66783,66785,66787,66789],{"class":49,"line":50},[47,66784,51351],{"class":221},[47,66786,51355],{"class":51354},[47,66788,51358],{"class":53},[47,66790,51361],{"class":221},[47,66792,66793,66795,66797,66799,66801,66803],{"class":49,"line":92},[47,66794,1129],{"class":221},[47,66796,50689],{"class":51354},[47,66798,51370],{"class":53},[47,66800,267],{"class":221},[47,66802,51375],{"class":81},[47,66804,51361],{"class":221},[47,66806,66807],{"class":49,"line":1273},[47,66808,2493],{"emptyLinePlaceholder":145},[47,66810,66811,66813,66815],{"class":49,"line":1288},[47,66812,1129],{"class":221},[47,66814,51388],{"class":51354},[47,66816,51361],{"class":221},[47,66818,66819,66821,66823,66825,66827,66829],{"class":49,"line":1294},[47,66820,52198],{"class":221},[47,66822,51398],{"class":51354},[47,66824,51401],{"class":53},[47,66826,267],{"class":221},[47,66828,51406],{"class":81},[47,66830,51361],{"class":221},[47,66832,66833,66835,66837,66839,66841,66843,66845,66847,66849],{"class":49,"line":1308},[47,66834,52198],{"class":221},[47,66836,51398],{"class":51354},[47,66838,15013],{"class":53},[47,66840,267],{"class":221},[47,66842,51445],{"class":81},[47,66844,51425],{"class":53},[47,66846,267],{"class":221},[47,66848,51452],{"class":81},[47,66850,51361],{"class":221},[47,66852,66853,66855,66857,66859,66861],{"class":49,"line":1314},[47,66854,52198],{"class":221},[47,66856,51461],{"class":51354},[47,66858,51464],{"class":221},[47,66860,51461],{"class":51354},[47,66862,51361],{"class":221},[47,66864,66865,66867,66869],{"class":49,"line":1405},[47,66866,51839],{"class":221},[47,66868,51388],{"class":51354},[47,66870,51361],{"class":221},[47,66872,66873],{"class":49,"line":1411},[47,66874,2493],{"emptyLinePlaceholder":145},[47,66876,66877,66879,66881],{"class":49,"line":1423},[47,66878,1129],{"class":221},[47,66880,51854],{"class":51354},[47,66882,51361],{"class":221},[47,66884,66885,66887,66889],{"class":49,"line":1706},[47,66886,52198],{"class":221},[47,66888,106],{"class":51354},[47,66890,51361],{"class":221},[47,66892,66893,66895,66897,66899,66901],{"class":49,"line":1711},[47,66894,51395],{"class":221},[47,66896,109],{"class":51354},[47,66898,54020],{"class":221},[47,66900,109],{"class":51354},[47,66902,51361],{"class":221},[47,66904,66905,66907,66909,66911,66913],{"class":49,"line":1717},[47,66906,51395],{"class":221},[47,66908,109],{"class":51354},[47,66910,54039],{"class":221},[47,66912,109],{"class":51354},[47,66914,51361],{"class":221},[47,66916,66917,66919,66921,66923,66925],{"class":49,"line":1722},[47,66918,51395],{"class":221},[47,66920,109],{"class":51354},[47,66922,54058],{"class":221},[47,66924,109],{"class":51354},[47,66926,51361],{"class":221},[47,66928,66929,66931,66933,66935,66937],{"class":49,"line":1736},[47,66930,51395],{"class":221},[47,66932,109],{"class":51354},[47,66934,54077],{"class":221},[47,66936,109],{"class":51354},[47,66938,51361],{"class":221},[47,66940,66941,66943,66945,66947,66949],{"class":49,"line":1741},[47,66942,51395],{"class":221},[47,66944,109],{"class":51354},[47,66946,54096],{"class":221},[47,66948,109],{"class":51354},[47,66950,51361],{"class":221},[47,66952,66953,66955,66957,66960,66962],{"class":49,"line":1747},[47,66954,51395],{"class":221},[47,66956,19],{"class":51354},[47,66958,66959],{"class":221},">我不需要变色\u003C\u002F",[47,66961,19],{"class":51354},[47,66963,51361],{"class":221},[47,66965,66966,66968,66970],{"class":49,"line":1768},[47,66967,52471],{"class":221},[47,66969,106],{"class":51354},[47,66971,51361],{"class":221},[47,66973,66974,66976,66978],{"class":49,"line":1773},[47,66975,52198],{"class":221},[47,66977,51867],{"class":51354},[47,66979,51361],{"class":221},[47,66981,66982],{"class":49,"line":1787},[47,66983,66984],{"class":279},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[47,66986,66987,66989,66991,66993,66995,66997,66999,67002],{"class":49,"line":1792},[47,66988,11314],{"class":217},[47,66990,61346],{"class":85},[47,66992,13657],{"class":217},[47,66994,54450],{"class":221},[47,66996,54453],{"class":53},[47,66998,222],{"class":221},[47,67000,67001],{"class":81},"'ul'",[47,67003,228],{"class":221},[47,67005,67006,67009,67011,67013,67015,67017,67019,67021,67023],{"class":49,"line":1821},[47,67007,67008],{"class":221},"    ul.",[47,67010,57867],{"class":53},[47,67012,222],{"class":221},[47,67014,57872],{"class":81},[47,67016,12528],{"class":221},[47,67018,54503],{"class":217},[47,67020,1752],{"class":221},[47,67022,295],{"class":5309},[47,67024,12535],{"class":221},[47,67026,67027],{"class":49,"line":1826},[47,67028,67029],{"class":279},"      \u002F\u002F alert(1)\n",[47,67031,67032],{"class":49,"line":1843},[47,67033,67034],{"class":279},"      \u002F\u002F e.target就是我们点击的对象\n",[47,67036,67037],{"class":49,"line":1848},[47,67038,67039],{"class":279},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[47,67041,67042],{"class":49,"line":1853},[47,67043,67044],{"class":279},"      \u002F\u002F e.target.style.color = 'red'\n",[47,67046,67047,67049,67051],{"class":49,"line":1858},[47,67048,58298],{"class":221},[47,67050,58301],{"class":53},[47,67052,67053],{"class":221},"(e)\n",[47,67055,67056],{"class":49,"line":1872},[47,67057,2493],{"emptyLinePlaceholder":145},[47,67059,67060,67062,67065],{"class":49,"line":1877},[47,67061,58298],{"class":221},[47,67063,67064],{"class":53},"dir",[47,67066,67067],{"class":221},"(e.target)\n",[47,67069,67070],{"class":49,"line":2670},[47,67071,2493],{"emptyLinePlaceholder":145},[47,67073,67074],{"class":49,"line":2684},[47,67075,67076],{"class":279},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[47,67078,67079],{"class":49,"line":2692},[47,67080,67081],{"class":279},"      \u002F\u002F 通过tagName来进行判断\n",[47,67083,67084,67086,67089,67091,67094],{"class":49,"line":2697},[47,67085,54534],{"class":217},[47,67087,67088],{"class":221}," (e.target.tagName ",[47,67090,54540],{"class":217},[47,67092,67093],{"class":81}," 'LI'",[47,67095,12535],{"class":221},[47,67097,67098,67101,67103],{"class":49,"line":2703},[47,67099,67100],{"class":221},"        e.target.style.color ",[47,67102,267],{"class":217},[47,67104,67105],{"class":81}," 'red'\n",[47,67107,67108],{"class":49,"line":2709},[47,67109,52452],{"class":221},[47,67111,67112],{"class":49,"line":2714},[47,67113,33515],{"class":221},[47,67115,67116,67118,67120],{"class":49,"line":8041},[47,67117,52471],{"class":221},[47,67119,51867],{"class":51354},[47,67121,51361],{"class":221},[47,67123,67124,67126,67128],{"class":49,"line":8065},[47,67125,51839],{"class":221},[47,67127,51854],{"class":51354},[47,67129,51361],{"class":221},[47,67131,67132],{"class":49,"line":8070},[47,67133,2493],{"emptyLinePlaceholder":145},[47,67135,67136,67138,67140],{"class":49,"line":8076},[47,67137,51839],{"class":221},[47,67139,50689],{"class":51354},[47,67141,51361],{"class":221},[19,67143,67144],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,67146,67147],{},"if(e.target.ragName==='P') {}",[19,67149,67150],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,67152,67153],{},"通过事件委托的方式实现tab栏切换改造：",[19,67155,67156],{},"一定要记住自定义属性！！！！！！",[19,67158,67159],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,67161,67162],{},"id是自定义的属性名",[19,67164,67165],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[38,67167,67169],{"className":50687,"code":67168,"language":50689,"meta":43,"style":43},"\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",[26,67170,67171,67181,67195,67199,67207,67221,67241,67261,67273,67281,67287,67297,67307,67311,67315,67321,67333,67345,67357,67373,67377,67381,67387,67399,67411,67423,67433,67443,67447,67451,67459,67471,67481,67493,67497,67501,67509,67519,67529,67539,67543,67547,67557,67571,67583,67587,67591,67603,67613,67629,67639,67643,67647,67661,67671,67681,67685,67689,67695,67709,67713,67717,67725,67735,67739,67743,67752,67762,67766,67774,67782,67786,67794,67808,67822,67834,67842,67881,67913,67945,67977,68009,68017,68025,68039,68073,68107,68141,68175,68209,68217,68225,68233,68238,68243,68262,68267,68287,68295,68300,68313,68334,68347,68351,68356,68361,68374,68394,68422,68426,68430,68434,68442,68450,68454],{"__ignoreMap":43},[47,67172,67173,67175,67177,67179],{"class":49,"line":50},[47,67174,51351],{"class":221},[47,67176,51355],{"class":51354},[47,67178,51358],{"class":53},[47,67180,51361],{"class":221},[47,67182,67183,67185,67187,67189,67191,67193],{"class":49,"line":92},[47,67184,1129],{"class":221},[47,67186,50689],{"class":51354},[47,67188,51370],{"class":53},[47,67190,267],{"class":221},[47,67192,51375],{"class":81},[47,67194,51361],{"class":221},[47,67196,67197],{"class":49,"line":1273},[47,67198,2493],{"emptyLinePlaceholder":145},[47,67200,67201,67203,67205],{"class":49,"line":1288},[47,67202,1129],{"class":221},[47,67204,51388],{"class":51354},[47,67206,51361],{"class":221},[47,67208,67209,67211,67213,67215,67217,67219],{"class":49,"line":1294},[47,67210,52198],{"class":221},[47,67212,51398],{"class":51354},[47,67214,51401],{"class":53},[47,67216,267],{"class":221},[47,67218,51406],{"class":81},[47,67220,59181],{"class":221},[47,67222,67223,67225,67227,67229,67231,67233,67235,67237,67239],{"class":49,"line":1308},[47,67224,52198],{"class":221},[47,67226,51398],{"class":51354},[47,67228,51417],{"class":53},[47,67230,267],{"class":221},[47,67232,51422],{"class":81},[47,67234,51425],{"class":53},[47,67236,267],{"class":221},[47,67238,51430],{"class":81},[47,67240,59181],{"class":221},[47,67242,67243,67245,67247,67249,67251,67253,67255,67257,67259],{"class":49,"line":1314},[47,67244,52198],{"class":221},[47,67246,51398],{"class":51354},[47,67248,15013],{"class":53},[47,67250,267],{"class":221},[47,67252,51445],{"class":81},[47,67254,51425],{"class":53},[47,67256,267],{"class":221},[47,67258,51452],{"class":81},[47,67260,59181],{"class":221},[47,67262,67263,67265,67267,67269,67271],{"class":49,"line":1405},[47,67264,52198],{"class":221},[47,67266,51461],{"class":51354},[47,67268,63679],{"class":221},[47,67270,51461],{"class":51354},[47,67272,51361],{"class":221},[47,67274,67275,67277,67279],{"class":49,"line":1411},[47,67276,52198],{"class":221},[47,67278,134],{"class":51354},[47,67280,51361],{"class":221},[47,67282,67283,67285],{"class":49,"line":1423},[47,67284,6496],{"class":51354},[47,67286,15665],{"class":221},[47,67288,67289,67291,67293,67295],{"class":49,"line":1706},[47,67290,54760],{"class":85},[47,67292,51491],{"class":221},[47,67294,411],{"class":85},[47,67296,1384],{"class":221},[47,67298,67299,67301,67303,67305],{"class":49,"line":1711},[47,67300,54749],{"class":85},[47,67302,51491],{"class":221},[47,67304,411],{"class":85},[47,67306,1384],{"class":221},[47,67308,67309],{"class":49,"line":1717},[47,67310,2280],{"class":221},[47,67312,67313],{"class":49,"line":1722},[47,67314,2493],{"emptyLinePlaceholder":145},[47,67316,67317,67319],{"class":49,"line":1736},[47,67318,63730],{"class":53},[47,67320,15665],{"class":221},[47,67322,67323,67325,67327,67329,67331],{"class":49,"line":1741},[47,67324,54825],{"class":85},[47,67326,51491],{"class":221},[47,67328,63741],{"class":85},[47,67330,51546],{"class":217},[47,67332,1384],{"class":221},[47,67334,67335,67337,67339,67341,67343],{"class":49,"line":1747},[47,67336,54839],{"class":85},[47,67338,51491],{"class":221},[47,67340,63754],{"class":85},[47,67342,51546],{"class":217},[47,67344,1384],{"class":221},[47,67346,67347,67349,67351,67353,67355],{"class":49,"line":1768},[47,67348,54760],{"class":85},[47,67350,51491],{"class":221},[47,67352,919],{"class":85},[47,67354,51546],{"class":217},[47,67356,1384],{"class":221},[47,67358,67359,67361,67363,67365,67367,67369,67371],{"class":49,"line":1773},[47,67360,62031],{"class":85},[47,67362,51491],{"class":221},[47,67364,436],{"class":85},[47,67366,51546],{"class":217},[47,67368,51575],{"class":85},[47,67370,62298],{"class":85},[47,67372,1384],{"class":221},[47,67374,67375],{"class":49,"line":1787},[47,67376,2280],{"class":221},[47,67378,67379],{"class":49,"line":1792},[47,67380,2493],{"emptyLinePlaceholder":145},[47,67382,67383,67385],{"class":49,"line":1821},[47,67384,63799],{"class":53},[47,67386,15665],{"class":221},[47,67388,67389,67391,67393,67395,67397],{"class":49,"line":1826},[47,67390,54825],{"class":85},[47,67392,51491],{"class":221},[47,67394,530],{"class":85},[47,67396,547],{"class":217},[47,67398,1384],{"class":221},[47,67400,67401,67403,67405,67407,67409],{"class":49,"line":1843},[47,67402,54839],{"class":85},[47,67404,51491],{"class":221},[47,67406,1126],{"class":85},[47,67408,51546],{"class":217},[47,67410,1384],{"class":221},[47,67412,67413,67415,67417,67419,67421],{"class":49,"line":1848},[47,67414,57413],{"class":85},[47,67416,51491],{"class":221},[47,67418,1126],{"class":85},[47,67420,51546],{"class":217},[47,67422,1384],{"class":221},[47,67424,67425,67427,67429,67431],{"class":49,"line":1853},[47,67426,55063],{"class":85},[47,67428,51491],{"class":221},[47,67430,51531],{"class":85},[47,67432,1384],{"class":221},[47,67434,67435,67437,67439,67441],{"class":49,"line":1858},[47,67436,55074],{"class":85},[47,67438,51491],{"class":221},[47,67440,51722],{"class":85},[47,67442,1384],{"class":221},[47,67444,67445],{"class":49,"line":1872},[47,67446,2280],{"class":221},[47,67448,67449],{"class":49,"line":1877},[47,67450,2493],{"emptyLinePlaceholder":145},[47,67452,67453,67455,67457],{"class":49,"line":2670},[47,67454,63799],{"class":53},[47,67456,63872],{"class":51354},[47,67458,15665],{"class":221},[47,67460,67461,67463,67465,67467,67469],{"class":49,"line":2684},[47,67462,54976],{"class":85},[47,67464,51491],{"class":221},[47,67466,1019],{"class":85},[47,67468,51546],{"class":217},[47,67470,1384],{"class":221},[47,67472,67473,67475,67477,67479],{"class":49,"line":2692},[47,67474,62388],{"class":85},[47,67476,51491],{"class":221},[47,67478,63895],{"class":85},[47,67480,1384],{"class":221},[47,67482,67483,67485,67487,67489,67491],{"class":49,"line":2697},[47,67484,62054],{"class":85},[47,67486,51491],{"class":221},[47,67488,919],{"class":85},[47,67490,51546],{"class":217},[47,67492,1384],{"class":221},[47,67494,67495],{"class":49,"line":2703},[47,67496,2280],{"class":221},[47,67498,67499],{"class":49,"line":2709},[47,67500,2493],{"emptyLinePlaceholder":145},[47,67502,67503,67505,67507],{"class":49,"line":2714},[47,67504,63799],{"class":53},[47,67506,61346],{"class":51354},[47,67508,15665],{"class":221},[47,67510,67511,67513,67515,67517],{"class":49,"line":8041},[47,67512,54786],{"class":85},[47,67514,51491],{"class":221},[47,67516,54791],{"class":85},[47,67518,1384],{"class":221},[47,67520,67521,67523,67525,67527],{"class":49,"line":8065},[47,67522,55063],{"class":85},[47,67524,51491],{"class":221},[47,67526,51531],{"class":85},[47,67528,1384],{"class":221},[47,67530,67531,67533,67535,67537],{"class":49,"line":8070},[47,67532,55074],{"class":85},[47,67534,51491],{"class":221},[47,67536,51634],{"class":85},[47,67538,1384],{"class":221},[47,67540,67541],{"class":49,"line":8076},[47,67542,2280],{"class":221},[47,67544,67545],{"class":49,"line":8103},[47,67546,2493],{"emptyLinePlaceholder":145},[47,67548,67549,67551,67553,67555],{"class":49,"line":8108},[47,67550,63799],{"class":53},[47,67552,61346],{"class":51354},[47,67554,55129],{"class":51354},[47,67556,15665],{"class":221},[47,67558,67559,67561,67563,67565,67567,67569],{"class":49,"line":8114},[47,67560,54760],{"class":85},[47,67562,51491],{"class":221},[47,67564,411],{"class":85},[47,67566,9043],{"class":85},[47,67568,51546],{"class":217},[47,67570,1384],{"class":221},[47,67572,67573,67575,67577,67579,67581],{"class":49,"line":8126},[47,67574,54976],{"class":85},[47,67576,51491],{"class":221},[47,67578,768],{"class":85},[47,67580,51546],{"class":217},[47,67582,1384],{"class":221},[47,67584,67585],{"class":49,"line":8138},[47,67586,2280],{"class":221},[47,67588,67589],{"class":49,"line":8150},[47,67590,2493],{"emptyLinePlaceholder":145},[47,67592,67593,67595,67597,67599,67601],{"class":49,"line":9809},[47,67594,63799],{"class":53},[47,67596,61346],{"class":51354},[47,67598,55129],{"class":51354},[47,67600,1492],{"class":51354},[47,67602,15665],{"class":221},[47,67604,67605,67607,67609,67611],{"class":49,"line":9834},[47,67606,64024],{"class":85},[47,67608,51491],{"class":221},[47,67610,54791],{"class":85},[47,67612,1384],{"class":221},[47,67614,67615,67617,67619,67621,67623,67625,67627],{"class":49,"line":9857},[47,67616,62286],{"class":85},[47,67618,51491],{"class":221},[47,67620,298],{"class":85},[47,67622,51546],{"class":217},[47,67624,51575],{"class":85},[47,67626,64045],{"class":85},[47,67628,1384],{"class":221},[47,67630,67631,67633,67635,67637],{"class":49,"line":9881},[47,67632,57470],{"class":85},[47,67634,51491],{"class":221},[47,67636,62423],{"class":85},[47,67638,1384],{"class":221},[47,67640,67641],{"class":49,"line":9886},[47,67642,2280],{"class":221},[47,67644,67645],{"class":49,"line":9891},[47,67646,2493],{"emptyLinePlaceholder":145},[47,67648,67649,67651,67653,67655,67657,67659],{"class":49,"line":9896},[47,67650,63799],{"class":53},[47,67652,61346],{"class":51354},[47,67654,55129],{"class":51354},[47,67656,1492],{"class":51354},[47,67658,64078],{"class":53},[47,67660,15665],{"class":221},[47,67662,67663,67665,67667,67669],{"class":49,"line":9905},[47,67664,61845],{"class":85},[47,67666,51491],{"class":221},[47,67668,64089],{"class":85},[47,67670,1384],{"class":221},[47,67672,67673,67675,67677,67679],{"class":49,"line":9910},[47,67674,57470],{"class":85},[47,67676,51491],{"class":221},[47,67678,64089],{"class":85},[47,67680,1384],{"class":221},[47,67682,67683],{"class":49,"line":9916},[47,67684,2280],{"class":221},[47,67686,67687],{"class":49,"line":9937},[47,67688,2493],{"emptyLinePlaceholder":145},[47,67690,67691,67693],{"class":49,"line":9943},[47,67692,64114],{"class":53},[47,67694,15665],{"class":221},[47,67696,67697,67699,67701,67703,67705,67707],{"class":49,"line":9957},[47,67698,54749],{"class":85},[47,67700,51491],{"class":221},[47,67702,411],{"class":85},[47,67704,64127],{"class":85},[47,67706,51546],{"class":217},[47,67708,1384],{"class":221},[47,67710,67711],{"class":49,"line":9963},[47,67712,2280],{"class":221},[47,67714,67715],{"class":49,"line":9990},[47,67716,2493],{"emptyLinePlaceholder":145},[47,67718,67719,67721,67723],{"class":49,"line":9999},[47,67720,64114],{"class":53},[47,67722,62228],{"class":53},[47,67724,15665],{"class":221},[47,67726,67727,67729,67731,67733],{"class":49,"line":10005},[47,67728,55063],{"class":85},[47,67730,51491],{"class":221},[47,67732,54791],{"class":85},[47,67734,1384],{"class":221},[47,67736,67737],{"class":49,"line":10013},[47,67738,2280],{"class":221},[47,67740,67741],{"class":49,"line":10018},[47,67742,2493],{"emptyLinePlaceholder":145},[47,67744,67745,67747,67750],{"class":49,"line":16697},[47,67746,64114],{"class":53},[47,67748,67749],{"class":53}," .active",[47,67751,15665],{"class":221},[47,67753,67754,67756,67758,67760],{"class":49,"line":16703},[47,67755,55063],{"class":85},[47,67757,51491],{"class":221},[47,67759,60923],{"class":85},[47,67761,1384],{"class":221},[47,67763,67764],{"class":49,"line":16726},[47,67765,2280],{"class":221},[47,67767,67768,67770,67772],{"class":49,"line":16732},[47,67769,52471],{"class":221},[47,67771,134],{"class":51354},[47,67773,51361],{"class":221},[47,67775,67776,67778,67780],{"class":49,"line":16755},[47,67777,51839],{"class":221},[47,67779,51388],{"class":51354},[47,67781,51361],{"class":221},[47,67783,67784],{"class":49,"line":16769},[47,67785,2493],{"emptyLinePlaceholder":145},[47,67787,67788,67790,67792],{"class":49,"line":16789},[47,67789,1129],{"class":221},[47,67791,51854],{"class":51354},[47,67793,51361],{"class":221},[47,67795,67796,67798,67800,67802,67804,67806],{"class":49,"line":16795},[47,67797,52198],{"class":221},[47,67799,51665],{"class":51354},[47,67801,53540],{"class":53},[47,67803,267],{"class":221},[47,67805,64229],{"class":81},[47,67807,51361],{"class":221},[47,67809,67810,67812,67814,67816,67818,67820],{"class":49,"line":16806},[47,67811,51395],{"class":221},[47,67813,51665],{"class":51354},[47,67815,53540],{"class":53},[47,67817,267],{"class":221},[47,67819,64244],{"class":81},[47,67821,51361],{"class":221},[47,67823,67824,67826,67828,67830,67832],{"class":49,"line":16829},[47,67825,55288],{"class":221},[47,67827,187],{"class":51354},[47,67829,64255],{"class":221},[47,67831,187],{"class":51354},[47,67833,51361],{"class":221},[47,67835,67836,67838,67840],{"class":49,"line":16851},[47,67837,55288],{"class":221},[47,67839,106],{"class":51354},[47,67841,51361],{"class":221},[47,67843,67844,67846,67848,67850,67852,67854,67856,67858,67860,67862,67864,67866,67868,67871,67873,67875,67877,67879],{"class":49,"line":16856},[47,67845,55356],{"class":221},[47,67847,109],{"class":51354},[47,67849,61106],{"class":221},[47,67851,457],{"class":51354},[47,67853,53540],{"class":53},[47,67855,267],{"class":221},[47,67857,59760],{"class":81},[47,67859,61111],{"class":53},[47,67861,267],{"class":221},[47,67863,64290],{"class":81},[47,67865,54005],{"class":53},[47,67867,267],{"class":221},[47,67869,67870],{"class":81},"\"0\"",[47,67872,64293],{"class":221},[47,67874,457],{"class":51354},[47,67876,55368],{"class":221},[47,67878,109],{"class":51354},[47,67880,51361],{"class":221},[47,67882,67883,67885,67887,67889,67891,67893,67895,67897,67899,67901,67903,67905,67907,67909,67911],{"class":49,"line":16862},[47,67884,55356],{"class":221},[47,67886,109],{"class":51354},[47,67888,61106],{"class":221},[47,67890,457],{"class":51354},[47,67892,61111],{"class":53},[47,67894,267],{"class":221},[47,67896,64290],{"class":81},[47,67898,54005],{"class":53},[47,67900,267],{"class":221},[47,67902,3771],{"class":81},[47,67904,64320],{"class":221},[47,67906,457],{"class":51354},[47,67908,55368],{"class":221},[47,67910,109],{"class":51354},[47,67912,51361],{"class":221},[47,67914,67915,67917,67919,67921,67923,67925,67927,67929,67931,67933,67935,67937,67939,67941,67943],{"class":49,"line":16876},[47,67916,55356],{"class":221},[47,67918,109],{"class":51354},[47,67920,61106],{"class":221},[47,67922,457],{"class":51354},[47,67924,61111],{"class":53},[47,67926,267],{"class":221},[47,67928,64290],{"class":81},[47,67930,54005],{"class":53},[47,67932,267],{"class":221},[47,67934,3794],{"class":81},[47,67936,64347],{"class":221},[47,67938,457],{"class":51354},[47,67940,55368],{"class":221},[47,67942,109],{"class":51354},[47,67944,51361],{"class":221},[47,67946,67947,67949,67951,67953,67955,67957,67959,67961,67963,67965,67967,67969,67971,67973,67975],{"class":49,"line":16889},[47,67948,55356],{"class":221},[47,67950,109],{"class":51354},[47,67952,61106],{"class":221},[47,67954,457],{"class":51354},[47,67956,61111],{"class":53},[47,67958,267],{"class":221},[47,67960,64290],{"class":81},[47,67962,54005],{"class":53},[47,67964,267],{"class":221},[47,67966,3807],{"class":81},[47,67968,64374],{"class":221},[47,67970,457],{"class":51354},[47,67972,55368],{"class":221},[47,67974,109],{"class":51354},[47,67976,51361],{"class":221},[47,67978,67979,67981,67983,67985,67987,67989,67991,67993,67995,67997,67999,68001,68003,68005,68007],{"class":49,"line":16894},[47,67980,55356],{"class":221},[47,67982,109],{"class":51354},[47,67984,61106],{"class":221},[47,67986,457],{"class":51354},[47,67988,61111],{"class":53},[47,67990,267],{"class":221},[47,67992,64290],{"class":81},[47,67994,54005],{"class":53},[47,67996,267],{"class":221},[47,67998,3820],{"class":81},[47,68000,64401],{"class":221},[47,68002,457],{"class":51354},[47,68004,55368],{"class":221},[47,68006,109],{"class":51354},[47,68008,51361],{"class":221},[47,68010,68011,68013,68015],{"class":49,"line":16908},[47,68012,55461],{"class":221},[47,68014,106],{"class":51354},[47,68016,51361],{"class":221},[47,68018,68019,68021,68023],{"class":49,"line":16913},[47,68020,51830],{"class":221},[47,68022,51665],{"class":51354},[47,68024,51361],{"class":221},[47,68026,68027,68029,68031,68033,68035,68037],{"class":49,"line":16919},[47,68028,51395],{"class":221},[47,68030,51665],{"class":51354},[47,68032,53540],{"class":53},[47,68034,267],{"class":221},[47,68036,64438],{"class":81},[47,68038,51361],{"class":221},[47,68040,68041,68043,68045,68047,68049,68051,68053,68055,68057,68059,68061,68063,68065,68067,68069,68071],{"class":49,"line":16924},[47,68042,55288],{"class":221},[47,68044,51665],{"class":51354},[47,68046,53540],{"class":53},[47,68048,267],{"class":221},[47,68050,64453],{"class":81},[47,68052,61106],{"class":221},[47,68054,1556],{"class":51354},[47,68056,55293],{"class":53},[47,68058,267],{"class":221},[47,68060,64464],{"class":81},[47,68062,55301],{"class":53},[47,68064,267],{"class":221},[47,68066,7745],{"class":81},[47,68068,64473],{"class":221},[47,68070,51665],{"class":51354},[47,68072,51361],{"class":221},[47,68074,68075,68077,68079,68081,68083,68085,68087,68089,68091,68093,68095,68097,68099,68101,68103,68105],{"class":49,"line":16938},[47,68076,55288],{"class":221},[47,68078,51665],{"class":51354},[47,68080,53540],{"class":53},[47,68082,267],{"class":221},[47,68084,62677],{"class":81},[47,68086,61106],{"class":221},[47,68088,1556],{"class":51354},[47,68090,55293],{"class":53},[47,68092,267],{"class":221},[47,68094,64500],{"class":81},[47,68096,55301],{"class":53},[47,68098,267],{"class":221},[47,68100,7745],{"class":81},[47,68102,64473],{"class":221},[47,68104,51665],{"class":51354},[47,68106,51361],{"class":221},[47,68108,68109,68111,68113,68115,68117,68119,68121,68123,68125,68127,68129,68131,68133,68135,68137,68139],{"class":49,"line":16943},[47,68110,55288],{"class":221},[47,68112,51665],{"class":51354},[47,68114,53540],{"class":53},[47,68116,267],{"class":221},[47,68118,62677],{"class":81},[47,68120,61106],{"class":221},[47,68122,1556],{"class":51354},[47,68124,55293],{"class":53},[47,68126,267],{"class":221},[47,68128,64535],{"class":81},[47,68130,55301],{"class":53},[47,68132,267],{"class":221},[47,68134,7745],{"class":81},[47,68136,64473],{"class":221},[47,68138,51665],{"class":51354},[47,68140,51361],{"class":221},[47,68142,68143,68145,68147,68149,68151,68153,68155,68157,68159,68161,68163,68165,68167,68169,68171,68173],{"class":49,"line":16948},[47,68144,55288],{"class":221},[47,68146,51665],{"class":51354},[47,68148,53540],{"class":53},[47,68150,267],{"class":221},[47,68152,62677],{"class":81},[47,68154,61106],{"class":221},[47,68156,1556],{"class":51354},[47,68158,55293],{"class":53},[47,68160,267],{"class":221},[47,68162,64570],{"class":81},[47,68164,55301],{"class":53},[47,68166,267],{"class":221},[47,68168,7745],{"class":81},[47,68170,64473],{"class":221},[47,68172,51665],{"class":51354},[47,68174,51361],{"class":221},[47,68176,68177,68179,68181,68183,68185,68187,68189,68191,68193,68195,68197,68199,68201,68203,68205,68207],{"class":49,"line":16962},[47,68178,55288],{"class":221},[47,68180,51665],{"class":51354},[47,68182,53540],{"class":53},[47,68184,267],{"class":221},[47,68186,62677],{"class":81},[47,68188,61106],{"class":221},[47,68190,1556],{"class":51354},[47,68192,55293],{"class":53},[47,68194,267],{"class":221},[47,68196,64605],{"class":81},[47,68198,55301],{"class":53},[47,68200,267],{"class":221},[47,68202,7745],{"class":81},[47,68204,64473],{"class":221},[47,68206,51665],{"class":51354},[47,68208,51361],{"class":221},[47,68210,68211,68213,68215],{"class":49,"line":16974},[47,68212,51830],{"class":221},[47,68214,51665],{"class":51354},[47,68216,51361],{"class":221},[47,68218,68219,68221,68223],{"class":49,"line":16979},[47,68220,52471],{"class":221},[47,68222,51665],{"class":51354},[47,68224,51361],{"class":221},[47,68226,68227,68229,68231],{"class":49,"line":16992},[47,68228,52198],{"class":221},[47,68230,51867],{"class":51354},[47,68232,51361],{"class":221},[47,68234,68235],{"class":49,"line":16997},[47,68236,68237],{"class":279},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[47,68239,68240],{"class":49,"line":17002},[47,68241,68242],{"class":279},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[47,68244,68245,68247,68249,68251,68253,68255,68257,68260],{"class":49,"line":17007},[47,68246,11314],{"class":217},[47,68248,61346],{"class":85},[47,68250,13657],{"class":217},[47,68252,54450],{"class":221},[47,68254,54453],{"class":53},[47,68256,222],{"class":221},[47,68258,68259],{"class":81},"'.tab-nav ul'",[47,68261,228],{"class":221},[47,68263,68264],{"class":49,"line":17020},[47,68265,68266],{"class":279},"    \u002F\u002F 2.添加事件\n",[47,68268,68269,68271,68273,68275,68277,68279,68281,68283,68285],{"class":49,"line":17025},[47,68270,67008],{"class":221},[47,68272,57867],{"class":53},[47,68274,222],{"class":221},[47,68276,57872],{"class":81},[47,68278,12528],{"class":221},[47,68280,54503],{"class":217},[47,68282,1752],{"class":221},[47,68284,295],{"class":5309},[47,68286,12535],{"class":221},[47,68288,68289,68291,68293],{"class":49,"line":32687},[47,68290,58298],{"class":221},[47,68292,67064],{"class":53},[47,68294,67067],{"class":221},[47,68296,68297],{"class":49,"line":32693},[47,68298,68299],{"class":279},"      \u002F\u002Fe.targer是我们点击的对象\n",[47,68301,68302,68304,68306,68308,68311],{"class":49,"line":32699},[47,68303,54534],{"class":217},[47,68305,67088],{"class":221},[47,68307,54540],{"class":217},[47,68309,68310],{"class":81}," 'A'",[47,68312,12535],{"class":221},[47,68314,68315,68317,68319,68321,68324,68326,68328,68330,68332],{"class":49,"line":32705},[47,68316,51979],{"class":221},[47,68318,54453],{"class":53},[47,68320,222],{"class":221},[47,68322,68323],{"class":81},"'.active'",[47,68325,57057],{"class":221},[47,68327,57060],{"class":53},[47,68329,222],{"class":221},[47,68331,64768],{"class":81},[47,68333,228],{"class":221},[47,68335,68336,68339,68341,68343,68345],{"class":49,"line":32711},[47,68337,68338],{"class":221},"        e.target.classList.",[47,68340,5427],{"class":53},[47,68342,222],{"class":221},[47,68344,64768],{"class":81},[47,68346,228],{"class":221},[47,68348,68349],{"class":49,"line":32722},[47,68350,2493],{"emptyLinePlaceholder":145},[47,68352,68353],{"class":49,"line":32728},[47,68354,68355],{"class":279},"        \u002F\u002F 下面大盒子模块\n",[47,68357,68358],{"class":49,"line":32748},[47,68359,68360],{"class":279},"        \u002F\u002F console.log(e.target.dataset.id)\n",[47,68362,68363,68365,68367,68369,68371],{"class":49,"line":32754},[47,68364,61324],{"class":217},[47,68366,3125],{"class":85},[47,68368,13657],{"class":217},[47,68370,45620],{"class":217},[47,68372,68373],{"class":221},"e.target.dataset.id\n",[47,68375,68376,68378,68380,68382,68384,68386,68388,68390,68392],{"class":49,"line":32765},[47,68377,51979],{"class":221},[47,68379,54453],{"class":53},[47,68381,222],{"class":221},[47,68383,64816],{"class":81},[47,68385,57057],{"class":221},[47,68387,57060],{"class":53},[47,68389,222],{"class":221},[47,68391,64768],{"class":81},[47,68393,228],{"class":221},[47,68395,68396,68398,68400,68402,68404,68406,68408,68410,68412,68414,68416,68418,68420],{"class":49,"line":32771},[47,68397,51979],{"class":221},[47,68399,54453],{"class":53},[47,68401,222],{"class":221},[47,68403,64842],{"class":81},[47,68405,660],{"class":221},[47,68407,45620],{"class":217},[47,68409,25172],{"class":85},[47,68411,57086],{"class":81},[47,68413,57057],{"class":221},[47,68415,5427],{"class":53},[47,68417,222],{"class":221},[47,68419,64768],{"class":81},[47,68421,228],{"class":221},[47,68423,68424],{"class":49,"line":32777},[47,68425,2493],{"emptyLinePlaceholder":145},[47,68427,68428],{"class":49,"line":32783},[47,68429,52452],{"class":221},[47,68431,68432],{"class":49,"line":32789},[47,68433,33515],{"class":221},[47,68435,68436,68438,68440],{"class":49,"line":32795},[47,68437,52471],{"class":221},[47,68439,51867],{"class":51354},[47,68441,51361],{"class":221},[47,68443,68444,68446,68448],{"class":49,"line":32801},[47,68445,51839],{"class":221},[47,68447,51854],{"class":51354},[47,68449,51361],{"class":221},[47,68451,68452],{"class":49,"line":32807},[47,68453,2493],{"emptyLinePlaceholder":145},[47,68455,68456,68458,68460],{"class":49,"line":32827},[47,68457,51839],{"class":221},[47,68459,50689],{"class":51354},[47,68461,51361],{"class":221},[187,68463,68465],{"id":68464},"_333-页面加载事件","3.3.3 页面加载事件",[171,68467,68468],{},[109,68469,68470],{},"load",[19,68472,68473],{},[1556,68474],{"alt":43,"src":68475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,68477,68478],{},"window代表整个窗口，比document还要大",[19,68480,68481],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,68483,68484],{},"img.addEventListener('load', function () {",[19,68486,68487],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,68489,52518],{},[171,68491,68492],{"start":92},[109,68493,68494],{},"DOMContentLoaded",[19,68496,68497],{},[1556,68498],{"alt":43,"src":68499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,68501,68502],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[187,68504,68506],{"id":68505},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,68508,68509],{},[1556,68510],{"alt":43,"src":68511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,68513,68514],{},[1556,68515],{"alt":43,"src":68516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,68518,68519],{},[1556,68520],{"alt":43,"src":68521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,68523,68524],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,68526,68527],{},"获得的是数字型数据，不带单位",[19,68529,68530],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,68532,68533],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,68535,68536],{},"它是通过document.documentElement来获取",[19,68538,68539],{},[1556,68540],{"alt":43,"src":68541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,68543,68544],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[187,68546,68548],{"id":68547},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,68550,68551],{},[1556,68552],{"alt":43,"src":68553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,68555,68556],{},[1556,68557],{"alt":43,"src":68558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[187,68560,68562],{"id":68561},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,68564,68565],{},[1556,68566],{"alt":43,"src":68567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,68569,68570],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,68572,68573],{},[1556,68574],{"alt":43,"src":68575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,68577,68578],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,68580,68581],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,68583,68584],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,68586,68587],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,68589,68590],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,68592,68593],{},[1556,68594],{"alt":43,"src":68595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,68597,68598],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,68600,68601],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,68603,68604],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,68606,68607],{},"e.pageX-box.getBoundingClientRect()",[187,68609,68611],{"id":68610},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,68613,68614],{},[1556,68615],{"alt":43,"src":68616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,68618,68619],{},"这个是相对于视口来说的，它是个方法，不是属性值",[187,68621,68623],{"id":68622},"_338-总结","3.3.8 总结",[19,68625,68626],{},[1556,68627],{"alt":43,"src":68628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,68630,68631],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,68633,68634],{},"修改盒子的宽高只能通过width和height来实现",[187,68636,68638],{"id":68637},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[38,68640,68642],{"className":50687,"code":68641,"language":50689,"meta":43,"style":43},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[26,68643,68644,68649,68654,68659,68664],{"__ignoreMap":43},[47,68645,68646],{"class":49,"line":50},[47,68647,68648],{"class":221},"\u002F* 页面滑动 *\u002F\n",[47,68650,68651],{"class":49,"line":92},[47,68652,68653],{"class":221},"html {\n",[47,68655,68656],{"class":49,"line":1273},[47,68657,68658],{"class":221},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[47,68660,68661],{"class":49,"line":1288},[47,68662,68663],{"class":221},"  scroll-behavior: smooth;\n",[47,68665,68666],{"class":49,"line":1294},[47,68667,1659],{"class":221},[19,68669,68670],{},"默认是auto",[187,68672,68674],{"id":68673},"_3310-日期对象","3.3.10 日期对象",[22091,68676,68678],{"id":68677},"_33101-实例化","3.3.10.1 实例化",[19,68680,68681],{},[1556,68682],{"alt":43,"src":68683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22091,68685,68687],{"id":68686},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,68689,68690],{},[1556,68691],{"alt":43,"src":68692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,68694,68695],{},"月份+1",[19,68697,68698],{},"老外认为第一天为0，星期天",[19,68700,68701],{},"方法使用的时候必须要跟括号",[19,68703,68704],{},"快速获得日期",[19,68706,68707],{},"\u002F\u002F 得到年月日",[19,68709,68710],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,68712,68713],{},"\u002F\u002F 得到当地日期",[19,68715,68716],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,68718,68719],{},"\u002F\u002F 得到当地时间",[19,68721,68722],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,68724,68725],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,68727,68728],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51867,68730,68731],{},"\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,68733,68734],{},"学会去封装函数！",[22091,68736,68738],{"id":68737},"_33103-时间戳","3.3.10.3 时间戳",[19,68740,68741],{},[1556,68742],{"alt":43,"src":68743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,68745,68746],{},[1556,68747],{"alt":43,"src":68748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,68750,68751],{},"三种方法记住一个就可以",[187,68753,68755],{"id":68754},"_3311-节点操作","3.3.11 节点操作",[22091,68757,68759],{"id":68758},"_33111-dom节点","3.3.11.1 DOM节点",[19,68761,68762],{},[1556,68763],{"alt":43,"src":68764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,68766,68767],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22091,68769,68771],{"id":68770},"_33112-查找节点","3.3.11.2 查找节点",[19,68773,68774],{},"前边的document.querySelector()是获取的元素",[19,68776,68777],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,68779,68780],{},[1556,68781],{"alt":43,"src":68782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[171,68784,68785],{},[109,68786,68787],{},"父节点",[19,68789,68790],{},[1556,68791],{"alt":43,"src":68792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[171,68794,68795],{"start":92},[109,68796,68797],{},"子节点",[19,68799,68800],{},[1556,68801],{"alt":43,"src":68802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,68804,68805],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,68807,68808],{},"children获得的是伪数组，是亲儿子",[171,68810,68811],{"start":1273},[109,68812,68813],{},"兄弟节点",[19,68815,68816],{},[1556,68817],{"alt":43,"src":68818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22091,68820,68822],{"id":68821},"_33113-增加节点","3.3.11.3 增加节点",[19,68824,68825],{},[1556,68826],{"alt":43,"src":68827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,68829,68830],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,68832,68833],{},[1556,68834],{"alt":43,"src":68835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,68837,68838],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,68840,68841],{},"下面是写法的部分展示，就按照下边的格式来写",[19,68843,68844],{},"例：",[51867,68846,68847],{},"\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,68849,68850],{},[1556,68851],{"alt":43,"src":68852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,68854,68855],{},"false只克隆标签，里边的内容不会克隆过来",[38,68857,68859],{"className":50687,"code":68858,"language":50689,"meta":43,"style":43},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[26,68860,68861],{"__ignoreMap":43},[47,68862,68863],{"class":49,"line":50},[47,68864,68858],{"class":221},[22091,68866,68868],{"id":68867},"_33114-删除节点","3.3.11.4 删除节点",[19,68870,68871],{},[1556,68872],{"alt":43,"src":68873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,68875,68876],{},"父亲删儿子",[19,68878,68879],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[187,68881,68883],{"id":68882},"_3312-m端事件","3.3.12 M端事件",[19,68885,68886],{},"M端就是移动端",[19,68888,68889],{},[1556,68890],{"alt":43,"src":68891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[187,68893,68895],{"id":68894},"_3313-插件","3.3.13 插件",[19,68897,68898],{},"要熟悉官网！！！",[19,68900,68901],{},[457,68902,68903],{"href":68903,"rel":68904},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[23956],[19,68906,68907],{},[457,68908,68909],{"href":68909,"rel":68910},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[23956],[187,68912,68914],{"id":68913},"_3314-学生信息表","3.3.14 学生信息表",[171,68916,68917,68920,68923,68926,68929,68932,68935,68938],{},[109,68918,68919],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[109,68921,68922],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[109,68924,68925],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[109,68927,68928],{},"用好表单元素自带的属性，value,name等",[109,68930,68931],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[109,68933,68934],{},"不要忘记事件对象",[109,68936,68937],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[109,68939,68940],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,68942,68943],{},"结构：",[38,68945,68947],{"className":50687,"code":68946,"language":50689,"meta":43,"style":43},"\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",[26,68948,68949,68959,68973,68977,68985,68999,69019,69040,69053,69077,69085,69089,69097,69110,69131,69159,69187,69192,69214,69234,69253,69261,69289,69311,69331,69351,69371,69391,69411,69419,69439,69447,69451,69464,69472,69480,69488,69501,69514,69527,69540,69553,69566,69579,69587,69595,69603,69608,69613,69618,69623,69628,69633,69638,69643,69648,69653,69658,69663,69668,69676,69684,69692,69696,69716,69735,69755,69775,69795,69815,69819,69824,69844,69849,69859,69864,69869,69889,69911,69916,69926,69930,69934,69939,69944,69973,69987,70002,70006,70010,70014,70019,70030,70043,70048,70053,70058,70063,70068,70072,70077,70082,70091,70096,70101,70113,70118,70125,70129,70134,70144,70149,70159,70164,70192,70213,70223,70243,70261,70278,70295,70312,70329,70333,70343,70348,70353,70358,70369,70373,70377,70381,70386,70391,70412,70424,70429,70434,70439,70453,70458,70465,70469,70473,70481,70485,70493,70497],{"__ignoreMap":43},[47,68950,68951,68953,68955,68957],{"class":49,"line":50},[47,68952,51351],{"class":221},[47,68954,51355],{"class":51354},[47,68956,51358],{"class":53},[47,68958,51361],{"class":221},[47,68960,68961,68963,68965,68967,68969,68971],{"class":49,"line":92},[47,68962,1129],{"class":221},[47,68964,50689],{"class":51354},[47,68966,51370],{"class":53},[47,68968,267],{"class":221},[47,68970,51375],{"class":81},[47,68972,51361],{"class":221},[47,68974,68975],{"class":49,"line":1273},[47,68976,2493],{"emptyLinePlaceholder":145},[47,68978,68979,68981,68983],{"class":49,"line":1288},[47,68980,1129],{"class":221},[47,68982,51388],{"class":51354},[47,68984,51361],{"class":221},[47,68986,68987,68989,68991,68993,68995,68997],{"class":49,"line":1294},[47,68988,52198],{"class":221},[47,68990,51398],{"class":51354},[47,68992,51401],{"class":53},[47,68994,267],{"class":221},[47,68996,51406],{"class":81},[47,68998,59181],{"class":221},[47,69000,69001,69003,69005,69007,69009,69011,69013,69015,69017],{"class":49,"line":1308},[47,69002,52198],{"class":221},[47,69004,51398],{"class":51354},[47,69006,15013],{"class":53},[47,69008,267],{"class":221},[47,69010,51445],{"class":81},[47,69012,51425],{"class":53},[47,69014,267],{"class":221},[47,69016,51452],{"class":81},[47,69018,59181],{"class":221},[47,69020,69021,69023,69025,69027,69029,69031,69033,69035,69038],{"class":49,"line":1314},[47,69022,52198],{"class":221},[47,69024,51398],{"class":51354},[47,69026,51417],{"class":53},[47,69028,267],{"class":221},[47,69030,51422],{"class":81},[47,69032,51425],{"class":53},[47,69034,267],{"class":221},[47,69036,69037],{"class":81},"\"ie=edge\"",[47,69039,59181],{"class":221},[47,69041,69042,69044,69046,69049,69051],{"class":49,"line":1405},[47,69043,52198],{"class":221},[47,69045,51461],{"class":51354},[47,69047,69048],{"class":221},">学生信息管理\u003C\u002F",[47,69050,51461],{"class":51354},[47,69052,51361],{"class":221},[47,69054,69055,69057,69060,69063,69065,69068,69070,69072,69075],{"class":49,"line":1411},[47,69056,52198],{"class":221},[47,69058,69059],{"class":51354},"link",[47,69061,69062],{"class":53}," rel",[47,69064,267],{"class":221},[47,69066,69067],{"class":81},"\"stylesheet\"",[47,69069,61111],{"class":53},[47,69071,267],{"class":221},[47,69073,69074],{"class":81},"\"css\u002Findex.css\"",[47,69076,59181],{"class":221},[47,69078,69079,69081,69083],{"class":49,"line":1423},[47,69080,51839],{"class":221},[47,69082,51388],{"class":51354},[47,69084,51361],{"class":221},[47,69086,69087],{"class":49,"line":1706},[47,69088,2493],{"emptyLinePlaceholder":145},[47,69090,69091,69093,69095],{"class":49,"line":1711},[47,69092,1129],{"class":221},[47,69094,51854],{"class":51354},[47,69096,51361],{"class":221},[47,69098,69099,69101,69103,69106,69108],{"class":49,"line":1717},[47,69100,52198],{"class":221},[47,69102,10],{"class":51354},[47,69104,69105],{"class":221},">新增学员\u003C\u002F",[47,69107,10],{"class":51354},[47,69109,51361],{"class":221},[47,69111,69112,69114,69116,69118,69120,69122,69125,69127,69129],{"class":49,"line":1722},[47,69113,52198],{"class":221},[47,69115,66679],{"class":51354},[47,69117,53540],{"class":53},[47,69119,267],{"class":221},[47,69121,62718],{"class":81},[47,69123,69124],{"class":53}," autocomplete",[47,69126,267],{"class":221},[47,69128,31830],{"class":81},[47,69130,51361],{"class":221},[47,69132,69133,69136,69138,69140,69142,69144,69146,69148,69151,69153,69155,69157],{"class":49,"line":1736},[47,69134,69135],{"class":221},"    姓名：\u003C",[47,69137,53875],{"class":51354},[47,69139,53878],{"class":53},[47,69141,267],{"class":221},[47,69143,62753],{"class":81},[47,69145,53540],{"class":53},[47,69147,267],{"class":221},[47,69149,69150],{"class":81},"\"uname\"",[47,69152,15013],{"class":53},[47,69154,267],{"class":221},[47,69156,69150],{"class":81},[47,69158,59181],{"class":221},[47,69160,69161,69164,69166,69168,69170,69172,69174,69176,69179,69181,69183,69185],{"class":49,"line":1741},[47,69162,69163],{"class":221},"    年龄：\u003C",[47,69165,53875],{"class":51354},[47,69167,53878],{"class":53},[47,69169,267],{"class":221},[47,69171,62753],{"class":81},[47,69173,53540],{"class":53},[47,69175,267],{"class":221},[47,69177,69178],{"class":81},"\"age\"",[47,69180,15013],{"class":53},[47,69182,267],{"class":221},[47,69184,69178],{"class":81},[47,69186,59181],{"class":221},[47,69188,69189],{"class":49,"line":1747},[47,69190,69191],{"class":221},"    性别:\n",[47,69193,69194,69196,69199,69201,69203,69206,69208,69210,69212],{"class":49,"line":1768},[47,69195,51395],{"class":221},[47,69197,69198],{"class":51354},"select",[47,69200,15013],{"class":53},[47,69202,267],{"class":221},[47,69204,69205],{"class":81},"\"gender\"",[47,69207,53540],{"class":53},[47,69209,267],{"class":221},[47,69211,69205],{"class":81},[47,69213,51361],{"class":221},[47,69215,69216,69218,69221,69223,69225,69227,69230,69232],{"class":49,"line":1773},[47,69217,55288],{"class":221},[47,69219,69220],{"class":51354},"option",[47,69222,66705],{"class":53},[47,69224,267],{"class":221},[47,69226,10054],{"class":81},[47,69228,69229],{"class":221},">男\u003C\u002F",[47,69231,69220],{"class":51354},[47,69233,51361],{"class":221},[47,69235,69236,69238,69240,69242,69244,69246,69249,69251],{"class":49,"line":1787},[47,69237,55288],{"class":221},[47,69239,69220],{"class":51354},[47,69241,66705],{"class":53},[47,69243,267],{"class":221},[47,69245,10123],{"class":81},[47,69247,69248],{"class":221},">女\u003C\u002F",[47,69250,69220],{"class":51354},[47,69252,51361],{"class":221},[47,69254,69255,69257,69259],{"class":49,"line":1792},[47,69256,51830],{"class":221},[47,69258,69198],{"class":51354},[47,69260,51361],{"class":221},[47,69262,69263,69266,69268,69270,69272,69274,69276,69278,69281,69283,69285,69287],{"class":49,"line":1821},[47,69264,69265],{"class":221},"    薪资：\u003C",[47,69267,53875],{"class":51354},[47,69269,53878],{"class":53},[47,69271,267],{"class":221},[47,69273,62753],{"class":81},[47,69275,53540],{"class":53},[47,69277,267],{"class":221},[47,69279,69280],{"class":81},"\"salary\"",[47,69282,15013],{"class":53},[47,69284,267],{"class":221},[47,69286,69280],{"class":81},[47,69288,59181],{"class":221},[47,69290,69291,69294,69296,69298,69300,69303,69305,69307,69309],{"class":49,"line":1826},[47,69292,69293],{"class":221},"    就业城市：\u003C",[47,69295,69198],{"class":51354},[47,69297,15013],{"class":53},[47,69299,267],{"class":221},[47,69301,69302],{"class":81},"\"city\"",[47,69304,53540],{"class":53},[47,69306,267],{"class":221},[47,69308,69302],{"class":81},[47,69310,51361],{"class":221},[47,69312,69313,69315,69317,69319,69321,69324,69327,69329],{"class":49,"line":1843},[47,69314,55288],{"class":221},[47,69316,69220],{"class":51354},[47,69318,66705],{"class":53},[47,69320,267],{"class":221},[47,69322,69323],{"class":81},"\"北京\"",[47,69325,69326],{"class":221},">北京\u003C\u002F",[47,69328,69220],{"class":51354},[47,69330,51361],{"class":221},[47,69332,69333,69335,69337,69339,69341,69344,69347,69349],{"class":49,"line":1848},[47,69334,55288],{"class":221},[47,69336,69220],{"class":51354},[47,69338,66705],{"class":53},[47,69340,267],{"class":221},[47,69342,69343],{"class":81},"\"上海\"",[47,69345,69346],{"class":221},">上海\u003C\u002F",[47,69348,69220],{"class":51354},[47,69350,51361],{"class":221},[47,69352,69353,69355,69357,69359,69361,69364,69367,69369],{"class":49,"line":1853},[47,69354,55288],{"class":221},[47,69356,69220],{"class":51354},[47,69358,66705],{"class":53},[47,69360,267],{"class":221},[47,69362,69363],{"class":81},"\"广州\"",[47,69365,69366],{"class":221},">广州\u003C\u002F",[47,69368,69220],{"class":51354},[47,69370,51361],{"class":221},[47,69372,69373,69375,69377,69379,69381,69384,69387,69389],{"class":49,"line":1858},[47,69374,55288],{"class":221},[47,69376,69220],{"class":51354},[47,69378,66705],{"class":53},[47,69380,267],{"class":221},[47,69382,69383],{"class":81},"\"深圳\"",[47,69385,69386],{"class":221},">深圳\u003C\u002F",[47,69388,69220],{"class":51354},[47,69390,51361],{"class":221},[47,69392,69393,69395,69397,69399,69401,69404,69407,69409],{"class":49,"line":1872},[47,69394,55288],{"class":221},[47,69396,69220],{"class":51354},[47,69398,66705],{"class":53},[47,69400,267],{"class":221},[47,69402,69403],{"class":81},"\"曹县\"",[47,69405,69406],{"class":221},">曹县\u003C\u002F",[47,69408,69220],{"class":51354},[47,69410,51361],{"class":221},[47,69412,69413,69415,69417],{"class":49,"line":1877},[47,69414,51830],{"class":221},[47,69416,69198],{"class":51354},[47,69418,51361],{"class":221},[47,69420,69421,69423,69425,69427,69429,69432,69435,69437],{"class":49,"line":2670},[47,69422,51395],{"class":221},[47,69424,53941],{"class":51354},[47,69426,53540],{"class":53},[47,69428,267],{"class":221},[47,69430,69431],{"class":81},"\"add\"",[47,69433,69434],{"class":221},">录入\u003C\u002F",[47,69436,53941],{"class":51354},[47,69438,51361],{"class":221},[47,69440,69441,69443,69445],{"class":49,"line":2684},[47,69442,52471],{"class":221},[47,69444,66679],{"class":51354},[47,69446,51361],{"class":221},[47,69448,69449],{"class":49,"line":2692},[47,69450,2493],{"emptyLinePlaceholder":145},[47,69452,69453,69455,69457,69460,69462],{"class":49,"line":2697},[47,69454,52198],{"class":221},[47,69456,10],{"class":51354},[47,69458,69459],{"class":221},">就业榜\u003C\u002F",[47,69461,10],{"class":51354},[47,69463,51361],{"class":221},[47,69465,69466,69468,69470],{"class":49,"line":2703},[47,69467,52198],{"class":221},[47,69469,357],{"class":51354},[47,69471,51361],{"class":221},[47,69473,69474,69476,69478],{"class":49,"line":2709},[47,69475,51395],{"class":221},[47,69477,360],{"class":51354},[47,69479,51361],{"class":221},[47,69481,69482,69484,69486],{"class":49,"line":2714},[47,69483,55288],{"class":221},[47,69485,363],{"class":51354},[47,69487,51361],{"class":221},[47,69489,69490,69492,69494,69497,69499],{"class":49,"line":8041},[47,69491,55356],{"class":221},[47,69493,366],{"class":51354},[47,69495,69496],{"class":221},">序号\u003C\u002F",[47,69498,366],{"class":51354},[47,69500,51361],{"class":221},[47,69502,69503,69505,69507,69510,69512],{"class":49,"line":8065},[47,69504,55356],{"class":221},[47,69506,366],{"class":51354},[47,69508,69509],{"class":221},">姓名\u003C\u002F",[47,69511,366],{"class":51354},[47,69513,51361],{"class":221},[47,69515,69516,69518,69520,69523,69525],{"class":49,"line":8070},[47,69517,55356],{"class":221},[47,69519,366],{"class":51354},[47,69521,69522],{"class":221},">年龄\u003C\u002F",[47,69524,366],{"class":51354},[47,69526,51361],{"class":221},[47,69528,69529,69531,69533,69536,69538],{"class":49,"line":8076},[47,69530,55356],{"class":221},[47,69532,366],{"class":51354},[47,69534,69535],{"class":221},">性别\u003C\u002F",[47,69537,366],{"class":51354},[47,69539,51361],{"class":221},[47,69541,69542,69544,69546,69549,69551],{"class":49,"line":8103},[47,69543,55356],{"class":221},[47,69545,366],{"class":51354},[47,69547,69548],{"class":221},">薪资\u003C\u002F",[47,69550,366],{"class":51354},[47,69552,51361],{"class":221},[47,69554,69555,69557,69559,69562,69564],{"class":49,"line":8108},[47,69556,55356],{"class":221},[47,69558,366],{"class":51354},[47,69560,69561],{"class":221},">就业城市\u003C\u002F",[47,69563,366],{"class":51354},[47,69565,51361],{"class":221},[47,69567,69568,69570,69572,69575,69577],{"class":49,"line":8114},[47,69569,55356],{"class":221},[47,69571,366],{"class":51354},[47,69573,69574],{"class":221},">操作\u003C\u002F",[47,69576,366],{"class":51354},[47,69578,51361],{"class":221},[47,69580,69581,69583,69585],{"class":49,"line":8126},[47,69582,55461],{"class":221},[47,69584,363],{"class":51354},[47,69586,51361],{"class":221},[47,69588,69589,69591,69593],{"class":49,"line":8138},[47,69590,51830],{"class":221},[47,69592,360],{"class":51354},[47,69594,51361],{"class":221},[47,69596,69597,69599,69601],{"class":49,"line":8150},[47,69598,51395],{"class":221},[47,69600,404],{"class":51354},[47,69602,51361],{"class":221},[47,69604,69605],{"class":49,"line":9809},[47,69606,69607],{"class":279},"      \u003C!-- \n",[47,69609,69610],{"class":49,"line":9834},[47,69611,69612],{"class":279},"        \u003Ctr>\n",[47,69614,69615],{"class":49,"line":9857},[47,69616,69617],{"class":279},"          \u003Ctd>1001\u003C\u002Ftd>\n",[47,69619,69620],{"class":49,"line":9881},[47,69621,69622],{"class":279},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[47,69624,69625],{"class":49,"line":9886},[47,69626,69627],{"class":279},"          \u003Ctd>19\u003C\u002Ftd>\n",[47,69629,69630],{"class":49,"line":9891},[47,69631,69632],{"class":279},"          \u003Ctd>男\u003C\u002Ftd>\n",[47,69634,69635],{"class":49,"line":9896},[47,69636,69637],{"class":279},"          \u003Ctd>15000\u003C\u002Ftd>\n",[47,69639,69640],{"class":49,"line":9905},[47,69641,69642],{"class":279},"          \u003Ctd>上海\u003C\u002Ftd>\n",[47,69644,69645],{"class":49,"line":9910},[47,69646,69647],{"class":279},"          \u003Ctd>\n",[47,69649,69650],{"class":49,"line":9916},[47,69651,69652],{"class":279},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[47,69654,69655],{"class":49,"line":9937},[47,69656,69657],{"class":279},"          \u003C\u002Ftd>\n",[47,69659,69660],{"class":49,"line":9943},[47,69661,69662],{"class":279},"        \u003C\u002Ftr> \n",[47,69664,69665],{"class":49,"line":9957},[47,69666,69667],{"class":279},"        -->\n",[47,69669,69670,69672,69674],{"class":49,"line":9963},[47,69671,51830],{"class":221},[47,69673,404],{"class":51354},[47,69675,51361],{"class":221},[47,69677,69678,69680,69682],{"class":49,"line":9990},[47,69679,52471],{"class":221},[47,69681,357],{"class":51354},[47,69683,51361],{"class":221},[47,69685,69686,69688,69690],{"class":49,"line":9999},[47,69687,52198],{"class":221},[47,69689,51867],{"class":51354},[47,69691,51361],{"class":221},[47,69693,69694],{"class":49,"line":10005},[47,69695,60012],{"class":279},[47,69697,69698,69700,69703,69705,69707,69709,69711,69714],{"class":49,"line":10013},[47,69699,11314],{"class":217},[47,69701,69702],{"class":85}," uname",[47,69704,13657],{"class":217},[47,69706,54450],{"class":221},[47,69708,54453],{"class":53},[47,69710,222],{"class":221},[47,69712,69713],{"class":81},"'.uname'",[47,69715,228],{"class":221},[47,69717,69718,69720,69722,69724,69726,69728,69730,69733],{"class":49,"line":10018},[47,69719,11314],{"class":217},[47,69721,15782],{"class":85},[47,69723,13657],{"class":217},[47,69725,54450],{"class":221},[47,69727,54453],{"class":53},[47,69729,222],{"class":221},[47,69731,69732],{"class":81},"'.age'",[47,69734,228],{"class":221},[47,69736,69737,69739,69742,69744,69746,69748,69750,69753],{"class":49,"line":16697},[47,69738,11314],{"class":217},[47,69740,69741],{"class":85}," gender",[47,69743,13657],{"class":217},[47,69745,54450],{"class":221},[47,69747,54453],{"class":53},[47,69749,222],{"class":221},[47,69751,69752],{"class":81},"'.gender'",[47,69754,228],{"class":221},[47,69756,69757,69759,69762,69764,69766,69768,69770,69773],{"class":49,"line":16703},[47,69758,11314],{"class":217},[47,69760,69761],{"class":85}," salary",[47,69763,13657],{"class":217},[47,69765,54450],{"class":221},[47,69767,54453],{"class":53},[47,69769,222],{"class":221},[47,69771,69772],{"class":81},"'.salary'",[47,69774,228],{"class":221},[47,69776,69777,69779,69782,69784,69786,69788,69790,69793],{"class":49,"line":16726},[47,69778,11314],{"class":217},[47,69780,69781],{"class":85}," city",[47,69783,13657],{"class":217},[47,69785,54450],{"class":221},[47,69787,54453],{"class":53},[47,69789,222],{"class":221},[47,69791,69792],{"class":81},"'.city'",[47,69794,228],{"class":221},[47,69796,69797,69799,69802,69804,69806,69808,69810,69813],{"class":49,"line":16732},[47,69798,11314],{"class":217},[47,69800,69801],{"class":85}," tbody",[47,69803,13657],{"class":217},[47,69805,54450],{"class":221},[47,69807,54453],{"class":53},[47,69809,222],{"class":221},[47,69811,69812],{"class":81},"'tbody'",[47,69814,228],{"class":221},[47,69816,69817],{"class":49,"line":16755},[47,69818,2493],{"emptyLinePlaceholder":145},[47,69820,69821],{"class":49,"line":16769},[47,69822,69823],{"class":279},"    \u002F\u002F 获取所有带有name属性的元素\n",[47,69825,69826,69828,69831,69833,69835,69837,69839,69842],{"class":49,"line":16789},[47,69827,11314],{"class":217},[47,69829,69830],{"class":85}," items",[47,69832,13657],{"class":217},[47,69834,54450],{"class":221},[47,69836,55735],{"class":53},[47,69838,222],{"class":221},[47,69840,69841],{"class":81},"'[name]'",[47,69843,228],{"class":221},[47,69845,69846],{"class":49,"line":16795},[47,69847,69848],{"class":279},"    \u002F\u002F 声明一个空的数组\n",[47,69850,69851,69853,69855,69857],{"class":49,"line":16806},[47,69852,11314],{"class":217},[47,69854,57749],{"class":85},[47,69856,13657],{"class":217},[47,69858,51892],{"class":221},[47,69860,69861],{"class":49,"line":16829},[47,69862,69863],{"class":279},"    \u002F\u002F 1.录入模块\n",[47,69865,69866],{"class":49,"line":16851},[47,69867,69868],{"class":279},"    \u002F\u002F 1.1这是一个表单提交事件\n",[47,69870,69871,69873,69876,69878,69880,69882,69884,69887],{"class":49,"line":16856},[47,69872,11314],{"class":217},[47,69874,69875],{"class":85}," info",[47,69877,13657],{"class":217},[47,69879,54450],{"class":221},[47,69881,54453],{"class":53},[47,69883,222],{"class":221},[47,69885,69886],{"class":81},"'.info'",[47,69888,228],{"class":221},[47,69890,69891,69894,69896,69898,69901,69903,69905,69907,69909],{"class":49,"line":16862},[47,69892,69893],{"class":221},"    info.",[47,69895,57867],{"class":53},[47,69897,222],{"class":221},[47,69899,69900],{"class":81},"'submit'",[47,69902,12528],{"class":221},[47,69904,54503],{"class":217},[47,69906,1752],{"class":221},[47,69908,295],{"class":5309},[47,69910,12535],{"class":221},[47,69912,69913],{"class":49,"line":16876},[47,69914,69915],{"class":279},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[47,69917,69918,69921,69924],{"class":49,"line":16889},[47,69919,69920],{"class":221},"      e.",[47,69922,69923],{"class":53},"preventDefault",[47,69925,2069],{"class":221},[47,69927,69928],{"class":49,"line":16894},[47,69929,60066],{"class":279},[47,69931,69932],{"class":49,"line":16908},[47,69933,2493],{"emptyLinePlaceholder":145},[47,69935,69936],{"class":49,"line":16913},[47,69937,69938],{"class":279},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[47,69940,69941],{"class":49,"line":16919},[47,69942,69943],{"class":279},"      \u002F\u002F 先遍历循环\n",[47,69945,69946,69948,69950,69952,69954,69956,69958,69960,69962,69965,69967,69969,69971],{"class":49,"line":16924},[47,69947,52338],{"class":217},[47,69949,1752],{"class":221},[47,69951,51901],{"class":217},[47,69953,9531],{"class":221},[47,69955,267],{"class":217},[47,69957,4186],{"class":85},[47,69959,9538],{"class":221},[47,69961,1129],{"class":217},[47,69963,69964],{"class":221}," items.",[47,69966,52022],{"class":85},[47,69968,3307],{"class":221},[47,69970,2385],{"class":217},[47,69972,12535],{"class":221},[47,69974,69975,69977,69980,69982,69985],{"class":49,"line":16938},[47,69976,2590],{"class":217},[47,69978,69979],{"class":221}," (items[i].value ",[47,69981,54540],{"class":217},[47,69983,69984],{"class":81}," ''",[47,69986,12535],{"class":221},[47,69988,69989,69992,69995,69997,70000],{"class":49,"line":16943},[47,69990,69991],{"class":217},"          return",[47,69993,69994],{"class":53}," alert",[47,69996,222],{"class":221},[47,69998,69999],{"class":81},"'输入内容不能为空'",[47,70001,228],{"class":221},[47,70003,70004],{"class":49,"line":16948},[47,70005,2622],{"class":221},[47,70007,70008],{"class":49,"line":16962},[47,70009,52452],{"class":221},[47,70011,70012],{"class":49,"line":16974},[47,70013,2493],{"emptyLinePlaceholder":145},[47,70015,70016],{"class":49,"line":16979},[47,70017,70018],{"class":279},"      \u002F\u002F 创建新的对象\n",[47,70020,70021,70023,70026,70028],{"class":49,"line":16992},[47,70022,58282],{"class":217},[47,70024,70025],{"class":85}," obj",[47,70027,13657],{"class":217},[47,70029,15665],{"class":221},[47,70031,70032,70035,70037,70039,70041],{"class":49,"line":16997},[47,70033,70034],{"class":221},"        stuID: arr.",[47,70036,52022],{"class":85},[47,70038,45620],{"class":217},[47,70040,25172],{"class":85},[47,70042,31520],{"class":221},[47,70044,70045],{"class":49,"line":17002},[47,70046,70047],{"class":221},"        uname: uname.value,\n",[47,70049,70050],{"class":49,"line":17007},[47,70051,70052],{"class":221},"        age: age.value,\n",[47,70054,70055],{"class":49,"line":17020},[47,70056,70057],{"class":221},"        gender: gender.value,\n",[47,70059,70060],{"class":49,"line":17025},[47,70061,70062],{"class":221},"        salary: salary.value,\n",[47,70064,70065],{"class":49,"line":32687},[47,70066,70067],{"class":221},"        city: city.value\n",[47,70069,70070],{"class":49,"line":32693},[47,70071,52452],{"class":221},[47,70073,70074],{"class":49,"line":32699},[47,70075,70076],{"class":279},"      \u002F\u002F console.log(obj);\n",[47,70078,70079],{"class":49,"line":32705},[47,70080,70081],{"class":279},"      \u002F\u002F 追加到数组里面\n",[47,70083,70084,70086,70088],{"class":49,"line":32711},[47,70085,58061],{"class":221},[47,70087,51938],{"class":53},[47,70089,70090],{"class":221},"(obj)\n",[47,70092,70093],{"class":49,"line":32722},[47,70094,70095],{"class":279},"      \u002F\u002F console.log(arr);\n",[47,70097,70098],{"class":49,"line":32728},[47,70099,70100],{"class":279},"      \u002F\u002F 清空表单  reset重置表单\n",[47,70102,70103,70106,70108,70111],{"class":49,"line":32748},[47,70104,70105],{"class":85},"      this",[47,70107,777],{"class":221},[47,70109,70110],{"class":53},"reset",[47,70112,2069],{"class":221},[47,70114,70115],{"class":49,"line":32754},[47,70116,70117],{"class":279},"      \u002F\u002F 调用渲染函数\n",[47,70119,70120,70123],{"class":49,"line":32765},[47,70121,70122],{"class":53},"      render",[47,70124,2069],{"class":221},[47,70126,70127],{"class":49,"line":32771},[47,70128,33515],{"class":221},[47,70130,70131],{"class":49,"line":32777},[47,70132,70133],{"class":279},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[47,70135,70136,70139,70142],{"class":49,"line":32783},[47,70137,70138],{"class":217},"    function",[47,70140,70141],{"class":53}," render",[47,70143,10946],{"class":221},[47,70145,70146],{"class":49,"line":32789},[47,70147,70148],{"class":279},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[47,70150,70151,70154,70156],{"class":49,"line":32795},[47,70152,70153],{"class":221},"      tbody.innerHTML ",[47,70155,267],{"class":217},[47,70157,70158],{"class":81}," ''\n",[47,70160,70161],{"class":49,"line":32801},[47,70162,70163],{"class":279},"      \u002F\u002F 遍历数组\n",[47,70165,70166,70168,70170,70172,70174,70176,70178,70180,70182,70184,70186,70188,70190],{"class":49,"line":32807},[47,70167,52338],{"class":217},[47,70169,1752],{"class":221},[47,70171,51901],{"class":217},[47,70173,9531],{"class":221},[47,70175,267],{"class":217},[47,70177,4186],{"class":85},[47,70179,9538],{"class":221},[47,70181,1129],{"class":217},[47,70183,52019],{"class":221},[47,70185,52022],{"class":85},[47,70187,3307],{"class":221},[47,70189,2385],{"class":217},[47,70191,12535],{"class":221},[47,70193,70194,70196,70199,70201,70203,70206,70208,70211],{"class":49,"line":32827},[47,70195,61324],{"class":217},[47,70197,70198],{"class":85}," tr",[47,70200,13657],{"class":217},[47,70202,54450],{"class":221},[47,70204,70205],{"class":53},"createElement",[47,70207,222],{"class":221},[47,70209,70210],{"class":81},"'tr'",[47,70212,228],{"class":221},[47,70214,70215,70218,70220],{"class":49,"line":32833},[47,70216,70217],{"class":221},"        tr.innerHTML ",[47,70219,267],{"class":217},[47,70221,70222],{"class":81}," `\n",[47,70224,70225,70228,70230,70232,70234,70237,70240],{"class":49,"line":32849},[47,70226,70227],{"class":81},"        \u003Ctd>${",[47,70229,3973],{"class":221},[47,70231,1109],{"class":81},[47,70233,660],{"class":221},[47,70235,70236],{"class":81},"].",[47,70238,70239],{"class":221},"stuID",[47,70241,70242],{"class":81},"}\u003C\u002Ftd>\n",[47,70244,70245,70248,70250,70252,70254,70256,70259],{"class":49,"line":32855},[47,70246,70247],{"class":81},"          \u003Ctd>${",[47,70249,3973],{"class":221},[47,70251,1109],{"class":81},[47,70253,660],{"class":221},[47,70255,70236],{"class":81},[47,70257,70258],{"class":221},"uname",[47,70260,70242],{"class":81},[47,70262,70263,70265,70267,70269,70271,70273,70276],{"class":49,"line":32869},[47,70264,70247],{"class":81},[47,70266,3973],{"class":221},[47,70268,1109],{"class":81},[47,70270,660],{"class":221},[47,70272,70236],{"class":81},[47,70274,70275],{"class":221},"age",[47,70277,70242],{"class":81},[47,70279,70280,70282,70284,70286,70288,70290,70293],{"class":49,"line":32875},[47,70281,70247],{"class":81},[47,70283,3973],{"class":221},[47,70285,1109],{"class":81},[47,70287,660],{"class":221},[47,70289,70236],{"class":81},[47,70291,70292],{"class":221},"gender",[47,70294,70242],{"class":81},[47,70296,70297,70299,70301,70303,70305,70307,70310],{"class":49,"line":32890},[47,70298,70247],{"class":81},[47,70300,3973],{"class":221},[47,70302,1109],{"class":81},[47,70304,660],{"class":221},[47,70306,70236],{"class":81},[47,70308,70309],{"class":221},"salary",[47,70311,70242],{"class":81},[47,70313,70314,70316,70318,70320,70322,70324,70327],{"class":49,"line":32896},[47,70315,70247],{"class":81},[47,70317,3973],{"class":221},[47,70319,1109],{"class":81},[47,70321,660],{"class":221},[47,70323,70236],{"class":81},[47,70325,70326],{"class":221},"city",[47,70328,70242],{"class":81},[47,70330,70331],{"class":49,"line":32905},[47,70332,69647],{"class":81},[47,70334,70335,70338,70340],{"class":49,"line":32911},[47,70336,70337],{"class":81},"            \u003Ca href=\"javascript:\" data-id=${",[47,70339,660],{"class":221},[47,70341,70342],{"class":81},"}>删除\u003C\u002Fa>\n",[47,70344,70345],{"class":49,"line":32920},[47,70346,70347],{"class":81},"          \u003C\u002Ftd> \n",[47,70349,70350],{"class":49,"line":32926},[47,70351,70352],{"class":81},"          `\n",[47,70354,70355],{"class":49,"line":32932},[47,70356,70357],{"class":279},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[47,70359,70360,70363,70366],{"class":49,"line":32941},[47,70361,70362],{"class":221},"        tbody.",[47,70364,70365],{"class":53},"appendChild",[47,70367,70368],{"class":221},"(tr)\n",[47,70370,70371],{"class":49,"line":32947},[47,70372,52452],{"class":221},[47,70374,70375],{"class":49,"line":32958},[47,70376,2280],{"class":221},[47,70378,70379],{"class":49,"line":32964},[47,70380,2493],{"emptyLinePlaceholder":145},[47,70382,70383],{"class":49,"line":32983},[47,70384,70385],{"class":279},"    \u002F\u002F 3.删除委托\n",[47,70387,70388],{"class":49,"line":32989},[47,70389,70390],{"class":279},"    \u002F\u002F 3.1 事件委托 tbody\n",[47,70392,70393,70396,70398,70400,70402,70404,70406,70408,70410],{"class":49,"line":33000},[47,70394,70395],{"class":221},"    tbody.",[47,70397,57867],{"class":53},[47,70399,222],{"class":221},[47,70401,57872],{"class":81},[47,70403,12528],{"class":221},[47,70405,54503],{"class":217},[47,70407,1752],{"class":221},[47,70409,295],{"class":5309},[47,70411,12535],{"class":221},[47,70413,70414,70416,70418,70420,70422],{"class":49,"line":33006},[47,70415,54534],{"class":217},[47,70417,67088],{"class":221},[47,70419,54540],{"class":217},[47,70421,68310],{"class":81},[47,70423,12535],{"class":221},[47,70425,70426],{"class":49,"line":33026},[47,70427,70428],{"class":279},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[47,70430,70431],{"class":49,"line":33042},[47,70432,70433],{"class":279},"        \u002F\u002F console.log(e.target.dataset.id);\n",[47,70435,70436],{"class":49,"line":33048},[47,70437,70438],{"class":279},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[47,70440,70441,70444,70446,70449,70451],{"class":49,"line":33062},[47,70442,70443],{"class":221},"        arr.",[47,70445,58064],{"class":53},[47,70447,70448],{"class":221},"(e.target.dataset.id, ",[47,70450,436],{"class":85},[47,70452,228],{"class":221},[47,70454,70455],{"class":49,"line":33068},[47,70456,70457],{"class":279},"        \u002F\u002F 重新渲染一次\n",[47,70459,70460,70463],{"class":49,"line":33074},[47,70461,70462],{"class":53},"        render",[47,70464,2069],{"class":221},[47,70466,70467],{"class":49,"line":33085},[47,70468,52452],{"class":221},[47,70470,70471],{"class":49,"line":33091},[47,70472,33515],{"class":221},[47,70474,70475,70477,70479],{"class":49,"line":33097},[47,70476,52471],{"class":221},[47,70478,51867],{"class":51354},[47,70480,51361],{"class":221},[47,70482,70483],{"class":49,"line":33107},[47,70484,2493],{"emptyLinePlaceholder":145},[47,70486,70487,70489,70491],{"class":49,"line":33113},[47,70488,51839],{"class":221},[47,70490,51854],{"class":51354},[47,70492,51361],{"class":221},[47,70494,70495],{"class":49,"line":33124},[47,70496,2493],{"emptyLinePlaceholder":145},[47,70498,70499,70501,70503],{"class":49,"line":33130},[47,70500,51839],{"class":221},[47,70502,50689],{"class":51354},[47,70504,51361],{"class":221},[19,70506,70507],{},"样式：",[38,70509,70513],{"className":70510,"code":70511,"language":70512,"meta":43,"style":43},"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",[26,70514,70515,70520,70530,70539,70543,70547,70552,70562,70567,70571,70576,70586,70591,70600,70604,70608,70613,70618,70628,70638,70643,70647,70652,70661,70671,70676,70686,70696,70700,70705,70713,70717,70722,70727,70732,70740,70749,70753,70758,70767,70771,70776,70785,70789,70794,70803,70812,70820,70824,70829,70838,70848,70857,70867,70873,70882,70892,70902,70906,70911,70920,70928,70938,70946,70955,70964,70974,70982,70986,70991,71000],{"__ignoreMap":43},[47,70516,70517],{"class":49,"line":50},[47,70518,70519],{"class":221},"* {\n",[47,70521,70522,70525,70527],{"class":49,"line":92},[47,70523,70524],{"class":51354},"  margin",[47,70526,51491],{"class":221},[47,70528,70529],{"class":81},"0;\n",[47,70531,70532,70535,70537],{"class":49,"line":1273},[47,70533,70534],{"class":81},"  padding",[47,70536,51491],{"class":221},[47,70538,70529],{"class":81},[47,70540,70541],{"class":49,"line":1288},[47,70542,1659],{"class":221},[47,70544,70545],{"class":49,"line":1294},[47,70546,2493],{"emptyLinePlaceholder":145},[47,70548,70549],{"class":49,"line":1308},[47,70550,70551],{"class":81},"a {\n",[47,70553,70554,70557,70559],{"class":49,"line":1314},[47,70555,70556],{"class":51354},"  text-decoration",[47,70558,51491],{"class":221},[47,70560,70561],{"class":81},"none;\n",[47,70563,70564],{"class":49,"line":1405},[47,70565,70566],{"class":81},"  color:#721c24;\n",[47,70568,70569],{"class":49,"line":1411},[47,70570,1659],{"class":221},[47,70572,70573],{"class":49,"line":1423},[47,70574,70575],{"class":81},"h1 {\n",[47,70577,70578,70581,70583],{"class":49,"line":1706},[47,70579,70580],{"class":51354},"  text-align",[47,70582,51491],{"class":221},[47,70584,70585],{"class":81},"center;\n",[47,70587,70588],{"class":49,"line":1711},[47,70589,70590],{"class":81},"  color:#333;\n",[47,70592,70593,70595,70597],{"class":49,"line":1717},[47,70594,70524],{"class":51354},[47,70596,51491],{"class":221},[47,70598,70599],{"class":81},"20px 0;\n",[47,70601,70602],{"class":49,"line":1722},[47,70603,2767],{"class":221},[47,70605,70606],{"class":49,"line":1736},[47,70607,1659],{"class":221},[47,70609,70610],{"class":49,"line":1741},[47,70611,70612],{"class":81},"table {\n",[47,70614,70615],{"class":49,"line":1747},[47,70616,70617],{"class":81},"  margin:0 auto;\n",[47,70619,70620,70623,70625],{"class":49,"line":1768},[47,70621,70622],{"class":51354},"  width",[47,70624,51491],{"class":221},[47,70626,70627],{"class":81},"800px;\n",[47,70629,70630,70633,70635],{"class":49,"line":1773},[47,70631,70632],{"class":51354},"  border-collapse",[47,70634,51491],{"class":221},[47,70636,70637],{"class":81},"collapse;\n",[47,70639,70640],{"class":49,"line":1787},[47,70641,70642],{"class":81},"  color:#004085;\n",[47,70644,70645],{"class":49,"line":1792},[47,70646,1659],{"class":221},[47,70648,70649],{"class":49,"line":1821},[47,70650,70651],{"class":81},"th {\n",[47,70653,70654,70656,70658],{"class":49,"line":1826},[47,70655,70534],{"class":51354},[47,70657,51491],{"class":221},[47,70659,70660],{"class":81},"10px;\n",[47,70662,70663,70666,70668],{"class":49,"line":1843},[47,70664,70665],{"class":51354},"  background",[47,70667,51491],{"class":221},[47,70669,70670],{"class":279},"#cfe5ff;\n",[47,70672,70673],{"class":49,"line":1848},[47,70674,70675],{"class":221},"  \n",[47,70677,70678,70681,70683],{"class":49,"line":1853},[47,70679,70680],{"class":51354},"  font-size",[47,70682,51491],{"class":221},[47,70684,70685],{"class":81},"20px;\n",[47,70687,70688,70691,70693],{"class":49,"line":1858},[47,70689,70690],{"class":51354},"  font-weight",[47,70692,51491],{"class":221},[47,70694,70695],{"class":81},"400;\n",[47,70697,70698],{"class":49,"line":1872},[47,70699,1659],{"class":221},[47,70701,70702],{"class":49,"line":1877},[47,70703,70704],{"class":81},"td,th {\n",[47,70706,70707,70710],{"class":49,"line":2670},[47,70708,70709],{"class":81},"  border:1px solid",[47,70711,70712],{"class":279}," #b8daff;\n",[47,70714,70715],{"class":49,"line":2684},[47,70716,1659],{"class":221},[47,70718,70719],{"class":49,"line":2692},[47,70720,70721],{"class":81},"td {\n",[47,70723,70724],{"class":49,"line":2697},[47,70725,70726],{"class":81},"  padding:10px;\n",[47,70728,70729],{"class":49,"line":2703},[47,70730,70731],{"class":81},"  color:#666;\n",[47,70733,70734,70736,70738],{"class":49,"line":2709},[47,70735,70580],{"class":51354},[47,70737,51491],{"class":221},[47,70739,70585],{"class":81},[47,70741,70742,70744,70746],{"class":49,"line":2714},[47,70743,70680],{"class":51354},[47,70745,51491],{"class":221},[47,70747,70748],{"class":81},"16px;\n",[47,70750,70751],{"class":49,"line":8041},[47,70752,1659],{"class":221},[47,70754,70755],{"class":49,"line":8065},[47,70756,70757],{"class":81},"tbody tr {\n",[47,70759,70760,70762,70764],{"class":49,"line":8070},[47,70761,70665],{"class":51354},[47,70763,51491],{"class":221},[47,70765,70766],{"class":279},"#fff;\n",[47,70768,70769],{"class":49,"line":8076},[47,70770,1659],{"class":221},[47,70772,70773],{"class":49,"line":8103},[47,70774,70775],{"class":81},"tbody tr:hover {\n",[47,70777,70778,70780,70782],{"class":49,"line":8108},[47,70779,70665],{"class":51354},[47,70781,51491],{"class":221},[47,70783,70784],{"class":279},"#e1ecf8;\n",[47,70786,70787],{"class":49,"line":8114},[47,70788,1659],{"class":221},[47,70790,70791],{"class":49,"line":8126},[47,70792,70793],{"class":81},".info {\n",[47,70795,70796,70798,70800],{"class":49,"line":8138},[47,70797,70622],{"class":51354},[47,70799,51491],{"class":221},[47,70801,70802],{"class":81},"900px;\n",[47,70804,70805,70807,70809],{"class":49,"line":8150},[47,70806,70524],{"class":51354},[47,70808,51491],{"class":221},[47,70810,70811],{"class":81},"50px auto;\n",[47,70813,70814,70816,70818],{"class":49,"line":9809},[47,70815,70580],{"class":51354},[47,70817,51491],{"class":221},[47,70819,70585],{"class":81},[47,70821,70822],{"class":49,"line":9834},[47,70823,1659],{"class":221},[47,70825,70826],{"class":49,"line":9857},[47,70827,70828],{"class":81},".info  input, .info select {\n",[47,70830,70831,70833,70835],{"class":49,"line":9881},[47,70832,70622],{"class":51354},[47,70834,51491],{"class":221},[47,70836,70837],{"class":81},"80px;\n",[47,70839,70840,70843,70845],{"class":49,"line":9886},[47,70841,70842],{"class":51354},"  height",[47,70844,51491],{"class":221},[47,70846,70847],{"class":81},"27px;\n",[47,70849,70850,70853,70855],{"class":49,"line":9891},[47,70851,70852],{"class":51354},"  outline",[47,70854,51491],{"class":221},[47,70856,70561],{"class":81},[47,70858,70859,70862,70864],{"class":49,"line":9896},[47,70860,70861],{"class":51354},"  border-radius",[47,70863,51491],{"class":221},[47,70865,70866],{"class":81},"5px;\n",[47,70868,70869,70871],{"class":49,"line":9905},[47,70870,70709],{"class":81},[47,70872,70712],{"class":279},[47,70874,70875,70878,70880],{"class":49,"line":9910},[47,70876,70877],{"class":51354},"  padding-left",[47,70879,51491],{"class":221},[47,70881,70866],{"class":81},[47,70883,70884,70887,70889],{"class":49,"line":9916},[47,70885,70886],{"class":51354},"  box-sizing",[47,70888,51491],{"class":221},[47,70890,70891],{"class":81},"border-box;\n",[47,70893,70894,70897,70899],{"class":49,"line":9937},[47,70895,70896],{"class":51354},"  margin-right",[47,70898,51491],{"class":221},[47,70900,70901],{"class":81},"15px;\n",[47,70903,70904],{"class":49,"line":9943},[47,70905,1659],{"class":221},[47,70907,70908],{"class":49,"line":9957},[47,70909,70910],{"class":81},".info button {\n",[47,70912,70913,70915,70917],{"class":49,"line":9963},[47,70914,70622],{"class":51354},[47,70916,51491],{"class":221},[47,70918,70919],{"class":81},"60px;\n",[47,70921,70922,70924,70926],{"class":49,"line":9990},[47,70923,70842],{"class":51354},[47,70925,51491],{"class":221},[47,70927,70847],{"class":81},[47,70929,70930,70933,70935],{"class":49,"line":9999},[47,70931,70932],{"class":51354},"  background-color",[47,70934,51491],{"class":221},[47,70936,70937],{"class":279},"#004085;\n",[47,70939,70940,70942,70944],{"class":49,"line":10005},[47,70941,70852],{"class":51354},[47,70943,51491],{"class":221},[47,70945,70561],{"class":81},[47,70947,70948,70951,70953],{"class":49,"line":10013},[47,70949,70950],{"class":51354},"  border",[47,70952,51491],{"class":221},[47,70954,70529],{"class":81},[47,70956,70957,70960,70962],{"class":49,"line":10018},[47,70958,70959],{"class":51354},"  color",[47,70961,51491],{"class":221},[47,70963,70766],{"class":279},[47,70965,70966,70969,70971],{"class":49,"line":16697},[47,70967,70968],{"class":51354},"  cursor",[47,70970,51491],{"class":221},[47,70972,70973],{"class":81},"pointer;\n",[47,70975,70976,70978,70980],{"class":49,"line":16703},[47,70977,70861],{"class":51354},[47,70979,51491],{"class":221},[47,70981,70866],{"class":81},[47,70983,70984],{"class":49,"line":16726},[47,70985,1659],{"class":221},[47,70987,70988],{"class":49,"line":16732},[47,70989,70990],{"class":81},".info .age {\n",[47,70992,70993,70995,70997],{"class":49,"line":16755},[47,70994,70622],{"class":51354},[47,70996,51491],{"class":221},[47,70998,70999],{"class":81},"50px;\n",[47,71001,71002],{"class":49,"line":16769},[47,71003,1659],{"class":221},[19,71005,71006],{},"思路：",[19,71008,71009],{},[1556,71010],{"alt":43,"src":71011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,71013,71014],{},[1556,71015],{"alt":43,"src":71016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,71018,71019],{},[1556,71020],{"alt":43,"src":71021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[187,71023,71025],{"id":71024},"_3315-重绘回流","3.3.15 重绘回流",[19,71027,71028],{},[1556,71029],{"alt":43,"src":71030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,71032,71033],{},[1556,71034],{"alt":43,"src":71035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,71037,71038],{},[1556,71039],{"alt":43,"src":71040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,71042,71044],{"id":71043},"_34-bom","3.4 BOM",[19,71046,71047],{},[1556,71048],{"alt":43,"src":71049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,71051,71052],{},"平时写的document省略了window而已，实际上是window.document",[19,71054,71055],{},"函数也是这样，调用的时候实际为window.fn()",[19,71057,71058],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,71060,71061],{},"window大部分情况下可以省略",[187,71063,71065],{"id":71064},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,71067,71068],{},"只执行一次",[19,71070,71071],{},[1556,71072],{"alt":43,"src":71073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,71075,71076],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,71078,71079],{},[1556,71080],{"alt":43,"src":71081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[187,71083,71085],{"id":71084},"_342-js执行机制","3.4.2 JS执行机制",[19,71087,71088],{},[1556,71089],{"alt":43,"src":71090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,71092,71093],{},"两个的结果都是1111 3333 2222",[19,71095,71096],{},[1556,71097],{"alt":43,"src":71098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,71100,71101],{},[1556,71102],{"alt":43,"src":71103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,71105,71106],{},[1556,71107],{"alt":43,"src":71108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,71110,71111],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,71113,71114],{},"工作流程：",[19,71116,71117],{},[1556,71118],{"alt":43,"src":71119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,71121,71122],{},[1556,71123],{"alt":43,"src":71124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,71126,71127],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,71129,71130],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[187,71132,71134],{"id":71133},"_343-location对象","3.4.3 location对象",[19,71136,71137],{},"location对象属于window这个全局对象下的，可以 省略window",[19,71139,71140],{},[1556,71141],{"alt":43,"src":71142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,71144,71145],{},"href可以跳转页面",[171,71147,71148],{},[109,71149,71150],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,71152,71153],{},"search得到提交信息之后网站后边的地址",[19,71155,71156],{},[1556,71157],{"alt":43,"src":71158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,71160,71161],{},[1556,71162],{"alt":43,"src":71163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[171,71165,71166],{"start":92},[109,71167,71168],{},"hash:这个获取单页面应用#后边的地址",[19,71170,71171],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,71173,71174],{},[1556,71175],{"alt":43,"src":71176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[38,71178,71180],{"className":53121,"code":71179,"language":53123,"meta":43,"style":43},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[26,71181,71182,71202,71222],{"__ignoreMap":43},[47,71183,71184,71186,71188,71190,71192,71195,71198,71200],{"class":49,"line":50},[47,71185,52198],{"class":221},[47,71187,457],{"class":51354},[47,71189,61111],{"class":53},[47,71191,267],{"class":221},[47,71193,71194],{"class":81},"\"#\u002Fmy\"",[47,71196,71197],{"class":221},">我的\u003C\u002F",[47,71199,457],{"class":51354},[47,71201,51361],{"class":221},[47,71203,71204,71206,71208,71210,71212,71215,71218,71220],{"class":49,"line":92},[47,71205,52198],{"class":221},[47,71207,457],{"class":51354},[47,71209,61111],{"class":53},[47,71211,267],{"class":221},[47,71213,71214],{"class":81},"\"#\u002Ffriend\"",[47,71216,71217],{"class":221},">关注\u003C\u002F",[47,71219,457],{"class":51354},[47,71221,51361],{"class":221},[47,71223,71224,71226,71228,71230,71232,71235,71238,71240],{"class":49,"line":1273},[47,71225,52198],{"class":221},[47,71227,457],{"class":51354},[47,71229,61111],{"class":53},[47,71231,267],{"class":221},[47,71233,71234],{"class":81},"\"#\u002Fdownload\"",[47,71236,71237],{"class":221},">下载\u003C\u002F",[47,71239,457],{"class":51354},[47,71241,51361],{"class":221},[19,71243,71244],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[171,71246,71247],{"start":1273},[109,71248,71249,71250,71252,71253,71255],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53770,71251],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53770,71254],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[187,71257,71259],{"id":71258},"_345-navigator对象","3.4.5 navigator对象",[19,71261,71262],{},[1556,71263],{"alt":43,"src":71264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[38,71266,71270],{"className":71267,"code":71268,"language":71269,"meta":43,"style":43},"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",[26,71271,71272,71277,71288,71300,71305,71356,71397,71402,71415,71427,71432],{"__ignoreMap":43},[47,71273,71274],{"class":49,"line":50},[47,71275,71276],{"class":279},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[47,71278,71279,71281,71283,71285],{"class":49,"line":92},[47,71280,445],{"class":217},[47,71282,222],{"class":221},[47,71284,54503],{"class":217},[47,71286,71287],{"class":221}," () { \n",[47,71289,71290,71292,71295,71297],{"class":49,"line":1273},[47,71291,6885],{"class":217},[47,71293,71294],{"class":85}," userAgent",[47,71296,13657],{"class":217},[47,71298,71299],{"class":221}," navigator.userAgent \n",[47,71301,71302],{"class":49,"line":1288},[47,71303,71304],{"class":279},"\u002F\u002F 验证是否为Android或iPhone \n",[47,71306,71307,71309,71312,71314,71317,71320,71322,71324,71327,71329,71332,71336,71338,71340,71342,71345,71347,71349,71351,71353],{"class":49,"line":1294},[47,71308,6885],{"class":217},[47,71310,71311],{"class":85}," android",[47,71313,13657],{"class":217},[47,71315,71316],{"class":221}," userAgent.",[47,71318,71319],{"class":53},"match",[47,71321,222],{"class":221},[47,71323,803],{"class":81},[47,71325,71326],{"class":48031},"(Android);",[47,71328,1205],{"class":217},[47,71330,71331],{"class":85},"[\\s",[47,71333,71335],{"class":71334},"snhLl","\\\u002F",[47,71337,1159],{"class":85},[47,71339,700],{"class":217},[47,71341,222],{"class":48031},[47,71343,71344],{"class":85},"[\\d.]",[47,71346,700],{"class":217},[47,71348,648],{"class":48031},[47,71350,1205],{"class":217},[47,71352,803],{"class":81},[47,71354,71355],{"class":221},") \n",[47,71357,71358,71360,71363,71365,71367,71369,71371,71373,71376,71379,71382,71384,71386,71389,71391,71393,71395],{"class":49,"line":1308},[47,71359,6885],{"class":217},[47,71361,71362],{"class":85}," iphone",[47,71364,13657],{"class":217},[47,71366,71316],{"class":221},[47,71368,71319],{"class":53},[47,71370,222],{"class":221},[47,71372,803],{"class":81},[47,71374,71375],{"class":48031},"(iPhone",[47,71377,71378],{"class":85},"\\s",[47,71380,71381],{"class":48031},"OS)",[47,71383,71378],{"class":85},[47,71385,222],{"class":48031},[47,71387,71388],{"class":85},"[\\d_]",[47,71390,700],{"class":217},[47,71392,648],{"class":48031},[47,71394,803],{"class":81},[47,71396,71355],{"class":221},[47,71398,71399],{"class":49,"line":1314},[47,71400,71401],{"class":279},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[47,71403,71404,71406,71409,71412],{"class":49,"line":1405},[47,71405,1625],{"class":217},[47,71407,71408],{"class":221}," (android ",[47,71410,71411],{"class":217},"||",[47,71413,71414],{"class":221}," iphone) { \n",[47,71416,71417,71420,71422,71425],{"class":49,"line":1411},[47,71418,71419],{"class":221},"location.href ",[47,71421,267],{"class":217},[47,71423,71424],{"class":81}," 'http:\u002F\u002Fm.itcast.cn'",[47,71426,2767],{"class":221},[47,71428,71429],{"class":49,"line":1423},[47,71430,71431],{"class":221},"} \n",[47,71433,71434],{"class":49,"line":1706},[47,71435,71436],{"class":221},"})()\n",[187,71438,71440],{"id":71439},"_346-histroy对象","3.4.6 histroy对象",[19,71442,71443],{},[1556,71444],{"alt":43,"src":71445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,71447,71448],{},"浏览器地址的前进与后退!!!",[19,71450,71451],{},"history.back() 等效于 history.go(-1)",[19,71453,71454],{},"history.forward() 等效于 history.go(1)",[14,71456,71458],{"id":71457},"_35-本地存储","3.5 本地存储",[171,71460,71461,71464,71467],{},[109,71462,71463],{},"数据存储在用户浏览器中",[109,71465,71466],{},"设置、读取方便、甚至页面刷新不丢失数据",[109,71468,71469],{},"容量较大，sessionStorage和localStorage约 5M 左右",[187,71471,71473],{"id":71472},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,71475,71476],{},"只能存储字符串",[19,71478,71479],{},[1556,71480],{"alt":43,"src":71481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,71483,71484],{},[1556,71485],{"alt":43,"src":71486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,71488,71489],{},"键值对要加引号,不然就会当变量来看了",[19,71491,71492],{},"localStorage.setItem('uname', 'pink')",[19,71494,71495],{},"刷新之后信息不再丢失",[19,71497,71498],{},"操作key,value会跟着变",[19,71500,71501],{},"删除只删除键就可以,即名字",[19,71503,71492],{},[19,71505,71506],{},"改:",[19,71508,71509],{},"localStorage.setItem('uname','red')",[19,71511,71512],{},"有这个键就是改,没有这个键就是改",[19,71514,71515],{},[1556,71516],{"alt":43,"src":71517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,71519,71520],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,71522,71523],{},[1556,71524],{"alt":43,"src":71525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,71527,71528],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[187,71530,71532],{"id":71531},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,71534,71535],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,71537,71538],{},"特性:",[171,71540,71541,71544,71547,71550],{},[109,71542,71543],{},"生命周期为关闭浏览器窗口",[109,71545,71546],{},"在同一个窗口(页面)下数据可以共享",[109,71548,71549],{},"以键值对的形式存储使用",[109,71551,71552],{},"用法跟localStorage 基本相同",[187,71554,71556],{"id":71555},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,71558,71559],{},"本地只能存储字符串,无法直接存储复杂数据类型",[38,71561,71563],{"className":53121,"code":71562,"language":53123,"meta":43,"style":43},"\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",[26,71564,71565,71573,71578,71583,71588,71593,71597,71602,71607],{"__ignoreMap":43},[47,71566,71567,71569,71571],{"class":49,"line":50},[47,71568,1129],{"class":221},[47,71570,51867],{"class":51354},[47,71572,51361],{"class":221},[47,71574,71575],{"class":49,"line":92},[47,71576,71577],{"class":221},"    const obj = {\n",[47,71579,71580],{"class":49,"line":1273},[47,71581,71582],{"class":221},"      uname: 'pink老师',\n",[47,71584,71585],{"class":49,"line":1288},[47,71586,71587],{"class":221},"      age: 18,\n",[47,71589,71590],{"class":49,"line":1294},[47,71591,71592],{"class":221},"      gender: '女'\n",[47,71594,71595],{"class":49,"line":1308},[47,71596,2280],{"class":221},[47,71598,71599],{"class":49,"line":1314},[47,71600,71601],{"class":221},"    \u002F\u002F 存储复杂数据类型\n",[47,71603,71604],{"class":49,"line":1405},[47,71605,71606],{"class":221},"    localStorage.setItem('obj', obj)\n",[47,71608,71609,71611,71613],{"class":49,"line":1411},[47,71610,52471],{"class":221},[47,71612,51867],{"class":51354},[47,71614,51361],{"class":221},[19,71616,71617],{},[1556,71618],{"alt":43,"src":71619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,71621,71622],{},"如果获取一下数据:",[19,71624,71625],{},"log(localStorage.getItem('obj'))",[19,71627,71628],{},[1556,71629],{"alt":43,"src":71630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,71632,71633],{},"发现直接存对象是使用不了的!!!",[22091,71635,71637],{"id":71636},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,71639,71640],{},[1556,71641],{"alt":43,"src":71642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[38,71644,71646],{"className":50687,"code":71645,"language":50689,"meta":43,"style":43},"\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",[26,71647,71648,71656,71666,71676,71685,71693,71697,71701,71727,71746,71754,71758,71763,71768],{"__ignoreMap":43},[47,71649,71650,71652,71654],{"class":49,"line":50},[47,71651,1129],{"class":221},[47,71653,51867],{"class":51354},[47,71655,51361],{"class":221},[47,71657,71658,71660,71662,71664],{"class":49,"line":92},[47,71659,11314],{"class":217},[47,71661,70025],{"class":85},[47,71663,13657],{"class":217},[47,71665,15665],{"class":221},[47,71667,71668,71671,71674],{"class":49,"line":1273},[47,71669,71670],{"class":221},"      uname: ",[47,71672,71673],{"class":81},"'pink老师'",[47,71675,31520],{"class":221},[47,71677,71678,71681,71683],{"class":49,"line":1288},[47,71679,71680],{"class":221},"      age: ",[47,71682,869],{"class":85},[47,71684,31520],{"class":221},[47,71686,71687,71690],{"class":49,"line":1294},[47,71688,71689],{"class":221},"      gender: ",[47,71691,71692],{"class":81},"'女'\n",[47,71694,71695],{"class":49,"line":1308},[47,71696,2280],{"class":221},[47,71698,71699],{"class":49,"line":1314},[47,71700,71601],{"class":279},[47,71702,71703,71706,71709,71711,71714,71716,71719,71721,71724],{"class":49,"line":1405},[47,71704,71705],{"class":221},"  localStorage.",[47,71707,71708],{"class":53},"setItem",[47,71710,222],{"class":221},[47,71712,71713],{"class":81},"'obj'",[47,71715,12528],{"class":221},[47,71717,71718],{"class":85},"JSON",[47,71720,777],{"class":221},[47,71722,71723],{"class":53},"stringify",[47,71725,71726],{"class":221},"(obj))\n",[47,71728,71729,71732,71734,71737,71740,71742,71744],{"class":49,"line":1411},[47,71730,71731],{"class":221},"  console.",[47,71733,58301],{"class":53},[47,71735,71736],{"class":221},"(localStorage.",[47,71738,71739],{"class":53},"getItem",[47,71741,222],{"class":221},[47,71743,71713],{"class":81},[47,71745,30551],{"class":221},[47,71747,71748,71750,71752],{"class":49,"line":1423},[47,71749,52471],{"class":221},[47,71751,51867],{"class":51354},[47,71753,51361],{"class":221},[47,71755,71756],{"class":49,"line":1706},[47,71757,70675],{"class":221},[47,71759,71760],{"class":49,"line":1711},[47,71761,71762],{"class":221},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[47,71764,71765],{"class":49,"line":1717},[47,71766,71767],{"class":221},"  类型是字符串的\n",[47,71769,71770],{"class":49,"line":1722},[47,71771,71772],{"class":221},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22091,71774,71776],{"id":71775},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,71778,71779],{},[1556,71780],{"alt":43,"src":71781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,71783,71784],{},[1556,71785],{"alt":43,"src":71786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[38,71788,71790],{"className":53121,"code":71789,"language":53123,"meta":43,"style":43},"  \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",[26,71791,71792,71800,71804,71808,71812,71816,71820,71825,71830,71835,71840,71845,71850,71855,71860],{"__ignoreMap":43},[47,71793,71794,71796,71798],{"class":49,"line":50},[47,71795,52198],{"class":221},[47,71797,51867],{"class":51354},[47,71799,51361],{"class":221},[47,71801,71802],{"class":49,"line":92},[47,71803,71577],{"class":221},[47,71805,71806],{"class":49,"line":1273},[47,71807,71582],{"class":221},[47,71809,71810],{"class":49,"line":1288},[47,71811,71587],{"class":221},[47,71813,71814],{"class":49,"line":1294},[47,71815,71592],{"class":221},[47,71817,71818],{"class":49,"line":1308},[47,71819,2280],{"class":221},[47,71821,71822],{"class":49,"line":1314},[47,71823,71824],{"class":221},"    \u002F\u002F 1.存储复杂数据类型\n",[47,71826,71827],{"class":49,"line":1405},[47,71828,71829],{"class":221},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[47,71831,71832],{"class":49,"line":1411},[47,71833,71834],{"class":221},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[47,71836,71837],{"class":49,"line":1423},[47,71838,71839],{"class":221},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[47,71841,71842],{"class":49,"line":1706},[47,71843,71844],{"class":221},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[47,71846,71847],{"class":49,"line":1711},[47,71848,71849],{"class":221},"    \u002F\u002F 取\n",[47,71851,71852],{"class":49,"line":1717},[47,71853,71854],{"class":221},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[47,71856,71857],{"class":49,"line":1722},[47,71858,71859],{"class":221},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[47,71861,71862,71864,71866],{"class":49,"line":1736},[47,71863,52471],{"class":221},[47,71865,51867],{"class":51354},[47,71867,51361],{"class":221},[19,71869,71870],{},[1556,71871],{"alt":43,"src":71872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[187,71874,71876],{"id":71875},"_356-数组map方法","3.5.6 数组map方法",[19,71878,71879],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,71881,71882],{},[1556,71883],{"alt":43,"src":71884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,71886,71887],{},[1556,71888],{"alt":43,"src":71889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,71891,71892,71895],{},[369,71893,71894],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,71897,71898],{},"map有返回值，但是forEach没有返回值",[19,71900,71901],{},"map是个方法。用的时候要加 ()",[19,71903,71904],{},"map返回的是一个数组",[187,71906,71908],{"id":71907},"_357-数组中join方法","3.5.7 数组中join方法",[19,71910,71911],{},[1556,71912],{"alt":43,"src":71913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,71915,71916],{},"类似于python中拼接字符串一样！",[171,71918,71919,71922,71925],{},[109,71920,71921],{},"小括号为空则逗号分开",[109,71923,71924],{},"小括号为空字符串 ''，则元素之间没有分隔符",[109,71926,71927],{},"小括号用啥符号就用进行分割",[187,71929,71931],{"id":71930},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[171,71933,71934,71937,71940,71943,71946],{},[109,71935,71936],{},"记住本地时间获取快速方式：new Date().toDateString()",[109,71938,71939],{},"尽量减少DOM操作，用好map+join的渲染方式",[109,71941,71942],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[109,71944,71945],{},"return可以实现函数的结束",[109,71947,71948],{},"禁止跳转是 preventDefault() 不要忘记",[38,71950,71952],{"className":50687,"code":71951,"language":50689,"meta":43,"style":43},"\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",[26,71953,71954,71964,71978,71982,71990,72004,72024,72036,72044,72050,72060,72070,72074,72078,72084,72094,72106,72110,72114,72121,72133,72147,72157,72161,72165,72172,72179,72186,72198,72210,72220,72232,72236,72240,72247,72254,72266,72278,72288,72300,72330,72334,72338,72345,72357,72369,72393,72403,72413,72417,72421,72429,72440,72452,72464,72476,72493,72505,72517,72521,72525,72532,72544,72556,72568,72579,72597,72610,72622,72646,72657,72661,72665,72673,72683,72687,72691,72697,72709,72720,72730,72734,72738,72744,72766,72770,72774,72780,72786,72798,72808,72820,72850,72863,72880,72884,72888,72899,72921,72931,72935,72939,72952,72962,72974,72986,72998,73010,73020,73030,73040,73051,73064,73068,73076,73084,73088,73096,73109,73129,73162,73195,73228,73254,73272,73290,73298,73324,73342,73360,73378,73396,73414,73422,73430,73448,73456,73485,73493,73501,73509,73522,73534,73546,73558,73570,73582,73595,73607,73615,73623,73631,73636,73641,73645,73649,73653,73657,73661,73665,73670,73675,73680,73685,73693,73701,73709,73714,73719,73724,73729,73734,73739,73744,73749,73754,73759,73764,73769,73774,73779,73783,73788,73793,73803,73812,73816,73821,73830,73846,73888,73928,73967,74032,74040,74044,74049,74067,74075,74080,74085,74115,74121,74126,74139,74151,74163,74175,74187,74199,74211,74215,74225,74229,74234,74239,74243,74252,74256,74261,74266,74285,74290,74310,74314,74319,74323,74328,74346,74364,74382,74401,74420,74439,74444,74450,74471,74477,74486,74492,74498,74504,74531,74544,74549,74559,74565,74571,74577,74583,74588,74594,74600,74606,74612,74645,74650,74655,74660,74665,74671,74677,74683,74694,74699,74705,74712,74726,74732,74756,74761,74766,74772,74778,74799,74805,74818,74824,74830,74836,74842,74847,74853,74859,74865,74883,74897,74903,74911,74917,74939,74944,74949,74954,74959,74964,74973,74982,74987],{"__ignoreMap":43},[47,71955,71956,71958,71960,71962],{"class":49,"line":50},[47,71957,51351],{"class":221},[47,71959,51355],{"class":51354},[47,71961,51358],{"class":53},[47,71963,51361],{"class":221},[47,71965,71966,71968,71970,71972,71974,71976],{"class":49,"line":92},[47,71967,1129],{"class":221},[47,71969,50689],{"class":51354},[47,71971,51370],{"class":53},[47,71973,267],{"class":221},[47,71975,51375],{"class":81},[47,71977,51361],{"class":221},[47,71979,71980],{"class":49,"line":1273},[47,71981,2493],{"emptyLinePlaceholder":145},[47,71983,71984,71986,71988],{"class":49,"line":1288},[47,71985,1129],{"class":221},[47,71987,51388],{"class":51354},[47,71989,51361],{"class":221},[47,71991,71992,71994,71996,71998,72000,72002],{"class":49,"line":1294},[47,71993,52198],{"class":221},[47,71995,51398],{"class":51354},[47,71997,51401],{"class":53},[47,71999,267],{"class":221},[47,72001,51406],{"class":81},[47,72003,51361],{"class":221},[47,72005,72006,72008,72010,72012,72014,72016,72018,72020,72022],{"class":49,"line":1308},[47,72007,52198],{"class":221},[47,72009,51398],{"class":51354},[47,72011,15013],{"class":53},[47,72013,267],{"class":221},[47,72015,51445],{"class":81},[47,72017,51425],{"class":53},[47,72019,267],{"class":221},[47,72021,51452],{"class":81},[47,72023,51361],{"class":221},[47,72025,72026,72028,72030,72032,72034],{"class":49,"line":1314},[47,72027,52198],{"class":221},[47,72029,51461],{"class":51354},[47,72031,51464],{"class":221},[47,72033,51461],{"class":51354},[47,72035,51361],{"class":221},[47,72037,72038,72040,72042],{"class":49,"line":1405},[47,72039,52198],{"class":221},[47,72041,134],{"class":51354},[47,72043,51361],{"class":221},[47,72045,72046,72048],{"class":49,"line":1411},[47,72047,6496],{"class":51354},[47,72049,15665],{"class":221},[47,72051,72052,72054,72056,72058],{"class":49,"line":1423},[47,72053,54749],{"class":85},[47,72055,51491],{"class":221},[47,72057,411],{"class":85},[47,72059,1384],{"class":221},[47,72061,72062,72064,72066,72068],{"class":49,"line":1706},[47,72063,54760],{"class":85},[47,72065,51491],{"class":221},[47,72067,411],{"class":85},[47,72069,1384],{"class":221},[47,72071,72072],{"class":49,"line":1711},[47,72073,2280],{"class":221},[47,72075,72076],{"class":49,"line":1717},[47,72077,2493],{"emptyLinePlaceholder":145},[47,72079,72080,72082],{"class":49,"line":1722},[47,72081,57333],{"class":51354},[47,72083,15665],{"class":221},[47,72085,72086,72088,72090,72092],{"class":49,"line":1736},[47,72087,57340],{"class":85},[47,72089,51491],{"class":221},[47,72091,51646],{"class":85},[47,72093,1384],{"class":221},[47,72095,72096,72098,72100,72102,72104],{"class":49,"line":1741},[47,72097,62131],{"class":85},[47,72099,51491],{"class":221},[47,72101,919],{"class":85},[47,72103,51546],{"class":217},[47,72105,1384],{"class":221},[47,72107,72108],{"class":49,"line":1747},[47,72109,2280],{"class":221},[47,72111,72112],{"class":49,"line":1768},[47,72113,2493],{"emptyLinePlaceholder":145},[47,72115,72116,72119],{"class":49,"line":1773},[47,72117,72118],{"class":53},"    .info",[47,72120,15665],{"class":221},[47,72122,72123,72125,72127,72129,72131],{"class":49,"line":1787},[47,72124,54825],{"class":85},[47,72126,51491],{"class":221},[47,72128,51543],{"class":85},[47,72130,51546],{"class":217},[47,72132,1384],{"class":221},[47,72134,72135,72137,72139,72141,72143,72145],{"class":49,"line":1792},[47,72136,54760],{"class":85},[47,72138,51491],{"class":221},[47,72140,665],{"class":85},[47,72142,51546],{"class":217},[47,72144,51610],{"class":85},[47,72146,1384],{"class":221},[47,72148,72149,72151,72153,72155],{"class":49,"line":1821},[47,72150,57340],{"class":85},[47,72152,51491],{"class":221},[47,72154,51646],{"class":85},[47,72156,1384],{"class":221},[47,72158,72159],{"class":49,"line":1826},[47,72160,2280],{"class":221},[47,72162,72163],{"class":49,"line":1843},[47,72164,2493],{"emptyLinePlaceholder":145},[47,72166,72167,72170],{"class":49,"line":1848},[47,72168,72169],{"class":53},"    .uname",[47,72171,31520],{"class":221},[47,72173,72174,72177],{"class":49,"line":1853},[47,72175,72176],{"class":53},"    .age",[47,72178,31520],{"class":221},[47,72180,72181,72184],{"class":49,"line":1858},[47,72182,72183],{"class":53},"    .salary",[47,72185,15665],{"class":221},[47,72187,72188,72190,72192,72194,72196],{"class":49,"line":1872},[47,72189,54825],{"class":85},[47,72191,51491],{"class":221},[47,72193,530],{"class":85},[47,72195,51546],{"class":217},[47,72197,1384],{"class":221},[47,72199,72200,72202,72204,72206,72208],{"class":49,"line":1877},[47,72201,54839],{"class":85},[47,72203,51491],{"class":221},[47,72205,919],{"class":85},[47,72207,51546],{"class":217},[47,72209,1384],{"class":221},[47,72211,72212,72214,72216,72218],{"class":49,"line":2670},[47,72213,61834],{"class":85},[47,72215,51491],{"class":221},[47,72217,54791],{"class":85},[47,72219,1384],{"class":221},[47,72221,72222,72224,72226,72228,72230],{"class":49,"line":2684},[47,72223,61804],{"class":85},[47,72225,51491],{"class":221},[47,72227,794],{"class":85},[47,72229,51546],{"class":217},[47,72231,1384],{"class":221},[47,72233,72234],{"class":49,"line":2692},[47,72235,2280],{"class":221},[47,72237,72238],{"class":49,"line":2697},[47,72239,2493],{"emptyLinePlaceholder":145},[47,72241,72242,72245],{"class":49,"line":2703},[47,72243,72244],{"class":53},"    .gender",[47,72246,31520],{"class":221},[47,72248,72249,72252],{"class":49,"line":2709},[47,72250,72251],{"class":53},"    .city",[47,72253,15665],{"class":221},[47,72255,72256,72258,72260,72262,72264],{"class":49,"line":2714},[47,72257,54825],{"class":85},[47,72259,51491],{"class":221},[47,72261,530],{"class":85},[47,72263,51546],{"class":217},[47,72265,1384],{"class":221},[47,72267,72268,72270,72272,72274,72276],{"class":49,"line":8041},[47,72269,54839],{"class":85},[47,72271,51491],{"class":221},[47,72273,1044],{"class":85},[47,72275,51546],{"class":217},[47,72277,1384],{"class":221},[47,72279,72280,72282,72284,72286],{"class":49,"line":8065},[47,72281,61834],{"class":85},[47,72283,51491],{"class":221},[47,72285,54791],{"class":85},[47,72287,1384],{"class":221},[47,72289,72290,72292,72294,72296,72298],{"class":49,"line":8070},[47,72291,61804],{"class":85},[47,72293,51491],{"class":221},[47,72295,794],{"class":85},[47,72297,51546],{"class":217},[47,72299,1384],{"class":221},[47,72301,72302,72304,72306,72308,72310,72312,72315,72317,72319,72321,72324,72326,72328],{"class":49,"line":8076},[47,72303,62031],{"class":85},[47,72305,51491],{"class":221},[47,72307,436],{"class":85},[47,72309,51546],{"class":217},[47,72311,51575],{"class":85},[47,72313,72314],{"class":85}," rgb",[47,72316,222],{"class":221},[47,72318,1816],{"class":85},[47,72320,12528],{"class":221},[47,72322,72323],{"class":85},"197",[47,72325,12528],{"class":221},[47,72327,72323],{"class":85},[47,72329,2812],{"class":221},[47,72331,72332],{"class":49,"line":8103},[47,72333,2280],{"class":221},[47,72335,72336],{"class":49,"line":8108},[47,72337,2493],{"emptyLinePlaceholder":145},[47,72339,72340,72343],{"class":49,"line":8114},[47,72341,72342],{"class":51354},"    button",[47,72344,15665],{"class":221},[47,72346,72347,72349,72351,72353,72355],{"class":49,"line":8126},[47,72348,54839],{"class":85},[47,72350,51491],{"class":221},[47,72352,1044],{"class":85},[47,72354,51546],{"class":217},[47,72356,1384],{"class":221},[47,72358,72359,72361,72363,72365,72367],{"class":49,"line":8138},[47,72360,54825],{"class":85},[47,72362,51491],{"class":221},[47,72364,703],{"class":85},[47,72366,51546],{"class":217},[47,72368,1384],{"class":221},[47,72370,72371,72373,72375,72378,72380,72382,72384,72387,72389,72391],{"class":49,"line":8150},[47,72372,54938],{"class":85},[47,72374,51491],{"class":221},[47,72376,72377],{"class":85},"rgb",[47,72379,222],{"class":221},[47,72381,1188],{"class":85},[47,72383,12528],{"class":221},[47,72385,72386],{"class":85},"187",[47,72388,12528],{"class":221},[47,72390,518],{"class":85},[47,72392,2812],{"class":221},[47,72394,72395,72397,72399,72401],{"class":49,"line":9809},[47,72396,57470],{"class":85},[47,72398,51491],{"class":221},[47,72400,60896],{"class":85},[47,72402,1384],{"class":221},[47,72404,72405,72407,72409,72411],{"class":49,"line":9834},[47,72406,62031],{"class":85},[47,72408,51491],{"class":221},[47,72410,411],{"class":85},[47,72412,1384],{"class":221},[47,72414,72415],{"class":49,"line":9857},[47,72416,2280],{"class":221},[47,72418,72419],{"class":49,"line":9881},[47,72420,2493],{"emptyLinePlaceholder":145},[47,72422,72423,72425,72427],{"class":49,"line":9886},[47,72424,72342],{"class":51354},[47,72426,51742],{"class":51354},[47,72428,15665],{"class":221},[47,72430,72431,72433,72435,72438],{"class":49,"line":9891},[47,72432,55063],{"class":85},[47,72434,51491],{"class":221},[47,72436,72437],{"class":85},"inline-block",[47,72439,1384],{"class":221},[47,72441,72442,72444,72446,72448,72450],{"class":49,"line":9896},[47,72443,54825],{"class":85},[47,72445,51491],{"class":221},[47,72447,665],{"class":85},[47,72449,51546],{"class":217},[47,72451,1384],{"class":221},[47,72453,72454,72456,72458,72460,72462],{"class":49,"line":9905},[47,72455,54839],{"class":85},[47,72457,51491],{"class":221},[47,72459,665],{"class":85},[47,72461,51546],{"class":217},[47,72463,1384],{"class":221},[47,72465,72466,72468,72470,72472,72474],{"class":49,"line":9910},[47,72467,57413],{"class":85},[47,72469,51491],{"class":221},[47,72471,691],{"class":85},[47,72473,51546],{"class":217},[47,72475,1384],{"class":221},[47,72477,72478,72480,72482,72484,72486,72488,72491],{"class":49,"line":9916},[47,72479,62031],{"class":85},[47,72481,51491],{"class":221},[47,72483,436],{"class":85},[47,72485,51546],{"class":217},[47,72487,51575],{"class":85},[47,72489,72490],{"class":85}," #fff",[47,72492,1384],{"class":221},[47,72494,72495,72497,72499,72501,72503],{"class":49,"line":9937},[47,72496,55188],{"class":85},[47,72498,51491],{"class":221},[47,72500,538],{"class":85},[47,72502,51546],{"class":217},[47,72504,1384],{"class":221},[47,72506,72507,72509,72511,72513,72515],{"class":49,"line":9943},[47,72508,61804],{"class":85},[47,72510,51491],{"class":221},[47,72512,436],{"class":85},[47,72514,51546],{"class":217},[47,72516,1384],{"class":221},[47,72518,72519],{"class":49,"line":9957},[47,72520,2280],{"class":221},[47,72522,72523],{"class":49,"line":9963},[47,72524,2493],{"emptyLinePlaceholder":145},[47,72526,72527,72530],{"class":49,"line":9990},[47,72528,72529],{"class":53},"    .total",[47,72531,15665],{"class":221},[47,72533,72534,72536,72538,72540,72542],{"class":49,"line":9999},[47,72535,54825],{"class":85},[47,72537,51491],{"class":221},[47,72539,61683],{"class":85},[47,72541,51546],{"class":217},[47,72543,1384],{"class":221},[47,72545,72546,72548,72550,72552,72554],{"class":49,"line":10005},[47,72547,54839],{"class":85},[47,72549,51491],{"class":221},[47,72551,620],{"class":85},[47,72553,51546],{"class":217},[47,72555,1384],{"class":221},[47,72557,72558,72560,72562,72564,72566],{"class":49,"line":10013},[47,72559,57413],{"class":85},[47,72561,51491],{"class":221},[47,72563,620],{"class":85},[47,72565,51546],{"class":217},[47,72567,1384],{"class":221},[47,72569,72570,72572,72574,72577],{"class":49,"line":10018},[47,72571,57340],{"class":85},[47,72573,51491],{"class":221},[47,72575,72576],{"class":85},"right",[47,72578,1384],{"class":221},[47,72580,72581,72583,72585,72587,72589,72591,72593,72595],{"class":49,"line":16697},[47,72582,54760],{"class":85},[47,72584,51491],{"class":221},[47,72586,620],{"class":85},[47,72588,51546],{"class":217},[47,72590,51610],{"class":85},[47,72592,2131],{"class":85},[47,72594,51546],{"class":217},[47,72596,1384],{"class":221},[47,72598,72599,72602,72604,72606,72608],{"class":49,"line":16703},[47,72600,72601],{"class":85},"      padding-right",[47,72603,51491],{"class":221},[47,72605,665],{"class":85},[47,72607,51546],{"class":217},[47,72609,1384],{"class":221},[47,72611,72612,72614,72616,72618,72620],{"class":49,"line":16726},[47,72613,54976],{"class":85},[47,72615,51491],{"class":221},[47,72617,742],{"class":85},[47,72619,51546],{"class":217},[47,72621,1384],{"class":221},[47,72623,72624,72626,72628,72630,72632,72635,72637,72640,72642,72644],{"class":49,"line":16732},[47,72625,54938],{"class":85},[47,72627,51491],{"class":221},[47,72629,72377],{"class":85},[47,72631,222],{"class":221},[47,72633,72634],{"class":85},"237",[47,72636,12528],{"class":221},[47,72638,72639],{"class":85},"235",[47,72641,12528],{"class":221},[47,72643,72639],{"class":85},[47,72645,2812],{"class":221},[47,72647,72648,72651,72653,72655],{"class":49,"line":16755},[47,72649,72650],{"class":85},"      box-sizing",[47,72652,51491],{"class":221},[47,72654,60559],{"class":85},[47,72656,1384],{"class":221},[47,72658,72659],{"class":49,"line":16769},[47,72660,2280],{"class":221},[47,72662,72663],{"class":49,"line":16789},[47,72664,2493],{"emptyLinePlaceholder":145},[47,72666,72667,72669,72671],{"class":49,"line":16795},[47,72668,72529],{"class":53},[47,72670,51742],{"class":51354},[47,72672,15665],{"class":221},[47,72674,72675,72677,72679,72681],{"class":49,"line":16806},[47,72676,57470],{"class":85},[47,72678,51491],{"class":221},[47,72680,57475],{"class":85},[47,72682,1384],{"class":221},[47,72684,72685],{"class":49,"line":16829},[47,72686,2280],{"class":221},[47,72688,72689],{"class":49,"line":16851},[47,72690,2493],{"emptyLinePlaceholder":145},[47,72692,72693,72695],{"class":49,"line":16856},[47,72694,65077],{"class":51354},[47,72696,15665],{"class":221},[47,72698,72699,72701,72703,72705,72707],{"class":49,"line":16862},[47,72700,54825],{"class":85},[47,72702,51491],{"class":221},[47,72704,61683],{"class":85},[47,72706,51546],{"class":217},[47,72708,1384],{"class":221},[47,72710,72711,72713,72715,72718],{"class":49,"line":16876},[47,72712,54760],{"class":85},[47,72714,51491],{"class":221},[47,72716,72717],{"class":85},"auto",[47,72719,1384],{"class":221},[47,72721,72722,72724,72726,72728],{"class":49,"line":16889},[47,72723,65084],{"class":85},[47,72725,51491],{"class":221},[47,72727,65089],{"class":85},[47,72729,1384],{"class":221},[47,72731,72732],{"class":49,"line":16894},[47,72733,2280],{"class":221},[47,72735,72736],{"class":49,"line":16908},[47,72737,2493],{"emptyLinePlaceholder":145},[47,72739,72740,72742],{"class":49,"line":16913},[47,72741,65169],{"class":51354},[47,72743,15665],{"class":221},[47,72745,72746,72748,72750,72752,72754,72756,72758,72760,72762,72764],{"class":49,"line":16919},[47,72747,54938],{"class":85},[47,72749,51491],{"class":221},[47,72751,72377],{"class":85},[47,72753,222],{"class":221},[47,72755,72634],{"class":85},[47,72757,12528],{"class":221},[47,72759,72639],{"class":85},[47,72761,12528],{"class":221},[47,72763,72639],{"class":85},[47,72765,2812],{"class":221},[47,72767,72768],{"class":49,"line":16924},[47,72769,2280],{"class":221},[47,72771,72772],{"class":49,"line":16938},[47,72773,2493],{"emptyLinePlaceholder":145},[47,72775,72776,72778],{"class":49,"line":16943},[47,72777,65169],{"class":51354},[47,72779,31520],{"class":221},[47,72781,72782,72784],{"class":49,"line":16948},[47,72783,65235],{"class":51354},[47,72785,15665],{"class":221},[47,72787,72788,72790,72792,72794,72796],{"class":49,"line":16962},[47,72789,54839],{"class":85},[47,72791,51491],{"class":221},[47,72793,492],{"class":85},[47,72795,51546],{"class":217},[47,72797,1384],{"class":221},[47,72799,72800,72802,72804,72806],{"class":49,"line":16974},[47,72801,57340],{"class":85},[47,72803,51491],{"class":221},[47,72805,23829],{"class":85},[47,72807,1384],{"class":221},[47,72809,72810,72812,72814,72816,72818],{"class":49,"line":16979},[47,72811,54976],{"class":85},[47,72813,51491],{"class":221},[47,72815,768],{"class":85},[47,72817,51546],{"class":217},[47,72819,1384],{"class":221},[47,72821,72822,72824,72826,72828,72830,72832,72834,72836,72839,72841,72844,72846,72848],{"class":49,"line":16992},[47,72823,62031],{"class":85},[47,72825,51491],{"class":221},[47,72827,436],{"class":85},[47,72829,51546],{"class":217},[47,72831,51575],{"class":85},[47,72833,72314],{"class":85},[47,72835,222],{"class":221},[47,72837,72838],{"class":85},"228",[47,72840,12528],{"class":221},[47,72842,72843],{"class":85},"225",[47,72845,12528],{"class":221},[47,72847,72843],{"class":85},[47,72849,2812],{"class":221},[47,72851,72852,72855,72857,72859,72861],{"class":49,"line":16997},[47,72853,72854],{"class":85},"      padding-left",[47,72856,51491],{"class":221},[47,72858,538],{"class":85},[47,72860,51546],{"class":217},[47,72862,1384],{"class":221},[47,72864,72865,72867,72869,72871,72874,72876,72878],{"class":49,"line":17002},[47,72866,61914],{"class":85},[47,72868,51491],{"class":221},[47,72870,28175],{"class":85},[47,72872,72873],{"class":85}," linear",[47,72875,61921],{"class":85},[47,72877,914],{"class":217},[47,72879,1384],{"class":221},[47,72881,72882],{"class":49,"line":17007},[47,72883,2280],{"class":221},[47,72885,72886],{"class":49,"line":17020},[47,72887,2493],{"emptyLinePlaceholder":145},[47,72889,72890,72893,72895,72897],{"class":49,"line":17025},[47,72891,72892],{"class":51354},"    tbody",[47,72894,70198],{"class":51354},[47,72896,60994],{"class":53},[47,72898,15665],{"class":221},[47,72900,72901,72903,72905,72907,72909,72911,72913,72915,72917,72919],{"class":49,"line":32687},[47,72902,54938],{"class":85},[47,72904,51491],{"class":221},[47,72906,72377],{"class":85},[47,72908,222],{"class":221},[47,72910,72634],{"class":85},[47,72912,12528],{"class":221},[47,72914,72639],{"class":85},[47,72916,12528],{"class":221},[47,72918,72639],{"class":85},[47,72920,2812],{"class":221},[47,72922,72923,72925,72927,72929],{"class":49,"line":32693},[47,72924,62079],{"class":85},[47,72926,51491],{"class":221},[47,72928,62084],{"class":85},[47,72930,1384],{"class":221},[47,72932,72933],{"class":49,"line":32699},[47,72934,2280],{"class":221},[47,72936,72937],{"class":49,"line":32705},[47,72938,2493],{"emptyLinePlaceholder":145},[47,72940,72941,72943,72945,72948,72950],{"class":49,"line":32711},[47,72942,72892],{"class":51354},[47,72944,70198],{"class":51354},[47,72946,72947],{"class":51354}," td",[47,72949,1492],{"class":51354},[47,72951,15665],{"class":221},[47,72953,72954,72956,72958,72960],{"class":49,"line":32722},[47,72955,55063],{"class":85},[47,72957,51491],{"class":221},[47,72959,60923],{"class":85},[47,72961,1384],{"class":221},[47,72963,72964,72966,72968,72970,72972],{"class":49,"line":32728},[47,72965,54825],{"class":85},[47,72967,51491],{"class":221},[47,72969,1126],{"class":85},[47,72971,51546],{"class":217},[47,72973,1384],{"class":221},[47,72975,72976,72978,72980,72982,72984],{"class":49,"line":32748},[47,72977,54839],{"class":85},[47,72979,51491],{"class":221},[47,72981,1044],{"class":85},[47,72983,51546],{"class":217},[47,72985,1384],{"class":221},[47,72987,72988,72990,72992,72994,72996],{"class":49,"line":32754},[47,72989,57413],{"class":85},[47,72991,51491],{"class":221},[47,72993,1044],{"class":85},[47,72995,51546],{"class":217},[47,72997,1384],{"class":221},[47,72999,73000,73002,73004,73006,73008],{"class":49,"line":32765},[47,73001,62131],{"class":85},[47,73003,51491],{"class":221},[47,73005,298],{"class":85},[47,73007,51546],{"class":217},[47,73009,1384],{"class":221},[47,73011,73012,73014,73016,73018],{"class":49,"line":32771},[47,73013,57470],{"class":85},[47,73015,51491],{"class":221},[47,73017,60896],{"class":85},[47,73019,1384],{"class":221},[47,73021,73022,73024,73026,73028],{"class":49,"line":32777},[47,73023,57340],{"class":85},[47,73025,51491],{"class":221},[47,73027,51646],{"class":85},[47,73029,1384],{"class":221},[47,73031,73032,73034,73036,73038],{"class":49,"line":32783},[47,73033,64024],{"class":85},[47,73035,51491],{"class":221},[47,73037,54791],{"class":85},[47,73039,1384],{"class":221},[47,73041,73042,73044,73046,73049],{"class":49,"line":32789},[47,73043,54938],{"class":85},[47,73045,51491],{"class":221},[47,73047,73048],{"class":85},"orange",[47,73050,1384],{"class":221},[47,73052,73053,73055,73057,73060,73062],{"class":49,"line":32795},[47,73054,55188],{"class":85},[47,73056,51491],{"class":221},[47,73058,73059],{"class":85},"12.5",[47,73061,51546],{"class":217},[47,73063,1384],{"class":221},[47,73065,73066],{"class":49,"line":32801},[47,73067,2280],{"class":221},[47,73069,73070,73072,73074],{"class":49,"line":32807},[47,73071,52471],{"class":221},[47,73073,134],{"class":51354},[47,73075,51361],{"class":221},[47,73077,73078,73080,73082],{"class":49,"line":32827},[47,73079,51839],{"class":221},[47,73081,51388],{"class":51354},[47,73083,51361],{"class":221},[47,73085,73086],{"class":49,"line":32833},[47,73087,2493],{"emptyLinePlaceholder":145},[47,73089,73090,73092,73094],{"class":49,"line":32849},[47,73091,1129],{"class":221},[47,73093,51854],{"class":51354},[47,73095,51361],{"class":221},[47,73097,73098,73100,73102,73105,73107],{"class":49,"line":32855},[47,73099,52198],{"class":221},[47,73101,14],{"class":51354},[47,73103,73104],{"class":221},">学生就业统计表\u003C\u002F",[47,73106,14],{"class":51354},[47,73108,51361],{"class":221},[47,73110,73111,73113,73115,73117,73119,73121,73123,73125,73127],{"class":49,"line":32869},[47,73112,52198],{"class":221},[47,73114,66679],{"class":51354},[47,73116,53540],{"class":53},[47,73118,267],{"class":221},[47,73120,62718],{"class":81},[47,73122,69124],{"class":53},[47,73124,267],{"class":221},[47,73126,31830],{"class":81},[47,73128,51361],{"class":221},[47,73130,73131,73133,73135,73137,73139,73141,73143,73145,73147,73149,73151,73154,73156,73158,73160],{"class":49,"line":32875},[47,73132,51395],{"class":221},[47,73134,53875],{"class":51354},[47,73136,53878],{"class":53},[47,73138,267],{"class":221},[47,73140,62753],{"class":81},[47,73142,15013],{"class":53},[47,73144,267],{"class":221},[47,73146,69150],{"class":81},[47,73148,61074],{"class":53},[47,73150,267],{"class":221},[47,73152,73153],{"class":81},"\"姓名\"",[47,73155,53540],{"class":53},[47,73157,267],{"class":221},[47,73159,69150],{"class":81},[47,73161,51361],{"class":221},[47,73163,73164,73166,73168,73170,73172,73174,73176,73178,73180,73182,73184,73187,73189,73191,73193],{"class":49,"line":32890},[47,73165,51395],{"class":221},[47,73167,53875],{"class":51354},[47,73169,53878],{"class":53},[47,73171,267],{"class":221},[47,73173,62753],{"class":81},[47,73175,15013],{"class":53},[47,73177,267],{"class":221},[47,73179,69178],{"class":81},[47,73181,61074],{"class":53},[47,73183,267],{"class":221},[47,73185,73186],{"class":81},"\"年龄\"",[47,73188,53540],{"class":53},[47,73190,267],{"class":221},[47,73192,69178],{"class":81},[47,73194,51361],{"class":221},[47,73196,73197,73199,73201,73203,73205,73207,73209,73211,73213,73215,73217,73220,73222,73224,73226],{"class":49,"line":32896},[47,73198,51395],{"class":221},[47,73200,53875],{"class":51354},[47,73202,53878],{"class":53},[47,73204,267],{"class":221},[47,73206,62753],{"class":81},[47,73208,15013],{"class":53},[47,73210,267],{"class":221},[47,73212,69280],{"class":81},[47,73214,61074],{"class":53},[47,73216,267],{"class":221},[47,73218,73219],{"class":81},"\"薪资\"",[47,73221,53540],{"class":53},[47,73223,267],{"class":221},[47,73225,69280],{"class":81},[47,73227,51361],{"class":221},[47,73229,73230,73232,73234,73236,73238,73240,73242,73244,73246,73248,73250,73252],{"class":49,"line":32905},[47,73231,51395],{"class":221},[47,73233,69198],{"class":51354},[47,73235,15013],{"class":53},[47,73237,267],{"class":221},[47,73239,69205],{"class":81},[47,73241,15052],{"class":53},[47,73243,267],{"class":221},[47,73245,7745],{"class":81},[47,73247,53540],{"class":53},[47,73249,267],{"class":221},[47,73251,69205],{"class":81},[47,73253,51361],{"class":221},[47,73255,73256,73258,73260,73262,73264,73266,73268,73270],{"class":49,"line":32911},[47,73257,55288],{"class":221},[47,73259,69220],{"class":51354},[47,73261,66705],{"class":53},[47,73263,267],{"class":221},[47,73265,10054],{"class":81},[47,73267,69229],{"class":221},[47,73269,69220],{"class":51354},[47,73271,51361],{"class":221},[47,73273,73274,73276,73278,73280,73282,73284,73286,73288],{"class":49,"line":32920},[47,73275,55288],{"class":221},[47,73277,69220],{"class":51354},[47,73279,66705],{"class":53},[47,73281,267],{"class":221},[47,73283,10123],{"class":81},[47,73285,69248],{"class":221},[47,73287,69220],{"class":51354},[47,73289,51361],{"class":221},[47,73291,73292,73294,73296],{"class":49,"line":32926},[47,73293,51830],{"class":221},[47,73295,69198],{"class":51354},[47,73297,51361],{"class":221},[47,73299,73300,73302,73304,73306,73308,73310,73312,73314,73316,73318,73320,73322],{"class":49,"line":32932},[47,73301,51395],{"class":221},[47,73303,69198],{"class":51354},[47,73305,15013],{"class":53},[47,73307,267],{"class":221},[47,73309,69302],{"class":81},[47,73311,15052],{"class":53},[47,73313,267],{"class":221},[47,73315,7745],{"class":81},[47,73317,53540],{"class":53},[47,73319,267],{"class":221},[47,73321,69302],{"class":81},[47,73323,51361],{"class":221},[47,73325,73326,73328,73330,73332,73334,73336,73338,73340],{"class":49,"line":32941},[47,73327,55288],{"class":221},[47,73329,69220],{"class":51354},[47,73331,66705],{"class":53},[47,73333,267],{"class":221},[47,73335,69323],{"class":81},[47,73337,69326],{"class":221},[47,73339,69220],{"class":51354},[47,73341,51361],{"class":221},[47,73343,73344,73346,73348,73350,73352,73354,73356,73358],{"class":49,"line":32947},[47,73345,55288],{"class":221},[47,73347,69220],{"class":51354},[47,73349,66705],{"class":53},[47,73351,267],{"class":221},[47,73353,69343],{"class":81},[47,73355,69346],{"class":221},[47,73357,69220],{"class":51354},[47,73359,51361],{"class":221},[47,73361,73362,73364,73366,73368,73370,73372,73374,73376],{"class":49,"line":32958},[47,73363,55288],{"class":221},[47,73365,69220],{"class":51354},[47,73367,66705],{"class":53},[47,73369,267],{"class":221},[47,73371,69363],{"class":81},[47,73373,69366],{"class":221},[47,73375,69220],{"class":51354},[47,73377,51361],{"class":221},[47,73379,73380,73382,73384,73386,73388,73390,73392,73394],{"class":49,"line":32964},[47,73381,55288],{"class":221},[47,73383,69220],{"class":51354},[47,73385,66705],{"class":53},[47,73387,267],{"class":221},[47,73389,69383],{"class":81},[47,73391,69386],{"class":221},[47,73393,69220],{"class":51354},[47,73395,51361],{"class":221},[47,73397,73398,73400,73402,73404,73406,73408,73410,73412],{"class":49,"line":32983},[47,73399,55288],{"class":221},[47,73401,69220],{"class":51354},[47,73403,66705],{"class":53},[47,73405,267],{"class":221},[47,73407,69403],{"class":81},[47,73409,69406],{"class":221},[47,73411,69220],{"class":51354},[47,73413,51361],{"class":221},[47,73415,73416,73418,73420],{"class":49,"line":32989},[47,73417,51830],{"class":221},[47,73419,69198],{"class":51354},[47,73421,51361],{"class":221},[47,73423,73424,73426,73428],{"class":49,"line":33000},[47,73425,51395],{"class":221},[47,73427,53941],{"class":51354},[47,73429,51361],{"class":221},[47,73431,73432,73434,73436,73439,73441,73444,73446],{"class":49,"line":33006},[47,73433,55288],{"class":221},[47,73435,47],{"class":51354},[47,73437,73438],{"class":221},">+\u003C\u002F",[47,73440,47],{"class":51354},[47,73442,73443],{"class":221},">添加\u003C\u002F",[47,73445,53941],{"class":51354},[47,73447,51361],{"class":221},[47,73449,73450,73452,73454],{"class":49,"line":33026},[47,73451,52471],{"class":221},[47,73453,66679],{"class":51354},[47,73455,51361],{"class":221},[47,73457,73458,73460,73462,73464,73466,73468,73471,73473,73476,73478,73481,73483],{"class":49,"line":33042},[47,73459,52198],{"class":221},[47,73461,51665],{"class":51354},[47,73463,53540],{"class":53},[47,73465,267],{"class":221},[47,73467,62634],{"class":81},[47,73469,73470],{"class":221},">共有数据 \u003C",[47,73472,47],{"class":51354},[47,73474,73475],{"class":221},">0\u003C\u002F",[47,73477,47],{"class":51354},[47,73479,73480],{"class":221},"> 条\u003C\u002F",[47,73482,51665],{"class":51354},[47,73484,51361],{"class":221},[47,73486,73487,73489,73491],{"class":49,"line":33048},[47,73488,52198],{"class":221},[47,73490,357],{"class":51354},[47,73492,51361],{"class":221},[47,73494,73495,73497,73499],{"class":49,"line":33062},[47,73496,51395],{"class":221},[47,73498,360],{"class":51354},[47,73500,51361],{"class":221},[47,73502,73503,73505,73507],{"class":49,"line":33068},[47,73504,55288],{"class":221},[47,73506,363],{"class":51354},[47,73508,51361],{"class":221},[47,73510,73511,73513,73515,73518,73520],{"class":49,"line":33074},[47,73512,55356],{"class":221},[47,73514,366],{"class":51354},[47,73516,73517],{"class":221},">ID\u003C\u002F",[47,73519,366],{"class":51354},[47,73521,51361],{"class":221},[47,73523,73524,73526,73528,73530,73532],{"class":49,"line":33085},[47,73525,55356],{"class":221},[47,73527,366],{"class":51354},[47,73529,69509],{"class":221},[47,73531,366],{"class":51354},[47,73533,51361],{"class":221},[47,73535,73536,73538,73540,73542,73544],{"class":49,"line":33091},[47,73537,55356],{"class":221},[47,73539,366],{"class":51354},[47,73541,69522],{"class":221},[47,73543,366],{"class":51354},[47,73545,51361],{"class":221},[47,73547,73548,73550,73552,73554,73556],{"class":49,"line":33097},[47,73549,55356],{"class":221},[47,73551,366],{"class":51354},[47,73553,69535],{"class":221},[47,73555,366],{"class":51354},[47,73557,51361],{"class":221},[47,73559,73560,73562,73564,73566,73568],{"class":49,"line":33107},[47,73561,55356],{"class":221},[47,73563,366],{"class":51354},[47,73565,69548],{"class":221},[47,73567,366],{"class":51354},[47,73569,51361],{"class":221},[47,73571,73572,73574,73576,73578,73580],{"class":49,"line":33113},[47,73573,55356],{"class":221},[47,73575,366],{"class":51354},[47,73577,69561],{"class":221},[47,73579,366],{"class":51354},[47,73581,51361],{"class":221},[47,73583,73584,73586,73588,73591,73593],{"class":49,"line":33124},[47,73585,55356],{"class":221},[47,73587,366],{"class":51354},[47,73589,73590],{"class":221},">录入时间\u003C\u002F",[47,73592,366],{"class":51354},[47,73594,51361],{"class":221},[47,73596,73597,73599,73601,73603,73605],{"class":49,"line":33130},[47,73598,55356],{"class":221},[47,73600,366],{"class":51354},[47,73602,69574],{"class":221},[47,73604,366],{"class":51354},[47,73606,51361],{"class":221},[47,73608,73609,73611,73613],{"class":49,"line":33140},[47,73610,55461],{"class":221},[47,73612,363],{"class":51354},[47,73614,51361],{"class":221},[47,73616,73617,73619,73621],{"class":49,"line":33145},[47,73618,51830],{"class":221},[47,73620,360],{"class":51354},[47,73622,51361],{"class":221},[47,73624,73625,73627,73629],{"class":49,"line":33151},[47,73626,51395],{"class":221},[47,73628,404],{"class":51354},[47,73630,51361],{"class":221},[47,73632,73633],{"class":49,"line":33200},[47,73634,73635],{"class":279},"      \u003C!-- \u003Ctr>\n",[47,73637,73638],{"class":49,"line":33247},[47,73639,73640],{"class":279},"        \u003Ctd>1\u003C\u002Ftd>\n",[47,73642,73643],{"class":49,"line":33252},[47,73644,73640],{"class":279},[47,73646,73647],{"class":49,"line":33258},[47,73648,73640],{"class":279},[47,73650,73651],{"class":49,"line":33277},[47,73652,73640],{"class":279},[47,73654,73655],{"class":49,"line":33283},[47,73656,73640],{"class":279},[47,73658,73659],{"class":49,"line":33303},[47,73660,73640],{"class":279},[47,73662,73663],{"class":49,"line":33309},[47,73664,73640],{"class":279},[47,73666,73667],{"class":49,"line":33315},[47,73668,73669],{"class":279},"        \u003Ctd>\n",[47,73671,73672],{"class":49,"line":33325},[47,73673,73674],{"class":279},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[47,73676,73677],{"class":49,"line":33330},[47,73678,73679],{"class":279},"        \u003C\u002Ftd>\n",[47,73681,73682],{"class":49,"line":33336},[47,73683,73684],{"class":279},"      \u003C\u002Ftr> -->\n",[47,73686,73687,73689,73691],{"class":49,"line":33352},[47,73688,51830],{"class":221},[47,73690,404],{"class":51354},[47,73692,51361],{"class":221},[47,73694,73695,73697,73699],{"class":49,"line":33397},[47,73696,52471],{"class":221},[47,73698,357],{"class":51354},[47,73700,51361],{"class":221},[47,73702,73703,73705,73707],{"class":49,"line":33403},[47,73704,52198],{"class":221},[47,73706,51867],{"class":51354},[47,73708,51361],{"class":221},[47,73710,73711],{"class":49,"line":33409},[47,73712,73713],{"class":279},"    \u002F\u002F const initData = [{\n",[47,73715,73716],{"class":49,"line":33415},[47,73717,73718],{"class":279},"    \u002F\u002F   unameId: 1,\n",[47,73720,73721],{"class":49,"line":33426},[47,73722,73723],{"class":279},"    \u002F\u002F   uname: '华晨宇',\n",[47,73725,73726],{"class":49,"line":33432},[47,73727,73728],{"class":279},"    \u002F\u002F   age: 22,\n",[47,73730,73731],{"class":49,"line":33438},[47,73732,73733],{"class":279},"    \u002F\u002F   salary: 12000,\n",[47,73735,73736],{"class":49,"line":33444},[47,73737,73738],{"class":279},"    \u002F\u002F   gender: '男',\n",[47,73740,73741],{"class":49,"line":33462},[47,73742,73743],{"class":279},"    \u002F\u002F   city: '北京',\n",[47,73745,73746],{"class":49,"line":33476},[47,73747,73748],{"class":279},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[47,73750,73751],{"class":49,"line":33485},[47,73752,73753],{"class":279},"    \u002F\u002F }]\n",[47,73755,73756],{"class":49,"line":33494},[47,73757,73758],{"class":279},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[47,73760,73761],{"class":49,"line":33503},[47,73762,73763],{"class":279},"    \u002F\u002F 1.渲染业务\n",[47,73765,73766],{"class":49,"line":33512},[47,73767,73768],{"class":279},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[47,73770,73771],{"class":49,"line":33518},[47,73772,73773],{"class":279},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[47,73775,73776],{"class":49,"line":33524},[47,73777,73778],{"class":279},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[47,73780,73781],{"class":49,"line":33532},[47,73782,2493],{"emptyLinePlaceholder":145},[47,73784,73785],{"class":49,"line":33537},[47,73786,73787],{"class":279},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[47,73789,73790],{"class":49,"line":33543},[47,73791,73792],{"class":279},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[47,73794,73795,73797,73799,73801],{"class":49,"line":33554},[47,73796,11314],{"class":217},[47,73798,57749],{"class":85},[47,73800,13657],{"class":217},[47,73802,51892],{"class":221},[47,73804,73805,73808,73810],{"class":49,"line":33560},[47,73806,73807],{"class":221},"    console.",[47,73809,58301],{"class":53},[47,73811,52466],{"class":221},[47,73813,73814],{"class":49,"line":33580},[47,73815,2493],{"emptyLinePlaceholder":145},[47,73817,73818],{"class":49,"line":33586},[47,73819,73820],{"class":279},"    \u002F\u002F 时间函数\n",[47,73822,73823,73825,73828],{"class":49,"line":33592},[47,73824,70138],{"class":217},[47,73826,73827],{"class":53}," getTime",[47,73829,10946],{"class":221},[47,73831,73832,73834,73837,73839,73841,73844],{"class":49,"line":33598},[47,73833,58282],{"class":217},[47,73835,73836],{"class":85}," date",[47,73838,13657],{"class":217},[47,73840,11671],{"class":217},[47,73842,73843],{"class":53}," Date",[47,73845,2069],{"class":221},[47,73847,73848,73850,73852,73854,73857,73860,73862,73864,73866,73869,73872,73874,73876,73878,73880,73882,73884,73886],{"class":49,"line":33615},[47,73849,58282],{"class":217},[47,73851,16184],{"class":85},[47,73853,13657],{"class":217},[47,73855,73856],{"class":221}," date.",[47,73858,73859],{"class":53},"getHours",[47,73861,13143],{"class":221},[47,73863,1129],{"class":217},[47,73865,2131],{"class":85},[47,73867,73868],{"class":217}," ?",[47,73870,73871],{"class":81}," '0'",[47,73873,45620],{"class":217},[47,73875,73856],{"class":221},[47,73877,73859],{"class":53},[47,73879,13143],{"class":221},[47,73881,1078],{"class":217},[47,73883,73856],{"class":221},[47,73885,73859],{"class":53},[47,73887,2069],{"class":221},[47,73889,73890,73892,73895,73897,73899,73902,73904,73906,73908,73910,73912,73914,73916,73918,73920,73922,73924,73926],{"class":49,"line":33621},[47,73891,58282],{"class":217},[47,73893,73894],{"class":85}," m",[47,73896,13657],{"class":217},[47,73898,73856],{"class":221},[47,73900,73901],{"class":53},"getMinutes",[47,73903,13143],{"class":221},[47,73905,1129],{"class":217},[47,73907,2131],{"class":85},[47,73909,73868],{"class":217},[47,73911,73871],{"class":81},[47,73913,45620],{"class":217},[47,73915,73856],{"class":221},[47,73917,73901],{"class":53},[47,73919,13143],{"class":221},[47,73921,1078],{"class":217},[47,73923,73856],{"class":221},[47,73925,73901],{"class":53},[47,73927,2069],{"class":221},[47,73929,73930,73932,73934,73936,73938,73941,73943,73945,73947,73949,73951,73953,73955,73957,73959,73961,73963,73965],{"class":49,"line":33627},[47,73931,58282],{"class":217},[47,73933,8521],{"class":85},[47,73935,13657],{"class":217},[47,73937,73856],{"class":221},[47,73939,73940],{"class":53},"getSeconds",[47,73942,13143],{"class":221},[47,73944,1129],{"class":217},[47,73946,2131],{"class":85},[47,73948,73868],{"class":217},[47,73950,73871],{"class":81},[47,73952,45620],{"class":217},[47,73954,73856],{"class":221},[47,73956,73940],{"class":53},[47,73958,13143],{"class":221},[47,73960,1078],{"class":217},[47,73962,73856],{"class":221},[47,73964,73940],{"class":53},[47,73966,2069],{"class":221},[47,73968,73969,73971,73974,73976,73978,73981,73983,73986,73988,73991,73993,73995,73998,74000,74002,74004,74006,74008,74010,74013,74015,74018,74020,74023,74025,74027,74029],{"class":49,"line":33633},[47,73970,58282],{"class":217},[47,73972,73973],{"class":85}," str",[47,73975,13657],{"class":217},[47,73977,62957],{"class":81},[47,73979,73980],{"class":221},"date",[47,73982,777],{"class":81},[47,73984,73985],{"class":53},"getFullYear",[47,73987,2520],{"class":81},[47,73989,73990],{"class":81},"}\u002F${",[47,73992,73980],{"class":221},[47,73994,777],{"class":81},[47,73996,73997],{"class":53},"getMonth",[47,73999,13143],{"class":81},[47,74001,700],{"class":217},[47,74003,25172],{"class":85},[47,74005,73990],{"class":81},[47,74007,73980],{"class":221},[47,74009,777],{"class":81},[47,74011,74012],{"class":53},"getDate",[47,74014,2520],{"class":81},[47,74016,74017],{"class":81},"} ${",[47,74019,634],{"class":221},[47,74021,74022],{"class":81},"}:${",[47,74024,763],{"class":221},[47,74026,74022],{"class":81},[47,74028,914],{"class":221},[47,74030,74031],{"class":81},"}`\n",[47,74033,74034,74037],{"class":49,"line":33639},[47,74035,74036],{"class":217},"      return",[47,74038,74039],{"class":221}," str\n",[47,74041,74042],{"class":49,"line":33645},[47,74043,2280],{"class":221},[47,74045,74046],{"class":49,"line":33672},[47,74047,74048],{"class":279},"    \u002F\u002F 渲染函数\n",[47,74050,74051,74053,74055,74057,74059,74061,74063,74065],{"class":49,"line":33696},[47,74052,11314],{"class":217},[47,74054,69801],{"class":85},[47,74056,13657],{"class":217},[47,74058,54450],{"class":221},[47,74060,54453],{"class":53},[47,74062,222],{"class":221},[47,74064,69812],{"class":81},[47,74066,228],{"class":221},[47,74068,74069,74071,74073],{"class":49,"line":33702},[47,74070,70138],{"class":217},[47,74072,70141],{"class":53},[47,74074,10946],{"class":221},[47,74076,74077],{"class":49,"line":33708},[47,74078,74079],{"class":279},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[47,74081,74082],{"class":49,"line":33714},[47,74083,74084],{"class":279},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[47,74086,74087,74089,74092,74094,74096,74099,74101,74103,74105,74108,74110,74113],{"class":49,"line":33725},[47,74088,58282],{"class":217},[47,74090,74091],{"class":85}," trArr",[47,74093,13657],{"class":217},[47,74095,52019],{"class":221},[47,74097,74098],{"class":53},"map",[47,74100,222],{"class":221},[47,74102,54503],{"class":217},[47,74104,1752],{"class":221},[47,74106,74107],{"class":5309},"ele",[47,74109,12528],{"class":221},[47,74111,74112],{"class":5309},"index",[47,74114,12535],{"class":221},[47,74116,74117,74119],{"class":49,"line":33736},[47,74118,14845],{"class":217},[47,74120,70222],{"class":81},[47,74122,74123],{"class":49,"line":33742},[47,74124,74125],{"class":81},"      \u003Ctr>\n",[47,74127,74128,74130,74132,74134,74137],{"class":49,"line":33759},[47,74129,70227],{"class":81},[47,74131,74107],{"class":221},[47,74133,777],{"class":81},[47,74135,74136],{"class":221},"unameId",[47,74138,70242],{"class":81},[47,74140,74141,74143,74145,74147,74149],{"class":49,"line":33782},[47,74142,70227],{"class":81},[47,74144,74107],{"class":221},[47,74146,777],{"class":81},[47,74148,70258],{"class":221},[47,74150,70242],{"class":81},[47,74152,74153,74155,74157,74159,74161],{"class":49,"line":33805},[47,74154,70227],{"class":81},[47,74156,74107],{"class":221},[47,74158,777],{"class":81},[47,74160,70275],{"class":221},[47,74162,70242],{"class":81},[47,74164,74165,74167,74169,74171,74173],{"class":49,"line":33811},[47,74166,70227],{"class":81},[47,74168,74107],{"class":221},[47,74170,777],{"class":81},[47,74172,70292],{"class":221},[47,74174,70242],{"class":81},[47,74176,74177,74179,74181,74183,74185],{"class":49,"line":33816},[47,74178,70227],{"class":81},[47,74180,74107],{"class":221},[47,74182,777],{"class":81},[47,74184,70309],{"class":221},[47,74186,70242],{"class":81},[47,74188,74189,74191,74193,74195,74197],{"class":49,"line":33825},[47,74190,70227],{"class":81},[47,74192,74107],{"class":221},[47,74194,777],{"class":81},[47,74196,70326],{"class":221},[47,74198,70242],{"class":81},[47,74200,74201,74203,74205,74207,74209],{"class":49,"line":33835},[47,74202,70227],{"class":81},[47,74204,74107],{"class":221},[47,74206,777],{"class":81},[47,74208,2480],{"class":221},[47,74210,70242],{"class":81},[47,74212,74213],{"class":49,"line":33841},[47,74214,73669],{"class":81},[47,74216,74217,74220,74222],{"class":49,"line":33846},[47,74218,74219],{"class":81},"          \u003Ca href=\"#\" data-id=\"${",[47,74221,74112],{"class":221},[47,74223,74224],{"class":81},"}\">删除\u003C\u002Fa>\n",[47,74226,74227],{"class":49,"line":33852},[47,74228,73679],{"class":81},[47,74230,74231],{"class":49,"line":33865},[47,74232,74233],{"class":81},"      \u003C\u002Ftr>\n",[47,74235,74236],{"class":49,"line":33871},[47,74237,74238],{"class":81},"  `\n",[47,74240,74241],{"class":49,"line":33882},[47,74242,64869],{"class":221},[47,74244,74245,74247,74249],{"class":49,"line":33893},[47,74246,58298],{"class":221},[47,74248,58301],{"class":53},[47,74250,74251],{"class":221},"(trArr)\n",[47,74253,74254],{"class":49,"line":33912},[47,74255,2493],{"emptyLinePlaceholder":145},[47,74257,74258],{"class":49,"line":49572},[47,74259,74260],{"class":279},"      \u002F\u002F (2) 把数组转换为字符串join\n",[47,74262,74263],{"class":49,"line":49577},[47,74264,74265],{"class":279},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[47,74267,74268,74270,74272,74275,74278,74280,74283],{"class":49,"line":49586},[47,74269,70153],{"class":221},[47,74271,267],{"class":217},[47,74273,74274],{"class":221}," trArr.",[47,74276,74277],{"class":53},"join",[47,74279,222],{"class":221},[47,74281,74282],{"class":81},"''",[47,74284,228],{"class":221},[47,74286,74287],{"class":49,"line":49595},[47,74288,74289],{"class":279},"      \u002F\u002F 显示共有几条\n",[47,74291,74292,74294,74296,74298,74301,74304,74306,74308],{"class":49,"line":49600},[47,74293,55825],{"class":221},[47,74295,54453],{"class":53},[47,74297,222],{"class":221},[47,74299,74300],{"class":81},"'.total span'",[47,74302,74303],{"class":221},").innerHTML ",[47,74305,267],{"class":217},[47,74307,52019],{"class":221},[47,74309,55885],{"class":85},[47,74311,74312],{"class":49,"line":49605},[47,74313,2280],{"class":221},[47,74315,74316],{"class":49,"line":49610},[47,74317,74318],{"class":279},"    \u002F\u002F render()\n",[47,74320,74321],{"class":49,"line":49623},[47,74322,2493],{"emptyLinePlaceholder":145},[47,74324,74325],{"class":49,"line":49628},[47,74326,74327],{"class":279},"    \u002F\u002F 获取DOM对象\n",[47,74329,74330,74332,74334,74336,74338,74340,74342,74344],{"class":49,"line":49637},[47,74331,11314],{"class":217},[47,74333,69875],{"class":85},[47,74335,13657],{"class":217},[47,74337,54450],{"class":221},[47,74339,54453],{"class":53},[47,74341,222],{"class":221},[47,74343,69886],{"class":81},[47,74345,228],{"class":221},[47,74347,74348,74350,74352,74354,74356,74358,74360,74362],{"class":49,"line":49646},[47,74349,11314],{"class":217},[47,74351,69702],{"class":85},[47,74353,13657],{"class":217},[47,74355,54450],{"class":221},[47,74357,54453],{"class":53},[47,74359,222],{"class":221},[47,74361,69713],{"class":81},[47,74363,228],{"class":221},[47,74365,74366,74368,74370,74372,74374,74376,74378,74380],{"class":49,"line":49663},[47,74367,11314],{"class":217},[47,74369,15782],{"class":85},[47,74371,13657],{"class":217},[47,74373,54450],{"class":221},[47,74375,54453],{"class":53},[47,74377,222],{"class":221},[47,74379,69732],{"class":81},[47,74381,228],{"class":221},[47,74383,74385,74387,74389,74391,74393,74395,74397,74399],{"class":49,"line":74384},231,[47,74386,11314],{"class":217},[47,74388,69761],{"class":85},[47,74390,13657],{"class":217},[47,74392,54450],{"class":221},[47,74394,54453],{"class":53},[47,74396,222],{"class":221},[47,74398,69772],{"class":81},[47,74400,228],{"class":221},[47,74402,74404,74406,74408,74410,74412,74414,74416,74418],{"class":49,"line":74403},232,[47,74405,11314],{"class":217},[47,74407,69741],{"class":85},[47,74409,13657],{"class":217},[47,74411,54450],{"class":221},[47,74413,54453],{"class":53},[47,74415,222],{"class":221},[47,74417,69752],{"class":81},[47,74419,228],{"class":221},[47,74421,74423,74425,74427,74429,74431,74433,74435,74437],{"class":49,"line":74422},233,[47,74424,11314],{"class":217},[47,74426,69781],{"class":85},[47,74428,13657],{"class":217},[47,74430,54450],{"class":221},[47,74432,54453],{"class":53},[47,74434,222],{"class":221},[47,74436,69792],{"class":81},[47,74438,228],{"class":221},[47,74440,74442],{"class":49,"line":74441},234,[47,74443,2493],{"emptyLinePlaceholder":145},[47,74445,74447],{"class":49,"line":74446},235,[47,74448,74449],{"class":279},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[47,74451,74453,74455,74457,74459,74461,74463,74465,74467,74469],{"class":49,"line":74452},236,[47,74454,69893],{"class":221},[47,74456,57867],{"class":53},[47,74458,222],{"class":221},[47,74460,69900],{"class":81},[47,74462,12528],{"class":221},[47,74464,54503],{"class":217},[47,74466,1752],{"class":221},[47,74468,295],{"class":5309},[47,74470,12535],{"class":221},[47,74472,74474],{"class":49,"line":74473},237,[47,74475,74476],{"class":279},"      \u002F\u002F 禁止浏览器跳转\n",[47,74478,74480,74482,74484],{"class":49,"line":74479},238,[47,74481,69920],{"class":221},[47,74483,69923],{"class":53},[47,74485,2069],{"class":221},[47,74487,74489],{"class":49,"line":74488},239,[47,74490,74491],{"class":279},"      \u002F\u002F 非空判断\n",[47,74493,74495],{"class":49,"line":74494},240,[47,74496,74497],{"class":279},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[47,74499,74501],{"class":49,"line":74500},241,[47,74502,74503],{"class":279},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[47,74505,74507,74509,74511,74513,74516,74518,74521,74524,74526,74528],{"class":49,"line":74506},242,[47,74508,54534],{"class":217},[47,74510,1752],{"class":221},[47,74512,445],{"class":217},[47,74514,74515],{"class":221},"uname.value ",[47,74517,71411],{"class":217},[47,74519,74520],{"class":217}," !",[47,74522,74523],{"class":221},"age.value ",[47,74525,71411],{"class":217},[47,74527,74520],{"class":217},[47,74529,74530],{"class":221},"salary.value) {\n",[47,74532,74534,74536,74538,74540,74542],{"class":49,"line":74533},243,[47,74535,14845],{"class":217},[47,74537,69994],{"class":53},[47,74539,222],{"class":221},[47,74541,69999],{"class":81},[47,74543,228],{"class":221},[47,74545,74547],{"class":49,"line":74546},244,[47,74548,52452],{"class":221},[47,74550,74552,74554,74556],{"class":49,"line":74551},245,[47,74553,58061],{"class":221},[47,74555,51938],{"class":53},[47,74557,74558],{"class":221},"({\n",[47,74560,74562],{"class":49,"line":74561},246,[47,74563,74564],{"class":279},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[47,74566,74568],{"class":49,"line":74567},247,[47,74569,74570],{"class":279},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[47,74572,74574],{"class":49,"line":74573},248,[47,74575,74576],{"class":279},"        \u002F\u002F 对象的序号应为数组长度+1\n",[47,74578,74580],{"class":49,"line":74579},249,[47,74581,74582],{"class":279},"        \u002F\u002F unameId: arr.length + 1,\n",[47,74584,74586],{"class":49,"line":74585},250,[47,74587,2493],{"emptyLinePlaceholder":145},[47,74589,74591],{"class":49,"line":74590},251,[47,74592,74593],{"class":279},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[47,74595,74597],{"class":49,"line":74596},252,[47,74598,74599],{"class":279},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[47,74601,74603],{"class":49,"line":74602},253,[47,74604,74605],{"class":279},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[47,74607,74609],{"class":49,"line":74608},254,[47,74610,74611],{"class":279},"        \u002F\u002F 0当假看\n",[47,74613,74615,74618,74620,74622,74625,74627,74629,74631,74634,74636,74638,74641,74643],{"class":49,"line":74614},255,[47,74616,74617],{"class":221},"        unameId: arr.",[47,74619,52022],{"class":85},[47,74621,73868],{"class":217},[47,74623,74624],{"class":221}," arr[arr.",[47,74626,52022],{"class":85},[47,74628,52325],{"class":217},[47,74630,25172],{"class":85},[47,74632,74633],{"class":221},"].unameId ",[47,74635,700],{"class":217},[47,74637,25172],{"class":85},[47,74639,74640],{"class":217}," :",[47,74642,25172],{"class":85},[47,74644,31520],{"class":221},[47,74646,74648],{"class":49,"line":74647},256,[47,74649,70047],{"class":221},[47,74651,74653],{"class":49,"line":74652},257,[47,74654,70052],{"class":221},[47,74656,74658],{"class":49,"line":74657},258,[47,74659,70062],{"class":221},[47,74661,74663],{"class":49,"line":74662},259,[47,74664,70057],{"class":221},[47,74666,74668],{"class":49,"line":74667},260,[47,74669,74670],{"class":221},"        city: city.value,\n",[47,74672,74674],{"class":49,"line":74673},261,[47,74675,74676],{"class":279},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[47,74678,74680],{"class":49,"line":74679},262,[47,74681,74682],{"class":279},"        \u002F\u002F time: new Date().toDateString()\n",[47,74684,74686,74689,74692],{"class":49,"line":74685},263,[47,74687,74688],{"class":221},"        time: ",[47,74690,74691],{"class":53},"getTime",[47,74693,2069],{"class":221},[47,74695,74697],{"class":49,"line":74696},264,[47,74698,64869],{"class":221},[47,74700,74702],{"class":49,"line":74701},265,[47,74703,74704],{"class":279},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[47,74706,74708,74710],{"class":49,"line":74707},266,[47,74709,70122],{"class":53},[47,74711,2069],{"class":221},[47,74713,74715,74717,74719,74721,74723],{"class":49,"line":74714},267,[47,74716,70105],{"class":85},[47,74718,777],{"class":221},[47,74720,70110],{"class":53},[47,74722,13143],{"class":221},[47,74724,74725],{"class":279},"\u002F\u002F重置表单\n",[47,74727,74729],{"class":49,"line":74728},268,[47,74730,74731],{"class":279},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[47,74733,74735,74738,74740,74742,74745,74747,74749,74751,74753],{"class":49,"line":74734},269,[47,74736,74737],{"class":221},"      localStorage.",[47,74739,71708],{"class":53},[47,74741,222],{"class":221},[47,74743,74744],{"class":81},"'data'",[47,74746,12528],{"class":221},[47,74748,71718],{"class":85},[47,74750,777],{"class":221},[47,74752,71723],{"class":53},[47,74754,74755],{"class":221},"(arr))\n",[47,74757,74759],{"class":49,"line":74758},270,[47,74760,33515],{"class":221},[47,74762,74764],{"class":49,"line":74763},271,[47,74765,2493],{"emptyLinePlaceholder":145},[47,74767,74769],{"class":49,"line":74768},272,[47,74770,74771],{"class":279},"    \u002F\u002F 3.删除业务\n",[47,74773,74775],{"class":49,"line":74774},273,[47,74776,74777],{"class":279},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[47,74779,74781,74783,74785,74787,74789,74791,74793,74795,74797],{"class":49,"line":74780},274,[47,74782,70395],{"class":221},[47,74784,57867],{"class":53},[47,74786,222],{"class":221},[47,74788,57872],{"class":81},[47,74790,12528],{"class":221},[47,74792,54503],{"class":217},[47,74794,1752],{"class":221},[47,74796,295],{"class":5309},[47,74798,12535],{"class":221},[47,74800,74802],{"class":49,"line":74801},275,[47,74803,74804],{"class":279},"      \u002F\u002F 判断是否点击的是删除按钮\n",[47,74806,74808,74810,74812,74814,74816],{"class":49,"line":74807},276,[47,74809,54534],{"class":217},[47,74811,67088],{"class":221},[47,74813,54540],{"class":217},[47,74815,68310],{"class":81},[47,74817,12535],{"class":221},[47,74819,74821],{"class":49,"line":74820},277,[47,74822,74823],{"class":279},"        \u002F\u002F alert(1)\n",[47,74825,74827],{"class":49,"line":74826},278,[47,74828,74829],{"class":279},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[47,74831,74833],{"class":49,"line":74832},279,[47,74834,74835],{"class":279},"        \u002F\u002F console.log(e.target)\n",[47,74837,74839],{"class":49,"line":74838},280,[47,74840,74841],{"class":279},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[47,74843,74845],{"class":49,"line":74844},281,[47,74846,2493],{"emptyLinePlaceholder":145},[47,74848,74850],{"class":49,"line":74849},282,[47,74851,74852],{"class":279},"        \u002F\u002F 确认框，确然是否真的要删除\n",[47,74854,74856],{"class":49,"line":74855},283,[47,74857,74858],{"class":279},"        \u002F\u002F confirm()为确认框\n",[47,74860,74862],{"class":49,"line":74861},284,[47,74863,74864],{"class":279},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[47,74866,74868,74870,74872,74875,74877,74880],{"class":49,"line":74867},285,[47,74869,2590],{"class":217},[47,74871,1752],{"class":221},[47,74873,74874],{"class":53},"confirm",[47,74876,222],{"class":221},[47,74878,74879],{"class":81},"'您确定要删除这条数据吗？'",[47,74881,74882],{"class":221},")) {\n",[47,74884,74886,74889,74891,74893,74895],{"class":49,"line":74885},286,[47,74887,74888],{"class":221},"          arr.",[47,74890,58064],{"class":53},[47,74892,70448],{"class":221},[47,74894,436],{"class":85},[47,74896,228],{"class":221},[47,74898,74900],{"class":49,"line":74899},287,[47,74901,74902],{"class":279},"          \u002F\u002F 3.4 重新渲染页面\n",[47,74904,74906,74909],{"class":49,"line":74905},288,[47,74907,74908],{"class":53},"          render",[47,74910,2069],{"class":221},[47,74912,74914],{"class":49,"line":74913},289,[47,74915,74916],{"class":279},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[47,74918,74920,74923,74925,74927,74929,74931,74933,74935,74937],{"class":49,"line":74919},290,[47,74921,74922],{"class":221},"          localStorage.",[47,74924,71708],{"class":53},[47,74926,222],{"class":221},[47,74928,74744],{"class":81},[47,74930,12528],{"class":221},[47,74932,71718],{"class":85},[47,74934,777],{"class":221},[47,74936,71723],{"class":53},[47,74938,74755],{"class":221},[47,74940,74942],{"class":49,"line":74941},291,[47,74943,2622],{"class":221},[47,74945,74947],{"class":49,"line":74946},292,[47,74948,52452],{"class":221},[47,74950,74952],{"class":49,"line":74951},293,[47,74953,2493],{"emptyLinePlaceholder":145},[47,74955,74957],{"class":49,"line":74956},294,[47,74958,33515],{"class":221},[47,74960,74962],{"class":49,"line":74961},295,[47,74963,2493],{"emptyLinePlaceholder":145},[47,74965,74967,74969,74971],{"class":49,"line":74966},296,[47,74968,52471],{"class":221},[47,74970,51867],{"class":51354},[47,74972,51361],{"class":221},[47,74974,74976,74978,74980],{"class":49,"line":74975},297,[47,74977,51839],{"class":221},[47,74979,51854],{"class":51354},[47,74981,51361],{"class":221},[47,74983,74985],{"class":49,"line":74984},298,[47,74986,2493],{"emptyLinePlaceholder":145},[47,74988,74990,74992,74994],{"class":49,"line":74989},299,[47,74991,51839],{"class":221},[47,74993,50689],{"class":51354},[47,74995,51361],{"class":221},[14,74997,74999],{"id":74998},"_36-正则表达式","3.6 正则表达式",[19,75001,75002],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,75004,75005],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,75007,75008],{},"正则表达式的作用：",[106,75010,75011,75018,75024],{},[109,75012,75013,75014,75017],{},"表单验证（ ",[369,75015,75016],{},"匹配"," ）",[109,75019,75020,75021,75017],{},"过滤敏感词（ ",[369,75022,75023],{},"替换",[109,75025,75026,75027,75017],{},"字符串中提取我们想要的部分（ ",[369,75028,75029],{},"提取",[187,75031,75033],{"id":75032},"_361-语法","3.6.1 语法",[19,75035,75036],{},"正则表达式使用步骤：",[171,75038,75039,75042],{},[109,75040,75041],{},"定义规则",[109,75043,75044],{},"查找是否匹配",[19,75046,75047],{},"正则表达式里边不需要写引号",[19,75049,75050],{},[1556,75051],{"alt":43,"src":75052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,75054,75055],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,75057,75058],{},"reg.test(str)",[19,75060,75061],{},[1556,75062],{"alt":43,"src":75063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,75065,75066],{},[1556,75067],{"alt":43,"src":75068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[187,75070,75072],{"id":75071},"_362-元字符","3.6.2 元字符",[171,75074,75075,75078,75081,75084,75091],{},[109,75076,75077],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[109,75079,75080],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[109,75082,75083],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[109,75085,75086,75087],{},"正则验证工具：",[457,75088,75089],{"href":75089,"rel":75090},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[23956],[109,75092,75093],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22091,75095,75097],{"id":75096},"_3621-边界符","3.6.2.1 边界符",[19,75099,75100],{},[1556,75101],{"alt":43,"src":75102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,75104,75105],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,75107,75108],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,75110,75111],{},"只匹配一次",[19,75113,75114],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22091,75116,75118],{"id":75117},"_3622-量词","3.6.2.2 量词",[19,75120,75121],{},[1556,75122],{"alt":43,"src":75123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,75125,75126],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22091,75128,75130],{"id":75129},"_3623-元字符","3.6.2.3 元字符",[19,75132,75133],{},[1556,75134],{"alt":43,"src":75135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,75137,75138],{},"匹配的是a或b或c []只选一个",[19,75140,75141],{},[1556,75142],{"alt":43,"src":75143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,75145,75146],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,75148,75149],{},[1556,75150],{"alt":43,"src":75151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,75153,75154],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,75156,75157],{},[1556,75158],{"alt":43,"src":75159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[38,75161,75163],{"className":50687,"code":75162,"language":50689,"meta":43,"style":43},"\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",[26,75164,75165,75175,75189,75193,75201,75215,75235,75247,75255,75259,75267,75275,75280,75311,75338,75366,75370,75375,75403,75434,75439,75444,75475,75507,75539,75543,75548,75579,75609,75639,75643,75648,75679,75710,75740,75770,75774,75779,75812,75816,75821,75852,75883,75887,75892,75923,75953,75984,75988,75993,76025,76056,76087,76114,76145,76177,76210,76241,76272,76304,76335,76343,76351,76355],{"__ignoreMap":43},[47,75166,75167,75169,75171,75173],{"class":49,"line":50},[47,75168,51351],{"class":221},[47,75170,51355],{"class":51354},[47,75172,51358],{"class":53},[47,75174,51361],{"class":221},[47,75176,75177,75179,75181,75183,75185,75187],{"class":49,"line":92},[47,75178,1129],{"class":221},[47,75180,50689],{"class":51354},[47,75182,51370],{"class":53},[47,75184,267],{"class":221},[47,75186,51375],{"class":81},[47,75188,51361],{"class":221},[47,75190,75191],{"class":49,"line":1273},[47,75192,2493],{"emptyLinePlaceholder":145},[47,75194,75195,75197,75199],{"class":49,"line":1288},[47,75196,1129],{"class":221},[47,75198,51388],{"class":51354},[47,75200,51361],{"class":221},[47,75202,75203,75205,75207,75209,75211,75213],{"class":49,"line":1294},[47,75204,52198],{"class":221},[47,75206,51398],{"class":51354},[47,75208,51401],{"class":53},[47,75210,267],{"class":221},[47,75212,51406],{"class":81},[47,75214,51361],{"class":221},[47,75216,75217,75219,75221,75223,75225,75227,75229,75231,75233],{"class":49,"line":1308},[47,75218,52198],{"class":221},[47,75220,51398],{"class":51354},[47,75222,15013],{"class":53},[47,75224,267],{"class":221},[47,75226,51445],{"class":81},[47,75228,51425],{"class":53},[47,75230,267],{"class":221},[47,75232,51452],{"class":81},[47,75234,51361],{"class":221},[47,75236,75237,75239,75241,75243,75245],{"class":49,"line":1314},[47,75238,52198],{"class":221},[47,75240,51461],{"class":51354},[47,75242,51464],{"class":221},[47,75244,51461],{"class":51354},[47,75246,51361],{"class":221},[47,75248,75249,75251,75253],{"class":49,"line":1405},[47,75250,51839],{"class":221},[47,75252,51388],{"class":51354},[47,75254,51361],{"class":221},[47,75256,75257],{"class":49,"line":1411},[47,75258,2493],{"emptyLinePlaceholder":145},[47,75260,75261,75263,75265],{"class":49,"line":1423},[47,75262,1129],{"class":221},[47,75264,51854],{"class":51354},[47,75266,51361],{"class":221},[47,75268,75269,75271,75273],{"class":49,"line":1706},[47,75270,52198],{"class":221},[47,75272,51867],{"class":51354},[47,75274,51361],{"class":221},[47,75276,75277],{"class":49,"line":1711},[47,75278,75279],{"class":279},"    \u002F\u002F 元字符中\n",[47,75281,75282,75284,75286,75288,75290,75293,75295,75297,75300,75302,75305,75308],{"class":49,"line":1717},[47,75283,73807],{"class":221},[47,75285,58301],{"class":53},[47,75287,222],{"class":221},[47,75289,803],{"class":81},[47,75291,75292],{"class":48031},"哈",[47,75294,803],{"class":81},[47,75296,777],{"class":221},[47,75298,75299],{"class":53},"test",[47,75301,222],{"class":221},[47,75303,75304],{"class":81},"'哈'",[47,75306,75307],{"class":221},"))  ",[47,75309,75310],{"class":279},"\u002F\u002Ftrue\n",[47,75312,75313,75315,75317,75319,75321,75323,75325,75327,75329,75331,75334,75336],{"class":49,"line":1722},[47,75314,73807],{"class":221},[47,75316,58301],{"class":53},[47,75318,222],{"class":221},[47,75320,803],{"class":81},[47,75322,75292],{"class":48031},[47,75324,803],{"class":81},[47,75326,777],{"class":221},[47,75328,75299],{"class":53},[47,75330,222],{"class":221},[47,75332,75333],{"class":81},"'哈哈'",[47,75335,75307],{"class":221},[47,75337,75310],{"class":279},[47,75339,75340,75342,75344,75346,75348,75350,75352,75354,75356,75358,75361,75364],{"class":49,"line":1736},[47,75341,73807],{"class":221},[47,75343,58301],{"class":53},[47,75345,222],{"class":221},[47,75347,803],{"class":81},[47,75349,75292],{"class":48031},[47,75351,803],{"class":81},[47,75353,777],{"class":221},[47,75355,75299],{"class":53},[47,75357,222],{"class":221},[47,75359,75360],{"class":81},"'二哈'",[47,75362,75363],{"class":221},"))   ",[47,75365,75310],{"class":279},[47,75367,75368],{"class":49,"line":1741},[47,75369,2493],{"emptyLinePlaceholder":145},[47,75371,75372],{"class":49,"line":1747},[47,75373,75374],{"class":279},"    \u002F\u002F 1.边界符\n",[47,75376,75377,75379,75381,75383,75385,75387,75389,75391,75393,75395,75397,75399,75401],{"class":49,"line":1768},[47,75378,73807],{"class":221},[47,75380,58301],{"class":53},[47,75382,222],{"class":221},[47,75384,803],{"class":81},[47,75386,1185],{"class":217},[47,75388,75292],{"class":48031},[47,75390,803],{"class":81},[47,75392,777],{"class":221},[47,75394,75299],{"class":53},[47,75396,222],{"class":221},[47,75398,75304],{"class":81},[47,75400,75307],{"class":221},[47,75402,75310],{"class":279},[47,75404,75405,75407,75409,75411,75413,75415,75417,75419,75421,75423,75425,75427,75429,75431],{"class":49,"line":1773},[47,75406,73807],{"class":221},[47,75408,58301],{"class":53},[47,75410,222],{"class":221},[47,75412,803],{"class":81},[47,75414,1185],{"class":217},[47,75416,75292],{"class":48031},[47,75418,521],{"class":217},[47,75420,803],{"class":81},[47,75422,777],{"class":221},[47,75424,75299],{"class":53},[47,75426,222],{"class":221},[47,75428,75333],{"class":81},[47,75430,75307],{"class":221},[47,75432,75433],{"class":279},"\u002F\u002Ffalse\n",[47,75435,75436],{"class":49,"line":1787},[47,75437,75438],{"class":279},"    \u002F\u002F 2.量词\n",[47,75440,75441],{"class":49,"line":1792},[47,75442,75443],{"class":279},"    \u002F\u002F 量词 * 类似于 >= 0\n",[47,75445,75446,75448,75450,75452,75454,75456,75458,75461,75463,75465,75467,75469,75471,75473],{"class":49,"line":1821},[47,75447,73807],{"class":221},[47,75449,58301],{"class":53},[47,75451,222],{"class":221},[47,75453,803],{"class":81},[47,75455,1185],{"class":217},[47,75457,75292],{"class":48031},[47,75459,75460],{"class":217},"*$",[47,75462,803],{"class":81},[47,75464,777],{"class":221},[47,75466,75299],{"class":53},[47,75468,222],{"class":221},[47,75470,75333],{"class":81},[47,75472,75307],{"class":221},[47,75474,75310],{"class":279},[47,75476,75477,75479,75481,75483,75485,75487,75489,75491,75493,75495,75497,75499,75502,75504],{"class":49,"line":1826},[47,75478,73807],{"class":221},[47,75480,58301],{"class":53},[47,75482,222],{"class":221},[47,75484,803],{"class":81},[47,75486,1185],{"class":217},[47,75488,75292],{"class":48031},[47,75490,75460],{"class":217},[47,75492,803],{"class":81},[47,75494,777],{"class":221},[47,75496,75299],{"class":53},[47,75498,222],{"class":221},[47,75500,75501],{"class":81},"'二哈好傻'",[47,75503,75307],{"class":221},[47,75505,75506],{"class":279},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[47,75508,75509,75511,75513,75515,75517,75519,75521,75523,75525,75527,75529,75531,75534,75536],{"class":49,"line":1843},[47,75510,73807],{"class":221},[47,75512,58301],{"class":53},[47,75514,222],{"class":221},[47,75516,803],{"class":81},[47,75518,1185],{"class":217},[47,75520,75292],{"class":48031},[47,75522,75460],{"class":217},[47,75524,803],{"class":81},[47,75526,777],{"class":221},[47,75528,75299],{"class":53},[47,75530,222],{"class":221},[47,75532,75533],{"class":81},"'哈好哈'",[47,75535,75363],{"class":221},[47,75537,75538],{"class":279},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[47,75540,75541],{"class":49,"line":1848},[47,75542,2493],{"emptyLinePlaceholder":145},[47,75544,75545],{"class":49,"line":1853},[47,75546,75547],{"class":279},"    \u002F\u002F +类似于>=1\n",[47,75549,75550,75552,75554,75556,75558,75560,75562,75565,75567,75569,75571,75573,75575,75577],{"class":49,"line":1858},[47,75551,73807],{"class":221},[47,75553,58301],{"class":53},[47,75555,222],{"class":221},[47,75557,803],{"class":81},[47,75559,1185],{"class":217},[47,75561,75292],{"class":48031},[47,75563,75564],{"class":217},"+$",[47,75566,803],{"class":81},[47,75568,777],{"class":221},[47,75570,75299],{"class":53},[47,75572,222],{"class":221},[47,75574,75333],{"class":81},[47,75576,75307],{"class":221},[47,75578,75310],{"class":279},[47,75580,75581,75583,75585,75587,75589,75591,75593,75595,75597,75599,75601,75603,75605,75607],{"class":49,"line":1872},[47,75582,73807],{"class":221},[47,75584,58301],{"class":53},[47,75586,222],{"class":221},[47,75588,803],{"class":81},[47,75590,1185],{"class":217},[47,75592,75292],{"class":48031},[47,75594,75564],{"class":217},[47,75596,803],{"class":81},[47,75598,777],{"class":221},[47,75600,75299],{"class":53},[47,75602,222],{"class":221},[47,75604,75501],{"class":81},[47,75606,75307],{"class":221},[47,75608,75506],{"class":279},[47,75610,75611,75613,75615,75617,75619,75621,75623,75625,75627,75629,75631,75633,75635,75637],{"class":49,"line":1877},[47,75612,73807],{"class":221},[47,75614,58301],{"class":53},[47,75616,222],{"class":221},[47,75618,803],{"class":81},[47,75620,1185],{"class":217},[47,75622,75292],{"class":48031},[47,75624,75564],{"class":217},[47,75626,803],{"class":81},[47,75628,777],{"class":221},[47,75630,75299],{"class":53},[47,75632,222],{"class":221},[47,75634,75533],{"class":81},[47,75636,75363],{"class":221},[47,75638,75433],{"class":279},[47,75640,75641],{"class":49,"line":2670},[47,75642,2493],{"emptyLinePlaceholder":145},[47,75644,75645],{"class":49,"line":2684},[47,75646,75647],{"class":279},"    \u002F\u002F ?类似于0次或一次\n",[47,75649,75650,75652,75654,75656,75658,75660,75663,75665,75667,75669,75671,75673,75675,75677],{"class":49,"line":2692},[47,75651,73807],{"class":221},[47,75653,58301],{"class":53},[47,75655,222],{"class":221},[47,75657,803],{"class":81},[47,75659,1185],{"class":217},[47,75661,75662],{"class":48031},"哈？",[47,75664,521],{"class":217},[47,75666,803],{"class":81},[47,75668,777],{"class":221},[47,75670,75299],{"class":53},[47,75672,222],{"class":221},[47,75674,74282],{"class":81},[47,75676,75363],{"class":221},[47,75678,75310],{"class":279},[47,75680,75681,75683,75685,75687,75689,75691,75693,75696,75698,75700,75702,75704,75706,75708],{"class":49,"line":2697},[47,75682,73807],{"class":221},[47,75684,58301],{"class":53},[47,75686,222],{"class":221},[47,75688,803],{"class":81},[47,75690,1185],{"class":217},[47,75692,75292],{"class":48031},[47,75694,75695],{"class":217},"?$",[47,75697,803],{"class":81},[47,75699,777],{"class":221},[47,75701,75299],{"class":53},[47,75703,222],{"class":221},[47,75705,75333],{"class":81},[47,75707,75307],{"class":221},[47,75709,75433],{"class":279},[47,75711,75712,75714,75716,75718,75720,75722,75724,75726,75728,75730,75732,75734,75736,75738],{"class":49,"line":2703},[47,75713,73807],{"class":221},[47,75715,58301],{"class":53},[47,75717,222],{"class":221},[47,75719,803],{"class":81},[47,75721,1185],{"class":217},[47,75723,75292],{"class":48031},[47,75725,75695],{"class":217},[47,75727,803],{"class":81},[47,75729,777],{"class":221},[47,75731,75299],{"class":53},[47,75733,222],{"class":221},[47,75735,75501],{"class":81},[47,75737,75307],{"class":221},[47,75739,75506],{"class":279},[47,75741,75742,75744,75746,75748,75750,75752,75754,75756,75758,75760,75762,75764,75766,75768],{"class":49,"line":2709},[47,75743,73807],{"class":221},[47,75745,58301],{"class":53},[47,75747,222],{"class":221},[47,75749,803],{"class":81},[47,75751,1185],{"class":217},[47,75753,75292],{"class":48031},[47,75755,75695],{"class":217},[47,75757,803],{"class":81},[47,75759,777],{"class":221},[47,75761,75299],{"class":53},[47,75763,222],{"class":221},[47,75765,75533],{"class":81},[47,75767,75307],{"class":221},[47,75769,75433],{"class":279},[47,75771,75772],{"class":49,"line":2714},[47,75773,2493],{"emptyLinePlaceholder":145},[47,75775,75776],{"class":49,"line":8041},[47,75777,75778],{"class":279},"    \u002F\u002F {n}写几，就必须出现几次\n",[47,75780,75781,75783,75785,75787,75789,75791,75793,75796,75798,75800,75802,75804,75807,75810],{"class":49,"line":8065},[47,75782,73807],{"class":221},[47,75784,58301],{"class":53},[47,75786,222],{"class":221},[47,75788,803],{"class":81},[47,75790,1185],{"class":217},[47,75792,75292],{"class":48031},[47,75794,75795],{"class":217},"{4}$",[47,75797,803],{"class":81},[47,75799,777],{"class":221},[47,75801,75299],{"class":53},[47,75803,222],{"class":221},[47,75805,75806],{"class":81},"'哈哈哈哈'",[47,75808,75809],{"class":221},")) ",[47,75811,75310],{"class":279},[47,75813,75814],{"class":49,"line":8070},[47,75815,2493],{"emptyLinePlaceholder":145},[47,75817,75818],{"class":49,"line":8076},[47,75819,75820],{"class":279},"    \u002F\u002F {n,}大于等于n次\n",[47,75822,75823,75825,75827,75829,75831,75833,75835,75838,75840,75842,75844,75846,75848,75850],{"class":49,"line":8103},[47,75824,73807],{"class":221},[47,75826,58301],{"class":53},[47,75828,222],{"class":221},[47,75830,803],{"class":81},[47,75832,1185],{"class":217},[47,75834,75292],{"class":48031},[47,75836,75837],{"class":217},"{4,}$",[47,75839,803],{"class":81},[47,75841,777],{"class":221},[47,75843,75299],{"class":53},[47,75845,222],{"class":221},[47,75847,75806],{"class":81},[47,75849,75809],{"class":221},[47,75851,75310],{"class":279},[47,75853,75854,75856,75858,75860,75862,75864,75866,75868,75870,75872,75874,75876,75879,75881],{"class":49,"line":8108},[47,75855,73807],{"class":221},[47,75857,58301],{"class":53},[47,75859,222],{"class":221},[47,75861,803],{"class":81},[47,75863,1185],{"class":217},[47,75865,75292],{"class":48031},[47,75867,75837],{"class":217},[47,75869,803],{"class":81},[47,75871,777],{"class":221},[47,75873,75299],{"class":53},[47,75875,222],{"class":221},[47,75877,75878],{"class":81},"'哈哈哈哈哈'",[47,75880,75809],{"class":221},[47,75882,75310],{"class":279},[47,75884,75885],{"class":49,"line":8114},[47,75886,2493],{"emptyLinePlaceholder":145},[47,75888,75889],{"class":49,"line":8126},[47,75890,75891],{"class":279},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[47,75893,75894,75896,75898,75900,75902,75904,75906,75909,75911,75913,75915,75917,75919,75921],{"class":49,"line":8138},[47,75895,73807],{"class":221},[47,75897,58301],{"class":53},[47,75899,222],{"class":221},[47,75901,803],{"class":81},[47,75903,1185],{"class":217},[47,75905,75292],{"class":48031},[47,75907,75908],{"class":217},"{4,6}$",[47,75910,803],{"class":81},[47,75912,777],{"class":221},[47,75914,75299],{"class":53},[47,75916,222],{"class":221},[47,75918,75806],{"class":81},[47,75920,75809],{"class":221},[47,75922,75310],{"class":279},[47,75924,75925,75927,75929,75931,75933,75935,75937,75939,75941,75943,75945,75947,75949,75951],{"class":49,"line":8150},[47,75926,73807],{"class":221},[47,75928,58301],{"class":53},[47,75930,222],{"class":221},[47,75932,803],{"class":81},[47,75934,1185],{"class":217},[47,75936,75292],{"class":48031},[47,75938,75908],{"class":217},[47,75940,803],{"class":81},[47,75942,777],{"class":221},[47,75944,75299],{"class":53},[47,75946,222],{"class":221},[47,75948,75878],{"class":81},[47,75950,75809],{"class":221},[47,75952,75310],{"class":279},[47,75954,75955,75957,75959,75961,75963,75965,75967,75969,75971,75973,75975,75977,75980,75982],{"class":49,"line":9809},[47,75956,73807],{"class":221},[47,75958,58301],{"class":53},[47,75960,222],{"class":221},[47,75962,803],{"class":81},[47,75964,1185],{"class":217},[47,75966,75292],{"class":48031},[47,75968,75908],{"class":217},[47,75970,803],{"class":81},[47,75972,777],{"class":221},[47,75974,75299],{"class":53},[47,75976,222],{"class":221},[47,75978,75979],{"class":81},"'哈哈哈哈哈哈哈'",[47,75981,75809],{"class":221},[47,75983,75433],{"class":279},[47,75985,75986],{"class":49,"line":9834},[47,75987,2493],{"emptyLinePlaceholder":145},[47,75989,75990],{"class":49,"line":9857},[47,75991,75992],{"class":279},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[47,75994,75995,75997,75999,76001,76003,76005,76008,76010,76012,76014,76016,76018,76021,76023],{"class":49,"line":9881},[47,75996,73807],{"class":221},[47,75998,58301],{"class":53},[47,76000,222],{"class":221},[47,76002,803],{"class":81},[47,76004,1185],{"class":217},[47,76006,76007],{"class":85},"[abc]",[47,76009,521],{"class":217},[47,76011,803],{"class":81},[47,76013,777],{"class":221},[47,76015,75299],{"class":53},[47,76017,222],{"class":221},[47,76019,76020],{"class":81},"'a'",[47,76022,75307],{"class":221},[47,76024,75310],{"class":279},[47,76026,76027,76029,76031,76033,76035,76037,76039,76041,76043,76045,76047,76049,76052,76054],{"class":49,"line":9886},[47,76028,73807],{"class":221},[47,76030,58301],{"class":53},[47,76032,222],{"class":221},[47,76034,803],{"class":81},[47,76036,1185],{"class":217},[47,76038,76007],{"class":85},[47,76040,521],{"class":217},[47,76042,803],{"class":81},[47,76044,777],{"class":221},[47,76046,75299],{"class":53},[47,76048,222],{"class":221},[47,76050,76051],{"class":81},"'b'",[47,76053,75307],{"class":221},[47,76055,75310],{"class":279},[47,76057,76058,76060,76062,76064,76066,76068,76070,76072,76074,76076,76078,76080,76083,76085],{"class":49,"line":9891},[47,76059,73807],{"class":221},[47,76061,58301],{"class":53},[47,76063,222],{"class":221},[47,76065,803],{"class":81},[47,76067,1185],{"class":217},[47,76069,76007],{"class":85},[47,76071,521],{"class":217},[47,76073,803],{"class":81},[47,76075,777],{"class":221},[47,76077,75299],{"class":53},[47,76079,222],{"class":221},[47,76081,76082],{"class":81},"'c'",[47,76084,75307],{"class":221},[47,76086,75310],{"class":279},[47,76088,76089,76091,76093,76095,76097,76099,76101,76103,76105,76107,76110,76112],{"class":49,"line":9896},[47,76090,73807],{"class":221},[47,76092,58301],{"class":53},[47,76094,222],{"class":221},[47,76096,803],{"class":81},[47,76098,76007],{"class":85},[47,76100,803],{"class":81},[47,76102,777],{"class":221},[47,76104,75299],{"class":53},[47,76106,222],{"class":221},[47,76108,76109],{"class":81},"'ab'",[47,76111,75307],{"class":221},[47,76113,75310],{"class":279},[47,76115,76116,76118,76120,76122,76124,76126,76128,76130,76132,76134,76136,76138,76140,76142],{"class":49,"line":9905},[47,76117,73807],{"class":221},[47,76119,58301],{"class":53},[47,76121,222],{"class":221},[47,76123,803],{"class":81},[47,76125,1185],{"class":217},[47,76127,76007],{"class":85},[47,76129,521],{"class":217},[47,76131,803],{"class":81},[47,76133,777],{"class":221},[47,76135,75299],{"class":53},[47,76137,222],{"class":221},[47,76139,76109],{"class":81},[47,76141,75307],{"class":221},[47,76143,76144],{"class":279},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[47,76146,76147,76149,76151,76153,76155,76157,76159,76162,76164,76166,76168,76170,76172,76174],{"class":49,"line":9910},[47,76148,73807],{"class":221},[47,76150,58301],{"class":53},[47,76152,222],{"class":221},[47,76154,803],{"class":81},[47,76156,1185],{"class":217},[47,76158,76007],{"class":85},[47,76160,76161],{"class":217},"{2}$",[47,76163,803],{"class":81},[47,76165,777],{"class":221},[47,76167,75299],{"class":53},[47,76169,222],{"class":221},[47,76171,76109],{"class":81},[47,76173,75307],{"class":221},[47,76175,76176],{"class":279},"\u002F\u002Ftrue   可以选两个\n",[47,76178,76179,76181,76183,76185,76187,76189,76192,76194,76196,76198,76200,76202,76205,76207],{"class":49,"line":9916},[47,76180,73807],{"class":221},[47,76182,58301],{"class":53},[47,76184,222],{"class":221},[47,76186,803],{"class":81},[47,76188,1185],{"class":217},[47,76190,76191],{"class":85},"[a-z]",[47,76193,521],{"class":217},[47,76195,803],{"class":81},[47,76197,777],{"class":221},[47,76199,75299],{"class":53},[47,76201,222],{"class":221},[47,76203,76204],{"class":81},"'p'",[47,76206,75363],{"class":221},[47,76208,76209],{"class":279},"\u002F\u002Ftrue   依然只能选一个\n",[47,76211,76212,76214,76216,76218,76220,76222,76225,76227,76229,76231,76233,76235,76237,76239],{"class":49,"line":9937},[47,76213,73807],{"class":221},[47,76215,58301],{"class":53},[47,76217,222],{"class":221},[47,76219,803],{"class":81},[47,76221,1185],{"class":217},[47,76223,76224],{"class":85},"[A-Z]",[47,76226,521],{"class":217},[47,76228,803],{"class":81},[47,76230,777],{"class":221},[47,76232,75299],{"class":53},[47,76234,222],{"class":221},[47,76236,76204],{"class":81},[47,76238,75363],{"class":221},[47,76240,75433],{"class":279},[47,76242,76243,76245,76247,76249,76251,76253,76255,76257,76259,76261,76263,76265,76268,76270],{"class":49,"line":9943},[47,76244,73807],{"class":221},[47,76246,58301],{"class":53},[47,76248,222],{"class":221},[47,76250,803],{"class":81},[47,76252,1185],{"class":217},[47,76254,76224],{"class":85},[47,76256,521],{"class":217},[47,76258,803],{"class":81},[47,76260,777],{"class":221},[47,76262,75299],{"class":53},[47,76264,222],{"class":221},[47,76266,76267],{"class":81},"'P'",[47,76269,75363],{"class":221},[47,76271,75310],{"class":279},[47,76273,76274,76276,76278,76280,76282,76284,76287,76289,76291,76293,76295,76297,76300,76302],{"class":49,"line":9957},[47,76275,73807],{"class":221},[47,76277,58301],{"class":53},[47,76279,222],{"class":221},[47,76281,803],{"class":81},[47,76283,1185],{"class":217},[47,76285,76286],{"class":85},"[0-9]",[47,76288,521],{"class":217},[47,76290,803],{"class":81},[47,76292,777],{"class":221},[47,76294,75299],{"class":53},[47,76296,222],{"class":221},[47,76298,76299],{"class":81},"'0'",[47,76301,75363],{"class":221},[47,76303,75310],{"class":279},[47,76305,76306,76308,76310,76312,76314,76316,76319,76321,76323,76325,76327,76329,76331,76333],{"class":49,"line":9963},[47,76307,73807],{"class":221},[47,76309,58301],{"class":53},[47,76311,222],{"class":221},[47,76313,803],{"class":81},[47,76315,1185],{"class":217},[47,76317,76318],{"class":85},"[a-zA-Z0-9]",[47,76320,521],{"class":217},[47,76322,803],{"class":81},[47,76324,777],{"class":221},[47,76326,75299],{"class":53},[47,76328,222],{"class":221},[47,76330,76204],{"class":81},[47,76332,75307],{"class":221},[47,76334,75310],{"class":279},[47,76336,76337,76339,76341],{"class":49,"line":9990},[47,76338,52471],{"class":221},[47,76340,51867],{"class":51354},[47,76342,51361],{"class":221},[47,76344,76345,76347,76349],{"class":49,"line":9999},[47,76346,51839],{"class":221},[47,76348,51854],{"class":51354},[47,76350,51361],{"class":221},[47,76352,76353],{"class":49,"line":10005},[47,76354,2493],{"emptyLinePlaceholder":145},[47,76356,76357,76359,76361],{"class":49,"line":10013},[47,76358,51839],{"class":221},[47,76360,50689],{"class":51354},[47,76362,51361],{"class":221},[22091,76364,76366],{"id":76365},"_3624-修饰符","3.6.2.4 修饰符",[19,76368,76369],{},[1556,76370],{"alt":43,"src":76371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,76373,76374],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,76376,76377],{},[1556,76378],{"alt":43,"src":76379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[38,76381,76383],{"className":50687,"code":76382,"language":50689,"meta":43,"style":43},"\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",[26,76384,76385,76395,76409,76417,76431,76451,76463,76471,76479,76487,76519,76550,76555,76587,76598,76631,76640,76648,76656],{"__ignoreMap":43},[47,76386,76387,76389,76391,76393],{"class":49,"line":50},[47,76388,51351],{"class":221},[47,76390,51355],{"class":51354},[47,76392,51358],{"class":53},[47,76394,51361],{"class":221},[47,76396,76397,76399,76401,76403,76405,76407],{"class":49,"line":92},[47,76398,1129],{"class":221},[47,76400,50689],{"class":51354},[47,76402,51370],{"class":53},[47,76404,267],{"class":221},[47,76406,51375],{"class":81},[47,76408,51361],{"class":221},[47,76410,76411,76413,76415],{"class":49,"line":1273},[47,76412,1129],{"class":221},[47,76414,51388],{"class":51354},[47,76416,51361],{"class":221},[47,76418,76419,76421,76423,76425,76427,76429],{"class":49,"line":1288},[47,76420,52198],{"class":221},[47,76422,51398],{"class":51354},[47,76424,51401],{"class":53},[47,76426,267],{"class":221},[47,76428,51406],{"class":81},[47,76430,51361],{"class":221},[47,76432,76433,76435,76437,76439,76441,76443,76445,76447,76449],{"class":49,"line":1294},[47,76434,52198],{"class":221},[47,76436,51398],{"class":51354},[47,76438,15013],{"class":53},[47,76440,267],{"class":221},[47,76442,51445],{"class":81},[47,76444,51425],{"class":53},[47,76446,267],{"class":221},[47,76448,51452],{"class":81},[47,76450,51361],{"class":221},[47,76452,76453,76455,76457,76459,76461],{"class":49,"line":1308},[47,76454,52198],{"class":221},[47,76456,51461],{"class":51354},[47,76458,51464],{"class":221},[47,76460,51461],{"class":51354},[47,76462,51361],{"class":221},[47,76464,76465,76467,76469],{"class":49,"line":1314},[47,76466,51839],{"class":221},[47,76468,51388],{"class":51354},[47,76470,51361],{"class":221},[47,76472,76473,76475,76477],{"class":49,"line":1405},[47,76474,1129],{"class":221},[47,76476,51854],{"class":51354},[47,76478,51361],{"class":221},[47,76480,76481,76483,76485],{"class":49,"line":1411},[47,76482,52198],{"class":221},[47,76484,51867],{"class":51354},[47,76486,51361],{"class":221},[47,76488,76489,76491,76493,76495,76497,76499,76502,76504,76506,76508,76510,76512,76515,76517],{"class":49,"line":1423},[47,76490,73807],{"class":221},[47,76492,58301],{"class":53},[47,76494,222],{"class":221},[47,76496,803],{"class":81},[47,76498,1185],{"class":217},[47,76500,76501],{"class":48031},"java",[47,76503,521],{"class":217},[47,76505,803],{"class":81},[47,76507,777],{"class":221},[47,76509,75299],{"class":53},[47,76511,222],{"class":221},[47,76513,76514],{"class":81},"'java'",[47,76516,75809],{"class":221},[47,76518,75310],{"class":279},[47,76520,76521,76523,76525,76527,76529,76531,76533,76535,76537,76539,76541,76543,76546,76548],{"class":49,"line":1706},[47,76522,73807],{"class":221},[47,76524,58301],{"class":53},[47,76526,222],{"class":221},[47,76528,803],{"class":81},[47,76530,1185],{"class":217},[47,76532,76501],{"class":48031},[47,76534,521],{"class":217},[47,76536,803],{"class":81},[47,76538,777],{"class":221},[47,76540,75299],{"class":53},[47,76542,222],{"class":221},[47,76544,76545],{"class":81},"'Java'",[47,76547,75809],{"class":221},[47,76549,75433],{"class":279},[47,76551,76552],{"class":49,"line":1711},[47,76553,76554],{"class":279},"    \u002F\u002F 不区分大小写、\n",[47,76556,76557,76559,76561,76563,76565,76567,76569,76571,76573,76575,76577,76579,76581,76583,76585],{"class":49,"line":1717},[47,76558,73807],{"class":221},[47,76560,58301],{"class":53},[47,76562,222],{"class":221},[47,76564,803],{"class":81},[47,76566,1185],{"class":217},[47,76568,76501],{"class":48031},[47,76570,521],{"class":217},[47,76572,803],{"class":81},[47,76574,660],{"class":217},[47,76576,777],{"class":221},[47,76578,75299],{"class":53},[47,76580,222],{"class":221},[47,76582,76545],{"class":81},[47,76584,75809],{"class":221},[47,76586,75310],{"class":279},[47,76588,76589,76591,76593,76595],{"class":49,"line":1722},[47,76590,11314],{"class":217},[47,76592,73973],{"class":85},[47,76594,13657],{"class":217},[47,76596,76597],{"class":81}," 'java是一门编程语言，学完java工资很高'\n",[47,76599,76600,76602,76605,76607,76610,76613,76615,76617,76619,76621,76624,76626,76629],{"class":49,"line":1736},[47,76601,11314],{"class":217},[47,76603,76604],{"class":85}," result",[47,76606,13657],{"class":217},[47,76608,76609],{"class":221}," str.",[47,76611,76612],{"class":53},"replace",[47,76614,222],{"class":221},[47,76616,803],{"class":81},[47,76618,76501],{"class":48031},[47,76620,803],{"class":81},[47,76622,76623],{"class":217},"ig",[47,76625,12528],{"class":221},[47,76627,76628],{"class":81},"'前端'",[47,76630,228],{"class":221},[47,76632,76633,76635,76637],{"class":49,"line":1741},[47,76634,73807],{"class":221},[47,76636,58301],{"class":53},[47,76638,76639],{"class":221},"(result)\n",[47,76641,76642,76644,76646],{"class":49,"line":1747},[47,76643,52471],{"class":221},[47,76645,51867],{"class":51354},[47,76647,51361],{"class":221},[47,76649,76650,76652,76654],{"class":49,"line":1768},[47,76651,51839],{"class":221},[47,76653,51854],{"class":51354},[47,76655,51361],{"class":221},[47,76657,76658,76660,76662],{"class":49,"line":1773},[47,76659,51839],{"class":221},[47,76661,50689],{"class":51354},[47,76663,51361],{"class":221},[134,76665,76666],{},"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":43,"searchDepth":92,"depth":92,"links":76668},[76669,76679,76691,76708,76715,76723],{"id":53414,"depth":92,"text":53415,"children":76670},[76671,76672,76673,76674,76675,76676,76677,76678],{"id":53418,"depth":1273,"text":53419},{"id":53451,"depth":1273,"text":53452},{"id":53490,"depth":1273,"text":53491},{"id":53648,"depth":1273,"text":53649},{"id":53696,"depth":1273,"text":53697},{"id":53833,"depth":1273,"text":53834},{"id":54155,"depth":1273,"text":54156},{"id":57143,"depth":1273,"text":57144},{"id":57171,"depth":92,"text":57172,"children":76680},[76681,76682,76683,76684,76685,76686,76687,76688,76689,76690],{"id":57175,"depth":1273,"text":57176},{"id":57198,"depth":1273,"text":57199},{"id":58113,"depth":1273,"text":58114},{"id":58803,"depth":1273,"text":58804},{"id":59085,"depth":1273,"text":59086},{"id":63246,"depth":1273,"text":63247},{"id":63416,"depth":1273,"text":63417},{"id":63544,"depth":1273,"text":63545},{"id":63569,"depth":1273,"text":63570},{"id":64958,"depth":1273,"text":64959},{"id":66111,"depth":92,"text":66112,"children":76692},[76693,76694,76695,76696,76697,76698,76699,76700,76701,76702,76703,76704,76705,76706,76707],{"id":66115,"depth":1273,"text":66116},{"id":66769,"depth":1273,"text":66770},{"id":68464,"depth":1273,"text":68465},{"id":68505,"depth":1273,"text":68506},{"id":68547,"depth":1273,"text":68548},{"id":68561,"depth":1273,"text":68562},{"id":68610,"depth":1273,"text":68611},{"id":68622,"depth":1273,"text":68623},{"id":68637,"depth":1273,"text":68638},{"id":68673,"depth":1273,"text":68674},{"id":68754,"depth":1273,"text":68755},{"id":68882,"depth":1273,"text":68883},{"id":68894,"depth":1273,"text":68895},{"id":68913,"depth":1273,"text":68914},{"id":71024,"depth":1273,"text":71025},{"id":71043,"depth":92,"text":71044,"children":76709},[76710,76711,76712,76713,76714],{"id":71064,"depth":1273,"text":71065},{"id":71084,"depth":1273,"text":71085},{"id":71133,"depth":1273,"text":71134},{"id":71258,"depth":1273,"text":71259},{"id":71439,"depth":1273,"text":71440},{"id":71457,"depth":92,"text":71458,"children":76716},[76717,76718,76719,76720,76721,76722],{"id":71472,"depth":1273,"text":71473},{"id":71531,"depth":1273,"text":71532},{"id":71555,"depth":1273,"text":71556},{"id":71875,"depth":1273,"text":71876},{"id":71907,"depth":1273,"text":71908},{"id":71930,"depth":1273,"text":71931},{"id":74998,"depth":92,"text":74999,"children":76724},[76725,76726],{"id":75032,"depth":1273,"text":75033},{"id":75071,"depth":1273,"text":75072},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53386,"description":142},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76733,"title":76734,"body":76735,"description":142,"extension":143,"meta":92872,"navigation":145,"path":92873,"seo":92874,"stem":92875,"__hash__":92876},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76736,"toc":92808},[76737,76740,76743,76747,76751,76756,76761,76772,76776,76781,76784,76788,76791,76796,76800,76804,76807,76812,76815,76819,76822,76830,76833,76837,76842,76847,76850,76854,76859,76864,76867,76871,76876,76879,76884,76887,76892,76895,76900,76905,76908,76911,76915,76920,76925,76928,76932,76936,76939,76942,76945,76949,76953,76958,76963,76966,76970,76975,76980,76983,76986,76989,76992,76995,76998,77001,77004,77007,77012,77016,77021,77026,77029,77032,77035,77038,77041,77044,77047,77050,77054,77058,77061,77064,77067,77072,77074,77077,77080,77083,77086,77089,77092,77095,77098,77101,77104,77107,77110,77113,77118,77123,77128,77131,77135,77138,77143,77147,77149,77160,77165,77266,77269,77272,77275,77278,77281,77284,77287,77290,77292,77295,77298,77301,77304,77307,77309,77312,77315,77318,77321,77324,77327,77329,77332,77334,77336,77339,77343,77347,77350,77353,77356,77359,77362,77365,77368,77371,77374,77379,77499,77502,77505,77510,77513,77516,77519,77522,77527,77530,77533,77536,77539,77544,77547,77647,77712,77786,77790,77793,77796,77800,77803,77817,77846,77849,77852,77855,77858,77861,77864,77867,77869,77872,77875,77878,77881,77885,77890,77894,77899,77974,77977,78160,78163,78166,78169,78172,78175,78177,78180,78183,78186,78189,78192,78195,78197,78201,78204,78209,78212,78215,78218,78221,78223,78228,78231,78234,78237,78240,78242,78247,78250,78253,78255,78257,78260,78264,78267,78270,78275,78278,78281,78284,78334,78339,78343,78348,78351,78420,78423,78432,78436,78441,78444,78447,78455,78458,78475,80277,80281,80285,80290,80293,80297,80303,80309,80461,80466,80471,80474,80477,80480,80483,80486,80489,80492,80495,80498,80501,80504,80507,80512,80516,80519,80530,80534,80539,80542,80545,80548,80551,80554,80556,80559,80562,80565,80568,80570,80587,80590,80594,80597,80602,80607,80610,80613,80617,80620,80623,80632,80635,80639,80642,80647,80652,80719,80723,80726,80729,80734,80739,80825,80830,80834,80837,80840,80855,80858,80863,80867,80872,80981,80984,80995,81145,81149,81154,81263,81267,81272,81277,81282,81285,81292,81312,81348,81512,81517,81520,81525,81532,81535,81538,81541,81600,81656,81712,81716,81721,82036,82039,82043,82046,82051,82160,82165,82169,82174,82178,82249,82253,82255,82258,82261,82299,82575,82579,82596,82662,82696,82700,82703,82708,82737,82744,82753,82758,82773,82778,82787,82790,82927,82931,82993,82997,83002,83247,83251,83256,83259,83262,83265,83268,83272,83277,84858,84862,84866,84872,84875,84880,84884,84887,84892,84895,84906,84910,84915,84919,84924,84929,84932,84937,84941,84945,84948,84953,84958,84961,84964,84967,85089,85094,85196,85199,85202,85206,85211,85383,85388,85392,85395,85400,85466,85471,85474,85605,85608,85613,85616,85619,85710,85715,85718,85721,85724,85727,85732,85737,85740,85745,85750,85755,85759,85762,85765,85770,85775,85780,85785,85839,85842,85845,85850,85853,85856,85861,85866,85871,85875,85880,85894,85899,85902,85907,85911,85916,85921,85926,85931,85936,85941,85946,85951,85954,85958,85963,85966,85969,85972,85977,85982,85985,85988,85992,85995,85998,86003,86008,86013,86018,86021,86026,86031,86092,86097,86100,86105,87346,87351,87355,87359,87364,87367,87372,87377,87380,87385,87387,87392,87396,87399,87402,87413,87417,87422,87427,87482,87487,87492,87497,87708,87713,87717,87722,87725,87727,87730,87733,88180,88185,88192,88198,88201,88204,88468,88473,88477,88742,88747,88751,88756,88761,88766,88771,89102,89105,89110,89115,89118,89122,89126,89131,89136,89141,89146,89151,89156,89160,89163,89168,89173,89176,89250,89255,89260,89265,89267,89270,89640,89645,89650,89655,89658,89661,89763,89768,89773,89876,89880,89885,89889,89893,89898,89903,89906,89911,89914,89917,90310,90315,90318,90321,90324,90327,90847,90851,90856,90861,90866,90869,90874,90877,90880,91262,91267,91269,91271,91274,91277,91789,91793,91854,91857,91860,91863,91867,91870,91875,91880,92805],[10,76738,76734],{"id":76739},"_4js进阶",[19,76741,76742],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,76744,76746],{"id":76745},"_41-作用域","4.1 作用域",[187,76748,76750],{"id":76749},"_411-局部作用域","4.1.1 局部作用域",[19,76752,76753],{},[1556,76754],{"alt":43,"src":76755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,76757,76758],{},[1556,76759],{"alt":43,"src":76760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[106,76762,76763,76766,76769],{},[109,76764,76765],{},"函数作用域在函数内部",[109,76767,76768],{},"块级作用域在{}",[109,76770,76771],{},"对象的那个{}不是作用域，不是块作用域",[187,76773,76775],{"id":76774},"_412-全局作用域","4.1.2 全局作用域",[19,76777,76778],{},[1556,76779],{"alt":43,"src":76780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,76782,76783],{},"window.a=10不要这样写",[187,76785,76787],{"id":76786},"_413-作用域链","4.1.3 作用域链",[19,76789,76790],{},"变量查找机制",[19,76792,76793],{},[1556,76794],{"alt":43,"src":76795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,76797,76799],{"id":76798},"_42-垃圾回收机制","4.2 垃圾回收机制",[187,76801,76803],{"id":76802},"_421-大体介绍","4.2.1 大体介绍",[19,76805,76806],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,76808,76809],{},[1556,76810],{"alt":43,"src":76811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,76813,76814],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[187,76816,76818],{"id":76817},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,76820,76821],{},"堆栈空间分配区别：",[171,76823,76824,76827],{},[109,76825,76826],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[109,76828,76829],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,76831,76832],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22091,76834,76836],{"id":76835},"_4221-引用计数","4.2.2.1 引用计数",[19,76838,76839],{},[1556,76840],{"alt":43,"src":76841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,76843,76844],{},[1556,76845],{"alt":43,"src":76846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,76848,76849],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22091,76851,76853],{"id":76852},"_4222-标记清除法","4.2.2.2 标记清除法",[19,76855,76856],{},[1556,76857],{"alt":43,"src":76858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,76860,76861],{},[1556,76862],{"alt":43,"src":76863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,76865,76866],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,76868,76870],{"id":76869},"_43-闭包","4.3 闭包",[19,76872,76873],{},[1556,76874],{"alt":43,"src":76875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,76877,76878],{},"闭包：内层函数+外层函数的变量",[19,76880,76881],{},[1556,76882],{"alt":43,"src":76883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,76885,76886],{},"closure就是闭包",[19,76888,76889],{},[1556,76890],{"alt":43,"src":76891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,76893,76894],{},"内层函数必须包含外层函数的变量才是闭包",[19,76896,76897],{},[1556,76898],{"alt":43,"src":76899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,76901,76902],{},[1556,76903],{"alt":43,"src":76904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,76906,76907],{},"闭包可能会引起内存泄漏",[19,76909,76910],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,76912,76914],{"id":76913},"_44-变量提升","4.4 变量提升",[19,76916,76917],{},[1556,76918],{"alt":43,"src":76919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,76921,76922],{},[1556,76923],{"alt":43,"src":76924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,76926,76927],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,76929,76931],{"id":76930},"_45-函数进阶","4.5 函数进阶",[187,76933,76935],{"id":76934},"_451-函数提升","4.5.1 函数提升",[19,76937,76938],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,76940,76941],{},"只提升函数声明，不提升函数调用",[51867,76943,76944],{},"\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",[187,76946,76948],{"id":76947},"_452-函数参数","4.5.2 函数参数",[22091,76950,76952],{"id":76951},"_4521-动态参数","4.5.2.1 动态参数",[19,76954,76955],{},[1556,76956],{"alt":43,"src":76957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,76959,76960],{},[1556,76961],{"alt":43,"src":76962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,76964,76965],{},"箭头函数里边没有arguments",[22091,76967,76969],{"id":76968},"_4522-剩余参数","4.5.2.2 剩余参数",[19,76971,76972],{},[1556,76973],{"alt":43,"src":76974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,76976,76977],{},[1556,76978],{"alt":43,"src":76979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,76981,76982],{},"剩余参数使用的时候不需要写...",[19,76984,76985],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,76987,76988],{},"  function getSum(a,b,...arr) {",[19,76990,76991],{},"  console.log(11)",[19,76993,76994],{},"  }",[19,76996,76997],{},"  getSum(1,2,3,4)",[19,76999,77000],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,77002,77003],{},"  getSum(1,2)",[19,77005,77006],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,77008,77009],{},[1556,77010],{"alt":43,"src":77011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22091,77013,77015],{"id":77014},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,77017,77018],{},[1556,77019],{"alt":43,"src":77020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,77022,77023],{},[1556,77024],{"alt":43,"src":77025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,77027,77028],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,77030,77031],{},"展开运算符可以用于数组之间的合并：",[19,77033,77034],{},"const arr1 = [1, 2, 3]",[19,77036,77037],{},"const arr2 = [3, 4, 5]",[19,77039,77040],{},"const arr = [...arr1, ...arr2]",[19,77042,77043],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,77045,77046],{},"剩余参数：函数参数使用，得到真数组",[19,77048,77049],{},"展开运算符：数组中使用，数组展开",[187,77051,77053],{"id":77052},"_453-箭头函数","4.5.3 箭头函数",[22091,77055,77057],{"id":77056},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,77059,77060],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,77062,77063],{},"它不是万能的！！！",[19,77065,77066],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,77068,77069],{},[1556,77070],{"alt":43,"src":77071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,77073,251],{},[19,77075,77076],{},"① 只有一个形参的时候，可以省略小括号：",[19,77078,77079],{},"const fn=x=>{console.log(x)}",[19,77081,77082],{},"② 只有一行代码时可以省略大括号：",[19,77084,77085],{},"const fn=x=>console.log(11)",[19,77087,77088],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,77090,77091],{},"const fn=x=>x+x",[19,77093,77094],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,77096,77097],{},"⑤ 阻止表单默认提交：",[19,77099,77100],{},"const form = document.querySelector('form')",[19,77102,77103],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,77105,77106],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,77108,77109],{},"const fn=uname=>({uname:uname})",[19,77111,77112],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,77114,77115],{},[1556,77116],{"alt":43,"src":77117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,77119,77120],{},[1556,77121],{"alt":43,"src":77122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,77124,77125],{},[1556,77126],{"alt":43,"src":77127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,77129,77130],{},"一定不要忘记用()，有()就理解为自带return",[22091,77132,77134],{"id":77133},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,77136,77137],{},"箭头函数是没有动态参数的arguments",[19,77139,77140],{},[1556,77141],{"alt":43,"src":77142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22091,77144,77146],{"id":77145},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,77148,11425],{},[171,77150,77151,77154,77157],{},[109,77152,77153],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[109,77155,77156],{},"事件回调函数使用箭头函数时，this 为全局的 window",[109,77158,77159],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,77161,77162],{},[1556,77163],{"alt":43,"src":77164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[38,77166,77168],{"className":53121,"code":77167,"language":53123,"meta":43,"style":43},"  \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",[26,77169,77170,77178,77183,77188,77193,77198,77203,77207,77212,77216,77220,77225,77230,77235,77239,77243,77248,77253,77258],{"__ignoreMap":43},[47,77171,77172,77174,77176],{"class":49,"line":50},[47,77173,52198],{"class":221},[47,77175,51867],{"class":51354},[47,77177,51361],{"class":221},[47,77179,77180],{"class":49,"line":92},[47,77181,77182],{"class":221},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[47,77184,77185],{"class":49,"line":1273},[47,77186,77187],{"class":221},"    console.log(this) \u002F\u002F指向window\n",[47,77189,77190],{"class":49,"line":1288},[47,77191,77192],{"class":221},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[47,77194,77195],{"class":49,"line":1294},[47,77196,77197],{"class":221},"    function fn() {\n",[47,77199,77200],{"class":49,"line":1308},[47,77201,77202],{"class":221},"      console.log(this)  \u002F\u002F指向window\n",[47,77204,77205],{"class":49,"line":1314},[47,77206,2280],{"class":221},[47,77208,77209],{"class":49,"line":1405},[47,77210,77211],{"class":221},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[47,77213,77214],{"class":49,"line":1411},[47,77215,2493],{"emptyLinePlaceholder":145},[47,77217,77218],{"class":49,"line":1423},[47,77219,71577],{"class":221},[47,77221,77222],{"class":49,"line":1706},[47,77223,77224],{"class":221},"      name: 'andy',\n",[47,77226,77227],{"class":49,"line":1711},[47,77228,77229],{"class":221},"      sayHai: function () {\n",[47,77231,77232],{"class":49,"line":1717},[47,77233,77234],{"class":221},"        console.log(this)\n",[47,77236,77237],{"class":49,"line":1722},[47,77238,52452],{"class":221},[47,77240,77241],{"class":49,"line":1736},[47,77242,2280],{"class":221},[47,77244,77245],{"class":49,"line":1741},[47,77246,77247],{"class":221},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[47,77249,77250],{"class":49,"line":1747},[47,77251,77252],{"class":221},"    \u002F\u002F 2.箭头函数的this\n",[47,77254,77255],{"class":49,"line":1768},[47,77256,77257],{"class":221},"    const fn = () => console.log(this)\n",[47,77259,77260,77262,77264],{"class":49,"line":1773},[47,77261,52471],{"class":221},[47,77263,51867],{"class":51354},[47,77265,51361],{"class":221},[19,77267,77268],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,77270,77271],{},"const fn = () => console.log(this)",[19,77273,77274],{},"fn() \u002F\u002F指向window",[19,77276,77277],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,77279,77280],{},"①",[19,77282,77283],{},"const obj = {",[19,77285,77286],{},"uname: 'pink老师',",[19,77288,77289],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,77291,1165],{},[19,77293,77294],{},"调用对象里边的函数",[19,77296,77297],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,77299,77300],{},"obj.sayHai()",[19,77302,77303],{},"②",[19,77305,77306],{},"const obj1 = {",[19,77308,77286],{},[19,77310,77311],{},"sayHai: function () {",[19,77313,77314],{},"let i = 10",[19,77316,77317],{},"const count = () => {",[19,77319,77320],{},"console.log(this)",[19,77322,77323],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,77325,77326],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,77328,1165],{},[19,77330,77331],{},"count()",[19,77333,1165],{},[19,77335,1165],{},[19,77337,77338],{},"obj1.sayHai()",[14,77340,77342],{"id":77341},"_46-解构赋值","4.6 解构赋值",[187,77344,77346],{"id":77345},"_461-数组解构","4.6.1 数组解构",[19,77348,77349],{},"以前要是使用数组中的值的话：",[19,77351,77352],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,77354,77355],{},"const arr=[100,60,80]",[19,77357,77358],{},"const max=arr[0]",[19,77360,77361],{},"const min=arr[1]",[19,77363,77364],{},"const avg=arr[2]",[19,77366,77367],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,77369,77370],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,77372,77373],{},"这个写法就类似于上边的那种用很多const的方法",[19,77375,77376],{},[1556,77377],{"alt":43,"src":77378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[38,77380,77382],{"className":50687,"code":77381,"language":50689,"meta":43,"style":43},"①变量之间交换值:\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",[26,77383,77384,77389,77394,77399,77404,77409,77413,77417,77422,77426,77431,77436,77440,77445,77450,77461,77471,77476,77481,77486,77490,77494],{"__ignoreMap":43},[47,77385,77386],{"class":49,"line":50},[47,77387,77388],{"class":221},"①变量之间交换值:\n",[47,77390,77391],{"class":49,"line":92},[47,77392,77393],{"class":221},"let a=1\n",[47,77395,77396],{"class":49,"line":1273},[47,77397,77398],{"class":221},"let b=2;\n",[47,77400,77401],{"class":49,"line":1288},[47,77402,77403],{"class":221},"必须加这行代码，不然就会报错\n",[47,77405,77406],{"class":49,"line":1294},[47,77407,77408],{"class":221},"[b,a]=[a,b]\n",[47,77410,77411],{"class":49,"line":1308},[47,77412,2493],{"emptyLinePlaceholder":145},[47,77414,77415],{"class":49,"line":1314},[47,77416,2493],{"emptyLinePlaceholder":145},[47,77418,77419],{"class":49,"line":1405},[47,77420,77421],{"class":221},"可以写成下面的方式：\n",[47,77423,77424],{"class":49,"line":1411},[47,77425,77393],{"class":221},[47,77427,77428],{"class":49,"line":1423},[47,77429,77430],{"class":221},"let b=2\n",[47,77432,77433],{"class":49,"line":1706},[47,77434,77435],{"class":221},";[b,a]=[a,b]\n",[47,77437,77438],{"class":49,"line":1711},[47,77439,2493],{"emptyLinePlaceholder":145},[47,77441,77442],{"class":49,"line":1717},[47,77443,77444],{"class":221},"②排序\n",[47,77446,77447],{"class":49,"line":1722},[47,77448,77449],{"class":221},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[47,77451,77452,77455,77458],{"class":49,"line":1736},[47,77453,77454],{"class":221},"for (let i = 0; i ",[47,77456,1129],{"class":77457},"s7hpK",[47,77459,77460],{"class":221}," arr1.length; i++) {\n",[47,77462,77463,77466,77468],{"class":49,"line":1741},[47,77464,77465],{"class":221},"   for (let j = 0; j ",[47,77467,1129],{"class":77457},[47,77469,77470],{"class":221}," arr1.length - 1; j++) {\n",[47,77472,77473],{"class":49,"line":1747},[47,77474,77475],{"class":221},"      if (arr1[j] > arr1[j + 1]) {\n",[47,77477,77478],{"class":49,"line":1768},[47,77479,77480],{"class":221},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[47,77482,77483],{"class":49,"line":1773},[47,77484,77485],{"class":221},"       }\n",[47,77487,77488],{"class":49,"line":1787},[47,77489,4402],{"class":221},[47,77491,77492],{"class":49,"line":1792},[47,77493,1659],{"class":221},[47,77495,77496],{"class":49,"line":1821},[47,77497,77498],{"class":221},"console.log(arr1)\n",[19,77500,77501],{},"数组解构的细节：",[19,77503,77504],{},"①变量多，单元值少",[19,77506,77507],{},[1556,77508],{"alt":43,"src":77509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,77511,77512],{},"防止出现undefined的方法：",[19,77514,77515],{},"const [a=0,b=0] =[1]",[19,77517,77518],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,77520,77521],{},"②变量少，单元值多",[19,77523,77524],{},[1556,77525],{"alt":43,"src":77526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,77528,77529],{},"此时可以使用剩余参数来接收多余的值",[19,77531,77532],{},"const [a,b,...c]=[1,2,3,4]",[19,77534,77535],{},"console.log(c) 输出[3,4]",[19,77537,77538],{},"③可以按需导入，忽略某些返回值",[19,77540,77541],{},[1556,77542],{"alt":43,"src":77543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,77545,77546],{},"④支持多维数组的结构",[38,77548,77552],{"className":77549,"code":77550,"language":77551,"meta":43,"style":43},"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",[26,77553,77554,77582,77598,77613,77628],{"__ignoreMap":43},[47,77555,77556,77558,77560,77562,77564,77566,77568,77570,77573,77575,77577,77579],{"class":49,"line":50},[47,77557,6885],{"class":217},[47,77559,51887],{"class":221},[47,77561,267],{"class":217},[47,77563,52280],{"class":221},[47,77565,436],{"class":85},[47,77567,12528],{"class":221},[47,77569,298],{"class":85},[47,77571,77572],{"class":221},", [",[47,77574,292],{"class":85},[47,77576,12528],{"class":221},[47,77578,512],{"class":85},[47,77580,77581],{"class":221},"]]\n",[47,77583,77584,77587,77589,77591,77593,77595],{"class":49,"line":92},[47,77585,77586],{"class":221},"console.",[47,77588,58301],{"class":53},[47,77590,3944],{"class":221},[47,77592,411],{"class":85},[47,77594,4309],{"class":221},[47,77596,77597],{"class":279},"  \u002F\u002F1\n",[47,77599,77600,77602,77604,77606,77608,77610],{"class":49,"line":1273},[47,77601,77586],{"class":221},[47,77603,58301],{"class":53},[47,77605,3944],{"class":221},[47,77607,436],{"class":85},[47,77609,4309],{"class":221},[47,77611,77612],{"class":279},"  \u002F\u002F2\n",[47,77614,77615,77617,77619,77621,77623,77625],{"class":49,"line":1288},[47,77616,77586],{"class":221},[47,77618,58301],{"class":53},[47,77620,3944],{"class":221},[47,77622,298],{"class":85},[47,77624,4309],{"class":221},[47,77626,77627],{"class":279},"  \u002F\u002F[3,4]\n",[47,77629,77630,77632,77634,77636,77638,77640,77642,77644],{"class":49,"line":1294},[47,77631,77586],{"class":221},[47,77633,58301],{"class":53},[47,77635,3944],{"class":221},[47,77637,298],{"class":85},[47,77639,4994],{"class":221},[47,77641,411],{"class":85},[47,77643,4309],{"class":221},[47,77645,77646],{"class":279},"  \u002F\u002F3\n",[38,77648,77650],{"className":77549,"code":77649,"language":77551,"meta":43,"style":43},"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",[26,77651,77652,77679,77690,77701],{"__ignoreMap":43},[47,77653,77654,77656,77659,77661,77663,77665,77667,77669,77671,77673,77675,77677],{"class":49,"line":50},[47,77655,6885],{"class":217},[47,77657,77658],{"class":221}," [a, b, c] ",[47,77660,267],{"class":217},[47,77662,52280],{"class":221},[47,77664,436],{"class":85},[47,77666,12528],{"class":221},[47,77668,298],{"class":85},[47,77670,77572],{"class":221},[47,77672,292],{"class":85},[47,77674,12528],{"class":221},[47,77676,512],{"class":85},[47,77678,77581],{"class":221},[47,77680,77681,77683,77685,77688],{"class":49,"line":92},[47,77682,77586],{"class":221},[47,77684,58301],{"class":53},[47,77686,77687],{"class":221},"(a)",[47,77689,77597],{"class":279},[47,77691,77692,77694,77696,77699],{"class":49,"line":1273},[47,77693,77586],{"class":221},[47,77695,58301],{"class":53},[47,77697,77698],{"class":221},"(b)",[47,77700,77612],{"class":279},[47,77702,77703,77705,77707,77710],{"class":49,"line":1288},[47,77704,77586],{"class":221},[47,77706,58301],{"class":53},[47,77708,77709],{"class":221},"(c)",[47,77711,77627],{"class":279},[38,77713,77715],{"className":77549,"code":77714,"language":77551,"meta":43,"style":43},"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",[26,77716,77717,77744,77754,77764,77774],{"__ignoreMap":43},[47,77718,77719,77721,77724,77726,77728,77730,77732,77734,77736,77738,77740,77742],{"class":49,"line":50},[47,77720,6885],{"class":217},[47,77722,77723],{"class":221}," [a, b, [c, d]] ",[47,77725,267],{"class":217},[47,77727,52280],{"class":221},[47,77729,436],{"class":85},[47,77731,12528],{"class":221},[47,77733,298],{"class":85},[47,77735,77572],{"class":221},[47,77737,292],{"class":85},[47,77739,12528],{"class":221},[47,77741,512],{"class":85},[47,77743,77581],{"class":221},[47,77745,77746,77748,77750,77752],{"class":49,"line":92},[47,77747,77586],{"class":221},[47,77749,58301],{"class":53},[47,77751,77687],{"class":221},[47,77753,77597],{"class":279},[47,77755,77756,77758,77760,77762],{"class":49,"line":1273},[47,77757,77586],{"class":221},[47,77759,58301],{"class":53},[47,77761,77698],{"class":221},[47,77763,77612],{"class":279},[47,77765,77766,77768,77770,77772],{"class":49,"line":1288},[47,77767,77586],{"class":221},[47,77769,58301],{"class":53},[47,77771,77709],{"class":221},[47,77773,77646],{"class":279},[47,77775,77776,77778,77780,77783],{"class":49,"line":1294},[47,77777,77586],{"class":221},[47,77779,58301],{"class":53},[47,77781,77782],{"class":221},"(d)",[47,77784,77785],{"class":279},"  \u002F\u002F4\n",[187,77787,77789],{"id":77788},"_462-对象解构","4.6.2 对象解构",[19,77791,77792],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,77794,77795],{},"用的非常非常多！！！！！！",[22091,77797,77799],{"id":77798},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,77801,77802],{},"基本语法：",[171,77804,77805,77808,77811,77814],{},[109,77806,77807],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[109,77809,77810],{},"对象属性的值将被赋值给与属性名相同的变量",[109,77812,77813],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[109,77815,77816],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[38,77818,77820],{"className":50687,"code":77819,"language":50689,"meta":43,"style":43},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[26,77821,77822,77827,77832,77837,77841],{"__ignoreMap":43},[47,77823,77824],{"class":49,"line":50},[47,77825,77826],{"class":221},"const obj = {\n",[47,77828,77829],{"class":49,"line":92},[47,77830,77831],{"class":221},"   uname: 'pink老师',\n",[47,77833,77834],{"class":49,"line":1273},[47,77835,77836],{"class":221},"   age: 18,\n",[47,77838,77839],{"class":49,"line":1288},[47,77840,1659],{"class":221},[47,77842,77843],{"class":49,"line":1294},[47,77844,77845],{"class":221},"const { uname, age } = obj\n",[19,77847,77848],{},"上方代码这样写等价于：",[19,77850,77851],{},"const uname等价于obj.uname",[19,77853,77854],{},"变量名可以重新改名：",[19,77856,77857],{},"const uname='red老师'",[19,77859,77860],{},"const user={",[19,77862,77863],{},"  uname:'pink老师',",[19,77865,77866],{},"  age:18",[19,77868,1165],{},[19,77870,77871],{},"const {uname,age}=user",[19,77873,77874],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,77876,77877],{},"const {旧变量名：新变量名}=对象",[19,77879,77880],{},"const {uname:username,age}=user",[22091,77882,77884],{"id":77883},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,77886,77887],{},[1556,77888],{"alt":43,"src":77889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22091,77891,77893],{"id":77892},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,77895,77896],{},[1556,77897],{"alt":43,"src":77898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[38,77900,77902],{"className":53121,"code":77901,"language":53123,"meta":43,"style":43},"  \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",[26,77903,77904,77912,77917,77922,77927,77932,77937,77942,77947,77952,77956,77961,77966],{"__ignoreMap":43},[47,77905,77906,77908,77910],{"class":49,"line":50},[47,77907,52198],{"class":221},[47,77909,51867],{"class":51354},[47,77911,51361],{"class":221},[47,77913,77914],{"class":49,"line":92},[47,77915,77916],{"class":221},"    const pig = {\n",[47,77918,77919],{"class":49,"line":1273},[47,77920,77921],{"class":221},"      name: '佩奇',\n",[47,77923,77924],{"class":49,"line":1288},[47,77925,77926],{"class":221},"      family: {\n",[47,77928,77929],{"class":49,"line":1294},[47,77930,77931],{"class":221},"        mother: '猪妈妈',\n",[47,77933,77934],{"class":49,"line":1308},[47,77935,77936],{"class":221},"        father: '猪爸爸',\n",[47,77938,77939],{"class":49,"line":1314},[47,77940,77941],{"class":221},"        sister: '乔治'\n",[47,77943,77944],{"class":49,"line":1405},[47,77945,77946],{"class":221},"      },\n",[47,77948,77949],{"class":49,"line":1411},[47,77950,77951],{"class":221},"      age: 6\n",[47,77953,77954],{"class":49,"line":1423},[47,77955,2280],{"class":221},[47,77957,77958],{"class":49,"line":1706},[47,77959,77960],{"class":221},"    \u002F\u002F 多级对象解构\n",[47,77962,77963],{"class":49,"line":1711},[47,77964,77965],{"class":221},"    const { name, family: { mother, father, sister }, age } = pig\n",[47,77967,77968,77970,77972],{"class":49,"line":1717},[47,77969,52471],{"class":221},[47,77971,51867],{"class":51354},[47,77973,51361],{"class":221},[19,77975,77976],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[38,77978,77981],{"className":77979,"code":77980,"language":76501,"meta":43,"style":43},"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",[26,77982,77983,77988,77999,78011,78023,78032,78036,78047,78059,78069,78074,78078,78088,78099,78108,78112,78116,78127,78138,78147,78151,78156],{"__ignoreMap":43},[47,77984,77985],{"class":49,"line":50},[47,77986,77987],{"class":279},"    \u002F\u002F 这是后台传递过来的数据\n",[47,77989,77990,77992,77995,77997],{"class":49,"line":92},[47,77991,11314],{"class":217},[47,77993,77994],{"class":221}," msg ",[47,77996,267],{"class":217},[47,77998,15665],{"class":221},[47,78000,78001,78004,78006,78009],{"class":49,"line":1273},[47,78002,78003],{"class":81},"      \"code\"",[47,78005,1078],{"class":217},[47,78007,78008],{"class":85}," 200",[47,78010,31520],{"class":221},[47,78012,78013,78016,78018,78021],{"class":49,"line":1288},[47,78014,78015],{"class":81},"      \"msg\"",[47,78017,1078],{"class":217},[47,78019,78020],{"class":81}," \"获取新闻列表成功\"",[47,78022,31520],{"class":221},[47,78024,78025,78028,78030],{"class":49,"line":1294},[47,78026,78027],{"class":81},"      \"data\"",[47,78029,1078],{"class":217},[47,78031,55501],{"class":221},[47,78033,78034],{"class":49,"line":1308},[47,78035,2603],{"class":221},[47,78037,78038,78041,78043,78045],{"class":49,"line":1314},[47,78039,78040],{"class":81},"          \"id\"",[47,78042,1078],{"class":217},[47,78044,25172],{"class":85},[47,78046,31520],{"class":221},[47,78048,78049,78052,78054,78057],{"class":49,"line":1405},[47,78050,78051],{"class":81},"          \"title\"",[47,78053,1078],{"class":217},[47,78055,78056],{"class":81}," \"5G商用自己，三大运用商收入下降\"",[47,78058,31520],{"class":221},[47,78060,78061,78064,78066],{"class":49,"line":1411},[47,78062,78063],{"class":81},"          \"count\"",[47,78065,1078],{"class":217},[47,78067,78068],{"class":85}," 58\n",[47,78070,78071],{"class":49,"line":1423},[47,78072,78073],{"class":221},"        },\n",[47,78075,78076],{"class":49,"line":1706},[47,78077,2603],{"class":221},[47,78079,78080,78082,78084,78086],{"class":49,"line":1711},[47,78081,78040],{"class":81},[47,78083,1078],{"class":217},[47,78085,14848],{"class":85},[47,78087,31520],{"class":221},[47,78089,78090,78092,78094,78097],{"class":49,"line":1717},[47,78091,78051],{"class":81},[47,78093,1078],{"class":217},[47,78095,78096],{"class":81}," \"国际媒体头条速览\"",[47,78098,31520],{"class":221},[47,78100,78101,78103,78105],{"class":49,"line":1722},[47,78102,78063],{"class":81},[47,78104,1078],{"class":217},[47,78106,78107],{"class":85}," 56\n",[47,78109,78110],{"class":49,"line":1736},[47,78111,78073],{"class":221},[47,78113,78114],{"class":49,"line":1741},[47,78115,2603],{"class":221},[47,78117,78118,78120,78122,78125],{"class":49,"line":1747},[47,78119,78040],{"class":81},[47,78121,1078],{"class":217},[47,78123,78124],{"class":85}," 3",[47,78126,31520],{"class":221},[47,78128,78129,78131,78133,78136],{"class":49,"line":1768},[47,78130,78051],{"class":81},[47,78132,1078],{"class":217},[47,78134,78135],{"class":81}," \"乌克兰和俄罗斯持续冲突\"",[47,78137,31520],{"class":221},[47,78139,78140,78142,78144],{"class":49,"line":1773},[47,78141,78063],{"class":81},[47,78143,1078],{"class":217},[47,78145,78146],{"class":85}," 1669\n",[47,78148,78149],{"class":49,"line":1787},[47,78150,78073],{"class":221},[47,78152,78153],{"class":49,"line":1792},[47,78154,78155],{"class":221},"      ]\n",[47,78157,78158],{"class":49,"line":1821},[47,78159,2280],{"class":221},[19,78161,78162],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,78164,78165],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,78167,78168],{},"\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,78170,78171],{},"function({data}) {",[19,78173,78174],{},"console.log(data)",[19,78176,1165],{},[19,78178,78179],{},"render(msg)",[19,78181,78182],{},"实参传递给形参的时候解构了",[19,78184,78185],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,78187,78188],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,78190,78191],{},"function render({data:mydata}) {",[19,78193,78194],{},"  console.log(data)",[19,78196,1165],{},[187,78198,78200],{"id":78199},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,78202,78203],{},"有两种情况：一个是数组结构，一个是立即执行函数",[171,78205,78206],{},[109,78207,78208],{},"如果对一个数组进行遍历，有两种方式：",[19,78210,78211],{},"①法1",[19,78213,78214],{},"const arr=[1,2,3]",[19,78216,78217],{},"arr.map(function(item,index) {",[19,78219,78220],{},"  console.log(item)",[19,78222,52518],{},[19,78224,78225],{},[1556,78226],{"alt":43,"src":78227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,78229,78230],{},"②法2",[19,78232,78233],{},"const str='pink'",[19,78235,78236],{},"[1,2,3].map(function(item,index) {",[19,78238,78239],{},"console.log(item)",[19,78241,52518],{},[19,78243,78244],{},[1556,78245],{"alt":43,"src":78246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,78248,78249],{},"此时会报错",[19,78251,78252],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,78254,78239],{},[19,78256,52518],{},[19,78258,78259],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,78261,78263],{"id":78262},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,78265,78266],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,78268,78269],{},"可以理解为加强版的for循环",[19,78271,78272],{},[1556,78273],{"alt":43,"src":78274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,78276,78277],{},"里边不写return，不返回数组，只遍历不返回",[19,78279,78280],{},"map是返回数组",[19,78282,78283],{},"forEach主要用于遍历数组对象",[38,78285,78287],{"className":53121,"code":78286,"language":53123,"meta":43,"style":43},"  \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",[26,78288,78289,78297,78302,78307,78312,78317,78321,78326],{"__ignoreMap":43},[47,78290,78291,78293,78295],{"class":49,"line":50},[47,78292,52198],{"class":221},[47,78294,51867],{"class":51354},[47,78296,51361],{"class":221},[47,78298,78299],{"class":49,"line":92},[47,78300,78301],{"class":221},"    const arr = ['red', 'green', 'pink']\n",[47,78303,78304],{"class":49,"line":1273},[47,78305,78306],{"class":221},"    const result = arr.forEach(function (item, index) {\n",[47,78308,78309],{"class":49,"line":1288},[47,78310,78311],{"class":221},"      console.log(item)\n",[47,78313,78314],{"class":49,"line":1294},[47,78315,78316],{"class":221},"      console.log(index)\n",[47,78318,78319],{"class":49,"line":1308},[47,78320,33515],{"class":221},[47,78322,78323],{"class":49,"line":1314},[47,78324,78325],{"class":221},"    console.log(result)\n",[47,78327,78328,78330,78332],{"class":49,"line":1405},[47,78329,52471],{"class":221},[47,78331,51867],{"class":51354},[47,78333,51361],{"class":221},[19,78335,78336],{},[1556,78337],{"alt":43,"src":78338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,78340,78342],{"id":78341},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,78344,78345],{},[1556,78346],{"alt":43,"src":78347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,78349,78350],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[38,78352,78354],{"className":53121,"code":78353,"language":53123,"meta":43,"style":43},"\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",[26,78355,78356,78364,78372,78377,78382,78386,78390,78395,78399,78404,78412],{"__ignoreMap":43},[47,78357,78358,78360,78362],{"class":49,"line":50},[47,78359,1129],{"class":221},[47,78361,51854],{"class":51354},[47,78363,51361],{"class":221},[47,78365,78366,78368,78370],{"class":49,"line":92},[47,78367,52198],{"class":221},[47,78369,51867],{"class":51354},[47,78371,51361],{"class":221},[47,78373,78374],{"class":49,"line":1273},[47,78375,78376],{"class":221},"    const arr = [10, 20, 30]\n",[47,78378,78379],{"class":49,"line":1288},[47,78380,78381],{"class":221},"    const newArr = arr.filter(function (item, index) {\n",[47,78383,78384],{"class":49,"line":1294},[47,78385,78311],{"class":221},[47,78387,78388],{"class":49,"line":1308},[47,78389,78316],{"class":221},[47,78391,78392],{"class":49,"line":1314},[47,78393,78394],{"class":221},"      return item >= 20\n",[47,78396,78397],{"class":49,"line":1405},[47,78398,33515],{"class":221},[47,78400,78401],{"class":49,"line":1411},[47,78402,78403],{"class":221},"    console.log(newArr)\n",[47,78405,78406,78408,78410],{"class":49,"line":1423},[47,78407,52471],{"class":221},[47,78409,51867],{"class":51354},[47,78411,51361],{"class":221},[47,78413,78414,78416,78418],{"class":49,"line":1706},[47,78415,51839],{"class":221},[47,78417,51854],{"class":51354},[47,78419,51361],{"class":221},[19,78421,78422],{},"这个也可以写成箭头函数：",[38,78424,78426],{"className":50687,"code":78425,"language":50689,"meta":43,"style":43},"const newArr = arr.filter(item => item >= 20)\n",[26,78427,78428],{"__ignoreMap":43},[47,78429,78430],{"class":49,"line":50},[47,78431,78425],{"class":221},[14,78433,78435],{"id":78434},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,78437,78438],{},[1556,78439],{"alt":43,"src":78440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,78442,78443],{},"步骤：",[19,78445,78446],{},"①：渲染页面模块",[106,78448,78449,78452],{},[109,78450,78451],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[109,78453,78454],{},"用forEach+字符串的形式",[19,78456,78457],{},"②：点击不同需求，显示不同页面内容",[106,78459,78460,78463,78466,78469,78472],{},[109,78461,78462],{},"点击采取事件委托方式 .filter",[109,78464,78465],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[109,78467,78468],{},"筛选条件是根据点击的 data-index 来判断",[109,78470,78471],{},"可以使用对象解构，把事件对象解构",[109,78473,78474],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[38,78476,78478],{"className":50687,"code":78477,"language":50689,"meta":43,"style":43},"\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",[26,78479,78480,78490,78504,78508,78516,78530,78550,78562,78570,78576,78586,78596,78606,78610,78614,78620,78633,78645,78655,78667,78671,78675,78682,78695,78707,78724,78742,78755,78759,78763,78775,78785,78789,78793,78800,78841,78868,78878,78882,78886,78894,78906,78910,78914,78922,78934,78946,78957,78961,78965,78974,78986,78997,79001,79005,79014,79026,79038,79042,79046,79053,79063,79075,79087,79102,79106,79110,79118,79134,79144,79154,79164,79176,79180,79184,79194,79205,79215,79219,79227,79235,79239,79247,79262,79288,79313,79338,79357,79365,79379,79384,79389,79394,79399,79404,79412,79420,79425,79436,79441,79451,79461,79471,79481,79485,79489,79498,79507,79516,79525,79529,79533,79542,79551,79560,79569,79573,79577,79586,79595,79604,79613,79617,79621,79630,79639,79648,79657,79661,79665,79674,79683,79692,79701,79705,79709,79718,79727,79736,79745,79749,79753,79762,79771,79779,79788,79792,79796,79800,79805,79817,79822,79834,79838,79855,79883,79892,79897,79907,79917,79926,79931,79936,79940,79945,79962,79966,79971,79979,79984,80011,80016,80036,80041,80053,80058,80063,80068,80079,80093,80130,80148,80181,80198,80222,80226,80231,80237,80241,80245,80249,80257,80265,80269],{"__ignoreMap":43},[47,78481,78482,78484,78486,78488],{"class":49,"line":50},[47,78483,51351],{"class":221},[47,78485,51355],{"class":51354},[47,78487,51358],{"class":53},[47,78489,51361],{"class":221},[47,78491,78492,78494,78496,78498,78500,78502],{"class":49,"line":92},[47,78493,1129],{"class":221},[47,78495,50689],{"class":51354},[47,78497,51370],{"class":53},[47,78499,267],{"class":221},[47,78501,51375],{"class":81},[47,78503,51361],{"class":221},[47,78505,78506],{"class":49,"line":1273},[47,78507,2493],{"emptyLinePlaceholder":145},[47,78509,78510,78512,78514],{"class":49,"line":1288},[47,78511,1129],{"class":221},[47,78513,51388],{"class":51354},[47,78515,51361],{"class":221},[47,78517,78518,78520,78522,78524,78526,78528],{"class":49,"line":1294},[47,78519,52198],{"class":221},[47,78521,51398],{"class":51354},[47,78523,51401],{"class":53},[47,78525,267],{"class":221},[47,78527,51406],{"class":81},[47,78529,51361],{"class":221},[47,78531,78532,78534,78536,78538,78540,78542,78544,78546,78548],{"class":49,"line":1308},[47,78533,52198],{"class":221},[47,78535,51398],{"class":51354},[47,78537,15013],{"class":53},[47,78539,267],{"class":221},[47,78541,51445],{"class":81},[47,78543,51425],{"class":53},[47,78545,267],{"class":221},[47,78547,51452],{"class":81},[47,78549,51361],{"class":221},[47,78551,78552,78554,78556,78558,78560],{"class":49,"line":1314},[47,78553,52198],{"class":221},[47,78555,51461],{"class":51354},[47,78557,51464],{"class":221},[47,78559,51461],{"class":51354},[47,78561,51361],{"class":221},[47,78563,78564,78566,78568],{"class":49,"line":1405},[47,78565,52198],{"class":221},[47,78567,134],{"class":51354},[47,78569,51361],{"class":221},[47,78571,78572,78574],{"class":49,"line":1411},[47,78573,6496],{"class":51354},[47,78575,15665],{"class":221},[47,78577,78578,78580,78582,78584],{"class":49,"line":1423},[47,78579,54749],{"class":85},[47,78581,51491],{"class":221},[47,78583,411],{"class":85},[47,78585,1384],{"class":221},[47,78587,78588,78590,78592,78594],{"class":49,"line":1706},[47,78589,54760],{"class":85},[47,78591,51491],{"class":221},[47,78593,411],{"class":85},[47,78595,1384],{"class":221},[47,78597,78598,78600,78602,78604],{"class":49,"line":1711},[47,78599,72650],{"class":85},[47,78601,51491],{"class":221},[47,78603,60559],{"class":85},[47,78605,1384],{"class":221},[47,78607,78608],{"class":49,"line":1717},[47,78609,2280],{"class":221},[47,78611,78612],{"class":49,"line":1722},[47,78613,2493],{"emptyLinePlaceholder":145},[47,78615,78616,78618],{"class":49,"line":1736},[47,78617,62177],{"class":53},[47,78619,15665],{"class":221},[47,78621,78622,78624,78626,78629,78631],{"class":49,"line":1741},[47,78623,54825],{"class":85},[47,78625,51491],{"class":221},[47,78627,78628],{"class":85},"990",[47,78630,51546],{"class":217},[47,78632,1384],{"class":221},[47,78634,78635,78637,78639,78641,78643],{"class":49,"line":1747},[47,78636,54760],{"class":85},[47,78638,51491],{"class":221},[47,78640,411],{"class":85},[47,78642,51610],{"class":85},[47,78644,1384],{"class":221},[47,78646,78647,78649,78651,78653],{"class":49,"line":1768},[47,78648,55063],{"class":85},[47,78650,51491],{"class":221},[47,78652,51531],{"class":85},[47,78654,1384],{"class":221},[47,78656,78657,78660,78662,78665],{"class":49,"line":1773},[47,78658,78659],{"class":85},"      flex-wrap",[47,78661,51491],{"class":221},[47,78663,78664],{"class":85},"wrap",[47,78666,1384],{"class":221},[47,78668,78669],{"class":49,"line":1787},[47,78670,2280],{"class":221},[47,78672,78673],{"class":49,"line":1792},[47,78674,2493],{"emptyLinePlaceholder":145},[47,78676,78677,78680],{"class":49,"line":1821},[47,78678,78679],{"class":53},"    .item",[47,78681,15665],{"class":221},[47,78683,78684,78686,78688,78691,78693],{"class":49,"line":1826},[47,78685,54825],{"class":85},[47,78687,51491],{"class":221},[47,78689,78690],{"class":85},"240",[47,78692,51546],{"class":217},[47,78694,1384],{"class":221},[47,78696,78697,78699,78701,78703,78705],{"class":49,"line":1843},[47,78698,62054],{"class":85},[47,78700,51491],{"class":221},[47,78702,665],{"class":85},[47,78704,51546],{"class":217},[47,78706,1384],{"class":221},[47,78708,78709,78711,78713,78715,78717,78720,78722],{"class":49,"line":1848},[47,78710,54749],{"class":85},[47,78712,51491],{"class":221},[47,78714,919],{"class":85},[47,78716,51546],{"class":217},[47,78718,78719],{"class":85}," 30",[47,78721,51546],{"class":217},[47,78723,1384],{"class":221},[47,78725,78726,78728,78730,78732,78735,78738,78740],{"class":49,"line":1853},[47,78727,61914],{"class":85},[47,78729,51491],{"class":221},[47,78731,28175],{"class":85},[47,78733,78734],{"class":85}," ease",[47,78736,78737],{"class":85}," .5",[47,78739,914],{"class":217},[47,78741,1384],{"class":221},[47,78743,78744,78747,78749,78751,78753],{"class":49,"line":1858},[47,78745,78746],{"class":85},"      margin-bottom",[47,78748,51491],{"class":221},[47,78750,919],{"class":85},[47,78752,51546],{"class":217},[47,78754,1384],{"class":221},[47,78756,78757],{"class":49,"line":1872},[47,78758,2280],{"class":221},[47,78760,78761],{"class":49,"line":1877},[47,78762,2493],{"emptyLinePlaceholder":145},[47,78764,78765,78768,78770,78773],{"class":49,"line":2670},[47,78766,78767],{"class":53},"    .item:nth-child",[47,78769,222],{"class":221},[47,78771,78772],{"class":85},"4n",[47,78774,12535],{"class":221},[47,78776,78777,78779,78781,78783],{"class":49,"line":2684},[47,78778,62054],{"class":85},[47,78780,51491],{"class":221},[47,78782,411],{"class":85},[47,78784,1384],{"class":221},[47,78786,78787],{"class":49,"line":2692},[47,78788,2280],{"class":221},[47,78790,78791],{"class":49,"line":2697},[47,78792,2493],{"emptyLinePlaceholder":145},[47,78794,78795,78798],{"class":49,"line":2703},[47,78796,78797],{"class":53},"    .item:hover",[47,78799,15665],{"class":221},[47,78801,78802,78805,78807,78809,78811,78813,78815,78817,78819,78822,78824,78826,78828,78830,78832,78834,78836,78839],{"class":49,"line":2709},[47,78803,78804],{"class":85},"      box-shadow",[47,78806,51491],{"class":221},[47,78808,411],{"class":85},[47,78810,51546],{"class":217},[47,78812,4186],{"class":85},[47,78814,51546],{"class":217},[47,78816,2241],{"class":85},[47,78818,51546],{"class":217},[47,78820,78821],{"class":85}," rgba",[47,78823,222],{"class":221},[47,78825,411],{"class":85},[47,78827,12528],{"class":221},[47,78829,411],{"class":85},[47,78831,12528],{"class":221},[47,78833,411],{"class":85},[47,78835,12528],{"class":221},[47,78837,78838],{"class":85},".2",[47,78840,2812],{"class":221},[47,78842,78843,78846,78848,78851,78853,78855,78857,78860,78862,78864,78866],{"class":49,"line":2714},[47,78844,78845],{"class":85},"      transform",[47,78847,51491],{"class":221},[47,78849,78850],{"class":85},"translate3d",[47,78852,222],{"class":221},[47,78854,411],{"class":85},[47,78856,12528],{"class":221},[47,78858,78859],{"class":85},"-4",[47,78861,51546],{"class":217},[47,78863,12528],{"class":221},[47,78865,411],{"class":85},[47,78867,2812],{"class":221},[47,78869,78870,78872,78874,78876],{"class":49,"line":8041},[47,78871,62079],{"class":85},[47,78873,51491],{"class":221},[47,78875,62084],{"class":85},[47,78877,1384],{"class":221},[47,78879,78880],{"class":49,"line":8065},[47,78881,2280],{"class":221},[47,78883,78884],{"class":49,"line":8070},[47,78885,2493],{"emptyLinePlaceholder":145},[47,78887,78888,78890,78892],{"class":49,"line":8076},[47,78889,78679],{"class":53},[47,78891,55669],{"class":51354},[47,78893,15665],{"class":221},[47,78895,78896,78898,78900,78902,78904],{"class":49,"line":8103},[47,78897,54825],{"class":85},[47,78899,51491],{"class":221},[47,78901,530],{"class":85},[47,78903,547],{"class":217},[47,78905,1384],{"class":221},[47,78907,78908],{"class":49,"line":8108},[47,78909,2280],{"class":221},[47,78911,78912],{"class":49,"line":8114},[47,78913,2493],{"emptyLinePlaceholder":145},[47,78915,78916,78918,78920],{"class":49,"line":8126},[47,78917,78679],{"class":53},[47,78919,62358],{"class":53},[47,78921,15665],{"class":221},[47,78923,78924,78926,78928,78930,78932],{"class":49,"line":8138},[47,78925,54976],{"class":85},[47,78927,51491],{"class":221},[47,78929,869],{"class":85},[47,78931,51546],{"class":217},[47,78933,1384],{"class":221},[47,78935,78936,78938,78940,78942,78944],{"class":49,"line":8150},[47,78937,78746],{"class":85},[47,78939,51491],{"class":221},[47,78941,665],{"class":85},[47,78943,51546],{"class":217},[47,78945,1384],{"class":221},[47,78947,78948,78950,78952,78955],{"class":49,"line":9809},[47,78949,57470],{"class":85},[47,78951,51491],{"class":221},[47,78953,78954],{"class":85},"#666",[47,78956,1384],{"class":221},[47,78958,78959],{"class":49,"line":9834},[47,78960,2280],{"class":221},[47,78962,78963],{"class":49,"line":9857},[47,78964,2493],{"emptyLinePlaceholder":145},[47,78966,78967,78969,78972],{"class":49,"line":9881},[47,78968,78679],{"class":53},[47,78970,78971],{"class":53}," .price",[47,78973,15665],{"class":221},[47,78975,78976,78978,78980,78982,78984],{"class":49,"line":9886},[47,78977,54976],{"class":85},[47,78979,51491],{"class":221},[47,78981,969],{"class":85},[47,78983,51546],{"class":217},[47,78985,1384],{"class":221},[47,78987,78988,78990,78992,78995],{"class":49,"line":9891},[47,78989,57470],{"class":85},[47,78991,51491],{"class":221},[47,78993,78994],{"class":85},"firebrick",[47,78996,1384],{"class":221},[47,78998,78999],{"class":49,"line":9896},[47,79000,2280],{"class":221},[47,79002,79003],{"class":49,"line":9905},[47,79004,2493],{"emptyLinePlaceholder":145},[47,79006,79007,79009,79012],{"class":49,"line":9910},[47,79008,78679],{"class":53},[47,79010,79011],{"class":53}," .price::before",[47,79013,15665],{"class":221},[47,79015,79016,79019,79021,79024],{"class":49,"line":9916},[47,79017,79018],{"class":85},"      content",[47,79020,51491],{"class":221},[47,79022,79023],{"class":81},"'￥'",[47,79025,1384],{"class":221},[47,79027,79028,79030,79032,79034,79036],{"class":49,"line":9937},[47,79029,54976],{"class":85},[47,79031,51491],{"class":221},[47,79033,768],{"class":85},[47,79035,51546],{"class":217},[47,79037,1384],{"class":221},[47,79039,79040],{"class":49,"line":9943},[47,79041,2280],{"class":221},[47,79043,79044],{"class":49,"line":9957},[47,79045,2493],{"emptyLinePlaceholder":145},[47,79047,79048,79051],{"class":49,"line":9963},[47,79049,79050],{"class":53},"    .filter",[47,79052,15665],{"class":221},[47,79054,79055,79057,79059,79061],{"class":49,"line":9990},[47,79056,55063],{"class":85},[47,79058,51491],{"class":221},[47,79060,51531],{"class":85},[47,79062,1384],{"class":221},[47,79064,79065,79067,79069,79071,79073],{"class":49,"line":9999},[47,79066,54825],{"class":85},[47,79068,51491],{"class":221},[47,79070,78628],{"class":85},[47,79072,51546],{"class":217},[47,79074,1384],{"class":221},[47,79076,79077,79079,79081,79083,79085],{"class":49,"line":10005},[47,79078,54760],{"class":85},[47,79080,51491],{"class":221},[47,79082,411],{"class":85},[47,79084,51610],{"class":85},[47,79086,1384],{"class":221},[47,79088,79089,79091,79093,79095,79097,79099],{"class":49,"line":10013},[47,79090,54749],{"class":85},[47,79092,51491],{"class":221},[47,79094,875],{"class":85},[47,79096,51546],{"class":217},[47,79098,78719],{"class":85},[47,79100,79101],{"class":217},"px\n",[47,79103,79104],{"class":49,"line":10018},[47,79105,2280],{"class":221},[47,79107,79108],{"class":49,"line":16697},[47,79109,2493],{"emptyLinePlaceholder":145},[47,79111,79112,79114,79116],{"class":49,"line":16703},[47,79113,79050],{"class":53},[47,79115,1492],{"class":51354},[47,79117,15665],{"class":221},[47,79119,79120,79122,79124,79126,79128,79130,79132],{"class":49,"line":16726},[47,79121,54749],{"class":85},[47,79123,51491],{"class":221},[47,79125,665],{"class":85},[47,79127,51546],{"class":217},[47,79129,9043],{"class":85},[47,79131,51546],{"class":217},[47,79133,1384],{"class":221},[47,79135,79136,79138,79140,79142],{"class":49,"line":16732},[47,79137,61775],{"class":85},[47,79139,51491],{"class":221},[47,79141,61872],{"class":85},[47,79143,1384],{"class":221},[47,79145,79146,79148,79150,79152],{"class":49,"line":16755},[47,79147,57470],{"class":85},[47,79149,51491],{"class":221},[47,79151,78954],{"class":85},[47,79153,1384],{"class":221},[47,79155,79156,79158,79160,79162],{"class":49,"line":16769},[47,79157,64024],{"class":85},[47,79159,51491],{"class":221},[47,79161,54791],{"class":85},[47,79163,1384],{"class":221},[47,79165,79166,79168,79170,79172,79174],{"class":49,"line":16789},[47,79167,61804],{"class":85},[47,79169,51491],{"class":221},[47,79171,919],{"class":85},[47,79173,51546],{"class":217},[47,79175,1384],{"class":221},[47,79177,79178],{"class":49,"line":16795},[47,79179,2280],{"class":221},[47,79181,79182],{"class":49,"line":16806},[47,79183,2493],{"emptyLinePlaceholder":145},[47,79185,79186,79188,79190,79192],{"class":49,"line":16829},[47,79187,79050],{"class":53},[47,79189,1492],{"class":51354},[47,79191,61954],{"class":53},[47,79193,15665],{"class":221},[47,79195,79196,79198,79200,79203],{"class":49,"line":16851},[47,79197,54938],{"class":85},[47,79199,51491],{"class":221},[47,79201,79202],{"class":85},"#05943c",[47,79204,1384],{"class":221},[47,79206,79207,79209,79211,79213],{"class":49,"line":16856},[47,79208,57470],{"class":85},[47,79210,51491],{"class":221},[47,79212,60896],{"class":85},[47,79214,1384],{"class":221},[47,79216,79217],{"class":49,"line":16862},[47,79218,2280],{"class":221},[47,79220,79221,79223,79225],{"class":49,"line":16876},[47,79222,52471],{"class":221},[47,79224,134],{"class":51354},[47,79226,51361],{"class":221},[47,79228,79229,79231,79233],{"class":49,"line":16889},[47,79230,51839],{"class":221},[47,79232,51388],{"class":51354},[47,79234,51361],{"class":221},[47,79236,79237],{"class":49,"line":16894},[47,79238,2493],{"emptyLinePlaceholder":145},[47,79240,79241,79243,79245],{"class":49,"line":16908},[47,79242,1129],{"class":221},[47,79244,51854],{"class":51354},[47,79246,51361],{"class":221},[47,79248,79249,79251,79253,79255,79257,79260],{"class":49,"line":16913},[47,79250,52198],{"class":221},[47,79252,51665],{"class":51354},[47,79254,53540],{"class":53},[47,79256,267],{"class":221},[47,79258,79259],{"class":81},"\"filter\"",[47,79261,51361],{"class":221},[47,79263,79264,79266,79268,79270,79272,79274,79277,79279,79281,79284,79286],{"class":49,"line":16919},[47,79265,51395],{"class":221},[47,79267,457],{"class":51354},[47,79269,61111],{"class":53},[47,79271,267],{"class":221},[47,79273,61116],{"class":81},[47,79275,79276],{"class":53}," data-index",[47,79278,267],{"class":221},[47,79280,3771],{"class":81},[47,79282,79283],{"class":221},">0-100元\u003C\u002F",[47,79285,457],{"class":51354},[47,79287,51361],{"class":221},[47,79289,79290,79292,79294,79296,79298,79300,79302,79304,79306,79309,79311],{"class":49,"line":16924},[47,79291,51395],{"class":221},[47,79293,457],{"class":51354},[47,79295,61111],{"class":53},[47,79297,267],{"class":221},[47,79299,61116],{"class":81},[47,79301,79276],{"class":53},[47,79303,267],{"class":221},[47,79305,3794],{"class":81},[47,79307,79308],{"class":221},">100-300元\u003C\u002F",[47,79310,457],{"class":51354},[47,79312,51361],{"class":221},[47,79314,79315,79317,79319,79321,79323,79325,79327,79329,79331,79334,79336],{"class":49,"line":16938},[47,79316,51395],{"class":221},[47,79318,457],{"class":51354},[47,79320,61111],{"class":53},[47,79322,267],{"class":221},[47,79324,61116],{"class":81},[47,79326,79276],{"class":53},[47,79328,267],{"class":221},[47,79330,3807],{"class":81},[47,79332,79333],{"class":221},">300元以上\u003C\u002F",[47,79335,457],{"class":51354},[47,79337,51361],{"class":221},[47,79339,79340,79342,79344,79346,79348,79350,79353,79355],{"class":49,"line":16943},[47,79341,51395],{"class":221},[47,79343,457],{"class":51354},[47,79345,61111],{"class":53},[47,79347,267],{"class":221},[47,79349,61116],{"class":81},[47,79351,79352],{"class":221},">全部区间\u003C\u002F",[47,79354,457],{"class":51354},[47,79356,51361],{"class":221},[47,79358,79359,79361,79363],{"class":49,"line":16948},[47,79360,52471],{"class":221},[47,79362,51665],{"class":51354},[47,79364,51361],{"class":221},[47,79366,79367,79369,79371,79373,79375,79377],{"class":49,"line":16962},[47,79368,52198],{"class":221},[47,79370,51665],{"class":51354},[47,79372,53540],{"class":53},[47,79374,267],{"class":221},[47,79376,62662],{"class":81},[47,79378,51361],{"class":221},[47,79380,79381],{"class":49,"line":16974},[47,79382,79383],{"class":279},"    \u003C!-- \u003Cdiv class=\"item\">\n",[47,79385,79386],{"class":49,"line":16979},[47,79387,79388],{"class":279},"      \u003Cimg src=\"\" alt=\"\">\n",[47,79390,79391],{"class":49,"line":16992},[47,79392,79393],{"class":279},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[47,79395,79396],{"class":49,"line":16997},[47,79397,79398],{"class":279},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[47,79400,79401],{"class":49,"line":17002},[47,79402,79403],{"class":279},"    \u003C\u002Fdiv> -->\n",[47,79405,79406,79408,79410],{"class":49,"line":17007},[47,79407,52471],{"class":221},[47,79409,51665],{"class":51354},[47,79411,51361],{"class":221},[47,79413,79414,79416,79418],{"class":49,"line":17020},[47,79415,52198],{"class":221},[47,79417,51867],{"class":51354},[47,79419,51361],{"class":221},[47,79421,79422],{"class":49,"line":17025},[47,79423,79424],{"class":279},"    \u002F\u002F 2. 初始化数据\n",[47,79426,79427,79429,79432,79434],{"class":49,"line":32687},[47,79428,11314],{"class":217},[47,79430,79431],{"class":85}," goodsList",[47,79433,13657],{"class":217},[47,79435,55501],{"class":221},[47,79437,79438],{"class":49,"line":32693},[47,79439,79440],{"class":221},"      {\n",[47,79442,79443,79446,79449],{"class":49,"line":32699},[47,79444,79445],{"class":221},"        id: ",[47,79447,79448],{"class":81},"'4001172'",[47,79450,31520],{"class":221},[47,79452,79453,79456,79459],{"class":49,"line":32705},[47,79454,79455],{"class":221},"        name: ",[47,79457,79458],{"class":81},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[47,79460,31520],{"class":221},[47,79462,79463,79466,79469],{"class":49,"line":32711},[47,79464,79465],{"class":221},"        price: ",[47,79467,79468],{"class":81},"'289.00'",[47,79470,31520],{"class":221},[47,79472,79473,79476,79479],{"class":49,"line":32722},[47,79474,79475],{"class":221},"        picture: ",[47,79477,79478],{"class":81},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[47,79480,31520],{"class":221},[47,79482,79483],{"class":49,"line":32728},[47,79484,77946],{"class":221},[47,79486,79487],{"class":49,"line":32748},[47,79488,79440],{"class":221},[47,79490,79491,79493,79496],{"class":49,"line":32754},[47,79492,79445],{"class":221},[47,79494,79495],{"class":81},"'4001594'",[47,79497,31520],{"class":221},[47,79499,79500,79502,79505],{"class":49,"line":32765},[47,79501,79455],{"class":221},[47,79503,79504],{"class":81},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[47,79506,31520],{"class":221},[47,79508,79509,79511,79514],{"class":49,"line":32771},[47,79510,79465],{"class":221},[47,79512,79513],{"class":81},"'288.00'",[47,79515,31520],{"class":221},[47,79517,79518,79520,79523],{"class":49,"line":32777},[47,79519,79475],{"class":221},[47,79521,79522],{"class":81},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[47,79524,31520],{"class":221},[47,79526,79527],{"class":49,"line":32783},[47,79528,77946],{"class":221},[47,79530,79531],{"class":49,"line":32789},[47,79532,79440],{"class":221},[47,79534,79535,79537,79540],{"class":49,"line":32795},[47,79536,79445],{"class":221},[47,79538,79539],{"class":81},"'4001009'",[47,79541,31520],{"class":221},[47,79543,79544,79546,79549],{"class":49,"line":32801},[47,79545,79455],{"class":221},[47,79547,79548],{"class":81},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[47,79550,31520],{"class":221},[47,79552,79553,79555,79558],{"class":49,"line":32807},[47,79554,79465],{"class":221},[47,79556,79557],{"class":81},"'109.00'",[47,79559,31520],{"class":221},[47,79561,79562,79564,79567],{"class":49,"line":32827},[47,79563,79475],{"class":221},[47,79565,79566],{"class":81},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[47,79568,31520],{"class":221},[47,79570,79571],{"class":49,"line":32833},[47,79572,77946],{"class":221},[47,79574,79575],{"class":49,"line":32849},[47,79576,79440],{"class":221},[47,79578,79579,79581,79584],{"class":49,"line":32855},[47,79580,79445],{"class":221},[47,79582,79583],{"class":81},"'4001874'",[47,79585,31520],{"class":221},[47,79587,79588,79590,79593],{"class":49,"line":32869},[47,79589,79455],{"class":221},[47,79591,79592],{"class":81},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[47,79594,31520],{"class":221},[47,79596,79597,79599,79602],{"class":49,"line":32875},[47,79598,79465],{"class":221},[47,79600,79601],{"class":81},"'488.00'",[47,79603,31520],{"class":221},[47,79605,79606,79608,79611],{"class":49,"line":32890},[47,79607,79475],{"class":221},[47,79609,79610],{"class":81},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[47,79612,31520],{"class":221},[47,79614,79615],{"class":49,"line":32896},[47,79616,77946],{"class":221},[47,79618,79619],{"class":49,"line":32905},[47,79620,79440],{"class":221},[47,79622,79623,79625,79628],{"class":49,"line":32911},[47,79624,79445],{"class":221},[47,79626,79627],{"class":81},"'4001649'",[47,79629,31520],{"class":221},[47,79631,79632,79634,79637],{"class":49,"line":32920},[47,79633,79455],{"class":221},[47,79635,79636],{"class":81},"'大师监制龙泉青瓷茶叶罐'",[47,79638,31520],{"class":221},[47,79640,79641,79643,79646],{"class":49,"line":32926},[47,79642,79465],{"class":221},[47,79644,79645],{"class":81},"'139.00'",[47,79647,31520],{"class":221},[47,79649,79650,79652,79655],{"class":49,"line":32932},[47,79651,79475],{"class":221},[47,79653,79654],{"class":81},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[47,79656,31520],{"class":221},[47,79658,79659],{"class":49,"line":32941},[47,79660,77946],{"class":221},[47,79662,79663],{"class":49,"line":32947},[47,79664,79440],{"class":221},[47,79666,79667,79669,79672],{"class":49,"line":32958},[47,79668,79445],{"class":221},[47,79670,79671],{"class":81},"'3997185'",[47,79673,31520],{"class":221},[47,79675,79676,79678,79681],{"class":49,"line":32964},[47,79677,79455],{"class":221},[47,79679,79680],{"class":81},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[47,79682,31520],{"class":221},[47,79684,79685,79687,79690],{"class":49,"line":32983},[47,79686,79465],{"class":221},[47,79688,79689],{"class":81},"'108.00'",[47,79691,31520],{"class":221},[47,79693,79694,79696,79699],{"class":49,"line":32989},[47,79695,79475],{"class":221},[47,79697,79698],{"class":81},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[47,79700,31520],{"class":221},[47,79702,79703],{"class":49,"line":33000},[47,79704,77946],{"class":221},[47,79706,79707],{"class":49,"line":33006},[47,79708,79440],{"class":221},[47,79710,79711,79713,79716],{"class":49,"line":33026},[47,79712,79445],{"class":221},[47,79714,79715],{"class":81},"'3997403'",[47,79717,31520],{"class":221},[47,79719,79720,79722,79725],{"class":49,"line":33042},[47,79721,79455],{"class":221},[47,79723,79724],{"class":81},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[47,79726,31520],{"class":221},[47,79728,79729,79731,79734],{"class":49,"line":33048},[47,79730,79465],{"class":221},[47,79732,79733],{"class":81},"'100.00'",[47,79735,31520],{"class":221},[47,79737,79738,79740,79743],{"class":49,"line":33062},[47,79739,79475],{"class":221},[47,79741,79742],{"class":81},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[47,79744,31520],{"class":221},[47,79746,79747],{"class":49,"line":33068},[47,79748,77946],{"class":221},[47,79750,79751],{"class":49,"line":33074},[47,79752,79440],{"class":221},[47,79754,79755,79757,79760],{"class":49,"line":33085},[47,79756,79445],{"class":221},[47,79758,79759],{"class":81},"'3998274'",[47,79761,31520],{"class":221},[47,79763,79764,79766,79769],{"class":49,"line":33091},[47,79765,79455],{"class":221},[47,79767,79768],{"class":81},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[47,79770,31520],{"class":221},[47,79772,79773,79775,79777],{"class":49,"line":33097},[47,79774,79465],{"class":221},[47,79776,79645],{"class":81},[47,79778,31520],{"class":221},[47,79780,79781,79783,79786],{"class":49,"line":33107},[47,79782,79475],{"class":221},[47,79784,79785],{"class":81},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[47,79787,31520],{"class":221},[47,79789,79790],{"class":49,"line":33113},[47,79791,77946],{"class":221},[47,79793,79794],{"class":49,"line":33124},[47,79795,53163],{"class":221},[47,79797,79798],{"class":49,"line":33130},[47,79799,2493],{"emptyLinePlaceholder":145},[47,79801,79802],{"class":49,"line":33140},[47,79803,79804],{"class":279},"    \u002F\u002F 1.渲染函数\n",[47,79806,79807,79809,79811,79813,79815],{"class":49,"line":33145},[47,79808,70138],{"class":217},[47,79810,70141],{"class":53},[47,79812,222],{"class":221},[47,79814,3973],{"class":5309},[47,79816,12535],{"class":221},[47,79818,79819],{"class":49,"line":33151},[47,79820,79821],{"class":279},"      \u002F\u002F 声明空字符串\n",[47,79823,79824,79827,79830,79832],{"class":49,"line":33200},[47,79825,79826],{"class":217},"      let",[47,79828,79829],{"class":221}," str ",[47,79831,267],{"class":217},[47,79833,70158],{"class":81},[47,79835,79836],{"class":49,"line":33247},[47,79837,70163],{"class":279},[47,79839,79840,79842,79845,79847,79850,79853],{"class":49,"line":33252},[47,79841,58061],{"class":221},[47,79843,79844],{"class":53},"forEach",[47,79846,222],{"class":221},[47,79848,79849],{"class":5309},"item",[47,79851,79852],{"class":217}," =>",[47,79854,15665],{"class":221},[47,79856,79857,79859,79862,79865,79867,79870,79872,79875,79878,79880],{"class":49,"line":33258},[47,79858,61324],{"class":217},[47,79860,79861],{"class":221}," { ",[47,79863,79864],{"class":85},"name",[47,79866,12528],{"class":221},[47,79868,79869],{"class":85},"price",[47,79871,12528],{"class":221},[47,79873,79874],{"class":85},"picture",[47,79876,79877],{"class":221}," } ",[47,79879,267],{"class":217},[47,79881,79882],{"class":221}," item\n",[47,79884,79885,79888,79890],{"class":49,"line":33277},[47,79886,79887],{"class":221},"        str ",[47,79889,9570],{"class":217},[47,79891,70222],{"class":81},[47,79893,79894],{"class":49,"line":33283},[47,79895,79896],{"class":81},"          \u003Cdiv class=\"item\">\n",[47,79898,79899,79902,79904],{"class":49,"line":33303},[47,79900,79901],{"class":81},"            \u003Cimg src=\"${",[47,79903,79874],{"class":221},[47,79905,79906],{"class":81},"}\" alt=\"\">\n",[47,79908,79909,79912,79914],{"class":49,"line":33309},[47,79910,79911],{"class":81},"            \u003Cp class=\"name\">${",[47,79913,79864],{"class":221},[47,79915,79916],{"class":81},"}\u003C\u002Fp>\n",[47,79918,79919,79922,79924],{"class":49,"line":33315},[47,79920,79921],{"class":81},"            \u003Cp class=\"price\">${",[47,79923,79869],{"class":221},[47,79925,79916],{"class":81},[47,79927,79928],{"class":49,"line":33325},[47,79929,79930],{"class":81},"          \u003C\u002Fdiv>\n",[47,79932,79933],{"class":49,"line":33330},[47,79934,79935],{"class":81},"        `\n",[47,79937,79938],{"class":49,"line":33336},[47,79939,64869],{"class":221},[47,79941,79942],{"class":49,"line":33352},[47,79943,79944],{"class":279},"      \u002F\u002F 追加给List\n",[47,79946,79947,79949,79951,79953,79956,79958,79960],{"class":49,"line":33397},[47,79948,55825],{"class":221},[47,79950,54453],{"class":53},[47,79952,222],{"class":221},[47,79954,79955],{"class":81},"'.list'",[47,79957,74303],{"class":221},[47,79959,267],{"class":217},[47,79961,74039],{"class":221},[47,79963,79964],{"class":49,"line":33403},[47,79965,2280],{"class":221},[47,79967,79968],{"class":49,"line":33409},[47,79969,79970],{"class":279},"    \u002F\u002F 页面一打开就需要渲染\n",[47,79972,79973,79976],{"class":49,"line":33415},[47,79974,79975],{"class":53},"    render",[47,79977,79978],{"class":221},"(goodsList)\n",[47,79980,79981],{"class":49,"line":33426},[47,79982,79983],{"class":279},"    \u002F\u002F 2.过滤筛选\n",[47,79985,79986,79988,79990,79992,79995,79997,79999,80001,80003,80005,80007,80009],{"class":49,"line":33432},[47,79987,52461],{"class":221},[47,79989,54453],{"class":53},[47,79991,222],{"class":221},[47,79993,79994],{"class":81},"'.filter'",[47,79996,30880],{"class":221},[47,79998,57867],{"class":53},[47,80000,222],{"class":221},[47,80002,57872],{"class":81},[47,80004,12528],{"class":221},[47,80006,295],{"class":5309},[47,80008,79852],{"class":217},[47,80010,15665],{"class":221},[47,80012,80013],{"class":49,"line":33438},[47,80014,80015],{"class":279},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[47,80017,80018,80020,80022,80025,80027,80029,80031,80033],{"class":49,"line":33444},[47,80019,58282],{"class":217},[47,80021,79861],{"class":221},[47,80023,80024],{"class":85},"tagName",[47,80026,12528],{"class":221},[47,80028,31591],{"class":85},[47,80030,79877],{"class":221},[47,80032,267],{"class":217},[47,80034,80035],{"class":221}," e.target\n",[47,80037,80038],{"class":49,"line":33462},[47,80039,80040],{"class":279},"      \u002F\u002F 判断\n",[47,80042,80043,80045,80047,80049,80051],{"class":49,"line":33476},[47,80044,54534],{"class":217},[47,80046,67088],{"class":221},[47,80048,54540],{"class":217},[47,80050,68310],{"class":81},[47,80052,12535],{"class":221},[47,80054,80055],{"class":49,"line":33485},[47,80056,80057],{"class":279},"        \u002F\u002F console.log(11)\n",[47,80059,80060],{"class":49,"line":33494},[47,80061,80062],{"class":279},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[47,80064,80065],{"class":49,"line":33503},[47,80066,80067],{"class":279},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[47,80069,80070,80072,80074,80076],{"class":49,"line":33512},[47,80071,51884],{"class":217},[47,80073,51887],{"class":221},[47,80075,267],{"class":217},[47,80077,80078],{"class":221}," goodsList\n",[47,80080,80081,80083,80086,80088,80091],{"class":49,"line":33518},[47,80082,2590],{"class":217},[47,80084,80085],{"class":221}," (dataset.index ",[47,80087,54540],{"class":217},[47,80089,80090],{"class":81}," '1'",[47,80092,12535],{"class":221},[47,80094,80095,80098,80100,80103,80106,80108,80110,80112,80115,80117,80119,80122,80124,80126,80128],{"class":49,"line":33524},[47,80096,80097],{"class":221},"          arr ",[47,80099,267],{"class":217},[47,80101,80102],{"class":221}," goodsList.",[47,80104,80105],{"class":53},"filter",[47,80107,222],{"class":221},[47,80109,79849],{"class":5309},[47,80111,79852],{"class":217},[47,80113,80114],{"class":221}," item.price ",[47,80116,1804],{"class":217},[47,80118,4186],{"class":85},[47,80120,80121],{"class":217}," &&",[47,80123,80114],{"class":221},[47,80125,1682],{"class":217},[47,80127,5847],{"class":85},[47,80129,228],{"class":221},[47,80131,80132,80135,80137,80139,80141,80143,80146],{"class":49,"line":33532},[47,80133,80134],{"class":221},"        } ",[47,80136,1795],{"class":217},[47,80138,1798],{"class":217},[47,80140,80085],{"class":221},[47,80142,54540],{"class":217},[47,80144,80145],{"class":81}," '2'",[47,80147,12535],{"class":221},[47,80149,80150,80152,80154,80156,80158,80160,80162,80164,80166,80168,80170,80172,80174,80176,80179],{"class":49,"line":33537},[47,80151,80097],{"class":221},[47,80153,267],{"class":217},[47,80155,80102],{"class":221},[47,80157,80105],{"class":53},[47,80159,222],{"class":221},[47,80161,79849],{"class":5309},[47,80163,79852],{"class":217},[47,80165,80114],{"class":221},[47,80167,1804],{"class":217},[47,80169,5847],{"class":85},[47,80171,80121],{"class":217},[47,80173,80114],{"class":221},[47,80175,1682],{"class":217},[47,80177,80178],{"class":85}," 300",[47,80180,228],{"class":221},[47,80182,80183,80185,80187,80189,80191,80193,80196],{"class":49,"line":33543},[47,80184,80134],{"class":221},[47,80186,1795],{"class":217},[47,80188,1798],{"class":217},[47,80190,80085],{"class":221},[47,80192,54540],{"class":217},[47,80194,80195],{"class":81}," '3'",[47,80197,12535],{"class":221},[47,80199,80200,80202,80204,80206,80208,80210,80212,80214,80216,80218,80220],{"class":49,"line":33554},[47,80201,80097],{"class":221},[47,80203,267],{"class":217},[47,80205,80102],{"class":221},[47,80207,80105],{"class":53},[47,80209,222],{"class":221},[47,80211,79849],{"class":5309},[47,80213,79852],{"class":217},[47,80215,80114],{"class":221},[47,80217,1804],{"class":217},[47,80219,80178],{"class":85},[47,80221,228],{"class":221},[47,80223,80224],{"class":49,"line":33560},[47,80225,2622],{"class":221},[47,80227,80228],{"class":49,"line":33580},[47,80229,80230],{"class":279},"        \u002F\u002F 渲染函数\n",[47,80232,80233,80235],{"class":49,"line":33586},[47,80234,70462],{"class":53},[47,80236,52466],{"class":221},[47,80238,80239],{"class":49,"line":33592},[47,80240,52452],{"class":221},[47,80242,80243],{"class":49,"line":33598},[47,80244,2493],{"emptyLinePlaceholder":145},[47,80246,80247],{"class":49,"line":33615},[47,80248,33515],{"class":221},[47,80250,80251,80253,80255],{"class":49,"line":33621},[47,80252,52471],{"class":221},[47,80254,51867],{"class":51354},[47,80256,51361],{"class":221},[47,80258,80259,80261,80263],{"class":49,"line":33627},[47,80260,51839],{"class":221},[47,80262,51854],{"class":51354},[47,80264,51361],{"class":221},[47,80266,80267],{"class":49,"line":33633},[47,80268,2493],{"emptyLinePlaceholder":145},[47,80270,80271,80273,80275],{"class":49,"line":33639},[47,80272,51839],{"class":221},[47,80274,50689],{"class":51354},[47,80276,51361],{"class":221},[14,80278,80280],{"id":80279},"_410-深入了解对象","4.10 深入了解对象",[187,80282,80284],{"id":80283},"_4101-创建对象","4.10.1 创建对象",[19,80286,80287],{},[1556,80288],{"alt":43,"src":80289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,80291,80292],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[187,80294,80296],{"id":80295},"_4102-构造函数","4.10.2 构造函数",[19,80298,80299,80302],{},[369,80300,80301],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,80304,80305,80308],{},[369,80306,80307],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[38,80310,80312],{"className":50687,"code":80311,"language":50689,"meta":43,"style":43},"\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",[26,80313,80314,80322,80327,80348,80361,80373,80385,80389,80394,80421,80426,80453],{"__ignoreMap":43},[47,80315,80316,80318,80320],{"class":49,"line":50},[47,80317,1129],{"class":221},[47,80319,51867],{"class":51354},[47,80321,51361],{"class":221},[47,80323,80324],{"class":49,"line":92},[47,80325,80326],{"class":279},"\u002F\u002F例：\n",[47,80328,80329,80331,80334,80336,80338,80340,80342,80344,80346],{"class":49,"line":1273},[47,80330,54503],{"class":217},[47,80332,80333],{"class":53}," Pig",[47,80335,222],{"class":221},[47,80337,79864],{"class":5309},[47,80339,597],{"class":221},[47,80341,70275],{"class":5309},[47,80343,597],{"class":221},[47,80345,70292],{"class":5309},[47,80347,12535],{"class":221},[47,80349,80350,80353,80356,80358],{"class":49,"line":1288},[47,80351,80352],{"class":85},"    this",[47,80354,80355],{"class":221},".name",[47,80357,267],{"class":217},[47,80359,80360],{"class":221},"name\n",[47,80362,80363,80365,80368,80370],{"class":49,"line":1294},[47,80364,80352],{"class":85},[47,80366,80367],{"class":221},".age",[47,80369,267],{"class":217},[47,80371,80372],{"class":221},"age\n",[47,80374,80375,80377,80380,80382],{"class":49,"line":1308},[47,80376,80352],{"class":85},[47,80378,80379],{"class":221},".gender",[47,80381,267],{"class":217},[47,80383,80384],{"class":221},"gender    \n",[47,80386,80387],{"class":49,"line":1314},[47,80388,1659],{"class":221},[47,80390,80391],{"class":49,"line":1405},[47,80392,80393],{"class":279},"\u002F\u002F创建佩奇对象\n",[47,80395,80396,80398,80401,80403,80405,80407,80410,80412,80414,80416,80419],{"class":49,"line":1411},[47,80397,6885],{"class":217},[47,80399,80400],{"class":85}," Peppa",[47,80402,11810],{"class":217},[47,80404,80333],{"class":53},[47,80406,222],{"class":221},[47,80408,80409],{"class":81},"'佩奇'",[47,80411,597],{"class":221},[47,80413,563],{"class":85},[47,80415,597],{"class":221},[47,80417,80418],{"class":81},"'女'",[47,80420,228],{"class":221},[47,80422,80423],{"class":49,"line":1423},[47,80424,80425],{"class":279},"\u002F\u002F创建乔治对象\n",[47,80427,80428,80430,80433,80435,80437,80439,80442,80444,80446,80448,80451],{"class":49,"line":1706},[47,80429,6885],{"class":217},[47,80431,80432],{"class":85}," George",[47,80434,11810],{"class":217},[47,80436,80333],{"class":53},[47,80438,222],{"class":221},[47,80440,80441],{"class":81},"'乔治'",[47,80443,597],{"class":221},[47,80445,292],{"class":85},[47,80447,597],{"class":221},[47,80449,80450],{"class":81},"'男'",[47,80452,228],{"class":221},[47,80454,80455,80457,80459],{"class":49,"line":1711},[47,80456,51839],{"class":221},[47,80458,51867],{"class":51354},[47,80460,51361],{"class":221},[19,80462,80463],{},[1556,80464],{"alt":43,"src":80465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,80467,80468],{},[1556,80469],{"alt":43,"src":80470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,80472,80473],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,80475,80476],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,80478,80479],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,80481,80482],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,80484,80485],{},"这里用等号是因为：对象.属性=值",[19,80487,80488],{},"①利用对象字面量创建对象",[19,80490,80491],{},"const o={",[19,80493,80494],{},"name:'pink'",[19,80496,80497],{},"} ②利用new Object创建对象",[19,80499,80500],{},"const o=new Object({name:'pink'})",[19,80502,80503],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,80505,80506],{},"构造函数创建对象的执行过程：",[19,80508,80509],{},[1556,80510],{"alt":43,"src":80511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[187,80513,80515],{"id":80514},"_4103-实例成员","4.10.3 实例成员",[19,80517,80518],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[171,80520,80521,80524,80527],{},[109,80522,80523],{},"实例对象的属性和方法即为实例成员",[109,80525,80526],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[109,80528,80529],{},"构造函数创建的实例对象彼此独立互不影响",[187,80531,80533],{"id":80532},"_4104-静态成员","4.10.4 静态成员",[19,80535,80536],{},[1556,80537],{"alt":43,"src":80538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,80540,80541],{},"静态成员有Date.now() Math.PI Math.random()",[19,80543,80544],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,80546,80547],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,80549,80550],{},"function Pig(name) n {",[19,80552,80553],{},"this.name=name",[19,80555,1165],{},[19,80557,80558],{},"Pig.eyes=2",[19,80560,80561],{},"Pig.sayHai=function () { console.log(this) }",[19,80563,80564],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,80566,80567],{},"console.log(Pig.eyes) \u002F\u002F2",[19,80569,11425],{},[171,80571,80572,80575,80578,80581,80584],{},[109,80573,80574],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[109,80576,80577],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[109,80579,80580],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[109,80582,80583],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[109,80585,80586],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,80588,80589],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[187,80591,80593],{"id":80592},"_4105-内置构造函数","4.10.5 内置构造函数",[19,80595,80596],{},"内置构造函数包含：",[19,80598,80599],{},[1556,80600],{"alt":43,"src":80601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,80603,80604],{},[1556,80605],{"alt":43,"src":80606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,80608,80609],{},"这些基本数据类型，js对他们进行了包装",[51867,80611,80612],{},"\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",[22091,80614,80616],{"id":80615},"_41051-object","4.10.5.1 Object",[19,80618,80619],{},"Object 是内置的构造函数，用于创建普通对象",[19,80621,80622],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[38,80624,80626],{"className":50687,"code":80625,"language":50689,"meta":43,"style":43},"const user=new Object({name:'小明',age:15})\n",[26,80627,80628],{"__ignoreMap":43},[47,80629,80630],{"class":49,"line":50},[47,80631,80625],{"class":221},[19,80633,80634],{},"三个常用的静态方法：",[23003,80636,80638],{"id":80637},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,80640,80641],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,80643,80644],{},[1556,80645],{"alt":43,"src":80646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,80648,80649],{},[1556,80650],{"alt":43,"src":80651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[38,80653,80655],{"className":53121,"code":80654,"language":53123,"meta":43,"style":43},"\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",[26,80656,80657,80665,80673,80678,80683,80688,80693,80698,80703,80711],{"__ignoreMap":43},[47,80658,80659,80661,80663],{"class":49,"line":50},[47,80660,1129],{"class":221},[47,80662,51854],{"class":51354},[47,80664,51361],{"class":221},[47,80666,80667,80669,80671],{"class":49,"line":92},[47,80668,52198],{"class":221},[47,80670,51867],{"class":51354},[47,80672,51361],{"class":221},[47,80674,80675],{"class":49,"line":1273},[47,80676,80677],{"class":221},"    const o = { name: 'pink', age: 6 }\n",[47,80679,80680],{"class":49,"line":1288},[47,80681,80682],{"class":221},"    \u002F\u002F 获得所有属性名\n",[47,80684,80685],{"class":49,"line":1294},[47,80686,80687],{"class":221},"    const arr = Object.keys(o)\n",[47,80689,80690],{"class":49,"line":1308},[47,80691,80692],{"class":221},"    console.log(arr)\n",[47,80694,80695],{"class":49,"line":1314},[47,80696,80697],{"class":221},"    \u002F\u002F 获得所有属性值\n",[47,80699,80700],{"class":49,"line":1405},[47,80701,80702],{"class":221},"    console.log(Object.values(o))\n",[47,80704,80705,80707,80709],{"class":49,"line":1411},[47,80706,52471],{"class":221},[47,80708,51867],{"class":51354},[47,80710,51361],{"class":221},[47,80712,80713,80715,80717],{"class":49,"line":1423},[47,80714,51839],{"class":221},[47,80716,51854],{"class":51354},[47,80718,51361],{"class":221},[23003,80720,80722],{"id":80721},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,80724,80725],{},"Object.assign(oo,o)",[19,80727,80728],{},"后的东西添加给前 是追加",[19,80730,80731],{},[1556,80732],{"alt":43,"src":80733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,80735,80736],{},[1556,80737],{"alt":43,"src":80738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[38,80740,80742],{"className":53121,"code":80741,"language":53123,"meta":43,"style":43},"\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",[26,80743,80744,80752,80760,80764,80768,80772,80776,80780,80784,80789,80794,80799,80804,80809,80817],{"__ignoreMap":43},[47,80745,80746,80748,80750],{"class":49,"line":50},[47,80747,1129],{"class":221},[47,80749,51854],{"class":51354},[47,80751,51361],{"class":221},[47,80753,80754,80756,80758],{"class":49,"line":92},[47,80755,52198],{"class":221},[47,80757,51867],{"class":51354},[47,80759,51361],{"class":221},[47,80761,80762],{"class":49,"line":1273},[47,80763,80677],{"class":221},[47,80765,80766],{"class":49,"line":1288},[47,80767,80682],{"class":221},[47,80769,80770],{"class":49,"line":1294},[47,80771,80687],{"class":221},[47,80773,80774],{"class":49,"line":1308},[47,80775,80692],{"class":221},[47,80777,80778],{"class":49,"line":1314},[47,80779,80697],{"class":221},[47,80781,80782],{"class":49,"line":1405},[47,80783,80702],{"class":221},[47,80785,80786],{"class":49,"line":1411},[47,80787,80788],{"class":221},"    const oo = {}\n",[47,80790,80791],{"class":49,"line":1423},[47,80792,80793],{"class":221},"    Object.assign(oo, o)\n",[47,80795,80796],{"class":49,"line":1706},[47,80797,80798],{"class":221},"    console.log(oo)\n",[47,80800,80801],{"class":49,"line":1711},[47,80802,80803],{"class":221},"    Object.assign(o, { gender: '女' })\n",[47,80805,80806],{"class":49,"line":1717},[47,80807,80808],{"class":221},"    console.log(o)\n",[47,80810,80811,80813,80815],{"class":49,"line":1722},[47,80812,52471],{"class":221},[47,80814,51867],{"class":51354},[47,80816,51361],{"class":221},[47,80818,80819,80821,80823],{"class":49,"line":1736},[47,80820,51839],{"class":221},[47,80822,51854],{"class":51354},[47,80824,51361],{"class":221},[19,80826,80827],{},[1556,80828],{"alt":43,"src":80829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22091,80831,80833],{"id":80832},"_41052-array","4.10.5.2 Array",[19,80835,80836],{},"Array 是内置的构造函数，用于创建数组",[19,80838,80839],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[38,80841,80843],{"className":50687,"code":80842,"language":50689,"meta":43,"style":43},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[26,80844,80845,80850],{"__ignoreMap":43},[47,80846,80847],{"class":49,"line":50},[47,80848,80849],{"class":221},"const arr=new Array(3,5)\n",[47,80851,80852],{"class":49,"line":92},[47,80853,80854],{"class":221},"console.log(arr)  \u002F\u002F[3,5]\n",[19,80856,80857],{},"Array的实例方法，这个方法是实例成员",[19,80859,80860],{},[1556,80861],{"alt":43,"src":80862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23003,80864,80866],{"id":80865},"_410521-reduce","4.10.5.2.1 reduce",[19,80868,80869],{},[1556,80870],{"alt":43,"src":80871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[38,80873,80875],{"className":53121,"code":80874,"language":53123,"meta":43,"style":43},"\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",[26,80876,80877,80885,80893,80898,80903,80908,80913,80917,80922,80927,80932,80936,80941,80946,80950,80955,80960,80965,80973],{"__ignoreMap":43},[47,80878,80879,80881,80883],{"class":49,"line":50},[47,80880,1129],{"class":221},[47,80882,51854],{"class":51354},[47,80884,51361],{"class":221},[47,80886,80887,80889,80891],{"class":49,"line":92},[47,80888,52198],{"class":221},[47,80890,51867],{"class":51354},[47,80892,51361],{"class":221},[47,80894,80895],{"class":49,"line":1273},[47,80896,80897],{"class":221},"    const arr = [1, 5, 8]\n",[47,80899,80900],{"class":49,"line":1288},[47,80901,80902],{"class":221},"    \u002F\u002F 1.没有初始值\n",[47,80904,80905],{"class":49,"line":1294},[47,80906,80907],{"class":221},"    const total = arr.reduce(function (prev, current) {\n",[47,80909,80910],{"class":49,"line":1308},[47,80911,80912],{"class":221},"      return prev + current\n",[47,80914,80915],{"class":49,"line":1314},[47,80916,33515],{"class":221},[47,80918,80919],{"class":49,"line":1405},[47,80920,80921],{"class":221},"    console.log(total)   \u002F\u002F14\n",[47,80923,80924],{"class":49,"line":1411},[47,80925,80926],{"class":221},"    \u002F\u002F 2.有初始值\n",[47,80928,80929],{"class":49,"line":1423},[47,80930,80931],{"class":221},"    const total1 = arr.reduce(function (prev, current) {\n",[47,80933,80934],{"class":49,"line":1706},[47,80935,80912],{"class":221},[47,80937,80938],{"class":49,"line":1711},[47,80939,80940],{"class":221},"    }, 10)\n",[47,80942,80943],{"class":49,"line":1717},[47,80944,80945],{"class":221},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[47,80947,80948],{"class":49,"line":1722},[47,80949,2493],{"emptyLinePlaceholder":145},[47,80951,80952],{"class":49,"line":1736},[47,80953,80954],{"class":221},"    \u002F\u002F 3.箭头函数写法\n",[47,80956,80957],{"class":49,"line":1741},[47,80958,80959],{"class":221},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[47,80961,80962],{"class":49,"line":1747},[47,80963,80964],{"class":221},"    console.log(total2)   \u002F\u002F24\n",[47,80966,80967,80969,80971],{"class":49,"line":1768},[47,80968,52471],{"class":221},[47,80970,51867],{"class":51354},[47,80972,51361],{"class":221},[47,80974,80975,80977,80979],{"class":49,"line":1773},[47,80976,51839],{"class":221},[47,80978,51854],{"class":51354},[47,80980,51361],{"class":221},[19,80982,80983],{},"执行过程：",[171,80985,80986,80989,80992],{},[109,80987,80988],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[109,80990,80991],{},"每一次循环，把返回值给作为下一次循环的上一次值",[109,80993,80994],{},"如果有起始值，则起始值作为上一次值",[38,80996,80998],{"className":53121,"code":80997,"language":53123,"meta":43,"style":43},"\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",[26,80999,81000,81008,81016,81020,81024,81028,81032,81036,81040,81045,81050,81055,81060,81065,81069,81073,81077,81081,81085,81089,81094,81098,81103,81107,81112,81117,81121,81125,81129,81137],{"__ignoreMap":43},[47,81001,81002,81004,81006],{"class":49,"line":50},[47,81003,1129],{"class":221},[47,81005,51854],{"class":51354},[47,81007,51361],{"class":221},[47,81009,81010,81012,81014],{"class":49,"line":92},[47,81011,52198],{"class":221},[47,81013,51867],{"class":51354},[47,81015,51361],{"class":221},[47,81017,81018],{"class":49,"line":1273},[47,81019,80897],{"class":221},[47,81021,81022],{"class":49,"line":1288},[47,81023,80902],{"class":221},[47,81025,81026],{"class":49,"line":1294},[47,81027,80907],{"class":221},[47,81029,81030],{"class":49,"line":1308},[47,81031,80912],{"class":221},[47,81033,81034],{"class":49,"line":1314},[47,81035,33515],{"class":221},[47,81037,81038],{"class":49,"line":1405},[47,81039,80921],{"class":221},[47,81041,81042],{"class":49,"line":1411},[47,81043,81044],{"class":221},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[47,81046,81047],{"class":49,"line":1423},[47,81048,81049],{"class":221},"    \u002F\u002F     1              5                    6\n",[47,81051,81052],{"class":49,"line":1706},[47,81053,81054],{"class":221},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[47,81056,81057],{"class":49,"line":1711},[47,81058,81059],{"class":221},"    \u002F\u002F     6              8                    14\n",[47,81061,81062],{"class":49,"line":1717},[47,81063,81064],{"class":221},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[47,81066,81067],{"class":49,"line":1722},[47,81068,80926],{"class":221},[47,81070,81071],{"class":49,"line":1736},[47,81072,80931],{"class":221},[47,81074,81075],{"class":49,"line":1741},[47,81076,80912],{"class":221},[47,81078,81079],{"class":49,"line":1747},[47,81080,80940],{"class":221},[47,81082,81083],{"class":49,"line":1768},[47,81084,80945],{"class":221},[47,81086,81087],{"class":49,"line":1773},[47,81088,81044],{"class":221},[47,81090,81091],{"class":49,"line":1787},[47,81092,81093],{"class":221},"    \u002F\u002F     10             1                     11\n",[47,81095,81096],{"class":49,"line":1792},[47,81097,81054],{"class":221},[47,81099,81100],{"class":49,"line":1821},[47,81101,81102],{"class":221},"    \u002F\u002F     11             5                    16\n",[47,81104,81105],{"class":49,"line":1826},[47,81106,81054],{"class":221},[47,81108,81109],{"class":49,"line":1843},[47,81110,81111],{"class":221},"    \u002F\u002F     16             8                    24\n",[47,81113,81114],{"class":49,"line":1848},[47,81115,81116],{"class":221},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[47,81118,81119],{"class":49,"line":1853},[47,81120,80954],{"class":221},[47,81122,81123],{"class":49,"line":1858},[47,81124,80959],{"class":221},[47,81126,81127],{"class":49,"line":1872},[47,81128,80964],{"class":221},[47,81130,81131,81133,81135],{"class":49,"line":1877},[47,81132,52471],{"class":221},[47,81134,51867],{"class":51354},[47,81136,51361],{"class":221},[47,81138,81139,81141,81143],{"class":49,"line":2670},[47,81140,51839],{"class":221},[47,81142,51854],{"class":51354},[47,81144,51361],{"class":221},[23003,81146,81148],{"id":81147},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,81150,81151],{},[1556,81152],{"alt":43,"src":81153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[38,81155,81157],{"className":53121,"code":81156,"language":53123,"meta":43,"style":43},"\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",[26,81158,81159,81167,81175,81180,81185,81190,81195,81199,81204,81209,81214,81219,81224,81229,81233,81238,81242,81247,81255],{"__ignoreMap":43},[47,81160,81161,81163,81165],{"class":49,"line":50},[47,81162,1129],{"class":221},[47,81164,51854],{"class":51354},[47,81166,51361],{"class":221},[47,81168,81169,81171,81173],{"class":49,"line":92},[47,81170,52198],{"class":221},[47,81172,51867],{"class":51354},[47,81174,51361],{"class":221},[47,81176,81177],{"class":49,"line":1273},[47,81178,81179],{"class":221},"    const arr = [\n",[47,81181,81182],{"class":49,"line":1288},[47,81183,81184],{"class":221},"      { name: '张三', salary: 10000 },\n",[47,81186,81187],{"class":49,"line":1294},[47,81188,81189],{"class":221},"      { name: '李四', salary: 10000 },\n",[47,81191,81192],{"class":49,"line":1308},[47,81193,81194],{"class":221},"      { name: '王五', salary: 10000 }\n",[47,81196,81197],{"class":49,"line":1314},[47,81198,53163],{"class":221},[47,81200,81201],{"class":49,"line":1405},[47,81202,81203],{"class":221},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[47,81205,81206],{"class":49,"line":1411},[47,81207,81208],{"class":221},"    \u002F\u002F prev是累计值\n",[47,81210,81211],{"class":49,"line":1423},[47,81212,81213],{"class":221},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[47,81215,81216],{"class":49,"line":1706},[47,81217,81218],{"class":221},"    console.log(total)\n",[47,81220,81221],{"class":49,"line":1711},[47,81222,81223],{"class":221},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[47,81225,81226],{"class":49,"line":1717},[47,81227,81228],{"class":221},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[47,81230,81231],{"class":49,"line":1722},[47,81232,81223],{"class":221},[47,81234,81235],{"class":49,"line":1736},[47,81236,81237],{"class":221},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[47,81239,81240],{"class":49,"line":1741},[47,81241,81223],{"class":221},[47,81243,81244],{"class":49,"line":1747},[47,81245,81246],{"class":221},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[47,81248,81249,81251,81253],{"class":49,"line":1768},[47,81250,52471],{"class":221},[47,81252,51867],{"class":51354},[47,81254,51361],{"class":221},[47,81256,81257,81259,81261],{"class":49,"line":1773},[47,81258,51839],{"class":221},[47,81260,51854],{"class":51354},[47,81262,51361],{"class":221},[23003,81264,81266],{"id":81265},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,81268,81269],{},[1556,81270],{"alt":43,"src":81271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,81273,81274],{},[1556,81275],{"alt":43,"src":81276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[171,81278,81279],{},[109,81280,81281],{},"find()",[19,81283,81284],{},"循环查找，找到第一个就ok",[19,81286,81287],{},[457,81288,81291],{"href":81289,"rel":81290},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[23956],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[38,81293,81295],{"className":50687,"code":81294,"language":50689,"meta":43,"style":43},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[26,81296,81297,81302,81307],{"__ignoreMap":43},[47,81298,81299],{"class":49,"line":50},[47,81300,81301],{"class":221},"const array1 = [5, 12, 8, 130, 44]\n",[47,81303,81304],{"class":49,"line":92},[47,81305,81306],{"class":221},"const found = array1.find((element) => element > 10)\n",[47,81308,81309],{"class":49,"line":1273},[47,81310,81311],{"class":221},"console.log(found)  \u002F\u002F12\n",[19,81313,81314,81316,81317,81322,81323,81326,81327,81329,81330,81335,81336,81338,81339,81341,81342,81344,81345],{},[26,81315,81281],{}," 方法是一个",[457,81318,81321],{"href":81319,"rel":81320},"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",[23956],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[26,81324,81325],{},"callbackFn"," 函数，直到 ",[26,81328,81325],{}," 返回一个",[457,81331,81334],{"href":81332,"rel":81333},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[23956],"真值","。然后 ",[26,81337,81281],{}," 返回该元素并停止迭代数组。如果 ",[26,81340,81325],{}," 从未返回真值，则 ",[26,81343,81281],{}," 返回 ",[26,81346,81347],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[38,81349,81351],{"className":53121,"code":81350,"language":53123,"meta":43,"style":43},"\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",[26,81352,81353,81361,81369,81374,81379,81384,81388,81393,81398,81402,81407,81412,81416,81420,81425,81430,81434,81438,81443,81448,81453,81458,81463,81467,81472,81477,81482,81487,81491,81496,81504],{"__ignoreMap":43},[47,81354,81355,81357,81359],{"class":49,"line":50},[47,81356,1129],{"class":221},[47,81358,51854],{"class":51354},[47,81360,51361],{"class":221},[47,81362,81363,81365,81367],{"class":49,"line":92},[47,81364,52198],{"class":221},[47,81366,51867],{"class":51354},[47,81368,51361],{"class":221},[47,81370,81371],{"class":49,"line":1273},[47,81372,81373],{"class":221},"    const arr = ['red', 'blue', 'green']\n",[47,81375,81376],{"class":49,"line":1288},[47,81377,81378],{"class":221},"    const found = arr.find(item => item === 'pink')\n",[47,81380,81381],{"class":49,"line":1294},[47,81382,81383],{"class":221},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[47,81385,81386],{"class":49,"line":1308},[47,81387,2493],{"emptyLinePlaceholder":145},[47,81389,81390],{"class":49,"line":1314},[47,81391,81392],{"class":221},"    \u002F\u002F 使用场景，用于查找数据\n",[47,81394,81395],{"class":49,"line":1405},[47,81396,81397],{"class":221},"    const arr1 = [\n",[47,81399,81400],{"class":49,"line":1411},[47,81401,79440],{"class":221},[47,81403,81404],{"class":49,"line":1423},[47,81405,81406],{"class":221},"        name: '小米',\n",[47,81408,81409],{"class":49,"line":1706},[47,81410,81411],{"class":221},"        price: 1999\n",[47,81413,81414],{"class":49,"line":1711},[47,81415,77946],{"class":221},[47,81417,81418],{"class":49,"line":1717},[47,81419,79440],{"class":221},[47,81421,81422],{"class":49,"line":1722},[47,81423,81424],{"class":221},"        name: '华为',\n",[47,81426,81427],{"class":49,"line":1736},[47,81428,81429],{"class":221},"        price: 3999\n",[47,81431,81432],{"class":49,"line":1741},[47,81433,52452],{"class":221},[47,81435,81436],{"class":49,"line":1747},[47,81437,53163],{"class":221},[47,81439,81440],{"class":49,"line":1768},[47,81441,81442],{"class":221},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[47,81444,81445],{"class":49,"line":1773},[47,81446,81447],{"class":221},"    \u002F\u002F const found1 = arr1.find(item => {\n",[47,81449,81450],{"class":49,"line":1787},[47,81451,81452],{"class":221},"    \u002F\u002F   if (item.name === '小米') {\n",[47,81454,81455],{"class":49,"line":1792},[47,81456,81457],{"class":221},"    \u002F\u002F     return item\n",[47,81459,81460],{"class":49,"line":1821},[47,81461,81462],{"class":221},"    \u002F\u002F   }\n",[47,81464,81465],{"class":49,"line":1826},[47,81466,63344],{"class":221},[47,81468,81469],{"class":49,"line":1843},[47,81470,81471],{"class":221},"    \u002F\u002F 另一种写法\n",[47,81473,81474],{"class":49,"line":1848},[47,81475,81476],{"class":221},"    const found1 = arr1.find(item => {\n",[47,81478,81479],{"class":49,"line":1853},[47,81480,81481],{"class":221},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[47,81483,81484],{"class":49,"line":1858},[47,81485,81486],{"class":221},"      return item.name = '小米'\n",[47,81488,81489],{"class":49,"line":1872},[47,81490,33515],{"class":221},[47,81492,81493],{"class":49,"line":1877},[47,81494,81495],{"class":221},"    console.log(found1)\n",[47,81497,81498,81500,81502],{"class":49,"line":2670},[47,81499,52471],{"class":221},[47,81501,51867],{"class":51354},[47,81503,51361],{"class":221},[47,81505,81506,81508,81510],{"class":49,"line":2684},[47,81507,51839],{"class":221},[47,81509,51854],{"class":51354},[47,81511,51361],{"class":221},[19,81513,81514],{},[1556,81515],{"alt":43,"src":81516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,81518,81519],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[171,81521,81522],{"start":92},[109,81523,81524],{},"every()返回的是布尔值",[19,81526,81527],{},[457,81528,81531],{"href":81529,"rel":81530},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[23956],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,81533,81534],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,81536,81537],{},"some是只有有一个就没问题",[19,81539,81540],{},"every是必须全是才行",[38,81542,81546],{"className":81543,"code":81544,"language":81545,"meta":43,"style":43},"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",[26,81547,81548,81564,81578,81582,81591],{"__ignoreMap":43},[47,81549,81550,81552,81555,81557,81559,81562],{"class":49,"line":50},[47,81551,54503],{"class":217},[47,81553,81554],{"class":221}," isBigEnough(element, ",[47,81556,74112],{"class":217},[47,81558,12528],{"class":221},[47,81560,81561],{"class":217},"array",[47,81563,12535],{"class":221},[47,81565,81566,81569,81572,81574,81576],{"class":49,"line":92},[47,81567,81568],{"class":217},"  return",[47,81570,81571],{"class":221}," element ",[47,81573,1804],{"class":217},[47,81575,2131],{"class":85},[47,81577,1384],{"class":221},[47,81579,81580],{"class":49,"line":1273},[47,81581,1659],{"class":221},[47,81583,81584,81587,81589],{"class":49,"line":1288},[47,81585,81586],{"class":221},"[12, 5, 8, 130, 44].every(isBigEnough); ",[47,81588,33383],{"class":217},[47,81590,54570],{"class":221},[47,81592,81593,81596,81598],{"class":49,"line":1294},[47,81594,81595],{"class":221},"[12, 54, 18, 130, 44].every(isBigEnough); ",[47,81597,33383],{"class":217},[47,81599,57994],{"class":221},[38,81601,81603],{"className":53121,"code":81602,"language":53123,"meta":43,"style":43},"\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",[26,81604,81605,81613,81621,81626,81630,81635,81640,81648],{"__ignoreMap":43},[47,81606,81607,81609,81611],{"class":49,"line":50},[47,81608,1129],{"class":221},[47,81610,51854],{"class":51354},[47,81612,51361],{"class":221},[47,81614,81615,81617,81619],{"class":49,"line":92},[47,81616,52198],{"class":221},[47,81618,51867],{"class":51354},[47,81620,51361],{"class":221},[47,81622,81623],{"class":49,"line":1273},[47,81624,81625],{"class":221},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[47,81627,81628],{"class":49,"line":1288},[47,81629,78376],{"class":221},[47,81631,81632],{"class":49,"line":1294},[47,81633,81634],{"class":221},"    const flag = arr.every(item => item >= 10)\n",[47,81636,81637],{"class":49,"line":1308},[47,81638,81639],{"class":221},"    console.log(flag)    \u002F\u002Ftrue\n",[47,81641,81642,81644,81646],{"class":49,"line":1314},[47,81643,52471],{"class":221},[47,81645,51867],{"class":51354},[47,81647,51361],{"class":221},[47,81649,81650,81652,81654],{"class":49,"line":1405},[47,81651,51839],{"class":221},[47,81653,51854],{"class":51354},[47,81655,51361],{"class":221},[38,81657,81659],{"className":53121,"code":81658,"language":53123,"meta":43,"style":43},"\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",[26,81660,81661,81669,81677,81681,81686,81691,81696,81704],{"__ignoreMap":43},[47,81662,81663,81665,81667],{"class":49,"line":50},[47,81664,1129],{"class":221},[47,81666,51854],{"class":51354},[47,81668,51361],{"class":221},[47,81670,81671,81673,81675],{"class":49,"line":92},[47,81672,52198],{"class":221},[47,81674,51867],{"class":51354},[47,81676,51361],{"class":221},[47,81678,81679],{"class":49,"line":1273},[47,81680,81625],{"class":221},[47,81682,81683],{"class":49,"line":1288},[47,81684,81685],{"class":221},"    const arr = [10, 0, 5]\n",[47,81687,81688],{"class":49,"line":1294},[47,81689,81690],{"class":221},"    const flag = arr.some(item => item >= 10)\n",[47,81692,81693],{"class":49,"line":1308},[47,81694,81695],{"class":221},"    console.log(flag)   \u002F\u002Ftrue\n",[47,81697,81698,81700,81702],{"class":49,"line":1314},[47,81699,52471],{"class":221},[47,81701,51867],{"class":51354},[47,81703,51361],{"class":221},[47,81705,81706,81708,81710],{"class":49,"line":1405},[47,81707,51839],{"class":221},[47,81709,51854],{"class":51354},[47,81711,51361],{"class":221},[23003,81713,81715],{"id":81714},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,81717,81718],{},[1556,81719],{"alt":43,"src":81720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[38,81722,81724],{"className":50687,"code":81723,"language":50689,"meta":43,"style":43},"\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",[26,81725,81726,81736,81750,81754,81762,81776,81796,81808,81816,81823,81835,81847,81859,81871,81881,81891,81895,81903,81911,81915,81923,81935,81943,81965,81970,81975,82008,82016,82024,82028],{"__ignoreMap":43},[47,81727,81728,81730,81732,81734],{"class":49,"line":50},[47,81729,51351],{"class":221},[47,81731,51355],{"class":51354},[47,81733,51358],{"class":53},[47,81735,51361],{"class":221},[47,81737,81738,81740,81742,81744,81746,81748],{"class":49,"line":92},[47,81739,1129],{"class":221},[47,81741,50689],{"class":51354},[47,81743,51370],{"class":53},[47,81745,267],{"class":221},[47,81747,51375],{"class":81},[47,81749,51361],{"class":221},[47,81751,81752],{"class":49,"line":1273},[47,81753,2493],{"emptyLinePlaceholder":145},[47,81755,81756,81758,81760],{"class":49,"line":1288},[47,81757,1129],{"class":221},[47,81759,51388],{"class":51354},[47,81761,51361],{"class":221},[47,81763,81764,81766,81768,81770,81772,81774],{"class":49,"line":1294},[47,81765,52198],{"class":221},[47,81767,51398],{"class":51354},[47,81769,51401],{"class":53},[47,81771,267],{"class":221},[47,81773,51406],{"class":81},[47,81775,51361],{"class":221},[47,81777,81778,81780,81782,81784,81786,81788,81790,81792,81794],{"class":49,"line":1308},[47,81779,52198],{"class":221},[47,81781,51398],{"class":51354},[47,81783,15013],{"class":53},[47,81785,267],{"class":221},[47,81787,51445],{"class":81},[47,81789,51425],{"class":53},[47,81791,267],{"class":221},[47,81793,51452],{"class":81},[47,81795,51361],{"class":221},[47,81797,81798,81800,81802,81804,81806],{"class":49,"line":1314},[47,81799,52198],{"class":221},[47,81801,51461],{"class":51354},[47,81803,51464],{"class":221},[47,81805,51461],{"class":51354},[47,81807,51361],{"class":221},[47,81809,81810,81812,81814],{"class":49,"line":1405},[47,81811,52198],{"class":221},[47,81813,134],{"class":51354},[47,81815,51361],{"class":221},[47,81817,81818,81821],{"class":49,"line":1411},[47,81819,81820],{"class":51354},"    div",[47,81822,15665],{"class":221},[47,81824,81825,81827,81829,81831,81833],{"class":49,"line":1423},[47,81826,54825],{"class":85},[47,81828,51491],{"class":221},[47,81830,1816],{"class":85},[47,81832,51546],{"class":217},[47,81834,1384],{"class":221},[47,81836,81837,81839,81841,81843,81845],{"class":49,"line":1706},[47,81838,54839],{"class":85},[47,81840,51491],{"class":221},[47,81842,620],{"class":85},[47,81844,51546],{"class":217},[47,81846,1384],{"class":221},[47,81848,81849,81851,81853,81855,81857],{"class":49,"line":1711},[47,81850,57413],{"class":85},[47,81852,51491],{"class":221},[47,81854,620],{"class":85},[47,81856,51546],{"class":217},[47,81858,1384],{"class":221},[47,81860,81861,81863,81865,81867,81869],{"class":49,"line":1717},[47,81862,65187],{"class":85},[47,81864,51491],{"class":221},[47,81866,717],{"class":85},[47,81868,51546],{"class":217},[47,81870,1384],{"class":221},[47,81872,81873,81875,81877,81879],{"class":49,"line":1722},[47,81874,57340],{"class":85},[47,81876,51491],{"class":221},[47,81878,51646],{"class":85},[47,81880,1384],{"class":221},[47,81882,81883,81885,81887,81889],{"class":49,"line":1736},[47,81884,54938],{"class":85},[47,81886,51491],{"class":221},[47,81888,51699],{"class":85},[47,81890,1384],{"class":221},[47,81892,81893],{"class":49,"line":1741},[47,81894,2280],{"class":221},[47,81896,81897,81899,81901],{"class":49,"line":1747},[47,81898,52471],{"class":221},[47,81900,134],{"class":51354},[47,81902,51361],{"class":221},[47,81904,81905,81907,81909],{"class":49,"line":1768},[47,81906,51839],{"class":221},[47,81908,51388],{"class":51354},[47,81910,51361],{"class":221},[47,81912,81913],{"class":49,"line":1773},[47,81914,2493],{"emptyLinePlaceholder":145},[47,81916,81917,81919,81921],{"class":49,"line":1787},[47,81918,1129],{"class":221},[47,81920,51854],{"class":51354},[47,81922,51361],{"class":221},[47,81924,81925,81927,81929,81931,81933],{"class":49,"line":1792},[47,81926,52198],{"class":221},[47,81928,51665],{"class":51354},[47,81930,55368],{"class":221},[47,81932,51665],{"class":51354},[47,81934,51361],{"class":221},[47,81936,81937,81939,81941],{"class":49,"line":1821},[47,81938,52198],{"class":221},[47,81940,51867],{"class":51354},[47,81942,51361],{"class":221},[47,81944,81945,81947,81950,81952,81955,81958,81960,81963],{"class":49,"line":1826},[47,81946,11314],{"class":217},[47,81948,81949],{"class":85}," spec",[47,81951,13657],{"class":217},[47,81953,81954],{"class":221}," { size: ",[47,81956,81957],{"class":81},"'40cm*40cm'",[47,81959,55518],{"class":221},[47,81961,81962],{"class":81},"'黑色'",[47,81964,55658],{"class":221},[47,81966,81967],{"class":49,"line":1843},[47,81968,81969],{"class":279},"    \u002F\u002F const arr = Object.values(spec)\n",[47,81971,81972],{"class":49,"line":1848},[47,81973,81974],{"class":279},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[47,81976,81977,81979,81981,81983,81986,81988,81990,81993,81996,81999,82001,82003,82006],{"class":49,"line":1853},[47,81978,52461],{"class":221},[47,81980,54453],{"class":53},[47,81982,222],{"class":221},[47,81984,81985],{"class":81},"'div'",[47,81987,74303],{"class":221},[47,81989,267],{"class":217},[47,81991,81992],{"class":221}," Object.",[47,81994,81995],{"class":53},"values",[47,81997,81998],{"class":221},"(spec).",[47,82000,74277],{"class":53},[47,82002,222],{"class":221},[47,82004,82005],{"class":81},"'\u002F'",[47,82007,228],{"class":221},[47,82009,82010,82012,82014],{"class":49,"line":1858},[47,82011,52471],{"class":221},[47,82013,51867],{"class":51354},[47,82015,51361],{"class":221},[47,82017,82018,82020,82022],{"class":49,"line":1872},[47,82019,51839],{"class":221},[47,82021,51854],{"class":51354},[47,82023,51361],{"class":221},[47,82025,82026],{"class":49,"line":1877},[47,82027,2493],{"emptyLinePlaceholder":145},[47,82029,82030,82032,82034],{"class":49,"line":2670},[47,82031,51839],{"class":221},[47,82033,50689],{"class":51354},[47,82035,51361],{"class":221},[19,82037,82038],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23003,82040,82042],{"id":82041},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,82044,82045],{},"静态方法，将伪数组转换为真数组",[19,82047,82048],{},[1556,82049],{"alt":43,"src":82050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[38,82052,82054],{"className":53121,"code":82053,"language":53123,"meta":43,"style":43},"\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",[26,82055,82056,82064,82072,82084,82096,82108,82116,82124,82129,82134,82139,82144,82152],{"__ignoreMap":43},[47,82057,82058,82060,82062],{"class":49,"line":50},[47,82059,1129],{"class":221},[47,82061,51854],{"class":51354},[47,82063,51361],{"class":221},[47,82065,82066,82068,82070],{"class":49,"line":92},[47,82067,52198],{"class":221},[47,82069,106],{"class":51354},[47,82071,51361],{"class":221},[47,82073,82074,82076,82078,82080,82082],{"class":49,"line":1273},[47,82075,51395],{"class":221},[47,82077,109],{"class":51354},[47,82079,55368],{"class":221},[47,82081,109],{"class":51354},[47,82083,51361],{"class":221},[47,82085,82086,82088,82090,82092,82094],{"class":49,"line":1288},[47,82087,51395],{"class":221},[47,82089,109],{"class":51354},[47,82091,55368],{"class":221},[47,82093,109],{"class":51354},[47,82095,51361],{"class":221},[47,82097,82098,82100,82102,82104,82106],{"class":49,"line":1294},[47,82099,51395],{"class":221},[47,82101,109],{"class":51354},[47,82103,55368],{"class":221},[47,82105,109],{"class":51354},[47,82107,51361],{"class":221},[47,82109,82110,82112,82114],{"class":49,"line":1308},[47,82111,52471],{"class":221},[47,82113,106],{"class":51354},[47,82115,51361],{"class":221},[47,82117,82118,82120,82122],{"class":49,"line":1314},[47,82119,52198],{"class":221},[47,82121,51867],{"class":51354},[47,82123,51361],{"class":221},[47,82125,82126],{"class":49,"line":1405},[47,82127,82128],{"class":221},"    const lis = document.querySelectorAll('li')\n",[47,82130,82131],{"class":49,"line":1411},[47,82132,82133],{"class":221},"    const liss = Array.from(lis)\n",[47,82135,82136],{"class":49,"line":1423},[47,82137,82138],{"class":221},"    liss.pop()\n",[47,82140,82141],{"class":49,"line":1706},[47,82142,82143],{"class":221},"    console.log(liss)\n",[47,82145,82146,82148,82150],{"class":49,"line":1711},[47,82147,52471],{"class":221},[47,82149,51867],{"class":51354},[47,82151,51361],{"class":221},[47,82153,82154,82156,82158],{"class":49,"line":1717},[47,82155,51839],{"class":221},[47,82157,51854],{"class":51354},[47,82159,51361],{"class":221},[19,82161,82162],{},[1556,82163],{"alt":43,"src":82164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22091,82166,82168],{"id":82167},"_41053-string","4.10.5.3 String",[19,82170,82171],{},[1556,82172],{"alt":43,"src":82173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23003,82175,82177],{"id":82176},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[38,82179,82181],{"className":53121,"code":82180,"language":53123,"meta":43,"style":43},"\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",[26,82182,82183,82191,82199,82204,82209,82214,82218,82223,82228,82233,82241],{"__ignoreMap":43},[47,82184,82185,82187,82189],{"class":49,"line":50},[47,82186,1129],{"class":221},[47,82188,51854],{"class":51354},[47,82190,51361],{"class":221},[47,82192,82193,82195,82197],{"class":49,"line":92},[47,82194,52198],{"class":221},[47,82196,51867],{"class":51354},[47,82198,51361],{"class":221},[47,82200,82201],{"class":49,"line":1273},[47,82202,82203],{"class":221},"    \u002F\u002F 把字符串转化为数组\n",[47,82205,82206],{"class":49,"line":1288},[47,82207,82208],{"class":221},"    const str = 'pink,red'\n",[47,82210,82211],{"class":49,"line":1294},[47,82212,82213],{"class":221},"    const arr = str.split(',')\n",[47,82215,82216],{"class":49,"line":1308},[47,82217,80692],{"class":221},[47,82219,82220],{"class":49,"line":1314},[47,82221,82222],{"class":221},"    const str1 = '2025-8-25'\n",[47,82224,82225],{"class":49,"line":1405},[47,82226,82227],{"class":221},"    const arr1 = str1.split('-')\n",[47,82229,82230],{"class":49,"line":1411},[47,82231,82232],{"class":221},"    console.log(arr1)\n",[47,82234,82235,82237,82239],{"class":49,"line":1423},[47,82236,52471],{"class":221},[47,82238,51867],{"class":51354},[47,82240,51361],{"class":221},[47,82242,82243,82245,82247],{"class":49,"line":1706},[47,82244,51839],{"class":221},[47,82246,51854],{"class":51354},[47,82248,51361],{"class":221},[23003,82250,82252],{"id":82251},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,82254,5274],{},[19,82256,82257],{},"substring(indexStart)",[19,82259,82260],{},"substring(indexStart, indexEnd)",[106,82262,82263,82274,82286,82296],{},[109,82264,82265,82266,82269,82270,82273],{},"如果省略了 ",[26,82267,82268],{},"indexEnd","，则 ",[26,82271,82272],{},"substring()"," 提取字符直到字符串的末尾",[109,82275,82276,82277,82280,82281,82269,82283,82285],{},"如果 ",[26,82278,82279],{},"indexStart"," 等于 ",[26,82282,82268],{},[26,82284,82272],{}," 返回一个空字符串",[109,82287,82276,82288,82290,82291,82269,82293,82295],{},[26,82289,82279],{}," 大于 ",[26,82292,82268],{},[26,82294,82272],{}," 的效果就像交换了这两个参数一样",[109,82297,82298],{},"结束的索引号不包含想要截取的部分",[38,82300,82302],{"className":81543,"code":82301,"language":81545,"meta":43,"style":43},"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",[26,82303,82304,82316,82320,82354,82384,82388,82419,82423,82450,82480,82510,82514,82545],{"__ignoreMap":43},[47,82305,82306,82309,82311,82314],{"class":49,"line":50},[47,82307,82308],{"class":221},"const anyString ",[47,82310,267],{"class":217},[47,82312,82313],{"class":81}," \"Mozilla\"",[47,82315,1384],{"class":221},[47,82317,82318],{"class":49,"line":92},[47,82319,2493],{"emptyLinePlaceholder":145},[47,82321,82322,82325,82327,82329,82331,82334,82336,82339,82341,82343,82345,82347,82349,82351],{"class":49,"line":1273},[47,82323,82324],{"class":85},"console",[47,82326,777],{"class":221},[47,82328,58301],{"class":85},[47,82330,222],{"class":221},[47,82332,82333],{"class":85},"anyString",[47,82335,777],{"class":221},[47,82337,82338],{"class":85},"substring",[47,82340,222],{"class":221},[47,82342,411],{"class":85},[47,82344,12528],{"class":221},[47,82346,436],{"class":85},[47,82348,75307],{"class":221},[47,82350,33383],{"class":217},[47,82352,82353],{"class":81}," 'M'\n",[47,82355,82356,82358,82360,82362,82364,82366,82368,82370,82372,82374,82376,82378,82380,82382],{"class":49,"line":1288},[47,82357,82324],{"class":85},[47,82359,777],{"class":221},[47,82361,58301],{"class":85},[47,82363,222],{"class":221},[47,82365,82333],{"class":85},[47,82367,777],{"class":221},[47,82369,82338],{"class":85},[47,82371,222],{"class":221},[47,82373,436],{"class":85},[47,82375,12528],{"class":221},[47,82377,411],{"class":85},[47,82379,75307],{"class":221},[47,82381,33383],{"class":217},[47,82383,82353],{"class":81},[47,82385,82386],{"class":49,"line":1294},[47,82387,2493],{"emptyLinePlaceholder":145},[47,82389,82390,82392,82394,82396,82398,82400,82402,82404,82406,82408,82410,82412,82414,82416],{"class":49,"line":1308},[47,82391,82324],{"class":85},[47,82393,777],{"class":221},[47,82395,58301],{"class":85},[47,82397,222],{"class":221},[47,82399,82333],{"class":85},[47,82401,777],{"class":221},[47,82403,82338],{"class":85},[47,82405,222],{"class":221},[47,82407,411],{"class":85},[47,82409,12528],{"class":221},[47,82411,563],{"class":85},[47,82413,75307],{"class":221},[47,82415,33383],{"class":217},[47,82417,82418],{"class":81}," 'Mozill'\n",[47,82420,82421],{"class":49,"line":1314},[47,82422,2493],{"emptyLinePlaceholder":145},[47,82424,82425,82427,82429,82431,82433,82435,82437,82439,82441,82443,82445,82447],{"class":49,"line":1405},[47,82426,82324],{"class":85},[47,82428,777],{"class":221},[47,82430,58301],{"class":85},[47,82432,222],{"class":221},[47,82434,82333],{"class":85},[47,82436,777],{"class":221},[47,82438,82338],{"class":85},[47,82440,222],{"class":221},[47,82442,512],{"class":85},[47,82444,75307],{"class":221},[47,82446,33383],{"class":217},[47,82448,82449],{"class":81}," 'lla'\n",[47,82451,82452,82454,82456,82458,82460,82462,82464,82466,82468,82470,82472,82474,82476,82478],{"class":49,"line":1411},[47,82453,82324],{"class":85},[47,82455,777],{"class":221},[47,82457,58301],{"class":85},[47,82459,222],{"class":221},[47,82461,82333],{"class":85},[47,82463,777],{"class":221},[47,82465,82338],{"class":85},[47,82467,222],{"class":221},[47,82469,512],{"class":85},[47,82471,12528],{"class":221},[47,82473,588],{"class":85},[47,82475,75363],{"class":221},[47,82477,33383],{"class":217},[47,82479,82449],{"class":81},[47,82481,82482,82484,82486,82488,82490,82492,82494,82496,82498,82500,82502,82504,82506,82508],{"class":49,"line":1423},[47,82483,82324],{"class":85},[47,82485,777],{"class":221},[47,82487,58301],{"class":85},[47,82489,222],{"class":221},[47,82491,82333],{"class":85},[47,82493,777],{"class":221},[47,82495,82338],{"class":85},[47,82497,222],{"class":221},[47,82499,588],{"class":85},[47,82501,12528],{"class":221},[47,82503,512],{"class":85},[47,82505,75307],{"class":221},[47,82507,33383],{"class":217},[47,82509,82449],{"class":81},[47,82511,82512],{"class":49,"line":1706},[47,82513,2493],{"emptyLinePlaceholder":145},[47,82515,82516,82518,82520,82522,82524,82526,82528,82530,82532,82534,82536,82538,82540,82542],{"class":49,"line":1711},[47,82517,82324],{"class":85},[47,82519,777],{"class":221},[47,82521,58301],{"class":85},[47,82523,222],{"class":221},[47,82525,82333],{"class":85},[47,82527,777],{"class":221},[47,82529,82338],{"class":85},[47,82531,222],{"class":221},[47,82533,411],{"class":85},[47,82535,12528],{"class":221},[47,82537,588],{"class":85},[47,82539,75307],{"class":221},[47,82541,33383],{"class":217},[47,82543,82544],{"class":81}," 'Mozilla'\n",[47,82546,82547,82549,82551,82553,82555,82557,82559,82561,82563,82565,82567,82569,82571,82573],{"class":49,"line":1717},[47,82548,82324],{"class":85},[47,82550,777],{"class":221},[47,82552,58301],{"class":85},[47,82554,222],{"class":221},[47,82556,82333],{"class":85},[47,82558,777],{"class":221},[47,82560,82338],{"class":85},[47,82562,222],{"class":221},[47,82564,411],{"class":85},[47,82566,12528],{"class":221},[47,82568,665],{"class":85},[47,82570,75307],{"class":221},[47,82572,33383],{"class":217},[47,82574,82544],{"class":81},[23003,82576,82578],{"id":82577},"_410533-startswith","4.10.5.3.3 startsWith",[19,82580,82581,82584,82585,82590,82591,82593,82594],{},[26,82582,82583],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[369,82586,82587],{},[26,82588,82589],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[26,82592,1456],{}," 或 ",[26,82595,66074],{},[38,82597,82599],{"className":77549,"code":82598,"language":77551,"meta":43,"style":43},"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",[26,82600,82601,82613,82632,82637,82657],{"__ignoreMap":43},[47,82602,82603,82605,82608,82610],{"class":49,"line":50},[47,82604,6885],{"class":217},[47,82606,82607],{"class":221}," str1 ",[47,82609,267],{"class":217},[47,82611,82612],{"class":81}," \"Saturday night plans\"\n",[47,82614,82615,82617,82619,82622,82625,82627,82630],{"class":49,"line":92},[47,82616,77586],{"class":221},[47,82618,58301],{"class":53},[47,82620,82621],{"class":221},"(str1.",[47,82623,82624],{"class":53},"startsWith",[47,82626,222],{"class":221},[47,82628,82629],{"class":81},"\"Sat\"",[47,82631,30551],{"class":221},[47,82633,82634],{"class":49,"line":1273},[47,82635,82636],{"class":279},"\u002F\u002F Expected output: true\n",[47,82638,82639,82641,82643,82645,82647,82649,82651,82653,82655],{"class":49,"line":1288},[47,82640,77586],{"class":221},[47,82642,58301],{"class":53},[47,82644,82621],{"class":221},[47,82646,82624],{"class":53},[47,82648,222],{"class":221},[47,82650,82629],{"class":81},[47,82652,12528],{"class":221},[47,82654,292],{"class":85},[47,82656,30551],{"class":221},[47,82658,82659],{"class":49,"line":1294},[47,82660,82661],{"class":279},"\u002F\u002F Expected output: false\n",[38,82663,82665],{"className":50687,"code":82664,"language":50689,"meta":43,"style":43},"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",[26,82666,82667,82672,82677,82681,82686,82691],{"__ignoreMap":43},[47,82668,82669],{"class":49,"line":50},[47,82670,82671],{"class":221},"startsWith(searchString)\n",[47,82673,82674],{"class":49,"line":92},[47,82675,82676],{"class":221},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[47,82678,82679],{"class":49,"line":1273},[47,82680,2493],{"emptyLinePlaceholder":145},[47,82682,82683],{"class":49,"line":1288},[47,82684,82685],{"class":221},"const str3 = 'pink老师上课中'\n",[47,82687,82688],{"class":49,"line":1294},[47,82689,82690],{"class":221},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[47,82692,82693],{"class":49,"line":1308},[47,82694,82695],{"class":221},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23003,82697,82699],{"id":82698},"_410534-includes","4.10.5.3.4 includes",[19,82701,82702],{},"includes(searchString) includes(searchString, position)",[171,82704,82705],{},[109,82706,82707],{},"searchString:",[19,82709,82710,82711,82713,82714,82719,82720,82725,82726,21593,82729,82732,82733,82736],{},"一个要在 ",[26,82712,1393],{}," 中查找的字符串。",[457,82715,82718],{"href":82716,"rel":82717},"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",[23956],"不能是正则表达式","。所有非正则表达式的值都会被",[457,82721,82724],{"href":82722,"rel":82723},"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",[23956],"强制转换为字符串","，因此如果该参数被省略或传入 ",[26,82727,82728],{},"undefined",[26,82730,82731],{},"includes()"," 方法会在字符串中搜索 ",[26,82734,82735],{},"\"undefined\"","，这通常不是你想要的",[171,82738,82739],{"start":92},[109,82740,82741,1078],{},[26,82742,82743],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,82745,82746,82747,82750,82751],{},"在字符串中开始搜索 ",[26,82748,82749],{},"searchString"," 的位置。默认值为 ",[26,82752,411],{},[171,82754,82755],{"start":1273},[109,82756,82757],{},"返回值：",[19,82759,82760,82761,82763,82764,82768,82769],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[26,82762,82749],{}," 为空字符串的情况），则返回 ",[369,82765,82766],{},[26,82767,1456],{}," ，否则返回 ",[369,82770,82771],{},[26,82772,66074],{},[171,82774,82775],{"start":1288},[109,82776,82777],{},"异常：",[19,82779,82276,82780,13888,82782,82786],{},[26,82781,82749],{},[457,82783,82785],{"href":82716,"rel":82784},[23956],"是一个正则表达式","，则会抛出",[19,82788,82789],{},"只要是有就是true，不需要非得以谁开头结尾",[38,82791,82793],{"className":77549,"code":82792,"language":77551,"meta":43,"style":43},"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",[26,82794,82795,82806,82829,82848,82868,82890,82909],{"__ignoreMap":43},[47,82796,82797,82799,82801,82803],{"class":49,"line":50},[47,82798,6885],{"class":217},[47,82800,79829],{"class":221},[47,82802,267],{"class":217},[47,82804,82805],{"class":81}," \"To be, or not to be, that is the question.\"\n",[47,82807,82808,82810,82812,82815,82818,82820,82823,82826],{"class":49,"line":92},[47,82809,77586],{"class":221},[47,82811,58301],{"class":53},[47,82813,82814],{"class":221},"(str.",[47,82816,82817],{"class":53},"includes",[47,82819,222],{"class":221},[47,82821,82822],{"class":81},"\"To be\"",[47,82824,82825],{"class":221},"))",[47,82827,82828],{"class":279},"  \u002F\u002F true\n",[47,82830,82831,82833,82835,82837,82839,82841,82844,82846],{"class":49,"line":1273},[47,82832,77586],{"class":221},[47,82834,58301],{"class":53},[47,82836,82814],{"class":221},[47,82838,82817],{"class":53},[47,82840,222],{"class":221},[47,82842,82843],{"class":81},"\"question\"",[47,82845,82825],{"class":221},[47,82847,82828],{"class":279},[47,82849,82850,82852,82854,82856,82858,82860,82863,82865],{"class":49,"line":1288},[47,82851,77586],{"class":221},[47,82853,58301],{"class":53},[47,82855,82814],{"class":221},[47,82857,82817],{"class":53},[47,82859,222],{"class":221},[47,82861,82862],{"class":81},"\"nonexistent\"",[47,82864,82825],{"class":221},[47,82866,82867],{"class":279},"  \u002F\u002F false\n",[47,82869,82870,82872,82874,82876,82878,82880,82882,82884,82886,82888],{"class":49,"line":1294},[47,82871,77586],{"class":221},[47,82873,58301],{"class":53},[47,82875,82814],{"class":221},[47,82877,82817],{"class":53},[47,82879,222],{"class":221},[47,82881,82822],{"class":81},[47,82883,12528],{"class":221},[47,82885,436],{"class":85},[47,82887,82825],{"class":221},[47,82889,82867],{"class":279},[47,82891,82892,82894,82896,82898,82900,82902,82905,82907],{"class":49,"line":1308},[47,82893,77586],{"class":221},[47,82895,58301],{"class":53},[47,82897,82814],{"class":221},[47,82899,82817],{"class":53},[47,82901,222],{"class":221},[47,82903,82904],{"class":81},"\"TO BE\"",[47,82906,82825],{"class":221},[47,82908,82867],{"class":279},[47,82910,82911,82913,82915,82917,82919,82921,82923,82925],{"class":49,"line":1314},[47,82912,77586],{"class":221},[47,82914,58301],{"class":53},[47,82916,82814],{"class":221},[47,82918,82817],{"class":53},[47,82920,222],{"class":221},[47,82922,7745],{"class":81},[47,82924,82825],{"class":221},[47,82926,82828],{"class":279},[23003,82928,82930],{"id":82929},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[38,82932,82934],{"className":53121,"code":82933,"language":53123,"meta":43,"style":43},"\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",[26,82935,82936,82944,82952,82957,82962,82967,82972,82977,82985],{"__ignoreMap":43},[47,82937,82938,82940,82942],{"class":49,"line":50},[47,82939,1129],{"class":221},[47,82941,51854],{"class":51354},[47,82943,51361],{"class":221},[47,82945,82946,82948,82950],{"class":49,"line":92},[47,82947,52198],{"class":221},[47,82949,51867],{"class":51354},[47,82951,51361],{"class":221},[47,82953,82954],{"class":49,"line":1273},[47,82955,82956],{"class":221},"    const num = 10\n",[47,82958,82959],{"class":49,"line":1288},[47,82960,82961],{"class":221},"    \u002F\u002F 强制转换\n",[47,82963,82964],{"class":49,"line":1294},[47,82965,82966],{"class":221},"    console.log(String(num))\n",[47,82968,82969],{"class":49,"line":1308},[47,82970,82971],{"class":221},"    \u002F\u002F toString()方法转换\n",[47,82973,82974],{"class":49,"line":1314},[47,82975,82976],{"class":221},"    console.log(num.toString())\n",[47,82978,82979,82981,82983],{"class":49,"line":1405},[47,82980,52471],{"class":221},[47,82982,51867],{"class":51354},[47,82984,51361],{"class":221},[47,82986,82987,82989,82991],{"class":49,"line":1411},[47,82988,51839],{"class":221},[47,82990,51854],{"class":51354},[47,82992,51361],{"class":221},[23003,82994,82996],{"id":82995},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,82998,82999],{},[1556,83000],{"alt":43,"src":83001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[38,83003,83005],{"className":50687,"code":83004,"language":50689,"meta":43,"style":43},"\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",[26,83006,83007,83017,83031,83035,83043,83057,83077,83089,83097,83101,83109,83121,83129,83141,83146,83151,83156,83203,83219,83227,83235,83239],{"__ignoreMap":43},[47,83008,83009,83011,83013,83015],{"class":49,"line":50},[47,83010,51351],{"class":221},[47,83012,51355],{"class":51354},[47,83014,51358],{"class":53},[47,83016,51361],{"class":221},[47,83018,83019,83021,83023,83025,83027,83029],{"class":49,"line":92},[47,83020,1129],{"class":221},[47,83022,50689],{"class":51354},[47,83024,51370],{"class":53},[47,83026,267],{"class":221},[47,83028,51375],{"class":81},[47,83030,51361],{"class":221},[47,83032,83033],{"class":49,"line":1273},[47,83034,2493],{"emptyLinePlaceholder":145},[47,83036,83037,83039,83041],{"class":49,"line":1288},[47,83038,1129],{"class":221},[47,83040,51388],{"class":51354},[47,83042,51361],{"class":221},[47,83044,83045,83047,83049,83051,83053,83055],{"class":49,"line":1294},[47,83046,52198],{"class":221},[47,83048,51398],{"class":51354},[47,83050,51401],{"class":53},[47,83052,267],{"class":221},[47,83054,51406],{"class":81},[47,83056,51361],{"class":221},[47,83058,83059,83061,83063,83065,83067,83069,83071,83073,83075],{"class":49,"line":1308},[47,83060,52198],{"class":221},[47,83062,51398],{"class":51354},[47,83064,15013],{"class":53},[47,83066,267],{"class":221},[47,83068,51445],{"class":81},[47,83070,51425],{"class":53},[47,83072,267],{"class":221},[47,83074,51452],{"class":81},[47,83076,51361],{"class":221},[47,83078,83079,83081,83083,83085,83087],{"class":49,"line":1314},[47,83080,52198],{"class":221},[47,83082,51461],{"class":51354},[47,83084,51464],{"class":221},[47,83086,51461],{"class":51354},[47,83088,51361],{"class":221},[47,83090,83091,83093,83095],{"class":49,"line":1405},[47,83092,51839],{"class":221},[47,83094,51388],{"class":51354},[47,83096,51361],{"class":221},[47,83098,83099],{"class":49,"line":1411},[47,83100,2493],{"emptyLinePlaceholder":145},[47,83102,83103,83105,83107],{"class":49,"line":1423},[47,83104,1129],{"class":221},[47,83106,51854],{"class":51354},[47,83108,51361],{"class":221},[47,83110,83111,83113,83115,83117,83119],{"class":49,"line":1706},[47,83112,52198],{"class":221},[47,83114,51665],{"class":51354},[47,83116,55368],{"class":221},[47,83118,51665],{"class":51354},[47,83120,51361],{"class":221},[47,83122,83123,83125,83127],{"class":49,"line":1711},[47,83124,52198],{"class":221},[47,83126,51867],{"class":51354},[47,83128,51361],{"class":221},[47,83130,83131,83133,83136,83138],{"class":49,"line":1717},[47,83132,11314],{"class":217},[47,83134,83135],{"class":85}," gift",[47,83137,13657],{"class":217},[47,83139,83140],{"class":81}," '50g的茶叶，清洗球'\n",[47,83142,83143],{"class":49,"line":1722},[47,83144,83145],{"class":279},"    \u002F\u002F 1.把字符串拆分为数组\n",[47,83147,83148],{"class":49,"line":1736},[47,83149,83150],{"class":279},"    \u002F\u002F console.log(gift.split(','))\n",[47,83152,83153],{"class":49,"line":1741},[47,83154,83155],{"class":279},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[47,83157,83158,83160,83162,83164,83167,83170,83172,83175,83177,83179,83181,83183,83185,83188,83190,83193,83195,83197,83199,83201],{"class":49,"line":1747},[47,83159,11314],{"class":217},[47,83161,73973],{"class":85},[47,83163,13657],{"class":217},[47,83165,83166],{"class":221}," gift.",[47,83168,83169],{"class":53},"split",[47,83171,222],{"class":221},[47,83173,83174],{"class":81},"'，'",[47,83176,30880],{"class":221},[47,83178,74098],{"class":53},[47,83180,222],{"class":221},[47,83182,79849],{"class":5309},[47,83184,79852],{"class":217},[47,83186,83187],{"class":81}," `\u003Cspan>【赠品】${",[47,83189,79849],{"class":221},[47,83191,83192],{"class":81},"}\u003C\u002Fspan>\u003Cbr>`",[47,83194,30880],{"class":221},[47,83196,74277],{"class":53},[47,83198,222],{"class":221},[47,83200,74282],{"class":81},[47,83202,228],{"class":221},[47,83204,83205,83207,83209,83211,83213,83215,83217],{"class":49,"line":1768},[47,83206,52461],{"class":221},[47,83208,54453],{"class":53},[47,83210,222],{"class":221},[47,83212,81985],{"class":81},[47,83214,74303],{"class":221},[47,83216,267],{"class":217},[47,83218,74039],{"class":221},[47,83220,83221,83223,83225],{"class":49,"line":1773},[47,83222,52471],{"class":221},[47,83224,51867],{"class":51354},[47,83226,51361],{"class":221},[47,83228,83229,83231,83233],{"class":49,"line":1787},[47,83230,51839],{"class":221},[47,83232,51854],{"class":51354},[47,83234,51361],{"class":221},[47,83236,83237],{"class":49,"line":1792},[47,83238,2493],{"emptyLinePlaceholder":145},[47,83240,83241,83243,83245],{"class":49,"line":1821},[47,83242,51839],{"class":221},[47,83244,50689],{"class":51354},[47,83246,51361],{"class":221},[22091,83248,83250],{"id":83249},"_41054-number","4.10.5.4 Number",[19,83252,83253],{},[1556,83254],{"alt":43,"src":83255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,83257,83258],{},"整数也可以进行toFixed来保留小数",[19,83260,83261],{},"比如：",[19,83263,83264],{},"const price=10",[19,83266,83267],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22091,83269,83271],{"id":83270},"_41055-购物车展示","4.10.5.5 购物车展示",[19,83273,83274],{},[1556,83275],{"alt":43,"src":83276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[38,83278,83280],{"className":50687,"code":83279,"language":50689,"meta":43,"style":43},"\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",[26,83281,83282,83292,83306,83310,83318,83332,83352,83364,83372,83378,83388,83398,83408,83412,83416,83422,83434,83448,83452,83456,83462,83474,83490,83500,83516,83520,83524,83530,83540,83550,83554,83558,83566,83578,83590,83602,83606,83610,83618,83630,83634,83638,83649,83659,83671,83683,83693,83697,83701,83709,83718,83730,83740,83750,83754,83758,83766,83775,83782,83792,83804,83808,83812,83821,83831,83842,83854,83866,83870,83874,83883,83893,83904,83908,83912,83918,83930,83942,83952,83962,83980,83992,83996,84000,84009,84021,84031,84041,84053,84057,84065,84073,84077,84085,84099,84107,84121,84149,84157,84165,84175,84179,84187,84195,84204,84212,84221,84231,84235,84239,84247,84255,84264,84272,84280,84293,84297,84301,84309,84317,84326,84334,84342,84357,84361,84365,84373,84381,84390,84398,84406,84420,84428,84432,84436,84441,84467,84472,84509,84514,84537,84542,84596,84601,84637,84641,84647,84652,84661,84675,84684,84703,84712,84722,84727,84732,84745,84750,84804,84830,84838,84846,84850],{"__ignoreMap":43},[47,83283,83284,83286,83288,83290],{"class":49,"line":50},[47,83285,51351],{"class":221},[47,83287,51355],{"class":51354},[47,83289,51358],{"class":53},[47,83291,51361],{"class":221},[47,83293,83294,83296,83298,83300,83302,83304],{"class":49,"line":92},[47,83295,1129],{"class":221},[47,83297,50689],{"class":51354},[47,83299,51370],{"class":53},[47,83301,267],{"class":221},[47,83303,51375],{"class":81},[47,83305,51361],{"class":221},[47,83307,83308],{"class":49,"line":1273},[47,83309,2493],{"emptyLinePlaceholder":145},[47,83311,83312,83314,83316],{"class":49,"line":1288},[47,83313,1129],{"class":221},[47,83315,51388],{"class":51354},[47,83317,51361],{"class":221},[47,83319,83320,83322,83324,83326,83328,83330],{"class":49,"line":1294},[47,83321,52198],{"class":221},[47,83323,51398],{"class":51354},[47,83325,51401],{"class":53},[47,83327,267],{"class":221},[47,83329,51406],{"class":81},[47,83331,51361],{"class":221},[47,83333,83334,83336,83338,83340,83342,83344,83346,83348,83350],{"class":49,"line":1308},[47,83335,52198],{"class":221},[47,83337,51398],{"class":51354},[47,83339,15013],{"class":53},[47,83341,267],{"class":221},[47,83343,51445],{"class":81},[47,83345,51425],{"class":53},[47,83347,267],{"class":221},[47,83349,51452],{"class":81},[47,83351,51361],{"class":221},[47,83353,83354,83356,83358,83360,83362],{"class":49,"line":1314},[47,83355,52198],{"class":221},[47,83357,51461],{"class":51354},[47,83359,51464],{"class":221},[47,83361,51461],{"class":51354},[47,83363,51361],{"class":221},[47,83365,83366,83368,83370],{"class":49,"line":1405},[47,83367,52198],{"class":221},[47,83369,134],{"class":51354},[47,83371,51361],{"class":221},[47,83373,83374,83376],{"class":49,"line":1411},[47,83375,6496],{"class":51354},[47,83377,15665],{"class":221},[47,83379,83380,83382,83384,83386],{"class":49,"line":1423},[47,83381,54749],{"class":85},[47,83383,51491],{"class":221},[47,83385,411],{"class":85},[47,83387,1384],{"class":221},[47,83389,83390,83392,83394,83396],{"class":49,"line":1706},[47,83391,54760],{"class":85},[47,83393,51491],{"class":221},[47,83395,411],{"class":85},[47,83397,1384],{"class":221},[47,83399,83400,83402,83404,83406],{"class":49,"line":1711},[47,83401,72650],{"class":85},[47,83403,51491],{"class":221},[47,83405,60559],{"class":85},[47,83407,1384],{"class":221},[47,83409,83410],{"class":49,"line":1717},[47,83411,2280],{"class":221},[47,83413,83414],{"class":49,"line":1722},[47,83415,2493],{"emptyLinePlaceholder":145},[47,83417,83418,83420],{"class":49,"line":1736},[47,83419,62177],{"class":53},[47,83421,15665],{"class":221},[47,83423,83424,83426,83428,83430,83432],{"class":49,"line":1741},[47,83425,54825],{"class":85},[47,83427,51491],{"class":221},[47,83429,78628],{"class":85},[47,83431,51546],{"class":217},[47,83433,1384],{"class":221},[47,83435,83436,83438,83440,83442,83444,83446],{"class":49,"line":1747},[47,83437,54760],{"class":85},[47,83439,51491],{"class":221},[47,83441,530],{"class":85},[47,83443,51546],{"class":217},[47,83445,51610],{"class":85},[47,83447,1384],{"class":221},[47,83449,83450],{"class":49,"line":1768},[47,83451,2280],{"class":221},[47,83453,83454],{"class":49,"line":1773},[47,83455,2493],{"emptyLinePlaceholder":145},[47,83457,83458,83460],{"class":49,"line":1787},[47,83459,78679],{"class":53},[47,83461,15665],{"class":221},[47,83463,83464,83466,83468,83470,83472],{"class":49,"line":1792},[47,83465,54749],{"class":85},[47,83467,51491],{"class":221},[47,83469,794],{"class":85},[47,83471,51546],{"class":217},[47,83473,1384],{"class":221},[47,83475,83476,83478,83480,83482,83484,83486,83488],{"class":49,"line":1821},[47,83477,61914],{"class":85},[47,83479,51491],{"class":221},[47,83481,28175],{"class":85},[47,83483,78734],{"class":85},[47,83485,78737],{"class":85},[47,83487,914],{"class":217},[47,83489,1384],{"class":221},[47,83491,83492,83494,83496,83498],{"class":49,"line":1826},[47,83493,55063],{"class":85},[47,83495,51491],{"class":221},[47,83497,51531],{"class":85},[47,83499,1384],{"class":221},[47,83501,83502,83504,83506,83508,83510,83512,83514],{"class":49,"line":1843},[47,83503,62031],{"class":85},[47,83505,51491],{"class":221},[47,83507,436],{"class":85},[47,83509,51546],{"class":217},[47,83511,51575],{"class":85},[47,83513,62298],{"class":85},[47,83515,1384],{"class":221},[47,83517,83518],{"class":49,"line":1848},[47,83519,2280],{"class":221},[47,83521,83522],{"class":49,"line":1853},[47,83523,2493],{"emptyLinePlaceholder":145},[47,83525,83526,83528],{"class":49,"line":1858},[47,83527,78797],{"class":53},[47,83529,15665],{"class":221},[47,83531,83532,83534,83536,83538],{"class":49,"line":1872},[47,83533,62079],{"class":85},[47,83535,51491],{"class":221},[47,83537,62084],{"class":85},[47,83539,1384],{"class":221},[47,83541,83542,83544,83546,83548],{"class":49,"line":1877},[47,83543,54938],{"class":85},[47,83545,51491],{"class":221},[47,83547,61872],{"class":85},[47,83549,1384],{"class":221},[47,83551,83552],{"class":49,"line":2670},[47,83553,2280],{"class":221},[47,83555,83556],{"class":49,"line":2684},[47,83557,2493],{"emptyLinePlaceholder":145},[47,83559,83560,83562,83564],{"class":49,"line":2692},[47,83561,78679],{"class":53},[47,83563,55669],{"class":51354},[47,83565,15665],{"class":221},[47,83567,83568,83570,83572,83574,83576],{"class":49,"line":2697},[47,83569,54825],{"class":85},[47,83571,51491],{"class":221},[47,83573,831],{"class":85},[47,83575,51546],{"class":217},[47,83577,1384],{"class":221},[47,83579,83580,83582,83584,83586,83588],{"class":49,"line":2703},[47,83581,54839],{"class":85},[47,83583,51491],{"class":221},[47,83585,831],{"class":85},[47,83587,51546],{"class":217},[47,83589,1384],{"class":221},[47,83591,83592,83594,83596,83598,83600],{"class":49,"line":2709},[47,83593,61804],{"class":85},[47,83595,51491],{"class":221},[47,83597,538],{"class":85},[47,83599,51546],{"class":217},[47,83601,1384],{"class":221},[47,83603,83604],{"class":49,"line":2714},[47,83605,2280],{"class":221},[47,83607,83608],{"class":49,"line":8041},[47,83609,2493],{"emptyLinePlaceholder":145},[47,83611,83612,83614,83616],{"class":49,"line":8065},[47,83613,78679],{"class":53},[47,83615,62358],{"class":53},[47,83617,15665],{"class":221},[47,83619,83620,83622,83624,83626,83628],{"class":49,"line":8070},[47,83621,54825],{"class":85},[47,83623,51491],{"class":221},[47,83625,1816],{"class":85},[47,83627,51546],{"class":217},[47,83629,1384],{"class":221},[47,83631,83632],{"class":49,"line":8076},[47,83633,2280],{"class":221},[47,83635,83636],{"class":49,"line":8103},[47,83637,2493],{"emptyLinePlaceholder":145},[47,83639,83640,83642,83644,83647],{"class":49,"line":8108},[47,83641,78679],{"class":53},[47,83643,62358],{"class":53},[47,83645,83646],{"class":53}," .tag",[47,83648,15665],{"class":221},[47,83650,83651,83653,83655,83657],{"class":49,"line":8114},[47,83652,55063],{"class":85},[47,83654,51491],{"class":221},[47,83656,60923],{"class":85},[47,83658,1384],{"class":221},[47,83660,83661,83663,83665,83667,83669],{"class":49,"line":8126},[47,83662,54749],{"class":85},[47,83664,51491],{"class":221},[47,83666,298],{"class":85},[47,83668,51546],{"class":217},[47,83670,1384],{"class":221},[47,83672,83673,83675,83677,83679,83681],{"class":49,"line":8138},[47,83674,54976],{"class":85},[47,83676,51491],{"class":221},[47,83678,717],{"class":85},[47,83680,51546],{"class":217},[47,83682,1384],{"class":221},[47,83684,83685,83687,83689,83691],{"class":49,"line":8150},[47,83686,57470],{"class":85},[47,83688,51491],{"class":221},[47,83690,62124],{"class":85},[47,83692,1384],{"class":221},[47,83694,83695],{"class":49,"line":9809},[47,83696,2280],{"class":221},[47,83698,83699],{"class":49,"line":9834},[47,83700,2493],{"emptyLinePlaceholder":145},[47,83702,83703,83705,83707],{"class":49,"line":9857},[47,83704,78679],{"class":53},[47,83706,78971],{"class":53},[47,83708,31520],{"class":221},[47,83710,83711,83713,83716],{"class":49,"line":9881},[47,83712,78679],{"class":53},[47,83714,83715],{"class":53}," .sub-total",[47,83717,15665],{"class":221},[47,83719,83720,83722,83724,83726,83728],{"class":49,"line":9886},[47,83721,54976],{"class":85},[47,83723,51491],{"class":221},[47,83725,869],{"class":85},[47,83727,51546],{"class":217},[47,83729,1384],{"class":221},[47,83731,83732,83734,83736,83738],{"class":49,"line":9891},[47,83733,57470],{"class":85},[47,83735,51491],{"class":221},[47,83737,78994],{"class":85},[47,83739,1384],{"class":221},[47,83741,83742,83744,83746,83748],{"class":49,"line":9896},[47,83743,61891],{"class":85},[47,83745,51491],{"class":221},[47,83747,436],{"class":85},[47,83749,1384],{"class":221},[47,83751,83752],{"class":49,"line":9905},[47,83753,2280],{"class":221},[47,83755,83756],{"class":49,"line":9910},[47,83757,2493],{"emptyLinePlaceholder":145},[47,83759,83760,83762,83764],{"class":49,"line":9916},[47,83761,78679],{"class":53},[47,83763,79011],{"class":53},[47,83765,31520],{"class":221},[47,83767,83768,83770,83773],{"class":49,"line":9937},[47,83769,78679],{"class":53},[47,83771,83772],{"class":53}," .sub-total::before",[47,83774,31520],{"class":221},[47,83776,83777,83780],{"class":49,"line":9943},[47,83778,83779],{"class":53},"    .amount::before",[47,83781,15665],{"class":221},[47,83783,83784,83786,83788,83790],{"class":49,"line":9957},[47,83785,79018],{"class":85},[47,83787,51491],{"class":221},[47,83789,79023],{"class":81},[47,83791,1384],{"class":221},[47,83793,83794,83796,83798,83800,83802],{"class":49,"line":9963},[47,83795,54976],{"class":85},[47,83797,51491],{"class":221},[47,83799,717],{"class":85},[47,83801,51546],{"class":217},[47,83803,1384],{"class":221},[47,83805,83806],{"class":49,"line":9990},[47,83807,2280],{"class":221},[47,83809,83810],{"class":49,"line":9999},[47,83811,2493],{"emptyLinePlaceholder":145},[47,83813,83814,83816,83819],{"class":49,"line":10005},[47,83815,78679],{"class":53},[47,83817,83818],{"class":53}," .spec",[47,83820,15665],{"class":221},[47,83822,83823,83825,83827,83829],{"class":49,"line":10013},[47,83824,61891],{"class":85},[47,83826,51491],{"class":221},[47,83828,298],{"class":85},[47,83830,1384],{"class":221},[47,83832,83833,83835,83837,83840],{"class":49,"line":10018},[47,83834,57470],{"class":85},[47,83836,51491],{"class":221},[47,83838,83839],{"class":85},"#888",[47,83841,1384],{"class":221},[47,83843,83844,83846,83848,83850,83852],{"class":49,"line":16697},[47,83845,54976],{"class":85},[47,83847,51491],{"class":221},[47,83849,768],{"class":85},[47,83851,51546],{"class":217},[47,83853,1384],{"class":221},[47,83855,83856,83858,83860,83862,83864],{"class":49,"line":16703},[47,83857,62054],{"class":85},[47,83859,51491],{"class":221},[47,83861,919],{"class":85},[47,83863,51546],{"class":217},[47,83865,1384],{"class":221},[47,83867,83868],{"class":49,"line":16726},[47,83869,2280],{"class":221},[47,83871,83872],{"class":49,"line":16732},[47,83873,2493],{"emptyLinePlaceholder":145},[47,83875,83876,83878,83881],{"class":49,"line":16755},[47,83877,78679],{"class":53},[47,83879,83880],{"class":53}," .count",[47,83882,15665],{"class":221},[47,83884,83885,83887,83889,83891],{"class":49,"line":16769},[47,83886,61891],{"class":85},[47,83888,51491],{"class":221},[47,83890,436],{"class":85},[47,83892,1384],{"class":221},[47,83894,83895,83897,83899,83902],{"class":49,"line":16789},[47,83896,57470],{"class":85},[47,83898,51491],{"class":221},[47,83900,83901],{"class":85},"#aaa",[47,83903,1384],{"class":221},[47,83905,83906],{"class":49,"line":16795},[47,83907,2280],{"class":221},[47,83909,83910],{"class":49,"line":16806},[47,83911,2493],{"emptyLinePlaceholder":145},[47,83913,83914,83916],{"class":49,"line":16829},[47,83915,72529],{"class":53},[47,83917,15665],{"class":221},[47,83919,83920,83922,83924,83926,83928],{"class":49,"line":16851},[47,83921,54825],{"class":85},[47,83923,51491],{"class":221},[47,83925,78628],{"class":85},[47,83927,51546],{"class":217},[47,83929,1384],{"class":221},[47,83931,83932,83934,83936,83938,83940],{"class":49,"line":16856},[47,83933,54760],{"class":85},[47,83935,51491],{"class":221},[47,83937,411],{"class":85},[47,83939,51610],{"class":85},[47,83941,1384],{"class":221},[47,83943,83944,83946,83948,83950],{"class":49,"line":16862},[47,83945,55063],{"class":85},[47,83947,51491],{"class":221},[47,83949,51531],{"class":85},[47,83951,1384],{"class":221},[47,83953,83954,83956,83958,83960],{"class":49,"line":16876},[47,83955,55074],{"class":85},[47,83957,51491],{"class":221},[47,83959,51634],{"class":85},[47,83961,1384],{"class":221},[47,83963,83964,83967,83969,83971,83973,83975,83978],{"class":49,"line":16889},[47,83965,83966],{"class":85},"      border-top",[47,83968,51491],{"class":221},[47,83970,436],{"class":85},[47,83972,51546],{"class":217},[47,83974,51575],{"class":85},[47,83976,83977],{"class":85}," #4e4e4e",[47,83979,1384],{"class":221},[47,83981,83982,83984,83986,83988,83990],{"class":49,"line":16894},[47,83983,54749],{"class":85},[47,83985,51491],{"class":221},[47,83987,919],{"class":85},[47,83989,51546],{"class":217},[47,83991,1384],{"class":221},[47,83993,83994],{"class":49,"line":16908},[47,83995,2280],{"class":221},[47,83997,83998],{"class":49,"line":16913},[47,83999,2493],{"emptyLinePlaceholder":145},[47,84001,84002,84004,84007],{"class":49,"line":16919},[47,84003,72529],{"class":53},[47,84005,84006],{"class":53}," .amount",[47,84008,15665],{"class":221},[47,84010,84011,84013,84015,84017,84019],{"class":49,"line":16924},[47,84012,54976],{"class":85},[47,84014,51491],{"class":221},[47,84016,869],{"class":85},[47,84018,51546],{"class":217},[47,84020,1384],{"class":221},[47,84022,84023,84025,84027,84029],{"class":49,"line":16938},[47,84024,57470],{"class":85},[47,84026,51491],{"class":221},[47,84028,78994],{"class":85},[47,84030,1384],{"class":221},[47,84032,84033,84035,84037,84039],{"class":49,"line":16943},[47,84034,62388],{"class":85},[47,84036,51491],{"class":221},[47,84038,51543],{"class":85},[47,84040,1384],{"class":221},[47,84042,84043,84045,84047,84049,84051],{"class":49,"line":16948},[47,84044,61804],{"class":85},[47,84046,51491],{"class":221},[47,84048,875],{"class":85},[47,84050,51546],{"class":217},[47,84052,1384],{"class":221},[47,84054,84055],{"class":49,"line":16962},[47,84056,2280],{"class":221},[47,84058,84059,84061,84063],{"class":49,"line":16974},[47,84060,52471],{"class":221},[47,84062,134],{"class":51354},[47,84064,51361],{"class":221},[47,84066,84067,84069,84071],{"class":49,"line":16979},[47,84068,51839],{"class":221},[47,84070,51388],{"class":51354},[47,84072,51361],{"class":221},[47,84074,84075],{"class":49,"line":16992},[47,84076,2493],{"emptyLinePlaceholder":145},[47,84078,84079,84081,84083],{"class":49,"line":16997},[47,84080,1129],{"class":221},[47,84082,51854],{"class":51354},[47,84084,51361],{"class":221},[47,84086,84087,84089,84091,84093,84095,84097],{"class":49,"line":17002},[47,84088,52198],{"class":221},[47,84090,51665],{"class":51354},[47,84092,53540],{"class":53},[47,84094,267],{"class":221},[47,84096,62662],{"class":81},[47,84098,51361],{"class":221},[47,84100,84101,84103,84105],{"class":49,"line":17007},[47,84102,52471],{"class":221},[47,84104,51665],{"class":51354},[47,84106,51361],{"class":221},[47,84108,84109,84111,84113,84115,84117,84119],{"class":49,"line":17020},[47,84110,52198],{"class":221},[47,84112,51665],{"class":51354},[47,84114,53540],{"class":53},[47,84116,267],{"class":221},[47,84118,62634],{"class":81},[47,84120,51361],{"class":221},[47,84122,84123,84125,84127,84130,84132,84134,84136,84139,84141,84143,84145,84147],{"class":49,"line":17025},[47,84124,51395],{"class":221},[47,84126,51665],{"class":51354},[47,84128,84129],{"class":221},">合计：\u003C",[47,84131,47],{"class":51354},[47,84133,53540],{"class":53},[47,84135,267],{"class":221},[47,84137,84138],{"class":81},"\"amount\"",[47,84140,55368],{"class":221},[47,84142,47],{"class":51354},[47,84144,55368],{"class":221},[47,84146,51665],{"class":51354},[47,84148,51361],{"class":221},[47,84150,84151,84153,84155],{"class":49,"line":32687},[47,84152,52471],{"class":221},[47,84154,51665],{"class":51354},[47,84156,51361],{"class":221},[47,84158,84159,84161,84163],{"class":49,"line":32693},[47,84160,52198],{"class":221},[47,84162,51867],{"class":51354},[47,84164,51361],{"class":221},[47,84166,84167,84169,84171,84173],{"class":49,"line":32699},[47,84168,11314],{"class":217},[47,84170,79431],{"class":85},[47,84172,13657],{"class":217},[47,84174,55501],{"class":221},[47,84176,84177],{"class":49,"line":32705},[47,84178,79440],{"class":221},[47,84180,84181,84183,84185],{"class":49,"line":32711},[47,84182,79445],{"class":221},[47,84184,79448],{"class":81},[47,84186,31520],{"class":221},[47,84188,84189,84191,84193],{"class":49,"line":32722},[47,84190,79455],{"class":221},[47,84192,79458],{"class":81},[47,84194,31520],{"class":221},[47,84196,84197,84199,84202],{"class":49,"line":32728},[47,84198,79465],{"class":221},[47,84200,84201],{"class":85},"289.9",[47,84203,31520],{"class":221},[47,84205,84206,84208,84210],{"class":49,"line":32748},[47,84207,79475],{"class":221},[47,84209,79478],{"class":81},[47,84211,31520],{"class":221},[47,84213,84214,84217,84219],{"class":49,"line":32754},[47,84215,84216],{"class":221},"        count: ",[47,84218,298],{"class":85},[47,84220,31520],{"class":221},[47,84222,84223,84226,84229],{"class":49,"line":32765},[47,84224,84225],{"class":221},"        spec: { color: ",[47,84227,84228],{"class":81},"'白色'",[47,84230,55658],{"class":221},[47,84232,84233],{"class":49,"line":32771},[47,84234,77946],{"class":221},[47,84236,84237],{"class":49,"line":32777},[47,84238,79440],{"class":221},[47,84240,84241,84243,84245],{"class":49,"line":32783},[47,84242,79445],{"class":221},[47,84244,79539],{"class":81},[47,84246,31520],{"class":221},[47,84248,84249,84251,84253],{"class":49,"line":32789},[47,84250,79455],{"class":221},[47,84252,79548],{"class":81},[47,84254,31520],{"class":221},[47,84256,84257,84259,84262],{"class":49,"line":32795},[47,84258,79465],{"class":221},[47,84260,84261],{"class":85},"109.8",[47,84263,31520],{"class":221},[47,84265,84266,84268,84270],{"class":49,"line":32801},[47,84267,79475],{"class":221},[47,84269,79566],{"class":81},[47,84271,31520],{"class":221},[47,84273,84274,84276,84278],{"class":49,"line":32807},[47,84275,84216],{"class":221},[47,84277,292],{"class":85},[47,84279,31520],{"class":221},[47,84281,84282,84285,84287,84289,84291],{"class":49,"line":32827},[47,84283,84284],{"class":221},"        spec: { size: ",[47,84286,81957],{"class":81},[47,84288,55518],{"class":221},[47,84290,81962],{"class":81},[47,84292,55658],{"class":221},[47,84294,84295],{"class":49,"line":32833},[47,84296,77946],{"class":221},[47,84298,84299],{"class":49,"line":32849},[47,84300,79440],{"class":221},[47,84302,84303,84305,84307],{"class":49,"line":32855},[47,84304,79445],{"class":221},[47,84306,79583],{"class":81},[47,84308,31520],{"class":221},[47,84310,84311,84313,84315],{"class":49,"line":32869},[47,84312,79455],{"class":221},[47,84314,79592],{"class":81},[47,84316,31520],{"class":221},[47,84318,84319,84321,84324],{"class":49,"line":32875},[47,84320,79465],{"class":221},[47,84322,84323],{"class":85},"488",[47,84325,31520],{"class":221},[47,84327,84328,84330,84332],{"class":49,"line":32890},[47,84329,79475],{"class":221},[47,84331,79610],{"class":81},[47,84333,31520],{"class":221},[47,84335,84336,84338,84340],{"class":49,"line":32896},[47,84337,84216],{"class":221},[47,84339,436],{"class":85},[47,84341,31520],{"class":221},[47,84343,84344,84346,84349,84352,84355],{"class":49,"line":32905},[47,84345,84225],{"class":221},[47,84347,84348],{"class":81},"'青色'",[47,84350,84351],{"class":221},", sum: ",[47,84353,84354],{"class":81},"'一大四小'",[47,84356,55658],{"class":221},[47,84358,84359],{"class":49,"line":32911},[47,84360,77946],{"class":221},[47,84362,84363],{"class":49,"line":32920},[47,84364,79440],{"class":221},[47,84366,84367,84369,84371],{"class":49,"line":32926},[47,84368,79445],{"class":221},[47,84370,79627],{"class":81},[47,84372,31520],{"class":221},[47,84374,84375,84377,84379],{"class":49,"line":32932},[47,84376,79455],{"class":221},[47,84378,79636],{"class":81},[47,84380,31520],{"class":221},[47,84382,84383,84385,84388],{"class":49,"line":32941},[47,84384,79465],{"class":221},[47,84386,84387],{"class":85},"139",[47,84389,31520],{"class":221},[47,84391,84392,84394,84396],{"class":49,"line":32947},[47,84393,79475],{"class":221},[47,84395,79654],{"class":81},[47,84397,31520],{"class":221},[47,84399,84400,84402,84404],{"class":49,"line":32958},[47,84401,84216],{"class":221},[47,84403,436],{"class":85},[47,84405,31520],{"class":221},[47,84407,84408,84410,84413,84415,84418],{"class":49,"line":32964},[47,84409,84284],{"class":221},[47,84411,84412],{"class":81},"'小号'",[47,84414,55518],{"class":221},[47,84416,84417],{"class":81},"'紫色'",[47,84419,55524],{"class":221},[47,84421,84422,84425],{"class":49,"line":32983},[47,84423,84424],{"class":221},"        gift: ",[47,84426,84427],{"class":81},"'50g茶叶,清洗球'\n",[47,84429,84430],{"class":49,"line":32989},[47,84431,52452],{"class":221},[47,84433,84434],{"class":49,"line":33000},[47,84435,53163],{"class":221},[47,84437,84438],{"class":49,"line":33006},[47,84439,84440],{"class":279},"    \u002F\u002F  1.根据数据渲染页面\n",[47,84442,84443,84445,84447,84449,84451,84453,84455,84457,84459,84461,84463,84465],{"class":49,"line":33026},[47,84444,52461],{"class":221},[47,84446,54453],{"class":53},[47,84448,222],{"class":221},[47,84450,79955],{"class":81},[47,84452,74303],{"class":221},[47,84454,267],{"class":217},[47,84456,80102],{"class":221},[47,84458,74098],{"class":53},[47,84460,222],{"class":221},[47,84462,79849],{"class":5309},[47,84464,79852],{"class":217},[47,84466,15665],{"class":221},[47,84468,84469],{"class":49,"line":33042},[47,84470,84471],{"class":279},"      \u002F\u002F 对象解构\n",[47,84473,84474,84476,84478,84480,84482,84484,84486,84489,84491,84493,84495,84498,84500,84503,84505,84507],{"class":49,"line":33048},[47,84475,58282],{"class":217},[47,84477,79861],{"class":221},[47,84479,79874],{"class":85},[47,84481,12528],{"class":221},[47,84483,79864],{"class":85},[47,84485,12528],{"class":221},[47,84487,84488],{"class":85},"count",[47,84490,12528],{"class":221},[47,84492,79869],{"class":85},[47,84494,12528],{"class":221},[47,84496,84497],{"class":85},"spec",[47,84499,12528],{"class":221},[47,84501,84502],{"class":85},"gift",[47,84504,79877],{"class":221},[47,84506,267],{"class":217},[47,84508,79882],{"class":221},[47,84510,84511],{"class":49,"line":33062},[47,84512,84513],{"class":279},"      \u002F\u002F 规格文字模块处理\n",[47,84515,84516,84518,84521,84523,84525,84527,84529,84531,84533,84535],{"class":49,"line":33068},[47,84517,58282],{"class":217},[47,84519,84520],{"class":85}," text",[47,84522,13657],{"class":217},[47,84524,81992],{"class":221},[47,84526,81995],{"class":53},[47,84528,81998],{"class":221},[47,84530,74277],{"class":53},[47,84532,222],{"class":221},[47,84534,82005],{"class":81},[47,84536,228],{"class":221},[47,84538,84539],{"class":49,"line":33074},[47,84540,84541],{"class":279},"      \u002F\u002F 处理赠品模块\n",[47,84543,84544,84546,84548,84550,84553,84555,84557,84559,84561,84564,84566,84568,84570,84572,84574,84577,84579,84582,84584,84586,84588,84590,84592,84594],{"class":49,"line":33085},[47,84545,58282],{"class":217},[47,84547,73973],{"class":85},[47,84549,13657],{"class":217},[47,84551,84552],{"class":221}," gift ",[47,84554,1205],{"class":217},[47,84556,83166],{"class":221},[47,84558,83169],{"class":53},[47,84560,222],{"class":221},[47,84562,84563],{"class":81},"','",[47,84565,30880],{"class":221},[47,84567,74098],{"class":53},[47,84569,222],{"class":221},[47,84571,79849],{"class":5309},[47,84573,79852],{"class":217},[47,84575,84576],{"class":81}," `\u003Cspan class=\"tag\">【赠品】${",[47,84578,79849],{"class":221},[47,84580,84581],{"class":81},"}\u003C\u002Fspan>`",[47,84583,30880],{"class":221},[47,84585,74277],{"class":53},[47,84587,222],{"class":221},[47,84589,74282],{"class":81},[47,84591,13807],{"class":221},[47,84593,1078],{"class":217},[47,84595,70158],{"class":81},[47,84597,84598],{"class":49,"line":33091},[47,84599,84600],{"class":279},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[47,84602,84603,84605,84608,84610,84613,84615,84617,84619,84622,84624,84626,84628,84631,84633,84635],{"class":49,"line":33097},[47,84604,58282],{"class":217},[47,84606,84607],{"class":85}," subtotal",[47,84609,13657],{"class":217},[47,84611,84612],{"class":221}," ((price ",[47,84614,674],{"class":217},[47,84616,5847],{"class":85},[47,84618,6611],{"class":217},[47,84620,84621],{"class":221}," count) ",[47,84623,803],{"class":217},[47,84625,5847],{"class":85},[47,84627,30880],{"class":221},[47,84629,84630],{"class":53},"toFixed",[47,84632,222],{"class":221},[47,84634,298],{"class":85},[47,84636,228],{"class":221},[47,84638,84639],{"class":49,"line":33107},[47,84640,2493],{"emptyLinePlaceholder":145},[47,84642,84643,84645],{"class":49,"line":33113},[47,84644,74036],{"class":217},[47,84646,70222],{"class":81},[47,84648,84649],{"class":49,"line":33124},[47,84650,84651],{"class":81},"        \u003Cdiv class=\"item\">\n",[47,84653,84654,84657,84659],{"class":49,"line":33130},[47,84655,84656],{"class":81},"          \u003Cimg src=\"${",[47,84658,79874],{"class":221},[47,84660,79906],{"class":81},[47,84662,84663,84666,84668,84671,84673],{"class":49,"line":33140},[47,84664,84665],{"class":81},"          \u003Cp class=\"name\">${",[47,84667,79864],{"class":221},[47,84669,84670],{"class":81},"}${",[47,84672,1393],{"class":221},[47,84674,79916],{"class":81},[47,84676,84677,84680,84682],{"class":49,"line":33145},[47,84678,84679],{"class":81},"          \u003Cp class=\"spec\">${",[47,84681,5280],{"class":221},[47,84683,79916],{"class":81},[47,84685,84686,84689,84691,84693,84695,84697,84699,84701],{"class":49,"line":33151},[47,84687,84688],{"class":81},"          \u003Cp class=\"price\">${",[47,84690,79869],{"class":221},[47,84692,777],{"class":81},[47,84694,84630],{"class":53},[47,84696,222],{"class":81},[47,84698,298],{"class":85},[47,84700,648],{"class":81},[47,84702,79916],{"class":81},[47,84704,84705,84708,84710],{"class":49,"line":33200},[47,84706,84707],{"class":81},"          \u003Cp class=\"count\">x${",[47,84709,84488],{"class":221},[47,84711,79916],{"class":81},[47,84713,84714,84717,84720],{"class":49,"line":33247},[47,84715,84716],{"class":81},"          \u003Cp class=\"sub-total\">${",[47,84718,84719],{"class":221},"subtotal",[47,84721,79916],{"class":81},[47,84723,84724],{"class":49,"line":33252},[47,84725,84726],{"class":81},"        \u003C\u002Fdiv> \n",[47,84728,84729],{"class":49,"line":33258},[47,84730,84731],{"class":81},"             `\n",[47,84733,84734,84737,84739,84741,84743],{"class":49,"line":33277},[47,84735,84736],{"class":221},"    }).",[47,84738,74277],{"class":53},[47,84740,222],{"class":221},[47,84742,74282],{"class":81},[47,84744,228],{"class":221},[47,84746,84747],{"class":49,"line":33283},[47,84748,84749],{"class":279},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[47,84751,84752,84754,84756,84758,84760,84763,84765,84768,84770,84772,84774,84777,84780,84782,84785,84787,84789,84791,84794,84796,84798,84800,84802],{"class":49,"line":33303},[47,84753,11314],{"class":217},[47,84755,62839],{"class":85},[47,84757,13657],{"class":217},[47,84759,80102],{"class":221},[47,84761,84762],{"class":53},"reduce",[47,84764,2469],{"class":221},[47,84766,84767],{"class":5309},"prev",[47,84769,12528],{"class":221},[47,84771,79849],{"class":5309},[47,84773,13807],{"class":221},[47,84775,84776],{"class":217},"=>",[47,84778,84779],{"class":221}," prev ",[47,84781,700],{"class":217},[47,84783,84784],{"class":221}," (item.price ",[47,84786,674],{"class":217},[47,84788,5847],{"class":85},[47,84790,6611],{"class":217},[47,84792,84793],{"class":221}," item.count) ",[47,84795,803],{"class":217},[47,84797,5847],{"class":85},[47,84799,12528],{"class":221},[47,84801,411],{"class":85},[47,84803,228],{"class":221},[47,84805,84806,84808,84810,84812,84815,84817,84819,84822,84824,84826,84828],{"class":49,"line":33309},[47,84807,52461],{"class":221},[47,84809,54453],{"class":53},[47,84811,222],{"class":221},[47,84813,84814],{"class":81},"'.amount'",[47,84816,74303],{"class":221},[47,84818,267],{"class":217},[47,84820,84821],{"class":221}," total.",[47,84823,84630],{"class":53},[47,84825,222],{"class":221},[47,84827,298],{"class":85},[47,84829,228],{"class":221},[47,84831,84832,84834,84836],{"class":49,"line":33315},[47,84833,52471],{"class":221},[47,84835,51867],{"class":51354},[47,84837,51361],{"class":221},[47,84839,84840,84842,84844],{"class":49,"line":33325},[47,84841,51839],{"class":221},[47,84843,51854],{"class":51354},[47,84845,51361],{"class":221},[47,84847,84848],{"class":49,"line":33330},[47,84849,2493],{"emptyLinePlaceholder":145},[47,84851,84852,84854,84856],{"class":49,"line":33336},[47,84853,51839],{"class":221},[47,84855,50689],{"class":51354},[47,84857,51361],{"class":221},[14,84859,84861],{"id":84860},"_411-编程思想","4.11 编程思想",[187,84863,84865],{"id":84864},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,84867,84868,84871],{},[369,84869,84870],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,84873,84874],{},"调用就可以了",[19,84876,84877],{},[1556,84878],{"alt":43,"src":84879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[187,84881,84883],{"id":84882},"_4112-面向对象","4.11.2 面向对象",[19,84885,84886],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,84888,84889],{},[1556,84890],{"alt":43,"src":84891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,84893,84894],{},"面向对象的特性：",[106,84896,84897,84900,84903],{},[109,84898,84899],{},"封装性",[109,84901,84902],{},"继承性",[109,84904,84905],{},"多态性",[187,84907,84909],{"id":84908},"_4113-两者比较","4.11.3 两者比较",[19,84911,84912],{},[1556,84913],{"alt":43,"src":84914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,84916,84918],{"id":84917},"_412-构造函数回顾","4.12 构造函数回顾",[19,84920,84921],{},[1556,84922],{"alt":43,"src":84923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,84925,84926],{},[1556,84927],{"alt":43,"src":84928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,84930,84931],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,84933,84934],{},[1556,84935],{"alt":43,"src":84936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,84938,84940],{"id":84939},"_413-原型","4.13 原型",[187,84942,84944],{"id":84943},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,84946,84947],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,84949,84950],{},[1556,84951],{"alt":43,"src":84952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,84954,84955],{},[1556,84956],{"alt":43,"src":84957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,84959,84960],{},"原型是构造函数的属性，它也是一个对象",[19,84962,84963],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,84965,84966],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[38,84968,84970],{"className":53121,"code":84969,"language":53123,"meta":43,"style":43},"\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",[26,84971,84972,84980,84985,84993,84998,85003,85008,85013,85018,85022,85026,85030,85035,85040,85044,85049,85054,85059,85064,85069,85073,85081],{"__ignoreMap":43},[47,84973,84974,84976,84978],{"class":49,"line":50},[47,84975,1129],{"class":221},[47,84977,51854],{"class":51354},[47,84979,51361],{"class":221},[47,84981,84982],{"class":49,"line":92},[47,84983,84984],{"class":279},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[47,84986,84987,84989,84991],{"class":49,"line":1273},[47,84988,52198],{"class":221},[47,84990,51867],{"class":51354},[47,84992,51361],{"class":221},[47,84994,84995],{"class":49,"line":1288},[47,84996,84997],{"class":221},"    function Star(uname, age) {\n",[47,84999,85000],{"class":49,"line":1294},[47,85001,85002],{"class":221},"      this.uname = uname,\n",[47,85004,85005],{"class":49,"line":1308},[47,85006,85007],{"class":221},"        this.age = age\n",[47,85009,85010],{"class":49,"line":1314},[47,85011,85012],{"class":221},"      \u002F\u002F this.sing = function () {\n",[47,85014,85015],{"class":49,"line":1405},[47,85016,85017],{"class":221},"      \u002F\u002F   console.log('唱歌')\n",[47,85019,85020],{"class":49,"line":1411},[47,85021,2493],{"emptyLinePlaceholder":145},[47,85023,85024],{"class":49,"line":1423},[47,85025,60091],{"class":221},[47,85027,85028],{"class":49,"line":1706},[47,85029,2280],{"class":221},[47,85031,85032],{"class":49,"line":1711},[47,85033,85034],{"class":221},"    Star.prototype.sing = function () {\n",[47,85036,85037],{"class":49,"line":1717},[47,85038,85039],{"class":221},"      console.log('唱歌')\n",[47,85041,85042],{"class":49,"line":1722},[47,85043,2280],{"class":221},[47,85045,85046],{"class":49,"line":1736},[47,85047,85048],{"class":221},"    \u002F\u002F console.dir(Star.prototype)\n",[47,85050,85051],{"class":49,"line":1741},[47,85052,85053],{"class":221},"    const pink = new Star('pink', 18)\n",[47,85055,85056],{"class":49,"line":1747},[47,85057,85058],{"class":221},"    const red = new Star('red', 20)\n",[47,85060,85061],{"class":49,"line":1768},[47,85062,85063],{"class":221},"    pink.sing()\n",[47,85065,85066],{"class":49,"line":1773},[47,85067,85068],{"class":221},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[47,85070,85071],{"class":49,"line":1787},[47,85072,2493],{"emptyLinePlaceholder":145},[47,85074,85075,85077,85079],{"class":49,"line":1792},[47,85076,52471],{"class":221},[47,85078,51867],{"class":51354},[47,85080,51361],{"class":221},[47,85082,85083,85085,85087],{"class":49,"line":1821},[47,85084,51839],{"class":221},[47,85086,51854],{"class":51354},[47,85088,51361],{"class":221},[19,85090,85091],{},[1556,85092],{"alt":43,"src":85093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[38,85095,85097],{"className":53121,"code":85096,"language":53123,"meta":43,"style":43},"\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",[26,85098,85099,85107,85115,85120,85125,85130,85135,85139,85144,85149,85154,85158,85163,85167,85171,85176,85180,85188],{"__ignoreMap":43},[47,85100,85101,85103,85105],{"class":49,"line":50},[47,85102,1129],{"class":221},[47,85104,51854],{"class":51354},[47,85106,51361],{"class":221},[47,85108,85109,85111,85113],{"class":49,"line":92},[47,85110,52198],{"class":221},[47,85112,51867],{"class":51354},[47,85114,51361],{"class":221},[47,85116,85117],{"class":49,"line":1273},[47,85118,85119],{"class":221},"    let that\n",[47,85121,85122],{"class":49,"line":1288},[47,85123,85124],{"class":221},"    function Star(uname) {\n",[47,85126,85127],{"class":49,"line":1294},[47,85128,85129],{"class":221},"      this.uname = uname\n",[47,85131,85132],{"class":49,"line":1308},[47,85133,85134],{"class":221},"      that = this\n",[47,85136,85137],{"class":49,"line":1314},[47,85138,2280],{"class":221},[47,85140,85141],{"class":49,"line":1405},[47,85142,85143],{"class":221},"    \u002F\u002F 实例对象是 ldh\n",[47,85145,85146],{"class":49,"line":1411},[47,85147,85148],{"class":221},"    const ldh = new Star('刘德华')\n",[47,85150,85151],{"class":49,"line":1423},[47,85152,85153],{"class":221},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[47,85155,85156],{"class":49,"line":1706},[47,85157,2493],{"emptyLinePlaceholder":145},[47,85159,85160],{"class":49,"line":1711},[47,85161,85162],{"class":221},"    Star.sing = function () {\n",[47,85164,85165],{"class":49,"line":1717},[47,85166,85039],{"class":221},[47,85168,85169],{"class":49,"line":1722},[47,85170,2280],{"class":221},[47,85172,85173],{"class":49,"line":1736},[47,85174,85175],{"class":221},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[47,85177,85178],{"class":49,"line":1741},[47,85179,2493],{"emptyLinePlaceholder":145},[47,85181,85182,85184,85186],{"class":49,"line":1747},[47,85183,52471],{"class":221},[47,85185,51867],{"class":51354},[47,85187,51361],{"class":221},[47,85189,85190,85192,85194],{"class":49,"line":1768},[47,85191,51839],{"class":221},[47,85193,51854],{"class":51354},[47,85195,51361],{"class":221},[19,85197,85198],{},"构造函数的this指向的是实例对象；",[19,85200,85201],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[187,85203,85205],{"id":85204},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,85207,85208],{},[1556,85209],{"alt":43,"src":85210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[38,85212,85214],{"className":53121,"code":85213,"language":53123,"meta":43,"style":43},"\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",[26,85215,85216,85224,85232,85237,85242,85247,85252,85257,85262,85267,85272,85277,85282,85286,85291,85296,85301,85306,85310,85315,85320,85325,85330,85334,85339,85344,85349,85354,85358,85363,85367,85375],{"__ignoreMap":43},[47,85217,85218,85220,85222],{"class":49,"line":50},[47,85219,1129],{"class":221},[47,85221,51854],{"class":51354},[47,85223,51361],{"class":221},[47,85225,85226,85228,85230],{"class":49,"line":92},[47,85227,52198],{"class":221},[47,85229,51867],{"class":51354},[47,85231,51361],{"class":221},[47,85233,85234],{"class":49,"line":1273},[47,85235,85236],{"class":221},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[47,85238,85239],{"class":49,"line":1288},[47,85240,85241],{"class":221},"    const arr = [1, 2, 3]\n",[47,85243,85244],{"class":49,"line":1294},[47,85245,85246],{"class":221},"    \u002F\u002F 自己定义数组的扩展方法\n",[47,85248,85249],{"class":49,"line":1308},[47,85250,85251],{"class":221},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[47,85253,85254],{"class":49,"line":1314},[47,85255,85256],{"class":221},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[47,85258,85259],{"class":49,"line":1405},[47,85260,85261],{"class":221},"    \u002F\u002F ①.最大值\n",[47,85263,85264],{"class":49,"line":1411},[47,85265,85266],{"class":221},"    Array.prototype.max = function () {\n",[47,85268,85269],{"class":49,"line":1423},[47,85270,85271],{"class":221},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[47,85273,85274],{"class":49,"line":1706},[47,85275,85276],{"class":221},"      return Math.max(...this)\n",[47,85278,85279],{"class":49,"line":1711},[47,85280,85281],{"class":221},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[47,85283,85284],{"class":49,"line":1717},[47,85285,2280],{"class":221},[47,85287,85288],{"class":49,"line":1722},[47,85289,85290],{"class":221},"    console.log(arr.max())\n",[47,85292,85293],{"class":49,"line":1736},[47,85294,85295],{"class":221},"    \u002F\u002F ②最小值\n",[47,85297,85298],{"class":49,"line":1741},[47,85299,85300],{"class":221},"    Array.prototype.min = function () {\n",[47,85302,85303],{"class":49,"line":1747},[47,85304,85305],{"class":221},"      return Math.min(...this)\n",[47,85307,85308],{"class":49,"line":1768},[47,85309,2280],{"class":221},[47,85311,85312],{"class":49,"line":1773},[47,85313,85314],{"class":221},"    console.log(arr.min())\n",[47,85316,85317],{"class":49,"line":1787},[47,85318,85319],{"class":221},"    \u002F\u002F③求和\n",[47,85321,85322],{"class":49,"line":1792},[47,85323,85324],{"class":221},"    Array.prototype.sum = function () {\n",[47,85326,85327],{"class":49,"line":1821},[47,85328,85329],{"class":221},"      return this.reduce((prev, current) => prev + current, 0)\n",[47,85331,85332],{"class":49,"line":1826},[47,85333,2280],{"class":221},[47,85335,85336],{"class":49,"line":1843},[47,85337,85338],{"class":221},"    console.log(arr.sum())\n",[47,85340,85341],{"class":49,"line":1848},[47,85342,85343],{"class":221},"    \u002F\u002F ③排序\n",[47,85345,85346],{"class":49,"line":1853},[47,85347,85348],{"class":221},"    Array.prototype.rever = function () {\n",[47,85350,85351],{"class":49,"line":1858},[47,85352,85353],{"class":221},"      return this.reverse()\n",[47,85355,85356],{"class":49,"line":1872},[47,85357,2280],{"class":221},[47,85359,85360],{"class":49,"line":1877},[47,85361,85362],{"class":221},"    console.log(arr.rever())\n",[47,85364,85365],{"class":49,"line":2670},[47,85366,2493],{"emptyLinePlaceholder":145},[47,85368,85369,85371,85373],{"class":49,"line":2684},[47,85370,52471],{"class":221},[47,85372,51867],{"class":51354},[47,85374,51361],{"class":221},[47,85376,85377,85379,85381],{"class":49,"line":2692},[47,85378,51839],{"class":221},[47,85380,51854],{"class":51354},[47,85382,51361],{"class":221},[19,85384,85385],{},[1556,85386],{"alt":43,"src":85387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[187,85389,85391],{"id":85390},"_4133-constructor-属性","4.13.3 constructor 属性",[19,85393,85394],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,85396,85397],{},[1556,85398],{"alt":43,"src":85399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[38,85401,85403],{"className":53121,"code":85402,"language":53123,"meta":43,"style":43},"\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",[26,85404,85405,85413,85421,85426,85431,85435,85440,85445,85450,85458],{"__ignoreMap":43},[47,85406,85407,85409,85411],{"class":49,"line":50},[47,85408,1129],{"class":221},[47,85410,51854],{"class":51354},[47,85412,51361],{"class":221},[47,85414,85415,85417,85419],{"class":49,"line":92},[47,85416,52198],{"class":221},[47,85418,51867],{"class":51354},[47,85420,51361],{"class":221},[47,85422,85423],{"class":49,"line":1273},[47,85424,85425],{"class":221},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[47,85427,85428],{"class":49,"line":1288},[47,85429,85430],{"class":221},"    function Star() {\n",[47,85432,85433],{"class":49,"line":1294},[47,85434,2280],{"class":221},[47,85436,85437],{"class":49,"line":1308},[47,85438,85439],{"class":221},"    const ldh = new Star()\n",[47,85441,85442],{"class":49,"line":1314},[47,85443,85444],{"class":221},"    console.log(Star.prototype)\n",[47,85446,85447],{"class":49,"line":1405},[47,85448,85449],{"class":221},"    console.log(Star.prototype.constructor === Star)\n",[47,85451,85452,85454,85456],{"class":49,"line":1411},[47,85453,52471],{"class":221},[47,85455,51867],{"class":51354},[47,85457,51361],{"class":221},[47,85459,85460,85462,85464],{"class":49,"line":1423},[47,85461,51839],{"class":221},[47,85463,51854],{"class":51354},[47,85465,51361],{"class":221},[19,85467,85468],{},[1556,85469],{"alt":43,"src":85470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,85472,85473],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[38,85475,85477],{"className":53121,"code":85476,"language":53123,"meta":43,"style":43},"  \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",[26,85478,85479,85487,85491,85495,85499,85504,85509,85514,85518,85523,85528,85533,85538,85543,85548,85552,85556,85561,85566,85571,85575,85580,85585,85589,85593,85597],{"__ignoreMap":43},[47,85480,85481,85483,85485],{"class":49,"line":50},[47,85482,52198],{"class":221},[47,85484,51867],{"class":51354},[47,85486,51361],{"class":221},[47,85488,85489],{"class":49,"line":92},[47,85490,85425],{"class":221},[47,85492,85493],{"class":49,"line":1273},[47,85494,85430],{"class":221},[47,85496,85497],{"class":49,"line":1288},[47,85498,2280],{"class":221},[47,85500,85501],{"class":49,"line":1294},[47,85502,85503],{"class":221},"    \u002F\u002F const ldh = new Star()\n",[47,85505,85506],{"class":49,"line":1308},[47,85507,85508],{"class":221},"    \u002F\u002F console.log(Star.prototype)\n",[47,85510,85511],{"class":49,"line":1314},[47,85512,85513],{"class":221},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[47,85515,85516],{"class":49,"line":1405},[47,85517,2493],{"emptyLinePlaceholder":145},[47,85519,85520],{"class":49,"line":1411},[47,85521,85522],{"class":221},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[47,85524,85525],{"class":49,"line":1423},[47,85526,85527],{"class":221},"    \u002F\u002F Star.prototype.sing = function () {\n",[47,85529,85530],{"class":49,"line":1706},[47,85531,85532],{"class":221},"    \u002F\u002F   console.log('唱歌')\n",[47,85534,85535],{"class":49,"line":1711},[47,85536,85537],{"class":221},"    \u002F\u002F }\n",[47,85539,85540],{"class":49,"line":1717},[47,85541,85542],{"class":221},"    \u002F\u002F Star.prototype.dance = function () {\n",[47,85544,85545],{"class":49,"line":1722},[47,85546,85547],{"class":221},"    \u002F\u002F   console.log('跳舞')\n",[47,85549,85550],{"class":49,"line":1736},[47,85551,85537],{"class":221},[47,85553,85554],{"class":49,"line":1741},[47,85555,85444],{"class":221},[47,85557,85558],{"class":49,"line":1747},[47,85559,85560],{"class":221},"    Star.prototype = {\n",[47,85562,85563],{"class":49,"line":1768},[47,85564,85565],{"class":221},"      sing: function () {\n",[47,85567,85568],{"class":49,"line":1773},[47,85569,85570],{"class":221},"        console.log('唱歌')\n",[47,85572,85573],{"class":49,"line":1787},[47,85574,77946],{"class":221},[47,85576,85577],{"class":49,"line":1792},[47,85578,85579],{"class":221},"      dance: function () {\n",[47,85581,85582],{"class":49,"line":1821},[47,85583,85584],{"class":221},"        console.log('跳舞')\n",[47,85586,85587],{"class":49,"line":1826},[47,85588,52452],{"class":221},[47,85590,85591],{"class":49,"line":1843},[47,85592,2280],{"class":221},[47,85594,85595],{"class":49,"line":1848},[47,85596,85444],{"class":221},[47,85598,85599,85601,85603],{"class":49,"line":1853},[47,85600,52471],{"class":221},[47,85602,51867],{"class":51354},[47,85604,51361],{"class":221},[19,85606,85607],{},"进行输出结果后会发现：",[19,85609,85610],{},[1556,85611],{"alt":43,"src":85612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,85614,85615],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,85617,85618],{},"所以，要重新指回创造这个原型对象的构造函数",[38,85620,85622],{"className":71267,"code":85621,"language":71269,"meta":43,"style":43},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[26,85623,85624,85638,85643,85648,85659,85672,85677,85688,85702,85706],{"__ignoreMap":43},[47,85625,85626,85629,85631,85634,85636],{"class":49,"line":50},[47,85627,85628],{"class":85},"Star",[47,85630,777],{"class":221},[47,85632,85633],{"class":85},"prototype",[47,85635,13657],{"class":217},[47,85637,15665],{"class":221},[47,85639,85640],{"class":49,"line":92},[47,85641,85642],{"class":279},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[47,85644,85645],{"class":49,"line":1273},[47,85646,85647],{"class":221},"  constructor: Star,\n",[47,85649,85650,85653,85655,85657],{"class":49,"line":1288},[47,85651,85652],{"class":53},"  sing",[47,85654,51491],{"class":221},[47,85656,54503],{"class":217},[47,85658,54506],{"class":221},[47,85660,85661,85663,85665,85667,85670],{"class":49,"line":1294},[47,85662,73807],{"class":221},[47,85664,58301],{"class":53},[47,85666,222],{"class":221},[47,85668,85669],{"class":81},"'唱歌'",[47,85671,228],{"class":221},[47,85673,85674],{"class":49,"line":1308},[47,85675,85676],{"class":221},"   },\n",[47,85678,85679,85682,85684,85686],{"class":49,"line":1314},[47,85680,85681],{"class":53},"   dance",[47,85683,51491],{"class":221},[47,85685,54503],{"class":217},[47,85687,54506],{"class":221},[47,85689,85690,85693,85695,85697,85700],{"class":49,"line":1405},[47,85691,85692],{"class":221},"     console.",[47,85694,58301],{"class":53},[47,85696,222],{"class":221},[47,85698,85699],{"class":81},"'跳舞'",[47,85701,228],{"class":221},[47,85703,85704],{"class":49,"line":1411},[47,85705,4402],{"class":221},[47,85707,85708],{"class":49,"line":1423},[47,85709,1659],{"class":221},[19,85711,85712],{},[1556,85713],{"alt":43,"src":85714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,85716,85717],{},"总结1：",[19,85719,85720],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,85722,85723],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,85725,85726],{},"constructor指的是他的来源",[19,85728,85729],{},[1556,85730],{"alt":43,"src":85731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,85733,85734],{},[1556,85735],{"alt":43,"src":85736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,85738,85739],{},"总结2：",[19,85741,85742],{},[1556,85743],{"alt":43,"src":85744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,85746,85747],{},[1556,85748],{"alt":43,"src":85749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,85751,85752],{},[1556,85753],{"alt":43,"src":85754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[187,85756,85758],{"id":85757},"_4134-对象原型","4.13.4 对象原型",[19,85760,85761],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,85763,85764],{},"对象原型就是__proto__这个属性",[19,85766,85767],{},[1556,85768],{"alt":43,"src":85769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,85771,85772],{},[1556,85773],{"alt":43,"src":85774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,85776,85777],{},[1556,85778],{"alt":43,"src":85779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,85781,85782],{},[1556,85783],{"alt":43,"src":85784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[38,85786,85788],{"className":53121,"code":85787,"language":53123,"meta":43,"style":43},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[26,85789,85790,85798,85806,85810,85814,85818,85823,85831],{"__ignoreMap":43},[47,85791,85792,85794,85796],{"class":49,"line":50},[47,85793,1129],{"class":221},[47,85795,51854],{"class":51354},[47,85797,51361],{"class":221},[47,85799,85800,85802,85804],{"class":49,"line":92},[47,85801,52198],{"class":221},[47,85803,51867],{"class":51354},[47,85805,51361],{"class":221},[47,85807,85808],{"class":49,"line":1273},[47,85809,85430],{"class":221},[47,85811,85812],{"class":49,"line":1288},[47,85813,2280],{"class":221},[47,85815,85816],{"class":49,"line":1294},[47,85817,85439],{"class":221},[47,85819,85820],{"class":49,"line":1308},[47,85821,85822],{"class":221},"    console.log(ldh)\n",[47,85824,85825,85827,85829],{"class":49,"line":1314},[47,85826,52471],{"class":221},[47,85828,51867],{"class":51354},[47,85830,51361],{"class":221},[47,85832,85833,85835,85837],{"class":49,"line":1405},[47,85834,51839],{"class":221},[47,85836,51854],{"class":51354},[47,85838,51361],{"class":221},[19,85840,85841],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,85843,85844],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,85846,85847],{},[1556,85848],{"alt":43,"src":85849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,85851,85852],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,85854,85855],{},"对象原型指向原型对象",[19,85857,85858],{},[1556,85859],{"alt":43,"src":85860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,85862,85863],{},[1556,85864],{"alt":43,"src":85865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,85867,85868],{},[1556,85869],{"alt":43,"src":85870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[187,85872,85874],{"id":85873},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,85876,85877],{},[1556,85878],{"alt":43,"src":85879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[171,85881,85882,85885,85888,85891],{},[109,85883,85884],{},"构造函数通过new的形式实例化得到实例对象",[109,85886,85887],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[109,85889,85890],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[109,85892,85893],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,85895,85896],{},[1556,85897],{"alt":43,"src":85898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,85900,85901],{},"题目梳理：",[19,85903,85904],{},[1556,85905],{"alt":43,"src":85906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[187,85908,85910],{"id":85909},"_4136-原型继承","4.13.6 原型继承",[19,85912,85913],{},[1556,85914],{"alt":43,"src":85915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,85917,85918],{},[1556,85919],{"alt":43,"src":85920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,85922,85923],{},[1556,85924],{"alt":43,"src":85925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,85927,85928],{},[1556,85929],{"alt":43,"src":85930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,85932,85933],{},[1556,85934],{"alt":43,"src":85935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,85937,85938],{},[1556,85939],{"alt":43,"src":85940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,85942,85943],{},[1556,85944],{"alt":43,"src":85945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,85947,85948],{},[1556,85949],{"alt":43,"src":85950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,85952,85953],{},"回顾：构造函数每次new得到对象都是不同的",[187,85955,85957],{"id":85956},"_4137-原型链","4.13.7 原型链",[19,85959,85960],{},[1556,85961],{"alt":43,"src":85962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,85964,85965],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,85967,85968],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,85970,85971],{},"大哥是Object",[19,85973,85974],{},[1556,85975],{"alt":43,"src":85976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,85978,85979],{},[1556,85980],{"alt":43,"src":85981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,85983,85984],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,85986,85987],{},"万物皆对象",[187,85989,85991],{"id":85990},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,85993,85994],{},"模态框",[19,85996,85997],{},"以后遇见这个效果直接使用这个就行",[19,85999,86000],{},[1556,86001],{"alt":43,"src":86002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,86004,86005],{},[1556,86006],{"alt":43,"src":86007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,86009,86010],{},[1556,86011],{"alt":43,"src":86012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,86014,86015],{},[1556,86016],{"alt":43,"src":86017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,86019,86020],{},"补充知识点：",[171,86022,86023],{},[109,86024,86025],{},"append()",[19,86027,86028],{},[1556,86029],{"alt":43,"src":86030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[38,86032,86034],{"className":50687,"code":86033,"language":50689,"meta":43,"style":43},"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",[26,86035,86036,86041,86046,86051,86055,86059,86063,86068,86073,86078,86082],{"__ignoreMap":43},[47,86037,86038],{"class":49,"line":50},[47,86039,86040],{"class":221},"append(param1)\n",[47,86042,86043],{"class":49,"line":92},[47,86044,86045],{"class":221},"append(param1, param2)\n",[47,86047,86048],{"class":49,"line":1273},[47,86049,86050],{"class":221},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[47,86052,86053],{"class":49,"line":1288},[47,86054,2493],{"emptyLinePlaceholder":145},[47,86056,86057],{"class":49,"line":1294},[47,86058,2493],{"emptyLinePlaceholder":145},[47,86060,86061],{"class":49,"line":1308},[47,86062,2493],{"emptyLinePlaceholder":145},[47,86064,86065],{"class":49,"line":1314},[47,86066,86067],{"class":221},"let div = document.createElement(\"div\");\n",[47,86069,86070],{"class":49,"line":1405},[47,86071,86072],{"class":221},"let p = document.createElement(\"p\");\n",[47,86074,86075],{"class":49,"line":1411},[47,86076,86077],{"class":221},"div.append(p);\n",[47,86079,86080],{"class":49,"line":1423},[47,86081,2493],{"emptyLinePlaceholder":145},[47,86083,86084,86087,86089],{"class":49,"line":1706},[47,86085,86086],{"class":221},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[47,86088,19],{"class":51354},[47,86090,86091],{"class":221},"> ]\n",[171,86093,86094],{"start":92},[109,86095,86096],{},"remove()",[19,86098,86099],{},"自己删自己",[19,86101,86102],{},[1556,86103],{"alt":43,"src":86104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[38,86106,86108],{"className":50687,"code":86107,"language":50689,"meta":43,"style":43},"\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",[26,86109,86110,86120,86134,86138,86146,86160,86180,86192,86200,86207,86219,86232,86267,86279,86290,86302,86314,86326,86353,86363,86367,86371,86380,86392,86406,86416,86428,86432,86436,86446,86457,86467,86477,86490,86503,86513,86517,86521,86530,86540,86552,86556,86560,86569,86579,86589,86601,86605,86609,86619,86635,86646,86656,86666,86678,86690,86702,86706,86710,86723,86734,86738,86746,86754,86758,86766,86786,86806,86814,86819,86845,86850,86855,86874,86879,86891,86896,86907,86917,86927,86932,86937,86941,86946,86951,86956,86976,86981,87001,87006,87020,87025,87030,87035,87051,87055,87060,87089,87094,87099,87104,87115,87119,87123,87127,87132,87157,87162,87187,87192,87201,87205,87210,87235,87239,87264,87268,87277,87281,87286,87304,87314,87318,87326,87334,87338],{"__ignoreMap":43},[47,86111,86112,86114,86116,86118],{"class":49,"line":50},[47,86113,51351],{"class":221},[47,86115,51355],{"class":51354},[47,86117,51358],{"class":53},[47,86119,51361],{"class":221},[47,86121,86122,86124,86126,86128,86130,86132],{"class":49,"line":92},[47,86123,1129],{"class":221},[47,86125,50689],{"class":51354},[47,86127,51370],{"class":53},[47,86129,267],{"class":221},[47,86131,51375],{"class":81},[47,86133,51361],{"class":221},[47,86135,86136],{"class":49,"line":1273},[47,86137,2493],{"emptyLinePlaceholder":145},[47,86139,86140,86142,86144],{"class":49,"line":1288},[47,86141,1129],{"class":221},[47,86143,51388],{"class":51354},[47,86145,51361],{"class":221},[47,86147,86148,86150,86152,86154,86156,86158],{"class":49,"line":1294},[47,86149,52198],{"class":221},[47,86151,51398],{"class":51354},[47,86153,51401],{"class":53},[47,86155,267],{"class":221},[47,86157,51406],{"class":81},[47,86159,51361],{"class":221},[47,86161,86162,86164,86166,86168,86170,86172,86174,86176,86178],{"class":49,"line":1308},[47,86163,52198],{"class":221},[47,86165,51398],{"class":51354},[47,86167,15013],{"class":53},[47,86169,267],{"class":221},[47,86171,51445],{"class":81},[47,86173,51425],{"class":53},[47,86175,267],{"class":221},[47,86177,51452],{"class":81},[47,86179,51361],{"class":221},[47,86181,86182,86184,86186,86188,86190],{"class":49,"line":1314},[47,86183,52198],{"class":221},[47,86185,51461],{"class":51354},[47,86187,51464],{"class":221},[47,86189,51461],{"class":51354},[47,86191,51361],{"class":221},[47,86193,86194,86196,86198],{"class":49,"line":1405},[47,86195,52198],{"class":221},[47,86197,134],{"class":51354},[47,86199,51361],{"class":221},[47,86201,86202,86205],{"class":49,"line":1411},[47,86203,86204],{"class":53},"    .modal",[47,86206,15665],{"class":221},[47,86208,86209,86211,86213,86215,86217],{"class":49,"line":1423},[47,86210,54825],{"class":85},[47,86212,51491],{"class":221},[47,86214,4066],{"class":85},[47,86216,51546],{"class":217},[47,86218,1384],{"class":221},[47,86220,86221,86224,86226,86228,86230],{"class":49,"line":1706},[47,86222,86223],{"class":85},"      min-height",[47,86225,51491],{"class":221},[47,86227,530],{"class":85},[47,86229,51546],{"class":217},[47,86231,1384],{"class":221},[47,86233,86234,86236,86238,86240,86242,86244,86246,86248,86250,86252,86254,86256,86258,86260,86262,86265],{"class":49,"line":1711},[47,86235,78804],{"class":85},[47,86237,51491],{"class":221},[47,86239,411],{"class":85},[47,86241,4186],{"class":85},[47,86243,2131],{"class":85},[47,86245,51546],{"class":217},[47,86247,78821],{"class":85},[47,86249,222],{"class":221},[47,86251,411],{"class":85},[47,86253,12528],{"class":221},[47,86255,411],{"class":85},[47,86257,12528],{"class":221},[47,86259,411],{"class":85},[47,86261,12528],{"class":221},[47,86263,86264],{"class":85},"0.1",[47,86266,2812],{"class":221},[47,86268,86269,86271,86273,86275,86277],{"class":49,"line":1717},[47,86270,55188],{"class":85},[47,86272,51491],{"class":221},[47,86274,512],{"class":85},[47,86276,51546],{"class":217},[47,86278,1384],{"class":221},[47,86280,86281,86283,86285,86288],{"class":49,"line":1722},[47,86282,54813],{"class":85},[47,86284,51491],{"class":221},[47,86286,86287],{"class":85},"fixed",[47,86289,1384],{"class":221},[47,86291,86292,86295,86297,86300],{"class":49,"line":1736},[47,86293,86294],{"class":85},"      z-index",[47,86296,51491],{"class":221},[47,86298,86299],{"class":85},"999",[47,86301,1384],{"class":221},[47,86303,86304,86306,86308,86310,86312],{"class":49,"line":1741},[47,86305,54892],{"class":85},[47,86307,51491],{"class":221},[47,86309,875],{"class":85},[47,86311,547],{"class":217},[47,86313,1384],{"class":221},[47,86315,86316,86318,86320,86322,86324],{"class":49,"line":1747},[47,86317,55001],{"class":85},[47,86319,51491],{"class":221},[47,86321,875],{"class":85},[47,86323,547],{"class":217},[47,86325,1384],{"class":221},[47,86327,86328,86330,86332,86334,86336,86339,86341,86343,86345,86347,86349,86351],{"class":49,"line":1768},[47,86329,78845],{"class":85},[47,86331,51491],{"class":221},[47,86333,78850],{"class":85},[47,86335,222],{"class":221},[47,86337,86338],{"class":85},"-50",[47,86340,547],{"class":217},[47,86342,12528],{"class":221},[47,86344,86338],{"class":85},[47,86346,547],{"class":217},[47,86348,12528],{"class":221},[47,86350,411],{"class":85},[47,86352,2812],{"class":221},[47,86354,86355,86357,86359,86361],{"class":49,"line":1773},[47,86356,54938],{"class":85},[47,86358,51491],{"class":221},[47,86360,60896],{"class":85},[47,86362,1384],{"class":221},[47,86364,86365],{"class":49,"line":1787},[47,86366,2280],{"class":221},[47,86368,86369],{"class":49,"line":1792},[47,86370,2493],{"emptyLinePlaceholder":145},[47,86372,86373,86375,86378],{"class":49,"line":1821},[47,86374,86204],{"class":53},[47,86376,86377],{"class":53}," .header",[47,86379,15665],{"class":221},[47,86381,86382,86384,86386,86388,86390],{"class":49,"line":1826},[47,86383,57413],{"class":85},[47,86385,51491],{"class":221},[47,86387,620],{"class":85},[47,86389,51546],{"class":217},[47,86391,1384],{"class":221},[47,86393,86394,86396,86398,86400,86402,86404],{"class":49,"line":1843},[47,86395,54749],{"class":85},[47,86397,51491],{"class":221},[47,86399,411],{"class":85},[47,86401,2131],{"class":85},[47,86403,51546],{"class":217},[47,86405,1384],{"class":221},[47,86407,86408,86410,86412,86414],{"class":49,"line":1848},[47,86409,54813],{"class":85},[47,86411,51491],{"class":221},[47,86413,54818],{"class":85},[47,86415,1384],{"class":221},[47,86417,86418,86420,86422,86424,86426],{"class":49,"line":1853},[47,86419,54976],{"class":85},[47,86421,51491],{"class":221},[47,86423,919],{"class":85},[47,86425,51546],{"class":217},[47,86427,1384],{"class":221},[47,86429,86430],{"class":49,"line":1858},[47,86431,2280],{"class":221},[47,86433,86434],{"class":49,"line":1872},[47,86435,2493],{"emptyLinePlaceholder":145},[47,86437,86438,86440,86442,86444],{"class":49,"line":1877},[47,86439,86204],{"class":53},[47,86441,86377],{"class":53},[47,86443,3125],{"class":51354},[47,86445,15665],{"class":221},[47,86447,86448,86451,86453,86455],{"class":49,"line":2670},[47,86449,86450],{"class":85},"      font-style",[47,86452,51491],{"class":221},[47,86454,63895],{"class":85},[47,86456,1384],{"class":221},[47,86458,86459,86461,86463,86465],{"class":49,"line":2684},[47,86460,57470],{"class":85},[47,86462,51491],{"class":221},[47,86464,62124],{"class":85},[47,86466,1384],{"class":221},[47,86468,86469,86471,86473,86475],{"class":49,"line":2692},[47,86470,54813],{"class":85},[47,86472,51491],{"class":221},[47,86474,54885],{"class":85},[47,86476,1384],{"class":221},[47,86478,86479,86482,86484,86486,86488],{"class":49,"line":2697},[47,86480,86481],{"class":85},"      right",[47,86483,51491],{"class":221},[47,86485,794],{"class":85},[47,86487,51546],{"class":217},[47,86489,1384],{"class":221},[47,86491,86492,86494,86496,86499,86501],{"class":49,"line":2703},[47,86493,55001],{"class":85},[47,86495,51491],{"class":221},[47,86497,86498],{"class":85},"-2",[47,86500,51546],{"class":217},[47,86502,1384],{"class":221},[47,86504,86505,86507,86509,86511],{"class":49,"line":2709},[47,86506,62079],{"class":85},[47,86508,51491],{"class":221},[47,86510,62084],{"class":85},[47,86512,1384],{"class":221},[47,86514,86515],{"class":49,"line":2714},[47,86516,2280],{"class":221},[47,86518,86519],{"class":49,"line":8041},[47,86520,2493],{"emptyLinePlaceholder":145},[47,86522,86523,86525,86528],{"class":49,"line":8065},[47,86524,86204],{"class":53},[47,86526,86527],{"class":53}," .body",[47,86529,15665],{"class":221},[47,86531,86532,86534,86536,86538],{"class":49,"line":8070},[47,86533,57340],{"class":85},[47,86535,51491],{"class":221},[47,86537,51646],{"class":85},[47,86539,1384],{"class":221},[47,86541,86542,86544,86546,86548,86550],{"class":49,"line":8076},[47,86543,54749],{"class":85},[47,86545,51491],{"class":221},[47,86547,665],{"class":85},[47,86549,51546],{"class":217},[47,86551,1384],{"class":221},[47,86553,86554],{"class":49,"line":8103},[47,86555,2280],{"class":221},[47,86557,86558],{"class":49,"line":8108},[47,86559,2493],{"emptyLinePlaceholder":145},[47,86561,86562,86564,86567],{"class":49,"line":8114},[47,86563,86204],{"class":53},[47,86565,86566],{"class":53}," .footer",[47,86568,15665],{"class":221},[47,86570,86571,86573,86575,86577],{"class":49,"line":8126},[47,86572,55063],{"class":85},[47,86574,51491],{"class":221},[47,86576,51531],{"class":85},[47,86578,1384],{"class":221},[47,86580,86581,86583,86585,86587],{"class":49,"line":8138},[47,86582,55074],{"class":85},[47,86584,51491],{"class":221},[47,86586,51634],{"class":85},[47,86588,1384],{"class":221},[47,86590,86591,86593,86595,86597,86599],{"class":49,"line":8150},[47,86592,54749],{"class":85},[47,86594,51491],{"class":221},[47,86596,665],{"class":85},[47,86598,51546],{"class":217},[47,86600,1384],{"class":221},[47,86602,86603],{"class":49,"line":9809},[47,86604,2280],{"class":221},[47,86606,86607],{"class":49,"line":9834},[47,86608,2493],{"emptyLinePlaceholder":145},[47,86610,86611,86613,86615,86617],{"class":49,"line":9857},[47,86612,86204],{"class":53},[47,86614,86566],{"class":53},[47,86616,1492],{"class":51354},[47,86618,15665],{"class":221},[47,86620,86621,86623,86625,86627,86629,86631,86633],{"class":49,"line":9881},[47,86622,54749],{"class":85},[47,86624,51491],{"class":221},[47,86626,292],{"class":85},[47,86628,51546],{"class":217},[47,86630,2176],{"class":85},[47,86632,51546],{"class":217},[47,86634,1384],{"class":221},[47,86636,86637,86639,86641,86644],{"class":49,"line":9886},[47,86638,61775],{"class":85},[47,86640,51491],{"class":221},[47,86642,86643],{"class":85},"#ccc",[47,86645,1384],{"class":221},[47,86647,86648,86650,86652,86654],{"class":49,"line":9891},[47,86649,64024],{"class":85},[47,86651,51491],{"class":221},[47,86653,54791],{"class":85},[47,86655,1384],{"class":221},[47,86657,86658,86660,86662,86664],{"class":49,"line":9896},[47,86659,57470],{"class":85},[47,86661,51491],{"class":221},[47,86663,60896],{"class":85},[47,86665,1384],{"class":221},[47,86667,86668,86670,86672,86674,86676],{"class":49,"line":9905},[47,86669,55188],{"class":85},[47,86671,51491],{"class":221},[47,86673,298],{"class":85},[47,86675,51546],{"class":217},[47,86677,1384],{"class":221},[47,86679,86680,86682,86684,86686,86688],{"class":49,"line":9910},[47,86681,61804],{"class":85},[47,86683,51491],{"class":221},[47,86685,665],{"class":85},[47,86687,51546],{"class":217},[47,86689,1384],{"class":221},[47,86691,86692,86694,86696,86698,86700],{"class":49,"line":9916},[47,86693,54976],{"class":85},[47,86695,51491],{"class":221},[47,86697,768],{"class":85},[47,86699,51546],{"class":217},[47,86701,1384],{"class":221},[47,86703,86704],{"class":49,"line":9937},[47,86705,2280],{"class":221},[47,86707,86708],{"class":49,"line":9943},[47,86709,2493],{"emptyLinePlaceholder":145},[47,86711,86712,86714,86716,86718,86721],{"class":49,"line":9957},[47,86713,86204],{"class":53},[47,86715,86566],{"class":53},[47,86717,1492],{"class":51354},[47,86719,86720],{"class":53},".submit",[47,86722,15665],{"class":221},[47,86724,86725,86727,86729,86732],{"class":49,"line":9963},[47,86726,54938],{"class":85},[47,86728,51491],{"class":221},[47,86730,86731],{"class":85},"#369",[47,86733,1384],{"class":221},[47,86735,86736],{"class":49,"line":9990},[47,86737,2280],{"class":221},[47,86739,86740,86742,86744],{"class":49,"line":9999},[47,86741,52471],{"class":221},[47,86743,134],{"class":51354},[47,86745,51361],{"class":221},[47,86747,86748,86750,86752],{"class":49,"line":10005},[47,86749,51839],{"class":221},[47,86751,51388],{"class":51354},[47,86753,51361],{"class":221},[47,86755,86756],{"class":49,"line":10013},[47,86757,2493],{"emptyLinePlaceholder":145},[47,86759,86760,86762,86764],{"class":49,"line":10018},[47,86761,1129],{"class":221},[47,86763,51854],{"class":51354},[47,86765,51361],{"class":221},[47,86767,86768,86770,86772,86774,86776,86779,86782,86784],{"class":49,"line":16697},[47,86769,52198],{"class":221},[47,86771,53941],{"class":51354},[47,86773,15052],{"class":53},[47,86775,267],{"class":221},[47,86777,86778],{"class":81},"\"delete\"",[47,86780,86781],{"class":221},">删除\u003C\u002F",[47,86783,53941],{"class":51354},[47,86785,51361],{"class":221},[47,86787,86788,86790,86792,86794,86796,86799,86802,86804],{"class":49,"line":16703},[47,86789,52198],{"class":221},[47,86791,53941],{"class":51354},[47,86793,15052],{"class":53},[47,86795,267],{"class":221},[47,86797,86798],{"class":81},"\"login\"",[47,86800,86801],{"class":221},">登录\u003C\u002F",[47,86803,53941],{"class":51354},[47,86805,51361],{"class":221},[47,86807,86808,86810,86812],{"class":49,"line":16726},[47,86809,52198],{"class":221},[47,86811,51867],{"class":51354},[47,86813,51361],{"class":221},[47,86815,86816],{"class":49,"line":16732},[47,86817,86818],{"class":279},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[47,86820,86821,86823,86826,86828,86830,86832,86834,86836,86839,86841,86843],{"class":49,"line":16755},[47,86822,70138],{"class":217},[47,86824,86825],{"class":53}," Modal",[47,86827,222],{"class":221},[47,86829,51461],{"class":5309},[47,86831,13657],{"class":217},[47,86833,69984],{"class":81},[47,86835,12528],{"class":221},[47,86837,86838],{"class":5309},"message",[47,86840,13657],{"class":217},[47,86842,69984],{"class":81},[47,86844,12535],{"class":221},[47,86846,86847],{"class":49,"line":16769},[47,86848,86849],{"class":279},"      \u002F\u002F 创建Model 模态框盒子\n",[47,86851,86852],{"class":49,"line":16789},[47,86853,86854],{"class":279},"      \u002F\u002F 1.1 创建div标签\n",[47,86856,86857,86859,86862,86864,86866,86868,86870,86872],{"class":49,"line":16795},[47,86858,70105],{"class":85},[47,86860,86861],{"class":221},".modalBox ",[47,86863,267],{"class":217},[47,86865,54450],{"class":221},[47,86867,70205],{"class":53},[47,86869,222],{"class":221},[47,86871,81985],{"class":81},[47,86873,228],{"class":221},[47,86875,86876],{"class":49,"line":16806},[47,86877,86878],{"class":279},"      \u002F\u002F 1.2 给div 添加类名为model\n",[47,86880,86881,86883,86886,86888],{"class":49,"line":16829},[47,86882,70105],{"class":85},[47,86884,86885],{"class":221},".modalBox.className ",[47,86887,267],{"class":217},[47,86889,86890],{"class":81}," 'modal'\n",[47,86892,86893],{"class":49,"line":16851},[47,86894,86895],{"class":279},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[47,86897,86898,86900,86903,86905],{"class":49,"line":16856},[47,86899,70105],{"class":85},[47,86901,86902],{"class":221},".modalBox.innerHTML ",[47,86904,267],{"class":217},[47,86906,70222],{"class":81},[47,86908,86909,86912,86914],{"class":49,"line":16862},[47,86910,86911],{"class":81},"        \u003Cdiv class=\"header\">${",[47,86913,51461],{"class":221},[47,86915,86916],{"class":81},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[47,86918,86919,86922,86924],{"class":49,"line":16876},[47,86920,86921],{"class":81},"        \u003Cdiv class=\"body\">${",[47,86923,86838],{"class":221},[47,86925,86926],{"class":81},"}\u003C\u002Fdiv>\n",[47,86928,86929],{"class":49,"line":16889},[47,86930,86931],{"class":81},"      `\n",[47,86933,86934],{"class":49,"line":16894},[47,86935,86936],{"class":279},"      \u002F\u002F console.log(this.modalBox)\n",[47,86938,86939],{"class":49,"line":16908},[47,86940,2280],{"class":221},[47,86942,86943],{"class":49,"line":16913},[47,86944,86945],{"class":279},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[47,86947,86948],{"class":49,"line":16919},[47,86949,86950],{"class":279},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[47,86952,86953],{"class":49,"line":16924},[47,86954,86955],{"class":279},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[47,86957,86958,86961,86963,86965,86967,86970,86972,86974],{"class":49,"line":16938},[47,86959,86960],{"class":85},"    Modal",[47,86962,777],{"class":221},[47,86964,85633],{"class":85},[47,86966,777],{"class":221},[47,86968,86969],{"class":53},"open",[47,86971,13657],{"class":217},[47,86973,58972],{"class":217},[47,86975,54506],{"class":221},[47,86977,86978],{"class":49,"line":16943},[47,86979,86980],{"class":279},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[47,86982,86983,86985,86988,86990,86992,86994,86996,86999],{"class":49,"line":16948},[47,86984,58282],{"class":217},[47,86986,86987],{"class":85}," box",[47,86989,13657],{"class":217},[47,86991,54450],{"class":221},[47,86993,54453],{"class":53},[47,86995,222],{"class":221},[47,86997,86998],{"class":81},"'.modal'",[47,87000,228],{"class":221},[47,87002,87003],{"class":49,"line":16962},[47,87004,87005],{"class":279},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[47,87007,87008,87011,87013,87016,87018],{"class":49,"line":16974},[47,87009,87010],{"class":221},"      box ",[47,87012,1809],{"class":217},[47,87014,87015],{"class":221}," box.",[47,87017,57060],{"class":53},[47,87019,2069],{"class":221},[47,87021,87022],{"class":49,"line":16979},[47,87023,87024],{"class":279},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[47,87026,87027],{"class":49,"line":16992},[47,87028,87029],{"class":279},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[47,87031,87032],{"class":49,"line":16997},[47,87033,87034],{"class":279},"      \u002F\u002F append可以增加对象\n",[47,87036,87037,87040,87043,87045,87048],{"class":49,"line":17002},[47,87038,87039],{"class":221},"      document.body.",[47,87041,87042],{"class":53},"append",[47,87044,222],{"class":221},[47,87046,87047],{"class":85},"this",[47,87049,87050],{"class":221},".modalBox)\n",[47,87052,87053],{"class":49,"line":17007},[47,87054,2493],{"emptyLinePlaceholder":145},[47,87056,87057],{"class":49,"line":17020},[47,87058,87059],{"class":279},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[47,87061,87062,87064,87067,87069,87071,87074,87076,87078,87080,87082,87085,87087],{"class":49,"line":17025},[47,87063,70105],{"class":85},[47,87065,87066],{"class":221},".modalBox.",[47,87068,54453],{"class":53},[47,87070,222],{"class":221},[47,87072,87073],{"class":81},"'i'",[47,87075,30880],{"class":221},[47,87077,57867],{"class":53},[47,87079,222],{"class":221},[47,87081,57872],{"class":81},[47,87083,87084],{"class":221},", () ",[47,87086,84776],{"class":217},[47,87088,15665],{"class":221},[47,87090,87091],{"class":49,"line":32687},[47,87092,87093],{"class":279},"        \u002F\u002F 这个地方需要用到箭头函数\n",[47,87095,87096],{"class":49,"line":32693},[47,87097,87098],{"class":279},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[47,87100,87101],{"class":49,"line":32699},[47,87102,87103],{"class":279},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[47,87105,87106,87108,87110,87113],{"class":49,"line":32705},[47,87107,64780],{"class":85},[47,87109,777],{"class":221},[47,87111,87112],{"class":53},"close",[47,87114,2069],{"class":221},[47,87116,87117],{"class":49,"line":32711},[47,87118,64869],{"class":221},[47,87120,87121],{"class":49,"line":32722},[47,87122,2280],{"class":221},[47,87124,87125],{"class":49,"line":32728},[47,87126,2493],{"emptyLinePlaceholder":145},[47,87128,87129],{"class":49,"line":32748},[47,87130,87131],{"class":279},"    \u002F\u002F 测试一下 点击 删除按钮\n",[47,87133,87134,87136,87138,87140,87143,87145,87147,87149,87151,87153,87155],{"class":49,"line":32754},[47,87135,52461],{"class":221},[47,87137,54453],{"class":53},[47,87139,222],{"class":221},[47,87141,87142],{"class":81},"'#delete'",[47,87144,30880],{"class":221},[47,87146,57867],{"class":53},[47,87148,222],{"class":221},[47,87150,57872],{"class":81},[47,87152,87084],{"class":221},[47,87154,84776],{"class":217},[47,87156,15665],{"class":221},[47,87158,87159],{"class":49,"line":32765},[47,87160,87161],{"class":279},"      \u002F\u002F 先调用Model构造函数\n",[47,87163,87164,87166,87169,87171,87173,87175,87177,87180,87182,87185],{"class":49,"line":32771},[47,87165,58282],{"class":217},[47,87167,87168],{"class":85}," del",[47,87170,13657],{"class":217},[47,87172,11671],{"class":217},[47,87174,86825],{"class":53},[47,87176,222],{"class":221},[47,87178,87179],{"class":81},"'温馨的提示'",[47,87181,12528],{"class":221},[47,87183,87184],{"class":81},"'您没有删除权限操作'",[47,87186,228],{"class":221},[47,87188,87189],{"class":49,"line":32777},[47,87190,87191],{"class":279},"      \u002F\u002F 实例对象调用open方法\n",[47,87193,87194,87197,87199],{"class":49,"line":32783},[47,87195,87196],{"class":221},"      del.",[47,87198,86969],{"class":53},[47,87200,2069],{"class":221},[47,87202,87203],{"class":49,"line":32789},[47,87204,33515],{"class":221},[47,87206,87207],{"class":49,"line":32795},[47,87208,87209],{"class":279},"    \u002F\u002F 测试一下 点击 登录按钮\n",[47,87211,87212,87214,87216,87218,87221,87223,87225,87227,87229,87231,87233],{"class":49,"line":32801},[47,87213,52461],{"class":221},[47,87215,54453],{"class":53},[47,87217,222],{"class":221},[47,87219,87220],{"class":81},"'#login'",[47,87222,30880],{"class":221},[47,87224,57867],{"class":53},[47,87226,222],{"class":221},[47,87228,57872],{"class":81},[47,87230,87084],{"class":221},[47,87232,84776],{"class":217},[47,87234,15665],{"class":221},[47,87236,87237],{"class":49,"line":32807},[47,87238,87161],{"class":279},[47,87240,87241,87243,87246,87248,87250,87252,87254,87257,87259,87262],{"class":49,"line":32827},[47,87242,58282],{"class":217},[47,87244,87245],{"class":85}," log",[47,87247,13657],{"class":217},[47,87249,11671],{"class":217},[47,87251,86825],{"class":53},[47,87253,222],{"class":221},[47,87255,87256],{"class":81},"'友情提示'",[47,87258,12528],{"class":221},[47,87260,87261],{"class":81},"'您还没有登录呢'",[47,87263,228],{"class":221},[47,87265,87266],{"class":49,"line":32833},[47,87267,87191],{"class":279},[47,87269,87270,87273,87275],{"class":49,"line":32849},[47,87271,87272],{"class":221},"      log.",[47,87274,86969],{"class":53},[47,87276,2069],{"class":221},[47,87278,87279],{"class":49,"line":32855},[47,87280,33515],{"class":221},[47,87282,87283],{"class":49,"line":32869},[47,87284,87285],{"class":279},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[47,87287,87288,87290,87292,87294,87296,87298,87300,87302],{"class":49,"line":32875},[47,87289,86960],{"class":85},[47,87291,777],{"class":221},[47,87293,85633],{"class":85},[47,87295,777],{"class":221},[47,87297,87112],{"class":53},[47,87299,13657],{"class":217},[47,87301,58972],{"class":217},[47,87303,54506],{"class":221},[47,87305,87306,87308,87310,87312],{"class":49,"line":32890},[47,87307,70105],{"class":85},[47,87309,87066],{"class":221},[47,87311,57060],{"class":53},[47,87313,2069],{"class":221},[47,87315,87316],{"class":49,"line":32896},[47,87317,2280],{"class":221},[47,87319,87320,87322,87324],{"class":49,"line":32905},[47,87321,52471],{"class":221},[47,87323,51867],{"class":51354},[47,87325,51361],{"class":221},[47,87327,87328,87330,87332],{"class":49,"line":32911},[47,87329,51839],{"class":221},[47,87331,51854],{"class":51354},[47,87333,51361],{"class":221},[47,87335,87336],{"class":49,"line":32920},[47,87337,2493],{"emptyLinePlaceholder":145},[47,87339,87340,87342,87344],{"class":49,"line":32926},[47,87341,51839],{"class":221},[47,87343,50689],{"class":51354},[47,87345,51361],{"class":221},[19,87347,87348],{},[1556,87349],{"alt":43,"src":87350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,87352,87354],{"id":87353},"_414-深浅拷贝","4.14 深浅拷贝",[187,87356,87358],{"id":87357},"_4141-浅拷贝","4.14.1 浅拷贝",[19,87360,87361],{},[1556,87362],{"alt":43,"src":87363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,87365,87366],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,87368,87369],{},[1556,87370],{"alt":43,"src":87371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,87373,87374],{},[1556,87375],{"alt":43,"src":87376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,87378,87379],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,87381,87382],{},[1556,87383],{"alt":43,"src":87384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,87386,11425],{},[19,87388,87389],{},[1556,87390],{"alt":43,"src":87391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[187,87393,87395],{"id":87394},"_4142-深拷贝","4.14.2 深拷贝",[19,87397,87398],{},"深拷贝：拷贝的是对象，不是地址",[19,87400,87401],{},"常用的三种方法：",[171,87403,87404,87407,87410],{},[109,87405,87406],{},"通过递归实现深拷贝",[109,87408,87409],{},"lodash\u002FcloneDeep",[109,87411,87412],{},"通过JSON.stringify()实现",[22091,87414,87416],{"id":87415},"_41421-递归函数","4.14.2.1 递归函数",[19,87418,87419],{},[1556,87420],{"alt":43,"src":87421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[171,87423,87424],{},[109,87425,87426],{},"死递归占溢出：",[38,87428,87430],{"className":53121,"code":87429,"language":53123,"meta":43,"style":43},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[26,87431,87432,87440,87448,87452,87457,87461,87466,87474],{"__ignoreMap":43},[47,87433,87434,87436,87438],{"class":49,"line":50},[47,87435,1129],{"class":221},[47,87437,51854],{"class":51354},[47,87439,51361],{"class":221},[47,87441,87442,87444,87446],{"class":49,"line":92},[47,87443,52198],{"class":221},[47,87445,51867],{"class":51354},[47,87447,51361],{"class":221},[47,87449,87450],{"class":49,"line":1273},[47,87451,77197],{"class":221},[47,87453,87454],{"class":49,"line":1288},[47,87455,87456],{"class":221},"      fn()\n",[47,87458,87459],{"class":49,"line":1294},[47,87460,2280],{"class":221},[47,87462,87463],{"class":49,"line":1308},[47,87464,87465],{"class":221},"    fn()\n",[47,87467,87468,87470,87472],{"class":49,"line":1314},[47,87469,52471],{"class":221},[47,87471,51867],{"class":51354},[47,87473,51361],{"class":221},[47,87475,87476,87478,87480],{"class":49,"line":1405},[47,87477,51839],{"class":221},[47,87479,51854],{"class":51354},[47,87481,51361],{"class":221},[171,87483,87484],{"start":92},[109,87485,87486],{},"递归函数要加判断条件：",[19,87488,87489],{},[1556,87490],{"alt":43,"src":87491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[171,87493,87494],{"start":1273},[109,87495,87496],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[38,87498,87500],{"className":50687,"code":87499,"language":50689,"meta":43,"style":43},"\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",[26,87501,87502,87512,87526,87530,87538,87552,87572,87584,87592,87596,87604,87616,87624,87632,87657,87669,87673,87680,87688,87696,87700],{"__ignoreMap":43},[47,87503,87504,87506,87508,87510],{"class":49,"line":50},[47,87505,51351],{"class":221},[47,87507,51355],{"class":51354},[47,87509,51358],{"class":53},[47,87511,51361],{"class":221},[47,87513,87514,87516,87518,87520,87522,87524],{"class":49,"line":92},[47,87515,1129],{"class":221},[47,87517,50689],{"class":51354},[47,87519,51370],{"class":53},[47,87521,267],{"class":221},[47,87523,51375],{"class":81},[47,87525,51361],{"class":221},[47,87527,87528],{"class":49,"line":1273},[47,87529,2493],{"emptyLinePlaceholder":145},[47,87531,87532,87534,87536],{"class":49,"line":1288},[47,87533,1129],{"class":221},[47,87535,51388],{"class":51354},[47,87537,51361],{"class":221},[47,87539,87540,87542,87544,87546,87548,87550],{"class":49,"line":1294},[47,87541,52198],{"class":221},[47,87543,51398],{"class":51354},[47,87545,51401],{"class":53},[47,87547,267],{"class":221},[47,87549,51406],{"class":81},[47,87551,51361],{"class":221},[47,87553,87554,87556,87558,87560,87562,87564,87566,87568,87570],{"class":49,"line":1308},[47,87555,52198],{"class":221},[47,87557,51398],{"class":51354},[47,87559,15013],{"class":53},[47,87561,267],{"class":221},[47,87563,51445],{"class":81},[47,87565,51425],{"class":53},[47,87567,267],{"class":221},[47,87569,51452],{"class":81},[47,87571,51361],{"class":221},[47,87573,87574,87576,87578,87580,87582],{"class":49,"line":1314},[47,87575,52198],{"class":221},[47,87577,51461],{"class":51354},[47,87579,51464],{"class":221},[47,87581,51461],{"class":51354},[47,87583,51361],{"class":221},[47,87585,87586,87588,87590],{"class":49,"line":1405},[47,87587,51839],{"class":221},[47,87589,51388],{"class":51354},[47,87591,51361],{"class":221},[47,87593,87594],{"class":49,"line":1411},[47,87595,2493],{"emptyLinePlaceholder":145},[47,87597,87598,87600,87602],{"class":49,"line":1423},[47,87599,1129],{"class":221},[47,87601,51854],{"class":51354},[47,87603,51361],{"class":221},[47,87605,87606,87608,87610,87612,87614],{"class":49,"line":1706},[47,87607,52198],{"class":221},[47,87609,51665],{"class":51354},[47,87611,55368],{"class":221},[47,87613,51665],{"class":51354},[47,87615,51361],{"class":221},[47,87617,87618,87620,87622],{"class":49,"line":1711},[47,87619,52198],{"class":221},[47,87621,51867],{"class":51354},[47,87623,51361],{"class":221},[47,87625,87626,87628,87630],{"class":49,"line":1717},[47,87627,70138],{"class":217},[47,87629,73827],{"class":53},[47,87631,10946],{"class":221},[47,87633,87634,87636,87638,87640,87642,87644,87646,87648,87650,87652,87655],{"class":49,"line":1722},[47,87635,55825],{"class":221},[47,87637,54453],{"class":53},[47,87639,222],{"class":221},[47,87641,81985],{"class":81},[47,87643,74303],{"class":221},[47,87645,267],{"class":217},[47,87647,11671],{"class":217},[47,87649,73843],{"class":53},[47,87651,17354],{"class":221},[47,87653,87654],{"class":53},"toLocaleString",[47,87656,2069],{"class":221},[47,87658,87659,87662,87665,87667],{"class":49,"line":1736},[47,87660,87661],{"class":53},"      setTimeout",[47,87663,87664],{"class":221},"(getTime, ",[47,87666,6503],{"class":85},[47,87668,228],{"class":221},[47,87670,87671],{"class":49,"line":1741},[47,87672,2280],{"class":221},[47,87674,87675,87678],{"class":49,"line":1747},[47,87676,87677],{"class":53},"    getTime",[47,87679,2069],{"class":221},[47,87681,87682,87684,87686],{"class":49,"line":1768},[47,87683,52471],{"class":221},[47,87685,51867],{"class":51354},[47,87687,51361],{"class":221},[47,87689,87690,87692,87694],{"class":49,"line":1773},[47,87691,51839],{"class":221},[47,87693,51854],{"class":51354},[47,87695,51361],{"class":221},[47,87697,87698],{"class":49,"line":1787},[47,87699,2493],{"emptyLinePlaceholder":145},[47,87701,87702,87704,87706],{"class":49,"line":1792},[47,87703,51839],{"class":221},[47,87705,50689],{"class":51354},[47,87707,51361],{"class":221},[19,87709,87710],{},[1556,87711],{"alt":43,"src":87712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[171,87714,87715],{"start":1288},[109,87716,87406],{},[19,87718,87719],{},[1556,87720],{"alt":43,"src":87721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,87723,87724],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,87726,39243],{},[19,87728,87729],{},"这个是简易版的递归函数深拷贝",[19,87731,87732],{},"一定要注意先数组再对象，因为万物皆可对象",[38,87734,87736],{"className":50687,"code":87735,"language":50689,"meta":43,"style":43},"\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",[26,87737,87738,87748,87762,87766,87774,87788,87808,87820,87828,87832,87840,87848,87858,87867,87875,87891,87895,87903,87907,87911,87923,87928,87947,87963,87968,87973,87978,87993,87998,88003,88012,88020,88037,88045,88051,88059,88064,88069,88078,88082,88086,88090,88101,88110,88120,88134,88144,88152,88160,88168,88172],{"__ignoreMap":43},[47,87739,87740,87742,87744,87746],{"class":49,"line":50},[47,87741,51351],{"class":221},[47,87743,51355],{"class":51354},[47,87745,51358],{"class":53},[47,87747,51361],{"class":221},[47,87749,87750,87752,87754,87756,87758,87760],{"class":49,"line":92},[47,87751,1129],{"class":221},[47,87753,50689],{"class":51354},[47,87755,51370],{"class":53},[47,87757,267],{"class":221},[47,87759,51375],{"class":81},[47,87761,51361],{"class":221},[47,87763,87764],{"class":49,"line":1273},[47,87765,2493],{"emptyLinePlaceholder":145},[47,87767,87768,87770,87772],{"class":49,"line":1288},[47,87769,1129],{"class":221},[47,87771,51388],{"class":51354},[47,87773,51361],{"class":221},[47,87775,87776,87778,87780,87782,87784,87786],{"class":49,"line":1294},[47,87777,52198],{"class":221},[47,87779,51398],{"class":51354},[47,87781,51401],{"class":53},[47,87783,267],{"class":221},[47,87785,51406],{"class":81},[47,87787,51361],{"class":221},[47,87789,87790,87792,87794,87796,87798,87800,87802,87804,87806],{"class":49,"line":1308},[47,87791,52198],{"class":221},[47,87793,51398],{"class":51354},[47,87795,15013],{"class":53},[47,87797,267],{"class":221},[47,87799,51445],{"class":81},[47,87801,51425],{"class":53},[47,87803,267],{"class":221},[47,87805,51452],{"class":81},[47,87807,51361],{"class":221},[47,87809,87810,87812,87814,87816,87818],{"class":49,"line":1314},[47,87811,52198],{"class":221},[47,87813,51461],{"class":51354},[47,87815,51464],{"class":221},[47,87817,51461],{"class":51354},[47,87819,51361],{"class":221},[47,87821,87822,87824,87826],{"class":49,"line":1405},[47,87823,51839],{"class":221},[47,87825,51388],{"class":51354},[47,87827,51361],{"class":221},[47,87829,87830],{"class":49,"line":1411},[47,87831,2493],{"emptyLinePlaceholder":145},[47,87833,87834,87836,87838],{"class":49,"line":1423},[47,87835,1129],{"class":221},[47,87837,51854],{"class":51354},[47,87839,51361],{"class":221},[47,87841,87842,87844,87846],{"class":49,"line":1706},[47,87843,52198],{"class":221},[47,87845,51867],{"class":51354},[47,87847,51361],{"class":221},[47,87849,87850,87852,87854,87856],{"class":49,"line":1711},[47,87851,11314],{"class":217},[47,87853,70025],{"class":85},[47,87855,13657],{"class":217},[47,87857,15665],{"class":221},[47,87859,87860,87862,87865],{"class":49,"line":1717},[47,87861,71670],{"class":221},[47,87863,87864],{"class":81},"'pink'",[47,87866,31520],{"class":221},[47,87868,87869,87871,87873],{"class":49,"line":1722},[47,87870,71680],{"class":221},[47,87872,869],{"class":85},[47,87874,31520],{"class":221},[47,87876,87877,87880,87883,87885,87888],{"class":49,"line":1736},[47,87878,87879],{"class":221},"      hobby: [",[47,87881,87882],{"class":81},"'乒乓球'",[47,87884,12528],{"class":221},[47,87886,87887],{"class":81},"'足球'",[47,87889,87890],{"class":221},"],\n",[47,87892,87893],{"class":49,"line":1741},[47,87894,77926],{"class":221},[47,87896,87897,87900],{"class":49,"line":1747},[47,87898,87899],{"class":221},"        baby: ",[47,87901,87902],{"class":81},"'小pink'\n",[47,87904,87905],{"class":49,"line":1768},[47,87906,52452],{"class":221},[47,87908,87909],{"class":49,"line":1773},[47,87910,2280],{"class":221},[47,87912,87913,87915,87918,87920],{"class":49,"line":1787},[47,87914,11314],{"class":217},[47,87916,87917],{"class":85}," o",[47,87919,13657],{"class":217},[47,87921,87922],{"class":221}," {}\n",[47,87924,87925],{"class":49,"line":1792},[47,87926,87927],{"class":279},"    \u002F\u002F 拷贝函数\n",[47,87929,87930,87932,87935,87937,87940,87942,87945],{"class":49,"line":1821},[47,87931,70138],{"class":217},[47,87933,87934],{"class":53}," deepCopy",[47,87936,222],{"class":221},[47,87938,87939],{"class":5309},"newObj",[47,87941,12528],{"class":221},[47,87943,87944],{"class":5309},"oldObj",[47,87946,12535],{"class":221},[47,87948,87949,87951,87953,87955,87958,87960],{"class":49,"line":1826},[47,87950,52338],{"class":217},[47,87952,1752],{"class":221},[47,87954,51901],{"class":217},[47,87956,87957],{"class":221}," k ",[47,87959,26097],{"class":217},[47,87961,87962],{"class":221}," oldObj) {\n",[47,87964,87965],{"class":49,"line":1843},[47,87966,87967],{"class":279},"        \u002F\u002F 处理数组的问题\n",[47,87969,87970],{"class":49,"line":1848},[47,87971,87972],{"class":279},"        \u002F\u002F 判断是否属于数组\n",[47,87974,87975],{"class":49,"line":1853},[47,87976,87977],{"class":279},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[47,87979,87980,87982,87985,87988,87991],{"class":49,"line":1858},[47,87981,2590],{"class":217},[47,87983,87984],{"class":221}," (oldObj[k] ",[47,87986,87987],{"class":217},"instanceof",[47,87989,87990],{"class":53}," Array",[47,87992,12535],{"class":221},[47,87994,87995],{"class":49,"line":1872},[47,87996,87997],{"class":279},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[47,87999,88000],{"class":49,"line":1877},[47,88001,88002],{"class":279},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[47,88004,88005,88008,88010],{"class":49,"line":2670},[47,88006,88007],{"class":221},"          newObj[k] ",[47,88009,267],{"class":217},[47,88011,51892],{"class":221},[47,88013,88014,88017],{"class":49,"line":2684},[47,88015,88016],{"class":53},"          deepCopy",[47,88018,88019],{"class":221},"(newObj[k], oldObj[k])\n",[47,88021,88022,88024,88026,88028,88030,88032,88035],{"class":49,"line":2692},[47,88023,80134],{"class":221},[47,88025,1795],{"class":217},[47,88027,1798],{"class":217},[47,88029,87984],{"class":221},[47,88031,87987],{"class":217},[47,88033,88034],{"class":53}," Object",[47,88036,12535],{"class":221},[47,88038,88039,88041,88043],{"class":49,"line":2697},[47,88040,88007],{"class":221},[47,88042,267],{"class":217},[47,88044,87922],{"class":221},[47,88046,88047,88049],{"class":49,"line":2703},[47,88048,88016],{"class":53},[47,88050,88019],{"class":221},[47,88052,88053,88055,88057],{"class":49,"line":2709},[47,88054,80134],{"class":221},[47,88056,1795],{"class":217},[47,88058,15665],{"class":221},[47,88060,88061],{"class":49,"line":2714},[47,88062,88063],{"class":279},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[47,88065,88066],{"class":49,"line":8041},[47,88067,88068],{"class":279},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[47,88070,88071,88073,88075],{"class":49,"line":8065},[47,88072,88007],{"class":221},[47,88074,267],{"class":217},[47,88076,88077],{"class":221}," oldObj[k]\n",[47,88079,88080],{"class":49,"line":8070},[47,88081,2622],{"class":221},[47,88083,88084],{"class":49,"line":8076},[47,88085,52452],{"class":221},[47,88087,88088],{"class":49,"line":8103},[47,88089,2280],{"class":221},[47,88091,88092,88095,88098],{"class":49,"line":8108},[47,88093,88094],{"class":53},"    deepCopy",[47,88096,88097],{"class":221},"(o, obj) ",[47,88099,88100],{"class":279},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[47,88102,88103,88105,88107],{"class":49,"line":8114},[47,88104,73807],{"class":221},[47,88106,58301],{"class":53},[47,88108,88109],{"class":221},"(o)\n",[47,88111,88112,88115,88117],{"class":49,"line":8126},[47,88113,88114],{"class":221},"    o.age ",[47,88116,267],{"class":217},[47,88118,88119],{"class":85}," 20\n",[47,88121,88122,88125,88127,88129,88131],{"class":49,"line":8138},[47,88123,88124],{"class":221},"    o.hobby[",[47,88126,411],{"class":85},[47,88128,4536],{"class":221},[47,88130,267],{"class":217},[47,88132,88133],{"class":81}," '篮球'\n",[47,88135,88136,88139,88141],{"class":49,"line":8150},[47,88137,88138],{"class":221},"    o.family ",[47,88140,267],{"class":217},[47,88142,88143],{"class":81}," '老pink'\n",[47,88145,88146,88148,88150],{"class":49,"line":9809},[47,88147,73807],{"class":221},[47,88149,58301],{"class":53},[47,88151,70090],{"class":221},[47,88153,88154,88156,88158],{"class":49,"line":9834},[47,88155,52471],{"class":221},[47,88157,51867],{"class":51354},[47,88159,51361],{"class":221},[47,88161,88162,88164,88166],{"class":49,"line":9857},[47,88163,51839],{"class":221},[47,88165,51854],{"class":51354},[47,88167,51361],{"class":221},[47,88169,88170],{"class":49,"line":9881},[47,88171,2493],{"emptyLinePlaceholder":145},[47,88173,88174,88176,88178],{"class":49,"line":9886},[47,88175,51839],{"class":221},[47,88177,50689],{"class":51354},[47,88179,51361],{"class":221},[19,88181,88182],{},[1556,88183],{"alt":43,"src":88184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22091,88186,88188,88189],{"id":88187},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[369,88190,88191],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,88193,88194],{},[457,88195,88196],{"href":88196,"rel":88197},"https:\u002F\u002Fwww.lodashjs.com\u002F",[23956],[19,88199,88200],{},"lodash里边的方法都要加上一个下划线_",[19,88202,88203],{},"_.cloneDeep()",[38,88205,88207],{"className":50687,"code":88206,"language":50689,"meta":43,"style":43},"\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",[26,88208,88209,88219,88233,88237,88245,88259,88279,88291,88299,88303,88311,88316,88335,88343,88353,88361,88369,88381,88385,88391,88395,88399,88415,88423,88432,88440,88448,88456,88460],{"__ignoreMap":43},[47,88210,88211,88213,88215,88217],{"class":49,"line":50},[47,88212,51351],{"class":221},[47,88214,51355],{"class":51354},[47,88216,51358],{"class":53},[47,88218,51361],{"class":221},[47,88220,88221,88223,88225,88227,88229,88231],{"class":49,"line":92},[47,88222,1129],{"class":221},[47,88224,50689],{"class":51354},[47,88226,51370],{"class":53},[47,88228,267],{"class":221},[47,88230,51375],{"class":81},[47,88232,51361],{"class":221},[47,88234,88235],{"class":49,"line":1273},[47,88236,2493],{"emptyLinePlaceholder":145},[47,88238,88239,88241,88243],{"class":49,"line":1288},[47,88240,1129],{"class":221},[47,88242,51388],{"class":51354},[47,88244,51361],{"class":221},[47,88246,88247,88249,88251,88253,88255,88257],{"class":49,"line":1294},[47,88248,52198],{"class":221},[47,88250,51398],{"class":51354},[47,88252,51401],{"class":53},[47,88254,267],{"class":221},[47,88256,51406],{"class":81},[47,88258,51361],{"class":221},[47,88260,88261,88263,88265,88267,88269,88271,88273,88275,88277],{"class":49,"line":1308},[47,88262,52198],{"class":221},[47,88264,51398],{"class":51354},[47,88266,15013],{"class":53},[47,88268,267],{"class":221},[47,88270,51445],{"class":81},[47,88272,51425],{"class":53},[47,88274,267],{"class":221},[47,88276,51452],{"class":81},[47,88278,51361],{"class":221},[47,88280,88281,88283,88285,88287,88289],{"class":49,"line":1314},[47,88282,52198],{"class":221},[47,88284,51461],{"class":51354},[47,88286,51464],{"class":221},[47,88288,51461],{"class":51354},[47,88290,51361],{"class":221},[47,88292,88293,88295,88297],{"class":49,"line":1405},[47,88294,51839],{"class":221},[47,88296,51388],{"class":51354},[47,88298,51361],{"class":221},[47,88300,88301],{"class":49,"line":1411},[47,88302,2493],{"emptyLinePlaceholder":145},[47,88304,88305,88307,88309],{"class":49,"line":1423},[47,88306,1129],{"class":221},[47,88308,51854],{"class":51354},[47,88310,51361],{"class":221},[47,88312,88313],{"class":49,"line":1706},[47,88314,88315],{"class":279},"  \u003C!-- 先引用这个库 -->\n",[47,88317,88318,88320,88322,88324,88326,88329,88331,88333],{"class":49,"line":1711},[47,88319,52198],{"class":221},[47,88321,51867],{"class":51354},[47,88323,55293],{"class":53},[47,88325,267],{"class":221},[47,88327,88328],{"class":81},"\"lodash.min.js\"",[47,88330,55368],{"class":221},[47,88332,51867],{"class":51354},[47,88334,51361],{"class":221},[47,88336,88337,88339,88341],{"class":49,"line":1717},[47,88338,52198],{"class":221},[47,88340,51867],{"class":51354},[47,88342,51361],{"class":221},[47,88344,88345,88347,88349,88351],{"class":49,"line":1722},[47,88346,11314],{"class":217},[47,88348,70025],{"class":85},[47,88350,13657],{"class":217},[47,88352,15665],{"class":221},[47,88354,88355,88357,88359],{"class":49,"line":1736},[47,88356,71670],{"class":221},[47,88358,87864],{"class":81},[47,88360,31520],{"class":221},[47,88362,88363,88365,88367],{"class":49,"line":1741},[47,88364,71680],{"class":221},[47,88366,869],{"class":85},[47,88368,31520],{"class":221},[47,88370,88371,88373,88375,88377,88379],{"class":49,"line":1747},[47,88372,87879],{"class":221},[47,88374,87882],{"class":81},[47,88376,12528],{"class":221},[47,88378,87887],{"class":81},[47,88380,87890],{"class":221},[47,88382,88383],{"class":49,"line":1768},[47,88384,77926],{"class":221},[47,88386,88387,88389],{"class":49,"line":1773},[47,88388,87899],{"class":221},[47,88390,87902],{"class":81},[47,88392,88393],{"class":49,"line":1787},[47,88394,52452],{"class":221},[47,88396,88397],{"class":49,"line":1792},[47,88398,2280],{"class":221},[47,88400,88401,88403,88405,88407,88410,88413],{"class":49,"line":1821},[47,88402,11314],{"class":217},[47,88404,87917],{"class":85},[47,88406,13657],{"class":217},[47,88408,88409],{"class":221}," _.",[47,88411,88412],{"class":53},"cloneDeep",[47,88414,70090],{"class":221},[47,88416,88417,88419,88421],{"class":49,"line":1826},[47,88418,73807],{"class":221},[47,88420,58301],{"class":53},[47,88422,88109],{"class":221},[47,88424,88425,88428,88430],{"class":49,"line":1843},[47,88426,88427],{"class":221},"    o.family.baby ",[47,88429,267],{"class":217},[47,88431,88143],{"class":81},[47,88433,88434,88436,88438],{"class":49,"line":1848},[47,88435,73807],{"class":221},[47,88437,58301],{"class":53},[47,88439,70090],{"class":221},[47,88441,88442,88444,88446],{"class":49,"line":1853},[47,88443,52471],{"class":221},[47,88445,51867],{"class":51354},[47,88447,51361],{"class":221},[47,88449,88450,88452,88454],{"class":49,"line":1858},[47,88451,51839],{"class":221},[47,88453,51854],{"class":51354},[47,88455,51361],{"class":221},[47,88457,88458],{"class":49,"line":1872},[47,88459,2493],{"emptyLinePlaceholder":145},[47,88461,88462,88464,88466],{"class":49,"line":1877},[47,88463,51839],{"class":221},[47,88465,50689],{"class":51354},[47,88467,51361],{"class":221},[19,88469,88470],{},[1556,88471],{"alt":43,"src":88472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22091,88474,88476],{"id":88475},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[38,88478,88480],{"className":50687,"code":88479,"language":50689,"meta":43,"style":43},"\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",[26,88481,88482,88492,88506,88510,88518,88532,88552,88564,88572,88576,88584,88592,88602,88610,88618,88630,88634,88640,88644,88648,88653,88658,88663,88689,88697,88706,88714,88722,88730,88734],{"__ignoreMap":43},[47,88483,88484,88486,88488,88490],{"class":49,"line":50},[47,88485,51351],{"class":221},[47,88487,51355],{"class":51354},[47,88489,51358],{"class":53},[47,88491,51361],{"class":221},[47,88493,88494,88496,88498,88500,88502,88504],{"class":49,"line":92},[47,88495,1129],{"class":221},[47,88497,50689],{"class":51354},[47,88499,51370],{"class":53},[47,88501,267],{"class":221},[47,88503,51375],{"class":81},[47,88505,51361],{"class":221},[47,88507,88508],{"class":49,"line":1273},[47,88509,2493],{"emptyLinePlaceholder":145},[47,88511,88512,88514,88516],{"class":49,"line":1288},[47,88513,1129],{"class":221},[47,88515,51388],{"class":51354},[47,88517,51361],{"class":221},[47,88519,88520,88522,88524,88526,88528,88530],{"class":49,"line":1294},[47,88521,52198],{"class":221},[47,88523,51398],{"class":51354},[47,88525,51401],{"class":53},[47,88527,267],{"class":221},[47,88529,51406],{"class":81},[47,88531,51361],{"class":221},[47,88533,88534,88536,88538,88540,88542,88544,88546,88548,88550],{"class":49,"line":1308},[47,88535,52198],{"class":221},[47,88537,51398],{"class":51354},[47,88539,15013],{"class":53},[47,88541,267],{"class":221},[47,88543,51445],{"class":81},[47,88545,51425],{"class":53},[47,88547,267],{"class":221},[47,88549,51452],{"class":81},[47,88551,51361],{"class":221},[47,88553,88554,88556,88558,88560,88562],{"class":49,"line":1314},[47,88555,52198],{"class":221},[47,88557,51461],{"class":51354},[47,88559,51464],{"class":221},[47,88561,51461],{"class":51354},[47,88563,51361],{"class":221},[47,88565,88566,88568,88570],{"class":49,"line":1405},[47,88567,51839],{"class":221},[47,88569,51388],{"class":51354},[47,88571,51361],{"class":221},[47,88573,88574],{"class":49,"line":1411},[47,88575,2493],{"emptyLinePlaceholder":145},[47,88577,88578,88580,88582],{"class":49,"line":1423},[47,88579,1129],{"class":221},[47,88581,51854],{"class":51354},[47,88583,51361],{"class":221},[47,88585,88586,88588,88590],{"class":49,"line":1706},[47,88587,52198],{"class":221},[47,88589,51867],{"class":51354},[47,88591,51361],{"class":221},[47,88593,88594,88596,88598,88600],{"class":49,"line":1711},[47,88595,11314],{"class":217},[47,88597,70025],{"class":85},[47,88599,13657],{"class":217},[47,88601,15665],{"class":221},[47,88603,88604,88606,88608],{"class":49,"line":1717},[47,88605,71670],{"class":221},[47,88607,87864],{"class":81},[47,88609,31520],{"class":221},[47,88611,88612,88614,88616],{"class":49,"line":1722},[47,88613,71680],{"class":221},[47,88615,869],{"class":85},[47,88617,31520],{"class":221},[47,88619,88620,88622,88624,88626,88628],{"class":49,"line":1736},[47,88621,87879],{"class":221},[47,88623,87882],{"class":81},[47,88625,12528],{"class":221},[47,88627,87887],{"class":81},[47,88629,87890],{"class":221},[47,88631,88632],{"class":49,"line":1741},[47,88633,77926],{"class":221},[47,88635,88636,88638],{"class":49,"line":1747},[47,88637,87899],{"class":221},[47,88639,87902],{"class":81},[47,88641,88642],{"class":49,"line":1768},[47,88643,52452],{"class":221},[47,88645,88646],{"class":49,"line":1773},[47,88647,2280],{"class":221},[47,88649,88650],{"class":49,"line":1787},[47,88651,88652],{"class":279},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[47,88654,88655],{"class":49,"line":1792},[47,88656,88657],{"class":279},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[47,88659,88660],{"class":49,"line":1821},[47,88661,88662],{"class":279},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[47,88664,88665,88667,88669,88671,88674,88676,88679,88681,88683,88685,88687],{"class":49,"line":1826},[47,88666,11314],{"class":217},[47,88668,87917],{"class":85},[47,88670,13657],{"class":217},[47,88672,88673],{"class":85}," JSON",[47,88675,777],{"class":221},[47,88677,88678],{"class":53},"parse",[47,88680,222],{"class":221},[47,88682,71718],{"class":85},[47,88684,777],{"class":221},[47,88686,71723],{"class":53},[47,88688,71726],{"class":221},[47,88690,88691,88693,88695],{"class":49,"line":1843},[47,88692,73807],{"class":221},[47,88694,58301],{"class":53},[47,88696,88109],{"class":221},[47,88698,88699,88701,88703],{"class":49,"line":1848},[47,88700,88427],{"class":221},[47,88702,267],{"class":217},[47,88704,88705],{"class":81}," '123'\n",[47,88707,88708,88710,88712],{"class":49,"line":1853},[47,88709,73807],{"class":221},[47,88711,58301],{"class":53},[47,88713,70090],{"class":221},[47,88715,88716,88718,88720],{"class":49,"line":1858},[47,88717,52471],{"class":221},[47,88719,51867],{"class":51354},[47,88721,51361],{"class":221},[47,88723,88724,88726,88728],{"class":49,"line":1872},[47,88725,51839],{"class":221},[47,88727,51854],{"class":51354},[47,88729,51361],{"class":221},[47,88731,88732],{"class":49,"line":1877},[47,88733,2493],{"emptyLinePlaceholder":145},[47,88735,88736,88738,88740],{"class":49,"line":2670},[47,88737,51839],{"class":221},[47,88739,50689],{"class":51354},[47,88741,51361],{"class":221},[19,88743,88744],{},[1556,88745],{"alt":43,"src":88746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,88748,88750],{"id":88749},"_415-异常处理","4.15 异常处理",[171,88752,88753],{},[109,88754,88755],{},"throw抛异常",[19,88757,88758],{},[1556,88759],{"alt":43,"src":88760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[171,88762,88763],{"start":92},[109,88764,88765],{},"try\u002Fcatch 捕获错误信息",[19,88767,88768],{},[1556,88769],{"alt":43,"src":88770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[38,88772,88774],{"className":50687,"code":88773,"language":50689,"meta":43,"style":43},"\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",[26,88775,88776,88786,88800,88804,88812,88826,88846,88858,88866,88870,88878,88890,88898,88907,88914,88919,88938,88947,88958,88963,88973,88978,88983,88988,89005,89009,89014,89021,89033,89037,89049,89053,89057,89062,89067,89074,89082,89090,89094],{"__ignoreMap":43},[47,88777,88778,88780,88782,88784],{"class":49,"line":50},[47,88779,51351],{"class":221},[47,88781,51355],{"class":51354},[47,88783,51358],{"class":53},[47,88785,51361],{"class":221},[47,88787,88788,88790,88792,88794,88796,88798],{"class":49,"line":92},[47,88789,1129],{"class":221},[47,88791,50689],{"class":51354},[47,88793,51370],{"class":53},[47,88795,267],{"class":221},[47,88797,51375],{"class":81},[47,88799,51361],{"class":221},[47,88801,88802],{"class":49,"line":1273},[47,88803,2493],{"emptyLinePlaceholder":145},[47,88805,88806,88808,88810],{"class":49,"line":1288},[47,88807,1129],{"class":221},[47,88809,51388],{"class":51354},[47,88811,51361],{"class":221},[47,88813,88814,88816,88818,88820,88822,88824],{"class":49,"line":1294},[47,88815,52198],{"class":221},[47,88817,51398],{"class":51354},[47,88819,51401],{"class":53},[47,88821,267],{"class":221},[47,88823,51406],{"class":81},[47,88825,51361],{"class":221},[47,88827,88828,88830,88832,88834,88836,88838,88840,88842,88844],{"class":49,"line":1308},[47,88829,52198],{"class":221},[47,88831,51398],{"class":51354},[47,88833,15013],{"class":53},[47,88835,267],{"class":221},[47,88837,51445],{"class":81},[47,88839,51425],{"class":53},[47,88841,267],{"class":221},[47,88843,51452],{"class":81},[47,88845,51361],{"class":221},[47,88847,88848,88850,88852,88854,88856],{"class":49,"line":1314},[47,88849,52198],{"class":221},[47,88851,51461],{"class":51354},[47,88853,51464],{"class":221},[47,88855,51461],{"class":51354},[47,88857,51361],{"class":221},[47,88859,88860,88862,88864],{"class":49,"line":1405},[47,88861,51839],{"class":221},[47,88863,51388],{"class":51354},[47,88865,51361],{"class":221},[47,88867,88868],{"class":49,"line":1411},[47,88869,2493],{"emptyLinePlaceholder":145},[47,88871,88872,88874,88876],{"class":49,"line":1423},[47,88873,1129],{"class":221},[47,88875,51854],{"class":51354},[47,88877,51361],{"class":221},[47,88879,88880,88882,88884,88886,88888],{"class":49,"line":1706},[47,88881,52198],{"class":221},[47,88883,19],{"class":51354},[47,88885,53548],{"class":221},[47,88887,19],{"class":51354},[47,88889,51361],{"class":221},[47,88891,88892,88894,88896],{"class":49,"line":1711},[47,88893,52198],{"class":221},[47,88895,51867],{"class":51354},[47,88897,51361],{"class":221},[47,88899,88900,88902,88905],{"class":49,"line":1717},[47,88901,70138],{"class":217},[47,88903,88904],{"class":53}," fn",[47,88906,10946],{"class":221},[47,88908,88909,88912],{"class":49,"line":1722},[47,88910,88911],{"class":217},"      try",[47,88913,15665],{"class":221},[47,88915,88916],{"class":49,"line":1736},[47,88917,88918],{"class":279},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[47,88920,88921,88923,88925,88927,88929,88931,88933,88936],{"class":49,"line":1741},[47,88922,61324],{"class":217},[47,88924,6918],{"class":85},[47,88926,13657],{"class":217},[47,88928,54450],{"class":221},[47,88930,54453],{"class":53},[47,88932,222],{"class":221},[47,88934,88935],{"class":81},"'.p'",[47,88937,228],{"class":221},[47,88939,88940,88943,88945],{"class":49,"line":1747},[47,88941,88942],{"class":221},"        p.style.color ",[47,88944,267],{"class":217},[47,88946,67105],{"class":81},[47,88948,88949,88952,88955],{"class":49,"line":1768},[47,88950,88951],{"class":221},"      } ",[47,88953,88954],{"class":217},"catch",[47,88956,88957],{"class":221}," (err) {\n",[47,88959,88960],{"class":49,"line":1773},[47,88961,88962],{"class":279},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[47,88964,88965,88968,88970],{"class":49,"line":1787},[47,88966,88967],{"class":221},"        console.",[47,88969,58301],{"class":53},[47,88971,88972],{"class":221},"(err.message)\n",[47,88974,88975],{"class":49,"line":1792},[47,88976,88977],{"class":279},"        \u002F\u002F 想要中断程序，需要加return\n",[47,88979,88980],{"class":49,"line":1821},[47,88981,88982],{"class":279},"        \u002F\u002F return\n",[47,88984,88985],{"class":49,"line":1826},[47,88986,88987],{"class":279},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[47,88989,88990,88993,88995,88998,89000,89003],{"class":49,"line":1843},[47,88991,88992],{"class":217},"        throw",[47,88994,11671],{"class":217},[47,88996,88997],{"class":53}," Error",[47,88999,222],{"class":221},[47,89001,89002],{"class":81},"'你看看，选择器错误了吧'",[47,89004,228],{"class":221},[47,89006,89007],{"class":49,"line":1848},[47,89008,52452],{"class":221},[47,89010,89011],{"class":49,"line":1853},[47,89012,89013],{"class":279},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[47,89015,89016,89019],{"class":49,"line":1858},[47,89017,89018],{"class":217},"      finally",[47,89020,15665],{"class":221},[47,89022,89023,89026,89028,89031],{"class":49,"line":1872},[47,89024,89025],{"class":53},"        alert",[47,89027,222],{"class":221},[47,89029,89030],{"class":81},"'弹出对话框'",[47,89032,228],{"class":221},[47,89034,89035],{"class":49,"line":1877},[47,89036,52452],{"class":221},[47,89038,89039,89041,89043,89045,89047],{"class":49,"line":2670},[47,89040,58298],{"class":221},[47,89042,58301],{"class":53},[47,89044,222],{"class":221},[47,89046,691],{"class":85},[47,89048,228],{"class":221},[47,89050,89051],{"class":49,"line":2684},[47,89052,2493],{"emptyLinePlaceholder":145},[47,89054,89055],{"class":49,"line":2692},[47,89056,2280],{"class":221},[47,89058,89059],{"class":49,"line":2697},[47,89060,89061],{"class":279},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[47,89063,89064],{"class":49,"line":2703},[47,89065,89066],{"class":279},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[47,89068,89069,89072],{"class":49,"line":2709},[47,89070,89071],{"class":53},"    fn",[47,89073,2069],{"class":221},[47,89075,89076,89078,89080],{"class":49,"line":2714},[47,89077,52471],{"class":221},[47,89079,51867],{"class":51354},[47,89081,51361],{"class":221},[47,89083,89084,89086,89088],{"class":49,"line":8041},[47,89085,51839],{"class":221},[47,89087,51854],{"class":51354},[47,89089,51361],{"class":221},[47,89091,89092],{"class":49,"line":8065},[47,89093,2493],{"emptyLinePlaceholder":145},[47,89095,89096,89098,89100],{"class":49,"line":8070},[47,89097,51839],{"class":221},[47,89099,50689],{"class":51354},[47,89101,51361],{"class":221},[19,89103,89104],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[171,89106,89107],{"start":1273},[109,89108,89109],{},"debugger",[19,89111,89112],{},[1556,89113],{"alt":43,"src":89114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,89116,89117],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,89119,89121],{"id":89120},"_416-处理this","4.16 处理this",[187,89123,89125],{"id":89124},"_4161-this的指向","4.16.1 this的指向",[171,89127,89128],{},[109,89129,89130],{},"普通函数的this",[19,89132,89133],{},[1556,89134],{"alt":43,"src":89135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[171,89137,89138],{"start":92},[109,89139,89140],{},"箭头函数的this",[19,89142,89143],{},[1556,89144],{"alt":43,"src":89145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,89147,89148],{},[1556,89149],{"alt":43,"src":89150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,89152,89153],{},[1556,89154],{"alt":43,"src":89155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[187,89157,89159],{"id":89158},"_4162-this的改变","4.16.2 this的改变",[19,89161,89162],{},"call() apply() bind()",[171,89164,89165],{},[109,89166,89167],{},"call()",[19,89169,89170],{},[1556,89171],{"alt":43,"src":89172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,89174,89175],{},"两个作用：①调用函数；②改变this指向",[38,89177,89179],{"className":53121,"code":89178,"language":53123,"meta":43,"style":43},"\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",[26,89180,89181,89189,89197,89201,89206,89210,89215,89220,89225,89229,89234,89242],{"__ignoreMap":43},[47,89182,89183,89185,89187],{"class":49,"line":50},[47,89184,1129],{"class":221},[47,89186,51854],{"class":51354},[47,89188,51361],{"class":221},[47,89190,89191,89193,89195],{"class":49,"line":92},[47,89192,52198],{"class":221},[47,89194,51867],{"class":51354},[47,89196,51361],{"class":221},[47,89198,89199],{"class":49,"line":1273},[47,89200,71577],{"class":221},[47,89202,89203],{"class":49,"line":1288},[47,89204,89205],{"class":221},"      uname: 'pink'\n",[47,89207,89208],{"class":49,"line":1294},[47,89209,2280],{"class":221},[47,89211,89212],{"class":49,"line":1308},[47,89213,89214],{"class":221},"    function fn(x, y) {\n",[47,89216,89217],{"class":49,"line":1314},[47,89218,89219],{"class":221},"      console.log(this)  \u002F\u002Fwindow\n",[47,89221,89222],{"class":49,"line":1405},[47,89223,89224],{"class":221},"      console.log(x + y)\n",[47,89226,89227],{"class":49,"line":1411},[47,89228,2280],{"class":221},[47,89230,89231],{"class":49,"line":1423},[47,89232,89233],{"class":221},"    fn.call(obj, 1, 2)\n",[47,89235,89236,89238,89240],{"class":49,"line":1706},[47,89237,52471],{"class":221},[47,89239,51867],{"class":51354},[47,89241,51361],{"class":221},[47,89243,89244,89246,89248],{"class":49,"line":1711},[47,89245,51839],{"class":221},[47,89247,51854],{"class":51354},[47,89249,51361],{"class":221},[19,89251,89252],{},[1556,89253],{"alt":43,"src":89254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[171,89256,89257],{"start":92},[109,89258,89259],{},"apply()",[19,89261,89262],{},[1556,89263],{"alt":43,"src":89264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,89266,89175],{},[19,89268,89269],{},"call传递的是普通参数，而apply必须传递的是数组",[38,89271,89273],{"className":50687,"code":89272,"language":50689,"meta":43,"style":43},"\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",[26,89274,89275,89285,89299,89303,89311,89325,89345,89357,89365,89369,89377,89385,89395,89402,89406,89411,89427,89439,89453,89457,89462,89481,89486,89490,89495,89500,89508,89513,89535,89540,89556,89572,89584,89588,89593,89612,89620,89628,89632],{"__ignoreMap":43},[47,89276,89277,89279,89281,89283],{"class":49,"line":50},[47,89278,51351],{"class":221},[47,89280,51355],{"class":51354},[47,89282,51358],{"class":53},[47,89284,51361],{"class":221},[47,89286,89287,89289,89291,89293,89295,89297],{"class":49,"line":92},[47,89288,1129],{"class":221},[47,89290,50689],{"class":51354},[47,89292,51370],{"class":53},[47,89294,267],{"class":221},[47,89296,51375],{"class":81},[47,89298,51361],{"class":221},[47,89300,89301],{"class":49,"line":1273},[47,89302,2493],{"emptyLinePlaceholder":145},[47,89304,89305,89307,89309],{"class":49,"line":1288},[47,89306,1129],{"class":221},[47,89308,51388],{"class":51354},[47,89310,51361],{"class":221},[47,89312,89313,89315,89317,89319,89321,89323],{"class":49,"line":1294},[47,89314,52198],{"class":221},[47,89316,51398],{"class":51354},[47,89318,51401],{"class":53},[47,89320,267],{"class":221},[47,89322,51406],{"class":81},[47,89324,51361],{"class":221},[47,89326,89327,89329,89331,89333,89335,89337,89339,89341,89343],{"class":49,"line":1308},[47,89328,52198],{"class":221},[47,89330,51398],{"class":51354},[47,89332,15013],{"class":53},[47,89334,267],{"class":221},[47,89336,51445],{"class":81},[47,89338,51425],{"class":53},[47,89340,267],{"class":221},[47,89342,51452],{"class":81},[47,89344,51361],{"class":221},[47,89346,89347,89349,89351,89353,89355],{"class":49,"line":1314},[47,89348,52198],{"class":221},[47,89350,51461],{"class":51354},[47,89352,51464],{"class":221},[47,89354,51461],{"class":51354},[47,89356,51361],{"class":221},[47,89358,89359,89361,89363],{"class":49,"line":1405},[47,89360,51839],{"class":221},[47,89362,51388],{"class":51354},[47,89364,51361],{"class":221},[47,89366,89367],{"class":49,"line":1411},[47,89368,2493],{"emptyLinePlaceholder":145},[47,89370,89371,89373,89375],{"class":49,"line":1423},[47,89372,1129],{"class":221},[47,89374,51854],{"class":51354},[47,89376,51361],{"class":221},[47,89378,89379,89381,89383],{"class":49,"line":1706},[47,89380,52198],{"class":221},[47,89382,51867],{"class":51354},[47,89384,51361],{"class":221},[47,89386,89387,89389,89391,89393],{"class":49,"line":1711},[47,89388,11314],{"class":217},[47,89390,70025],{"class":85},[47,89392,13657],{"class":217},[47,89394,15665],{"class":221},[47,89396,89397,89399],{"class":49,"line":1717},[47,89398,71680],{"class":221},[47,89400,89401],{"class":85},"18\n",[47,89403,89404],{"class":49,"line":1722},[47,89405,2280],{"class":221},[47,89407,89408],{"class":49,"line":1736},[47,89409,89410],{"class":279},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[47,89412,89413,89415,89417,89419,89421,89423,89425],{"class":49,"line":1741},[47,89414,70138],{"class":217},[47,89416,88904],{"class":53},[47,89418,222],{"class":221},[47,89420,1039],{"class":5309},[47,89422,12528],{"class":221},[47,89424,1064],{"class":5309},[47,89426,12535],{"class":221},[47,89428,89429,89431,89433,89435,89437],{"class":49,"line":1747},[47,89430,58298],{"class":221},[47,89432,58301],{"class":53},[47,89434,222],{"class":221},[47,89436,87047],{"class":85},[47,89438,228],{"class":221},[47,89440,89441,89443,89445,89448,89450],{"class":49,"line":1768},[47,89442,58298],{"class":221},[47,89444,58301],{"class":53},[47,89446,89447],{"class":221},"(x ",[47,89449,700],{"class":217},[47,89451,89452],{"class":221}," y)\n",[47,89454,89455],{"class":49,"line":1773},[47,89456,2280],{"class":221},[47,89458,89459],{"class":49,"line":1787},[47,89460,89461],{"class":279},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[47,89463,89464,89467,89470,89473,89475,89477,89479],{"class":49,"line":1792},[47,89465,89466],{"class":221},"    fn.",[47,89468,89469],{"class":53},"apply",[47,89471,89472],{"class":221},"(obj, [",[47,89474,436],{"class":85},[47,89476,12528],{"class":221},[47,89478,298],{"class":85},[47,89480,4750],{"class":221},[47,89482,89483],{"class":49,"line":1821},[47,89484,89485],{"class":279},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[47,89487,89488],{"class":49,"line":1826},[47,89489,2493],{"emptyLinePlaceholder":145},[47,89491,89492],{"class":49,"line":1843},[47,89493,89494],{"class":279},"    \u002F\u002F 使用场景：求数组最大值\n",[47,89496,89497],{"class":49,"line":1848},[47,89498,89499],{"class":279},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[47,89501,89502,89505],{"class":49,"line":1853},[47,89503,89504],{"class":279},"    \u002F\u002F console.log(max)",[47,89506,89507],{"class":279},"   \u002F\u002F3\n",[47,89509,89510],{"class":49,"line":1858},[47,89511,89512],{"class":279},"    \u002F\u002F 指向空或者Math都是可以的\n",[47,89514,89515,89517,89519,89521,89523,89525,89527,89529,89531,89533],{"class":49,"line":1872},[47,89516,11314],{"class":217},[47,89518,57749],{"class":85},[47,89520,13657],{"class":217},[47,89522,52280],{"class":221},[47,89524,530],{"class":85},[47,89526,12528],{"class":221},[47,89528,723],{"class":85},[47,89530,12528],{"class":221},[47,89532,754],{"class":85},[47,89534,33300],{"class":221},[47,89536,89537],{"class":49,"line":1877},[47,89538,89539],{"class":279},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[47,89541,89542,89544,89546,89548,89551,89553],{"class":49,"line":2670},[47,89543,11314],{"class":217},[47,89545,6044],{"class":85},[47,89547,13657],{"class":217},[47,89549,89550],{"class":221}," Math.max.",[47,89552,89469],{"class":53},[47,89554,89555],{"class":221},"(Math, arr)\n",[47,89557,89558,89560,89563,89565,89568,89570],{"class":49,"line":2684},[47,89559,11314],{"class":217},[47,89561,89562],{"class":85}," min",[47,89564,13657],{"class":217},[47,89566,89567],{"class":221}," Math.min.",[47,89569,89469],{"class":53},[47,89571,89555],{"class":221},[47,89573,89574,89576,89578,89581],{"class":49,"line":2692},[47,89575,73807],{"class":221},[47,89577,58301],{"class":53},[47,89579,89580],{"class":221},"(max, min)     ",[47,89582,89583],{"class":279},"\u002F\u002F100,4\n",[47,89585,89586],{"class":49,"line":2697},[47,89587,2493],{"emptyLinePlaceholder":145},[47,89589,89590],{"class":49,"line":2703},[47,89591,89592],{"class":279},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[47,89594,89595,89597,89599,89602,89604,89606,89609],{"class":49,"line":2709},[47,89596,73807],{"class":221},[47,89598,58301],{"class":53},[47,89600,89601],{"class":221},"(Max.",[47,89603,6108],{"class":53},[47,89605,222],{"class":221},[47,89607,89608],{"class":217},"...",[47,89610,89611],{"class":221},"arr))\n",[47,89613,89614,89616,89618],{"class":49,"line":2714},[47,89615,52471],{"class":221},[47,89617,51867],{"class":51354},[47,89619,51361],{"class":221},[47,89621,89622,89624,89626],{"class":49,"line":8041},[47,89623,51839],{"class":221},[47,89625,51854],{"class":51354},[47,89627,51361],{"class":221},[47,89629,89630],{"class":49,"line":8065},[47,89631,2493],{"emptyLinePlaceholder":145},[47,89633,89634,89636,89638],{"class":49,"line":8070},[47,89635,51839],{"class":221},[47,89637,50689],{"class":51354},[47,89639,51361],{"class":221},[19,89641,89642],{},[1556,89643],{"alt":43,"src":89644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[171,89646,89647],{"start":1273},[109,89648,89649],{},"bind()",[19,89651,89652],{},[1556,89653],{"alt":43,"src":89654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,89656,89657],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,89659,89660],{},"bind的语法跟call很相似",[38,89662,89664],{"className":53121,"code":89663,"language":53123,"meta":43,"style":43},"\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",[26,89665,89666,89674,89682,89686,89691,89695,89699,89704,89708,89713,89718,89723,89728,89733,89738,89743,89747,89755],{"__ignoreMap":43},[47,89667,89668,89670,89672],{"class":49,"line":50},[47,89669,1129],{"class":221},[47,89671,51854],{"class":51354},[47,89673,51361],{"class":221},[47,89675,89676,89678,89680],{"class":49,"line":92},[47,89677,52198],{"class":221},[47,89679,51867],{"class":51354},[47,89681,51361],{"class":221},[47,89683,89684],{"class":49,"line":1273},[47,89685,71577],{"class":221},[47,89687,89688],{"class":49,"line":1288},[47,89689,89690],{"class":221},"      age: 18\n",[47,89692,89693],{"class":49,"line":1294},[47,89694,2280],{"class":221},[47,89696,89697],{"class":49,"line":1308},[47,89698,77197],{"class":221},[47,89700,89701],{"class":49,"line":1314},[47,89702,89703],{"class":221},"      console.log(this)\n",[47,89705,89706],{"class":49,"line":1405},[47,89707,2280],{"class":221},[47,89709,89710],{"class":49,"line":1411},[47,89711,89712],{"class":221},"    \u002F\u002F 1.bind 不会调用函数\n",[47,89714,89715],{"class":49,"line":1423},[47,89716,89717],{"class":221},"    \u002F\u002F 2.bind能改变this的指向\n",[47,89719,89720],{"class":49,"line":1706},[47,89721,89722],{"class":221},"    fn.bind()\n",[47,89724,89725],{"class":49,"line":1711},[47,89726,89727],{"class":221},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[47,89729,89730],{"class":49,"line":1717},[47,89731,89732],{"class":221},"    const fun = fn.bind(obj)\n",[47,89734,89735],{"class":49,"line":1722},[47,89736,89737],{"class":221},"    \u002F\u002F console.log(fun)\n",[47,89739,89740],{"class":49,"line":1736},[47,89741,89742],{"class":221},"    \u002F\u002F 调用,查看this的指向\n",[47,89744,89745],{"class":49,"line":1741},[47,89746,52705],{"class":221},[47,89748,89749,89751,89753],{"class":49,"line":1747},[47,89750,52471],{"class":221},[47,89752,51867],{"class":51354},[47,89754,51361],{"class":221},[47,89756,89757,89759,89761],{"class":49,"line":1768},[47,89758,51839],{"class":221},[47,89760,51854],{"class":51354},[47,89762,51361],{"class":221},[19,89764,89765],{},[1556,89766],{"alt":43,"src":89767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[171,89769,89770],{"start":1288},[109,89771,89772],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[38,89774,89776],{"className":53121,"code":89775,"language":53123,"meta":43,"style":43},"\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",[26,89777,89778,89786,89799,89807,89812,89816,89821,89826,89831,89836,89841,89846,89851,89856,89860,89868],{"__ignoreMap":43},[47,89779,89780,89782,89784],{"class":49,"line":50},[47,89781,1129],{"class":221},[47,89783,51854],{"class":51354},[47,89785,51361],{"class":221},[47,89787,89788,89790,89792,89795,89797],{"class":49,"line":92},[47,89789,52198],{"class":221},[47,89791,53941],{"class":51354},[47,89793,89794],{"class":221},">禁用\u003C\u002F",[47,89796,53941],{"class":51354},[47,89798,51361],{"class":221},[47,89800,89801,89803,89805],{"class":49,"line":1273},[47,89802,52198],{"class":221},[47,89804,51867],{"class":51354},[47,89806,51361],{"class":221},[47,89808,89809],{"class":49,"line":1288},[47,89810,89811],{"class":221},"    const btn = document.querySelector('button')\n",[47,89813,89814],{"class":49,"line":1294},[47,89815,59070],{"class":221},[47,89817,89818],{"class":49,"line":1308},[47,89819,89820],{"class":221},"      this.disabled = true\n",[47,89822,89823],{"class":49,"line":1314},[47,89824,89825],{"class":221},"      \u002F\u002F 定时器是window进行调用的\n",[47,89827,89828],{"class":49,"line":1405},[47,89829,89830],{"class":221},"      setTimeout(function () {\n",[47,89832,89833],{"class":49,"line":1411},[47,89834,89835],{"class":221},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[47,89837,89838],{"class":49,"line":1423},[47,89839,89840],{"class":221},"        this.disabled = false\n",[47,89842,89843],{"class":49,"line":1706},[47,89844,89845],{"class":221},"      }.bind(this), 2000)\n",[47,89847,89848],{"class":49,"line":1711},[47,89849,89850],{"class":221},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[47,89852,89853],{"class":49,"line":1717},[47,89854,89855],{"class":221},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[47,89857,89858],{"class":49,"line":1722},[47,89859,33515],{"class":221},[47,89861,89862,89864,89866],{"class":49,"line":1736},[47,89863,52471],{"class":221},[47,89865,51867],{"class":51354},[47,89867,51361],{"class":221},[47,89869,89870,89872,89874],{"class":49,"line":1741},[47,89871,51839],{"class":221},[47,89873,51854],{"class":51354},[47,89875,51361],{"class":221},[171,89877,89878],{"start":1294},[109,89879,22046],{},[19,89881,89882],{},[1556,89883],{"alt":43,"src":89884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,89886,89888],{"id":89887},"_417-性能优化","4.17 性能优化",[187,89890,89892],{"id":89891},"_4171-防抖","4.17.1 防抖",[19,89894,89895],{},[1556,89896],{"alt":43,"src":89897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,89899,89900],{},[369,89901,89902],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,89904,89905],{},"防抖实现方式：",[106,89907,89908],{},[109,89909,89910],{},"lodash 提供了防抖处理",[19,89912,89913],{},"_.debounce(func,[wait=0],[options={}])",[19,89915,89916],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[38,89918,89920],{"className":50687,"code":89919,"language":50689,"meta":43,"style":43},"\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",[26,89921,89922,89932,89946,89950,89958,89972,89992,90004,90012,90018,90028,90040,90052,90063,90075,90085,90095,90108,90112,90120,90128,90132,90140,90158,90176,90184,90203,90213,90222,90233,90238,90242,90247,90252,90257,90282,90290,90298,90302],{"__ignoreMap":43},[47,89923,89924,89926,89928,89930],{"class":49,"line":50},[47,89925,51351],{"class":221},[47,89927,51355],{"class":51354},[47,89929,51358],{"class":53},[47,89931,51361],{"class":221},[47,89933,89934,89936,89938,89940,89942,89944],{"class":49,"line":92},[47,89935,1129],{"class":221},[47,89937,50689],{"class":51354},[47,89939,51370],{"class":53},[47,89941,267],{"class":221},[47,89943,51375],{"class":81},[47,89945,51361],{"class":221},[47,89947,89948],{"class":49,"line":1273},[47,89949,2493],{"emptyLinePlaceholder":145},[47,89951,89952,89954,89956],{"class":49,"line":1288},[47,89953,1129],{"class":221},[47,89955,51388],{"class":51354},[47,89957,51361],{"class":221},[47,89959,89960,89962,89964,89966,89968,89970],{"class":49,"line":1294},[47,89961,52198],{"class":221},[47,89963,51398],{"class":51354},[47,89965,51401],{"class":53},[47,89967,267],{"class":221},[47,89969,51406],{"class":81},[47,89971,51361],{"class":221},[47,89973,89974,89976,89978,89980,89982,89984,89986,89988,89990],{"class":49,"line":1308},[47,89975,52198],{"class":221},[47,89977,51398],{"class":51354},[47,89979,15013],{"class":53},[47,89981,267],{"class":221},[47,89983,51445],{"class":81},[47,89985,51425],{"class":53},[47,89987,267],{"class":221},[47,89989,51452],{"class":81},[47,89991,51361],{"class":221},[47,89993,89994,89996,89998,90000,90002],{"class":49,"line":1314},[47,89995,52198],{"class":221},[47,89997,51461],{"class":51354},[47,89999,51464],{"class":221},[47,90001,51461],{"class":51354},[47,90003,51361],{"class":221},[47,90005,90006,90008,90010],{"class":49,"line":1405},[47,90007,52198],{"class":221},[47,90009,134],{"class":51354},[47,90011,51361],{"class":221},[47,90013,90014,90016],{"class":49,"line":1411},[47,90015,54806],{"class":53},[47,90017,15665],{"class":221},[47,90019,90020,90022,90024,90026],{"class":49,"line":1423},[47,90021,72650],{"class":85},[47,90023,51491],{"class":221},[47,90025,60559],{"class":85},[47,90027,1384],{"class":221},[47,90029,90030,90032,90034,90036,90038],{"class":49,"line":1706},[47,90031,54825],{"class":85},[47,90033,51491],{"class":221},[47,90035,1816],{"class":85},[47,90037,51546],{"class":217},[47,90039,1384],{"class":221},[47,90041,90042,90044,90046,90048,90050],{"class":49,"line":1711},[47,90043,54839],{"class":85},[47,90045,51491],{"class":221},[47,90047,1816],{"class":85},[47,90049,51546],{"class":217},[47,90051,1384],{"class":221},[47,90053,90054,90056,90058,90061],{"class":49,"line":1717},[47,90055,54938],{"class":85},[47,90057,51491],{"class":221},[47,90059,90060],{"class":85},"gray",[47,90062,1384],{"class":221},[47,90064,90065,90067,90069,90071,90073],{"class":49,"line":1722},[47,90066,54976],{"class":85},[47,90068,51491],{"class":221},[47,90070,1044],{"class":85},[47,90072,51546],{"class":217},[47,90074,1384],{"class":221},[47,90076,90077,90079,90081,90083],{"class":49,"line":1736},[47,90078,57470],{"class":85},[47,90080,51491],{"class":221},[47,90082,60896],{"class":85},[47,90084,1384],{"class":221},[47,90086,90087,90089,90091,90093],{"class":49,"line":1741},[47,90088,57340],{"class":85},[47,90090,51491],{"class":221},[47,90092,51646],{"class":85},[47,90094,1384],{"class":221},[47,90096,90097,90100,90102,90104,90106],{"class":49,"line":1747},[47,90098,90099],{"class":85},"      padding-top",[47,90101,51491],{"class":221},[47,90103,538],{"class":85},[47,90105,51546],{"class":217},[47,90107,1384],{"class":221},[47,90109,90110],{"class":49,"line":1768},[47,90111,2280],{"class":221},[47,90113,90114,90116,90118],{"class":49,"line":1773},[47,90115,52471],{"class":221},[47,90117,134],{"class":51354},[47,90119,51361],{"class":221},[47,90121,90122,90124,90126],{"class":49,"line":1787},[47,90123,51839],{"class":221},[47,90125,51388],{"class":51354},[47,90127,51361],{"class":221},[47,90129,90130],{"class":49,"line":1792},[47,90131,2493],{"emptyLinePlaceholder":145},[47,90133,90134,90136,90138],{"class":49,"line":1821},[47,90135,1129],{"class":221},[47,90137,51854],{"class":51354},[47,90139,51361],{"class":221},[47,90141,90142,90144,90146,90148,90150,90152,90154,90156],{"class":49,"line":1826},[47,90143,52198],{"class":221},[47,90145,51665],{"class":51354},[47,90147,53540],{"class":53},[47,90149,267],{"class":221},[47,90151,53545],{"class":81},[47,90153,55368],{"class":221},[47,90155,51665],{"class":51354},[47,90157,51361],{"class":221},[47,90159,90160,90162,90164,90166,90168,90170,90172,90174],{"class":49,"line":1843},[47,90161,52198],{"class":221},[47,90163,51867],{"class":51354},[47,90165,55293],{"class":53},[47,90167,267],{"class":221},[47,90169,88328],{"class":81},[47,90171,55368],{"class":221},[47,90173,51867],{"class":51354},[47,90175,51361],{"class":221},[47,90177,90178,90180,90182],{"class":49,"line":1848},[47,90179,52198],{"class":221},[47,90181,51867],{"class":51354},[47,90183,51361],{"class":221},[47,90185,90186,90188,90190,90192,90194,90196,90198,90201],{"class":49,"line":1853},[47,90187,11314],{"class":217},[47,90189,86987],{"class":85},[47,90191,13657],{"class":217},[47,90193,54450],{"class":221},[47,90195,54453],{"class":53},[47,90197,222],{"class":221},[47,90199,90200],{"class":81},"'.box'",[47,90202,228],{"class":221},[47,90204,90205,90207,90209,90211],{"class":49,"line":1858},[47,90206,52273],{"class":217},[47,90208,9531],{"class":221},[47,90210,267],{"class":217},[47,90212,47387],{"class":85},[47,90214,90215,90217,90220],{"class":49,"line":1872},[47,90216,70138],{"class":217},[47,90218,90219],{"class":53}," mouseMove",[47,90221,10946],{"class":221},[47,90223,90224,90227,90229,90231],{"class":49,"line":1877},[47,90225,90226],{"class":221},"      box.innerHTML ",[47,90228,267],{"class":217},[47,90230,3125],{"class":221},[47,90232,2795],{"class":217},[47,90234,90235],{"class":49,"line":2670},[47,90236,90237],{"class":279},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[47,90239,90240],{"class":49,"line":2684},[47,90241,2280],{"class":221},[47,90243,90244],{"class":49,"line":2692},[47,90245,90246],{"class":279},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[47,90248,90249],{"class":49,"line":2697},[47,90250,90251],{"class":279},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[47,90253,90254],{"class":49,"line":2703},[47,90255,90256],{"class":279},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[47,90258,90259,90262,90264,90266,90269,90272,90275,90278,90280],{"class":49,"line":2709},[47,90260,90261],{"class":221},"    box.",[47,90263,57867],{"class":53},[47,90265,222],{"class":221},[47,90267,90268],{"class":81},"'mousemove'",[47,90270,90271],{"class":221},", _.",[47,90273,90274],{"class":53},"debounce",[47,90276,90277],{"class":221},"(mouseMove, ",[47,90279,65128],{"class":85},[47,90281,30551],{"class":221},[47,90283,90284,90286,90288],{"class":49,"line":2714},[47,90285,52471],{"class":221},[47,90287,51867],{"class":51354},[47,90289,51361],{"class":221},[47,90291,90292,90294,90296],{"class":49,"line":8041},[47,90293,51839],{"class":221},[47,90295,51854],{"class":51354},[47,90297,51361],{"class":221},[47,90299,90300],{"class":49,"line":8065},[47,90301,2493],{"emptyLinePlaceholder":145},[47,90303,90304,90306,90308],{"class":49,"line":8070},[47,90305,51839],{"class":221},[47,90307,50689],{"class":51354},[47,90309,51361],{"class":221},[106,90311,90312],{},[109,90313,90314],{},"手写一个防抖函数来处理",[19,90316,90317],{},"防抖的核心就是利用定时器来实现的：",[19,90319,90320],{},"①声明一个定时器变量",[19,90322,90323],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,90325,90326],{},"③如果没有定时器则开启定时器，记得存到变量里面",[38,90328,90330],{"className":50687,"code":90329,"language":50689,"meta":43,"style":43},"\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",[26,90331,90332,90342,90356,90360,90368,90382,90402,90414,90422,90428,90438,90450,90462,90472,90484,90494,90504,90516,90520,90528,90536,90540,90548,90566,90584,90592,90610,90620,90628,90638,90642,90646,90650,90655,90660,90665,90670,90675,90680,90698,90705,90710,90718,90723,90736,90752,90762,90767,90771,90775,90795,90799,90804,90809,90814,90819,90827,90835,90839],{"__ignoreMap":43},[47,90333,90334,90336,90338,90340],{"class":49,"line":50},[47,90335,51351],{"class":221},[47,90337,51355],{"class":51354},[47,90339,51358],{"class":53},[47,90341,51361],{"class":221},[47,90343,90344,90346,90348,90350,90352,90354],{"class":49,"line":92},[47,90345,1129],{"class":221},[47,90347,50689],{"class":51354},[47,90349,51370],{"class":53},[47,90351,267],{"class":221},[47,90353,51375],{"class":81},[47,90355,51361],{"class":221},[47,90357,90358],{"class":49,"line":1273},[47,90359,2493],{"emptyLinePlaceholder":145},[47,90361,90362,90364,90366],{"class":49,"line":1288},[47,90363,1129],{"class":221},[47,90365,51388],{"class":51354},[47,90367,51361],{"class":221},[47,90369,90370,90372,90374,90376,90378,90380],{"class":49,"line":1294},[47,90371,52198],{"class":221},[47,90373,51398],{"class":51354},[47,90375,51401],{"class":53},[47,90377,267],{"class":221},[47,90379,51406],{"class":81},[47,90381,51361],{"class":221},[47,90383,90384,90386,90388,90390,90392,90394,90396,90398,90400],{"class":49,"line":1308},[47,90385,52198],{"class":221},[47,90387,51398],{"class":51354},[47,90389,15013],{"class":53},[47,90391,267],{"class":221},[47,90393,51445],{"class":81},[47,90395,51425],{"class":53},[47,90397,267],{"class":221},[47,90399,51452],{"class":81},[47,90401,51361],{"class":221},[47,90403,90404,90406,90408,90410,90412],{"class":49,"line":1314},[47,90405,52198],{"class":221},[47,90407,51461],{"class":51354},[47,90409,51464],{"class":221},[47,90411,51461],{"class":51354},[47,90413,51361],{"class":221},[47,90415,90416,90418,90420],{"class":49,"line":1405},[47,90417,52198],{"class":221},[47,90419,134],{"class":51354},[47,90421,51361],{"class":221},[47,90423,90424,90426],{"class":49,"line":1411},[47,90425,54806],{"class":53},[47,90427,15665],{"class":221},[47,90429,90430,90432,90434,90436],{"class":49,"line":1423},[47,90431,72650],{"class":85},[47,90433,51491],{"class":221},[47,90435,60559],{"class":85},[47,90437,1384],{"class":221},[47,90439,90440,90442,90444,90446,90448],{"class":49,"line":1706},[47,90441,54825],{"class":85},[47,90443,51491],{"class":221},[47,90445,1816],{"class":85},[47,90447,51546],{"class":217},[47,90449,1384],{"class":221},[47,90451,90452,90454,90456,90458,90460],{"class":49,"line":1711},[47,90453,54839],{"class":85},[47,90455,51491],{"class":221},[47,90457,1816],{"class":85},[47,90459,51546],{"class":217},[47,90461,1384],{"class":221},[47,90463,90464,90466,90468,90470],{"class":49,"line":1717},[47,90465,54938],{"class":85},[47,90467,51491],{"class":221},[47,90469,90060],{"class":85},[47,90471,1384],{"class":221},[47,90473,90474,90476,90478,90480,90482],{"class":49,"line":1722},[47,90475,54976],{"class":85},[47,90477,51491],{"class":221},[47,90479,1044],{"class":85},[47,90481,51546],{"class":217},[47,90483,1384],{"class":221},[47,90485,90486,90488,90490,90492],{"class":49,"line":1736},[47,90487,57470],{"class":85},[47,90489,51491],{"class":221},[47,90491,60896],{"class":85},[47,90493,1384],{"class":221},[47,90495,90496,90498,90500,90502],{"class":49,"line":1741},[47,90497,57340],{"class":85},[47,90499,51491],{"class":221},[47,90501,51646],{"class":85},[47,90503,1384],{"class":221},[47,90505,90506,90508,90510,90512,90514],{"class":49,"line":1747},[47,90507,90099],{"class":85},[47,90509,51491],{"class":221},[47,90511,538],{"class":85},[47,90513,51546],{"class":217},[47,90515,1384],{"class":221},[47,90517,90518],{"class":49,"line":1768},[47,90519,2280],{"class":221},[47,90521,90522,90524,90526],{"class":49,"line":1773},[47,90523,52471],{"class":221},[47,90525,134],{"class":51354},[47,90527,51361],{"class":221},[47,90529,90530,90532,90534],{"class":49,"line":1787},[47,90531,51839],{"class":221},[47,90533,51388],{"class":51354},[47,90535,51361],{"class":221},[47,90537,90538],{"class":49,"line":1792},[47,90539,2493],{"emptyLinePlaceholder":145},[47,90541,90542,90544,90546],{"class":49,"line":1821},[47,90543,1129],{"class":221},[47,90545,51854],{"class":51354},[47,90547,51361],{"class":221},[47,90549,90550,90552,90554,90556,90558,90560,90562,90564],{"class":49,"line":1826},[47,90551,52198],{"class":221},[47,90553,51665],{"class":51354},[47,90555,53540],{"class":53},[47,90557,267],{"class":221},[47,90559,53545],{"class":81},[47,90561,55368],{"class":221},[47,90563,51665],{"class":51354},[47,90565,51361],{"class":221},[47,90567,90568,90570,90572,90574,90576,90578,90580,90582],{"class":49,"line":1843},[47,90569,52198],{"class":221},[47,90571,51867],{"class":51354},[47,90573,55293],{"class":53},[47,90575,267],{"class":221},[47,90577,88328],{"class":81},[47,90579,55368],{"class":221},[47,90581,51867],{"class":51354},[47,90583,51361],{"class":221},[47,90585,90586,90588,90590],{"class":49,"line":1848},[47,90587,52198],{"class":221},[47,90589,51867],{"class":51354},[47,90591,51361],{"class":221},[47,90593,90594,90596,90598,90600,90602,90604,90606,90608],{"class":49,"line":1853},[47,90595,11314],{"class":217},[47,90597,86987],{"class":85},[47,90599,13657],{"class":217},[47,90601,54450],{"class":221},[47,90603,54453],{"class":53},[47,90605,222],{"class":221},[47,90607,90200],{"class":81},[47,90609,228],{"class":221},[47,90611,90612,90614,90616,90618],{"class":49,"line":1858},[47,90613,52273],{"class":217},[47,90615,9531],{"class":221},[47,90617,267],{"class":217},[47,90619,47387],{"class":85},[47,90621,90622,90624,90626],{"class":49,"line":1872},[47,90623,70138],{"class":217},[47,90625,90219],{"class":53},[47,90627,10946],{"class":221},[47,90629,90630,90632,90634,90636],{"class":49,"line":1877},[47,90631,90226],{"class":221},[47,90633,267],{"class":217},[47,90635,3125],{"class":221},[47,90637,2795],{"class":217},[47,90639,90640],{"class":49,"line":2670},[47,90641,90237],{"class":279},[47,90643,90644],{"class":49,"line":2684},[47,90645,2280],{"class":221},[47,90647,90648],{"class":49,"line":2692},[47,90649,90246],{"class":279},[47,90651,90652],{"class":49,"line":2697},[47,90653,90654],{"class":279},"    \u002F\u002F 手写防抖函数\n",[47,90656,90657],{"class":49,"line":2703},[47,90658,90659],{"class":279},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[47,90661,90662],{"class":49,"line":2709},[47,90663,90664],{"class":279},"    \u002F\u002F 1.声明定时器变量\n",[47,90666,90667],{"class":49,"line":2714},[47,90668,90669],{"class":279},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[47,90671,90672],{"class":49,"line":8041},[47,90673,90674],{"class":279},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[47,90676,90677],{"class":49,"line":8065},[47,90678,90679],{"class":279},"    \u002F\u002F 4.定时器里面写函数调用\n",[47,90681,90682,90684,90687,90689,90692,90694,90696],{"class":49,"line":8070},[47,90683,70138],{"class":217},[47,90685,90686],{"class":53}," debounce",[47,90688,222],{"class":221},[47,90690,90691],{"class":5309},"fn",[47,90693,12528],{"class":221},[47,90695,939],{"class":5309},[47,90697,12535],{"class":221},[47,90699,90700,90702],{"class":49,"line":8076},[47,90701,79826],{"class":217},[47,90703,90704],{"class":221}," timer\n",[47,90706,90707],{"class":49,"line":8103},[47,90708,90709],{"class":279},"      \u002F\u002F return 返回一个匿名函数\n",[47,90711,90712,90714,90716],{"class":49,"line":8108},[47,90713,74036],{"class":217},[47,90715,58972],{"class":217},[47,90717,54506],{"class":221},[47,90719,90720],{"class":49,"line":8114},[47,90721,90722],{"class":279},"        \u002F\u002F 这里边写第二三四步\n",[47,90724,90725,90727,90730,90733],{"class":49,"line":8126},[47,90726,2590],{"class":217},[47,90728,90729],{"class":221}," (timer) ",[47,90731,90732],{"class":53},"clearTimeout",[47,90734,90735],{"class":221},"(timer)\n",[47,90737,90738,90741,90743,90746,90748,90750],{"class":49,"line":8138},[47,90739,90740],{"class":221},"        timer ",[47,90742,267],{"class":217},[47,90744,90745],{"class":53}," setTimeout",[47,90747,222],{"class":221},[47,90749,54503],{"class":217},[47,90751,54506],{"class":221},[47,90753,90754,90757,90759],{"class":49,"line":8150},[47,90755,90756],{"class":53},"          fn",[47,90758,13143],{"class":221},[47,90760,90761],{"class":279},"\u002F\u002F加小括号调用fn }, t)\n",[47,90763,90764],{"class":49,"line":9809},[47,90765,90766],{"class":221},"        }, t)\n",[47,90768,90769],{"class":49,"line":9834},[47,90770,52452],{"class":221},[47,90772,90773],{"class":49,"line":9857},[47,90774,2280],{"class":221},[47,90776,90777,90779,90781,90783,90785,90787,90789,90791,90793],{"class":49,"line":9881},[47,90778,90261],{"class":221},[47,90780,57867],{"class":53},[47,90782,222],{"class":221},[47,90784,90268],{"class":81},[47,90786,12528],{"class":221},[47,90788,90274],{"class":53},[47,90790,90277],{"class":221},[47,90792,65128],{"class":85},[47,90794,30551],{"class":221},[47,90796,90797],{"class":49,"line":9886},[47,90798,2493],{"emptyLinePlaceholder":145},[47,90800,90801],{"class":49,"line":9891},[47,90802,90803],{"class":279},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[47,90805,90806],{"class":49,"line":9896},[47,90807,90808],{"class":279},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[47,90810,90811],{"class":49,"line":9905},[47,90812,90813],{"class":279},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[47,90815,90816],{"class":49,"line":9910},[47,90817,90818],{"class":279},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[47,90820,90821,90823,90825],{"class":49,"line":9916},[47,90822,52471],{"class":221},[47,90824,51867],{"class":51354},[47,90826,51361],{"class":221},[47,90828,90829,90831,90833],{"class":49,"line":9937},[47,90830,51839],{"class":221},[47,90832,51854],{"class":51354},[47,90834,51361],{"class":221},[47,90836,90837],{"class":49,"line":9943},[47,90838,2493],{"emptyLinePlaceholder":145},[47,90840,90841,90843,90845],{"class":49,"line":9957},[47,90842,51839],{"class":221},[47,90844,50689],{"class":51354},[47,90846,51361],{"class":221},[187,90848,90850],{"id":90849},"_4172-节流","4.17.2 节流",[19,90852,90853],{},[1556,90854],{"alt":43,"src":90855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,90857,90858],{},[1556,90859],{"alt":43,"src":90860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,90862,90863],{},[369,90864,90865],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,90867,90868],{},"实现方式：",[106,90870,90871],{},[109,90872,90873],{},"lodash 提供的节流函数来处理",[19,90875,90876],{},"_.throttle(func,[wait=0],[options=])",[19,90878,90879],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[38,90881,90883],{"className":50687,"code":90882,"language":50689,"meta":43,"style":43},"\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",[26,90884,90885,90895,90909,90913,90921,90935,90955,90967,90975,90981,90991,91003,91015,91025,91037,91047,91057,91069,91073,91081,91089,91093,91101,91119,91137,91145,91163,91173,91181,91191,91195,91199,91203,91208,91213,91234,91242,91250,91254],{"__ignoreMap":43},[47,90886,90887,90889,90891,90893],{"class":49,"line":50},[47,90888,51351],{"class":221},[47,90890,51355],{"class":51354},[47,90892,51358],{"class":53},[47,90894,51361],{"class":221},[47,90896,90897,90899,90901,90903,90905,90907],{"class":49,"line":92},[47,90898,1129],{"class":221},[47,90900,50689],{"class":51354},[47,90902,51370],{"class":53},[47,90904,267],{"class":221},[47,90906,51375],{"class":81},[47,90908,51361],{"class":221},[47,90910,90911],{"class":49,"line":1273},[47,90912,2493],{"emptyLinePlaceholder":145},[47,90914,90915,90917,90919],{"class":49,"line":1288},[47,90916,1129],{"class":221},[47,90918,51388],{"class":51354},[47,90920,51361],{"class":221},[47,90922,90923,90925,90927,90929,90931,90933],{"class":49,"line":1294},[47,90924,52198],{"class":221},[47,90926,51398],{"class":51354},[47,90928,51401],{"class":53},[47,90930,267],{"class":221},[47,90932,51406],{"class":81},[47,90934,51361],{"class":221},[47,90936,90937,90939,90941,90943,90945,90947,90949,90951,90953],{"class":49,"line":1308},[47,90938,52198],{"class":221},[47,90940,51398],{"class":51354},[47,90942,15013],{"class":53},[47,90944,267],{"class":221},[47,90946,51445],{"class":81},[47,90948,51425],{"class":53},[47,90950,267],{"class":221},[47,90952,51452],{"class":81},[47,90954,51361],{"class":221},[47,90956,90957,90959,90961,90963,90965],{"class":49,"line":1314},[47,90958,52198],{"class":221},[47,90960,51461],{"class":51354},[47,90962,51464],{"class":221},[47,90964,51461],{"class":51354},[47,90966,51361],{"class":221},[47,90968,90969,90971,90973],{"class":49,"line":1405},[47,90970,52198],{"class":221},[47,90972,134],{"class":51354},[47,90974,51361],{"class":221},[47,90976,90977,90979],{"class":49,"line":1411},[47,90978,54806],{"class":53},[47,90980,15665],{"class":221},[47,90982,90983,90985,90987,90989],{"class":49,"line":1423},[47,90984,72650],{"class":85},[47,90986,51491],{"class":221},[47,90988,60559],{"class":85},[47,90990,1384],{"class":221},[47,90992,90993,90995,90997,90999,91001],{"class":49,"line":1706},[47,90994,54825],{"class":85},[47,90996,51491],{"class":221},[47,90998,1816],{"class":85},[47,91000,51546],{"class":217},[47,91002,1384],{"class":221},[47,91004,91005,91007,91009,91011,91013],{"class":49,"line":1711},[47,91006,54839],{"class":85},[47,91008,51491],{"class":221},[47,91010,1816],{"class":85},[47,91012,51546],{"class":217},[47,91014,1384],{"class":221},[47,91016,91017,91019,91021,91023],{"class":49,"line":1717},[47,91018,54938],{"class":85},[47,91020,51491],{"class":221},[47,91022,90060],{"class":85},[47,91024,1384],{"class":221},[47,91026,91027,91029,91031,91033,91035],{"class":49,"line":1722},[47,91028,54976],{"class":85},[47,91030,51491],{"class":221},[47,91032,1044],{"class":85},[47,91034,51546],{"class":217},[47,91036,1384],{"class":221},[47,91038,91039,91041,91043,91045],{"class":49,"line":1736},[47,91040,57470],{"class":85},[47,91042,51491],{"class":221},[47,91044,60896],{"class":85},[47,91046,1384],{"class":221},[47,91048,91049,91051,91053,91055],{"class":49,"line":1741},[47,91050,57340],{"class":85},[47,91052,51491],{"class":221},[47,91054,51646],{"class":85},[47,91056,1384],{"class":221},[47,91058,91059,91061,91063,91065,91067],{"class":49,"line":1747},[47,91060,90099],{"class":85},[47,91062,51491],{"class":221},[47,91064,538],{"class":85},[47,91066,51546],{"class":217},[47,91068,1384],{"class":221},[47,91070,91071],{"class":49,"line":1768},[47,91072,2280],{"class":221},[47,91074,91075,91077,91079],{"class":49,"line":1773},[47,91076,52471],{"class":221},[47,91078,134],{"class":51354},[47,91080,51361],{"class":221},[47,91082,91083,91085,91087],{"class":49,"line":1787},[47,91084,51839],{"class":221},[47,91086,51388],{"class":51354},[47,91088,51361],{"class":221},[47,91090,91091],{"class":49,"line":1792},[47,91092,2493],{"emptyLinePlaceholder":145},[47,91094,91095,91097,91099],{"class":49,"line":1821},[47,91096,1129],{"class":221},[47,91098,51854],{"class":51354},[47,91100,51361],{"class":221},[47,91102,91103,91105,91107,91109,91111,91113,91115,91117],{"class":49,"line":1826},[47,91104,52198],{"class":221},[47,91106,51665],{"class":51354},[47,91108,53540],{"class":53},[47,91110,267],{"class":221},[47,91112,53545],{"class":81},[47,91114,55368],{"class":221},[47,91116,51665],{"class":51354},[47,91118,51361],{"class":221},[47,91120,91121,91123,91125,91127,91129,91131,91133,91135],{"class":49,"line":1843},[47,91122,52198],{"class":221},[47,91124,51867],{"class":51354},[47,91126,55293],{"class":53},[47,91128,267],{"class":221},[47,91130,88328],{"class":81},[47,91132,55368],{"class":221},[47,91134,51867],{"class":51354},[47,91136,51361],{"class":221},[47,91138,91139,91141,91143],{"class":49,"line":1848},[47,91140,52198],{"class":221},[47,91142,51867],{"class":51354},[47,91144,51361],{"class":221},[47,91146,91147,91149,91151,91153,91155,91157,91159,91161],{"class":49,"line":1853},[47,91148,11314],{"class":217},[47,91150,86987],{"class":85},[47,91152,13657],{"class":217},[47,91154,54450],{"class":221},[47,91156,54453],{"class":53},[47,91158,222],{"class":221},[47,91160,90200],{"class":81},[47,91162,228],{"class":221},[47,91164,91165,91167,91169,91171],{"class":49,"line":1858},[47,91166,52273],{"class":217},[47,91168,9531],{"class":221},[47,91170,267],{"class":217},[47,91172,47387],{"class":85},[47,91174,91175,91177,91179],{"class":49,"line":1872},[47,91176,70138],{"class":217},[47,91178,90219],{"class":53},[47,91180,10946],{"class":221},[47,91182,91183,91185,91187,91189],{"class":49,"line":1877},[47,91184,90226],{"class":221},[47,91186,267],{"class":217},[47,91188,3125],{"class":221},[47,91190,2795],{"class":217},[47,91192,91193],{"class":49,"line":2670},[47,91194,90237],{"class":279},[47,91196,91197],{"class":49,"line":2684},[47,91198,2280],{"class":221},[47,91200,91201],{"class":49,"line":2692},[47,91202,90246],{"class":279},[47,91204,91205],{"class":49,"line":2697},[47,91206,91207],{"class":279},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[47,91209,91210],{"class":49,"line":2703},[47,91211,91212],{"class":279},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[47,91214,91215,91217,91219,91221,91223,91225,91228,91230,91232],{"class":49,"line":2709},[47,91216,90261],{"class":221},[47,91218,57867],{"class":53},[47,91220,222],{"class":221},[47,91222,90268],{"class":81},[47,91224,90271],{"class":221},[47,91226,91227],{"class":53},"throttle",[47,91229,90277],{"class":221},[47,91231,65128],{"class":85},[47,91233,30551],{"class":221},[47,91235,91236,91238,91240],{"class":49,"line":2714},[47,91237,52471],{"class":221},[47,91239,51867],{"class":51354},[47,91241,51361],{"class":221},[47,91243,91244,91246,91248],{"class":49,"line":8041},[47,91245,51839],{"class":221},[47,91247,51854],{"class":51354},[47,91249,51361],{"class":221},[47,91251,91252],{"class":49,"line":8065},[47,91253,2493],{"emptyLinePlaceholder":145},[47,91255,91256,91258,91260],{"class":49,"line":8070},[47,91257,51839],{"class":221},[47,91259,50689],{"class":51354},[47,91261,51361],{"class":221},[106,91263,91264],{},[109,91265,91266],{},"手写一个节流函数来处理",[19,91268,71006],{},[19,91270,90320],{},[19,91272,91273],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,91275,91276],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[38,91278,91280],{"className":50687,"code":91279,"language":50689,"meta":43,"style":43},"\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",[26,91281,91282,91292,91306,91310,91318,91332,91352,91364,91372,91378,91388,91400,91412,91422,91434,91444,91454,91466,91470,91478,91486,91490,91498,91516,91534,91542,91560,91570,91578,91588,91592,91596,91600,91605,91610,91615,91620,91625,91630,91647,91653,91661,91672,91687,91694,91699,91704,91714,91719,91724,91729,91733,91737,91741,91761,91769,91777,91781],{"__ignoreMap":43},[47,91283,91284,91286,91288,91290],{"class":49,"line":50},[47,91285,51351],{"class":221},[47,91287,51355],{"class":51354},[47,91289,51358],{"class":53},[47,91291,51361],{"class":221},[47,91293,91294,91296,91298,91300,91302,91304],{"class":49,"line":92},[47,91295,1129],{"class":221},[47,91297,50689],{"class":51354},[47,91299,51370],{"class":53},[47,91301,267],{"class":221},[47,91303,51375],{"class":81},[47,91305,51361],{"class":221},[47,91307,91308],{"class":49,"line":1273},[47,91309,2493],{"emptyLinePlaceholder":145},[47,91311,91312,91314,91316],{"class":49,"line":1288},[47,91313,1129],{"class":221},[47,91315,51388],{"class":51354},[47,91317,51361],{"class":221},[47,91319,91320,91322,91324,91326,91328,91330],{"class":49,"line":1294},[47,91321,52198],{"class":221},[47,91323,51398],{"class":51354},[47,91325,51401],{"class":53},[47,91327,267],{"class":221},[47,91329,51406],{"class":81},[47,91331,51361],{"class":221},[47,91333,91334,91336,91338,91340,91342,91344,91346,91348,91350],{"class":49,"line":1308},[47,91335,52198],{"class":221},[47,91337,51398],{"class":51354},[47,91339,15013],{"class":53},[47,91341,267],{"class":221},[47,91343,51445],{"class":81},[47,91345,51425],{"class":53},[47,91347,267],{"class":221},[47,91349,51452],{"class":81},[47,91351,51361],{"class":221},[47,91353,91354,91356,91358,91360,91362],{"class":49,"line":1314},[47,91355,52198],{"class":221},[47,91357,51461],{"class":51354},[47,91359,51464],{"class":221},[47,91361,51461],{"class":51354},[47,91363,51361],{"class":221},[47,91365,91366,91368,91370],{"class":49,"line":1405},[47,91367,52198],{"class":221},[47,91369,134],{"class":51354},[47,91371,51361],{"class":221},[47,91373,91374,91376],{"class":49,"line":1411},[47,91375,54806],{"class":53},[47,91377,15665],{"class":221},[47,91379,91380,91382,91384,91386],{"class":49,"line":1423},[47,91381,72650],{"class":85},[47,91383,51491],{"class":221},[47,91385,60559],{"class":85},[47,91387,1384],{"class":221},[47,91389,91390,91392,91394,91396,91398],{"class":49,"line":1706},[47,91391,54825],{"class":85},[47,91393,51491],{"class":221},[47,91395,1816],{"class":85},[47,91397,51546],{"class":217},[47,91399,1384],{"class":221},[47,91401,91402,91404,91406,91408,91410],{"class":49,"line":1711},[47,91403,54839],{"class":85},[47,91405,51491],{"class":221},[47,91407,1816],{"class":85},[47,91409,51546],{"class":217},[47,91411,1384],{"class":221},[47,91413,91414,91416,91418,91420],{"class":49,"line":1717},[47,91415,54938],{"class":85},[47,91417,51491],{"class":221},[47,91419,90060],{"class":85},[47,91421,1384],{"class":221},[47,91423,91424,91426,91428,91430,91432],{"class":49,"line":1722},[47,91425,54976],{"class":85},[47,91427,51491],{"class":221},[47,91429,1044],{"class":85},[47,91431,51546],{"class":217},[47,91433,1384],{"class":221},[47,91435,91436,91438,91440,91442],{"class":49,"line":1736},[47,91437,57470],{"class":85},[47,91439,51491],{"class":221},[47,91441,60896],{"class":85},[47,91443,1384],{"class":221},[47,91445,91446,91448,91450,91452],{"class":49,"line":1741},[47,91447,57340],{"class":85},[47,91449,51491],{"class":221},[47,91451,51646],{"class":85},[47,91453,1384],{"class":221},[47,91455,91456,91458,91460,91462,91464],{"class":49,"line":1747},[47,91457,90099],{"class":85},[47,91459,51491],{"class":221},[47,91461,538],{"class":85},[47,91463,51546],{"class":217},[47,91465,1384],{"class":221},[47,91467,91468],{"class":49,"line":1768},[47,91469,2280],{"class":221},[47,91471,91472,91474,91476],{"class":49,"line":1773},[47,91473,52471],{"class":221},[47,91475,134],{"class":51354},[47,91477,51361],{"class":221},[47,91479,91480,91482,91484],{"class":49,"line":1787},[47,91481,51839],{"class":221},[47,91483,51388],{"class":51354},[47,91485,51361],{"class":221},[47,91487,91488],{"class":49,"line":1792},[47,91489,2493],{"emptyLinePlaceholder":145},[47,91491,91492,91494,91496],{"class":49,"line":1821},[47,91493,1129],{"class":221},[47,91495,51854],{"class":51354},[47,91497,51361],{"class":221},[47,91499,91500,91502,91504,91506,91508,91510,91512,91514],{"class":49,"line":1826},[47,91501,52198],{"class":221},[47,91503,51665],{"class":51354},[47,91505,53540],{"class":53},[47,91507,267],{"class":221},[47,91509,53545],{"class":81},[47,91511,55368],{"class":221},[47,91513,51665],{"class":51354},[47,91515,51361],{"class":221},[47,91517,91518,91520,91522,91524,91526,91528,91530,91532],{"class":49,"line":1843},[47,91519,52198],{"class":221},[47,91521,51867],{"class":51354},[47,91523,55293],{"class":53},[47,91525,267],{"class":221},[47,91527,88328],{"class":81},[47,91529,55368],{"class":221},[47,91531,51867],{"class":51354},[47,91533,51361],{"class":221},[47,91535,91536,91538,91540],{"class":49,"line":1848},[47,91537,52198],{"class":221},[47,91539,51867],{"class":51354},[47,91541,51361],{"class":221},[47,91543,91544,91546,91548,91550,91552,91554,91556,91558],{"class":49,"line":1853},[47,91545,11314],{"class":217},[47,91547,86987],{"class":85},[47,91549,13657],{"class":217},[47,91551,54450],{"class":221},[47,91553,54453],{"class":53},[47,91555,222],{"class":221},[47,91557,90200],{"class":81},[47,91559,228],{"class":221},[47,91561,91562,91564,91566,91568],{"class":49,"line":1858},[47,91563,52273],{"class":217},[47,91565,9531],{"class":221},[47,91567,267],{"class":217},[47,91569,47387],{"class":85},[47,91571,91572,91574,91576],{"class":49,"line":1872},[47,91573,70138],{"class":217},[47,91575,90219],{"class":53},[47,91577,10946],{"class":221},[47,91579,91580,91582,91584,91586],{"class":49,"line":1877},[47,91581,90226],{"class":221},[47,91583,267],{"class":217},[47,91585,3125],{"class":221},[47,91587,2795],{"class":217},[47,91589,91590],{"class":49,"line":2670},[47,91591,90237],{"class":279},[47,91593,91594],{"class":49,"line":2684},[47,91595,2280],{"class":221},[47,91597,91598],{"class":49,"line":2692},[47,91599,90246],{"class":279},[47,91601,91602],{"class":49,"line":2697},[47,91603,91604],{"class":279},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[47,91606,91607],{"class":49,"line":2703},[47,91608,91609],{"class":279},"    \u002F\u002F 1.声明一个定时器变量\n",[47,91611,91612],{"class":49,"line":2709},[47,91613,91614],{"class":279},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[47,91616,91617],{"class":49,"line":2714},[47,91618,91619],{"class":279},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[47,91621,91622],{"class":49,"line":8041},[47,91623,91624],{"class":279},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[47,91626,91627],{"class":49,"line":8065},[47,91628,91629],{"class":279},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[47,91631,91632,91634,91637,91639,91641,91643,91645],{"class":49,"line":8070},[47,91633,70138],{"class":217},[47,91635,91636],{"class":53}," throttle",[47,91638,222],{"class":221},[47,91640,90691],{"class":5309},[47,91642,12528],{"class":221},[47,91644,939],{"class":5309},[47,91646,12535],{"class":221},[47,91648,91649,91651],{"class":49,"line":8076},[47,91650,79826],{"class":217},[47,91652,90704],{"class":221},[47,91654,91655,91657,91659],{"class":49,"line":8103},[47,91656,74036],{"class":217},[47,91658,58972],{"class":217},[47,91660,54506],{"class":221},[47,91662,91663,91665,91667,91669],{"class":49,"line":8108},[47,91664,2590],{"class":217},[47,91666,1752],{"class":221},[47,91668,445],{"class":217},[47,91670,91671],{"class":221},"timer) {\n",[47,91673,91674,91677,91679,91681,91683,91685],{"class":49,"line":8114},[47,91675,91676],{"class":221},"          timer ",[47,91678,267],{"class":217},[47,91680,90745],{"class":53},[47,91682,222],{"class":221},[47,91684,54503],{"class":217},[47,91686,54506],{"class":221},[47,91688,91689,91692],{"class":49,"line":8126},[47,91690,91691],{"class":53},"            fn",[47,91693,2069],{"class":221},[47,91695,91696],{"class":49,"line":8138},[47,91697,91698],{"class":279},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[47,91700,91701],{"class":49,"line":8150},[47,91702,91703],{"class":279},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[47,91705,91706,91709,91711],{"class":49,"line":9809},[47,91707,91708],{"class":221},"            timer ",[47,91710,267],{"class":217},[47,91712,91713],{"class":85}," null\n",[47,91715,91716],{"class":49,"line":9834},[47,91717,91718],{"class":279},"            \u002F\u002F 不能用clearTimeout(timer)\n",[47,91720,91721],{"class":49,"line":9857},[47,91722,91723],{"class":279},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[47,91725,91726],{"class":49,"line":9881},[47,91727,91728],{"class":221},"          }, t)\n",[47,91730,91731],{"class":49,"line":9886},[47,91732,2622],{"class":221},[47,91734,91735],{"class":49,"line":9891},[47,91736,52452],{"class":221},[47,91738,91739],{"class":49,"line":9896},[47,91740,2280],{"class":221},[47,91742,91743,91745,91747,91749,91751,91753,91755,91757,91759],{"class":49,"line":9905},[47,91744,90261],{"class":221},[47,91746,57867],{"class":53},[47,91748,222],{"class":221},[47,91750,90268],{"class":81},[47,91752,12528],{"class":221},[47,91754,91227],{"class":53},[47,91756,90277],{"class":221},[47,91758,65128],{"class":85},[47,91760,30551],{"class":221},[47,91762,91763,91765,91767],{"class":49,"line":9910},[47,91764,52471],{"class":221},[47,91766,51867],{"class":51354},[47,91768,51361],{"class":221},[47,91770,91771,91773,91775],{"class":49,"line":9916},[47,91772,51839],{"class":221},[47,91774,51854],{"class":51354},[47,91776,51361],{"class":221},[47,91778,91779],{"class":49,"line":9937},[47,91780,2493],{"emptyLinePlaceholder":145},[47,91782,91783,91785,91787],{"class":49,"line":9943},[47,91784,51839],{"class":221},[47,91786,50689],{"class":51354},[47,91788,51361],{"class":221},[187,91790,91792],{"id":91791},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[38,91794,91796],{"className":53121,"code":91795,"language":53123,"meta":43,"style":43},"\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",[26,91797,91798,91806,91814,91819,91824,91829,91834,91838,91846],{"__ignoreMap":43},[47,91799,91800,91802,91804],{"class":49,"line":50},[47,91801,1129],{"class":221},[47,91803,51854],{"class":51354},[47,91805,51361],{"class":221},[47,91807,91808,91810,91812],{"class":49,"line":92},[47,91809,52198],{"class":221},[47,91811,51867],{"class":51354},[47,91813,51361],{"class":221},[47,91815,91816],{"class":49,"line":1273},[47,91817,91818],{"class":221},"    let timer = null\n",[47,91820,91821],{"class":49,"line":1288},[47,91822,91823],{"class":221},"    timer = setTimeout(() => {\n",[47,91825,91826],{"class":49,"line":1294},[47,91827,91828],{"class":221},"      clearTimeout(timer)\n",[47,91830,91831],{"class":49,"line":1308},[47,91832,91833],{"class":221},"      console.log(timer)\n",[47,91835,91836],{"class":49,"line":1314},[47,91837,60279],{"class":221},[47,91839,91840,91842,91844],{"class":49,"line":1405},[47,91841,52471],{"class":221},[47,91843,51867],{"class":51354},[47,91845,51361],{"class":221},[47,91847,91848,91850,91852],{"class":49,"line":1411},[47,91849,51839],{"class":221},[47,91851,51854],{"class":51354},[47,91853,51361],{"class":221},[19,91855,91856],{},"输出为1",[19,91858,91859],{},"在开启的定时器里边写清除定时器",[19,91861,91862],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[187,91864,91866],{"id":91865},"_4174-节流综合案例","4.17.4 节流综合案例",[19,91868,91869],{},"页面打开，可以记录上一次的视频播放位置",[19,91871,91872],{},[1556,91873],{"alt":43,"src":91874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,91876,91877],{},[1556,91878],{"alt":43,"src":91879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[38,91881,91883],{"className":50687,"code":91882,"language":50689,"meta":43,"style":43},"\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",[26,91884,91885,91895,91909,91913,91921,91935,91955,91975,91997,92010,92018,92024,92034,92044,92054,92058,92062,92069,92082,92094,92098,92102,92112,92124,92138,92142,92146,92153,92163,92176,92188,92198,92208,92224,92236,92240,92244,92252,92262,92274,92284,92294,92304,92308,92312,92322,92333,92337,92345,92353,92357,92365,92380,92395,92410,92431,92439,92447,92462,92484,92492,92507,92533,92559,92585,92593,92601,92620,92628,92633,92652,92657,92675,92680,92685,92693,92698,92712,92720,92725,92742,92746,92751,92773,92777,92785,92793,92797],{"__ignoreMap":43},[47,91886,91887,91889,91891,91893],{"class":49,"line":50},[47,91888,51351],{"class":221},[47,91890,51355],{"class":51354},[47,91892,51358],{"class":53},[47,91894,51361],{"class":221},[47,91896,91897,91899,91901,91903,91905,91907],{"class":49,"line":92},[47,91898,1129],{"class":221},[47,91900,50689],{"class":51354},[47,91902,51370],{"class":53},[47,91904,267],{"class":221},[47,91906,51375],{"class":81},[47,91908,51361],{"class":221},[47,91910,91911],{"class":49,"line":1273},[47,91912,2493],{"emptyLinePlaceholder":145},[47,91914,91915,91917,91919],{"class":49,"line":1288},[47,91916,1129],{"class":221},[47,91918,51388],{"class":51354},[47,91920,51361],{"class":221},[47,91922,91923,91925,91927,91929,91931,91933],{"class":49,"line":1294},[47,91924,52198],{"class":221},[47,91926,51398],{"class":51354},[47,91928,51401],{"class":53},[47,91930,267],{"class":221},[47,91932,51406],{"class":81},[47,91934,59181],{"class":221},[47,91936,91937,91939,91941,91943,91945,91947,91949,91951,91953],{"class":49,"line":1308},[47,91938,52198],{"class":221},[47,91940,51398],{"class":51354},[47,91942,51417],{"class":53},[47,91944,267],{"class":221},[47,91946,51422],{"class":81},[47,91948,51425],{"class":53},[47,91950,267],{"class":221},[47,91952,51430],{"class":81},[47,91954,59181],{"class":221},[47,91956,91957,91959,91961,91963,91965,91967,91969,91971,91973],{"class":49,"line":1314},[47,91958,52198],{"class":221},[47,91960,51398],{"class":51354},[47,91962,15013],{"class":53},[47,91964,267],{"class":221},[47,91966,51445],{"class":81},[47,91968,51425],{"class":53},[47,91970,267],{"class":221},[47,91972,51452],{"class":81},[47,91974,59181],{"class":221},[47,91976,91977,91979,91981,91983,91985,91988,91990,91992,91995],{"class":49,"line":1405},[47,91978,52198],{"class":221},[47,91980,51398],{"class":51354},[47,91982,15013],{"class":53},[47,91984,267],{"class":221},[47,91986,91987],{"class":81},"\"referrer\"",[47,91989,51425],{"class":53},[47,91991,267],{"class":221},[47,91993,91994],{"class":81},"\"never\"",[47,91996,59181],{"class":221},[47,91998,91999,92001,92003,92006,92008],{"class":49,"line":1411},[47,92000,52198],{"class":221},[47,92002,51461],{"class":51354},[47,92004,92005],{"class":221},">综合案例\u003C\u002F",[47,92007,51461],{"class":51354},[47,92009,51361],{"class":221},[47,92011,92012,92014,92016],{"class":49,"line":1423},[47,92013,52198],{"class":221},[47,92015,134],{"class":51354},[47,92017,51361],{"class":221},[47,92019,92020,92022],{"class":49,"line":1706},[47,92021,6496],{"class":51354},[47,92023,15665],{"class":221},[47,92025,92026,92028,92030,92032],{"class":49,"line":1711},[47,92027,54749],{"class":85},[47,92029,51491],{"class":221},[47,92031,411],{"class":85},[47,92033,1384],{"class":221},[47,92035,92036,92038,92040,92042],{"class":49,"line":1717},[47,92037,54760],{"class":85},[47,92039,51491],{"class":221},[47,92041,411],{"class":85},[47,92043,1384],{"class":221},[47,92045,92046,92048,92050,92052],{"class":49,"line":1722},[47,92047,72650],{"class":85},[47,92049,51491],{"class":221},[47,92051,60559],{"class":85},[47,92053,1384],{"class":221},[47,92055,92056],{"class":49,"line":1736},[47,92057,2280],{"class":221},[47,92059,92060],{"class":49,"line":1741},[47,92061,2493],{"emptyLinePlaceholder":145},[47,92063,92064,92067],{"class":49,"line":1747},[47,92065,92066],{"class":53},"    .container",[47,92068,15665],{"class":221},[47,92070,92071,92073,92075,92078,92080],{"class":49,"line":1768},[47,92072,54825],{"class":85},[47,92074,51491],{"class":221},[47,92076,92077],{"class":85},"1200",[47,92079,51546],{"class":217},[47,92081,1384],{"class":221},[47,92083,92084,92086,92088,92090,92092],{"class":49,"line":1773},[47,92085,54760],{"class":85},[47,92087,51491],{"class":221},[47,92089,411],{"class":85},[47,92091,51610],{"class":85},[47,92093,1384],{"class":221},[47,92095,92096],{"class":49,"line":1787},[47,92097,2280],{"class":221},[47,92099,92100],{"class":49,"line":1792},[47,92101,2493],{"emptyLinePlaceholder":145},[47,92103,92104,92107,92110],{"class":49,"line":1821},[47,92105,92106],{"class":53},"    .video",[47,92108,92109],{"class":51354}," video",[47,92111,15665],{"class":221},[47,92113,92114,92116,92118,92120,92122],{"class":49,"line":1826},[47,92115,54825],{"class":85},[47,92117,51491],{"class":221},[47,92119,530],{"class":85},[47,92121,547],{"class":217},[47,92123,1384],{"class":221},[47,92125,92126,92128,92130,92132,92134,92136],{"class":49,"line":1843},[47,92127,54749],{"class":85},[47,92129,51491],{"class":221},[47,92131,919],{"class":85},[47,92133,51546],{"class":217},[47,92135,4186],{"class":85},[47,92137,1384],{"class":221},[47,92139,92140],{"class":49,"line":1848},[47,92141,2280],{"class":221},[47,92143,92144],{"class":49,"line":1853},[47,92145,2493],{"emptyLinePlaceholder":145},[47,92147,92148,92151],{"class":49,"line":1858},[47,92149,92150],{"class":53},"    .elevator",[47,92152,15665],{"class":221},[47,92154,92155,92157,92159,92161],{"class":49,"line":1872},[47,92156,54813],{"class":85},[47,92158,51491],{"class":221},[47,92160,86287],{"class":85},[47,92162,1384],{"class":221},[47,92164,92165,92167,92169,92172,92174],{"class":49,"line":1877},[47,92166,55001],{"class":85},[47,92168,51491],{"class":221},[47,92170,92171],{"class":85},"280",[47,92173,51546],{"class":217},[47,92175,1384],{"class":221},[47,92177,92178,92180,92182,92184,92186],{"class":49,"line":2670},[47,92179,86481],{"class":85},[47,92181,51491],{"class":221},[47,92183,919],{"class":85},[47,92185,51546],{"class":217},[47,92187,1384],{"class":221},[47,92189,92190,92192,92194,92196],{"class":49,"line":2684},[47,92191,86294],{"class":85},[47,92193,51491],{"class":221},[47,92195,86299],{"class":85},[47,92197,1384],{"class":221},[47,92199,92200,92202,92204,92206],{"class":49,"line":2692},[47,92201,61775],{"class":85},[47,92203,51491],{"class":221},[47,92205,60896],{"class":85},[47,92207,1384],{"class":221},[47,92209,92210,92212,92214,92216,92218,92220,92222],{"class":49,"line":2697},[47,92211,62031],{"class":85},[47,92213,51491],{"class":221},[47,92215,436],{"class":85},[47,92217,51546],{"class":217},[47,92219,51575],{"class":85},[47,92221,62298],{"class":85},[47,92223,1384],{"class":221},[47,92225,92226,92228,92230,92232,92234],{"class":49,"line":2703},[47,92227,54825],{"class":85},[47,92229,51491],{"class":221},[47,92231,1126],{"class":85},[47,92233,51546],{"class":217},[47,92235,1384],{"class":221},[47,92237,92238],{"class":49,"line":2709},[47,92239,2280],{"class":221},[47,92241,92242],{"class":49,"line":2714},[47,92243,2493],{"emptyLinePlaceholder":145},[47,92245,92246,92248,92250],{"class":49,"line":8041},[47,92247,92150],{"class":53},[47,92249,1492],{"class":51354},[47,92251,15665],{"class":221},[47,92253,92254,92256,92258,92260],{"class":49,"line":8065},[47,92255,55063],{"class":85},[47,92257,51491],{"class":221},[47,92259,60923],{"class":85},[47,92261,1384],{"class":221},[47,92263,92264,92266,92268,92270,92272],{"class":49,"line":8070},[47,92265,54749],{"class":85},[47,92267,51491],{"class":221},[47,92269,665],{"class":85},[47,92271,51546],{"class":217},[47,92273,1384],{"class":221},[47,92275,92276,92278,92280,92282],{"class":49,"line":8076},[47,92277,64024],{"class":85},[47,92279,51491],{"class":221},[47,92281,54791],{"class":85},[47,92283,1384],{"class":221},[47,92285,92286,92288,92290,92292],{"class":49,"line":8103},[47,92287,57340],{"class":85},[47,92289,51491],{"class":221},[47,92291,51646],{"class":85},[47,92293,1384],{"class":221},[47,92295,92296,92298,92300,92302],{"class":49,"line":8108},[47,92297,57470],{"class":85},[47,92299,51491],{"class":221},[47,92301,62124],{"class":85},[47,92303,1384],{"class":221},[47,92305,92306],{"class":49,"line":8114},[47,92307,2280],{"class":221},[47,92309,92310],{"class":49,"line":8126},[47,92311,2493],{"emptyLinePlaceholder":145},[47,92313,92314,92316,92318,92320],{"class":49,"line":8138},[47,92315,92150],{"class":53},[47,92317,1492],{"class":51354},[47,92319,64078],{"class":53},[47,92321,15665],{"class":221},[47,92323,92324,92326,92328,92331],{"class":49,"line":8150},[47,92325,57470],{"class":85},[47,92327,51491],{"class":221},[47,92329,92330],{"class":85},"#1286ff",[47,92332,1384],{"class":221},[47,92334,92335],{"class":49,"line":9809},[47,92336,2280],{"class":221},[47,92338,92339,92341,92343],{"class":49,"line":9834},[47,92340,52471],{"class":221},[47,92342,134],{"class":51354},[47,92344,51361],{"class":221},[47,92346,92347,92349,92351],{"class":49,"line":9857},[47,92348,51839],{"class":221},[47,92350,51388],{"class":51354},[47,92352,51361],{"class":221},[47,92354,92355],{"class":49,"line":9881},[47,92356,2493],{"emptyLinePlaceholder":145},[47,92358,92359,92361,92363],{"class":49,"line":9886},[47,92360,1129],{"class":221},[47,92362,51854],{"class":51354},[47,92364,51361],{"class":221},[47,92366,92367,92369,92371,92373,92375,92378],{"class":49,"line":9891},[47,92368,52198],{"class":221},[47,92370,51665],{"class":51354},[47,92372,53540],{"class":53},[47,92374,267],{"class":221},[47,92376,92377],{"class":81},"\"container\"",[47,92379,51361],{"class":221},[47,92381,92382,92384,92386,92388,92390,92393],{"class":49,"line":9896},[47,92383,51395],{"class":221},[47,92385,51665],{"class":51354},[47,92387,53540],{"class":53},[47,92389,267],{"class":221},[47,92391,92392],{"class":81},"\"header\"",[47,92394,51361],{"class":221},[47,92396,92397,92399,92401,92403,92405,92408],{"class":49,"line":9905},[47,92398,55288],{"class":221},[47,92400,457],{"class":51354},[47,92402,61111],{"class":53},[47,92404,267],{"class":221},[47,92406,92407],{"class":81},"\"http:\u002F\u002Fpip.itcast.cn\"",[47,92409,51361],{"class":221},[47,92411,92412,92414,92416,92418,92420,92423,92425,92427,92429],{"class":49,"line":9910},[47,92413,55356],{"class":221},[47,92415,1556],{"class":51354},[47,92417,55293],{"class":53},[47,92419,267],{"class":221},[47,92421,92422],{"class":81},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[47,92424,55301],{"class":53},[47,92426,267],{"class":221},[47,92428,7745],{"class":81},[47,92430,59181],{"class":221},[47,92432,92433,92435,92437],{"class":49,"line":9916},[47,92434,55461],{"class":221},[47,92436,457],{"class":51354},[47,92438,51361],{"class":221},[47,92440,92441,92443,92445],{"class":49,"line":9937},[47,92442,51830],{"class":221},[47,92444,51665],{"class":51354},[47,92446,51361],{"class":221},[47,92448,92449,92451,92453,92455,92457,92460],{"class":49,"line":9943},[47,92450,51395],{"class":221},[47,92452,51665],{"class":51354},[47,92454,53540],{"class":53},[47,92456,267],{"class":221},[47,92458,92459],{"class":81},"\"video\"",[47,92461,51361],{"class":221},[47,92463,92464,92466,92468,92470,92472,92475,92478,92480,92482],{"class":49,"line":9957},[47,92465,55288],{"class":221},[47,92467,28237],{"class":51354},[47,92469,55293],{"class":53},[47,92471,267],{"class":221},[47,92473,92474],{"class":81},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[47,92476,92477],{"class":53}," controls",[47,92479,55368],{"class":221},[47,92481,28237],{"class":51354},[47,92483,51361],{"class":221},[47,92485,92486,92488,92490],{"class":49,"line":9963},[47,92487,51830],{"class":221},[47,92489,51665],{"class":51354},[47,92491,51361],{"class":221},[47,92493,92494,92496,92498,92500,92502,92505],{"class":49,"line":9990},[47,92495,51395],{"class":221},[47,92497,51665],{"class":51354},[47,92499,53540],{"class":53},[47,92501,267],{"class":221},[47,92503,92504],{"class":81},"\"elevator\"",[47,92506,51361],{"class":221},[47,92508,92509,92511,92513,92515,92517,92519,92522,92524,92526,92529,92531],{"class":49,"line":9999},[47,92510,55288],{"class":221},[47,92512,457],{"class":51354},[47,92514,61111],{"class":53},[47,92516,267],{"class":221},[47,92518,64290],{"class":81},[47,92520,92521],{"class":53}," data-ref",[47,92523,267],{"class":221},[47,92525,92459],{"class":81},[47,92527,92528],{"class":221},">视频介绍\u003C\u002F",[47,92530,457],{"class":51354},[47,92532,51361],{"class":221},[47,92534,92535,92537,92539,92541,92543,92545,92547,92549,92552,92555,92557],{"class":49,"line":10005},[47,92536,55288],{"class":221},[47,92538,457],{"class":51354},[47,92540,61111],{"class":53},[47,92542,267],{"class":221},[47,92544,64290],{"class":81},[47,92546,92521],{"class":53},[47,92548,267],{"class":221},[47,92550,92551],{"class":81},"\"intro\"",[47,92553,92554],{"class":221},">课程简介\u003C\u002F",[47,92556,457],{"class":51354},[47,92558,51361],{"class":221},[47,92560,92561,92563,92565,92567,92569,92571,92573,92575,92578,92581,92583],{"class":49,"line":10013},[47,92562,55288],{"class":221},[47,92564,457],{"class":51354},[47,92566,61111],{"class":53},[47,92568,267],{"class":221},[47,92570,64290],{"class":81},[47,92572,92521],{"class":53},[47,92574,267],{"class":221},[47,92576,92577],{"class":81},"\"outline\"",[47,92579,92580],{"class":221},">评论列表\u003C\u002F",[47,92582,457],{"class":51354},[47,92584,51361],{"class":221},[47,92586,92587,92589,92591],{"class":49,"line":10018},[47,92588,51830],{"class":221},[47,92590,51665],{"class":51354},[47,92592,51361],{"class":221},[47,92594,92595,92597,92599],{"class":49,"line":16697},[47,92596,52471],{"class":221},[47,92598,51665],{"class":51354},[47,92600,51361],{"class":221},[47,92602,92603,92605,92607,92609,92611,92614,92616,92618],{"class":49,"line":16703},[47,92604,52198],{"class":221},[47,92606,51867],{"class":51354},[47,92608,55293],{"class":53},[47,92610,267],{"class":221},[47,92612,92613],{"class":81},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[47,92615,55368],{"class":221},[47,92617,51867],{"class":51354},[47,92619,51361],{"class":221},[47,92621,92622,92624,92626],{"class":49,"line":16726},[47,92623,52198],{"class":221},[47,92625,51867],{"class":51354},[47,92627,51361],{"class":221},[47,92629,92630],{"class":49,"line":16732},[47,92631,92632],{"class":279},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[47,92634,92635,92637,92639,92641,92643,92645,92647,92650],{"class":49,"line":16755},[47,92636,11314],{"class":217},[47,92638,92109],{"class":85},[47,92640,13657],{"class":217},[47,92642,54450],{"class":221},[47,92644,54453],{"class":53},[47,92646,222],{"class":221},[47,92648,92649],{"class":81},"'video'",[47,92651,228],{"class":221},[47,92653,92654],{"class":49,"line":16769},[47,92655,92656],{"class":279},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[47,92658,92659,92662,92664,92666,92668,92671,92673],{"class":49,"line":16789},[47,92660,92661],{"class":221},"    video.ontimeupdate ",[47,92663,267],{"class":217},[47,92665,88409],{"class":221},[47,92667,91227],{"class":53},[47,92669,92670],{"class":221},"(() ",[47,92672,84776],{"class":217},[47,92674,15665],{"class":221},[47,92676,92677],{"class":49,"line":16795},[47,92678,92679],{"class":279},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[47,92681,92682],{"class":49,"line":16806},[47,92683,92684],{"class":279},"      \u002F\u002F 控制台输出当前的时间\n",[47,92686,92687,92690],{"class":49,"line":16829},[47,92688,92689],{"class":279},"      \u002F\u002F console.log(video.currentTime)",[47,92691,92692],{"class":279},"  \u002F\u002F获得当前的视频时间\n",[47,92694,92695],{"class":49,"line":16851},[47,92696,92697],{"class":279},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[47,92699,92700,92702,92704,92706,92709],{"class":49,"line":16856},[47,92701,74737],{"class":221},[47,92703,71708],{"class":53},[47,92705,222],{"class":221},[47,92707,92708],{"class":81},"'currentTime'",[47,92710,92711],{"class":221},", video.currentTime)\n",[47,92713,92714,92716,92718],{"class":49,"line":16862},[47,92715,54589],{"class":221},[47,92717,6503],{"class":85},[47,92719,228],{"class":221},[47,92721,92722],{"class":49,"line":16876},[47,92723,92724],{"class":279},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[47,92726,92727,92730,92733,92735,92738,92740],{"class":49,"line":16889},[47,92728,92729],{"class":221},"    video.",[47,92731,92732],{"class":53},"onloadeddata",[47,92734,13657],{"class":217},[47,92736,92737],{"class":221}," () ",[47,92739,84776],{"class":217},[47,92741,15665],{"class":221},[47,92743,92744],{"class":49,"line":16894},[47,92745,60066],{"class":279},[47,92747,92748],{"class":49,"line":16908},[47,92749,92750],{"class":279},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[47,92752,92753,92756,92758,92761,92763,92765,92767,92769,92771],{"class":49,"line":16913},[47,92754,92755],{"class":221},"      video.currentTime ",[47,92757,267],{"class":217},[47,92759,92760],{"class":221}," localStorage.",[47,92762,71739],{"class":53},[47,92764,222],{"class":221},[47,92766,92708],{"class":81},[47,92768,13807],{"class":221},[47,92770,71411],{"class":217},[47,92772,47387],{"class":85},[47,92774,92775],{"class":49,"line":16919},[47,92776,2280],{"class":221},[47,92778,92779,92781,92783],{"class":49,"line":16924},[47,92780,52471],{"class":221},[47,92782,51867],{"class":51354},[47,92784,51361],{"class":221},[47,92786,92787,92789,92791],{"class":49,"line":16938},[47,92788,51839],{"class":221},[47,92790,51854],{"class":51354},[47,92792,51361],{"class":221},[47,92794,92795],{"class":49,"line":16943},[47,92796,2493],{"emptyLinePlaceholder":145},[47,92798,92799,92801,92803],{"class":49,"line":16948},[47,92800,51839],{"class":221},[47,92802,50689],{"class":51354},[47,92804,51361],{"class":221},[134,92806,92807],{},"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":43,"searchDepth":92,"depth":92,"links":92809},[92810,92815,92819,92820,92821,92826,92831,92832,92833,92834,92841,92846,92847,92857,92861,92862,92866],{"id":76745,"depth":92,"text":76746,"children":92811},[92812,92813,92814],{"id":76749,"depth":1273,"text":76750},{"id":76774,"depth":1273,"text":76775},{"id":76786,"depth":1273,"text":76787},{"id":76798,"depth":92,"text":76799,"children":92816},[92817,92818],{"id":76802,"depth":1273,"text":76803},{"id":76817,"depth":1273,"text":76818},{"id":76869,"depth":92,"text":76870},{"id":76913,"depth":92,"text":76914},{"id":76930,"depth":92,"text":76931,"children":92822},[92823,92824,92825],{"id":76934,"depth":1273,"text":76935},{"id":76947,"depth":1273,"text":76948},{"id":77052,"depth":1273,"text":77053},{"id":77341,"depth":92,"text":77342,"children":92827},[92828,92829,92830],{"id":77345,"depth":1273,"text":77346},{"id":77788,"depth":1273,"text":77789},{"id":78199,"depth":1273,"text":78200},{"id":78262,"depth":92,"text":78263},{"id":78341,"depth":92,"text":78342},{"id":78434,"depth":92,"text":78435},{"id":80279,"depth":92,"text":80280,"children":92835},[92836,92837,92838,92839,92840],{"id":80283,"depth":1273,"text":80284},{"id":80295,"depth":1273,"text":80296},{"id":80514,"depth":1273,"text":80515},{"id":80532,"depth":1273,"text":80533},{"id":80592,"depth":1273,"text":80593},{"id":84860,"depth":92,"text":84861,"children":92842},[92843,92844,92845],{"id":84864,"depth":1273,"text":84865},{"id":84882,"depth":1273,"text":84883},{"id":84908,"depth":1273,"text":84909},{"id":84917,"depth":92,"text":84918},{"id":84939,"depth":92,"text":84940,"children":92848},[92849,92850,92851,92852,92853,92854,92855,92856],{"id":84943,"depth":1273,"text":84944},{"id":85204,"depth":1273,"text":85205},{"id":85390,"depth":1273,"text":85391},{"id":85757,"depth":1273,"text":85758},{"id":85873,"depth":1273,"text":85874},{"id":85909,"depth":1273,"text":85910},{"id":85956,"depth":1273,"text":85957},{"id":85990,"depth":1273,"text":85991},{"id":87353,"depth":92,"text":87354,"children":92858},[92859,92860],{"id":87357,"depth":1273,"text":87358},{"id":87394,"depth":1273,"text":87395},{"id":88749,"depth":92,"text":88750},{"id":89120,"depth":92,"text":89121,"children":92863},[92864,92865],{"id":89124,"depth":1273,"text":89125},{"id":89158,"depth":1273,"text":89159},{"id":89887,"depth":92,"text":89888,"children":92867},[92868,92869,92870,92871],{"id":89891,"depth":1273,"text":89892},{"id":90849,"depth":1273,"text":90850},{"id":91791,"depth":1273,"text":91792},{"id":91865,"depth":1273,"text":91866},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76734,"description":142},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":92878,"title":92879,"body":92880,"description":92891,"extension":143,"meta":92892,"navigation":145,"path":92894,"seo":92895,"stem":92896,"__hash__":92897},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":92881,"toc":92889},[92882],[19,92883,92884,92885],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[457,92886,92887],{"href":92887,"rel":92888},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[23956],{"title":43,"searchDepth":92,"depth":92,"links":92890},[],"三件套第三套学习",{"category":92893},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":92879,"description":92891},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":92899,"title":92900,"body":92901,"description":142,"extension":143,"meta":93006,"navigation":145,"path":93007,"seo":93008,"stem":93009,"__hash__":93010},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":92902,"toc":93001},[92903,92910,92913,92916,92919,92923,92932,92935,92938,92942,92951,92954,92958,92961,92981,92984,92998],[19,92904,92905],{},[457,92906,92909],{"href":92907,"rel":92908},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[23956],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,92911,92900],{"id":92912},"_1安装",[19,92914,92915],{},"numpy是科学计算基础库,底层是C语言",[19,92917,92918],{},"三种方式：",[14,92920,92922],{"id":92921},"_11-通过pip安装","1.1 通过pip安装",[38,92924,92926],{"className":30432,"code":92925,"language":30434,"meta":43,"style":43},"pip install numpy\n",[26,92927,92928],{"__ignoreMap":43},[47,92929,92930],{"class":49,"line":50},[47,92931,92925],{"class":221},[19,92933,92934],{},"首选方式，自动处理依赖项",[19,92936,92937],{},"在提示系统命令符中使用cmd",[14,92939,92941],{"id":92940},"_12-通过anaconda安装","1.2 通过Anaconda安装",[38,92943,92945],{"className":30432,"code":92944,"language":30434,"meta":43,"style":43},"conda install numpy\n",[26,92946,92947],{"__ignoreMap":43},[47,92948,92949],{"class":49,"line":50},[47,92950,92944],{"class":221},[19,92952,92953],{},"自动解决环境依赖",[14,92955,92957],{"id":92956},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,92959,92960],{},"对于Debian\u002FUbuntu",[38,92962,92964],{"className":30432,"code":92963,"language":30434,"meta":43,"style":43},"sudo apt-get install python3-numpy\n",[26,92965,92966],{"__ignoreMap":43},[47,92967,92968,92971,92973,92976,92978],{"class":49,"line":50},[47,92969,92970],{"class":221},"sudo apt",[47,92972,751],{"class":217},[47,92974,92975],{"class":221},"get install python3",[47,92977,751],{"class":217},[47,92979,92980],{"class":221},"numpy\n",[19,92982,92983],{},"对于Fedora:",[38,92985,92987],{"className":30432,"code":92986,"language":30434,"meta":43,"style":43},"sudo dnf install python3-numpy\n",[26,92988,92989],{"__ignoreMap":43},[47,92990,92991,92994,92996],{"class":49,"line":50},[47,92992,92993],{"class":221},"sudo dnf install python3",[47,92995,751],{"class":217},[47,92997,92980],{"class":221},[134,92999,93000],{},"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":43,"searchDepth":92,"depth":92,"links":93002},[93003,93004,93005],{"id":92921,"depth":92,"text":92922},{"id":92940,"depth":92,"text":92941},{"id":92956,"depth":92,"text":92957},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":92900,"description":142},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93012,"title":93013,"body":93014,"description":142,"extension":143,"meta":93127,"navigation":145,"path":93128,"seo":93129,"stem":93130,"__hash__":93131},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93015,"toc":93125},[93016,93019,93022,93025,93028,93031,93034,93037,93040,93043,93119,93122],[10,93017,93013],{"id":93018},"_10算数函数",[19,93020,93021],{},"加减乘除运算跟python基础语法没区别",[19,93023,93024],{},"除了python那种方法外还可以使用函数",[19,93026,93027],{},"加：np.add(a,b)",[19,93029,93030],{},"减：np.subtract(a,b)",[19,93032,93033],{},"乘：np.multiply(a,b)",[19,93035,93036],{},"除：np.divide(a,b) == a\u002Fb",[19,93038,93039],{},"取余：np.mod(a,b) == a%b",[19,93041,93042],{},"必须会的用法：",[38,93044,93046],{"className":30432,"code":93045,"language":30434,"meta":43,"style":43},"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",[26,93047,93048,93070,93091,93101,93114],{"__ignoreMap":43},[47,93049,93050,93052,93054,93057,93059,93062,93064,93066,93068],{"class":49,"line":50},[47,93051,457],{"class":221},[47,93053,267],{"class":217},[47,93055,93056],{"class":221},"np.arange(",[47,93058,639],{"class":85},[47,93060,93061],{"class":221},").reshape(",[47,93063,292],{"class":85},[47,93065,597],{"class":221},[47,93067,292],{"class":85},[47,93069,228],{"class":221},[47,93071,93072,93074,93076,93079,93081,93083,93085,93087,93089],{"class":49,"line":92},[47,93073,482],{"class":221},[47,93075,267],{"class":217},[47,93077,93078],{"class":221},"np.array([",[47,93080,665],{"class":85},[47,93082,597],{"class":221},[47,93084,665],{"class":85},[47,93086,597],{"class":221},[47,93088,665],{"class":85},[47,93090,4750],{"class":221},[47,93092,93093,93096,93098],{"class":49,"line":1273},[47,93094,93095],{"class":221},"result",[47,93097,267],{"class":217},[47,93099,93100],{"class":221},"np.empty_like(a)\n",[47,93102,93103,93106,93109,93111],{"class":49,"line":1288},[47,93104,93105],{"class":221},"np.add(a,b,",[47,93107,93108],{"class":5309},"out",[47,93110,267],{"class":217},[47,93112,93113],{"class":221},"result)\n",[47,93115,93116],{"class":49,"line":1294},[47,93117,93118],{"class":221},"result\n",[19,93120,93121],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[134,93123,93124],{},"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":43,"searchDepth":92,"depth":92,"links":93126},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93013,"description":142},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93133,"title":93134,"body":93135,"description":142,"extension":143,"meta":93897,"navigation":145,"path":93898,"seo":93899,"stem":93900,"__hash__":93901},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93136,"toc":93884},[93137,93140,93143,93146,93150,93189,93193,93237,93297,93301,93304,93343,93346,93391,93395,93431,93435,93504,93508,93572,93576,93579,93582,93585,93588,93624,93628,93668,93672,93744,93747,93751,93814,93818,93881],[10,93138,93134],{"id":93139},"_11统计函数",[19,93141,93142],{},"sum max min mean",[19,93144,93145],{},"这些有axis参数，可以指定方向",[14,93147,93149],{"id":93148},"_111-sum求和函数","11.1 sum()求和函数",[38,93151,93153],{"className":30432,"code":93152,"language":30434,"meta":43,"style":43},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[26,93154,93155,93160,93181],{"__ignoreMap":43},[47,93156,93157],{"class":49,"line":50},[47,93158,93159],{"class":279},"#创建一维数组\n",[47,93161,93162,93164,93166,93169,93171,93173,93175,93177,93179],{"class":49,"line":92},[47,93163,457],{"class":221},[47,93165,267],{"class":217},[47,93167,93168],{"class":221},"np.random.randint(",[47,93170,436],{"class":85},[47,93172,597],{"class":221},[47,93174,530],{"class":85},[47,93176,597],{"class":221},[47,93178,919],{"class":85},[47,93180,228],{"class":221},[47,93182,93183,93186],{"class":49,"line":1273},[47,93184,93185],{"class":221},"np.sum(a)",[47,93187,93188],{"class":279},"#求和\n",[14,93190,93192],{"id":93191},"_112-max求最大值函数","11.2 max()求最大值函数",[38,93194,93196],{"className":30432,"code":93195,"language":30434,"meta":43,"style":43},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[26,93197,93198,93202,93222,93227,93232],{"__ignoreMap":43},[47,93199,93200],{"class":49,"line":50},[47,93201,93159],{"class":279},[47,93203,93204,93206,93208,93210,93212,93214,93216,93218,93220],{"class":49,"line":92},[47,93205,457],{"class":221},[47,93207,267],{"class":217},[47,93209,93168],{"class":221},[47,93211,436],{"class":85},[47,93213,597],{"class":221},[47,93215,530],{"class":85},[47,93217,597],{"class":221},[47,93219,919],{"class":85},[47,93221,228],{"class":221},[47,93223,93224],{"class":49,"line":1273},[47,93225,93226],{"class":221},"np.max(a)\n",[47,93228,93229],{"class":49,"line":1288},[47,93230,93231],{"class":279},"#最大索引(求最大元素的索引)arg\n",[47,93233,93234],{"class":49,"line":1294},[47,93235,93236],{"class":221},"np.argmax(a)\n",[38,93238,93240],{"className":30432,"code":93239,"language":30434,"meta":43,"style":43},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[26,93241,93242,93263,93283,93287],{"__ignoreMap":43},[47,93243,93244,93246,93248,93251,93253,93255,93257,93259,93261],{"class":49,"line":50},[47,93245,11012],{"class":221},[47,93247,267],{"class":217},[47,93249,93250],{"class":221}," np.array([",[47,93252,436],{"class":85},[47,93254,12528],{"class":221},[47,93256,538],{"class":85},[47,93258,12528],{"class":221},[47,93260,292],{"class":85},[47,93262,4750],{"class":221},[47,93264,93265,93267,93269,93271,93273,93275,93277,93279,93281],{"class":49,"line":92},[47,93266,11038],{"class":221},[47,93268,267],{"class":217},[47,93270,93250],{"class":221},[47,93272,292],{"class":85},[47,93274,12528],{"class":221},[47,93276,298],{"class":85},[47,93278,12528],{"class":221},[47,93280,512],{"class":85},[47,93282,4750],{"class":221},[47,93284,93285],{"class":49,"line":1273},[47,93286,2493],{"emptyLinePlaceholder":145},[47,93288,93289,93291,93294],{"class":49,"line":1288},[47,93290,30469],{"class":85},[47,93292,93293],{"class":221},"(np.maximum(a, b))   ",[47,93295,93296],{"class":279},"# [3 5 4]，每个位置上取较大值\n",[14,93298,93300],{"id":93299},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,93302,93303],{},"①一维数组：",[38,93305,93307],{"className":30432,"code":93306,"language":30434,"meta":43,"style":43},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[26,93308,93309,93313,93333,93338],{"__ignoreMap":43},[47,93310,93311],{"class":49,"line":50},[47,93312,93159],{"class":279},[47,93314,93315,93317,93319,93321,93323,93325,93327,93329,93331],{"class":49,"line":92},[47,93316,457],{"class":221},[47,93318,267],{"class":217},[47,93320,93168],{"class":221},[47,93322,436],{"class":85},[47,93324,597],{"class":221},[47,93326,530],{"class":85},[47,93328,597],{"class":221},[47,93330,919],{"class":85},[47,93332,228],{"class":221},[47,93334,93335],{"class":49,"line":1273},[47,93336,93337],{"class":279},"#求平均值\n",[47,93339,93340],{"class":49,"line":1288},[47,93341,93342],{"class":221},"np.mean(a)\n",[19,93344,93345],{},"②二维数组",[38,93347,93349],{"className":30432,"code":93348,"language":30434,"meta":43,"style":43},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[26,93350,93351,93356,93381,93386],{"__ignoreMap":43},[47,93352,93353],{"class":49,"line":50},[47,93354,93355],{"class":279},"#二维数组\n",[47,93357,93358,93361,93363,93365,93367,93369,93371,93373,93375,93377,93379],{"class":49,"line":92},[47,93359,93360],{"class":221},"aa",[47,93362,267],{"class":217},[47,93364,93056],{"class":221},[47,93366,436],{"class":85},[47,93368,597],{"class":221},[47,93370,742],{"class":85},[47,93372,93061],{"class":221},[47,93374,292],{"class":85},[47,93376,597],{"class":221},[47,93378,512],{"class":85},[47,93380,228],{"class":221},[47,93382,93383],{"class":49,"line":1273},[47,93384,93385],{"class":279},"#对数组中的所有数求平均\n",[47,93387,93388],{"class":49,"line":1288},[47,93389,93390],{"class":221},"np.mean(aa)\n",[14,93392,93394],{"id":93393},"_114-median求中位数函数","11.4 median()求中位数函数",[38,93396,93398],{"className":30432,"code":93397,"language":30434,"meta":43,"style":43},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[26,93399,93400,93405,93421,93426],{"__ignoreMap":43},[47,93401,93402],{"class":49,"line":50},[47,93403,93404],{"class":279},"#求中位数\n",[47,93406,93407,93409,93411,93413,93415,93417,93419],{"class":49,"line":92},[47,93408,482],{"class":221},[47,93410,267],{"class":217},[47,93412,93056],{"class":221},[47,93414,436],{"class":85},[47,93416,597],{"class":221},[47,93418,665],{"class":85},[47,93420,228],{"class":221},[47,93422,93423],{"class":49,"line":1273},[47,93424,93425],{"class":221},"np.median(b)\n",[47,93427,93428],{"class":49,"line":1288},[47,93429,93430],{"class":279},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,93432,93434],{"id":93433},"_115-power求幂运算函数","11.5 power()求幂运算函数",[38,93436,93438],{"className":30432,"code":93437,"language":30434,"meta":43,"style":43},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[26,93439,93440,93456,93461,93466,93475,93480,93489],{"__ignoreMap":43},[47,93441,93442,93444,93446,93448,93450,93452,93454],{"class":49,"line":50},[47,93443,482],{"class":221},[47,93445,267],{"class":217},[47,93447,93056],{"class":221},[47,93449,436],{"class":85},[47,93451,597],{"class":221},[47,93453,665],{"class":85},[47,93455,228],{"class":221},[47,93457,93458],{"class":49,"line":92},[47,93459,93460],{"class":279},"#幂运算\n",[47,93462,93463],{"class":49,"line":1273},[47,93464,93465],{"class":279},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[47,93467,93468,93471,93473],{"class":49,"line":1288},[47,93469,93470],{"class":221},"np.power(b,",[47,93472,298],{"class":85},[47,93474,228],{"class":221},[47,93476,93477],{"class":49,"line":1294},[47,93478,93479],{"class":279},"#或者以下代码，将数据存储起来\n",[47,93481,93482,93484,93486],{"class":49,"line":1308},[47,93483,1064],{"class":221},[47,93485,267],{"class":217},[47,93487,93488],{"class":221},"np.empty_like(b)\n",[47,93490,93491,93493,93495,93497,93499,93501],{"class":49,"line":1314},[47,93492,93470],{"class":221},[47,93494,298],{"class":85},[47,93496,597],{"class":221},[47,93498,93108],{"class":5309},[47,93500,267],{"class":217},[47,93502,93503],{"class":221},"y)\n",[14,93505,93507],{"id":93506},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[38,93509,93511],{"className":30432,"code":93510,"language":30434,"meta":43,"style":43},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[26,93512,93513,93529,93534,93539,93543,93561],{"__ignoreMap":43},[47,93514,93515,93517,93519,93521,93523,93525,93527],{"class":49,"line":50},[47,93516,482],{"class":221},[47,93518,267],{"class":217},[47,93520,93056],{"class":221},[47,93522,436],{"class":85},[47,93524,597],{"class":221},[47,93526,665],{"class":85},[47,93528,228],{"class":221},[47,93530,93531],{"class":49,"line":92},[47,93532,93533],{"class":279},"#开方\n",[47,93535,93536],{"class":49,"line":1273},[47,93537,93538],{"class":221},"np.sqrt(b)\n",[47,93540,93541],{"class":49,"line":1288},[47,93542,93479],{"class":279},[47,93544,93545,93547,93549,93552,93555,93557,93559],{"class":49,"line":1294},[47,93546,1064],{"class":221},[47,93548,267],{"class":217},[47,93550,93551],{"class":221},"np.empty_like(b,",[47,93553,93554],{"class":5309},"dtype",[47,93556,267],{"class":217},[47,93558,261],{"class":85},[47,93560,228],{"class":221},[47,93562,93563,93566,93568,93570],{"class":49,"line":1308},[47,93564,93565],{"class":221},"np.sqrt(b,",[47,93567,93108],{"class":5309},[47,93569,267],{"class":217},[47,93571,93503],{"class":221},[14,93573,93575],{"id":93574},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,93577,93578],{},"对数组中的元素累计求和，可指定轴",[19,93580,93581],{},"#累计求和的意思是：",[19,93583,93584],{},"a = np.array([1, 2, 3, 4])",[19,93586,93587],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[38,93589,93591],{"className":30432,"code":93590,"language":30434,"meta":43,"style":43},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[26,93592,93593,93609,93614,93619],{"__ignoreMap":43},[47,93594,93595,93597,93599,93601,93603,93605,93607],{"class":49,"line":50},[47,93596,482],{"class":221},[47,93598,267],{"class":217},[47,93600,93056],{"class":221},[47,93602,436],{"class":85},[47,93604,597],{"class":221},[47,93606,665],{"class":85},[47,93608,228],{"class":221},[47,93610,93611],{"class":49,"line":92},[47,93612,93613],{"class":221},"np.cumsum(b)\n",[47,93615,93616],{"class":49,"line":1273},[47,93617,93618],{"class":279},"#结果：\n",[47,93620,93621],{"class":49,"line":1288},[47,93622,93623],{"class":279},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,93625,93627],{"id":93626},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[38,93629,93631],{"className":30432,"code":93630,"language":30434,"meta":43,"style":43},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[26,93632,93633,93649,93654,93659,93663],{"__ignoreMap":43},[47,93634,93635,93637,93639,93641,93643,93645,93647],{"class":49,"line":50},[47,93636,482],{"class":221},[47,93638,267],{"class":217},[47,93640,93056],{"class":221},[47,93642,436],{"class":85},[47,93644,597],{"class":221},[47,93646,665],{"class":85},[47,93648,228],{"class":221},[47,93650,93651],{"class":49,"line":92},[47,93652,93653],{"class":279},"#对数组中的元素累计求积，可指定轴\n",[47,93655,93656],{"class":49,"line":1273},[47,93657,93658],{"class":221},"np.cumprod(b)\n",[47,93660,93661],{"class":49,"line":1288},[47,93662,93618],{"class":279},[47,93664,93665],{"class":49,"line":1294},[47,93666,93667],{"class":279},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,93669,93671],{"id":93670},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[38,93673,93675],{"className":30432,"code":93674,"language":30434,"meta":43,"style":43},"#删除数组中的重复数据，并对数据进行排序\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",[26,93676,93677,93682,93730,93735,93739],{"__ignoreMap":43},[47,93678,93679],{"class":49,"line":50},[47,93680,93681],{"class":279},"#删除数组中的重复数据，并对数据进行排序\n",[47,93683,93684,93686,93688,93690,93692,93694,93696,93698,93700,93702,93704,93706,93708,93710,93712,93714,93716,93718,93720,93722,93724,93726,93728],{"class":49,"line":92},[47,93685,457],{"class":221},[47,93687,267],{"class":217},[47,93689,93078],{"class":221},[47,93691,436],{"class":85},[47,93693,597],{"class":221},[47,93695,298],{"class":85},[47,93697,597],{"class":221},[47,93699,292],{"class":85},[47,93701,597],{"class":221},[47,93703,717],{"class":85},[47,93705,597],{"class":221},[47,93707,292],{"class":85},[47,93709,597],{"class":221},[47,93711,665],{"class":85},[47,93713,597],{"class":221},[47,93715,417],{"class":85},[47,93717,597],{"class":221},[47,93719,411],{"class":85},[47,93721,597],{"class":221},[47,93723,994],{"class":85},[47,93725,597],{"class":221},[47,93727,512],{"class":85},[47,93729,4750],{"class":221},[47,93731,93732],{"class":49,"line":1273},[47,93733,93734],{"class":221},"np.unique(a)\n",[47,93736,93737],{"class":49,"line":1288},[47,93738,93618],{"class":279},[47,93740,93741],{"class":49,"line":1294},[47,93742,93743],{"class":279},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,93745,93746],{},"升序形式排序",[14,93748,93750],{"id":93749},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[38,93752,93754],{"className":30432,"code":93753,"language":30434,"meta":43,"style":43},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[26,93755,93756,93804,93809],{"__ignoreMap":43},[47,93757,93758,93760,93762,93764,93766,93768,93770,93772,93774,93776,93778,93780,93782,93784,93786,93788,93790,93792,93794,93796,93798,93800,93802],{"class":49,"line":50},[47,93759,457],{"class":221},[47,93761,267],{"class":217},[47,93763,93078],{"class":221},[47,93765,436],{"class":85},[47,93767,597],{"class":221},[47,93769,298],{"class":85},[47,93771,597],{"class":221},[47,93773,292],{"class":85},[47,93775,597],{"class":221},[47,93777,717],{"class":85},[47,93779,597],{"class":221},[47,93781,292],{"class":85},[47,93783,597],{"class":221},[47,93785,665],{"class":85},[47,93787,597],{"class":221},[47,93789,417],{"class":85},[47,93791,597],{"class":221},[47,93793,411],{"class":85},[47,93795,597],{"class":221},[47,93797,994],{"class":85},[47,93799,597],{"class":221},[47,93801,512],{"class":85},[47,93803,4750],{"class":221},[47,93805,93806],{"class":49,"line":92},[47,93807,93808],{"class":279},"#返回数组中非零元素的索引\n",[47,93810,93811],{"class":49,"line":1273},[47,93812,93813],{"class":221},"np.nonzero(a)\n",[14,93815,93817],{"id":93816},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[38,93819,93821],{"className":30432,"code":93820,"language":30434,"meta":43,"style":43},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[26,93822,93823,93871,93876],{"__ignoreMap":43},[47,93824,93825,93827,93829,93831,93833,93835,93837,93839,93841,93843,93845,93847,93849,93851,93853,93855,93857,93859,93861,93863,93865,93867,93869],{"class":49,"line":50},[47,93826,457],{"class":221},[47,93828,267],{"class":217},[47,93830,93078],{"class":221},[47,93832,436],{"class":85},[47,93834,597],{"class":221},[47,93836,298],{"class":85},[47,93838,597],{"class":221},[47,93840,292],{"class":85},[47,93842,597],{"class":221},[47,93844,717],{"class":85},[47,93846,597],{"class":221},[47,93848,292],{"class":85},[47,93850,597],{"class":221},[47,93852,665],{"class":85},[47,93854,597],{"class":221},[47,93856,417],{"class":85},[47,93858,597],{"class":221},[47,93860,411],{"class":85},[47,93862,597],{"class":221},[47,93864,994],{"class":85},[47,93866,597],{"class":221},[47,93868,512],{"class":85},[47,93870,4750],{"class":221},[47,93872,93873],{"class":49,"line":92},[47,93874,93875],{"class":279},"#计算一组数中最大值与最小值的差，可指定轴\n",[47,93877,93878],{"class":49,"line":1273},[47,93879,93880],{"class":221},"np.ptp(a)\n",[134,93882,93883],{},"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":43,"searchDepth":92,"depth":92,"links":93885},[93886,93887,93888,93889,93890,93891,93892,93893,93894,93895,93896],{"id":93148,"depth":92,"text":93149},{"id":93191,"depth":92,"text":93192},{"id":93299,"depth":92,"text":93300},{"id":93393,"depth":92,"text":93394},{"id":93433,"depth":92,"text":93434},{"id":93506,"depth":92,"text":93507},{"id":93574,"depth":92,"text":93575},{"id":93626,"depth":92,"text":93627},{"id":93670,"depth":92,"text":93671},{"id":93749,"depth":92,"text":93750},{"id":93816,"depth":92,"text":93817},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93134,"description":142},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":93903,"title":93904,"body":93905,"description":142,"extension":143,"meta":94560,"navigation":145,"path":94561,"seo":94562,"stem":94563,"__hash__":94564},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":93906,"toc":94548},[93907,93910,93914,93917,94133,94137,94140,94349,94353,94419,94424,94428,94431,94434,94472,94476,94479,94484,94488,94491,94494,94499,94503,94506,94510,94513,94516,94521,94525,94528,94531,94536,94540,94545],[10,93908,93904],{"id":93909},"_12其他常用函数",[14,93911,93913],{"id":93912},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,93915,93916],{},"将数组的数据按照行列复制扩展",[38,93918,93920],{"className":30432,"code":93919,"language":30434,"meta":43,"style":43},"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",[26,93921,93922,93938,93947,93951,93956,93961,93974,93978,93983,93988,93993,93997,94002,94026,94038,94042,94046,94051,94056,94061,94066,94070,94083,94087,94091,94096,94101,94106,94111,94116,94120,94124,94129],{"__ignoreMap":43},[47,93923,93924,93926,93928,93930,93932,93934,93936],{"class":49,"line":50},[47,93925,457],{"class":221},[47,93927,267],{"class":217},[47,93929,93056],{"class":221},[47,93931,436],{"class":85},[47,93933,597],{"class":221},[47,93935,538],{"class":85},[47,93937,228],{"class":221},[47,93939,93940,93943,93945],{"class":49,"line":92},[47,93941,93942],{"class":221},"np.tile(a,",[47,93944,298],{"class":85},[47,93946,228],{"class":221},[47,93948,93949],{"class":49,"line":1273},[47,93950,93618],{"class":279},[47,93952,93953],{"class":49,"line":1288},[47,93954,93955],{"class":279},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[47,93957,93958],{"class":49,"line":1294},[47,93959,93960],{"class":279},"#行复制两次，列复制三次\n",[47,93962,93963,93966,93968,93970,93972],{"class":49,"line":1308},[47,93964,93965],{"class":221},"np.tile(a,(",[47,93967,298],{"class":85},[47,93969,597],{"class":221},[47,93971,292],{"class":85},[47,93973,30551],{"class":221},[47,93975,93976],{"class":49,"line":1314},[47,93977,93618],{"class":279},[47,93979,93980],{"class":49,"line":1405},[47,93981,93982],{"class":81},"'''\n",[47,93984,93985],{"class":49,"line":1411},[47,93986,93987],{"class":81},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[47,93989,93990],{"class":49,"line":1423},[47,93991,93992],{"class":81},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[47,93994,93995],{"class":49,"line":1706},[47,93996,93982],{"class":81},[47,93998,93999],{"class":49,"line":1711},[47,94000,94001],{"class":279},"#创建二维数组\n",[47,94003,94004,94006,94008,94010,94012,94014,94016,94018,94020,94022,94024],{"class":49,"line":1717},[47,94005,93360],{"class":221},[47,94007,267],{"class":217},[47,94009,93056],{"class":221},[47,94011,436],{"class":85},[47,94013,597],{"class":221},[47,94015,742],{"class":85},[47,94017,93061],{"class":221},[47,94019,512],{"class":85},[47,94021,597],{"class":221},[47,94023,292],{"class":85},[47,94025,228],{"class":221},[47,94027,94028,94031,94033,94035],{"class":49,"line":1722},[47,94029,94030],{"class":221},"np.tile(aa,",[47,94032,298],{"class":85},[47,94034,648],{"class":221},[47,94036,94037],{"class":279},"#一个数的时候就是行\n",[47,94039,94040],{"class":49,"line":1736},[47,94041,93618],{"class":279},[47,94043,94044],{"class":49,"line":1741},[47,94045,93982],{"class":81},[47,94047,94048],{"class":49,"line":1747},[47,94049,94050],{"class":81},"array([[ 1,  2,  3,  1,  2,  3],\n",[47,94052,94053],{"class":49,"line":1768},[47,94054,94055],{"class":81},"       [ 4,  5,  6,  4,  5,  6],\n",[47,94057,94058],{"class":49,"line":1773},[47,94059,94060],{"class":81},"       [ 7,  8,  9,  7,  8,  9],\n",[47,94062,94063],{"class":49,"line":1787},[47,94064,94065],{"class":81},"       [10, 11, 12, 10, 11, 12]])\n",[47,94067,94068],{"class":49,"line":1792},[47,94069,93982],{"class":81},[47,94071,94072,94075,94077,94079,94081],{"class":49,"line":1821},[47,94073,94074],{"class":221},"np.tile(aa,(",[47,94076,298],{"class":85},[47,94078,597],{"class":221},[47,94080,292],{"class":85},[47,94082,30551],{"class":221},[47,94084,94085],{"class":49,"line":1826},[47,94086,93618],{"class":279},[47,94088,94089],{"class":49,"line":1843},[47,94090,93982],{"class":81},[47,94092,94093],{"class":49,"line":1848},[47,94094,94095],{"class":81},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[47,94097,94098],{"class":49,"line":1853},[47,94099,94100],{"class":81},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[47,94102,94103],{"class":49,"line":1858},[47,94104,94105],{"class":81},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[47,94107,94108],{"class":49,"line":1872},[47,94109,94110],{"class":81},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[47,94112,94113],{"class":49,"line":1877},[47,94114,94115],{"class":81},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[47,94117,94118],{"class":49,"line":2670},[47,94119,94100],{"class":81},[47,94121,94122],{"class":49,"line":2684},[47,94123,94105],{"class":81},[47,94125,94126],{"class":49,"line":2692},[47,94127,94128],{"class":81},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[47,94130,94131],{"class":49,"line":2697},[47,94132,93982],{"class":81},[14,94134,94136],{"id":94135},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,94138,94139],{},"repeat()将数组中的每个元素重复若干次",[38,94141,94143],{"className":30432,"code":94142,"language":30434,"meta":43,"style":43},"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",[26,94144,94145,94161,94170,94174,94179,94203,94208,94217,94221,94226,94230,94235,94251,94255,94259,94264,94269,94274,94278,94283,94287,94292,94297,94301,94317,94321,94325,94330,94335,94340,94345],{"__ignoreMap":43},[47,94146,94147,94149,94151,94153,94155,94157,94159],{"class":49,"line":50},[47,94148,457],{"class":221},[47,94150,267],{"class":217},[47,94152,93056],{"class":221},[47,94154,436],{"class":85},[47,94156,597],{"class":221},[47,94158,538],{"class":85},[47,94160,228],{"class":221},[47,94162,94163,94166,94168],{"class":49,"line":92},[47,94164,94165],{"class":221},"np.repeat(a,",[47,94167,292],{"class":85},[47,94169,228],{"class":221},[47,94171,94172],{"class":49,"line":1273},[47,94173,93618],{"class":279},[47,94175,94176],{"class":49,"line":1288},[47,94177,94178],{"class":279},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[47,94180,94181,94183,94185,94187,94189,94191,94193,94195,94197,94199,94201],{"class":49,"line":1294},[47,94182,93360],{"class":221},[47,94184,267],{"class":217},[47,94186,93056],{"class":221},[47,94188,436],{"class":85},[47,94190,597],{"class":221},[47,94192,742],{"class":85},[47,94194,93061],{"class":221},[47,94196,512],{"class":85},[47,94198,597],{"class":221},[47,94200,292],{"class":85},[47,94202,228],{"class":221},[47,94204,94205],{"class":49,"line":1308},[47,94206,94207],{"class":279},"#这个重复之后二维变成一维\n",[47,94209,94210,94213,94215],{"class":49,"line":1314},[47,94211,94212],{"class":221},"np.repeat(aa,",[47,94214,298],{"class":85},[47,94216,228],{"class":221},[47,94218,94219],{"class":49,"line":1405},[47,94220,93982],{"class":81},[47,94222,94223],{"class":49,"line":1411},[47,94224,94225],{"class":81},"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",[47,94227,94228],{"class":49,"line":1423},[47,94229,93982],{"class":81},[47,94231,94232],{"class":49,"line":1706},[47,94233,94234],{"class":279},"#指定axis\n",[47,94236,94237,94239,94241,94243,94245,94247,94249],{"class":49,"line":1711},[47,94238,94212],{"class":221},[47,94240,298],{"class":85},[47,94242,597],{"class":221},[47,94244,47568],{"class":5309},[47,94246,267],{"class":217},[47,94248,411],{"class":85},[47,94250,228],{"class":221},[47,94252,94253],{"class":49,"line":1717},[47,94254,93618],{"class":279},[47,94256,94257],{"class":49,"line":1722},[47,94258,93982],{"class":81},[47,94260,94261],{"class":49,"line":1736},[47,94262,94263],{"class":81},"array([[ 1,  2,  3],\n",[47,94265,94266],{"class":49,"line":1741},[47,94267,94268],{"class":81},"       [ 1,  2,  3],\n",[47,94270,94271],{"class":49,"line":1747},[47,94272,94273],{"class":81},"       [ 4,  5,  6],\n",[47,94275,94276],{"class":49,"line":1768},[47,94277,94273],{"class":81},[47,94279,94280],{"class":49,"line":1773},[47,94281,94282],{"class":81},"       [ 7,  8,  9],\n",[47,94284,94285],{"class":49,"line":1787},[47,94286,94282],{"class":81},[47,94288,94289],{"class":49,"line":1792},[47,94290,94291],{"class":81},"       [10, 11, 12],\n",[47,94293,94294],{"class":49,"line":1821},[47,94295,94296],{"class":81},"       [10, 11, 12]])\n",[47,94298,94299],{"class":49,"line":1826},[47,94300,93982],{"class":81},[47,94302,94303,94305,94307,94309,94311,94313,94315],{"class":49,"line":1843},[47,94304,94212],{"class":221},[47,94306,298],{"class":85},[47,94308,597],{"class":221},[47,94310,47568],{"class":5309},[47,94312,267],{"class":217},[47,94314,436],{"class":85},[47,94316,228],{"class":221},[47,94318,94319],{"class":49,"line":1848},[47,94320,93618],{"class":279},[47,94322,94323],{"class":49,"line":1853},[47,94324,93982],{"class":81},[47,94326,94327],{"class":49,"line":1858},[47,94328,94329],{"class":81},"array([[ 1,  1,  2,  2,  3,  3],\n",[47,94331,94332],{"class":49,"line":1872},[47,94333,94334],{"class":81},"       [ 4,  4,  5,  5,  6,  6],\n",[47,94336,94337],{"class":49,"line":1877},[47,94338,94339],{"class":81},"       [ 7,  7,  8,  8,  9,  9],\n",[47,94341,94342],{"class":49,"line":2670},[47,94343,94344],{"class":81},"       [10, 10, 11, 11, 12, 12]])\n",[47,94346,94347],{"class":49,"line":2684},[47,94348,93982],{"class":81},[14,94350,94352],{"id":94351},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[38,94354,94356],{"className":30432,"code":94355,"language":30434,"meta":43,"style":43},"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",[26,94357,94358,94374,94379,94391,94395,94400,94410,94414],{"__ignoreMap":43},[47,94359,94360,94362,94364,94366,94368,94370,94372],{"class":49,"line":50},[47,94361,457],{"class":221},[47,94363,267],{"class":217},[47,94365,93056],{"class":221},[47,94367,436],{"class":85},[47,94369,597],{"class":221},[47,94371,538],{"class":85},[47,94373,228],{"class":221},[47,94375,94376],{"class":49,"line":92},[47,94377,94378],{"class":279},"#array([，2，3，4])\n",[47,94380,94381,94384,94386,94388],{"class":49,"line":1273},[47,94382,94383],{"class":221},"np.roll(a,",[47,94385,298],{"class":85},[47,94387,648],{"class":221},[47,94389,94390],{"class":279},"#传正数向后调多少位，传负数向前调多少位\n",[47,94392,94393],{"class":49,"line":1288},[47,94394,93618],{"class":279},[47,94396,94397],{"class":49,"line":1294},[47,94398,94399],{"class":279},"#array([3, 4, 1, 2])\n",[47,94401,94402,94404,94406,94408],{"class":49,"line":1308},[47,94403,94383],{"class":221},[47,94405,751],{"class":217},[47,94407,436],{"class":85},[47,94409,228],{"class":221},[47,94411,94412],{"class":49,"line":1314},[47,94413,93618],{"class":279},[47,94415,94416],{"class":49,"line":1405},[47,94417,94418],{"class":279},"#array([2, 3, 4, 1])\n",[19,94420,94421],{},[1556,94422],{"alt":43,"src":94423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,94425,94427],{"id":94426},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,94429,94430],{},"resize()重新调整数组的大小",[19,94432,94433],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[38,94435,94437],{"className":30432,"code":94436,"language":30434,"meta":43,"style":43},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[26,94438,94439,94444,94457],{"__ignoreMap":43},[47,94440,94441],{"class":49,"line":50},[47,94442,94443],{"class":279},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[47,94445,94446,94449,94451,94453,94455],{"class":49,"line":92},[47,94447,94448],{"class":221},"np.resize(aa,(",[47,94450,298],{"class":85},[47,94452,597],{"class":221},[47,94454,563],{"class":85},[47,94456,30551],{"class":221},[47,94458,94459,94461,94463,94465,94467,94469],{"class":49,"line":1273},[47,94460,94448],{"class":221},[47,94462,298],{"class":85},[47,94464,597],{"class":221},[47,94466,639],{"class":85},[47,94468,82825],{"class":221},[47,94470,94471],{"class":279},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,94473,94475],{"id":94474},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,94477,94478],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,94480,94481],{},[1556,94482],{"alt":43,"src":94483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,94485,94487],{"id":94486},"_126-保存加载文件","12.6 保存加载文件",[19,94489,94490],{},"savetxt():将数据保存到txt文件中",[19,94492,94493],{},"loadtxt():从文件加载数据",[19,94495,94496],{},[1556,94497],{"alt":43,"src":94498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,94500,94502],{"id":94501},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,94504,94505],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,94507,94509],{"id":94508},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,94511,94512],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,94514,94515],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,94517,94518],{},[1556,94519],{"alt":43,"src":94520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,94522,94524],{"id":94523},"_129-where语句","12.9 where语句",[19,94526,94527],{},"np.where(条件,x,y)",[19,94529,94530],{},"如果条件为True,对应值为x,否则对应值为y",[19,94532,94533],{},[1556,94534],{"alt":43,"src":94535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,94537,94539],{"id":94538},"_1210-dot矩阵","12.10 dot()矩阵",[19,94541,94542],{},[1556,94543],{"alt":43,"src":94544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[134,94546,94547],{},"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":43,"searchDepth":92,"depth":92,"links":94549},[94550,94551,94552,94553,94554,94555,94556,94557,94558,94559],{"id":93912,"depth":92,"text":93913},{"id":94135,"depth":92,"text":94136},{"id":94351,"depth":92,"text":94352},{"id":94426,"depth":92,"text":94427},{"id":94474,"depth":92,"text":94475},{"id":94486,"depth":92,"text":94487},{"id":94501,"depth":92,"text":94502},{"id":94508,"depth":92,"text":94509},{"id":94523,"depth":92,"text":94524},{"id":94538,"depth":92,"text":94539},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":93904,"description":142},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94566,"title":94567,"body":94568,"description":142,"extension":143,"meta":94921,"navigation":145,"path":94922,"seo":94923,"stem":94924,"__hash__":94925},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94569,"toc":94919},[94570,94573,94576,94579,94582,94585,94650,94652,94916],[10,94571,94567],{"id":94572},"_13数组排序",[19,94574,94575],{},"排序主要用到的方法是np.sort和np.argsort",[19,94577,94578],{},"其中np.sort()对数组直接排序",[19,94580,94581],{},"而np.argsort()是返回排序后的原始索引",[19,94583,94584],{},"①一维数组",[38,94586,94588],{"className":30432,"code":94587,"language":30434,"meta":43,"style":43},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[26,94589,94590,94594,94634,94642],{"__ignoreMap":43},[47,94591,94592],{"class":49,"line":50},[47,94593,93159],{"class":279},[47,94595,94596,94598,94600,94602,94604,94606,94608,94610,94612,94614,94616,94618,94620,94622,94624,94626,94628,94630,94632],{"class":49,"line":92},[47,94597,457],{"class":221},[47,94599,267],{"class":217},[47,94601,93078],{"class":221},[47,94603,292],{"class":85},[47,94605,597],{"class":221},[47,94607,717],{"class":85},[47,94609,597],{"class":221},[47,94611,614],{"class":85},[47,94613,597],{"class":221},[47,94615,994],{"class":85},[47,94617,597],{"class":221},[47,94619,498],{"class":85},[47,94621,597],{"class":221},[47,94623,1112],{"class":85},[47,94625,597],{"class":221},[47,94627,563],{"class":85},[47,94629,597],{"class":221},[47,94631,665],{"class":85},[47,94633,4750],{"class":221},[47,94635,94636,94639],{"class":49,"line":1273},[47,94637,94638],{"class":221},"np.sort(a)",[47,94640,94641],{"class":279},"#升序排序\n",[47,94643,94644,94647],{"class":49,"line":1288},[47,94645,94646],{"class":221},"np.argsort(a)",[47,94648,94649],{"class":279},"#按照元素大小来索引排序\n",[19,94651,93345],{},[38,94653,94655],{"className":30432,"code":94654,"language":30434,"meta":43,"style":43},"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",[26,94656,94657,94669,94695,94700,94704,94709,94714,94719,94724,94728,94736,94740,94745,94750,94755,94760,94764,94769,94782,94786,94791,94796,94801,94806,94810,94815,94827,94831,94835,94839,94843,94847,94851,94856,94871,94876,94885,94890,94894,94898,94903,94907,94912],{"__ignoreMap":43},[47,94658,94659,94662,94664,94666],{"class":49,"line":50},[47,94660,94661],{"class":221},"np.random.seed(",[47,94663,411],{"class":85},[47,94665,648],{"class":221},[47,94667,94668],{"class":279},"#保证每次值一样\n",[47,94670,94671,94673,94675,94677,94679,94681,94683,94685,94687,94689,94691,94693],{"class":49,"line":92},[47,94672,93360],{"class":221},[47,94674,267],{"class":217},[47,94676,93168],{"class":221},[47,94678,530],{"class":85},[47,94680,597],{"class":221},[47,94682,31550],{"class":5309},[47,94684,267],{"class":217},[47,94686,222],{"class":221},[47,94688,512],{"class":85},[47,94690,597],{"class":221},[47,94692,563],{"class":85},[47,94694,30551],{"class":221},[47,94696,94697],{"class":49,"line":1273},[47,94698,94699],{"class":279},"#原数组：\n",[47,94701,94702],{"class":49,"line":1288},[47,94703,93982],{"class":81},[47,94705,94706],{"class":49,"line":1294},[47,94707,94708],{"class":81},"array([[44, 47, 64, 67, 67,  9],\n",[47,94710,94711],{"class":49,"line":1308},[47,94712,94713],{"class":81},"       [83, 21, 36, 87, 70, 88],\n",[47,94715,94716],{"class":49,"line":1314},[47,94717,94718],{"class":81},"       [88, 12, 58, 65, 39, 87],\n",[47,94720,94721],{"class":49,"line":1405},[47,94722,94723],{"class":81},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[47,94725,94726],{"class":49,"line":1411},[47,94727,93982],{"class":81},[47,94729,94730,94733],{"class":49,"line":1423},[47,94731,94732],{"class":221},"np.sort(aa)",[47,94734,94735],{"class":279},"#每行进行了排序\n",[47,94737,94738],{"class":49,"line":1706},[47,94739,93982],{"class":81},[47,94741,94742],{"class":49,"line":1711},[47,94743,94744],{"class":81},"array([[ 9, 44, 47, 64, 67, 67],\n",[47,94746,94747],{"class":49,"line":1717},[47,94748,94749],{"class":81},"       [21, 36, 70, 83, 87, 88],\n",[47,94751,94752],{"class":49,"line":1722},[47,94753,94754],{"class":81},"       [12, 39, 58, 65, 87, 88],\n",[47,94756,94757],{"class":49,"line":1736},[47,94758,94759],{"class":81},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[47,94761,94762],{"class":49,"line":1741},[47,94763,93982],{"class":81},[47,94765,94766],{"class":49,"line":1747},[47,94767,94768],{"class":279},"#axis=0时\n",[47,94770,94771,94774,94776,94778,94780],{"class":49,"line":1768},[47,94772,94773],{"class":221},"np.sort(aa,",[47,94775,47568],{"class":5309},[47,94777,267],{"class":217},[47,94779,411],{"class":85},[47,94781,228],{"class":221},[47,94783,94784],{"class":49,"line":1773},[47,94785,93982],{"class":81},[47,94787,94788],{"class":49,"line":1787},[47,94789,94790],{"class":81},"array([[44, 12, 36, 37, 25,  9],\n",[47,94792,94793],{"class":49,"line":1792},[47,94794,94795],{"class":81},"       [46, 21, 58, 65, 39, 77],\n",[47,94797,94798],{"class":49,"line":1821},[47,94799,94800],{"class":81},"       [83, 47, 64, 67, 67, 87],\n",[47,94802,94803],{"class":49,"line":1826},[47,94804,94805],{"class":81},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[47,94807,94808],{"class":49,"line":1843},[47,94809,93982],{"class":81},[47,94811,94812],{"class":49,"line":1848},[47,94813,94814],{"class":279},"#axis=1时,为默认值\n",[47,94816,94817,94819,94821,94823,94825],{"class":49,"line":1853},[47,94818,94773],{"class":221},[47,94820,47568],{"class":5309},[47,94822,267],{"class":217},[47,94824,436],{"class":85},[47,94826,228],{"class":221},[47,94828,94829],{"class":49,"line":1858},[47,94830,93982],{"class":81},[47,94832,94833],{"class":49,"line":1872},[47,94834,94744],{"class":81},[47,94836,94837],{"class":49,"line":1877},[47,94838,94749],{"class":81},[47,94840,94841],{"class":49,"line":2670},[47,94842,94754],{"class":81},[47,94844,94845],{"class":49,"line":2684},[47,94846,94759],{"class":81},[47,94848,94849],{"class":49,"line":2692},[47,94850,93982],{"class":81},[47,94852,94853],{"class":49,"line":2697},[47,94854,94855],{"class":279},"#按最后一列排序\n",[47,94857,94858,94860,94862,94865,94867,94869],{"class":49,"line":2703},[47,94859,482],{"class":221},[47,94861,267],{"class":217},[47,94863,94864],{"class":221},"aa[:,",[47,94866,751],{"class":217},[47,94868,436],{"class":85},[47,94870,33300],{"class":221},[47,94872,94873],{"class":49,"line":2709},[47,94874,94875],{"class":279},"#获取最后一列排好序的索引\n",[47,94877,94878,94880,94882],{"class":49,"line":2714},[47,94879,74112],{"class":221},[47,94881,267],{"class":217},[47,94883,94884],{"class":221},"np.argsort(b)\n",[47,94886,94887],{"class":49,"line":8041},[47,94888,94889],{"class":221},"aa[index]\n",[47,94891,94892],{"class":49,"line":8065},[47,94893,93982],{"class":81},[47,94895,94896],{"class":49,"line":8070},[47,94897,94708],{"class":81},[47,94899,94900],{"class":49,"line":8076},[47,94901,94902],{"class":81},"       [46, 88, 81, 37, 25, 77],\n",[47,94904,94905],{"class":49,"line":8103},[47,94906,94718],{"class":81},[47,94908,94909],{"class":49,"line":8108},[47,94910,94911],{"class":81},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[47,94913,94914],{"class":49,"line":8114},[47,94915,93982],{"class":81},[134,94917,94918],{},"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":43,"searchDepth":92,"depth":92,"links":94920},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94567,"description":142},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":94927,"title":94928,"body":94929,"description":142,"extension":143,"meta":94959,"navigation":145,"path":94960,"seo":94961,"stem":94962,"__hash__":94963},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":94930,"toc":94957},[94931,94934,94937,94940,94943,94946,94949,94952],[10,94932,94928],{"id":94933},"_14广播机制",[19,94935,94936],{},"广播的规则：",[19,94938,94939],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,94941,94942],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,94944,94945],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,94947,94948],{},"3.如果没有维度形状为1，则会引发异常",[19,94950,94951],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,94953,94954],{},[1556,94955],{"alt":43,"src":94956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":43,"searchDepth":92,"depth":92,"links":94958},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":94928,"description":142},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":94965,"title":94966,"body":94967,"description":142,"extension":143,"meta":95065,"navigation":145,"path":95066,"seo":95067,"stem":95068,"__hash__":95069},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":94968,"toc":95063},[94969,94972,94975,95060],[10,94970,94966],{"id":94971},"_15比较掩码",[19,94973,94974],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[38,94976,94978],{"className":30432,"code":94977,"language":30434,"meta":43,"style":43},"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",[26,94979,94980,95026,95037,95051,95055],{"__ignoreMap":43},[47,94981,94982,94984,94986,94989,94991,94993,94995,94997,94999,95001,95003,95005,95007,95009,95011,95013,95015,95017,95019,95021,95023],{"class":49,"line":50},[47,94983,457],{"class":221},[47,94985,267],{"class":217},[47,94987,94988],{"class":221},"np.array([[",[47,94990,436],{"class":85},[47,94992,597],{"class":221},[47,94994,298],{"class":85},[47,94996,597],{"class":221},[47,94998,292],{"class":85},[47,95000,48084],{"class":221},[47,95002,691],{"class":85},[47,95004,597],{"class":221},[47,95006,717],{"class":85},[47,95008,597],{"class":221},[47,95010,742],{"class":85},[47,95012,48084],{"class":221},[47,95014,944],{"class":85},[47,95016,597],{"class":221},[47,95018,969],{"class":85},[47,95020,597],{"class":221},[47,95022,994],{"class":85},[47,95024,95025],{"class":221},"]])\n",[47,95027,95028,95030,95032,95034],{"class":49,"line":92},[47,95029,457],{"class":221},[47,95031,1129],{"class":217},[47,95033,919],{"class":85},[47,95035,95036],{"class":279},"#结果是一个由True,False组成的数组\n",[47,95038,95039,95042,95044,95046,95048],{"class":49,"line":1273},[47,95040,95041],{"class":221},"a[a",[47,95043,1129],{"class":217},[47,95045,919],{"class":85},[47,95047,1159],{"class":221},[47,95049,95050],{"class":279},"#小于20的元素会存到这个数组中\n",[47,95052,95053],{"class":49,"line":1288},[47,95054,93618],{"class":279},[47,95056,95057],{"class":49,"line":1294},[47,95058,95059],{"class":279},"#array([ 1,  2,  3, 11, 12, 13])\n",[134,95061,95062],{},"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":43,"searchDepth":92,"depth":92,"links":95064},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":94966,"description":142},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95071,"title":95072,"body":95073,"description":142,"extension":143,"meta":95165,"navigation":145,"path":95166,"seo":95167,"stem":95168,"__hash__":95169},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95074,"toc":95163},[95075,95078,95081,95084,95087,95090,95155,95160],[10,95076,95072],{"id":95077},"_16魔法命令time",[19,95079,95080],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,95082,95083],{},"%:行模式",[19,95085,95086],{},"%%:单元格模式",[19,95088,95089],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[38,95091,95093],{"className":30432,"code":95092,"language":30434,"meta":43,"style":43},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[26,95094,95095,95100,95107,95112,95121,95134,95138,95146],{"__ignoreMap":43},[47,95096,95097],{"class":49,"line":50},[47,95098,95099],{"class":279},"#程序执行时间\n",[47,95101,95102,95104],{"class":49,"line":92},[47,95103,30446],{"class":217},[47,95105,95106],{"class":221}," time \n",[47,95108,95109],{"class":49,"line":1273},[47,95110,95111],{"class":279},"#获取时间\n",[47,95113,95114,95117,95119],{"class":49,"line":1288},[47,95115,95116],{"class":221},"start",[47,95118,267],{"class":217},[47,95120,32472],{"class":221},[47,95122,95123,95126,95129,95131],{"class":49,"line":1294},[47,95124,95125],{"class":221},"time.sleep(",[47,95127,95128],{"class":85},"0.4",[47,95130,648],{"class":221},[47,95132,95133],{"class":279},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[47,95135,95136],{"class":49,"line":1308},[47,95137,95111],{"class":279},[47,95139,95140,95142,95144],{"class":49,"line":1314},[47,95141,45855],{"class":221},[47,95143,267],{"class":217},[47,95145,32472],{"class":221},[47,95147,95148,95150,95152],{"class":49,"line":1405},[47,95149,45855],{"class":221},[47,95151,751],{"class":217},[47,95153,95154],{"class":221},"start\n",[19,95156,95157],{},[1556,95158],{"alt":43,"src":95159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[134,95161,95162],{},"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":43,"searchDepth":92,"depth":92,"links":95164},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95072,"description":142},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95171,"title":95172,"body":95173,"description":142,"extension":143,"meta":95208,"navigation":145,"path":95209,"seo":95210,"stem":95211,"__hash__":95212},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95174,"toc":95206},[95175,95178,95181,95184,95187,95190,95193,95196,95201],[10,95176,95172],{"id":95177},"_17魔法命令timeit",[19,95179,95180],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,95182,95183],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,95185,95186],{},"单元格模式：",[19,95188,95189],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,95191,95192],{},"初始化语句执行次数由轮数来决定",[19,95194,95195],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,95197,95198],{},[1556,95199],{"alt":43,"src":95200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,95202,95203],{},[1556,95204],{"alt":43,"src":95205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":43,"searchDepth":92,"depth":92,"links":95207},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95172,"description":142},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95214,"title":95215,"body":95216,"description":142,"extension":143,"meta":95234,"navigation":145,"path":95235,"seo":95236,"stem":95237,"__hash__":95238},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95217,"toc":95232},[95218,95221,95224,95227],[10,95219,95215],{"id":95220},"_18魔法命令writefile和run",[19,95222,95223],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,95225,95226],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,95228,95229],{},[1556,95230],{"alt":43,"src":95231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":43,"searchDepth":92,"depth":92,"links":95233},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95215,"description":142},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95240,"title":95241,"body":95242,"description":142,"extension":143,"meta":95295,"navigation":145,"path":95296,"seo":95297,"stem":95298,"__hash__":95299},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95243,"toc":95293},[95244,95247,95250,95252,95255,95258,95263,95266,95269,95272,95275,95278,95281,95284,95287,95290],[10,95245,95241],{"id":95246},"_19魔法命令memit",[19,95248,95249],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,95251,104],{},[19,95253,95254],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,95256,95257],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,95259,95260],{},[1556,95261],{"alt":43,"src":95262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,95264,95265],{},"补充：",[19,95267,95268],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,95270,95271],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,95273,95274],{},"解决方法：",[19,95276,95277],{},"1.cmd",[19,95279,95280],{},"2.依次输入以下代码：",[19,95282,95283],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,95285,95286],{},"pip install --upgrade ipython",[19,95288,95289],{},"#升级 memory_profiler 和 setuptools",[19,95291,95292],{},"pip install --upgrade memory_profiler setuptools",{"title":43,"searchDepth":92,"depth":92,"links":95294},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95241,"description":142},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95301,"title":95302,"body":95303,"description":142,"extension":143,"meta":96949,"navigation":145,"path":96950,"seo":96951,"stem":96952,"__hash__":96953},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95304,"toc":96919},[95305,95308,95312,95316,95377,95380,95385,95389,95394,95399,95404,95409,95412,95417,95421,95425,95458,95461,95464,95467,95519,95522,95558,95561,95603,95607,95628,95630,95667,95669,95674,95676,95681,95685,95688,95716,95720,95724,95777,95781,95873,95877,95881,95884,95889,95893,95918,95923,95927,95930,95933,95936,95939,95942,95945,95948,95960,95964,95968,95971,96003,96006,96029,96032,96058,96061,96087,96090,96124,96127,96189,96193,96196,96200,96203,96229,96232,96235,96240,96243,96312,96314,96319,96380,96383,96394,96400,96405,96409,96412,96425,96429,96444,96446,96469,96471,96497,96500,96503,96506,96554,96556,96561,96565,96569,96596,96600,96627,96630,96635,96640,96730,96734,96792,96797,96800,96803,96845,96849,96905,96910,96913,96916],[10,95306,95302],{"id":95307},"_2创建数组",[14,95309,95311],{"id":95310},"_21-array函数创建数组","2.1 array()函数创建数组",[187,95313,95315],{"id":95314},"_221-函数语句","2.2.1 函数语句",[38,95317,95319],{"className":30432,"code":95318,"language":30434,"meta":43,"style":43},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[26,95320,95321],{"__ignoreMap":43},[47,95322,95323,95326,95329,95331,95333,95335,95337,95339,95342,95344,95347,95349,95352,95354,95356,95358,95361,95363,95366,95368,95371,95373,95375],{"class":49,"line":50},[47,95324,95325],{"class":221},"numpy.array(",[47,95327,95328],{"class":85},"object",[47,95330,12528],{"class":221},[47,95332,93554],{"class":5309},[47,95334,13657],{"class":217},[47,95336,38987],{"class":85},[47,95338,12528],{"class":221},[47,95340,95341],{"class":5309},"copy",[47,95343,13657],{"class":217},[47,95345,95346],{"class":85}," True",[47,95348,12528],{"class":221},[47,95350,95351],{"class":5309},"order",[47,95353,13657],{"class":217},[47,95355,38987],{"class":85},[47,95357,12528],{"class":221},[47,95359,95360],{"class":5309},"subok",[47,95362,13657],{"class":217},[47,95364,95365],{"class":85}," False",[47,95367,12528],{"class":221},[47,95369,95370],{"class":5309},"ndmin",[47,95372,13657],{"class":217},[47,95374,4186],{"class":85},[47,95376,228],{"class":221},[19,95378,95379],{},"参数：",[19,95381,95382],{},[1556,95383],{"alt":43,"src":95384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[187,95386,95388],{"id":95387},"_222-实例","2.2.2 实例",[19,95390,95391],{},[1556,95392],{"alt":43,"src":95393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,95395,95396],{},[1556,95397],{"alt":43,"src":95398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,95400,95401],{},[1556,95402],{"alt":43,"src":95403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,95405,95406],{},[1556,95407],{"alt":43,"src":95408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,95410,95411],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,95413,95414],{},[1556,95415],{"alt":43,"src":95416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,95418,95420],{"id":95419},"_22-随机数创建数组","2.2 随机数创建数组",[187,95422,95424],{"id":95423},"_221-random语句","2.2.1 random语句",[38,95426,95428],{"className":30432,"code":95427,"language":30434,"meta":43,"style":43},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[26,95429,95430,95435,95440,95448,95453],{"__ignoreMap":43},[47,95431,95432],{"class":49,"line":50},[47,95433,95434],{"class":279},"#random.random()\n",[47,95436,95437],{"class":49,"line":92},[47,95438,95439],{"class":279},"#确定随机种子,就是每次运行结果是相同的\n",[47,95441,95442,95444,95446],{"class":49,"line":1273},[47,95443,94661],{"class":221},[47,95445,411],{"class":85},[47,95447,228],{"class":221},[47,95449,95450],{"class":49,"line":1288},[47,95451,95452],{"class":221},"np.random.random()\n",[47,95454,95455],{"class":49,"line":1294},[47,95456,95457],{"class":279},"#生成一个随机的数目\n",[19,95459,95460],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,95462,95463],{},"可以指定数组形状 size",[19,95465,95466],{},"①生成一维数组",[38,95468,95470],{"className":30432,"code":95469,"language":30434,"meta":43,"style":43},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[26,95471,95472,95477,95490,95495,95511],{"__ignoreMap":43},[47,95473,95474],{"class":49,"line":50},[47,95475,95476],{"class":279},"#random.random(size())\n",[47,95478,95479,95482,95484,95486,95488],{"class":49,"line":92},[47,95480,95481],{"class":221},"np.random.random(",[47,95483,31550],{"class":5309},[47,95485,267],{"class":217},[47,95487,538],{"class":85},[47,95489,228],{"class":221},[47,95491,95492],{"class":49,"line":1273},[47,95493,95494],{"class":279},"#生成一位的五个元素\n",[47,95496,95497,95499,95501,95503,95505,95507,95509],{"class":49,"line":1288},[47,95498,457],{"class":221},[47,95500,267],{"class":217},[47,95502,95481],{"class":221},[47,95504,31550],{"class":5309},[47,95506,267],{"class":217},[47,95508,512],{"class":85},[47,95510,228],{"class":221},[47,95512,95513,95516],{"class":49,"line":1294},[47,95514,95515],{"class":221},"a.shape ",[47,95517,95518],{"class":279},"#输出数组形状\n",[19,95520,95521],{},"②生成二维数组",[38,95523,95525],{"className":30432,"code":95524,"language":30434,"meta":43,"style":43},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[26,95526,95527,95531,95553],{"__ignoreMap":43},[47,95528,95529],{"class":49,"line":50},[47,95530,93355],{"class":279},[47,95532,95533,95535,95537,95539,95541,95543,95545,95547,95549,95551],{"class":49,"line":92},[47,95534,93360],{"class":221},[47,95536,267],{"class":217},[47,95538,95481],{"class":221},[47,95540,31550],{"class":5309},[47,95542,267],{"class":217},[47,95544,222],{"class":221},[47,95546,512],{"class":85},[47,95548,597],{"class":221},[47,95550,538],{"class":85},[47,95552,30551],{"class":221},[47,95554,95555],{"class":49,"line":1273},[47,95556,95557],{"class":279},"#生成四行五列的数组\n",[19,95559,95560],{},"③生成三维数组",[38,95562,95564],{"className":30432,"code":95563,"language":30434,"meta":43,"style":43},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[26,95565,95566,95571,95598],{"__ignoreMap":43},[47,95567,95568],{"class":49,"line":50},[47,95569,95570],{"class":279},"#三维数组\n",[47,95572,95573,95576,95578,95580,95582,95584,95586,95588,95590,95592,95594,95596],{"class":49,"line":92},[47,95574,95575],{"class":221},"aaa",[47,95577,267],{"class":217},[47,95579,95481],{"class":221},[47,95581,31550],{"class":5309},[47,95583,267],{"class":217},[47,95585,222],{"class":221},[47,95587,298],{"class":85},[47,95589,597],{"class":221},[47,95591,292],{"class":85},[47,95593,597],{"class":221},[47,95595,512],{"class":85},[47,95597,30551],{"class":221},[47,95599,95600],{"class":49,"line":1273},[47,95601,95602],{"class":221},"aaa.shape\n",[187,95604,95606],{"id":95605},"_222-randint语句","2.2.2 randint语句",[38,95608,95610],{"className":30432,"code":95609,"language":30434,"meta":43,"style":43},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[26,95611,95612,95617],{"__ignoreMap":43},[47,95613,95614],{"class":49,"line":50},[47,95615,95616],{"class":279},"#生成随机的整数 random.randint(low,high,size)\n",[47,95618,95619,95621,95623,95625],{"class":49,"line":92},[47,95620,93168],{"class":221},[47,95622,538],{"class":85},[47,95624,13807],{"class":221},[47,95626,95627],{"class":279},"#0~5中的随机一个数\n",[19,95629,95466],{},[38,95631,95633],{"className":30432,"code":95632,"language":30434,"meta":43,"style":43},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[26,95634,95635,95640,95662],{"__ignoreMap":43},[47,95636,95637],{"class":49,"line":50},[47,95638,95639],{"class":279},"#一维\n",[47,95641,95642,95644,95646,95648,95650,95652,95654,95656,95658,95660],{"class":49,"line":92},[47,95643,93168],{"class":221},[47,95645,436],{"class":85},[47,95647,597],{"class":221},[47,95649,691],{"class":85},[47,95651,597],{"class":221},[47,95653,31550],{"class":5309},[47,95655,267],{"class":217},[47,95657,222],{"class":221},[47,95659,665],{"class":85},[47,95661,30551],{"class":221},[47,95663,95664],{"class":49,"line":1273},[47,95665,95666],{"class":279},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,95668,95521],{},[19,95670,95671],{},[1556,95672],{"alt":43,"src":95673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,95675,95560],{},[19,95677,95678],{},[1556,95679],{"alt":43,"src":95680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[187,95682,95684],{"id":95683},"_222-rand语句","2.2.2 rand语句",[19,95686,95687],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[38,95689,95691],{"className":30432,"code":95690,"language":30434,"meta":43,"style":43},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[26,95692,95693,95706,95711],{"__ignoreMap":43},[47,95694,95695,95698,95700,95702,95704],{"class":49,"line":50},[47,95696,95697],{"class":221},"np.random.rand(",[47,95699,530],{"class":85},[47,95701,597],{"class":221},[47,95703,665],{"class":85},[47,95705,228],{"class":221},[47,95707,95708],{"class":49,"line":92},[47,95709,95710],{"class":279},"#第一个参数100：行数，表示有100个样本\n",[47,95712,95713],{"class":49,"line":1273},[47,95714,95715],{"class":279},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,95717,95719],{"id":95718},"_23-arange创建数组","2.3 arange()创建数组",[187,95721,95723],{"id":95722},"_231-函数语句","2.3.1 函数语句",[38,95725,95727],{"className":30432,"code":95726,"language":30434,"meta":43,"style":43},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[26,95728,95729,95743,95748,95753,95758,95763,95768,95773],{"__ignoreMap":43},[47,95730,95731,95734,95736,95738,95741],{"class":49,"line":50},[47,95732,95733],{"class":221},"numpy.arange([start,] stop[, step], ",[47,95735,93554],{"class":5309},[47,95737,267],{"class":217},[47,95739,95740],{"class":85},"None",[47,95742,228],{"class":221},[47,95744,95745],{"class":49,"line":92},[47,95746,95747],{"class":279},"#参数\n",[47,95749,95750],{"class":49,"line":1273},[47,95751,95752],{"class":81},"\"\"\"\n",[47,95754,95755],{"class":49,"line":1288},[47,95756,95757],{"class":81},"start:起始值，可选，默认从 0 开始。\n",[47,95759,95760],{"class":49,"line":1294},[47,95761,95762],{"class":81},"stop:结束值（不包含该值）。\n",[47,95764,95765],{"class":49,"line":1308},[47,95766,95767],{"class":81},"step:步长，可选，默认是 1。可以为浮点数。\n",[47,95769,95770],{"class":49,"line":1314},[47,95771,95772],{"class":81},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[47,95774,95775],{"class":49,"line":1405},[47,95776,95752],{"class":81},[187,95778,95780],{"id":95779},"_232-实例","2.3.2 实例",[38,95782,95784],{"className":30432,"code":95783,"language":30434,"meta":43,"style":43},"#创建一维数组\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",[26,95785,95786,95790,95814,95819,95824,95828,95851,95855,95859,95864,95869],{"__ignoreMap":43},[47,95787,95788],{"class":49,"line":50},[47,95789,93159],{"class":279},[47,95791,95792,95794,95796,95798,95800,95802,95804,95806,95808,95810,95812],{"class":49,"line":92},[47,95793,93056],{"class":221},[47,95795,436],{"class":85},[47,95797,597],{"class":221},[47,95799,944],{"class":85},[47,95801,597],{"class":221},[47,95803,436],{"class":85},[47,95805,597],{"class":221},[47,95807,93554],{"class":5309},[47,95809,267],{"class":217},[47,95811,225],{"class":85},[47,95813,228],{"class":221},[47,95815,95816],{"class":49,"line":1273},[47,95817,95818],{"class":279},"#输出结果：\n",[47,95820,95821],{"class":49,"line":1288},[47,95822,95823],{"class":279},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[47,95825,95826],{"class":49,"line":1294},[47,95827,94001],{"class":279},[47,95829,95830,95833,95835,95837,95839,95842,95844,95846,95848],{"class":49,"line":1308},[47,95831,95832],{"class":221},"np.array([np.arange(",[47,95834,436],{"class":85},[47,95836,597],{"class":221},[47,95838,512],{"class":85},[47,95840,95841],{"class":221},"),np.arange(",[47,95843,512],{"class":85},[47,95845,597],{"class":221},[47,95847,588],{"class":85},[47,95849,95850],{"class":221},")])\n",[47,95852,95853],{"class":49,"line":1314},[47,95854,93618],{"class":279},[47,95856,95857],{"class":49,"line":1405},[47,95858,95752],{"class":81},[47,95860,95861],{"class":49,"line":1411},[47,95862,95863],{"class":81},"array([[1, 2, 3],\n",[47,95865,95866],{"class":49,"line":1423},[47,95867,95868],{"class":81},"       [4, 5, 6]])\n",[47,95870,95871],{"class":49,"line":1706},[47,95872,95752],{"class":81},[14,95874,95876],{"id":95875},"_24-生态分布","2.4 生态分布",[187,95878,95880],{"id":95879},"_241-标准正态分布","2.4.1 标准正态分布",[19,95882,95883],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,95885,95886],{},[1556,95887],{"alt":43,"src":95888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[187,95890,95892],{"id":95891},"_242-常规正态分布","2.4.2 常规正态分布",[38,95894,95896],{"className":30432,"code":95895,"language":30434,"meta":43,"style":43},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[26,95897,95898,95903,95908,95913],{"__ignoreMap":43},[47,95899,95900],{"class":49,"line":50},[47,95901,95902],{"class":221},"random.normal(loc,scale,size)也可以生成正态分布\n",[47,95904,95905],{"class":49,"line":92},[47,95906,95907],{"class":279},"#loc:期望\n",[47,95909,95910],{"class":49,"line":1273},[47,95911,95912],{"class":279},"#scale:方差\n",[47,95914,95915],{"class":49,"line":1288},[47,95916,95917],{"class":279},"#size:用于确定是几维的数列\n",[19,95919,95920],{},[1556,95921],{"alt":43,"src":95922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,95924,95926],{"id":95925},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,95928,95929],{},"ndim:秩，维度个数",[19,95931,95932],{},"size:数组元素的个数",[19,95934,95935],{},"shape:数组的形状",[19,95937,95938],{},"dtype:数组元素的类型",[19,95940,95941],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,95943,95944],{},"他们都是属性，通过数组.属性的形式来确定",[19,95946,95947],{},"如果需要输出多个可以通过以下方式：",[38,95949,95951],{"className":30432,"code":95950,"language":30434,"meta":43,"style":43},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[26,95952,95953],{"__ignoreMap":43},[47,95954,95955,95957],{"class":49,"line":50},[47,95956,30469],{"class":85},[47,95958,95959],{"class":221},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,95961,95963],{"id":95962},"_26-其他方式创建数组","2.6 其他方式创建数组",[187,95965,95967],{"id":95966},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,95969,95970],{},"①创建一维数组",[38,95972,95974],{"className":30432,"code":95973,"language":30434,"meta":43,"style":43},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[26,95975,95976,95985,95989,95994,95999],{"__ignoreMap":43},[47,95977,95978,95981,95983],{"class":49,"line":50},[47,95979,95980],{"class":221},"np.zeros(",[47,95982,665],{"class":85},[47,95984,228],{"class":221},[47,95986,95987],{"class":49,"line":92},[47,95988,95752],{"class":81},[47,95990,95991],{"class":49,"line":1273},[47,95992,95993],{"class":81},"输出结果：\n",[47,95995,95996],{"class":49,"line":1288},[47,95997,95998],{"class":81},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[47,96000,96001],{"class":49,"line":1294},[47,96002,95752],{"class":81},[19,96004,96005],{},"上方代码等价于：",[38,96007,96009],{"className":30432,"code":96008,"language":30434,"meta":43,"style":43},"np.zeros(shape=(10))#创建10个元素的0数组\n",[26,96010,96011],{"__ignoreMap":43},[47,96012,96013,96015,96018,96020,96022,96024,96026],{"class":49,"line":50},[47,96014,95980],{"class":221},[47,96016,96017],{"class":5309},"shape",[47,96019,267],{"class":217},[47,96021,222],{"class":221},[47,96023,665],{"class":85},[47,96025,82825],{"class":221},[47,96027,96028],{"class":279},"#创建10个元素的0数组\n",[19,96030,96031],{},"也可以指定类型",[38,96033,96035],{"className":30432,"code":96034,"language":30434,"meta":43,"style":43},"#指定类型\nnp.zeros(5,dtype=int)\n",[26,96036,96037,96042],{"__ignoreMap":43},[47,96038,96039],{"class":49,"line":50},[47,96040,96041],{"class":279},"#指定类型\n",[47,96043,96044,96046,96048,96050,96052,96054,96056],{"class":49,"line":92},[47,96045,95980],{"class":221},[47,96047,538],{"class":85},[47,96049,597],{"class":221},[47,96051,93554],{"class":5309},[47,96053,267],{"class":217},[47,96055,225],{"class":85},[47,96057,228],{"class":221},[19,96059,96060],{},"②创建二维数组",[38,96062,96064],{"className":30432,"code":96063,"language":30434,"meta":43,"style":43},"np.zeros((3,4),dtype=int)\n",[26,96065,96066],{"__ignoreMap":43},[47,96067,96068,96071,96073,96075,96077,96079,96081,96083,96085],{"class":49,"line":50},[47,96069,96070],{"class":221},"np.zeros((",[47,96072,292],{"class":85},[47,96074,597],{"class":221},[47,96076,512],{"class":85},[47,96078,42310],{"class":221},[47,96080,93554],{"class":5309},[47,96082,267],{"class":217},[47,96084,225],{"class":85},[47,96086,228],{"class":221},[19,96088,96089],{},"③创建三维数组",[38,96091,96093],{"className":30432,"code":96092,"language":30434,"meta":43,"style":43},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[26,96094,96095,96100],{"__ignoreMap":43},[47,96096,96097],{"class":49,"line":50},[47,96098,96099],{"class":279},"#创建三维数组\n",[47,96101,96102,96104,96106,96108,96110,96112,96114,96116,96118,96120,96122],{"class":49,"line":92},[47,96103,96070],{"class":221},[47,96105,292],{"class":85},[47,96107,597],{"class":221},[47,96109,512],{"class":85},[47,96111,597],{"class":221},[47,96113,538],{"class":85},[47,96115,42310],{"class":221},[47,96117,93554],{"class":5309},[47,96119,267],{"class":217},[47,96121,225],{"class":85},[47,96123,228],{"class":221},[19,96125,96126],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[38,96128,96130],{"className":30432,"code":96129,"language":30434,"meta":43,"style":43},"#使用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",[26,96131,96132,96137,96152,96157,96162,96184],{"__ignoreMap":43},[47,96133,96134],{"class":49,"line":50},[47,96135,96136],{"class":279},"#使用zeros_like将创建的一维数组变成全0的数组\n",[47,96138,96139,96141,96143,96145,96147,96149],{"class":49,"line":92},[47,96140,457],{"class":221},[47,96142,267],{"class":217},[47,96144,93056],{"class":221},[47,96146,512],{"class":85},[47,96148,648],{"class":221},[47,96150,96151],{"class":279},"#这个得到的结果：一维数组0，1，2，3\n",[47,96153,96154],{"class":49,"line":1273},[47,96155,96156],{"class":221},"np.zeros_like(a)\n",[47,96158,96159],{"class":49,"line":1288},[47,96160,96161],{"class":279},"#使用zeros_like将创建的二维数组变成全0的数组\n",[47,96163,96164,96166,96168,96170,96172,96174,96176,96178,96180,96182],{"class":49,"line":1294},[47,96165,93360],{"class":221},[47,96167,267],{"class":217},[47,96169,95481],{"class":221},[47,96171,31550],{"class":5309},[47,96173,267],{"class":217},[47,96175,222],{"class":221},[47,96177,512],{"class":85},[47,96179,597],{"class":221},[47,96181,538],{"class":85},[47,96183,30551],{"class":221},[47,96185,96186],{"class":49,"line":1308},[47,96187,96188],{"class":221},"np.zeros_like(aa)\n",[187,96190,96192],{"id":96191},"_262-ones创建数组","2.6.2 ones()创建数组",[19,96194,96195],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[187,96197,96199],{"id":96198},"_263-empty创建数组","2.6.3 empty()创建数组",[19,96201,96202],{},"①empty()用法",[38,96204,96206],{"className":30432,"code":96205,"language":30434,"meta":43,"style":43},"numpy.empty(shape,dtype=float,order='c')\n",[26,96207,96208],{"__ignoreMap":43},[47,96209,96210,96213,96215,96217,96219,96221,96223,96225,96227],{"class":49,"line":50},[47,96211,96212],{"class":221},"numpy.empty(shape,",[47,96214,93554],{"class":5309},[47,96216,267],{"class":217},[47,96218,261],{"class":85},[47,96220,597],{"class":221},[47,96222,95351],{"class":5309},[47,96224,267],{"class":217},[47,96226,76082],{"class":81},[47,96228,228],{"class":221},[19,96230,96231],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,96233,96234],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,96236,96237],{},[1556,96238],{"alt":43,"src":96239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,96241,96242],{},"②empty()用法",[38,96244,96246],{"className":30432,"code":96245,"language":30434,"meta":43,"style":43},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[26,96247,96248,96269,96281,96302,96307],{"__ignoreMap":43},[47,96249,96250,96252,96254,96257,96259,96261,96263,96265,96267],{"class":49,"line":50},[47,96251,1064],{"class":221},[47,96253,267],{"class":217},[47,96255,96256],{"class":221},"np.empty(",[47,96258,665],{"class":85},[47,96260,597],{"class":221},[47,96262,93554],{"class":5309},[47,96264,267],{"class":217},[47,96266,225],{"class":85},[47,96268,228],{"class":221},[47,96270,96271,96273,96275,96277,96279],{"class":49,"line":92},[47,96272,1039],{"class":221},[47,96274,267],{"class":217},[47,96276,93056],{"class":221},[47,96278,538],{"class":85},[47,96280,228],{"class":221},[47,96282,96283,96286,96288,96291,96293,96295,96298,96300],{"class":49,"line":1273},[47,96284,96285],{"class":221},"np.add(",[47,96287,298],{"class":85},[47,96289,96290],{"class":221},",x,",[47,96292,93108],{"class":5309},[47,96294,267],{"class":217},[47,96296,96297],{"class":221},"y[:",[47,96299,538],{"class":85},[47,96301,4750],{"class":221},[47,96303,96304],{"class":49,"line":1288},[47,96305,96306],{"class":279},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[47,96308,96309],{"class":49,"line":1294},[47,96310,96311],{"class":221},"y\n",[19,96313,11607],{},[19,96315,96316],{},[1556,96317],{"alt":43,"src":96318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[38,96320,96322],{"className":30432,"code":96321,"language":30434,"meta":43,"style":43},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[26,96323,96324,96340,96360,96375],{"__ignoreMap":43},[47,96325,96326,96328,96330,96332,96334,96336,96338],{"class":49,"line":50},[47,96327,1039],{"class":221},[47,96329,267],{"class":217},[47,96331,93056],{"class":221},[47,96333,436],{"class":85},[47,96335,597],{"class":221},[47,96337,563],{"class":85},[47,96339,228],{"class":221},[47,96341,96342,96344,96346,96348,96350,96352,96354,96356,96358],{"class":49,"line":92},[47,96343,1064],{"class":221},[47,96345,267],{"class":217},[47,96347,96256],{"class":221},[47,96349,538],{"class":85},[47,96351,597],{"class":221},[47,96353,93554],{"class":5309},[47,96355,267],{"class":217},[47,96357,225],{"class":85},[47,96359,228],{"class":221},[47,96361,96362,96365,96367,96369,96371,96373],{"class":49,"line":1273},[47,96363,96364],{"class":221},"np.add(x,",[47,96366,298],{"class":85},[47,96368,597],{"class":221},[47,96370,93108],{"class":5309},[47,96372,267],{"class":217},[47,96374,93503],{"class":221},[47,96376,96377],{"class":49,"line":1288},[47,96378,96379],{"class":279},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,96381,96382],{},"③empty_like()",[19,96384,96385],{},[369,96386,96387,96388,96393],{},"创建一个",[369,96389,96390],{},[369,96391,96392],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,96395,96396,96399],{},[26,96397,96398],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,96401,96402],{},[1556,96403],{"alt":43,"src":96404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[187,96406,96408],{"id":96407},"_264-用法","2.6.4 ？？用法",[19,96410,96411],{},"当想查看一个函数的参数时，可以通过？？来实现",[38,96413,96415],{"className":30432,"code":96414,"language":30434,"meta":43,"style":43},"np.full??\n",[26,96416,96417],{"__ignoreMap":43},[47,96418,96419,96422],{"class":49,"line":50},[47,96420,96421],{"class":221},"np.full",[47,96423,96424],{"class":77457},"??\n",[187,96426,96428],{"id":96427},"_265-full创建数组","2.6.5 full()创建数组",[38,96430,96432],{"className":30432,"code":96431,"language":30434,"meta":43,"style":43},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[26,96433,96434,96439],{"__ignoreMap":43},[47,96435,96436],{"class":49,"line":50},[47,96437,96438],{"class":221},"full(shape,fill_value)\n",[47,96440,96441],{"class":49,"line":92},[47,96442,96443],{"class":221},"创建全为某个指定值的数组\n",[19,96445,94584],{},[38,96447,96449],{"className":30432,"code":96448,"language":30434,"meta":43,"style":43},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[26,96450,96451,96456],{"__ignoreMap":43},[47,96452,96453],{"class":49,"line":50},[47,96454,96455],{"class":279},"#创建一个一维数组,以20进行填充\n",[47,96457,96458,96461,96463,96465,96467],{"class":49,"line":92},[47,96459,96460],{"class":221},"np.full(",[47,96462,665],{"class":85},[47,96464,597],{"class":221},[47,96466,919],{"class":85},[47,96468,228],{"class":221},[19,96470,93345],{},[38,96472,96474],{"className":30432,"code":96473,"language":30434,"meta":43,"style":43},"#创建二维数组\nnp.full((3,5),11)\n",[26,96475,96476,96480],{"__ignoreMap":43},[47,96477,96478],{"class":49,"line":50},[47,96479,94001],{"class":279},[47,96481,96482,96485,96487,96489,96491,96493,96495],{"class":49,"line":92},[47,96483,96484],{"class":221},"np.full((",[47,96486,292],{"class":85},[47,96488,597],{"class":221},[47,96490,538],{"class":85},[47,96492,42310],{"class":221},[47,96494,691],{"class":85},[47,96496,228],{"class":221},[19,96498,96499],{},"③full_like用法",[19,96501,96502],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,96504,96505],{},"这里是指定填充而已",[38,96507,96509],{"className":30432,"code":96508,"language":30434,"meta":43,"style":43},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[26,96510,96511,96516,96540,96545],{"__ignoreMap":43},[47,96512,96513],{"class":49,"line":50},[47,96514,96515],{"class":279},"#创建一个指定形状数组\n",[47,96517,96518,96520,96522,96524,96526,96528,96530,96532,96534,96536,96538],{"class":49,"line":92},[47,96519,457],{"class":221},[47,96521,267],{"class":217},[47,96523,93056],{"class":221},[47,96525,436],{"class":85},[47,96527,597],{"class":221},[47,96529,544],{"class":85},[47,96531,93061],{"class":221},[47,96533,512],{"class":85},[47,96535,597],{"class":221},[47,96537,639],{"class":85},[47,96539,228],{"class":221},[47,96541,96542],{"class":49,"line":1273},[47,96543,96544],{"class":279},"#进行指定填充\n",[47,96546,96547,96550,96552],{"class":49,"line":1288},[47,96548,96549],{"class":221},"np.full_like(a,",[47,96551,665],{"class":85},[47,96553,228],{"class":221},[19,96555,11607],{},[19,96557,96558],{},[1556,96559],{"alt":43,"src":96560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[187,96562,96564],{"id":96563},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22091,96566,96568],{"id":96567},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[38,96570,96572],{"className":30432,"code":96571,"language":30434,"meta":43,"style":43},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[26,96573,96574,96591],{"__ignoreMap":43},[47,96575,96576,96579,96581,96583,96585,96587,96589],{"class":49,"line":50},[47,96577,96578],{"class":221},"np.eye(",[47,96580,512],{"class":85},[47,96582,597],{"class":221},[47,96584,93554],{"class":5309},[47,96586,267],{"class":217},[47,96588,225],{"class":85},[47,96590,228],{"class":221},[47,96592,96593],{"class":49,"line":92},[47,96594,96595],{"class":279},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22091,96597,96599],{"id":96598},"_2662-法2identity","2.6.6.2 法2：identity()",[38,96601,96603],{"className":30432,"code":96602,"language":30434,"meta":43,"style":43},"#identity()\nnp.identity(5,dtype=int)\n",[26,96604,96605,96610],{"__ignoreMap":43},[47,96606,96607],{"class":49,"line":50},[47,96608,96609],{"class":279},"#identity()\n",[47,96611,96612,96615,96617,96619,96621,96623,96625],{"class":49,"line":92},[47,96613,96614],{"class":221},"np.identity(",[47,96616,538],{"class":85},[47,96618,597],{"class":221},[47,96620,93554],{"class":5309},[47,96622,267],{"class":217},[47,96624,225],{"class":85},[47,96626,228],{"class":221},[19,96628,96629],{},"两个函数是有区别的",[19,96631,96632],{},[1556,96633],{"alt":43,"src":96634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,96636,96637],{},[1556,96638],{"alt":43,"src":96639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[38,96641,96643],{"className":30432,"code":96642,"language":30434,"meta":43,"style":43},"# 创建一个 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",[26,96644,96645,96650,96662,96667,96672,96677,96682,96686,96691,96711,96715,96720,96725],{"__ignoreMap":43},[47,96646,96647],{"class":49,"line":50},[47,96648,96649],{"class":279},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[47,96651,96652,96654,96656,96658,96660],{"class":49,"line":92},[47,96653,96578],{"class":221},[47,96655,292],{"class":85},[47,96657,12528],{"class":221},[47,96659,512],{"class":85},[47,96661,228],{"class":221},[47,96663,96664],{"class":49,"line":1273},[47,96665,96666],{"class":279},"# 输出:\n",[47,96668,96669],{"class":49,"line":1288},[47,96670,96671],{"class":279},"# [[1. 0. 0. 0.]\n",[47,96673,96674],{"class":49,"line":1294},[47,96675,96676],{"class":279},"#  [0. 1. 0. 0.]\n",[47,96678,96679],{"class":49,"line":1308},[47,96680,96681],{"class":279},"#  [0. 0. 1. 0.]]\n",[47,96683,96684],{"class":49,"line":1314},[47,96685,2493],{"emptyLinePlaceholder":145},[47,96687,96688],{"class":49,"line":1405},[47,96689,96690],{"class":279},"# 对角线向上偏移1\n",[47,96692,96693,96695,96697,96699,96701,96703,96705,96707,96709],{"class":49,"line":1411},[47,96694,96578],{"class":221},[47,96696,292],{"class":85},[47,96698,12528],{"class":221},[47,96700,512],{"class":85},[47,96702,12528],{"class":221},[47,96704,712],{"class":5309},[47,96706,267],{"class":217},[47,96708,436],{"class":85},[47,96710,228],{"class":221},[47,96712,96713],{"class":49,"line":1423},[47,96714,96666],{"class":279},[47,96716,96717],{"class":49,"line":1706},[47,96718,96719],{"class":279},"# [[0. 1. 0. 0.]\n",[47,96721,96722],{"class":49,"line":1711},[47,96723,96724],{"class":279},"#  [0. 0. 1. 0.]\n",[47,96726,96727],{"class":49,"line":1717},[47,96728,96729],{"class":279},"#  [0. 0. 0. 1.]]\n",[187,96731,96733],{"id":96732},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[38,96735,96737],{"className":30432,"code":96736,"language":30434,"meta":43,"style":43},"#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",[26,96738,96739,96744,96748,96753,96758,96763,96768,96773,96778,96783,96788],{"__ignoreMap":43},[47,96740,96741],{"class":49,"line":50},[47,96742,96743],{"class":279},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[47,96745,96746],{"class":49,"line":92},[47,96747,95752],{"class":81},[47,96749,96750],{"class":49,"line":1273},[47,96751,96752],{"class":81},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[47,96754,96755],{"class":49,"line":1288},[47,96756,96757],{"class":81},"参数介绍：\n",[47,96759,96760],{"class":49,"line":1294},[47,96761,96762],{"class":81},"start：序列的起始值\n",[47,96764,96765],{"class":49,"line":1308},[47,96766,96767],{"class":81},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[47,96769,96770],{"class":49,"line":1314},[47,96771,96772],{"class":81},"num：要生长的等步长的样本数量，默认为50\n",[47,96774,96775],{"class":49,"line":1405},[47,96776,96777],{"class":81},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[47,96779,96780],{"class":49,"line":1411},[47,96781,96782],{"class":81},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[47,96784,96785],{"class":49,"line":1423},[47,96786,96787],{"class":81},"dtype：ndarry的数据类型\n",[47,96789,96790],{"class":49,"line":1706},[47,96791,95752],{"class":81},[19,96793,96794],{},[1556,96795],{"alt":43,"src":96796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,96798,96799],{},"这里num=是可以省略的",[19,96801,96802],{},"也就是下方两行代码结果是一模一样的",[38,96804,96806],{"className":30432,"code":96805,"language":30434,"meta":43,"style":43},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[26,96807,96808,96825],{"__ignoreMap":43},[47,96809,96810,96813,96815,96817,96819,96821,96823],{"class":49,"line":50},[47,96811,96812],{"class":221},"np.linspace(",[47,96814,436],{"class":85},[47,96816,597],{"class":221},[47,96818,538],{"class":85},[47,96820,597],{"class":221},[47,96822,538],{"class":85},[47,96824,228],{"class":221},[47,96826,96827,96829,96831,96833,96835,96837,96839,96841,96843],{"class":49,"line":92},[47,96828,96812],{"class":221},[47,96830,436],{"class":85},[47,96832,597],{"class":221},[47,96834,538],{"class":85},[47,96836,597],{"class":221},[47,96838,1759],{"class":5309},[47,96840,267],{"class":217},[47,96842,538],{"class":85},[47,96844,228],{"class":221},[187,96846,96848],{"id":96847},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[38,96850,96852],{"className":30432,"code":96851,"language":30434,"meta":43,"style":43},"#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",[26,96853,96854,96859,96863,96868,96873,96878,96883,96887,96892,96897,96901],{"__ignoreMap":43},[47,96855,96856],{"class":49,"line":50},[47,96857,96858],{"class":279},"#logspace函数用于创建一个等比数列，格式如下：\n",[47,96860,96861],{"class":49,"line":92},[47,96862,95752],{"class":81},[47,96864,96865],{"class":49,"line":1273},[47,96866,96867],{"class":81},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[47,96869,96870],{"class":49,"line":1288},[47,96871,96872],{"class":81},"参数为：\n",[47,96874,96875],{"class":49,"line":1294},[47,96876,96877],{"class":81},"start:序列的起始位置为：base**start\n",[47,96879,96880],{"class":49,"line":1308},[47,96881,96882],{"class":81},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[47,96884,96885],{"class":49,"line":1314},[47,96886,96772],{"class":81},[47,96888,96889],{"class":49,"line":1405},[47,96890,96891],{"class":81},"endpoint：是否包含 stop 这个值，默认是 True\n",[47,96893,96894],{"class":49,"line":1411},[47,96895,96896],{"class":81},"base：对数的底数，默认是 10（常见对数）\n",[47,96898,96899],{"class":49,"line":1423},[47,96900,96787],{"class":81},[47,96902,96903],{"class":49,"line":1706},[47,96904,95752],{"class":81},[19,96906,96907],{},[1556,96908],{"alt":43,"src":96909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,96911,96912],{},"logspace()函数中的num参数也是可以不写num=的",[19,96914,96915],{},"endpoint是不可以省略的",[134,96917,96918],{},"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":43,"searchDepth":92,"depth":92,"links":96920},[96921,96925,96930,96934,96938,96939],{"id":95310,"depth":92,"text":95311,"children":96922},[96923,96924],{"id":95314,"depth":1273,"text":95315},{"id":95387,"depth":1273,"text":95388},{"id":95419,"depth":92,"text":95420,"children":96926},[96927,96928,96929],{"id":95423,"depth":1273,"text":95424},{"id":95605,"depth":1273,"text":95606},{"id":95683,"depth":1273,"text":95684},{"id":95718,"depth":92,"text":95719,"children":96931},[96932,96933],{"id":95722,"depth":1273,"text":95723},{"id":95779,"depth":1273,"text":95780},{"id":95875,"depth":92,"text":95876,"children":96935},[96936,96937],{"id":95879,"depth":1273,"text":95880},{"id":95891,"depth":1273,"text":95892},{"id":95925,"depth":92,"text":95926},{"id":95962,"depth":92,"text":95963,"children":96940},[96941,96942,96943,96944,96945,96946,96947,96948],{"id":95966,"depth":1273,"text":95967},{"id":96191,"depth":1273,"text":96192},{"id":96198,"depth":1273,"text":96199},{"id":96407,"depth":1273,"text":96408},{"id":96427,"depth":1273,"text":96428},{"id":96563,"depth":1273,"text":96564},{"id":96732,"depth":1273,"text":96733},{"id":96847,"depth":1273,"text":96848},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95302,"description":142},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":96955,"title":96956,"body":96957,"description":142,"extension":143,"meta":97050,"navigation":145,"path":97051,"seo":97052,"stem":97053,"__hash__":97054},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":96958,"toc":97048},[96959,96962,96965,96968,96971,96974,96977,96980,96983,96986,96989,96992,96994,96997,97000,97005,97008,97011,97045],[10,96960,96956],{"id":96961},"_20魔法命令mprun",[19,96963,96964],{},"逐行分析数据内存的使用情况",[19,96966,96967],{},"语法格式：",[19,96969,96970],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,96972,96973],{},"分析结果列如下：",[19,96975,96976],{},"Line行号",[19,96978,96979],{},"Mem usage内存使用大小",[19,96981,96982],{},"increment内存增量",[19,96984,96985],{},"Line content代码内容",[19,96987,96988],{},"补充说明：",[19,96990,96991],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,96993,95257],{},[19,96995,96996],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,96998,96999],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,97001,97002],{},[1556,97003],{"alt":43,"src":97004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,97006,97007],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,97009,97010],{},"这时候需要重新加载模块",[38,97012,97014],{"className":30432,"code":97013,"language":30434,"meta":43,"style":43},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[26,97015,97016,97021,97028,97033],{"__ignoreMap":43},[47,97017,97018],{"class":49,"line":50},[47,97019,97020],{"class":279},"#重新加载模块\n",[47,97022,97023,97025],{"class":49,"line":92},[47,97024,30446],{"class":217},[47,97026,97027],{"class":221}," importlib\n",[47,97029,97030],{"class":49,"line":1273},[47,97031,97032],{"class":221},"importlib.reload(mprun_test)\n",[47,97034,97035,97037,97040,97042],{"class":49,"line":1288},[47,97036,547],{"class":217},[47,97038,97039],{"class":221},"mprun ",[47,97041,751],{"class":217},[47,97043,97044],{"class":221},"f mprun_test.fun_test mprun_test.fun_test()\n",[134,97046,97047],{},"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":43,"searchDepth":92,"depth":92,"links":97049},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":96956,"description":142},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97056,"title":97057,"body":97058,"description":142,"extension":143,"meta":97075,"navigation":145,"path":97076,"seo":97077,"stem":97078,"__hash__":97079},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97059,"toc":97073},[97060,97063,97068],[10,97061,97057],{"id":97062},"_3一维数组的索引和切片",[19,97064,97065],{},[1556,97066],{"alt":43,"src":97067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,97069,97070],{},[1556,97071],{"alt":43,"src":97072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":43,"searchDepth":92,"depth":92,"links":97074},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97057,"description":142},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97081,"title":97082,"body":97083,"description":142,"extension":143,"meta":97566,"navigation":145,"path":97567,"seo":97568,"stem":97569,"__hash__":97570},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97084,"toc":97564},[97085,97088,97091,97096,97129,97132,97170,97173,97207,97210,97315,97318,97355,97358,97459,97462,97513,97516,97558,97561],[10,97086,97082],{"id":97087},"_4二维数组的索引与切片",[19,97089,97090],{},"①获取指定单个元素",[19,97092,97093],{},[1556,97094],{"alt":43,"src":97095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[38,97097,97099],{"className":30432,"code":97098,"language":30434,"meta":43,"style":43},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[26,97100,97101,97106,97111,97116],{"__ignoreMap":43},[47,97102,97103],{"class":49,"line":50},[47,97104,97105],{"class":279},"#获取元素9\n",[47,97107,97108],{"class":49,"line":92},[47,97109,97110],{"class":279},"#先获取所在行，再获取所在列\n",[47,97112,97113],{"class":49,"line":1273},[47,97114,97115],{"class":279},"#数组[行索引号，列索引号]\n",[47,97117,97118,97121,97123,97125,97127],{"class":49,"line":1288},[47,97119,97120],{"class":221},"a[",[47,97122,436],{"class":85},[47,97124,597],{"class":221},[47,97126,298],{"class":85},[47,97128,33300],{"class":221},[19,97130,97131],{},"②获取整行元素",[38,97133,97135],{"className":30432,"code":97134,"language":30434,"meta":43,"style":43},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[26,97136,97137,97142,97147,97155,97160],{"__ignoreMap":43},[47,97138,97139],{"class":49,"line":50},[47,97140,97141],{"class":279},"#获取整行 数组[行索引号]\n",[47,97143,97144],{"class":49,"line":92},[47,97145,97146],{"class":279},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[47,97148,97149,97151,97153],{"class":49,"line":1273},[47,97150,97120],{"class":221},[47,97152,298],{"class":85},[47,97154,33300],{"class":221},[47,97156,97157],{"class":49,"line":1288},[47,97158,97159],{"class":279},"#也可以负索引获取一行\n",[47,97161,97162,97164,97166,97168],{"class":49,"line":1294},[47,97163,97120],{"class":221},[47,97165,751],{"class":217},[47,97167,436],{"class":85},[47,97169,33300],{"class":221},[19,97171,97172],{},"③获取整列元素",[38,97174,97176],{"className":30432,"code":97175,"language":30434,"meta":43,"style":43},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[26,97177,97178,97183,97192,97197],{"__ignoreMap":43},[47,97179,97180],{"class":49,"line":50},[47,97181,97182],{"class":279},"#获取整列 数组名[:,列索引]\n",[47,97184,97185,97188,97190],{"class":49,"line":92},[47,97186,97187],{"class":221},"a[:,",[47,97189,298],{"class":85},[47,97191,33300],{"class":221},[47,97193,97194],{"class":49,"line":1273},[47,97195,97196],{"class":279},"#也可以负索引获取一列\n",[47,97198,97199,97201,97203,97205],{"class":49,"line":1288},[47,97200,97187],{"class":221},[47,97202,751],{"class":217},[47,97204,436],{"class":85},[47,97206,33300],{"class":221},[19,97208,97209],{},"④部分行部分列的元素",[38,97211,97213],{"className":30432,"code":97212,"language":30434,"meta":43,"style":43},"#部分行部分列 数组名[行切片，列切片]\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",[26,97214,97215,97220,97230,97234,97238,97243,97248,97252,97264,97268,97272,97277,97282,97287,97292,97296,97301],{"__ignoreMap":43},[47,97216,97217],{"class":49,"line":50},[47,97218,97219],{"class":279},"#部分行部分列 数组名[行切片，列切片]\n",[47,97221,97222,97225,97227],{"class":49,"line":92},[47,97223,97224],{"class":221},"a[:",[47,97226,298],{"class":85},[47,97228,97229],{"class":221},",:]\n",[47,97231,97232],{"class":49,"line":1273},[47,97233,93618],{"class":279},[47,97235,97236],{"class":49,"line":1288},[47,97237,93982],{"class":81},[47,97239,97240],{"class":49,"line":1294},[47,97241,97242],{"class":81},"array([[ 1,  2,  3,  4,  5,  6],\n",[47,97244,97245],{"class":49,"line":1308},[47,97246,97247],{"class":81},"       [ 7,  8,  9, 10, 11, 12]])\n",[47,97249,97250],{"class":49,"line":1314},[47,97251,93982],{"class":81},[47,97253,97254,97256,97258,97260,97262],{"class":49,"line":1405},[47,97255,97187],{"class":221},[47,97257,436],{"class":85},[47,97259,1078],{"class":221},[47,97261,512],{"class":85},[47,97263,33300],{"class":221},[47,97265,97266],{"class":49,"line":1411},[47,97267,93618],{"class":279},[47,97269,97270],{"class":49,"line":1423},[47,97271,93982],{"class":81},[47,97273,97274],{"class":49,"line":1706},[47,97275,97276],{"class":81},"array([[ 2,  3,  4],\n",[47,97278,97279],{"class":49,"line":1711},[47,97280,97281],{"class":81},"       [ 8,  9, 10],\n",[47,97283,97284],{"class":49,"line":1717},[47,97285,97286],{"class":81},"       [14, 15, 16],\n",[47,97288,97289],{"class":49,"line":1722},[47,97290,97291],{"class":81},"       [20, 21, 22]])\n",[47,97293,97294],{"class":49,"line":1736},[47,97295,93982],{"class":81},[47,97297,97298],{"class":49,"line":1741},[47,97299,97300],{"class":279},"#对列行同时进行切片，使用了step参数\n",[47,97302,97303,97306,97308,97311,97313],{"class":49,"line":1747},[47,97304,97305],{"class":221},"a[::",[47,97307,298],{"class":85},[47,97309,97310],{"class":221},",::",[47,97312,298],{"class":85},[47,97314,33300],{"class":221},[19,97316,97317],{},"⑤同时获取两个元素",[38,97319,97321],{"className":30432,"code":97320,"language":30434,"meta":43,"style":43},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[26,97322,97323,97328,97333],{"__ignoreMap":43},[47,97324,97325],{"class":49,"line":50},[47,97326,97327],{"class":279},"#同时获取第三行第二列，第四行第一列\n",[47,97329,97330],{"class":49,"line":92},[47,97331,97332],{"class":279},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[47,97334,97335,97338,97340,97342,97344,97346,97348,97350,97352],{"class":49,"line":1273},[47,97336,97337],{"class":221},"a[(",[47,97339,298],{"class":85},[47,97341,597],{"class":221},[47,97343,292],{"class":85},[47,97345,42301],{"class":221},[47,97347,436],{"class":85},[47,97349,597],{"class":221},[47,97351,411],{"class":85},[47,97353,97354],{"class":221},")]\n",[19,97356,97357],{},"⑥切片，对行进行反向获取",[38,97359,97361],{"className":30432,"code":97360,"language":30434,"meta":43,"style":43},"#切片 对所有行进行反向获取\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",[26,97362,97363,97368,97378,97382,97386,97391,97396,97401,97406,97410,97415,97431,97435,97440,97445,97450,97455],{"__ignoreMap":43},[47,97364,97365],{"class":49,"line":50},[47,97366,97367],{"class":279},"#切片 对所有行进行反向获取\n",[47,97369,97370,97372,97374,97376],{"class":49,"line":92},[47,97371,97305],{"class":221},[47,97373,751],{"class":217},[47,97375,436],{"class":85},[47,97377,33300],{"class":221},[47,97379,97380],{"class":49,"line":1273},[47,97381,93618],{"class":279},[47,97383,97384],{"class":49,"line":1288},[47,97385,93982],{"class":81},[47,97387,97388],{"class":49,"line":1294},[47,97389,97390],{"class":81},"array([[19, 20, 21, 22, 23, 24],\n",[47,97392,97393],{"class":49,"line":1308},[47,97394,97395],{"class":81},"       [13, 14, 15, 16, 17, 18],\n",[47,97397,97398],{"class":49,"line":1314},[47,97399,97400],{"class":81},"       [ 7,  8,  9, 10, 11, 12],\n",[47,97402,97403],{"class":49,"line":1405},[47,97404,97405],{"class":81},"       [ 1,  2,  3,  4,  5,  6]])\n",[47,97407,97408],{"class":49,"line":1411},[47,97409,93982],{"class":81},[47,97411,97412],{"class":49,"line":1423},[47,97413,97414],{"class":279},"#对行列都进行反向切片获取\n",[47,97416,97417,97419,97421,97423,97425,97427,97429],{"class":49,"line":1706},[47,97418,97305],{"class":221},[47,97420,751],{"class":217},[47,97422,436],{"class":85},[47,97424,97310],{"class":221},[47,97426,751],{"class":217},[47,97428,436],{"class":85},[47,97430,33300],{"class":221},[47,97432,97433],{"class":49,"line":1711},[47,97434,93982],{"class":81},[47,97436,97437],{"class":49,"line":1717},[47,97438,97439],{"class":81},"array([[24, 23, 22, 21, 20, 19],\n",[47,97441,97442],{"class":49,"line":1722},[47,97443,97444],{"class":81},"       [18, 17, 16, 15, 14, 13],\n",[47,97446,97447],{"class":49,"line":1736},[47,97448,97449],{"class":81},"       [12, 11, 10,  9,  8,  7],\n",[47,97451,97452],{"class":49,"line":1741},[47,97453,97454],{"class":81},"       [ 6,  5,  4,  3,  2,  1]])\n",[47,97456,97457],{"class":49,"line":1747},[47,97458,93982],{"class":81},[19,97460,97461],{},"⑦修改元素",[38,97463,97465],{"className":30432,"code":97464,"language":30434,"meta":43,"style":43},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[26,97466,97467,97472,97490,97495],{"__ignoreMap":43},[47,97468,97469],{"class":49,"line":50},[47,97470,97471],{"class":279},"#获取前两行和前两列\n",[47,97473,97474,97477,97479,97481,97483,97486,97488],{"class":49,"line":92},[47,97475,97476],{"class":221},"sub_a",[47,97478,267],{"class":217},[47,97480,97224],{"class":221},[47,97482,298],{"class":85},[47,97484,97485],{"class":221},",:",[47,97487,298],{"class":85},[47,97489,33300],{"class":221},[47,97491,97492],{"class":49,"line":1273},[47,97493,97494],{"class":279},"#修改sub_a第一个元素的值\n",[47,97496,97497,97500,97502,97504,97506,97508,97510],{"class":49,"line":1288},[47,97498,97499],{"class":221},"sub_a[",[47,97501,411],{"class":85},[47,97503,597],{"class":221},[47,97505,411],{"class":85},[47,97507,1159],{"class":221},[47,97509,267],{"class":217},[47,97511,97512],{"class":85},"100\n",[19,97514,97515],{},"⑧数组复制copy()",[38,97517,97519],{"className":30432,"code":97518,"language":30434,"meta":43,"style":43},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[26,97520,97521,97526,97536,97541],{"__ignoreMap":43},[47,97522,97523],{"class":49,"line":50},[47,97524,97525],{"class":279},"#数组复制\n",[47,97527,97528,97531,97533],{"class":49,"line":92},[47,97529,97530],{"class":221},"copy_a",[47,97532,267],{"class":217},[47,97534,97535],{"class":221},"np.copy(sub_a)\n",[47,97537,97538],{"class":49,"line":1273},[47,97539,97540],{"class":279},"#修改copy_a后不影响原数组\n",[47,97542,97543,97546,97548,97550,97552,97554,97556],{"class":49,"line":1288},[47,97544,97545],{"class":221},"copy_a[",[47,97547,411],{"class":85},[47,97549,597],{"class":221},[47,97551,411],{"class":85},[47,97553,1159],{"class":221},[47,97555,267],{"class":217},[47,97557,97512],{"class":85},[19,97559,97560],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[134,97562,97563],{},"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":43,"searchDepth":92,"depth":92,"links":97565},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97082,"description":142},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97572,"title":97573,"body":97574,"description":142,"extension":143,"meta":98066,"navigation":145,"path":98067,"seo":98068,"stem":98069,"__hash__":98070},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97575,"toc":98058},[97576,97579,97583,97586,97589,97642,97645,97670,97673,97692,97712,97715,97731,97735,97781,97785,97827,97831,97834,97837,97840,97843,97846,97908,97968,97972,97975,98032,98036,98041,98050,98055],[10,97577,97573],{"id":97578},"_5改变数组的维度",[14,97580,97582],{"id":97581},"_51-使用reshape","5.1 使用reshape()",[19,97584,97585],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,97587,97588],{},"①一维数组转换为二维数组",[38,97590,97592],{"className":30432,"code":97591,"language":30434,"meta":43,"style":43},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[26,97593,97594,97610,97615,97620,97625],{"__ignoreMap":43},[47,97595,97596,97598,97600,97602,97604,97606,97608],{"class":49,"line":50},[47,97597,457],{"class":221},[47,97599,267],{"class":217},[47,97601,93056],{"class":221},[47,97603,436],{"class":85},[47,97605,597],{"class":221},[47,97607,742],{"class":85},[47,97609,228],{"class":221},[47,97611,97612],{"class":49,"line":92},[47,97613,97614],{"class":279},"#将一维数组进行转换\n",[47,97616,97617],{"class":49,"line":1273},[47,97618,97619],{"class":279},"#注意点：元素个数不可以变\n",[47,97621,97622],{"class":49,"line":1288},[47,97623,97624],{"class":279},"#转换维度要保持一致，不一致就异常！！！\n",[47,97626,97627,97629,97631,97634,97636,97638,97640],{"class":49,"line":1294},[47,97628,93360],{"class":221},[47,97630,267],{"class":217},[47,97632,97633],{"class":221},"a.reshape(",[47,97635,298],{"class":85},[47,97637,597],{"class":221},[47,97639,563],{"class":85},[47,97641,228],{"class":221},[19,97643,97644],{},"②一维数组转换为三维数组",[38,97646,97648],{"className":30432,"code":97647,"language":30434,"meta":43,"style":43},"aaa=a.reshape(2,3,2)\n",[26,97649,97650],{"__ignoreMap":43},[47,97651,97652,97654,97656,97658,97660,97662,97664,97666,97668],{"class":49,"line":50},[47,97653,95575],{"class":221},[47,97655,267],{"class":217},[47,97657,97633],{"class":221},[47,97659,298],{"class":85},[47,97661,597],{"class":221},[47,97663,292],{"class":85},[47,97665,597],{"class":221},[47,97667,298],{"class":85},[47,97669,228],{"class":221},[19,97671,97672],{},"③二维数组转化为一维数组",[38,97674,97676],{"className":30432,"code":97675,"language":30434,"meta":43,"style":43},"#知道元素个数：\naa.reshape(12)\n",[26,97677,97678,97683],{"__ignoreMap":43},[47,97679,97680],{"class":49,"line":50},[47,97681,97682],{"class":279},"#知道元素个数：\n",[47,97684,97685,97688,97690],{"class":49,"line":92},[47,97686,97687],{"class":221},"aa.reshape(",[47,97689,717],{"class":85},[47,97691,228],{"class":221},[38,97693,97695],{"className":30432,"code":97694,"language":30434,"meta":43,"style":43},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[26,97696,97697,97702],{"__ignoreMap":43},[47,97698,97699],{"class":49,"line":50},[47,97700,97701],{"class":279},"#不知道元素个数，参数传递-1\n",[47,97703,97704,97706,97708,97710],{"class":49,"line":92},[47,97705,97687],{"class":221},[47,97707,751],{"class":217},[47,97709,436],{"class":85},[47,97711,228],{"class":221},[19,97713,97714],{},"④三维数组转换为一维数组",[38,97716,97718],{"className":30432,"code":97717,"language":30434,"meta":43,"style":43},"aaa.reshape(-1)\n",[26,97719,97720],{"__ignoreMap":43},[47,97721,97722,97725,97727,97729],{"class":49,"line":50},[47,97723,97724],{"class":221},"aaa.reshape(",[47,97726,751],{"class":217},[47,97728,436],{"class":85},[47,97730,228],{"class":221},[14,97732,97734],{"id":97733},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[38,97736,97738],{"className":30432,"code":97737,"language":30434,"meta":43,"style":43},"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",[26,97739,97740,97767,97772,97776],{"__ignoreMap":43},[47,97741,97742,97744,97746,97748,97750,97752,97754,97756,97758,97760,97762,97764],{"class":49,"line":50},[47,97743,93360],{"class":221},[47,97745,267],{"class":217},[47,97747,93056],{"class":221},[47,97749,436],{"class":85},[47,97751,597],{"class":221},[47,97753,742],{"class":85},[47,97755,93061],{"class":221},[47,97757,298],{"class":85},[47,97759,597],{"class":221},[47,97761,563],{"class":85},[47,97763,648],{"class":221},[47,97765,97766],{"class":279},"#转换为2行6列的数组\n",[47,97768,97769],{"class":49,"line":92},[47,97770,97771],{"class":221},"aa.revel()\n",[47,97773,97774],{"class":49,"line":1273},[47,97775,93618],{"class":279},[47,97777,97778],{"class":49,"line":1288},[47,97779,97780],{"class":279},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,97782,97784],{"id":97783},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[38,97786,97788],{"className":30432,"code":97787,"language":30434,"meta":43,"style":43},"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",[26,97789,97790,97814,97819,97823],{"__ignoreMap":43},[47,97791,97792,97794,97796,97798,97800,97802,97804,97806,97808,97810,97812],{"class":49,"line":50},[47,97793,93360],{"class":221},[47,97795,267],{"class":217},[47,97797,93056],{"class":221},[47,97799,436],{"class":85},[47,97801,597],{"class":221},[47,97803,742],{"class":85},[47,97805,93061],{"class":221},[47,97807,298],{"class":85},[47,97809,597],{"class":221},[47,97811,563],{"class":85},[47,97813,228],{"class":221},[47,97815,97816],{"class":49,"line":92},[47,97817,97818],{"class":221},"aa.flatten()\n",[47,97820,97821],{"class":49,"line":1273},[47,97822,93618],{"class":279},[47,97824,97825],{"class":49,"line":1288},[47,97826,97780],{"class":279},[14,97828,97830],{"id":97829},"_54-使用resize","5.4 使用resize()",[19,97832,97833],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,97835,97836],{},"通过resize方法可以改变数组的维度",[19,97838,97839],{},"#resize修改数组维度",[19,97841,97842],{},"#以元组的形式指定形状",[19,97844,97845],{},"#改变的是原数组",[38,97847,97849],{"className":30432,"code":97848,"language":30434,"meta":43,"style":43},"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",[26,97850,97851,97867,97887,97900,97904],{"__ignoreMap":43},[47,97852,97853,97855,97857,97859,97861,97863,97865],{"class":49,"line":50},[47,97854,457],{"class":221},[47,97856,267],{"class":217},[47,97858,93056],{"class":221},[47,97860,436],{"class":85},[47,97862,597],{"class":221},[47,97864,742],{"class":85},[47,97866,228],{"class":221},[47,97868,97869,97872,97874,97876,97878,97880,97882,97884],{"class":49,"line":92},[47,97870,97871],{"class":221},"a.shape",[47,97873,267],{"class":217},[47,97875,222],{"class":221},[47,97877,298],{"class":85},[47,97879,597],{"class":221},[47,97881,563],{"class":85},[47,97883,648],{"class":221},[47,97885,97886],{"class":279},"#改变了原数组\n",[47,97888,97889,97891,97893,97896,97898],{"class":49,"line":1273},[47,97890,457],{"class":221},[47,97892,267],{"class":217},[47,97894,97895],{"class":221},"resize((",[47,97897,717],{"class":85},[47,97899,30551],{"class":221},[47,97901,97902],{"class":49,"line":1288},[47,97903,93618],{"class":279},[47,97905,97906],{"class":49,"line":1294},[47,97907,97780],{"class":279},[38,97909,97911],{"className":30432,"code":97910,"language":30434,"meta":43,"style":43},"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",[26,97912,97913,97926,97930,97934,97939,97944,97949,97954,97959,97964],{"__ignoreMap":43},[47,97914,97915,97918,97920,97922,97924],{"class":49,"line":50},[47,97916,97917],{"class":221},"a.resize((",[47,97919,563],{"class":85},[47,97921,597],{"class":221},[47,97923,298],{"class":85},[47,97925,30551],{"class":221},[47,97927,97928],{"class":49,"line":92},[47,97929,93618],{"class":279},[47,97931,97932],{"class":49,"line":1273},[47,97933,93982],{"class":81},[47,97935,97936],{"class":49,"line":1288},[47,97937,97938],{"class":81},"array([[ 1,  2],\n",[47,97940,97941],{"class":49,"line":1294},[47,97942,97943],{"class":81},"       [ 3,  4],\n",[47,97945,97946],{"class":49,"line":1308},[47,97947,97948],{"class":81},"       [ 5,  6],\n",[47,97950,97951],{"class":49,"line":1314},[47,97952,97953],{"class":81},"       [ 7,  8],\n",[47,97955,97956],{"class":49,"line":1405},[47,97957,97958],{"class":81},"       [ 9, 10],\n",[47,97960,97961],{"class":49,"line":1411},[47,97962,97963],{"class":81},"       [11, 12]])\n",[47,97965,97966],{"class":49,"line":1423},[47,97967,93982],{"class":81},[14,97969,97971],{"id":97970},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,97973,97974],{},"改变了原数组",[38,97976,97978],{"className":30432,"code":97977,"language":30434,"meta":43,"style":43},"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",[26,97979,97980,97996,98012,98016,98020,98024,98028],{"__ignoreMap":43},[47,97981,97982,97984,97986,97988,97990,97992,97994],{"class":49,"line":50},[47,97983,457],{"class":221},[47,97985,267],{"class":217},[47,97987,93056],{"class":221},[47,97989,436],{"class":85},[47,97991,597],{"class":221},[47,97993,742],{"class":85},[47,97995,228],{"class":221},[47,97997,97998,98000,98002,98004,98006,98008,98010],{"class":49,"line":92},[47,97999,97871],{"class":221},[47,98001,267],{"class":217},[47,98003,222],{"class":221},[47,98005,298],{"class":85},[47,98007,597],{"class":221},[47,98009,563],{"class":85},[47,98011,228],{"class":221},[47,98013,98014],{"class":49,"line":1273},[47,98015,93618],{"class":279},[47,98017,98018],{"class":49,"line":1288},[47,98019,93982],{"class":81},[47,98021,98022],{"class":49,"line":1294},[47,98023,97242],{"class":81},[47,98025,98026],{"class":49,"line":1308},[47,98027,97247],{"class":81},[47,98029,98030],{"class":49,"line":1314},[47,98031,93982],{"class":81},[14,98033,98035],{"id":98034},"_56-重要比较","5.6 重要比较：",[19,98037,98038],{},[1556,98039],{"alt":43,"src":98040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,98042,98043,98044,98046,98047,98049],{},"口诀：NumPy 函数要么用 ",[26,98045,96017],{},"，要么用 ",[26,98048,31550],{},"，创建结构用 shape，造数据用 size",[19,98051,98052],{},[1556,98053],{"alt":43,"src":98054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[134,98056,98057],{},"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":43,"searchDepth":92,"depth":92,"links":98059},[98060,98061,98062,98063,98064,98065],{"id":97581,"depth":92,"text":97582},{"id":97733,"depth":92,"text":97734},{"id":97783,"depth":92,"text":97784},{"id":97829,"depth":92,"text":97830},{"id":97970,"depth":92,"text":97971},{"id":98034,"depth":92,"text":98035},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97573,"description":142},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98072,"title":98073,"body":98074,"description":142,"extension":143,"meta":99146,"navigation":145,"path":99147,"seo":99148,"stem":99149,"__hash__":99150},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98075,"toc":99140},[98076,98079,98083,98086,98089,98092,98157,98160,98200,98203,98285,98288,98293,98315,98317,98322,98327,98330,98333,98488,98491,98693,98697,98700,98703,98771,98773,98778,98781,98784,98864,98868,98871,98873,98946,98948,98953,98955,99035,99039,99042,99045,99048,99051,99054,99057,99137],[10,98077,98073],{"id":98078},"_6数组的拼接",[14,98080,98082],{"id":98081},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,98084,98085],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,98087,98088],{},"函数内部传两个数列构成的数列或者元组",[19,98090,98091],{},"①一维数组的拼接",[38,98093,98095],{"className":30432,"code":98094,"language":30434,"meta":43,"style":43},"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",[26,98096,98097,98117,98137,98142,98147,98152],{"__ignoreMap":43},[47,98098,98099,98101,98103,98105,98107,98109,98111,98113,98115],{"class":49,"line":50},[47,98100,457],{"class":221},[47,98102,267],{"class":217},[47,98104,93078],{"class":221},[47,98106,436],{"class":85},[47,98108,597],{"class":221},[47,98110,298],{"class":85},[47,98112,597],{"class":221},[47,98114,292],{"class":85},[47,98116,4750],{"class":221},[47,98118,98119,98121,98123,98125,98127,98129,98131,98133,98135],{"class":49,"line":92},[47,98120,482],{"class":221},[47,98122,267],{"class":217},[47,98124,93078],{"class":221},[47,98126,512],{"class":85},[47,98128,597],{"class":221},[47,98130,538],{"class":85},[47,98132,597],{"class":221},[47,98134,563],{"class":85},[47,98136,4750],{"class":221},[47,98138,98139],{"class":49,"line":1273},[47,98140,98141],{"class":279},"#调用concatenate进行数组拼接\n",[47,98143,98144],{"class":49,"line":1288},[47,98145,98146],{"class":221},"np.concatenate((a,b))\n",[47,98148,98149],{"class":49,"line":1294},[47,98150,98151],{"class":279},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[47,98153,98154],{"class":49,"line":1308},[47,98155,98156],{"class":279},"#np.concatenate([a,b])\n",[19,98158,98159],{},"②一维多个数组拼接",[38,98161,98163],{"className":30432,"code":98162,"language":30434,"meta":43,"style":43},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[26,98164,98165,98170,98190,98195],{"__ignoreMap":43},[47,98166,98167],{"class":49,"line":50},[47,98168,98169],{"class":279},"#也可以多个数组进行拼接\n",[47,98171,98172,98174,98176,98178,98180,98182,98184,98186,98188],{"class":49,"line":92},[47,98173,507],{"class":221},[47,98175,267],{"class":217},[47,98177,93078],{"class":221},[47,98179,665],{"class":85},[47,98181,597],{"class":221},[47,98183,691],{"class":85},[47,98185,597],{"class":221},[47,98187,742],{"class":85},[47,98189,4750],{"class":221},[47,98191,98192],{"class":49,"line":1273},[47,98193,98194],{"class":221},"c\n",[47,98196,98197],{"class":49,"line":1288},[47,98198,98199],{"class":221},"np.concatenate((a,b,c))\n",[19,98201,98202],{},"③二维数组拼接",[38,98204,98206],{"className":30432,"code":98205,"language":30434,"meta":43,"style":43},"#二维数组使用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",[26,98207,98208,98213,98237,98262,98267,98272],{"__ignoreMap":43},[47,98209,98210],{"class":49,"line":50},[47,98211,98212],{"class":279},"#二维数组使用concatenate进行拼接\n",[47,98214,98215,98217,98219,98221,98223,98225,98227,98229,98231,98233,98235],{"class":49,"line":92},[47,98216,93360],{"class":221},[47,98218,267],{"class":217},[47,98220,93056],{"class":221},[47,98222,436],{"class":85},[47,98224,597],{"class":221},[47,98226,742],{"class":85},[47,98228,93061],{"class":221},[47,98230,292],{"class":85},[47,98232,597],{"class":221},[47,98234,512],{"class":85},[47,98236,228],{"class":221},[47,98238,98239,98242,98244,98246,98248,98250,98252,98254,98256,98258,98260],{"class":49,"line":1273},[47,98240,98241],{"class":221},"bb",[47,98243,267],{"class":217},[47,98245,93056],{"class":221},[47,98247,556],{"class":85},[47,98249,597],{"class":221},[47,98251,861],{"class":85},[47,98253,93061],{"class":221},[47,98255,292],{"class":85},[47,98257,597],{"class":221},[47,98259,512],{"class":85},[47,98261,228],{"class":221},[47,98263,98264],{"class":49,"line":1288},[47,98265,98266],{"class":279},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[47,98268,98269],{"class":49,"line":1294},[47,98270,98271],{"class":279},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[47,98273,98274,98277,98279,98281,98283],{"class":49,"line":1308},[47,98275,98276],{"class":221},"np.concatenate((aa,bb),",[47,98278,47568],{"class":5309},[47,98280,267],{"class":217},[47,98282,411],{"class":85},[47,98284,228],{"class":221},[19,98286,98287],{},"结果：",[19,98289,98290],{},[1556,98291],{"alt":43,"src":98292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[38,98294,98296],{"className":30432,"code":98295,"language":30434,"meta":43,"style":43},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[26,98297,98298,98303],{"__ignoreMap":43},[47,98299,98300],{"class":49,"line":50},[47,98301,98302],{"class":279},"#指定axis为1进行拼接\n",[47,98304,98305,98307,98309,98311,98313],{"class":49,"line":92},[47,98306,98276],{"class":221},[47,98308,47568],{"class":5309},[47,98310,267],{"class":217},[47,98312,436],{"class":85},[47,98314,228],{"class":221},[19,98316,98287],{},[19,98318,98319],{},[1556,98320],{"alt":43,"src":98321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,98323,98324],{},[369,98325,98326],{},"二维数组总结：0竖着方向，1横着方向",[19,98328,98329],{},"④三维数组拼接",[19,98331,98332],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[38,98334,98336],{"className":30432,"code":98335,"language":30434,"meta":43,"style":43},"#两个三行六列\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",[26,98337,98338,98343,98371,98401,98406,98423,98428,98433,98438,98455,98460,98465,98470,98483],{"__ignoreMap":43},[47,98339,98340],{"class":49,"line":50},[47,98341,98342],{"class":279},"#两个三行六列\n",[47,98344,98345,98347,98349,98351,98353,98355,98357,98359,98361,98363,98365,98367,98369],{"class":49,"line":92},[47,98346,95575],{"class":221},[47,98348,267],{"class":217},[47,98350,93056],{"class":221},[47,98352,436],{"class":85},[47,98354,597],{"class":221},[47,98356,544],{"class":85},[47,98358,93061],{"class":221},[47,98360,298],{"class":85},[47,98362,597],{"class":221},[47,98364,292],{"class":85},[47,98366,597],{"class":221},[47,98368,563],{"class":85},[47,98370,228],{"class":221},[47,98372,98373,98376,98378,98380,98382,98384,98387,98389,98391,98393,98395,98397,98399],{"class":49,"line":1273},[47,98374,98375],{"class":221},"bbb",[47,98377,267],{"class":217},[47,98379,93056],{"class":221},[47,98381,556],{"class":85},[47,98383,597],{"class":221},[47,98385,98386],{"class":85},"137",[47,98388,93061],{"class":221},[47,98390,298],{"class":85},[47,98392,597],{"class":221},[47,98394,292],{"class":85},[47,98396,597],{"class":221},[47,98398,563],{"class":85},[47,98400,228],{"class":221},[47,98402,98403],{"class":49,"line":1288},[47,98404,98405],{"class":279},"#axis=0\n",[47,98407,98408,98410,98412,98415,98417,98419,98421],{"class":49,"line":1294},[47,98409,914],{"class":221},[47,98411,267],{"class":217},[47,98413,98414],{"class":221},"np.concatenate((aaa,bbb),",[47,98416,47568],{"class":5309},[47,98418,267],{"class":217},[47,98420,411],{"class":85},[47,98422,228],{"class":221},[47,98424,98425],{"class":49,"line":1308},[47,98426,98427],{"class":221},"s.shape\n",[47,98429,98430],{"class":49,"line":1314},[47,98431,98432],{"class":279},"#输出：(4,3,6)\n",[47,98434,98435],{"class":49,"line":1405},[47,98436,98437],{"class":279},"#axis=1\n",[47,98439,98440,98443,98445,98447,98449,98451,98453],{"class":49,"line":1411},[47,98441,98442],{"class":221},"ss",[47,98444,267],{"class":217},[47,98446,98414],{"class":221},[47,98448,47568],{"class":5309},[47,98450,267],{"class":217},[47,98452,436],{"class":85},[47,98454,228],{"class":221},[47,98456,98457],{"class":49,"line":1423},[47,98458,98459],{"class":221},"ss.shape\n",[47,98461,98462],{"class":49,"line":1706},[47,98463,98464],{"class":279},"#输出：(2,6,6)\n",[47,98466,98467],{"class":49,"line":1711},[47,98468,98469],{"class":279},"#axis=2\n",[47,98471,98472,98474,98476,98478,98480],{"class":49,"line":1717},[47,98473,98414],{"class":221},[47,98475,47568],{"class":5309},[47,98477,267],{"class":217},[47,98479,298],{"class":85},[47,98481,98482],{"class":221},").shape\n",[47,98484,98485],{"class":49,"line":1722},[47,98486,98487],{"class":279},"#输出：（2，3，12）\n",[19,98489,98490],{},"⑤四维数组拼接",[38,98492,98494],{"className":30432,"code":98493,"language":30434,"meta":43,"style":43},"#两个三行六列\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",[26,98495,98496,98500,98528,98556,98581,98607,98611,98624,98629,98633,98645,98650,98654,98666,98671,98676,98688],{"__ignoreMap":43},[47,98497,98498],{"class":49,"line":50},[47,98499,98342],{"class":279},[47,98501,98502,98504,98506,98508,98510,98512,98514,98516,98518,98520,98522,98524,98526],{"class":49,"line":92},[47,98503,95575],{"class":221},[47,98505,267],{"class":217},[47,98507,93056],{"class":221},[47,98509,436],{"class":85},[47,98511,597],{"class":221},[47,98513,544],{"class":85},[47,98515,93061],{"class":221},[47,98517,298],{"class":85},[47,98519,597],{"class":221},[47,98521,292],{"class":85},[47,98523,597],{"class":221},[47,98525,563],{"class":85},[47,98527,228],{"class":221},[47,98529,98530,98532,98534,98536,98538,98540,98542,98544,98546,98548,98550,98552,98554],{"class":49,"line":1273},[47,98531,98375],{"class":221},[47,98533,267],{"class":217},[47,98535,93056],{"class":221},[47,98537,556],{"class":85},[47,98539,597],{"class":221},[47,98541,98386],{"class":85},[47,98543,93061],{"class":221},[47,98545,298],{"class":85},[47,98547,597],{"class":221},[47,98549,292],{"class":85},[47,98551,597],{"class":221},[47,98553,563],{"class":85},[47,98555,228],{"class":221},[47,98557,98558,98561,98563,98565,98567,98569,98571,98573,98575,98577,98579],{"class":49,"line":1288},[47,98559,98560],{"class":221},"aaaa",[47,98562,267],{"class":217},[47,98564,97724],{"class":221},[47,98566,298],{"class":85},[47,98568,597],{"class":221},[47,98570,292],{"class":85},[47,98572,597],{"class":221},[47,98574,292],{"class":85},[47,98576,597],{"class":221},[47,98578,298],{"class":85},[47,98580,228],{"class":221},[47,98582,98583,98586,98588,98591,98593,98595,98597,98599,98601,98603,98605],{"class":49,"line":1294},[47,98584,98585],{"class":221},"bbbb",[47,98587,267],{"class":217},[47,98589,98590],{"class":221},"bbb.reshape(",[47,98592,298],{"class":85},[47,98594,597],{"class":221},[47,98596,292],{"class":85},[47,98598,597],{"class":221},[47,98600,292],{"class":85},[47,98602,597],{"class":221},[47,98604,298],{"class":85},[47,98606,228],{"class":221},[47,98608,98609],{"class":49,"line":1308},[47,98610,98405],{"class":279},[47,98612,98613,98616,98618,98620,98622],{"class":49,"line":1314},[47,98614,98615],{"class":221},"np.concatenate((aaaa,bbbb),",[47,98617,47568],{"class":5309},[47,98619,267],{"class":217},[47,98621,411],{"class":85},[47,98623,98482],{"class":221},[47,98625,98626],{"class":49,"line":1405},[47,98627,98628],{"class":279},"#结果：（4，3，3，2）\n",[47,98630,98631],{"class":49,"line":1411},[47,98632,98437],{"class":279},[47,98634,98635,98637,98639,98641,98643],{"class":49,"line":1423},[47,98636,98615],{"class":221},[47,98638,47568],{"class":5309},[47,98640,267],{"class":217},[47,98642,436],{"class":85},[47,98644,98482],{"class":221},[47,98646,98647],{"class":49,"line":1706},[47,98648,98649],{"class":279},"#结果：（2，6，3，2）\n",[47,98651,98652],{"class":49,"line":1711},[47,98653,98469],{"class":279},[47,98655,98656,98658,98660,98662,98664],{"class":49,"line":1717},[47,98657,98615],{"class":221},[47,98659,47568],{"class":5309},[47,98661,267],{"class":217},[47,98663,298],{"class":85},[47,98665,98482],{"class":221},[47,98667,98668],{"class":49,"line":1722},[47,98669,98670],{"class":279},"#结果：（2，3，6，2）\n",[47,98672,98673],{"class":49,"line":1736},[47,98674,98675],{"class":279},"#axis=3\n",[47,98677,98678,98680,98682,98684,98686],{"class":49,"line":1741},[47,98679,98615],{"class":221},[47,98681,47568],{"class":5309},[47,98683,267],{"class":217},[47,98685,292],{"class":85},[47,98687,98482],{"class":221},[47,98689,98690],{"class":49,"line":1747},[47,98691,98692],{"class":279},"#结果：（2，3，3，4）\n",[14,98694,98696],{"id":98695},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,98698,98699],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,98701,98702],{},"①二维数组",[38,98704,98706],{"className":30432,"code":98705,"language":30434,"meta":43,"style":43},"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",[26,98707,98708,98732,98756,98761,98766],{"__ignoreMap":43},[47,98709,98710,98712,98714,98716,98718,98720,98722,98724,98726,98728,98730],{"class":49,"line":50},[47,98711,93360],{"class":221},[47,98713,267],{"class":217},[47,98715,93056],{"class":221},[47,98717,436],{"class":85},[47,98719,597],{"class":221},[47,98721,742],{"class":85},[47,98723,93061],{"class":221},[47,98725,292],{"class":85},[47,98727,597],{"class":221},[47,98729,512],{"class":85},[47,98731,228],{"class":221},[47,98733,98734,98736,98738,98740,98742,98744,98746,98748,98750,98752,98754],{"class":49,"line":92},[47,98735,98241],{"class":221},[47,98737,267],{"class":217},[47,98739,93056],{"class":221},[47,98741,556],{"class":85},[47,98743,597],{"class":221},[47,98745,861],{"class":85},[47,98747,93061],{"class":221},[47,98749,292],{"class":85},[47,98751,597],{"class":221},[47,98753,512],{"class":85},[47,98755,228],{"class":221},[47,98757,98758],{"class":49,"line":1273},[47,98759,98760],{"class":221},"np.hstack((aa,bb))\n",[47,98762,98763],{"class":49,"line":1288},[47,98764,98765],{"class":279},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[47,98767,98768],{"class":49,"line":1294},[47,98769,98770],{"class":279},"#np.hstack([aa,bb])\n",[19,98772,98287],{},[19,98774,98775],{},[1556,98776],{"alt":43,"src":98777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,98779,98780],{},"等效于concatenate()函数中axis=1时的情况",[19,98782,98783],{},"②三维数组",[38,98785,98787],{"className":30432,"code":98786,"language":30434,"meta":43,"style":43},"#两个三行六列\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",[26,98788,98789,98793,98821,98849,98854,98859],{"__ignoreMap":43},[47,98790,98791],{"class":49,"line":50},[47,98792,98342],{"class":279},[47,98794,98795,98797,98799,98801,98803,98805,98807,98809,98811,98813,98815,98817,98819],{"class":49,"line":92},[47,98796,95575],{"class":221},[47,98798,267],{"class":217},[47,98800,93056],{"class":221},[47,98802,436],{"class":85},[47,98804,597],{"class":221},[47,98806,544],{"class":85},[47,98808,93061],{"class":221},[47,98810,298],{"class":85},[47,98812,597],{"class":221},[47,98814,292],{"class":85},[47,98816,597],{"class":221},[47,98818,563],{"class":85},[47,98820,228],{"class":221},[47,98822,98823,98825,98827,98829,98831,98833,98835,98837,98839,98841,98843,98845,98847],{"class":49,"line":1273},[47,98824,98375],{"class":221},[47,98826,267],{"class":217},[47,98828,93056],{"class":221},[47,98830,556],{"class":85},[47,98832,597],{"class":221},[47,98834,98386],{"class":85},[47,98836,93061],{"class":221},[47,98838,298],{"class":85},[47,98840,597],{"class":221},[47,98842,292],{"class":85},[47,98844,597],{"class":221},[47,98846,563],{"class":85},[47,98848,228],{"class":221},[47,98850,98851],{"class":49,"line":1288},[47,98852,98853],{"class":279},"#使用hstack\n",[47,98855,98856],{"class":49,"line":1294},[47,98857,98858],{"class":221},"np.hstack((aaa,bbb)).shape\n",[47,98860,98861],{"class":49,"line":1308},[47,98862,98863],{"class":279},"#输出：（2，6，6）\n",[14,98865,98867],{"id":98866},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,98869,98870],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,98872,98702],{},[38,98874,98876],{"className":30432,"code":98875,"language":30434,"meta":43,"style":43},"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",[26,98877,98878,98902,98926,98931,98936,98941],{"__ignoreMap":43},[47,98879,98880,98882,98884,98886,98888,98890,98892,98894,98896,98898,98900],{"class":49,"line":50},[47,98881,93360],{"class":221},[47,98883,267],{"class":217},[47,98885,93056],{"class":221},[47,98887,436],{"class":85},[47,98889,597],{"class":221},[47,98891,742],{"class":85},[47,98893,93061],{"class":221},[47,98895,292],{"class":85},[47,98897,597],{"class":221},[47,98899,512],{"class":85},[47,98901,228],{"class":221},[47,98903,98904,98906,98908,98910,98912,98914,98916,98918,98920,98922,98924],{"class":49,"line":92},[47,98905,98241],{"class":221},[47,98907,267],{"class":217},[47,98909,93056],{"class":221},[47,98911,556],{"class":85},[47,98913,597],{"class":221},[47,98915,861],{"class":85},[47,98917,93061],{"class":221},[47,98919,292],{"class":85},[47,98921,597],{"class":221},[47,98923,512],{"class":85},[47,98925,228],{"class":221},[47,98927,98928],{"class":49,"line":1273},[47,98929,98930],{"class":279},"#vstack 垂直方向进行堆叠\n",[47,98932,98933],{"class":49,"line":1288},[47,98934,98935],{"class":221},"np.vstack((aa,bb))\n",[47,98937,98938],{"class":49,"line":1294},[47,98939,98940],{"class":279},"#与hstack传的参数类似，等价于：\n",[47,98942,98943],{"class":49,"line":1308},[47,98944,98945],{"class":221},"np.vstack([aa,bb])\n",[19,98947,98287],{},[19,98949,98950],{},[1556,98951],{"alt":43,"src":98952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,98954,98783],{},[38,98956,98958],{"className":30432,"code":98957,"language":30434,"meta":43,"style":43},"#两个三行六列\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",[26,98959,98960,98964,98992,99020,99025,99030],{"__ignoreMap":43},[47,98961,98962],{"class":49,"line":50},[47,98963,98342],{"class":279},[47,98965,98966,98968,98970,98972,98974,98976,98978,98980,98982,98984,98986,98988,98990],{"class":49,"line":92},[47,98967,95575],{"class":221},[47,98969,267],{"class":217},[47,98971,93056],{"class":221},[47,98973,436],{"class":85},[47,98975,597],{"class":221},[47,98977,544],{"class":85},[47,98979,93061],{"class":221},[47,98981,298],{"class":85},[47,98983,597],{"class":221},[47,98985,292],{"class":85},[47,98987,597],{"class":221},[47,98989,563],{"class":85},[47,98991,228],{"class":221},[47,98993,98994,98996,98998,99000,99002,99004,99006,99008,99010,99012,99014,99016,99018],{"class":49,"line":1273},[47,98995,98375],{"class":221},[47,98997,267],{"class":217},[47,98999,93056],{"class":221},[47,99001,556],{"class":85},[47,99003,597],{"class":221},[47,99005,98386],{"class":85},[47,99007,93061],{"class":221},[47,99009,298],{"class":85},[47,99011,597],{"class":221},[47,99013,292],{"class":85},[47,99015,597],{"class":221},[47,99017,563],{"class":85},[47,99019,228],{"class":221},[47,99021,99022],{"class":49,"line":1288},[47,99023,99024],{"class":279},"#使用vstack\n",[47,99026,99027],{"class":49,"line":1294},[47,99028,99029],{"class":221},"np.vstack((aaa,bbb)).shape\n",[47,99031,99032],{"class":49,"line":1308},[47,99033,99034],{"class":279},"#输出：（4，3，6）\n",[14,99036,99038],{"id":99037},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,99040,99041],{},"该方法是三维数组特有的方法",[19,99043,99044],{},"也就是说",[19,99046,99047],{},"一维数组拼接方法用：concatenate()",[19,99049,99050],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,99052,99053],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,99055,99056],{},"四维数组及多维数组只能用concatenate进行拼接",[38,99058,99060],{"className":30432,"code":99059,"language":30434,"meta":43,"style":43},"#两个三行六列\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",[26,99061,99062,99066,99094,99122,99127,99132],{"__ignoreMap":43},[47,99063,99064],{"class":49,"line":50},[47,99065,98342],{"class":279},[47,99067,99068,99070,99072,99074,99076,99078,99080,99082,99084,99086,99088,99090,99092],{"class":49,"line":92},[47,99069,95575],{"class":221},[47,99071,267],{"class":217},[47,99073,93056],{"class":221},[47,99075,436],{"class":85},[47,99077,597],{"class":221},[47,99079,544],{"class":85},[47,99081,93061],{"class":221},[47,99083,298],{"class":85},[47,99085,597],{"class":221},[47,99087,292],{"class":85},[47,99089,597],{"class":221},[47,99091,563],{"class":85},[47,99093,228],{"class":221},[47,99095,99096,99098,99100,99102,99104,99106,99108,99110,99112,99114,99116,99118,99120],{"class":49,"line":1273},[47,99097,98375],{"class":221},[47,99099,267],{"class":217},[47,99101,93056],{"class":221},[47,99103,556],{"class":85},[47,99105,597],{"class":221},[47,99107,98386],{"class":85},[47,99109,93061],{"class":221},[47,99111,298],{"class":85},[47,99113,597],{"class":221},[47,99115,292],{"class":85},[47,99117,597],{"class":221},[47,99119,563],{"class":85},[47,99121,228],{"class":221},[47,99123,99124],{"class":49,"line":1288},[47,99125,99126],{"class":279},"#使用dstack\n",[47,99128,99129],{"class":49,"line":1294},[47,99130,99131],{"class":221},"np.dstack((aaa,bbb)).shape\n",[47,99133,99134],{"class":49,"line":1308},[47,99135,99136],{"class":279},"#结果：（2，3，12）\n",[134,99138,99139],{},"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":43,"searchDepth":92,"depth":92,"links":99141},[99142,99143,99144,99145],{"id":98081,"depth":92,"text":98082},{"id":98695,"depth":92,"text":98696},{"id":98866,"depth":92,"text":98867},{"id":99037,"depth":92,"text":99038},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98073,"description":142},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99152,"title":99153,"body":99154,"description":142,"extension":143,"meta":99429,"navigation":145,"path":99430,"seo":99431,"stem":99432,"__hash__":99433},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99155,"toc":99427},[99156,99159,99162,99256,99259,99262,99265,99268,99271,99274,99277,99280,99424],[10,99157,99153],{"id":99158},"_7数组转置",[19,99160,99161],{},"使用transpose()函数",[38,99163,99165],{"className":30432,"code":99164,"language":30434,"meta":43,"style":43},"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",[26,99166,99167,99177,99201,99206,99211,99216,99221,99229,99233,99237,99242,99247,99252],{"__ignoreMap":43},[47,99168,99169,99171,99173,99175],{"class":49,"line":50},[47,99170,30446],{"class":217},[47,99172,31434],{"class":221},[47,99174,31437],{"class":217},[47,99176,31440],{"class":221},[47,99178,99179,99181,99183,99185,99187,99189,99191,99193,99195,99197,99199],{"class":49,"line":92},[47,99180,457],{"class":221},[47,99182,267],{"class":217},[47,99184,31771],{"class":221},[47,99186,436],{"class":85},[47,99188,597],{"class":221},[47,99190,742],{"class":85},[47,99192,93061],{"class":221},[47,99194,512],{"class":85},[47,99196,597],{"class":221},[47,99198,292],{"class":85},[47,99200,228],{"class":221},[47,99202,99203],{"class":49,"line":1273},[47,99204,99205],{"class":279},"#二维数组转置\n",[47,99207,99208],{"class":49,"line":1288},[47,99209,99210],{"class":279},"#调用transpose()函数\n",[47,99212,99213],{"class":49,"line":1294},[47,99214,99215],{"class":221},"a.transpose()\n",[47,99217,99218],{"class":49,"line":1308},[47,99219,99220],{"class":279},"#对于二维数组也可以采用.T来实现\n",[47,99222,99223,99226],{"class":49,"line":1314},[47,99224,99225],{"class":221},"a.T",[47,99227,99228],{"class":279},"#与上述代码一样\n",[47,99230,99231],{"class":49,"line":1405},[47,99232,93618],{"class":279},[47,99234,99235],{"class":49,"line":1411},[47,99236,93982],{"class":81},[47,99238,99239],{"class":49,"line":1423},[47,99240,99241],{"class":81},"array([[ 1,  4,  7, 10],\n",[47,99243,99244],{"class":49,"line":1706},[47,99245,99246],{"class":81},"       [ 2,  5,  8, 11],\n",[47,99248,99249],{"class":49,"line":1711},[47,99250,99251],{"class":81},"       [ 3,  6,  9, 12]])\n",[47,99253,99254],{"class":49,"line":1717},[47,99255,93982],{"class":81},[19,99257,99258],{},"也可以使用np.transpose()的形式",[19,99260,99261],{},"#多维数组进行转置 np.transpose()",[19,99263,99264],{},"#对二维数组也可以使用np.transpose()进行转置",[19,99266,99267],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,99269,99270],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,99272,99273],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,99275,99276],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,99278,99279],{},"四维及以上的数组也是一样的道理",[38,99281,99283],{"className":30432,"code":99282,"language":30434,"meta":43,"style":43},"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",[26,99284,99285,99313,99318,99323,99328,99346,99351,99383,99388,99393,99398,99419],{"__ignoreMap":43},[47,99286,99287,99289,99291,99293,99295,99297,99299,99301,99303,99305,99307,99309,99311],{"class":49,"line":50},[47,99288,1039],{"class":221},[47,99290,267],{"class":217},[47,99292,93056],{"class":221},[47,99294,436],{"class":85},[47,99296,597],{"class":221},[47,99298,544],{"class":85},[47,99300,93061],{"class":221},[47,99302,292],{"class":85},[47,99304,597],{"class":221},[47,99306,563],{"class":85},[47,99308,597],{"class":221},[47,99310,298],{"class":85},[47,99312,228],{"class":221},[47,99314,99315],{"class":49,"line":92},[47,99316,99317],{"class":221},"x.shape\n",[47,99319,99320],{"class":49,"line":1273},[47,99321,99322],{"class":279},"#结果：（3,6,2）\n",[47,99324,99325],{"class":49,"line":1288},[47,99326,99327],{"class":279},"#使用np.transpose()进行转置 变为(2,6,3)\n",[47,99329,99330,99333,99335,99337,99339,99341,99343],{"class":49,"line":1294},[47,99331,99332],{"class":221},"np.transpose(x,(",[47,99334,298],{"class":85},[47,99336,597],{"class":221},[47,99338,436],{"class":85},[47,99340,597],{"class":221},[47,99342,411],{"class":85},[47,99344,99345],{"class":221},")).shape\n",[47,99347,99348],{"class":49,"line":1308},[47,99349,99350],{"class":279},"#结果：(2,6,3)\n",[47,99352,99353,99355,99357,99359,99361,99363,99365,99367,99369,99371,99373,99375,99377,99379,99381],{"class":49,"line":1314},[47,99354,98560],{"class":221},[47,99356,267],{"class":217},[47,99358,93056],{"class":221},[47,99360,436],{"class":85},[47,99362,597],{"class":221},[47,99364,544],{"class":85},[47,99366,93061],{"class":221},[47,99368,292],{"class":85},[47,99370,597],{"class":221},[47,99372,298],{"class":85},[47,99374,597],{"class":221},[47,99376,436],{"class":85},[47,99378,597],{"class":221},[47,99380,563],{"class":85},[47,99382,228],{"class":221},[47,99384,99385],{"class":49,"line":1405},[47,99386,99387],{"class":221},"aaaa.shape\n",[47,99389,99390],{"class":49,"line":1411},[47,99391,99392],{"class":279},"#结果：（3，2，1，6）\n",[47,99394,99395],{"class":49,"line":1423},[47,99396,99397],{"class":279},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[47,99399,99400,99403,99405,99407,99409,99411,99413,99415,99417],{"class":49,"line":1706},[47,99401,99402],{"class":221},"np.transpose(aaaa,(",[47,99404,436],{"class":85},[47,99406,597],{"class":221},[47,99408,298],{"class":85},[47,99410,597],{"class":221},[47,99412,411],{"class":85},[47,99414,597],{"class":221},[47,99416,292],{"class":85},[47,99418,99345],{"class":221},[47,99420,99421],{"class":49,"line":1711},[47,99422,99423],{"class":279},"#结果：(2,1,3,6)\n",[134,99425,99426],{},"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":43,"searchDepth":92,"depth":92,"links":99428},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99153,"description":142},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99435,"title":99436,"body":99437,"description":142,"extension":143,"meta":100171,"navigation":145,"path":100172,"seo":100173,"stem":100174,"__hash__":100175},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99438,"toc":100169},[99439,99442,99445,99448,99451,99454,99457,99460,99463,99572,99575,99578,100166],[10,99440,99436],{"id":99441},"_8数组分割",[19,99443,99444],{},"split分割",[19,99446,99447],{},"numpy.split(ary,indics_or_sections,axis)",[19,99449,99450],{},"解释：",[19,99452,99453],{},"ary:被分割的数组",[19,99455,99456],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,99458,99459],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,99461,99462],{},"①一维数组的分割",[38,99464,99466],{"className":30432,"code":99465,"language":30434,"meta":43,"style":43},"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",[26,99467,99468,99484,99489,99498,99502,99507,99515,99519,99524,99529,99542,99546,99551,99563,99567],{"__ignoreMap":43},[47,99469,99470,99472,99474,99476,99478,99480,99482],{"class":49,"line":50},[47,99471,457],{"class":221},[47,99473,267],{"class":217},[47,99475,93056],{"class":221},[47,99477,436],{"class":85},[47,99479,597],{"class":221},[47,99481,639],{"class":85},[47,99483,228],{"class":221},[47,99485,99486],{"class":49,"line":92},[47,99487,99488],{"class":279},"#如果传入整数，必须能够平分，否则会报错\n",[47,99490,99491,99494,99496],{"class":49,"line":1273},[47,99492,99493],{"class":221},"np.split(a,",[47,99495,298],{"class":85},[47,99497,228],{"class":221},[47,99499,99500],{"class":49,"line":1288},[47,99501,93618],{"class":279},[47,99503,99504],{"class":49,"line":1294},[47,99505,99506],{"class":279},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[47,99508,99509,99511,99513],{"class":49,"line":1308},[47,99510,99493],{"class":221},[47,99512,512],{"class":85},[47,99514,228],{"class":221},[47,99516,99517],{"class":49,"line":1314},[47,99518,93618],{"class":279},[47,99520,99521],{"class":49,"line":1405},[47,99522,99523],{"class":279},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[47,99525,99526],{"class":49,"line":1411},[47,99527,99528],{"class":279},"#传入数组\n",[47,99530,99531,99534,99536,99538,99540],{"class":49,"line":1423},[47,99532,99533],{"class":221},"np.split(a,[",[47,99535,292],{"class":85},[47,99537,597],{"class":221},[47,99539,538],{"class":85},[47,99541,4750],{"class":221},[47,99543,99544],{"class":49,"line":1706},[47,99545,93618],{"class":279},[47,99547,99548],{"class":49,"line":1711},[47,99549,99550],{"class":279},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[47,99552,99553,99555,99557,99559,99561],{"class":49,"line":1717},[47,99554,99533],{"class":221},[47,99556,538],{"class":85},[47,99558,597],{"class":221},[47,99560,588],{"class":85},[47,99562,4750],{"class":221},[47,99564,99565],{"class":49,"line":1722},[47,99566,93618],{"class":279},[47,99568,99569],{"class":49,"line":1736},[47,99570,99571],{"class":279},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,99573,99574],{},"②二维数组的分割",[19,99576,99577],{},"使用split()",[38,99579,99581],{"className":30432,"code":99580,"language":30434,"meta":43,"style":43},"#二维数组分割\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",[26,99582,99583,99588,99612,99617,99626,99630,99634,99639,99644,99649,99654,99659,99664,99669,99673,99686,99690,99694,99698,99702,99706,99711,99716,99721,99725,99730,99746,99750,99754,99759,99764,99769,99774,99779,99784,99789,99794,99799,99804,99809,99814,99819,99824,99829,99834,99839,99844,99848,99852,99872,99876,99880,99885,99890,99895,99900,99905,99910,99915,99920,99925,99930,99935,99940,99945,99950,99955,99960,99965,99970,99974,99979,99988,99992,99996,100000,100004,100008,100012,100016,100020,100024,100033,100037,100041,100045,100049,100053,100057,100061,100065,100069,100073,100077,100081,100085,100089,100093,100097,100101,100105,100109,100113,100117,100130,100134,100138,100142,100146,100150,100154,100158,100162],{"__ignoreMap":43},[47,99584,99585],{"class":49,"line":50},[47,99586,99587],{"class":279},"#二维数组分割\n",[47,99589,99590,99592,99594,99596,99598,99600,99602,99604,99606,99608,99610],{"class":49,"line":92},[47,99591,93360],{"class":221},[47,99593,267],{"class":217},[47,99595,93056],{"class":221},[47,99597,436],{"class":85},[47,99599,597],{"class":221},[47,99601,544],{"class":85},[47,99603,93061],{"class":221},[47,99605,563],{"class":85},[47,99607,597],{"class":221},[47,99609,563],{"class":85},[47,99611,228],{"class":221},[47,99613,99614],{"class":49,"line":1273},[47,99615,99616],{"class":279},"#默认axis=0  传入整数平均分,按行来的\n",[47,99618,99619,99622,99624],{"class":49,"line":1288},[47,99620,99621],{"class":221},"np.split(aa,",[47,99623,292],{"class":85},[47,99625,228],{"class":221},[47,99627,99628],{"class":49,"line":1294},[47,99629,95818],{"class":279},[47,99631,99632],{"class":49,"line":1308},[47,99633,93982],{"class":81},[47,99635,99636],{"class":49,"line":1314},[47,99637,99638],{"class":81},"[array([[ 1,  2,  3,  4,  5,  6],\n",[47,99640,99641],{"class":49,"line":1405},[47,99642,99643],{"class":81},"        [ 7,  8,  9, 10, 11, 12]]),\n",[47,99645,99646],{"class":49,"line":1411},[47,99647,99648],{"class":81}," array([[13, 14, 15, 16, 17, 18],\n",[47,99650,99651],{"class":49,"line":1423},[47,99652,99653],{"class":81},"        [19, 20, 21, 22, 23, 24]]),\n",[47,99655,99656],{"class":49,"line":1706},[47,99657,99658],{"class":81}," array([[25, 26, 27, 28, 29, 30],\n",[47,99660,99661],{"class":49,"line":1711},[47,99662,99663],{"class":81},"        [31, 32, 33, 34, 35, 36]])]\n",[47,99665,99666],{"class":49,"line":1717},[47,99667,99668],{"class":81}," '''\n",[47,99670,99671],{"class":49,"line":1722},[47,99672,99528],{"class":279},[47,99674,99675,99678,99680,99682,99684],{"class":49,"line":1736},[47,99676,99677],{"class":221},"np.split(aa,[",[47,99679,298],{"class":85},[47,99681,597],{"class":221},[47,99683,538],{"class":85},[47,99685,4750],{"class":221},[47,99687,99688],{"class":49,"line":1741},[47,99689,95818],{"class":279},[47,99691,99692],{"class":49,"line":1747},[47,99693,93982],{"class":81},[47,99695,99696],{"class":49,"line":1768},[47,99697,99638],{"class":81},[47,99699,99700],{"class":49,"line":1773},[47,99701,99643],{"class":81},[47,99703,99704],{"class":49,"line":1787},[47,99705,99648],{"class":81},[47,99707,99708],{"class":49,"line":1792},[47,99709,99710],{"class":81},"        [19, 20, 21, 22, 23, 24],\n",[47,99712,99713],{"class":49,"line":1821},[47,99714,99715],{"class":81},"        [25, 26, 27, 28, 29, 30]]),\n",[47,99717,99718],{"class":49,"line":1826},[47,99719,99720],{"class":81}," array([[31, 32, 33, 34, 35, 36]])]\n",[47,99722,99723],{"class":49,"line":1843},[47,99724,93982],{"class":81},[47,99726,99727],{"class":49,"line":1848},[47,99728,99729],{"class":279},"#axis=1 按照列来分\n",[47,99731,99732,99734,99736,99738,99740,99742,99744],{"class":49,"line":1853},[47,99733,99621],{"class":221},[47,99735,292],{"class":85},[47,99737,597],{"class":221},[47,99739,47568],{"class":5309},[47,99741,267],{"class":217},[47,99743,436],{"class":85},[47,99745,228],{"class":221},[47,99747,99748],{"class":49,"line":1858},[47,99749,95818],{"class":279},[47,99751,99752],{"class":49,"line":1872},[47,99753,93982],{"class":81},[47,99755,99756],{"class":49,"line":1877},[47,99757,99758],{"class":81},"[array([[ 1,  2],\n",[47,99760,99761],{"class":49,"line":2670},[47,99762,99763],{"class":81},"        [ 7,  8],\n",[47,99765,99766],{"class":49,"line":2684},[47,99767,99768],{"class":81},"        [13, 14],\n",[47,99770,99771],{"class":49,"line":2692},[47,99772,99773],{"class":81},"        [19, 20],\n",[47,99775,99776],{"class":49,"line":2697},[47,99777,99778],{"class":81},"        [25, 26],\n",[47,99780,99781],{"class":49,"line":2703},[47,99782,99783],{"class":81},"        [31, 32]]),\n",[47,99785,99786],{"class":49,"line":2709},[47,99787,99788],{"class":81}," array([[ 3,  4],\n",[47,99790,99791],{"class":49,"line":2714},[47,99792,99793],{"class":81},"        [ 9, 10],\n",[47,99795,99796],{"class":49,"line":8041},[47,99797,99798],{"class":81},"        [15, 16],\n",[47,99800,99801],{"class":49,"line":8065},[47,99802,99803],{"class":81},"        [21, 22],\n",[47,99805,99806],{"class":49,"line":8070},[47,99807,99808],{"class":81},"        [27, 28],\n",[47,99810,99811],{"class":49,"line":8076},[47,99812,99813],{"class":81},"        [33, 34]]),\n",[47,99815,99816],{"class":49,"line":8103},[47,99817,99818],{"class":81}," array([[ 5,  6],\n",[47,99820,99821],{"class":49,"line":8108},[47,99822,99823],{"class":81},"        [11, 12],\n",[47,99825,99826],{"class":49,"line":8114},[47,99827,99828],{"class":81},"        [17, 18],\n",[47,99830,99831],{"class":49,"line":8126},[47,99832,99833],{"class":81},"        [23, 24],\n",[47,99835,99836],{"class":49,"line":8138},[47,99837,99838],{"class":81},"        [29, 30],\n",[47,99840,99841],{"class":49,"line":8150},[47,99842,99843],{"class":81},"        [35, 36]])]\n",[47,99845,99846],{"class":49,"line":9809},[47,99847,99668],{"class":81},[47,99849,99850],{"class":49,"line":9834},[47,99851,99528],{"class":279},[47,99853,99854,99856,99858,99860,99862,99864,99866,99868,99870],{"class":49,"line":9857},[47,99855,99677],{"class":221},[47,99857,436],{"class":85},[47,99859,597],{"class":221},[47,99861,298],{"class":85},[47,99863,41663],{"class":221},[47,99865,47568],{"class":5309},[47,99867,267],{"class":217},[47,99869,436],{"class":85},[47,99871,228],{"class":221},[47,99873,99874],{"class":49,"line":9881},[47,99875,93618],{"class":279},[47,99877,99878],{"class":49,"line":9886},[47,99879,93982],{"class":81},[47,99881,99882],{"class":49,"line":9891},[47,99883,99884],{"class":81},"[array([[ 1],\n",[47,99886,99887],{"class":49,"line":9896},[47,99888,99889],{"class":81},"        [ 7],\n",[47,99891,99892],{"class":49,"line":9905},[47,99893,99894],{"class":81},"        [13],\n",[47,99896,99897],{"class":49,"line":9910},[47,99898,99899],{"class":81},"        [19],\n",[47,99901,99902],{"class":49,"line":9916},[47,99903,99904],{"class":81},"        [25],\n",[47,99906,99907],{"class":49,"line":9937},[47,99908,99909],{"class":81},"        [31]]),\n",[47,99911,99912],{"class":49,"line":9943},[47,99913,99914],{"class":81}," array([[ 2],\n",[47,99916,99917],{"class":49,"line":9957},[47,99918,99919],{"class":81},"        [ 8],\n",[47,99921,99922],{"class":49,"line":9963},[47,99923,99924],{"class":81},"        [14],\n",[47,99926,99927],{"class":49,"line":9990},[47,99928,99929],{"class":81},"        [20],\n",[47,99931,99932],{"class":49,"line":9999},[47,99933,99934],{"class":81},"        [26],\n",[47,99936,99937],{"class":49,"line":10005},[47,99938,99939],{"class":81},"        [32]]),\n",[47,99941,99942],{"class":49,"line":10013},[47,99943,99944],{"class":81}," array([[ 3,  4,  5,  6],\n",[47,99946,99947],{"class":49,"line":10018},[47,99948,99949],{"class":81},"        [ 9, 10, 11, 12],\n",[47,99951,99952],{"class":49,"line":16697},[47,99953,99954],{"class":81},"        [15, 16, 17, 18],\n",[47,99956,99957],{"class":49,"line":16703},[47,99958,99959],{"class":81},"        [21, 22, 23, 24],\n",[47,99961,99962],{"class":49,"line":16726},[47,99963,99964],{"class":81},"        [27, 28, 29, 30],\n",[47,99966,99967],{"class":49,"line":16732},[47,99968,99969],{"class":81},"        [33, 34, 35, 36]])]\n",[47,99971,99972],{"class":49,"line":16755},[47,99973,93982],{"class":81},[47,99975,99976],{"class":49,"line":16769},[47,99977,99978],{"class":279},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[47,99980,99981,99984,99986],{"class":49,"line":16789},[47,99982,99983],{"class":221},"np.vsplit(aa,",[47,99985,292],{"class":85},[47,99987,228],{"class":221},[47,99989,99990],{"class":49,"line":16795},[47,99991,93618],{"class":279},[47,99993,99994],{"class":49,"line":16806},[47,99995,93982],{"class":81},[47,99997,99998],{"class":49,"line":16829},[47,99999,99638],{"class":81},[47,100001,100002],{"class":49,"line":16851},[47,100003,99643],{"class":81},[47,100005,100006],{"class":49,"line":16856},[47,100007,99648],{"class":81},[47,100009,100010],{"class":49,"line":16862},[47,100011,99653],{"class":81},[47,100013,100014],{"class":49,"line":16876},[47,100015,99658],{"class":81},[47,100017,100018],{"class":49,"line":16889},[47,100019,99663],{"class":81},[47,100021,100022],{"class":49,"line":16894},[47,100023,93982],{"class":81},[47,100025,100026,100029,100031],{"class":49,"line":16908},[47,100027,100028],{"class":221},"np.hsplit(aa,",[47,100030,292],{"class":85},[47,100032,228],{"class":221},[47,100034,100035],{"class":49,"line":16913},[47,100036,93618],{"class":279},[47,100038,100039],{"class":49,"line":16919},[47,100040,93982],{"class":81},[47,100042,100043],{"class":49,"line":16924},[47,100044,99758],{"class":81},[47,100046,100047],{"class":49,"line":16938},[47,100048,99763],{"class":81},[47,100050,100051],{"class":49,"line":16943},[47,100052,99768],{"class":81},[47,100054,100055],{"class":49,"line":16948},[47,100056,99773],{"class":81},[47,100058,100059],{"class":49,"line":16962},[47,100060,99778],{"class":81},[47,100062,100063],{"class":49,"line":16974},[47,100064,99783],{"class":81},[47,100066,100067],{"class":49,"line":16979},[47,100068,99788],{"class":81},[47,100070,100071],{"class":49,"line":16992},[47,100072,99793],{"class":81},[47,100074,100075],{"class":49,"line":16997},[47,100076,99798],{"class":81},[47,100078,100079],{"class":49,"line":17002},[47,100080,99803],{"class":81},[47,100082,100083],{"class":49,"line":17007},[47,100084,99808],{"class":81},[47,100086,100087],{"class":49,"line":17020},[47,100088,99813],{"class":81},[47,100090,100091],{"class":49,"line":17025},[47,100092,99818],{"class":81},[47,100094,100095],{"class":49,"line":32687},[47,100096,99823],{"class":81},[47,100098,100099],{"class":49,"line":32693},[47,100100,99828],{"class":81},[47,100102,100103],{"class":49,"line":32699},[47,100104,99833],{"class":81},[47,100106,100107],{"class":49,"line":32705},[47,100108,99838],{"class":81},[47,100110,100111],{"class":49,"line":32711},[47,100112,99843],{"class":81},[47,100114,100115],{"class":49,"line":32722},[47,100116,93982],{"class":81},[47,100118,100119,100122,100124,100126,100128],{"class":49,"line":32728},[47,100120,100121],{"class":221},"np.vsplit(aa,[",[47,100123,298],{"class":85},[47,100125,597],{"class":221},[47,100127,538],{"class":85},[47,100129,4750],{"class":221},[47,100131,100132],{"class":49,"line":32748},[47,100133,93618],{"class":279},[47,100135,100136],{"class":49,"line":32754},[47,100137,93982],{"class":81},[47,100139,100140],{"class":49,"line":32765},[47,100141,99638],{"class":81},[47,100143,100144],{"class":49,"line":32771},[47,100145,99643],{"class":81},[47,100147,100148],{"class":49,"line":32777},[47,100149,99648],{"class":81},[47,100151,100152],{"class":49,"line":32783},[47,100153,99710],{"class":81},[47,100155,100156],{"class":49,"line":32789},[47,100157,99715],{"class":81},[47,100159,100160],{"class":49,"line":32795},[47,100161,99720],{"class":81},[47,100163,100164],{"class":49,"line":32801},[47,100165,99668],{"class":81},[134,100167,100168],{},"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":43,"searchDepth":92,"depth":92,"links":100170},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99436,"description":142},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100177,"title":100178,"body":100179,"description":142,"extension":143,"meta":100673,"navigation":145,"path":100674,"seo":100675,"stem":100676,"__hash__":100677},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100180,"toc":100664},[100181,100184,100187,100212,100216,100275,100327,100331,100333,100369,100423,100425,100463,100534,100538,100543,100547,100550,100583,100586,100590,100593,100596,100599,100602,100607,100611,100614,100617,100620,100623,100628,100632,100637,100640,100661],[10,100182,100178],{"id":100183},"_9数学函数",[19,100185,100186],{},"补充回顾：python的列表推导式",[38,100188,100190],{"className":30432,"code":100189,"language":30434,"meta":43,"style":43},"[1\u002Fi for i in a]\n",[26,100191,100192],{"__ignoreMap":43},[47,100193,100194,100196,100198,100200,100203,100205,100207,100209],{"class":49,"line":50},[47,100195,1109],{"class":221},[47,100197,436],{"class":85},[47,100199,803],{"class":217},[47,100201,100202],{"class":221},"i ",[47,100204,3118],{"class":217},[47,100206,9531],{"class":221},[47,100208,26097],{"class":217},[47,100210,100211],{"class":221}," a]\n",[14,100213,100215],{"id":100214},"_91-求倒数","9.1 求倒数",[38,100217,100219],{"className":30432,"code":100218,"language":30434,"meta":43,"style":43},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[26,100220,100221,100226,100254,100266],{"__ignoreMap":43},[47,100222,100223],{"class":49,"line":50},[47,100224,100225],{"class":279},"#数组求倒数\n",[47,100227,100228,100230,100232,100234,100236,100238,100240,100242,100244,100246,100248,100250,100252],{"class":49,"line":92},[47,100229,457],{"class":221},[47,100231,267],{"class":217},[47,100233,1109],{"class":221},[47,100235,436],{"class":85},[47,100237,597],{"class":221},[47,100239,298],{"class":85},[47,100241,597],{"class":221},[47,100243,292],{"class":85},[47,100245,597],{"class":221},[47,100247,512],{"class":85},[47,100249,597],{"class":221},[47,100251,538],{"class":85},[47,100253,33300],{"class":221},[47,100255,100256,100258,100260,100263],{"class":49,"line":1273},[47,100257,482],{"class":221},[47,100259,267],{"class":217},[47,100261,100262],{"class":221},"np.array(a)",[47,100264,100265],{"class":279},"#将列表转换为数组\n",[47,100267,100268,100270,100272],{"class":49,"line":1288},[47,100269,436],{"class":85},[47,100271,803],{"class":217},[47,100273,100274],{"class":221},"b\n",[38,100276,100278],{"className":30432,"code":100277,"language":30434,"meta":43,"style":43},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[26,100279,100280,100308,100317,100322],{"__ignoreMap":43},[47,100281,100282,100284,100286,100288,100290,100292,100294,100296,100298,100300,100302,100304,100306],{"class":49,"line":50},[47,100283,457],{"class":221},[47,100285,267],{"class":217},[47,100287,1109],{"class":221},[47,100289,436],{"class":85},[47,100291,597],{"class":221},[47,100293,298],{"class":85},[47,100295,597],{"class":221},[47,100297,292],{"class":85},[47,100299,597],{"class":221},[47,100301,512],{"class":85},[47,100303,597],{"class":221},[47,100305,538],{"class":85},[47,100307,33300],{"class":221},[47,100309,100310,100312,100314],{"class":49,"line":92},[47,100311,482],{"class":221},[47,100313,267],{"class":217},[47,100315,100316],{"class":221},"np.array(a)\n",[47,100318,100319],{"class":49,"line":1273},[47,100320,100321],{"class":279},"#调用numpy中的函数reciprocal()\n",[47,100323,100324],{"class":49,"line":1288},[47,100325,100326],{"class":221},"np.reciprocal(b)\n",[14,100328,100330],{"id":100329},"_92-求平方","9.2 求平方",[19,100332,94584],{},[38,100334,100336],{"className":30432,"code":100335,"language":30434,"meta":43,"style":43},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[26,100337,100338,100343,100348,100364],{"__ignoreMap":43},[47,100339,100340],{"class":49,"line":50},[47,100341,100342],{"class":279},"#square()，求平方\n",[47,100344,100345],{"class":49,"line":92},[47,100346,100347],{"class":279},"#一维数组\n",[47,100349,100350,100352,100354,100356,100358,100360,100362],{"class":49,"line":1273},[47,100351,457],{"class":221},[47,100353,267],{"class":217},[47,100355,93056],{"class":221},[47,100357,436],{"class":85},[47,100359,597],{"class":221},[47,100361,665],{"class":85},[47,100363,228],{"class":221},[47,100365,100366],{"class":49,"line":1288},[47,100367,100368],{"class":221},"np.square(a)\n",[38,100370,100372],{"className":30432,"code":100371,"language":30434,"meta":43,"style":43},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[26,100373,100374,100379,100384,100405],{"__ignoreMap":43},[47,100375,100376],{"class":49,"line":50},[47,100377,100378],{"class":279},"#或者通过循环遍历的形式来计算\n",[47,100380,100381],{"class":49,"line":92},[47,100382,100383],{"class":279},"#这是一个列表\n",[47,100385,100386,100389,100391,100393,100395,100397,100399,100402],{"class":49,"line":1273},[47,100387,100388],{"class":221},"[i",[47,100390,674],{"class":217},[47,100392,100202],{"class":221},[47,100394,3118],{"class":217},[47,100396,9531],{"class":221},[47,100398,26097],{"class":217},[47,100400,100401],{"class":221}," a]",[47,100403,100404],{"class":279},"#这个求完之后在数列当中\n",[47,100406,100407,100410,100412,100414,100416,100418,100420],{"class":49,"line":1288},[47,100408,100409],{"class":221},"np.array([i",[47,100411,674],{"class":217},[47,100413,100202],{"class":221},[47,100415,3118],{"class":217},[47,100417,9531],{"class":221},[47,100419,26097],{"class":217},[47,100421,100422],{"class":221}," a])\n",[19,100424,93345],{},[38,100426,100428],{"className":30432,"code":100427,"language":30434,"meta":43,"style":43},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[26,100429,100430,100434,100458],{"__ignoreMap":43},[47,100431,100432],{"class":49,"line":50},[47,100433,93355],{"class":279},[47,100435,100436,100438,100440,100442,100444,100446,100448,100450,100452,100454,100456],{"class":49,"line":92},[47,100437,93360],{"class":221},[47,100439,267],{"class":217},[47,100441,93056],{"class":221},[47,100443,436],{"class":85},[47,100445,597],{"class":221},[47,100447,742],{"class":85},[47,100449,93061],{"class":221},[47,100451,512],{"class":85},[47,100453,597],{"class":221},[47,100455,292],{"class":85},[47,100457,228],{"class":221},[47,100459,100460],{"class":49,"line":1273},[47,100461,100462],{"class":221},"np.square(aa)\n",[38,100464,100466],{"className":30432,"code":100465,"language":30434,"meta":43,"style":43},"#传统的方式\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",[26,100467,100468,100473,100482,100498,100514,100529],{"__ignoreMap":43},[47,100469,100470],{"class":49,"line":50},[47,100471,100472],{"class":279},"#传统的方式\n",[47,100474,100475,100477,100479],{"class":49,"line":92},[47,100476,98241],{"class":221},[47,100478,267],{"class":217},[47,100480,100481],{"class":221},"np.empty_like(aa)\n",[47,100483,100484,100486,100488,100490,100492,100494,100496],{"class":49,"line":1273},[47,100485,3118],{"class":217},[47,100487,9531],{"class":221},[47,100489,26097],{"class":217},[47,100491,32497],{"class":85},[47,100493,222],{"class":221},[47,100495,512],{"class":85},[47,100497,30840],{"class":221},[47,100499,100500,100502,100504,100506,100508,100510,100512],{"class":49,"line":1288},[47,100501,3294],{"class":217},[47,100503,9593],{"class":221},[47,100505,26097],{"class":217},[47,100507,32497],{"class":85},[47,100509,222],{"class":221},[47,100511,292],{"class":85},[47,100513,30840],{"class":221},[47,100515,100516,100519,100521,100524,100526],{"class":49,"line":1294},[47,100517,100518],{"class":221},"        bb[i,j]",[47,100520,267],{"class":217},[47,100522,100523],{"class":221},"aa[i,j]",[47,100525,674],{"class":217},[47,100527,100528],{"class":221},"aa[i,j]\n",[47,100530,100531],{"class":49,"line":1308},[47,100532,100533],{"class":221},"bb\n",[14,100535,100537],{"id":100536},"_93-求各元素的符号","9.3 求各元素的符号",[19,100539,100540],{},[1556,100541],{"alt":43,"src":100542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,100544,100546],{"id":100545},"_94-modf函数","9.4 modf函数",[19,100548,100549],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[38,100551,100553],{"className":30432,"code":100552,"language":30434,"meta":43,"style":43},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[26,100554,100555,100578],{"__ignoreMap":43},[47,100556,100557,100559,100561,100563,100565,100567,100569,100571,100573,100576],{"class":49,"line":50},[47,100558,457],{"class":221},[47,100560,267],{"class":217},[47,100562,93056],{"class":221},[47,100564,751],{"class":217},[47,100566,665],{"class":85},[47,100568,597],{"class":221},[47,100570,665],{"class":85},[47,100572,597],{"class":221},[47,100574,100575],{"class":85},"0.3",[47,100577,228],{"class":221},[47,100579,100580],{"class":49,"line":92},[47,100581,100582],{"class":221},"np.modf(a)\n",[19,100584,100585],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,100587,100589],{"id":100588},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,100591,100592],{},"np.cell()",[19,100594,100595],{},"np.floor()",[19,100597,100598],{},"np.rint()",[19,100600,100601],{},"对各元素分别向上取整、向下取整、四舍五入",[19,100603,100604],{},[1556,100605],{"alt":43,"src":100606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,100608,100610],{"id":100609},"_96-around函数","9.6 around()函数",[19,100612,100613],{},"around()函数也可以实现对数的小数位数进行操作",[19,100615,100616],{},"其中的参数：",[19,100618,100619],{},"1.要传的数组",[19,100621,100622],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,100624,100625],{},[1556,100626],{"alt":43,"src":100627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,100629,100631],{"id":100630},"_97-三角函数","9.7 三角函数",[19,100633,100634],{},[1556,100635],{"alt":43,"src":100636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,100638,100639],{},"引入图像模块非常重要",[38,100641,100643],{"className":30432,"code":100642,"language":30434,"meta":43,"style":43},"from matplotlib import pyplot as plt\n",[26,100644,100645],{"__ignoreMap":43},[47,100646,100647,100649,100652,100654,100657,100659],{"class":49,"line":50},[47,100648,30791],{"class":217},[47,100650,100651],{"class":221}," matplotlib ",[47,100653,30446],{"class":217},[47,100655,100656],{"class":221}," pyplot ",[47,100658,31437],{"class":217},[47,100660,31491],{"class":221},[134,100662,100663],{},"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":43,"searchDepth":92,"depth":92,"links":100665},[100666,100667,100668,100669,100670,100671,100672],{"id":100214,"depth":92,"text":100215},{"id":100329,"depth":92,"text":100330},{"id":100536,"depth":92,"text":100537},{"id":100545,"depth":92,"text":100546},{"id":100588,"depth":92,"text":100589},{"id":100609,"depth":92,"text":100610},{"id":100630,"depth":92,"text":100631},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100178,"description":142},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100679,"title":100680,"body":100681,"description":142,"extension":143,"meta":100685,"navigation":145,"path":100686,"seo":100687,"stem":100688,"__hash__":100689},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100682,"toc":100683},[],{"title":43,"searchDepth":92,"depth":92,"links":100684},[],{"category":50474},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100680,"description":142},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100691,"title":100692,"body":100693,"description":43,"extension":143,"meta":102701,"navigation":145,"path":102702,"seo":102703,"stem":102704,"__hash__":102705},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100694,"toc":102677},[100695,100698,100702,100705,100708,100714,100717,100740,100743,100777,100780,100821,100825,100828,100921,100924,100968,100971,100988,100991,101005,101008,101011,101056,101059,101096,101100,101103,101109,101114,101134,101138,101141,101207,101210,101228,101232,101235,101264,101274,101280,101284,101287,101293,101304,101308,101311,101341,101344,101624,101627,101630,101641,101644,101647,101669,101676,101679,101697,101700,101703,101717,101725,101728,101754,101760,101763,101766,101776,101788,101808,101817,101837,101847,101871,101884,101898,101903,101944,101961,101986,101998,102018,102024,102069,102088,102105,102118,102134,102141,102153,102162,102197,102218,102243,102256,102280,102295,102320,102323,102344,102353,102356,102367,102371,102374,102380,102392,102399,102403,102406,102418,102421,102435,102438,102448,102458,102461,102501,102504,102508,102514,102517,102531,102535,102538,102571,102575,102578,102601,102609,102612,102618,102624,102627,102630,102658,102662,102665,102671,102674],[10,100696,100692],{"id":100697},"_1环境安装与第一个-mujoco-程序",[14,100699,100701],{"id":100700},"_1目标说明","1.目标说明",[19,100703,100704],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,100706,100707],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[38,100709,100712],{"className":100710,"code":100711,"language":5280,"meta":43},[5278],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[26,100713,100711],{"__ignoreMap":43},[19,100715,100716],{},"需要掌握:",[171,100718,100719,100722,100725,100730,100735],{},[109,100720,100721],{},"Fedora 44 下 MuJoCo 的系统依赖",[109,100723,100724],{},"Python 虚拟环境创建",[109,100726,100727],{},[26,100728,100729],{},"mujoco.MjModel",[109,100731,100732],{},[26,100733,100734],{},"mujoco.MjData",[109,100736,100737],{},[26,100738,100739],{},"mujoco.mj_step(model, data)",[19,100741,100742],{},"MuJoCo 中最重要的两个对象:",[357,100744,100745,100755],{},[360,100746,100747],{},[363,100748,100749,100752],{},[366,100750,100751],{"align":23829},"对象",[366,100753,100754],{"align":23829},"含义",[404,100756,100757,100767],{},[363,100758,100759,100764],{},[409,100760,100761],{"align":23829},[26,100762,100763],{},"MjModel",[409,100765,100766],{"align":23829},"模型结构，来自 XML，基本不随时间变化",[363,100768,100769,100774],{},[409,100770,100771],{"align":23829},[26,100772,100773],{},"MjData",[409,100775,100776],{"align":23829},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,100778,100779],{},"可以先用一个类比理解：",[357,100781,100782,100792],{},[360,100783,100784],{},[363,100785,100786,100789],{},[366,100787,100788],{"align":23829},"类比",[366,100790,100791],{"align":23829},"MuJoCo 对象",[404,100793,100794,100803,100812],{},[363,100795,100796,100799],{},[409,100797,100798],{"align":23829},"游戏地图和角色配置",[409,100800,100801],{"align":23829},[26,100802,100763],{},[363,100804,100805,100808],{},[409,100806,100807],{"align":23829},"游戏运行到当前帧的状态",[409,100809,100810],{"align":23829},[26,100811,100773],{},[363,100813,100814,100817],{},[409,100815,100816],{"align":23829},"前进一帧",[409,100818,100819],{"align":23829},[26,100820,100739],{},[14,100822,100824],{"id":100823},"_2环境与依赖安装","2.环境与依赖安装",[19,100826,100827],{},"Fedora 44 系统依赖:",[38,100829,100831],{"className":40,"code":100830,"language":42,"meta":43,"style":43},"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",[26,100832,100833,100845,100858,100871,100881,100891,100910],{"__ignoreMap":43},[47,100834,100835,100837,100839,100841,100843],{"class":49,"line":50},[47,100836,78],{"class":53},[47,100838,26369],{"class":81},[47,100840,23925],{"class":81},[47,100842,26454],{"class":85},[47,100844,24732],{"class":85},[47,100846,100847,100850,100853,100856],{"class":49,"line":92},[47,100848,100849],{"class":81},"  python3",[47,100851,100852],{"class":81}," python3-pip",[47,100854,100855],{"class":81}," python3-virtualenv",[47,100857,24732],{"class":85},[47,100859,100860,100863,100866,100869],{"class":49,"line":1273},[47,100861,100862],{"class":81},"  mesa-libGL",[47,100864,100865],{"class":81}," mesa-libGLU",[47,100867,100868],{"class":81}," mesa-dri-drivers",[47,100870,24732],{"class":85},[47,100872,100873,100876,100879],{"class":49,"line":1288},[47,100874,100875],{"class":81},"  libglvnd-glx",[47,100877,100878],{"class":81}," libglvnd-opengl",[47,100880,24732],{"class":85},[47,100882,100883,100886,100889],{"class":49,"line":1294},[47,100884,100885],{"class":81},"  glfw",[47,100887,100888],{"class":81}," glfw-devel",[47,100890,24732],{"class":85},[47,100892,100893,100896,100899,100902,100905,100908],{"class":49,"line":1308},[47,100894,100895],{"class":81},"  libX11",[47,100897,100898],{"class":81}," libXcursor",[47,100900,100901],{"class":81}," libXi",[47,100903,100904],{"class":81}," libXinerama",[47,100906,100907],{"class":81}," libXrandr",[47,100909,24732],{"class":85},[47,100911,100912,100915,100918],{"class":49,"line":1314},[47,100913,100914],{"class":81},"  gcc",[47,100916,100917],{"class":81}," gcc-c++",[47,100919,100920],{"class":81}," make\n",[19,100922,100923],{},"创建 Python 环境:",[38,100925,100927],{"className":40,"code":100926,"language":42,"meta":43,"style":43},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[26,100928,100929,100943,100951],{"__ignoreMap":43},[47,100930,100931,100934,100937,100940],{"class":49,"line":50},[47,100932,100933],{"class":53},"python3",[47,100935,100936],{"class":85}," -m",[47,100938,100939],{"class":81}," venv",[47,100941,100942],{"class":81}," .venv\n",[47,100944,100945,100948],{"class":49,"line":92},[47,100946,100947],{"class":85},"source",[47,100949,100950],{"class":81}," .venv\u002Fbin\u002Factivate\n",[47,100952,100953,100955,100957,100960,100962,100965],{"class":49,"line":1273},[47,100954,30434],{"class":53},[47,100956,100936],{"class":85},[47,100958,100959],{"class":81}," pip",[47,100961,23925],{"class":81},[47,100963,100964],{"class":85}," --upgrade",[47,100966,100967],{"class":81}," pip\n",[19,100969,100970],{},"pip 安装:",[38,100972,100974],{"className":40,"code":100973,"language":42,"meta":43,"style":43},"pip install \"mujoco>=2.3\" numpy\n",[26,100975,100976],{"__ignoreMap":43},[47,100977,100978,100980,100982,100985],{"class":49,"line":50},[47,100979,23922],{"class":53},[47,100981,23925],{"class":81},[47,100983,100984],{"class":81}," \"mujoco>=2.3\"",[47,100986,100987],{"class":81}," numpy\n",[19,100989,100990],{},"安装完成后，先做最小检查：",[38,100992,100994],{"className":40,"code":100993,"language":42,"meta":43,"style":43},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[26,100995,100996],{"__ignoreMap":43},[47,100997,100998,101000,101002],{"class":49,"line":50},[47,100999,30434],{"class":53},[47,101001,30412],{"class":85},[47,101003,101004],{"class":81}," \"import mujoco; print(mujoco.__version__)\"\n",[19,101006,101007],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,101009,101010],{},"conda 安装:",[38,101012,101014],{"className":40,"code":101013,"language":42,"meta":43,"style":43},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[26,101015,101016,101036,101046],{"__ignoreMap":43},[47,101017,101018,101020,101022,101024,101027,101030,101033],{"class":49,"line":50},[47,101019,30384],{"class":53},[47,101021,29230],{"class":81},[47,101023,25169],{"class":85},[47,101025,101026],{"class":81}," mujoco-study",[47,101028,101029],{"class":81}," python=",[47,101031,101032],{"class":85},"3.10",[47,101034,101035],{"class":85}," -y\n",[47,101037,101038,101040,101043],{"class":49,"line":92},[47,101039,30384],{"class":53},[47,101041,101042],{"class":81}," activate",[47,101044,101045],{"class":81}," mujoco-study\n",[47,101047,101048,101050,101052,101054],{"class":49,"line":1273},[47,101049,23922],{"class":53},[47,101051,23925],{"class":81},[47,101053,100984],{"class":81},[47,101055,100987],{"class":81},[19,101057,101058],{},"版本冲突说明:",[171,101060,101061,101067,101077,101086],{},[109,101062,101063,101064,28439],{},"不要安装 ",[26,101065,101066],{},"mujoco-py",[109,101068,101069,101070,101072,101073,101076],{},"如果旧项目里同时安装了 ",[26,101071,101066],{}," 和 ",[26,101074,101075],{},"mujoco","，建议新建干净虚拟环境。",[109,101078,101079,101082,101083,28439],{},[26,101080,101081],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[26,101084,101085],{},"~\u002F.mujoco\u002Fmujoco210",[109,101087,101088,101089,82593,101092,101095],{},"离屏渲染可能涉及 OpenGL 后端，",[26,101090,101091],{},"MUJOCO_GL=egl",[26,101093,101094],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,101097,101099],{"id":101098},"_3核心概念解释","3.核心概念解释",[19,101101,101102],{},"MuJoCo 的基本执行流程:",[38,101104,101107],{"className":101105,"code":101106,"language":5280,"meta":43},[5278],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[26,101108,101106],{"__ignoreMap":43},[19,101110,101111,101113],{},[26,101112,100763],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,101115,101116,101118,101119,60,101122,60,101125,60,101128,60,101131,28439],{},[26,101117,100773],{}," 存放仿真运行时状态，例如 ",[26,101120,101121],{},"data.time",[26,101123,101124],{},"data.qpos",[26,101126,101127],{},"data.qvel",[26,101129,101130],{},"data.ctrl",[26,101132,101133],{},"data.xpos",[187,101135,101137],{"id":101136},"xml-是什么","XML 是什么",[19,101139,101140],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[38,101142,101144],{"className":53121,"code":101143,"language":53123,"meta":43,"style":43},"\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",[26,101145,101146,101168,101199],{"__ignoreMap":43},[47,101147,101148,101150,101152,101154,101156,101158,101161,101163,101166],{"class":49,"line":50},[47,101149,1129],{"class":221},[47,101151,51854],{"class":51354},[47,101153,15013],{"class":53},[47,101155,267],{"class":221},[47,101157,53545],{"class":81},[47,101159,101160],{"class":53}," pos",[47,101162,267],{"class":221},[47,101164,101165],{"class":81},"\"0 0 1\"",[47,101167,51361],{"class":221},[47,101169,101170,101172,101175,101177,101179,101182,101184,101186,101188,101191,101193,101196],{"class":49,"line":92},[47,101171,52198],{"class":221},[47,101173,101174],{"class":51354},"geom",[47,101176,15013],{"class":53},[47,101178,267],{"class":221},[47,101180,101181],{"class":81},"\"box_geom\"",[47,101183,53878],{"class":53},[47,101185,267],{"class":221},[47,101187,53545],{"class":81},[47,101189,101190],{"class":53}," size",[47,101192,267],{"class":221},[47,101194,101195],{"class":81},"\"0.1 0.1 0.1\"",[47,101197,101198],{"class":221},"\u002F>\n",[47,101200,101201,101203,101205],{"class":49,"line":1273},[47,101202,51839],{"class":221},[47,101204,51854],{"class":51354},[47,101206,51361],{"class":221},[19,101208,101209],{},"这段意思是：",[171,101211,101212,101218,101225],{},[109,101213,101214,101215,101217],{},"创建一个叫 ",[26,101216,53768],{}," 的刚体。",[109,101219,101220,101221,101224],{},"它初始放在 ",[26,101222,101223],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[109,101226,101227],{},"它里面有一个盒子形状的几何体。",[187,101229,101231],{"id":101230},"timestep-是什么","timestep 是什么",[19,101233,101234],{},"XML 里的：",[38,101236,101238],{"className":53121,"code":101237,"language":53123,"meta":43,"style":43},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[26,101239,101240],{"__ignoreMap":43},[47,101241,101242,101244,101246,101249,101251,101254,101257,101259,101262],{"class":49,"line":50},[47,101243,1129],{"class":221},[47,101245,69220],{"class":51354},[47,101247,101248],{"class":53}," timestep",[47,101250,267],{"class":221},[47,101252,101253],{"class":81},"\"0.01\"",[47,101255,101256],{"class":53}," gravity",[47,101258,267],{"class":221},[47,101260,101261],{"class":81},"\"0 0 -9.81\"",[47,101263,101198],{"class":221},[19,101265,101266,101267,101270,101271,101273],{},"表示每调用一次 ",[26,101268,101269],{},"mj_step","，仿真时间前进 ",[26,101272,39040],{}," 秒。循环 100 次，大约就是 1 秒：",[38,101275,101278],{"className":101276,"code":101277,"language":5280,"meta":43},[5278],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[26,101279,101277],{"__ignoreMap":43},[187,101281,101283],{"id":101282},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,101285,101286],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[38,101288,101291],{"className":101289,"code":101290,"language":5280,"meta":43},[5278],"x y z qw qx qy qz\n",[26,101292,101290],{"__ignoreMap":43},[19,101294,101295,101296,101299,101300,101303],{},"表示一个自由刚体的位置和姿态。其中 ",[26,101297,101298],{},"x y z"," 是位置，",[26,101301,101302],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,101305,101307],{"id":101306},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,101309,101310],{},"新建文件:",[38,101312,101314],{"className":40,"code":101313,"language":42,"meta":43,"style":43},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[26,101315,101316,101326,101333],{"__ignoreMap":43},[47,101317,101318,101321,101323],{"class":49,"line":50},[47,101319,101320],{"class":53},"mkdir",[47,101322,29270],{"class":85},[47,101324,101325],{"class":81}," mujoco_tutorial\n",[47,101327,101328,101331],{"class":49,"line":92},[47,101329,101330],{"class":85},"cd",[47,101332,101325],{"class":81},[47,101334,101335,101338],{"class":49,"line":1273},[47,101336,101337],{"class":53},"touch",[47,101339,101340],{"class":81}," ch1_first_sim.py\n",[19,101342,101343],{},"写入:",[38,101345,101347],{"className":30432,"code":101346,"language":30434,"meta":43,"style":43},"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",[26,101348,101349,101356,101360,101364,101374,101379,101384,101388,101393,101398,101402,101407,101412,101417,101422,101427,101432,101436,101440,101444,101457,101471,101481,101485,101497,101509,101521,101533,101545,101549,101566,101571,101575,101586,101597,101601,101605,101619],{"__ignoreMap":43},[47,101350,101351,101353],{"class":49,"line":50},[47,101352,30446],{"class":217},[47,101354,101355],{"class":221}," mujoco\n",[47,101357,101358],{"class":49,"line":92},[47,101359,2493],{"emptyLinePlaceholder":145},[47,101361,101362],{"class":49,"line":1273},[47,101363,2493],{"emptyLinePlaceholder":145},[47,101365,101366,101369,101371],{"class":49,"line":1288},[47,101367,101368],{"class":85},"XML",[47,101370,13657],{"class":217},[47,101372,101373],{"class":81}," \"\"\"\n",[47,101375,101376],{"class":49,"line":1294},[47,101377,101378],{"class":81},"\u003Cmujoco model=\"first_sim\">\n",[47,101380,101381],{"class":49,"line":1308},[47,101382,101383],{"class":81},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[47,101385,101386],{"class":49,"line":1314},[47,101387,2493],{"emptyLinePlaceholder":145},[47,101389,101390],{"class":49,"line":1405},[47,101391,101392],{"class":81},"  \u003Cworldbody>\n",[47,101394,101395],{"class":49,"line":1411},[47,101396,101397],{"class":81},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[47,101399,101400],{"class":49,"line":1423},[47,101401,2493],{"emptyLinePlaceholder":145},[47,101403,101404],{"class":49,"line":1706},[47,101405,101406],{"class":81},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[47,101408,101409],{"class":49,"line":1711},[47,101410,101411],{"class":81},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[47,101413,101414],{"class":49,"line":1717},[47,101415,101416],{"class":81},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[47,101418,101419],{"class":49,"line":1722},[47,101420,101421],{"class":81},"    \u003C\u002Fbody>\n",[47,101423,101424],{"class":49,"line":1736},[47,101425,101426],{"class":81},"  \u003C\u002Fworldbody>\n",[47,101428,101429],{"class":49,"line":1741},[47,101430,101431],{"class":81},"\u003C\u002Fmujoco>\n",[47,101433,101434],{"class":49,"line":1747},[47,101435,95752],{"class":81},[47,101437,101438],{"class":49,"line":1768},[47,101439,2493],{"emptyLinePlaceholder":145},[47,101441,101442],{"class":49,"line":1773},[47,101443,2493],{"emptyLinePlaceholder":145},[47,101445,101446,101448,101450,101453,101455],{"class":49,"line":1787},[47,101447,32001],{"class":217},[47,101449,2066],{"class":53},[47,101451,101452],{"class":221},"() -> ",[47,101454,95740],{"class":85},[47,101456,3832],{"class":221},[47,101458,101459,101462,101464,101467,101469],{"class":49,"line":1792},[47,101460,101461],{"class":221},"    model ",[47,101463,267],{"class":217},[47,101465,101466],{"class":221}," mujoco.MjModel.from_xml_string(",[47,101468,101368],{"class":85},[47,101470,228],{"class":221},[47,101472,101473,101476,101478],{"class":49,"line":1821},[47,101474,101475],{"class":221},"    data ",[47,101477,267],{"class":217},[47,101479,101480],{"class":221}," mujoco.MjData(model)\n",[47,101482,101483],{"class":49,"line":1826},[47,101484,2493],{"emptyLinePlaceholder":145},[47,101486,101487,101489,101491,101494],{"class":49,"line":1843},[47,101488,31353],{"class":85},[47,101490,222],{"class":221},[47,101492,101493],{"class":81},"\"nq:\"",[47,101495,101496],{"class":221},", model.nq)\n",[47,101498,101499,101501,101503,101506],{"class":49,"line":1848},[47,101500,31353],{"class":85},[47,101502,222],{"class":221},[47,101504,101505],{"class":81},"\"nv:\"",[47,101507,101508],{"class":221},", model.nv)\n",[47,101510,101511,101513,101515,101518],{"class":49,"line":1853},[47,101512,31353],{"class":85},[47,101514,222],{"class":221},[47,101516,101517],{"class":81},"\"nu:\"",[47,101519,101520],{"class":221},", model.nu)\n",[47,101522,101523,101525,101527,101530],{"class":49,"line":1858},[47,101524,31353],{"class":85},[47,101526,222],{"class":221},[47,101528,101529],{"class":81},"\"initial time:\"",[47,101531,101532],{"class":221},", data.time)\n",[47,101534,101535,101537,101539,101542],{"class":49,"line":1872},[47,101536,31353],{"class":85},[47,101538,222],{"class":221},[47,101540,101541],{"class":81},"\"initial qpos:\"",[47,101543,101544],{"class":221},", data.qpos.copy())\n",[47,101546,101547],{"class":49,"line":1877},[47,101548,2493],{"emptyLinePlaceholder":145},[47,101550,101551,101553,101556,101558,101560,101562,101564],{"class":49,"line":2670},[47,101552,3294],{"class":217},[47,101554,101555],{"class":221}," _ ",[47,101557,26097],{"class":217},[47,101559,32497],{"class":85},[47,101561,222],{"class":221},[47,101563,530],{"class":85},[47,101565,30840],{"class":221},[47,101567,101568],{"class":49,"line":2684},[47,101569,101570],{"class":221},"        mujoco.mj_step(model, data)\n",[47,101572,101573],{"class":49,"line":2692},[47,101574,2493],{"emptyLinePlaceholder":145},[47,101576,101577,101579,101581,101584],{"class":49,"line":2697},[47,101578,31353],{"class":85},[47,101580,222],{"class":221},[47,101582,101583],{"class":81},"\"final time:\"",[47,101585,101532],{"class":221},[47,101587,101588,101590,101592,101595],{"class":49,"line":2703},[47,101589,31353],{"class":85},[47,101591,222],{"class":221},[47,101593,101594],{"class":81},"\"final qpos:\"",[47,101596,101544],{"class":221},[47,101598,101599],{"class":49,"line":2709},[47,101600,2493],{"emptyLinePlaceholder":145},[47,101602,101603],{"class":49,"line":2714},[47,101604,2493],{"emptyLinePlaceholder":145},[47,101606,101607,101609,101611,101614,101617],{"class":49,"line":8041},[47,101608,1625],{"class":217},[47,101610,31274],{"class":85},[47,101612,101613],{"class":217}," ==",[47,101615,101616],{"class":81}," \"__main__\"",[47,101618,3832],{"class":221},[47,101620,101621],{"class":49,"line":8065},[47,101622,101623],{"class":221},"    main()\n",[187,101625,101626],{"id":101626},"代码逐段解释",[19,101628,101629],{},"导入库：",[38,101631,101633],{"className":30432,"code":101632,"language":30434,"meta":43,"style":43},"import mujoco\n",[26,101634,101635],{"__ignoreMap":43},[47,101636,101637,101639],{"class":49,"line":50},[47,101638,30446],{"class":217},[47,101640,101355],{"class":221},[19,101642,101643],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,101645,101646],{},"定义 XML：",[38,101648,101650],{"className":30432,"code":101649,"language":30434,"meta":43,"style":43},"XML = \"\"\"\n...\n\"\"\"\n",[26,101651,101652,101660,101665],{"__ignoreMap":43},[47,101653,101654,101656,101658],{"class":49,"line":50},[47,101655,101368],{"class":85},[47,101657,13657],{"class":217},[47,101659,101373],{"class":81},[47,101661,101662],{"class":49,"line":92},[47,101663,101664],{"class":81},"...\n",[47,101666,101667],{"class":49,"line":1273},[47,101668,95752],{"class":81},[19,101670,101671,101672,101675],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[26,101673,101674],{},"freejoint"," 的方块。",[19,101677,101678],{},"编译模型：",[38,101680,101682],{"className":30432,"code":101681,"language":30434,"meta":43,"style":43},"model = mujoco.MjModel.from_xml_string(XML)\n",[26,101683,101684],{"__ignoreMap":43},[47,101685,101686,101689,101691,101693,101695],{"class":49,"line":50},[47,101687,101688],{"class":221},"model ",[47,101690,267],{"class":217},[47,101692,101466],{"class":221},[47,101694,101368],{"class":85},[47,101696,228],{"class":221},[19,101698,101699],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,101701,101702],{},"创建数据：",[38,101704,101706],{"className":30432,"code":101705,"language":30434,"meta":43,"style":43},"data = mujoco.MjData(model)\n",[26,101707,101708],{"__ignoreMap":43},[47,101709,101710,101713,101715],{"class":49,"line":50},[47,101711,101712],{"class":221},"data ",[47,101714,267],{"class":217},[47,101716,101480],{"class":221},[19,101718,101719,101721,101722,101724],{},[26,101720,33455],{}," 会保存仿真当前状态。刚创建时，时间是 ",[26,101723,411],{},"，方块还在初始位置。",[19,101726,101727],{},"推进仿真：",[38,101729,101731],{"className":30432,"code":101730,"language":30434,"meta":43,"style":43},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[26,101732,101733,101749],{"__ignoreMap":43},[47,101734,101735,101737,101739,101741,101743,101745,101747],{"class":49,"line":50},[47,101736,3118],{"class":217},[47,101738,101555],{"class":221},[47,101740,26097],{"class":217},[47,101742,32497],{"class":85},[47,101744,222],{"class":221},[47,101746,530],{"class":85},[47,101748,30840],{"class":221},[47,101750,101751],{"class":49,"line":92},[47,101752,101753],{"class":221},"    mujoco.mj_step(model, data)\n",[19,101755,101756,101757,101759],{},"每次 ",[26,101758,101269],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[187,101761,101762],{"id":101762},"代码逐行细讲",[19,101764,101765],{},"下面把完整代码按新手视角拆开讲。",[38,101767,101768],{"className":30432,"code":101632,"language":30434,"meta":43,"style":43},[26,101769,101770],{"__ignoreMap":43},[47,101771,101772,101774],{"class":49,"line":50},[47,101773,30446],{"class":217},[47,101775,101355],{"class":221},[19,101777,101778,101780,101781,60,101783,60,101785,28439],{},[26,101779,30446],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[26,101782,100729],{},[26,101784,100734],{},[26,101786,101787],{},"mujoco.mj_step",[38,101789,101790],{"className":30432,"code":101649,"language":30434,"meta":43,"style":43},[26,101791,101792,101800,101804],{"__ignoreMap":43},[47,101793,101794,101796,101798],{"class":49,"line":50},[47,101795,101368],{"class":85},[47,101797,13657],{"class":217},[47,101799,101373],{"class":81},[47,101801,101802],{"class":49,"line":92},[47,101803,101664],{"class":81},[47,101805,101806],{"class":49,"line":1273},[47,101807,95752],{"class":81},[19,101809,101810,101812,101813,101816],{},[26,101811,101368],{}," 是一个变量名。右边的三引号 ",[26,101814,101815],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[38,101818,101819],{"className":53121,"code":101378,"language":53123,"meta":43,"style":43},[26,101820,101821],{"__ignoreMap":43},[47,101822,101823,101825,101827,101830,101832,101835],{"class":49,"line":50},[47,101824,1129],{"class":221},[47,101826,101075],{"class":51354},[47,101828,101829],{"class":53}," model",[47,101831,267],{"class":221},[47,101833,101834],{"class":81},"\"first_sim\"",[47,101836,51361],{"class":221},[19,101838,101839,101840,101843,101844,28439],{},"这是 XML 的根标签。",[26,101841,101842],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[26,101845,101846],{},"first_sim",[38,101848,101849],{"className":53121,"code":101237,"language":53123,"meta":43,"style":43},[26,101850,101851],{"__ignoreMap":43},[47,101852,101853,101855,101857,101859,101861,101863,101865,101867,101869],{"class":49,"line":50},[47,101854,1129],{"class":221},[47,101856,69220],{"class":51354},[47,101858,101248],{"class":53},[47,101860,267],{"class":221},[47,101862,101253],{"class":81},[47,101864,101256],{"class":53},[47,101866,267],{"class":221},[47,101868,101261],{"class":81},[47,101870,101198],{"class":221},[19,101872,101873,101875,101876,101879,101880,101883],{},[26,101874,69220],{}," 用来设置仿真参数。",[26,101877,101878],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[26,101881,101882],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[38,101885,101887],{"className":53121,"code":101886,"language":53123,"meta":43,"style":43},"\u003Cworldbody>\n",[26,101888,101889],{"__ignoreMap":43},[47,101890,101891,101893,101896],{"class":49,"line":50},[47,101892,1129],{"class":221},[47,101894,101895],{"class":51354},"worldbody",[47,101897,51361],{"class":221},[19,101899,101900,101902],{},[26,101901,101895],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[38,101904,101906],{"className":53121,"code":101905,"language":53123,"meta":43,"style":43},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[26,101907,101908],{"__ignoreMap":43},[47,101909,101910,101912,101914,101916,101918,101921,101923,101925,101928,101930,101932,101935,101937,101939,101942],{"class":49,"line":50},[47,101911,1129],{"class":221},[47,101913,101174],{"class":51354},[47,101915,15013],{"class":53},[47,101917,267],{"class":221},[47,101919,101920],{"class":81},"\"floor\"",[47,101922,53878],{"class":53},[47,101924,267],{"class":221},[47,101926,101927],{"class":81},"\"plane\"",[47,101929,101190],{"class":53},[47,101931,267],{"class":221},[47,101933,101934],{"class":81},"\"2 2 0.1\"",[47,101936,78821],{"class":53},[47,101938,267],{"class":221},[47,101940,101941],{"class":81},"\"0.8 0.8 0.8 1\"",[47,101943,101198],{"class":221},[19,101945,101946,101947,101949,101950,101953,101954,101957,101958,101960],{},"这行创建地面。",[26,101948,101174],{}," 是几何体。",[26,101951,101952],{},"name=\"floor\""," 是名字。",[26,101955,101956],{},"type=\"plane\""," 表示平面。",[26,101959,55164],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[38,101962,101964],{"className":53121,"code":101963,"language":53123,"meta":43,"style":43},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[26,101965,101966],{"__ignoreMap":43},[47,101967,101968,101970,101972,101974,101976,101978,101980,101982,101984],{"class":49,"line":50},[47,101969,1129],{"class":221},[47,101971,51854],{"class":51354},[47,101973,15013],{"class":53},[47,101975,267],{"class":221},[47,101977,53545],{"class":81},[47,101979,101160],{"class":53},[47,101981,267],{"class":221},[47,101983,101165],{"class":81},[47,101985,51361],{"class":221},[19,101987,101988,101989,28439,101991,101994,101995,101997],{},"这行创建一个刚体，名字叫 ",[26,101990,53768],{},[26,101992,101993],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[26,101996,101223],{},"，也就是离地面 1 米高。",[38,101999,102001],{"className":53121,"code":102000,"language":53123,"meta":43,"style":43},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[26,102002,102003],{"__ignoreMap":43},[47,102004,102005,102007,102009,102011,102013,102016],{"class":49,"line":50},[47,102006,1129],{"class":221},[47,102008,101674],{"class":51354},[47,102010,15013],{"class":53},[47,102012,267],{"class":221},[47,102014,102015],{"class":81},"\"box_free\"",[47,102017,101198],{"class":221},[19,102019,102020,102021,102023],{},"这行很重要。",[26,102022,101674],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[38,102025,102027],{"className":53121,"code":102026,"language":53123,"meta":43,"style":43},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[26,102028,102029],{"__ignoreMap":43},[47,102030,102031,102033,102035,102037,102039,102041,102043,102045,102047,102049,102051,102053,102056,102058,102060,102062,102064,102067],{"class":49,"line":50},[47,102032,1129],{"class":221},[47,102034,101174],{"class":51354},[47,102036,15013],{"class":53},[47,102038,267],{"class":221},[47,102040,101181],{"class":81},[47,102042,53878],{"class":53},[47,102044,267],{"class":221},[47,102046,53545],{"class":81},[47,102048,101190],{"class":53},[47,102050,267],{"class":221},[47,102052,101195],{"class":81},[47,102054,102055],{"class":53}," mass",[47,102057,267],{"class":221},[47,102059,3771],{"class":81},[47,102061,78821],{"class":53},[47,102063,267],{"class":221},[47,102065,102066],{"class":81},"\"1 0 0 1\"",[47,102068,101198],{"class":221},[19,102070,102071,102072,102075,102076,102079,102080,102083,102084,102087],{},"这行给 box body 添加一个盒子形状。",[26,102073,102074],{},"type=\"box\""," 表示形状是盒子。",[26,102077,102078],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[26,102081,102082],{},"mass=\"1\""," 表示质量是 1。",[26,102085,102086],{},"rgba=\"1 0 0 1\""," 表示红色。",[38,102089,102091],{"className":30432,"code":102090,"language":30434,"meta":43,"style":43},"def main() -> None:\n",[26,102092,102093],{"__ignoreMap":43},[47,102094,102095,102097,102099,102101,102103],{"class":49,"line":50},[47,102096,32001],{"class":217},[47,102098,2066],{"class":53},[47,102100,101452],{"class":221},[47,102102,95740],{"class":85},[47,102104,3832],{"class":221},[19,102106,102107,102109,102110,102113,102114,102117],{},[26,102108,32001],{}," 用来定义函数。这里定义了一个叫 ",[26,102111,102112],{},"main"," 的函数。",[26,102115,102116],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[38,102119,102120],{"className":30432,"code":101681,"language":30434,"meta":43,"style":43},[26,102121,102122],{"__ignoreMap":43},[47,102123,102124,102126,102128,102130,102132],{"class":49,"line":50},[47,102125,101688],{"class":221},[47,102127,267],{"class":217},[47,102129,101466],{"class":221},[47,102131,101368],{"class":85},[47,102133,228],{"class":221},[19,102135,102136,102137,102140],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[26,102138,102139],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[38,102142,102143],{"className":30432,"code":101705,"language":30434,"meta":43,"style":43},[26,102144,102145],{"__ignoreMap":43},[47,102146,102147,102149,102151],{"class":49,"line":50},[47,102148,101712],{"class":221},[47,102150,267],{"class":217},[47,102152,101480],{"class":221},[19,102154,102155,102156,102158,102159,102161],{},"这行创建仿真数据。",[26,102157,33455],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[26,102160,33455],{}," 都会变化。",[38,102163,102165],{"className":30432,"code":102164,"language":30434,"meta":43,"style":43},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[26,102166,102167,102177,102187],{"__ignoreMap":43},[47,102168,102169,102171,102173,102175],{"class":49,"line":50},[47,102170,30469],{"class":85},[47,102172,222],{"class":221},[47,102174,101493],{"class":81},[47,102176,101496],{"class":221},[47,102178,102179,102181,102183,102185],{"class":49,"line":92},[47,102180,30469],{"class":85},[47,102182,222],{"class":221},[47,102184,101505],{"class":81},[47,102186,101508],{"class":221},[47,102188,102189,102191,102193,102195],{"class":49,"line":1273},[47,102190,30469],{"class":85},[47,102192,222],{"class":221},[47,102194,101517],{"class":81},[47,102196,101520],{"class":221},[19,102198,102199,102201,102202,102205,102206,102209,102210,102213,102214,102217],{},[26,102200,30469],{}," 用来输出信息。",[26,102203,102204],{},"model.nq"," 是位置变量数量，",[26,102207,102208],{},"model.nv"," 是速度变量数量，",[26,102211,102212],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[26,102215,102216],{},"nu"," 是 0。",[38,102219,102221],{"className":30432,"code":102220,"language":30434,"meta":43,"style":43},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[26,102222,102223,102233],{"__ignoreMap":43},[47,102224,102225,102227,102229,102231],{"class":49,"line":50},[47,102226,30469],{"class":85},[47,102228,222],{"class":221},[47,102230,101529],{"class":81},[47,102232,101532],{"class":221},[47,102234,102235,102237,102239,102241],{"class":49,"line":92},[47,102236,30469],{"class":85},[47,102238,222],{"class":221},[47,102240,101541],{"class":81},[47,102242,101544],{"class":221},[19,102244,102245,102246,102248,102249,102251,102252,102255],{},"这里打印初始时间和初始位置。",[26,102247,101121],{}," 一开始是 0。",[26,102250,101124],{}," 是位置数组。",[26,102253,102254],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[38,102257,102258],{"className":30432,"code":101730,"language":30434,"meta":43,"style":43},[26,102259,102260,102276],{"__ignoreMap":43},[47,102261,102262,102264,102266,102268,102270,102272,102274],{"class":49,"line":50},[47,102263,3118],{"class":217},[47,102265,101555],{"class":221},[47,102267,26097],{"class":217},[47,102269,32497],{"class":85},[47,102271,222],{"class":221},[47,102273,530],{"class":85},[47,102275,30840],{"class":221},[47,102277,102278],{"class":49,"line":92},[47,102279,101753],{"class":221},[19,102281,102282,102284,102285,102288,102289,102291,102292,102294],{},[26,102283,3118],{}," 是循环。",[26,102286,102287],{},"range(100)"," 表示循环 100 次。",[26,102290,1211],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[26,102293,101269],{},"，仿真就前进一步。",[38,102296,102298],{"className":30432,"code":102297,"language":30434,"meta":43,"style":43},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[26,102299,102300,102310],{"__ignoreMap":43},[47,102301,102302,102304,102306,102308],{"class":49,"line":50},[47,102303,30469],{"class":85},[47,102305,222],{"class":221},[47,102307,101583],{"class":81},[47,102309,101532],{"class":221},[47,102311,102312,102314,102316,102318],{"class":49,"line":92},[47,102313,30469],{"class":85},[47,102315,222],{"class":221},[47,102317,101594],{"class":81},[47,102319,101544],{"class":221},[19,102321,102322],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[38,102324,102326],{"className":30432,"code":102325,"language":30434,"meta":43,"style":43},"if __name__ == \"__main__\":\n    main()\n",[26,102327,102328,102340],{"__ignoreMap":43},[47,102329,102330,102332,102334,102336,102338],{"class":49,"line":50},[47,102331,1625],{"class":217},[47,102333,31274],{"class":85},[47,102335,101613],{"class":217},[47,102337,101616],{"class":81},[47,102339,3832],{"class":221},[47,102341,102342],{"class":49,"line":92},[47,102343,101623],{"class":221},[19,102345,102346,102347,102350,102351,28439],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[26,102348,102349],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[26,102352,102349],{},[19,102354,102355],{},"运行:",[38,102357,102359],{"className":40,"code":102358,"language":42,"meta":43,"style":43},"python ch1_first_sim.py\n",[26,102360,102361],{"__ignoreMap":43},[47,102362,102363,102365],{"class":49,"line":50},[47,102364,30434],{"class":53},[47,102366,101340],{"class":81},[14,102368,102370],{"id":102369},"_5运行结果说明","5.运行结果说明",[19,102372,102373],{},"你应该看到类似输出:",[38,102375,102378],{"className":102376,"code":102377,"language":5280,"meta":43},[5278],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[26,102379,102377],{"__ignoreMap":43},[19,102381,102382,102384,102385,102388,102389,28439],{},[26,102383,101674],{}," 有 7 个位置变量: ",[26,102386,102387],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[26,102390,102391],{},"vx vy vz wx wy wz",[19,102393,102394,102395,102398],{},"你还会看到 ",[26,102396,102397],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,102400,102402],{"id":102401},"_6验证步骤","6.验证步骤",[19,102404,102405],{},"确认版本:",[38,102407,102408],{"className":40,"code":100993,"language":42,"meta":43,"style":43},[26,102409,102410],{"__ignoreMap":43},[47,102411,102412,102414,102416],{"class":49,"line":50},[47,102413,30434],{"class":53},[47,102415,30412],{"class":85},[47,102417,101004],{"class":81},[19,102419,102420],{},"确认导入的是官方 bindings:",[38,102422,102424],{"className":40,"code":102423,"language":42,"meta":43,"style":43},"python -c \"import mujoco; print(mujoco)\"\n",[26,102425,102426],{"__ignoreMap":43},[47,102427,102428,102430,102432],{"class":49,"line":50},[47,102429,30434],{"class":53},[47,102431,30412],{"class":85},[47,102433,102434],{"class":81}," \"import mujoco; print(mujoco)\"\n",[19,102436,102437],{},"运行程序:",[38,102439,102440],{"className":40,"code":102358,"language":42,"meta":43,"style":43},[26,102441,102442],{"__ignoreMap":43},[47,102443,102444,102446],{"class":49,"line":50},[47,102445,30434],{"class":53},[47,102447,101340],{"class":81},[19,102449,102450,102451,102454,102455,28439],{},"检查 ",[26,102452,102453],{},"final time"," 是否约等于 ",[26,102456,102457],{},"1.0",[19,102459,102460],{},"再做几个小实验：",[171,102462,102463,102473,102481,102494],{},[109,102464,102465,102466,102468,102469,102472],{},"把 ",[26,102467,101993],{}," 改成 ",[26,102470,102471],{},"pos=\"0 0 2\"","，观察初始高度变化。",[109,102474,102465,102475,102468,102477,102480],{},[26,102476,101882],{},[26,102478,102479],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[109,102482,102465,102483,102468,102485,102488,102489,102491,102492,28439],{},[26,102484,101878],{},[26,102486,102487],{},"timestep=\"0.005\"","，观察 100 步后的 ",[26,102490,102453],{}," 是否变成约 ",[26,102493,35383],{},[109,102495,102496,102497,102500],{},"删除 ",[26,102498,102499],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,102502,102503],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,102505,102507],{"id":102506},"_7常见错误与解决方案","7.常见错误与解决方案",[187,102509,102511],{"id":102510},"modulenotfounderror-no-module-named-mujoco",[26,102512,102513],{},"ModuleNotFoundError: No module named 'mujoco'",[19,102515,102516],{},"解决:",[38,102518,102520],{"className":40,"code":102519,"language":42,"meta":43,"style":43},"pip install \"mujoco>=2.3\"\n",[26,102521,102522],{"__ignoreMap":43},[47,102523,102524,102526,102528],{"class":49,"line":50},[47,102525,23922],{"class":53},[47,102527,23925],{"class":81},[47,102529,102530],{"class":81}," \"mujoco>=2.3\"\n",[187,102532,102534],{"id":102533},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,102536,102537],{},"先安装系统依赖:",[38,102539,102541],{"className":40,"code":102540,"language":42,"meta":43,"style":43},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[26,102542,102543],{"__ignoreMap":43},[47,102544,102545,102547,102549,102551,102553,102556,102558,102561,102563,102566,102568],{"class":49,"line":50},[47,102546,78],{"class":53},[47,102548,26369],{"class":81},[47,102550,23925],{"class":81},[47,102552,26454],{"class":85},[47,102554,102555],{"class":81}," mesa-libGL",[47,102557,100868],{"class":81},[47,102559,102560],{"class":81}," glfw",[47,102562,100888],{"class":81},[47,102564,102565],{"class":81}," libX11",[47,102567,100901],{"class":81},[47,102569,102570],{"class":81}," libXrandr\n",[187,102572,102574],{"id":102573},"xml-解析失败","XML 解析失败",[19,102576,102577],{},"检查:",[171,102579,102580,102583,102586,102592],{},[109,102581,102582],{},"标签是否闭合",[109,102584,102585],{},"属性是否带引号",[109,102587,102588,102589],{},"根节点是否是 ",[26,102590,102591],{},"\u003Cmujoco>",[109,102593,102594,102596,102597,102600],{},[26,102595,51854],{}," 是否放在 ",[26,102598,102599],{},"\u003Cworldbody>"," 内部",[187,102602,102604,102606,102607],{"id":102603},"final-time-不是严格等于-10",[26,102605,102453],{}," 不是严格等于 ",[26,102608,102457],{},[19,102610,102611],{},"这通常不是错误。浮点数计算可能得到：",[38,102613,102616],{"className":102614,"code":102615,"language":5280,"meta":43},[5278],"1.0000000000000007\n",[26,102617,102615],{"__ignoreMap":43},[19,102619,102620,102621,102623],{},"只要接近 ",[26,102622,102457],{}," 就正常。",[187,102625,102626],{"id":102626},"方块没有掉下来",[19,102628,102629],{},"检查：",[171,102631,102632,102638,102644,102649],{},[109,102633,102634,102635],{},"方块 body 里是否有 ",[26,102636,102637],{},"\u003Cfreejoint\u002F>",[109,102639,102640,102641],{},"重力是否是 ",[26,102642,102643],{},"0 0 -9.81",[109,102645,102646,102647],{},"是否真的调用了 ",[26,102648,100739],{},[109,102650,102651,102652,102654,102655],{},"你看的是否是 ",[26,102653,102397],{},"，不是 ",[26,102656,102657],{},"initial qpos",[14,102659,102661],{"id":102660},"_8本章小结","8.本章小结",[19,102663,102664],{},"本章你已经完成了 MuJoCo 的最小闭环：",[38,102666,102669],{"className":102667,"code":102668,"language":5280,"meta":43},[5278],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[26,102670,102668],{"__ignoreMap":43},[19,102672,102673],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[134,102675,102676],{},"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":43,"searchDepth":92,"depth":92,"links":102678},[102679,102680,102681,102686,102690,102691,102692,102700],{"id":100700,"depth":92,"text":100701},{"id":100823,"depth":92,"text":100824},{"id":101098,"depth":92,"text":101099,"children":102682},[102683,102684,102685],{"id":101136,"depth":1273,"text":101137},{"id":101230,"depth":1273,"text":101231},{"id":101282,"depth":1273,"text":101283},{"id":101306,"depth":92,"text":101307,"children":102687},[102688,102689],{"id":101626,"depth":1273,"text":101626},{"id":101762,"depth":1273,"text":101762},{"id":102369,"depth":92,"text":102370},{"id":102401,"depth":92,"text":102402},{"id":102506,"depth":92,"text":102507,"children":102693},[102694,102695,102696,102697,102699],{"id":102510,"depth":1273,"text":102513},{"id":102533,"depth":1273,"text":102534},{"id":102573,"depth":1273,"text":102574},{"id":102603,"depth":1273,"text":102698},"final time 不是严格等于 1.0",{"id":102626,"depth":1273,"text":102626},{"id":102660,"depth":92,"text":102661},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100692,"description":43},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102707,"title":102708,"body":102709,"description":43,"extension":143,"meta":104365,"navigation":145,"path":104366,"seo":104367,"stem":104368,"__hash__":104369},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102710,"toc":104341},[102711,102714,102716,102719,102722,102739,102834,102837,102843,102845,102847,102871,102874,102888,102891,102932,102934,102947,102949,102952,103000,103012,103015,103018,103024,103037,103104,103107,103126,103129,103132,103138,103140,103149,103152,103156,103165,103247,103256,103260,103266,103280,103290,103292,103622,103625,103637,103639,103650,103652,103655,103673,103676,103679,103697,103708,103711,103726,103736,103738,103759,103776,103796,103802,103842,103858,103874,103880,103883,103907,103923,103928,103958,103975,104000,104003,104018,104027,104042,104051,104066,104073,104075,104085,104098,104105,104108,104147,104154,104156,104208,104210,104216,104219,104226,104233,104236,104238,104256,104259,104262,104296,104308,104310,104313,104335,104338],[10,102712,102708],{"id":102713},"_2xml-与-mjcf-物理建模基础",[14,102715,100701],{"id":100700},[19,102717,102718],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,102720,102721],{},"本章结束后，你应该能看懂一个简单模型里：",[171,102723,102724,102727,102730,102733,102736],{},[109,102725,102726],{},"地面在哪里。",[109,102728,102729],{},"物体初始位置在哪里。",[109,102731,102732],{},"几何体是什么形状。",[109,102734,102735],{},"哪些 body 可以自由运动。",[109,102737,102738],{},"如何用名字在 Python 里找到 XML 中的对象。",[357,102740,102741,102751],{},[360,102742,102743],{},[363,102744,102745,102748],{},[366,102746,102747],{"align":23829},"标签",[366,102749,102750],{"align":23829},"作用",[404,102752,102753,102762,102772,102781,102791,102801,102814,102824],{},[363,102754,102755,102759],{},[409,102756,102757],{"align":23829},[26,102758,102591],{},[409,102760,102761],{"align":23829},"根节点",[363,102763,102764,102769],{},[409,102765,102766],{"align":23829},[26,102767,102768],{},"\u003Coption>",[409,102770,102771],{"align":23829},"仿真参数",[363,102773,102774,102778],{},[409,102775,102776],{"align":23829},[26,102777,102599],{},[409,102779,102780],{"align":23829},"世界中的物体",[363,102782,102783,102788],{},[409,102784,102785],{"align":23829},[26,102786,102787],{},"\u003Cbody>",[409,102789,102790],{"align":23829},"刚体",[363,102792,102793,102798],{},[409,102794,102795],{"align":23829},[26,102796,102797],{},"\u003Cgeom>",[409,102799,102800],{"align":23829},"几何体、碰撞体、可视体",[363,102802,102803,102811],{},[409,102804,102805,25032,102808],{"align":23829},[26,102806,102807],{},"\u003Cjoint>",[26,102809,102810],{},"\u003Cfreejoint>",[409,102812,102813],{"align":23829},"关节",[363,102815,102816,102821],{},[409,102817,102818],{"align":23829},[26,102819,102820],{},"\u003Csite>",[409,102822,102823],{"align":23829},"标记点",[363,102825,102826,102831],{},[409,102827,102828],{"align":23829},[26,102829,102830],{},"\u003Cactuator>",[409,102832,102833],{"align":23829},"控制器",[19,102835,102836],{},"初学时可以先记住：",[38,102838,102841],{"className":102839,"code":102840,"language":5280,"meta":43},[5278],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[26,102842,102840],{"__ignoreMap":43},[14,102844,100824],{"id":100823},[19,102846,100827],{},[38,102848,102850],{"className":40,"code":102849,"language":42,"meta":43,"style":43},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[26,102851,102852],{"__ignoreMap":43},[47,102853,102854,102856,102858,102860,102862,102864,102866,102868],{"class":49,"line":50},[47,102855,78],{"class":53},[47,102857,26369],{"class":81},[47,102859,23925],{"class":81},[47,102861,26454],{"class":85},[47,102863,102555],{"class":81},[47,102865,100868],{"class":81},[47,102867,102560],{"class":81},[47,102869,102870],{"class":81}," glfw-devel\n",[19,102872,102873],{},"pip:",[38,102875,102876],{"className":40,"code":100973,"language":42,"meta":43,"style":43},[26,102877,102878],{"__ignoreMap":43},[47,102879,102880,102882,102884,102886],{"class":49,"line":50},[47,102881,23922],{"class":53},[47,102883,23925],{"class":81},[47,102885,100984],{"class":81},[47,102887,100987],{"class":81},[19,102889,102890],{},"conda:",[38,102892,102894],{"className":40,"code":102893,"language":42,"meta":43,"style":43},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[26,102895,102896,102913,102922],{"__ignoreMap":43},[47,102897,102898,102900,102902,102904,102907,102909,102911],{"class":49,"line":50},[47,102899,30384],{"class":53},[47,102901,29230],{"class":81},[47,102903,25169],{"class":85},[47,102905,102906],{"class":81}," mujoco-xml",[47,102908,101029],{"class":81},[47,102910,101032],{"class":85},[47,102912,101035],{"class":85},[47,102914,102915,102917,102919],{"class":49,"line":92},[47,102916,30384],{"class":53},[47,102918,101042],{"class":81},[47,102920,102921],{"class":81}," mujoco-xml\n",[47,102923,102924,102926,102928,102930],{"class":49,"line":1273},[47,102925,23922],{"class":53},[47,102927,23925],{"class":81},[47,102929,100984],{"class":81},[47,102931,100987],{"class":81},[19,102933,101058],{},[171,102935,102936,102939,102944],{},[109,102937,102938],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[109,102940,102941,102942,28439],{},"本章使用基础标签，适用于 ",[26,102943,101081],{},[109,102945,102946],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,102948,101099],{"id":101098},[19,102950,102951],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[38,102953,102955],{"className":53121,"code":102954,"language":53123,"meta":43,"style":43},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[26,102956,102957,102971,102979,102984,102992],{"__ignoreMap":43},[47,102958,102959,102961,102963,102965,102967,102969],{"class":49,"line":50},[47,102960,1129],{"class":221},[47,102962,101075],{"class":51354},[47,102964,101829],{"class":53},[47,102966,267],{"class":221},[47,102968,62733],{"class":81},[47,102970,51361],{"class":221},[47,102972,102973,102975,102977],{"class":49,"line":92},[47,102974,52198],{"class":221},[47,102976,101895],{"class":51354},[47,102978,51361],{"class":221},[47,102980,102981],{"class":49,"line":1273},[47,102982,102983],{"class":221},"    ...\n",[47,102985,102986,102988,102990],{"class":49,"line":1288},[47,102987,52471],{"class":221},[47,102989,101895],{"class":51354},[47,102991,51361],{"class":221},[47,102993,102994,102996,102998],{"class":49,"line":1294},[47,102995,51839],{"class":221},[47,102997,101075],{"class":51354},[47,102999,51361],{"class":221},[19,103001,103002,103004,103005,103007,103008,103011],{},[26,103003,51854],{}," 表示刚体。",[26,103006,101174],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[26,103009,103010],{},"joint"," 表示刚体相对父刚体如何运动。",[187,103013,103014],{"id":103014},"层级结构非常重要",[19,103016,103017],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[38,103019,103022],{"className":103020,"code":103021,"language":5280,"meta":43},[5278],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[26,103023,103021],{"__ignoreMap":43},[19,103025,103026,101072,103029,103032,103033,103036],{},[26,103027,103028],{},"red_box_geom",[26,103030,103031],{},"box_center"," 都属于 ",[26,103034,103035],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[38,103038,103040],{"className":53121,"code":103039,"language":53123,"meta":43,"style":43},"\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",[26,103041,103042,103062,103076,103096],{"__ignoreMap":43},[47,103043,103044,103046,103048,103050,103052,103054,103056,103058,103060],{"class":49,"line":50},[47,103045,1129],{"class":221},[47,103047,51854],{"class":51354},[47,103049,15013],{"class":53},[47,103051,267],{"class":221},[47,103053,53545],{"class":81},[47,103055,101160],{"class":53},[47,103057,267],{"class":221},[47,103059,101165],{"class":81},[47,103061,51361],{"class":221},[47,103063,103064,103066,103068,103070,103072,103074],{"class":49,"line":92},[47,103065,52198],{"class":221},[47,103067,101674],{"class":51354},[47,103069,15013],{"class":53},[47,103071,267],{"class":221},[47,103073,102015],{"class":81},[47,103075,101198],{"class":221},[47,103077,103078,103080,103082,103084,103086,103088,103090,103092,103094],{"class":49,"line":1273},[47,103079,52198],{"class":221},[47,103081,101174],{"class":51354},[47,103083,53878],{"class":53},[47,103085,267],{"class":221},[47,103087,53545],{"class":81},[47,103089,101190],{"class":53},[47,103091,267],{"class":221},[47,103093,101195],{"class":81},[47,103095,101198],{"class":221},[47,103097,103098,103100,103102],{"class":49,"line":1288},[47,103099,51839],{"class":221},[47,103101,51854],{"class":51354},[47,103103,51361],{"class":221},[19,103105,103106],{},"含义:",[171,103108,103109,103115,103120,103123],{},[109,103110,103111,103112,103114],{},"创建名为 ",[26,103113,53768],{}," 的刚体",[109,103116,103117,103118],{},"初始位置在世界坐标 ",[26,103119,101223],{},[109,103121,103122],{},"它有一个自由关节",[109,103124,103125],{},"它有一个盒子几何体",[187,103127,103128],{"id":103128},"坐标怎么理解",[19,103130,103131],{},"MuJoCo 默认使用三维坐标：",[38,103133,103136],{"className":103134,"code":103135,"language":5280,"meta":43},[5278],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[26,103137,103135],{"__ignoreMap":43},[19,103139,14726],{},[38,103141,103143],{"className":53121,"code":103142,"language":53123,"meta":43,"style":43},"pos=\"0 0 1\"\n",[26,103144,103145],{"__ignoreMap":43},[47,103146,103147],{"class":49,"line":50},[47,103148,103142],{"class":221},[19,103150,103151],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[187,103153,103155],{"id":103154},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,103157,103158,103159,82584,103162,103164],{},"不同 ",[26,103160,103161],{},"type",[26,103163,31550],{}," 含义不同：",[357,103166,103167,103182],{},[360,103168,103169],{},[363,103170,103171,103175,103180],{},[366,103172,103173],{"align":23829},[26,103174,103161],{},[366,103176,103177,103179],{"align":23829},[26,103178,31550],{}," 示例",[366,103181,100754],{"align":23829},[404,103183,103184,103198,103213,103232],{},[363,103185,103186,103190,103195],{},[409,103187,103188],{"align":23829},[26,103189,53768],{},[409,103191,103192],{"align":23829},[26,103193,103194],{},"size=\"0.1 0.2 0.3\"",[409,103196,103197],{"align":23829},"x\u002Fy\u002Fz 半边长，不是完整长度",[363,103199,103200,103205,103210],{},[409,103201,103202],{"align":23829},[26,103203,103204],{},"sphere",[409,103206,103207],{"align":23829},[26,103208,103209],{},"size=\"0.1\"",[409,103211,103212],{"align":23829},"球半径",[363,103214,103215,103220,103225],{},[409,103216,103217],{"align":23829},[26,103218,103219],{},"capsule",[409,103221,103222],{"align":23829},[26,103223,103224],{},"size=\"0.03\"",[409,103226,103227,103228,103231],{"align":23829},"胶囊半径，长度常用 ",[26,103229,103230],{},"fromto"," 指定",[363,103233,103234,103239,103244],{},[409,103235,103236],{"align":23829},[26,103237,103238],{},"plane",[409,103240,103241],{"align":23829},[26,103242,103243],{},"size=\"3 3 0.1\"",[409,103245,103246],{"align":23829},"可视平面大小，通常当地面",[19,103248,103249,103250,103252,103253,103255],{},"最容易踩坑的是 box：",[26,103251,102078],{}," 表示边长大约是 ",[26,103254,32091],{},"，因为 MuJoCo 用的是半边长。",[187,103257,103259],{"id":103258},"site-是什么","site 是什么",[19,103261,103262,103265],{},[26,103263,103264],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[171,103267,103268,103271,103274,103277],{},[109,103269,103270],{},"标记机械臂末端。",[109,103272,103273],{},"标记目标位置。",[109,103275,103276],{},"放传感器或相机参考点。",[109,103278,103279],{},"在 Python 中读取某个关键点的世界坐标。",[19,103281,103282,103283,101072,103286,103289],{},"在后面的 Reacher 任务中，",[26,103284,103285],{},"tip",[26,103287,103288],{},"target"," 就会用 site 表示。",[14,103291,101307],{"id":101306},[38,103293,103295],{"className":30432,"code":103294,"language":30434,"meta":43,"style":43},"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",[26,103296,103297,103303,103313,103317,103321,103329,103334,103338,103342,103346,103351,103355,103360,103365,103370,103375,103379,103383,103387,103391,103395,103399,103411,103423,103431,103435,103450,103465,103469,103482,103497,103510,103523,103527,103543,103547,103551,103562,103574,103586,103598,103602,103606,103618],{"__ignoreMap":43},[47,103298,103299,103301],{"class":49,"line":50},[47,103300,30446],{"class":217},[47,103302,101355],{"class":221},[47,103304,103305,103307,103309,103311],{"class":49,"line":92},[47,103306,30446],{"class":217},[47,103308,31434],{"class":221},[47,103310,31437],{"class":217},[47,103312,31440],{"class":221},[47,103314,103315],{"class":49,"line":1273},[47,103316,2493],{"emptyLinePlaceholder":145},[47,103318,103319],{"class":49,"line":1288},[47,103320,2493],{"emptyLinePlaceholder":145},[47,103322,103323,103325,103327],{"class":49,"line":1294},[47,103324,101368],{"class":85},[47,103326,13657],{"class":217},[47,103328,101373],{"class":81},[47,103330,103331],{"class":49,"line":1308},[47,103332,103333],{"class":81},"\u003Cmujoco model=\"xml_basic\">\n",[47,103335,103336],{"class":49,"line":1314},[47,103337,101383],{"class":81},[47,103339,103340],{"class":49,"line":1405},[47,103341,2493],{"emptyLinePlaceholder":145},[47,103343,103344],{"class":49,"line":1411},[47,103345,101392],{"class":81},[47,103347,103348],{"class":49,"line":1423},[47,103349,103350],{"class":81},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[47,103352,103353],{"class":49,"line":1706},[47,103354,2493],{"emptyLinePlaceholder":145},[47,103356,103357],{"class":49,"line":1711},[47,103358,103359],{"class":81},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[47,103361,103362],{"class":49,"line":1717},[47,103363,103364],{"class":81},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[47,103366,103367],{"class":49,"line":1722},[47,103368,103369],{"class":81},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[47,103371,103372],{"class":49,"line":1736},[47,103373,103374],{"class":81},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[47,103376,103377],{"class":49,"line":1741},[47,103378,101421],{"class":81},[47,103380,103381],{"class":49,"line":1747},[47,103382,101426],{"class":81},[47,103384,103385],{"class":49,"line":1768},[47,103386,101431],{"class":81},[47,103388,103389],{"class":49,"line":1773},[47,103390,95752],{"class":81},[47,103392,103393],{"class":49,"line":1787},[47,103394,2493],{"emptyLinePlaceholder":145},[47,103396,103397],{"class":49,"line":1792},[47,103398,2493],{"emptyLinePlaceholder":145},[47,103400,103401,103403,103405,103407,103409],{"class":49,"line":1821},[47,103402,32001],{"class":217},[47,103404,2066],{"class":53},[47,103406,101452],{"class":221},[47,103408,95740],{"class":85},[47,103410,3832],{"class":221},[47,103412,103413,103415,103417,103419,103421],{"class":49,"line":1826},[47,103414,101461],{"class":221},[47,103416,267],{"class":217},[47,103418,101466],{"class":221},[47,103420,101368],{"class":85},[47,103422,228],{"class":221},[47,103424,103425,103427,103429],{"class":49,"line":1843},[47,103426,101475],{"class":221},[47,103428,267],{"class":217},[47,103430,101480],{"class":221},[47,103432,103433],{"class":49,"line":1848},[47,103434,2493],{"emptyLinePlaceholder":145},[47,103436,103437,103440,103442,103445,103448],{"class":49,"line":1853},[47,103438,103439],{"class":221},"    box_body_id ",[47,103441,267],{"class":217},[47,103443,103444],{"class":221}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[47,103446,103447],{"class":81},"\"red_box\"",[47,103449,228],{"class":221},[47,103451,103452,103455,103457,103460,103463],{"class":49,"line":1858},[47,103453,103454],{"class":221},"    site_id ",[47,103456,267],{"class":217},[47,103458,103459],{"class":221}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[47,103461,103462],{"class":81},"\"box_center\"",[47,103464,228],{"class":221},[47,103466,103467],{"class":49,"line":1872},[47,103468,2493],{"emptyLinePlaceholder":145},[47,103470,103471,103473,103476,103478,103480],{"class":49,"line":1877},[47,103472,3194],{"class":217},[47,103474,103475],{"class":221}," box_body_id ",[47,103477,1129],{"class":217},[47,103479,4186],{"class":85},[47,103481,3832],{"class":221},[47,103483,103484,103487,103490,103492,103495],{"class":49,"line":2670},[47,103485,103486],{"class":217},"        raise",[47,103488,103489],{"class":85}," RuntimeError",[47,103491,222],{"class":221},[47,103493,103494],{"class":81},"\"body red_box not found\"",[47,103496,228],{"class":221},[47,103498,103499,103501,103504,103506,103508],{"class":49,"line":2684},[47,103500,3194],{"class":217},[47,103502,103503],{"class":221}," site_id ",[47,103505,1129],{"class":217},[47,103507,4186],{"class":85},[47,103509,3832],{"class":221},[47,103511,103512,103514,103516,103518,103521],{"class":49,"line":2692},[47,103513,103486],{"class":217},[47,103515,103489],{"class":85},[47,103517,222],{"class":221},[47,103519,103520],{"class":81},"\"site box_center not found\"",[47,103522,228],{"class":221},[47,103524,103525],{"class":49,"line":2697},[47,103526,2493],{"emptyLinePlaceholder":145},[47,103528,103529,103531,103533,103535,103537,103539,103541],{"class":49,"line":2703},[47,103530,3294],{"class":217},[47,103532,101555],{"class":221},[47,103534,26097],{"class":217},[47,103536,32497],{"class":85},[47,103538,222],{"class":221},[47,103540,1816],{"class":85},[47,103542,30840],{"class":221},[47,103544,103545],{"class":49,"line":2709},[47,103546,101570],{"class":221},[47,103548,103549],{"class":49,"line":2714},[47,103550,2493],{"emptyLinePlaceholder":145},[47,103552,103553,103555,103557,103560],{"class":49,"line":8041},[47,103554,31353],{"class":85},[47,103556,222],{"class":221},[47,103558,103559],{"class":81},"\"simulation time:\"",[47,103561,101532],{"class":221},[47,103563,103564,103566,103568,103571],{"class":49,"line":8065},[47,103565,31353],{"class":85},[47,103567,222],{"class":221},[47,103569,103570],{"class":81},"\"box body position:\"",[47,103572,103573],{"class":221},", data.xpos[box_body_id].copy())\n",[47,103575,103576,103578,103580,103583],{"class":49,"line":8070},[47,103577,31353],{"class":85},[47,103579,222],{"class":221},[47,103581,103582],{"class":81},"\"site position:\"",[47,103584,103585],{"class":221},", data.site_xpos[site_id].copy())\n",[47,103587,103588,103590,103592,103595],{"class":49,"line":8076},[47,103589,31353],{"class":85},[47,103591,222],{"class":221},[47,103593,103594],{"class":81},"\"box qpos:\"",[47,103596,103597],{"class":221},", np.array(data.qpos))\n",[47,103599,103600],{"class":49,"line":8103},[47,103601,2493],{"emptyLinePlaceholder":145},[47,103603,103604],{"class":49,"line":8108},[47,103605,2493],{"emptyLinePlaceholder":145},[47,103607,103608,103610,103612,103614,103616],{"class":49,"line":8114},[47,103609,1625],{"class":217},[47,103611,31274],{"class":85},[47,103613,101613],{"class":217},[47,103615,101616],{"class":81},[47,103617,3832],{"class":221},[47,103619,103620],{"class":49,"line":8126},[47,103621,101623],{"class":221},[19,103623,103624],{},"保存为：",[38,103626,103628],{"className":40,"code":103627,"language":42,"meta":43,"style":43},"touch ch2_xml_basic.py\n",[26,103629,103630],{"__ignoreMap":43},[47,103631,103632,103634],{"class":49,"line":50},[47,103633,101337],{"class":53},[47,103635,103636],{"class":81}," ch2_xml_basic.py\n",[19,103638,102355],{},[38,103640,103642],{"className":40,"code":103641,"language":42,"meta":43,"style":43},"python ch2_xml_basic.py\n",[26,103643,103644],{"__ignoreMap":43},[47,103645,103646,103648],{"class":49,"line":50},[47,103647,30434],{"class":53},[47,103649,103636],{"class":81},[187,103651,101626],{"id":101626},[19,103653,103654],{},"用名字查找 body：",[38,103656,103658],{"className":30432,"code":103657,"language":30434,"meta":43,"style":43},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[26,103659,103660],{"__ignoreMap":43},[47,103661,103662,103665,103667,103669,103671],{"class":49,"line":50},[47,103663,103664],{"class":221},"box_body_id ",[47,103666,267],{"class":217},[47,103668,103444],{"class":221},[47,103670,103447],{"class":81},[47,103672,228],{"class":221},[19,103674,103675],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,103677,103678],{},"用名字查找 site：",[38,103680,103682],{"className":30432,"code":103681,"language":30434,"meta":43,"style":43},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[26,103683,103684],{"__ignoreMap":43},[47,103685,103686,103689,103691,103693,103695],{"class":49,"line":50},[47,103687,103688],{"class":221},"site_id ",[47,103690,267],{"class":217},[47,103692,103459],{"class":221},[47,103694,103462],{"class":81},[47,103696,228],{"class":221},[19,103698,103699,103700,103703,103704,103707],{},"注意第二个参数是对象类型。查 body 就用 ",[26,103701,103702],{},"mjOBJ_BODY","，查 site 就用 ",[26,103705,103706],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,103709,103710],{},"读取世界坐标：",[38,103712,103714],{"className":30432,"code":103713,"language":30434,"meta":43,"style":43},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[26,103715,103716,103721],{"__ignoreMap":43},[47,103717,103718],{"class":49,"line":50},[47,103719,103720],{"class":221},"data.xpos[box_body_id]\n",[47,103722,103723],{"class":49,"line":92},[47,103724,103725],{"class":221},"data.site_xpos[site_id]\n",[19,103727,103728,103731,103732,103735],{},[26,103729,103730],{},"xpos"," 是 body 的世界坐标，",[26,103733,103734],{},"site_xpos"," 是 site 的世界坐标。",[187,103737,101762],{"id":101762},[38,103739,103741],{"className":30432,"code":103740,"language":30434,"meta":43,"style":43},"import mujoco\nimport numpy as np\n",[26,103742,103743,103749],{"__ignoreMap":43},[47,103744,103745,103747],{"class":49,"line":50},[47,103746,30446],{"class":217},[47,103748,101355],{"class":221},[47,103750,103751,103753,103755,103757],{"class":49,"line":92},[47,103752,30446],{"class":217},[47,103754,31434],{"class":221},[47,103756,31437],{"class":217},[47,103758,31440],{"class":221},[19,103760,103761,103762,103765,103766,103769,103770,60,103773,28439],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[26,103763,103764],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[26,103767,103768],{},"as np"," 是习惯写法，后面就可以写 ",[26,103771,103772],{},"np.array(...)",[26,103774,103775],{},"np.round(...)",[38,103777,103778],{"className":30432,"code":101649,"language":30434,"meta":43,"style":43},[26,103779,103780,103788,103792],{"__ignoreMap":43},[47,103781,103782,103784,103786],{"class":49,"line":50},[47,103783,101368],{"class":85},[47,103785,13657],{"class":217},[47,103787,101373],{"class":81},[47,103789,103790],{"class":49,"line":92},[47,103791,101664],{"class":81},[47,103793,103794],{"class":49,"line":1273},[47,103795,95752],{"class":81},[19,103797,103798,103799,28439],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[26,103800,103801],{},"mujoco.MjModel.from_xml_string(XML)",[38,103803,103805],{"className":53121,"code":103804,"language":53123,"meta":43,"style":43},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[26,103806,103807],{"__ignoreMap":43},[47,103808,103809,103811,103813,103815,103817,103819,103821,103823,103826,103828,103830,103833,103835,103837,103840],{"class":49,"line":50},[47,103810,1129],{"class":221},[47,103812,103264],{"class":51354},[47,103814,15013],{"class":53},[47,103816,267],{"class":221},[47,103818,103462],{"class":81},[47,103820,101160],{"class":53},[47,103822,267],{"class":221},[47,103824,103825],{"class":81},"\"0 0 0\"",[47,103827,101190],{"class":53},[47,103829,267],{"class":221},[47,103831,103832],{"class":81},"\"0.03\"",[47,103834,78821],{"class":53},[47,103836,267],{"class":221},[47,103838,103839],{"class":81},"\"0 1 0 1\"",[47,103841,101198],{"class":221},[19,103843,103844,103846,103847,103850,103851,103853,103854,103857],{},[26,103845,103264],{}," 是标记点。",[26,103848,103849],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[26,103852,103224],{}," 表示显示出来的小球大小。",[26,103855,103856],{},"rgba=\"0 1 0 1\""," 表示绿色。",[38,103859,103860],{"className":30432,"code":103657,"language":30434,"meta":43,"style":43},[26,103861,103862],{"__ignoreMap":43},[47,103863,103864,103866,103868,103870,103872],{"class":49,"line":50},[47,103865,103664],{"class":221},[47,103867,267],{"class":217},[47,103869,103444],{"class":221},[47,103871,103447],{"class":81},[47,103873,228],{"class":221},[19,103875,103876,103877,103879],{},"这行的作用是：根据名字 ",[26,103878,103447],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,103881,103882],{},"拆开看：",[171,103884,103885,103891,103896,103902],{},[109,103886,103887,103890],{},[26,103888,103889],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[109,103892,103893,103895],{},[26,103894,102139],{}," 是被查询的模型。",[109,103897,103898,103901],{},[26,103899,103900],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[109,103903,103904,103906],{},[26,103905,103447],{}," 是 XML 里写的名字。",[38,103908,103909],{"className":30432,"code":103681,"language":30434,"meta":43,"style":43},[26,103910,103911],{"__ignoreMap":43},[47,103912,103913,103915,103917,103919,103921],{"class":49,"line":50},[47,103914,103688],{"class":221},[47,103916,267],{"class":217},[47,103918,103459],{"class":221},[47,103920,103462],{"class":81},[47,103922,228],{"class":221},[19,103924,103925,103926,28439],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[26,103927,103462],{},[38,103929,103931],{"className":30432,"code":103930,"language":30434,"meta":43,"style":43},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[26,103932,103933,103945],{"__ignoreMap":43},[47,103934,103935,103937,103939,103941,103943],{"class":49,"line":50},[47,103936,1625],{"class":217},[47,103938,103475],{"class":221},[47,103940,1129],{"class":217},[47,103942,4186],{"class":85},[47,103944,3832],{"class":221},[47,103946,103947,103950,103952,103954,103956],{"class":49,"line":92},[47,103948,103949],{"class":217},"    raise",[47,103951,103489],{"class":85},[47,103953,222],{"class":221},[47,103955,103494],{"class":81},[47,103957,228],{"class":221},[19,103959,103960,103962,103963,103966,103967,103970,103971,103974],{},[26,103961,1625],{}," 是条件判断。",[26,103964,103965],{},"mj_name2id"," 找不到对象时会返回 ",[26,103968,103969],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[26,103972,103973],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[38,103976,103978],{"className":30432,"code":103977,"language":30434,"meta":43,"style":43},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[26,103979,103980,103996],{"__ignoreMap":43},[47,103981,103982,103984,103986,103988,103990,103992,103994],{"class":49,"line":50},[47,103983,3118],{"class":217},[47,103985,101555],{"class":221},[47,103987,26097],{"class":217},[47,103989,32497],{"class":85},[47,103991,222],{"class":221},[47,103993,1816],{"class":85},[47,103995,30840],{"class":221},[47,103997,103998],{"class":49,"line":92},[47,103999,101753],{"class":221},[19,104001,104002],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[38,104004,104006],{"className":30432,"code":104005,"language":30434,"meta":43,"style":43},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[26,104007,104008],{"__ignoreMap":43},[47,104009,104010,104012,104014,104016],{"class":49,"line":50},[47,104011,30469],{"class":85},[47,104013,222],{"class":221},[47,104015,103570],{"class":81},[47,104017,103573],{"class":221},[19,104019,104020,104022,104023,104026],{},[26,104021,101133],{}," 保存所有 body 的世界坐标。",[26,104024,104025],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[38,104028,104030],{"className":30432,"code":104029,"language":30434,"meta":43,"style":43},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[26,104031,104032],{"__ignoreMap":43},[47,104033,104034,104036,104038,104040],{"class":49,"line":50},[47,104035,30469],{"class":85},[47,104037,222],{"class":221},[47,104039,103582],{"class":81},[47,104041,103585],{"class":221},[19,104043,104044,104047,104048,104050],{},[26,104045,104046],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[26,104049,103031],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[38,104052,104054],{"className":30432,"code":104053,"language":30434,"meta":43,"style":43},"print(\"box qpos:\", np.array(data.qpos))\n",[26,104055,104056],{"__ignoreMap":43},[47,104057,104058,104060,104062,104064],{"class":49,"line":50},[47,104059,30469],{"class":85},[47,104061,222],{"class":221},[47,104063,103594],{"class":81},[47,104065,103597],{"class":221},[19,104067,104068,104069,104072],{},"这里打印广义位置数组。",[26,104070,104071],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,104074,102370],{"id":102369},[19,104076,104077,104078,104081,104082,28439],{},"程序会输出 ",[26,104079,104080],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[26,104083,104084],{},"qpos",[19,104086,104087,104089,104090,104093,104094,104097],{},[26,104088,104025],{}," 是 body 的世界坐标位置。",[26,104091,104092],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[26,104095,104096],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,104099,82276,104100,82584,104102,104104],{},[26,104101,103031],{},[26,104103,103849],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,104106,104107],{},"如果你把 site 改成：",[38,104109,104111],{"className":53121,"code":104110,"language":53123,"meta":43,"style":43},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[26,104112,104113],{"__ignoreMap":43},[47,104114,104115,104117,104119,104121,104123,104126,104128,104130,104133,104135,104137,104139,104141,104143,104145],{"class":49,"line":50},[47,104116,1129],{"class":221},[47,104118,103264],{"class":51354},[47,104120,15013],{"class":53},[47,104122,267],{"class":221},[47,104124,104125],{"class":81},"\"box_top\"",[47,104127,101160],{"class":53},[47,104129,267],{"class":221},[47,104131,104132],{"class":81},"\"0 0 0.15\"",[47,104134,101190],{"class":53},[47,104136,267],{"class":221},[47,104138,103832],{"class":81},[47,104140,78821],{"class":53},[47,104142,267],{"class":221},[47,104144,103839],{"class":81},[47,104146,101198],{"class":221},[19,104148,104149,104150,104153],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[26,104151,104152],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,104155,102402],{"id":102401},[171,104157,104158,104167,104170,104177,104183,104194],{},[109,104159,102465,104160,104162,104163,102468,104165,28439],{},[26,104161,103035],{}," 的初始高度从 ",[26,104164,436],{},[26,104166,298],{},[109,104168,104169],{},"重新运行程序。",[109,104171,104172,104173,104176],{},"观察 ",[26,104174,104175],{},"box qpos"," 和最终位置是否变化。",[109,104178,104179,104180,104182],{},"故意把 ",[26,104181,103264],{}," 名称改错，确认程序能报错。",[109,104184,102465,104185,104187,104188,102468,104190,104193],{},[26,104186,101174],{}," 的颜色 ",[26,104189,102086],{},[26,104191,104192],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[109,104195,102465,104196,82584,104198,102468,104201,104204,104205,104207],{},[26,104197,103031],{},[26,104199,104200],{},"pos",[26,104202,104203],{},"0 0 0.2","，观察 ",[26,104206,104152],{}," 如何变化。",[14,104209,102507],{"id":102506},[187,104211,104213],{"id":104212},"xml-error-schema-violation",[26,104214,104215],{},"XML Error: Schema violation",[19,104217,104218],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[187,104220,104222,81344,104224],{"id":104221},"mj_name2id-返回-1",[26,104223,103965],{},[26,104225,103969],{},[19,104227,104228,104229,104232],{},"说明名字没有找到。检查 XML 中 ",[26,104230,104231],{},"name=\"...\"","，并确认对象类型正确。",[187,104234,104235],{"id":104235},"物体不下落",[19,104237,102577],{},[171,104239,104240,104245,104250],{},[109,104241,104242,104243],{},"body 是否有 ",[26,104244,101674],{},[109,104246,104247,104248],{},"gravity 是否为 ",[26,104249,102643],{},[109,104251,104252,104253,104255],{},"body 是否被固定在 ",[26,104254,101895],{}," 中",[187,104257,104258],{"id":104258},"坐标看起来不符合预期",[19,104260,104261],{},"先区分两种坐标：",[357,104263,104264,104273],{},[360,104265,104266],{},[363,104267,104268,104271],{},[366,104269,104270],{"align":23829},"坐标",[366,104272,100754],{"align":23829},[404,104274,104275,104285],{},[363,104276,104277,104282],{},[409,104278,104279,104280],{"align":23829},"XML 里的 ",[26,104281,104200],{},[409,104283,104284],{"align":23829},"相对父 body 的局部坐标",[363,104286,104287,104293],{},[409,104288,104289,25032,104291],{"align":23829},[26,104290,101133],{},[26,104292,104046],{},[409,104294,104295],{"align":23829},"仿真更新后的世界坐标",[19,104297,104298,104299,104301,104302,82593,104305,104307],{},"如果你修改了 ",[26,104300,101124],{},"，但还没调用 ",[26,104303,104304],{},"mj_forward",[26,104306,101269],{},"，世界坐标可能还没有更新。",[14,104309,102661],{"id":102660},[19,104311,104312],{},"MJCF 建模先掌握四件事：",[171,104314,104315,104320,104325,104330],{},[109,104316,104317,104319],{},[26,104318,51854],{}," 表示刚体层级。",[109,104321,104322,104324],{},[26,104323,101174],{}," 表示形状、碰撞和质量。",[109,104326,104327,104329],{},[26,104328,103010],{}," 决定 body 能不能动、怎么动。",[109,104331,104332,104334],{},[26,104333,103264],{}," 用来标记关键点，方便 Python 读取位置。",[19,104336,104337],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[134,104339,104340],{},"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":43,"searchDepth":92,"depth":92,"links":104342},[104343,104344,104345,104351,104355,104356,104357,104364],{"id":100700,"depth":92,"text":100701},{"id":100823,"depth":92,"text":100824},{"id":101098,"depth":92,"text":101099,"children":104346},[104347,104348,104349,104350],{"id":103014,"depth":1273,"text":103014},{"id":103128,"depth":1273,"text":103128},{"id":103154,"depth":1273,"text":103155},{"id":103258,"depth":1273,"text":103259},{"id":101306,"depth":92,"text":101307,"children":104352},[104353,104354],{"id":101626,"depth":1273,"text":101626},{"id":101762,"depth":1273,"text":101762},{"id":102369,"depth":92,"text":102370},{"id":102401,"depth":92,"text":102402},{"id":102506,"depth":92,"text":102507,"children":104358},[104359,104360,104362,104363],{"id":104212,"depth":1273,"text":104215},{"id":104221,"depth":1273,"text":104361},"mj_name2id 返回 -1",{"id":104235,"depth":1273,"text":104235},{"id":104258,"depth":1273,"text":104258},{"id":102660,"depth":92,"text":102661},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102708,"description":43},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104371,"title":104372,"body":104373,"description":43,"extension":143,"meta":105868,"navigation":145,"path":105869,"seo":105870,"stem":105871,"__hash__":105872},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104374,"toc":105840},[104375,104378,104380,104383,104386,104424,104427,104433,104436,104438,104440,104467,104469,104483,104485,104526,104528,104552,104554,104557,104566,104575,104578,104587,104595,104604,104607,104617,104620,104672,104679,104685,104693,104741,104744,104763,104766,104774,104778,104787,104820,104822,105170,105172,105184,105186,105197,105199,105202,105223,105229,105232,105257,105267,105270,105278,105281,105284,105305,105316,105318,105338,105341,105362,105371,105390,105396,105421,105424,105438,105445,105469,105472,105480,105489,105505,105517,105525,105534,105536,105539,105563,105568,105571,105593,105595,105634,105636,105643,105645,105653,105656,105659,105671,105712,105719,105730,105737,105740,105789,105792,105795,105801,105803,105808,105834,105837],[10,104376,104372],{"id":104377},"_3python-控制接口读取状态与推进仿真",[14,104379,100701],{"id":100700},[19,104381,104382],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,104384,104385],{},"你将学习:",[171,104387,104388,104393,104398,104402,104407,104418],{},[109,104389,104390],{},[26,104391,104392],{},"MjModel.from_xml_string",[109,104394,104395],{},[26,104396,104397],{},"MjData(model)",[109,104399,104400],{},[26,104401,101269],{},[109,104403,104404],{},[26,104405,104406],{},"mj_resetData",[109,104408,104409,104410,60,104412,60,104415],{},"读取 ",[26,104411,104084],{},[26,104413,104414],{},"qvel",[26,104416,104417],{},"ctrl",[109,104419,104420,104421],{},"使用 ",[26,104422,104423],{},"model.opt.timestep",[19,104425,104426],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[38,104428,104431],{"className":104429,"code":104430,"language":5280,"meta":43},[5278],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[26,104432,104430],{"__ignoreMap":43},[19,104434,104435],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,104437,100824],{"id":100823},[19,104439,100827],{},[38,104441,104443],{"className":40,"code":104442,"language":42,"meta":43,"style":43},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[26,104444,104445],{"__ignoreMap":43},[47,104446,104447,104449,104451,104453,104455,104458,104460,104462,104464],{"class":49,"line":50},[47,104448,78],{"class":53},[47,104450,26369],{"class":81},[47,104452,23925],{"class":81},[47,104454,26454],{"class":85},[47,104456,104457],{"class":81}," python3",[47,104459,100852],{"class":81},[47,104461,102555],{"class":81},[47,104463,100868],{"class":81},[47,104465,104466],{"class":81}," glfw\n",[19,104468,102873],{},[38,104470,104471],{"className":40,"code":100973,"language":42,"meta":43,"style":43},[26,104472,104473],{"__ignoreMap":43},[47,104474,104475,104477,104479,104481],{"class":49,"line":50},[47,104476,23922],{"class":53},[47,104478,23925],{"class":81},[47,104480,100984],{"class":81},[47,104482,100987],{"class":81},[19,104484,102890],{},[38,104486,104488],{"className":40,"code":104487,"language":42,"meta":43,"style":43},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[26,104489,104490,104507,104516],{"__ignoreMap":43},[47,104491,104492,104494,104496,104498,104501,104503,104505],{"class":49,"line":50},[47,104493,30384],{"class":53},[47,104495,29230],{"class":81},[47,104497,25169],{"class":85},[47,104499,104500],{"class":81}," mujoco-python-api",[47,104502,101029],{"class":81},[47,104504,101032],{"class":85},[47,104506,101035],{"class":85},[47,104508,104509,104511,104513],{"class":49,"line":92},[47,104510,30384],{"class":53},[47,104512,101042],{"class":81},[47,104514,104515],{"class":81}," mujoco-python-api\n",[47,104517,104518,104520,104522,104524],{"class":49,"line":1273},[47,104519,23922],{"class":53},[47,104521,23925],{"class":81},[47,104523,100984],{"class":81},[47,104525,100987],{"class":81},[19,104527,101058],{},[171,104529,104530,104537,104546],{},[109,104531,104532,101072,104534,104536],{},[26,104533,100729],{},[26,104535,100734],{}," 是官方 Python bindings 的类名。",[109,104538,104539,104540,104543,104544,28439],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[26,104541,104542],{},"mjModel"," 在 Python 中是 ",[26,104545,100763],{},[109,104547,104548,104549,28439],{},"不要使用 ",[26,104550,104551],{},"sim = mujoco_py.MjSim(...)",[14,104553,101099],{"id":101098},[19,104555,104556],{},"仿真推进核心代码:",[38,104558,104560],{"className":30432,"code":104559,"language":30434,"meta":43,"style":43},"mujoco.mj_step(model, data)\n",[26,104561,104562],{"__ignoreMap":43},[47,104563,104564],{"class":49,"line":50},[47,104565,104559],{"class":221},[19,104567,104568,104569,60,104571,60,104573,28439],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[26,104570,101124],{},[26,104572,101127],{},[26,104574,101121],{},[19,104576,104577],{},"重置仿真:",[38,104579,104581],{"className":30432,"code":104580,"language":30434,"meta":43,"style":43},"mujoco.mj_resetData(model, data)\n",[26,104582,104583],{"__ignoreMap":43},[47,104584,104585],{"class":49,"line":50},[47,104586,104580],{"class":221},[19,104588,104589,104590,82593,104592,104594],{},"如果手动修改了 ",[26,104591,101124],{},[26,104593,101127],{},"，通常应调用:",[38,104596,104598],{"className":30432,"code":104597,"language":30434,"meta":43,"style":43},"mujoco.mj_forward(model, data)\n",[26,104599,104600],{"__ignoreMap":43},[47,104601,104602],{"class":49,"line":50},[47,104603,104597],{"class":221},[19,104605,104606],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[187,104608,104610,60,104612,60,104614,104616],{"id":104609},"qposqvelctrl-是什么",[26,104611,104084],{},[26,104613,104414],{},[26,104615,104417],{}," 是什么",[19,104618,104619],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[357,104621,104622,104634],{},[360,104623,104624],{},[363,104625,104626,104629,104631],{},[366,104627,104628],{"align":23829},"字段",[366,104630,100754],{"align":23829},[366,104632,104633],{"align":23829},"谁来修改",[404,104635,104636,104648,104660],{},[363,104637,104638,104642,104645],{},[409,104639,104640],{"align":23829},[26,104641,101124],{},[409,104643,104644],{"align":23829},"广义位置，例如小车位置、关节角、自由物体位置姿态",[409,104646,104647],{"align":23829},"MuJoCo 更新，也可以手动设置初始状态",[363,104649,104650,104654,104657],{},[409,104651,104652],{"align":23829},[26,104653,101127],{},[409,104655,104656],{"align":23829},"广义速度，例如小车速度、关节角速度",[409,104658,104659],{"align":23829},"MuJoCo 更新，也可以手动清零",[363,104661,104662,104666,104669],{},[409,104663,104664],{"align":23829},[26,104665,101130],{},[409,104667,104668],{"align":23829},"actuator 的控制输入",[409,104670,104671],{"align":23829},"主要由你的控制代码写入",[19,104673,9118,104674,101072,104676,104678],{},[26,104675,104084],{},[26,104677,104414],{}," 不一定同维。自由刚体就是典型例子：",[38,104680,104683],{"className":104681,"code":104682,"language":5280,"meta":43},[5278],"freejoint: qpos 7 维，qvel 6 维\n",[26,104684,104682],{"__ignoreMap":43},[187,104686,104688,101072,104690,104692],{"id":104687},"mj_step-和-mj_forward-的区别",[26,104689,101269],{},[26,104691,104304],{}," 的区别",[357,104694,104695,104708],{},[360,104696,104697],{},[363,104698,104699,104702,104705],{},[366,104700,104701],{"align":23829},"函数",[366,104703,104704],{"align":23829},"是否推进时间",[366,104706,104707],{"align":23829},"什么时候用",[404,104709,104710,104723],{},[363,104711,104712,104717,104720],{},[409,104713,104714],{"align":23829},[26,104715,104716],{},"mj_step(model, data)",[409,104718,104719],{"align":23829},"是",[409,104721,104722],{"align":23829},"正常仿真循环，每调用一次前进一步",[363,104724,104725,104730,104733],{},[409,104726,104727],{"align":23829},[26,104728,104729],{},"mj_forward(model, data)",[409,104731,104732],{"align":23829},"否",[409,104734,104735,104736,60,104738,104740],{"align":23829},"手动改了 ",[26,104737,104084],{},[26,104739,104414],{}," 后，刷新派生量",[19,104742,104743],{},"例如你写：",[38,104745,104747],{"className":30432,"code":104746,"language":30434,"meta":43,"style":43},"data.qpos[2] = 2.0\n",[26,104748,104749],{"__ignoreMap":43},[47,104750,104751,104754,104756,104758,104760],{"class":49,"line":50},[47,104752,104753],{"class":221},"data.qpos[",[47,104755,298],{"class":85},[47,104757,4536],{"class":221},[47,104759,267],{"class":217},[47,104761,104762],{"class":85}," 2.0\n",[19,104764,104765],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[38,104767,104768],{"className":30432,"code":104597,"language":30434,"meta":43,"style":43},[26,104769,104770],{"__ignoreMap":43},[47,104771,104772],{"class":49,"line":50},[47,104773,104597],{"class":221},[187,104775,104777],{"id":104776},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,104779,104780,104783,104784,104786],{},[26,104781,104782],{},"mujoco.mj_resetData(model, data)"," 会把 ",[26,104785,33455],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[38,104788,104790],{"className":30432,"code":104789,"language":30434,"meta":43,"style":43},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[26,104791,104792,104796,104806,104816],{"__ignoreMap":43},[47,104793,104794],{"class":49,"line":50},[47,104795,104580],{"class":221},[47,104797,104798,104801,104803],{"class":49,"line":92},[47,104799,104800],{"class":221},"data.qpos[:] ",[47,104802,267],{"class":217},[47,104804,104805],{"class":221}," random_qpos\n",[47,104807,104808,104811,104813],{"class":49,"line":1273},[47,104809,104810],{"class":221},"data.qvel[:] ",[47,104812,267],{"class":217},[47,104814,104815],{"class":85}," 0.0\n",[47,104817,104818],{"class":49,"line":1288},[47,104819,104597],{"class":221},[14,104821,101307],{"id":101306},[38,104823,104825],{"className":30432,"code":104824,"language":30434,"meta":43,"style":43},"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",[26,104826,104827,104833,104843,104847,104851,104859,104864,104868,104872,104876,104881,104885,104890,104895,104900,104904,104908,104912,104916,104920,104924,104943,104950,104962,104973,104989,105005,105009,105013,105025,105037,105045,105049,105060,105064,105080,105084,105088,105097,105101,105106,105115,105119,105132,105137,105146,105150,105154,105166],{"__ignoreMap":43},[47,104828,104829,104831],{"class":49,"line":50},[47,104830,30446],{"class":217},[47,104832,101355],{"class":221},[47,104834,104835,104837,104839,104841],{"class":49,"line":92},[47,104836,30446],{"class":217},[47,104838,31434],{"class":221},[47,104840,31437],{"class":217},[47,104842,31440],{"class":221},[47,104844,104845],{"class":49,"line":1273},[47,104846,2493],{"emptyLinePlaceholder":145},[47,104848,104849],{"class":49,"line":1288},[47,104850,2493],{"emptyLinePlaceholder":145},[47,104852,104853,104855,104857],{"class":49,"line":1294},[47,104854,101368],{"class":85},[47,104856,13657],{"class":217},[47,104858,101373],{"class":81},[47,104860,104861],{"class":49,"line":1308},[47,104862,104863],{"class":81},"\u003Cmujoco model=\"state_api\">\n",[47,104865,104866],{"class":49,"line":1314},[47,104867,101383],{"class":81},[47,104869,104870],{"class":49,"line":1405},[47,104871,2493],{"emptyLinePlaceholder":145},[47,104873,104874],{"class":49,"line":1411},[47,104875,101392],{"class":81},[47,104877,104878],{"class":49,"line":1423},[47,104879,104880],{"class":81},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[47,104882,104883],{"class":49,"line":1706},[47,104884,2493],{"emptyLinePlaceholder":145},[47,104886,104887],{"class":49,"line":1711},[47,104888,104889],{"class":81},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[47,104891,104892],{"class":49,"line":1717},[47,104893,104894],{"class":81},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[47,104896,104897],{"class":49,"line":1722},[47,104898,104899],{"class":81},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[47,104901,104902],{"class":49,"line":1736},[47,104903,101421],{"class":81},[47,104905,104906],{"class":49,"line":1741},[47,104907,101426],{"class":81},[47,104909,104910],{"class":49,"line":1747},[47,104911,101431],{"class":81},[47,104913,104914],{"class":49,"line":1768},[47,104915,95752],{"class":81},[47,104917,104918],{"class":49,"line":1773},[47,104919,2493],{"emptyLinePlaceholder":145},[47,104921,104922],{"class":49,"line":1787},[47,104923,2493],{"emptyLinePlaceholder":145},[47,104925,104926,104928,104931,104934,104936,104939,104941],{"class":49,"line":1792},[47,104927,32001],{"class":217},[47,104929,104930],{"class":53}," print_state",[47,104932,104933],{"class":221},"(prefix: ",[47,104935,1393],{"class":85},[47,104937,104938],{"class":221},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[47,104940,95740],{"class":85},[47,104942,3832],{"class":221},[47,104944,104945,104947],{"class":49,"line":1821},[47,104946,31353],{"class":85},[47,104948,104949],{"class":221},"(prefix)\n",[47,104951,104952,104954,104956,104959],{"class":49,"line":1826},[47,104953,31353],{"class":85},[47,104955,222],{"class":221},[47,104957,104958],{"class":81},"\"  timestep:\"",[47,104960,104961],{"class":221},", model.opt.timestep)\n",[47,104963,104964,104966,104968,104971],{"class":49,"line":1843},[47,104965,31353],{"class":85},[47,104967,222],{"class":221},[47,104969,104970],{"class":81},"\"  time:\"",[47,104972,101532],{"class":221},[47,104974,104975,104977,104979,104982,104985,104987],{"class":49,"line":1848},[47,104976,31353],{"class":85},[47,104978,222],{"class":221},[47,104980,104981],{"class":81},"\"  qpos:\"",[47,104983,104984],{"class":221},", np.round(data.qpos.copy(), ",[47,104986,512],{"class":85},[47,104988,30551],{"class":221},[47,104990,104991,104993,104995,104998,105001,105003],{"class":49,"line":1853},[47,104992,31353],{"class":85},[47,104994,222],{"class":221},[47,104996,104997],{"class":81},"\"  qvel:\"",[47,104999,105000],{"class":221},", np.round(data.qvel.copy(), ",[47,105002,512],{"class":85},[47,105004,30551],{"class":221},[47,105006,105007],{"class":49,"line":1858},[47,105008,2493],{"emptyLinePlaceholder":145},[47,105010,105011],{"class":49,"line":1872},[47,105012,2493],{"emptyLinePlaceholder":145},[47,105014,105015,105017,105019,105021,105023],{"class":49,"line":1877},[47,105016,32001],{"class":217},[47,105018,2066],{"class":53},[47,105020,101452],{"class":221},[47,105022,95740],{"class":85},[47,105024,3832],{"class":221},[47,105026,105027,105029,105031,105033,105035],{"class":49,"line":2670},[47,105028,101461],{"class":221},[47,105030,267],{"class":217},[47,105032,101466],{"class":221},[47,105034,101368],{"class":85},[47,105036,228],{"class":221},[47,105038,105039,105041,105043],{"class":49,"line":2684},[47,105040,101475],{"class":221},[47,105042,267],{"class":217},[47,105044,101480],{"class":221},[47,105046,105047],{"class":49,"line":2692},[47,105048,2493],{"emptyLinePlaceholder":145},[47,105050,105051,105054,105057],{"class":49,"line":2697},[47,105052,105053],{"class":221},"    print_state(",[47,105055,105056],{"class":81},"\"initial\"",[47,105058,105059],{"class":221},", model, data)\n",[47,105061,105062],{"class":49,"line":2703},[47,105063,2493],{"emptyLinePlaceholder":145},[47,105065,105066,105068,105070,105072,105074,105076,105078],{"class":49,"line":2709},[47,105067,3294],{"class":217},[47,105069,101555],{"class":221},[47,105071,26097],{"class":217},[47,105073,32497],{"class":85},[47,105075,222],{"class":221},[47,105077,875],{"class":85},[47,105079,30840],{"class":221},[47,105081,105082],{"class":49,"line":2714},[47,105083,101570],{"class":221},[47,105085,105086],{"class":49,"line":8041},[47,105087,2493],{"emptyLinePlaceholder":145},[47,105089,105090,105092,105095],{"class":49,"line":8065},[47,105091,105053],{"class":221},[47,105093,105094],{"class":81},"\"after 50 steps\"",[47,105096,105059],{"class":221},[47,105098,105099],{"class":49,"line":8070},[47,105100,2493],{"emptyLinePlaceholder":145},[47,105102,105103],{"class":49,"line":8076},[47,105104,105105],{"class":221},"    mujoco.mj_resetData(model, data)\n",[47,105107,105108,105110,105113],{"class":49,"line":8103},[47,105109,105053],{"class":221},[47,105111,105112],{"class":81},"\"after reset\"",[47,105114,105059],{"class":221},[47,105116,105117],{"class":49,"line":8108},[47,105118,2493],{"emptyLinePlaceholder":145},[47,105120,105121,105124,105126,105128,105130],{"class":49,"line":8114},[47,105122,105123],{"class":221},"    data.qpos[",[47,105125,298],{"class":85},[47,105127,4536],{"class":221},[47,105129,267],{"class":217},[47,105131,104762],{"class":85},[47,105133,105134],{"class":49,"line":8126},[47,105135,105136],{"class":221},"    mujoco.mj_forward(model, data)\n",[47,105138,105139,105141,105144],{"class":49,"line":8138},[47,105140,105053],{"class":221},[47,105142,105143],{"class":81},"\"after manual qpos edit\"",[47,105145,105059],{"class":221},[47,105147,105148],{"class":49,"line":8150},[47,105149,2493],{"emptyLinePlaceholder":145},[47,105151,105152],{"class":49,"line":9809},[47,105153,2493],{"emptyLinePlaceholder":145},[47,105155,105156,105158,105160,105162,105164],{"class":49,"line":9834},[47,105157,1625],{"class":217},[47,105159,31274],{"class":85},[47,105161,101613],{"class":217},[47,105163,101616],{"class":81},[47,105165,3832],{"class":221},[47,105167,105168],{"class":49,"line":9857},[47,105169,101623],{"class":221},[19,105171,103624],{},[38,105173,105175],{"className":40,"code":105174,"language":42,"meta":43,"style":43},"touch ch3_python_state.py\n",[26,105176,105177],{"__ignoreMap":43},[47,105178,105179,105181],{"class":49,"line":50},[47,105180,101337],{"class":53},[47,105182,105183],{"class":81}," ch3_python_state.py\n",[19,105185,102355],{},[38,105187,105189],{"className":40,"code":105188,"language":42,"meta":43,"style":43},"python ch3_python_state.py\n",[26,105190,105191],{"__ignoreMap":43},[47,105192,105193,105195],{"class":49,"line":50},[47,105194,30434],{"class":53},[47,105196,105183],{"class":81},[187,105198,101626],{"id":101626},[19,105200,105201],{},"打印状态的函数：",[38,105203,105205],{"className":30432,"code":105204,"language":30434,"meta":43,"style":43},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[26,105206,105207],{"__ignoreMap":43},[47,105208,105209,105211,105213,105215,105217,105219,105221],{"class":49,"line":50},[47,105210,32001],{"class":217},[47,105212,104930],{"class":53},[47,105214,104933],{"class":221},[47,105216,1393],{"class":85},[47,105218,104938],{"class":221},[47,105220,95740],{"class":85},[47,105222,3832],{"class":221},[19,105224,105225,105226,105228],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[26,105227,33455],{}," 里发生了什么。",[19,105230,105231],{},"推进 50 步：",[38,105233,105235],{"className":30432,"code":105234,"language":30434,"meta":43,"style":43},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[26,105236,105237,105253],{"__ignoreMap":43},[47,105238,105239,105241,105243,105245,105247,105249,105251],{"class":49,"line":50},[47,105240,3118],{"class":217},[47,105242,101555],{"class":221},[47,105244,26097],{"class":217},[47,105246,32497],{"class":85},[47,105248,222],{"class":221},[47,105250,875],{"class":85},[47,105252,30840],{"class":221},[47,105254,105255],{"class":49,"line":92},[47,105256,101753],{"class":221},[19,105258,105259,105260,105263,105264,105266],{},"由于 ",[26,105261,105262],{},"timestep=0.01","，所以 50 步后时间约为 ",[26,105265,35383],{}," 秒。",[19,105268,105269],{},"重置：",[38,105271,105272],{"className":30432,"code":104580,"language":30434,"meta":43,"style":43},[26,105273,105274],{"__ignoreMap":43},[47,105275,105276],{"class":49,"line":50},[47,105277,104580],{"class":221},[19,105279,105280],{},"这会把时间、位置、速度恢复到初始状态。",[19,105282,105283],{},"手动改高度：",[38,105285,105287],{"className":30432,"code":105286,"language":30434,"meta":43,"style":43},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[26,105288,105289,105301],{"__ignoreMap":43},[47,105290,105291,105293,105295,105297,105299],{"class":49,"line":50},[47,105292,104753],{"class":221},[47,105294,298],{"class":85},[47,105296,4536],{"class":221},[47,105298,267],{"class":217},[47,105300,104762],{"class":85},[47,105302,105303],{"class":49,"line":92},[47,105304,104597],{"class":221},[19,105306,105307,105308,105311,105312,105315],{},"这个例子里 ",[26,105309,105310],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[26,105313,105314],{},"2.0"," 表示把小球放到更高的位置。",[187,105317,101762],{"id":101762},[38,105319,105320],{"className":30432,"code":105204,"language":30434,"meta":43,"style":43},[26,105321,105322],{"__ignoreMap":43},[47,105323,105324,105326,105328,105330,105332,105334,105336],{"class":49,"line":50},[47,105325,32001],{"class":217},[47,105327,104930],{"class":53},[47,105329,104933],{"class":221},[47,105331,1393],{"class":85},[47,105333,104938],{"class":221},[47,105335,95740],{"class":85},[47,105337,3832],{"class":221},[19,105339,105340],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[171,105342,105343,105352,105357],{},[109,105344,105345,105348,105349,105351],{},[26,105346,105347],{},"prefix","：一段文字，比如 ",[26,105350,105056],{},"，用来说明现在打印的是哪个阶段。",[109,105353,105354,105356],{},[26,105355,102139],{},"：MuJoCo 模型。",[109,105358,105359,105361],{},[26,105360,33455],{},"：MuJoCo 当前状态。",[19,105363,105364,60,105367,105370],{},[26,105365,105366],{},"prefix: str",[26,105368,105369],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[38,105372,105374],{"className":30432,"code":105373,"language":30434,"meta":43,"style":43},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[26,105375,105376],{"__ignoreMap":43},[47,105377,105378,105380,105382,105384,105386,105388],{"class":49,"line":50},[47,105379,30469],{"class":85},[47,105381,222],{"class":221},[47,105383,104981],{"class":81},[47,105385,104984],{"class":221},[47,105387,512],{"class":85},[47,105389,30551],{"class":221},[19,105391,105392,105395],{},[26,105393,105394],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[38,105397,105399],{"className":30432,"code":105398,"language":30434,"meta":43,"style":43},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[26,105400,105401,105413],{"__ignoreMap":43},[47,105402,105403,105405,105407,105409,105411],{"class":49,"line":50},[47,105404,101688],{"class":221},[47,105406,267],{"class":217},[47,105408,101466],{"class":221},[47,105410,101368],{"class":85},[47,105412,228],{"class":221},[47,105414,105415,105417,105419],{"class":49,"line":92},[47,105416,101712],{"class":221},[47,105418,267],{"class":217},[47,105420,101480],{"class":221},[19,105422,105423],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[38,105425,105427],{"className":30432,"code":105426,"language":30434,"meta":43,"style":43},"print_state(\"initial\", model, data)\n",[26,105428,105429],{"__ignoreMap":43},[47,105430,105431,105434,105436],{"class":49,"line":50},[47,105432,105433],{"class":221},"print_state(",[47,105435,105056],{"class":81},[47,105437,105059],{"class":221},[19,105439,105440,105441,105444],{},"调用刚才定义的 ",[26,105442,105443],{},"print_state"," 函数，打印初始状态。",[38,105446,105447],{"className":30432,"code":105234,"language":30434,"meta":43,"style":43},[26,105448,105449,105465],{"__ignoreMap":43},[47,105450,105451,105453,105455,105457,105459,105461,105463],{"class":49,"line":50},[47,105452,3118],{"class":217},[47,105454,101555],{"class":221},[47,105456,26097],{"class":217},[47,105458,32497],{"class":85},[47,105460,222],{"class":221},[47,105462,875],{"class":85},[47,105464,30840],{"class":221},[47,105466,105467],{"class":49,"line":92},[47,105468,101753],{"class":221},[19,105470,105471],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[38,105473,105474],{"className":30432,"code":104580,"language":30434,"meta":43,"style":43},[26,105475,105476],{"__ignoreMap":43},[47,105477,105478],{"class":49,"line":50},[47,105479,104580],{"class":221},[19,105481,105482,105483,105485,105486,105488],{},"重置 ",[26,105484,33455],{},"。注意它不会重新创建 ",[26,105487,102139],{},"，因为模型结构没有变，只是状态回到初始值。",[38,105490,105491],{"className":30432,"code":104746,"language":30434,"meta":43,"style":43},[26,105492,105493],{"__ignoreMap":43},[47,105494,105495,105497,105499,105501,105503],{"class":49,"line":50},[47,105496,104753],{"class":221},[47,105498,298],{"class":85},[47,105500,4536],{"class":221},[47,105502,267],{"class":217},[47,105504,104762],{"class":85},[19,105506,105507,105508,60,105511,60,105514,105516],{},"这行是“手动改状态”。在 freejoint 中，",[26,105509,105510],{},"qpos[0]",[26,105512,105513],{},"qpos[1]",[26,105515,105310],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[38,105518,105519],{"className":30432,"code":104597,"language":30434,"meta":43,"style":43},[26,105520,105521],{"__ignoreMap":43},[47,105522,105523],{"class":49,"line":50},[47,105524,104597],{"class":221},[19,105526,105527,105528,105530,105531,105533],{},"手动改完 ",[26,105529,104084],{}," 后，调用 ",[26,105532,104304],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,105535,102370],{"id":102369},[19,105537,105538],{},"你会看到:",[171,105540,105541,105546,105551,105554],{},[109,105542,105543,105544],{},"初始时间为 ",[26,105545,411],{},[109,105547,105548,105549],{},"50 步后时间约为 ",[26,105550,35383],{},[109,105552,105553],{},"reset 后状态恢复",[109,105555,105556,105557,105560,105561],{},"手动修改 ",[26,105558,105559],{},"data.qpos[2]"," 后，小球高度变为 ",[26,105562,105314],{},[19,105564,105565,105567],{},[26,105566,105310],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,105569,105570],{},"输出里可以重点看三件事：",[171,105572,105573,105581,105586],{},[109,105574,105575,105577,105578,105580],{},[26,105576,2480],{}," 是否随着 ",[26,105579,101269],{}," 增加。",[109,105582,105583,105585],{},[26,105584,104084],{}," 的 z 坐标是否因为下落而变化。",[109,105587,105588,105590,105591,28439],{},[26,105589,104406],{}," 后时间是否回到 ",[26,105592,411],{},[14,105594,102402],{"id":102401},[171,105596,105597,105603,105609,105615,105618,105627],{},[109,105598,105599,105600,28439],{},"修改 timestep 为 ",[26,105601,105602],{},"0.005",[109,105604,105605,105606,28439],{},"重新运行，检查 50 步后时间是否约为 ",[26,105607,105608],{},"0.25",[109,105610,105611,105612,28439],{},"修改重力为 ",[26,105613,105614],{},"0 0 -1.0",[109,105616,105617],{},"观察小球下降速度是否变慢。",[109,105619,102465,105620,102468,105623,105626],{},[26,105621,105622],{},"data.qpos[2] = 2.0",[26,105624,105625],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[109,105628,105629,105630,105633],{},"注释掉 ",[26,105631,105632],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,105635,102507],{"id":102506},[187,105637,105639,105640,105642],{"id":105638},"修改-dataqpos-后位置没有更新","修改 ",[26,105641,101124],{}," 后位置没有更新",[19,105644,102516],{},[38,105646,105647],{"className":30432,"code":104597,"language":30434,"meta":43,"style":43},[26,105648,105649],{"__ignoreMap":43},[47,105650,105651],{"class":49,"line":50},[47,105652,104597],{"class":221},[187,105654,105655],{"id":105655},"数组维度看不懂",[19,105657,105658],{},"打印模型维度:",[38,105660,105662],{"className":30432,"code":105661,"language":30434,"meta":43,"style":43},"print(model.nq, model.nv, model.nu)\n",[26,105663,105664],{"__ignoreMap":43},[47,105665,105666,105668],{"class":49,"line":50},[47,105667,30469],{"class":85},[47,105669,105670],{"class":221},"(model.nq, model.nv, model.nu)\n",[357,105672,105673,105681],{},[360,105674,105675],{},[363,105676,105677,105679],{},[366,105678,104628],{"align":23829},[366,105680,100754],{"align":23829},[404,105682,105683,105693,105703],{},[363,105684,105685,105690],{},[409,105686,105687],{"align":23829},[26,105688,105689],{},"nq",[409,105691,105692],{"align":23829},"位置变量数量",[363,105694,105695,105700],{},[409,105696,105697],{"align":23829},[26,105698,105699],{},"nv",[409,105701,105702],{"align":23829},"速度变量数量",[363,105704,105705,105709],{},[409,105706,105707],{"align":23829},[26,105708,102216],{},[409,105710,105711],{"align":23829},"控制输入数量",[187,105713,105715,105716,105718],{"id":105714},"误以为-qpos-一定等于关节数","误以为 ",[26,105717,104084],{}," 一定等于关节数",[19,105720,105721,105722,82584,105724,105726,105727,105729],{},"不是。例如 ",[26,105723,101674],{},[26,105725,104084],{}," 是 7 维，但 ",[26,105728,104414],{}," 是 6 维。",[187,105731,105733,105734,105736],{"id":105732},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[26,105735,104084],{}," 的第几位",[19,105738,105739],{},"初学时可以先打印：",[38,105741,105743],{"className":30432,"code":105742,"language":30434,"meta":43,"style":43},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[26,105744,105745,105755,105765,105777],{"__ignoreMap":43},[47,105746,105747,105749,105751,105753],{"class":49,"line":50},[47,105748,30469],{"class":85},[47,105750,222],{"class":221},[47,105752,101493],{"class":81},[47,105754,101496],{"class":221},[47,105756,105757,105759,105761,105763],{"class":49,"line":92},[47,105758,30469],{"class":85},[47,105760,222],{"class":221},[47,105762,101505],{"class":81},[47,105764,101508],{"class":221},[47,105766,105767,105769,105771,105774],{"class":49,"line":1273},[47,105768,30469],{"class":85},[47,105770,222],{"class":221},[47,105772,105773],{"class":81},"\"qpos:\"",[47,105775,105776],{"class":221},", data.qpos)\n",[47,105778,105779,105781,105783,105786],{"class":49,"line":1288},[47,105780,30469],{"class":85},[47,105782,222],{"class":221},[47,105784,105785],{"class":81},"\"qvel:\"",[47,105787,105788],{"class":221},", data.qvel)\n",[19,105790,105791],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[187,105793,105794],{"id":105794},"仿真结果每次都一样",[19,105796,105797,105798,105800],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[26,105799,104084],{},"、目标点或控制输入。",[14,105802,102661],{"id":102660},[19,105804,105805,105806,125],{},"Python 控制 MuJoCo 的核心就是读写 ",[26,105807,33455],{},[171,105809,105810,105818,105823,105828],{},[109,105811,105812,105813,101072,105815,105817],{},"用 ",[26,105814,101124],{},[26,105816,101127],{}," 读取状态。",[109,105819,105812,105820,105822],{},[26,105821,101130],{}," 写入控制。",[109,105824,105812,105825,105827],{},[26,105826,101269],{}," 推进时间。",[109,105829,105830,105831,105833],{},"手动改状态后用 ",[26,105832,104304],{}," 刷新派生量。",[19,105835,105836],{},"理解这一章后，就可以进入关节和 actuator 控制。",[134,105838,105839],{},"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":43,"searchDepth":92,"depth":92,"links":105841},[105842,105843,105844,105851,105855,105856,105857,105867],{"id":100700,"depth":92,"text":100701},{"id":100823,"depth":92,"text":100824},{"id":101098,"depth":92,"text":101099,"children":105845},[105846,105848,105850],{"id":104609,"depth":1273,"text":105847},"qpos、qvel、ctrl 是什么",{"id":104687,"depth":1273,"text":105849},"mj_step 和 mj_forward 的区别",{"id":104776,"depth":1273,"text":104777},{"id":101306,"depth":92,"text":101307,"children":105852},[105853,105854],{"id":101626,"depth":1273,"text":101626},{"id":101762,"depth":1273,"text":101762},{"id":102369,"depth":92,"text":102370},{"id":102401,"depth":92,"text":102402},{"id":102506,"depth":92,"text":102507,"children":105858},[105859,105861,105862,105864,105866],{"id":105638,"depth":1273,"text":105860},"修改 data.qpos 后位置没有更新",{"id":105655,"depth":1273,"text":105655},{"id":105714,"depth":1273,"text":105863},"误以为 qpos 一定等于关节数",{"id":105732,"depth":1273,"text":105865},"不知道某个元素在 qpos 的第几位",{"id":105794,"depth":1273,"text":105794},{"id":102660,"depth":92,"text":102661},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104372,"description":43},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":105874,"title":105875,"body":105876,"description":43,"extension":143,"meta":107566,"navigation":145,"path":107567,"seo":107568,"stem":107569,"__hash__":107570},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":105877,"toc":107542},[105878,105881,105883,105886,105888,105913,105916,105935,105938,105940,105942,105966,105968,105982,105984,106025,106027,106051,106053,106056,106090,106092,106105,106108,106176,106185,106189,106192,106226,106232,106235,106239,106278,106281,106301,106305,106348,106350,106379,106382,106388,106391,106393,106787,106789,106801,106803,106814,106816,106819,106848,106856,106859,106894,106897,106899,106907,106910,106912,106923,106933,106953,106956,106992,107004,107052,107071,107113,107126,107154,107159,107180,107190,107208,107211,107245,107248,107268,107271,107290,107296,107298,107301,107307,107313,107323,107326,107332,107341,107343,107389,107391,107397,107403,107406,107409,107429,107432,107438,107444,107446,107469,107472,107475,107484,107487,107525,107527,107530,107536,107539],[10,105879,105875],{"id":105880},"_4关节actuator-与力控制",[14,105882,100701],{"id":100700},[19,105884,105885],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,105887,104385],{},[171,105889,105890,105896,105901,105905,105910],{},[109,105891,105892,105895],{},[26,105893,105894],{},"hinge"," 关节",[109,105897,105898],{},[26,105899,105900],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[109,105902,105903],{},[26,105904,101130],{},[109,105906,105907],{},[26,105908,105909],{},"ctrlrange",[109,105911,105912],{},"读取关节角和角速度",[19,105914,105915],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[38,105917,105919],{"className":30432,"code":105918,"language":30434,"meta":43,"style":43},"data.ctrl[0] = ...\n",[26,105920,105921],{"__ignoreMap":43},[47,105922,105923,105926,105928,105930,105932],{"class":49,"line":50},[47,105924,105925],{"class":221},"data.ctrl[",[47,105927,411],{"class":85},[47,105929,4536],{"class":221},[47,105931,267],{"class":217},[47,105933,105934],{"class":85}," ...\n",[19,105936,105937],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,105939,100824],{"id":100823},[19,105941,100827],{},[38,105943,105944],{"className":40,"code":104442,"language":42,"meta":43,"style":43},[26,105945,105946],{"__ignoreMap":43},[47,105947,105948,105950,105952,105954,105956,105958,105960,105962,105964],{"class":49,"line":50},[47,105949,78],{"class":53},[47,105951,26369],{"class":81},[47,105953,23925],{"class":81},[47,105955,26454],{"class":85},[47,105957,104457],{"class":81},[47,105959,100852],{"class":81},[47,105961,102555],{"class":81},[47,105963,100868],{"class":81},[47,105965,104466],{"class":81},[19,105967,102873],{},[38,105969,105970],{"className":40,"code":100973,"language":42,"meta":43,"style":43},[26,105971,105972],{"__ignoreMap":43},[47,105973,105974,105976,105978,105980],{"class":49,"line":50},[47,105975,23922],{"class":53},[47,105977,23925],{"class":81},[47,105979,100984],{"class":81},[47,105981,100987],{"class":81},[19,105983,102890],{},[38,105985,105987],{"className":40,"code":105986,"language":42,"meta":43,"style":43},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[26,105988,105989,106006,106015],{"__ignoreMap":43},[47,105990,105991,105993,105995,105997,106000,106002,106004],{"class":49,"line":50},[47,105992,30384],{"class":53},[47,105994,29230],{"class":81},[47,105996,25169],{"class":85},[47,105998,105999],{"class":81}," mujoco-control",[47,106001,101029],{"class":81},[47,106003,101032],{"class":85},[47,106005,101035],{"class":85},[47,106007,106008,106010,106012],{"class":49,"line":92},[47,106009,30384],{"class":53},[47,106011,101042],{"class":81},[47,106013,106014],{"class":81}," mujoco-control\n",[47,106016,106017,106019,106021,106023],{"class":49,"line":1273},[47,106018,23922],{"class":53},[47,106020,23925],{"class":81},[47,106022,100984],{"class":81},[47,106024,100987],{"class":81},[19,106026,101058],{},[171,106028,106029,106035,106042,106048],{},[109,106030,106031,106034],{},[26,106032,106033],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[109,106036,106037,106039,106040,28439],{},[26,106038,101130],{}," 长度等于 ",[26,106041,102212],{},[109,106043,82276,106044,106047],{},[26,106045,106046],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[109,106049,106050],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,106052,101099],{"id":101098},[19,106054,106055],{},"关节决定 body 如何运动:",[38,106057,106059],{"className":53121,"code":106058,"language":53123,"meta":43,"style":43},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[26,106060,106061],{"__ignoreMap":43},[47,106062,106063,106065,106067,106069,106071,106074,106076,106078,106080,106083,106085,106088],{"class":49,"line":50},[47,106064,1129],{"class":221},[47,106066,103010],{"class":51354},[47,106068,15013],{"class":53},[47,106070,267],{"class":221},[47,106072,106073],{"class":81},"\"hinge\"",[47,106075,53878],{"class":53},[47,106077,267],{"class":221},[47,106079,106073],{"class":81},[47,106081,106082],{"class":53}," axis",[47,106084,267],{"class":221},[47,106086,106087],{"class":81},"\"0 1 0\"",[47,106089,101198],{"class":221},[19,106091,103106],{},[171,106093,106094,106099,106102],{},[109,106095,106096,106097],{},"名字是 ",[26,106098,105894],{},[109,106100,106101],{},"类型是旋转关节",[109,106103,106104],{},"绕 y 轴旋转",[19,106106,106107],{},"actuator 决定如何施加控制:",[38,106109,106111],{"className":53121,"code":106110,"language":53123,"meta":43,"style":43},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[26,106112,106113,106122,106168],{"__ignoreMap":43},[47,106114,106115,106117,106120],{"class":49,"line":50},[47,106116,1129],{"class":221},[47,106118,106119],{"class":51354},"actuator",[47,106121,51361],{"class":221},[47,106123,106124,106126,106129,106131,106133,106136,106139,106141,106143,106146,106148,106150,106153,106155,106158,106161,106163,106166],{"class":49,"line":92},[47,106125,52198],{"class":221},[47,106127,106128],{"class":51354},"motor",[47,106130,15013],{"class":53},[47,106132,267],{"class":221},[47,106134,106135],{"class":81},"\"hinge_motor\"",[47,106137,106138],{"class":53}," joint",[47,106140,267],{"class":221},[47,106142,106073],{"class":81},[47,106144,106145],{"class":53}," gear",[47,106147,267],{"class":221},[47,106149,3771],{"class":81},[47,106151,106152],{"class":53}," ctrlrange",[47,106154,267],{"class":221},[47,106156,106157],{"class":81},"\"-2 2\"",[47,106159,106160],{"class":53}," ctrllimited",[47,106162,267],{"class":221},[47,106164,106165],{"class":81},"\"true\"",[47,106167,101198],{"class":221},[47,106169,106170,106172,106174],{"class":49,"line":1273},[47,106171,51839],{"class":221},[47,106173,106119],{"class":51354},[47,106175,51361],{"class":221},[19,106177,106178,106181,106182,28439],{},[26,106179,106180],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[26,106183,106184],{},"[-2, 2]",[187,106186,106188],{"id":106187},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,106190,106191],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[357,106193,106194,106204],{},[360,106195,106196],{},[363,106197,106198,106200,106202],{},[366,106199,25807],{"align":23829},[366,106201,102750],{"align":23829},[366,106203,100788],{"align":23829},[404,106205,106206,106216],{},[363,106207,106208,106210,106213],{},[409,106209,103010],{"align":23829},[409,106211,106212],{"align":23829},"定义能怎么动",[409,106214,106215],{"align":23829},"门轴允许门旋转",[363,106217,106218,106220,106223],{},[409,106219,106119],{"align":23829},[409,106221,106222],{"align":23829},"定义怎么施力或控制",[409,106224,106225],{"align":23829},"人推门、马达带动门",[19,106227,106228,106229,106231],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[26,106230,101130],{}," 主动控制它。",[19,106233,106234],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[187,106236,106238],{"id":106237},"hinge-joint","hinge joint",[38,106240,106242],{"className":53121,"code":106241,"language":53123,"meta":43,"style":43},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[26,106243,106244],{"__ignoreMap":43},[47,106245,106246,106248,106250,106252,106254,106256,106258,106260,106262,106264,106266,106268,106271,106273,106276],{"class":49,"line":50},[47,106247,1129],{"class":221},[47,106249,103010],{"class":51354},[47,106251,15013],{"class":53},[47,106253,267],{"class":221},[47,106255,106073],{"class":81},[47,106257,53878],{"class":53},[47,106259,267],{"class":221},[47,106261,106073],{"class":81},[47,106263,106082],{"class":53},[47,106265,267],{"class":221},[47,106267,106087],{"class":81},[47,106269,106270],{"class":53}," damping",[47,106272,267],{"class":221},[47,106274,106275],{"class":81},"\"0.1\"",[47,106277,101198],{"class":221},[19,106279,106280],{},"含义：",[171,106282,106283,106289,106295],{},[109,106284,106285,106288],{},[26,106286,106287],{},"type=\"hinge\"","：只能绕一个轴旋转。",[109,106290,106291,106294],{},[26,106292,106293],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[109,106296,106297,106300],{},[26,106298,106299],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[187,106302,106304],{"id":106303},"motor-actuator","motor actuator",[38,106306,106308],{"className":53121,"code":106307,"language":53123,"meta":43,"style":43},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[26,106309,106310],{"__ignoreMap":43},[47,106311,106312,106314,106316,106318,106320,106322,106324,106326,106328,106330,106332,106334,106336,106338,106340,106342,106344,106346],{"class":49,"line":50},[47,106313,1129],{"class":221},[47,106315,106128],{"class":51354},[47,106317,15013],{"class":53},[47,106319,267],{"class":221},[47,106321,106135],{"class":81},[47,106323,106138],{"class":53},[47,106325,267],{"class":221},[47,106327,106073],{"class":81},[47,106329,106145],{"class":53},[47,106331,267],{"class":221},[47,106333,3771],{"class":81},[47,106335,106152],{"class":53},[47,106337,267],{"class":221},[47,106339,106157],{"class":81},[47,106341,106160],{"class":53},[47,106343,267],{"class":221},[47,106345,106165],{"class":81},[47,106347,101198],{"class":221},[19,106349,106280],{},[171,106351,106352,106361,106367,106373],{},[109,106353,106354,106357,106358,106360],{},[26,106355,106356],{},"joint=\"hinge\"","：这个电机作用在名为 ",[26,106359,105894],{}," 的关节上。",[109,106362,106363,106366],{},[26,106364,106365],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[109,106368,106369,106372],{},[26,106370,106371],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[109,106374,106375,106378],{},[26,106376,106377],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,106380,106381],{},"简单理解：",[38,106383,106386],{"className":106384,"code":106385,"language":5280,"meta":43},[5278],"实际施加效果 ≈ data.ctrl[0] * gear\n",[26,106387,106385],{"__ignoreMap":43},[19,106389,106390],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,106392,101307],{"id":101306},[38,106394,106396],{"className":30432,"code":106395,"language":30434,"meta":43,"style":43},"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",[26,106397,106398,106405,106409,106415,106425,106429,106433,106441,106446,106451,106455,106459,106464,106469,106473,106478,106483,106488,106493,106497,106501,106505,106510,106515,106520,106524,106528,106532,106536,106548,106560,106568,106572,106582,106592,106602,106606,106619,106632,106636,106653,106667,106702,106706,106710,106721,106736,106751,106763,106767,106771,106783],{"__ignoreMap":43},[47,106399,106400,106402],{"class":49,"line":50},[47,106401,30446],{"class":217},[47,106403,106404],{"class":221}," math\n",[47,106406,106407],{"class":49,"line":92},[47,106408,2493],{"emptyLinePlaceholder":145},[47,106410,106411,106413],{"class":49,"line":1273},[47,106412,30446],{"class":217},[47,106414,101355],{"class":221},[47,106416,106417,106419,106421,106423],{"class":49,"line":1288},[47,106418,30446],{"class":217},[47,106420,31434],{"class":221},[47,106422,31437],{"class":217},[47,106424,31440],{"class":221},[47,106426,106427],{"class":49,"line":1294},[47,106428,2493],{"emptyLinePlaceholder":145},[47,106430,106431],{"class":49,"line":1308},[47,106432,2493],{"emptyLinePlaceholder":145},[47,106434,106435,106437,106439],{"class":49,"line":1314},[47,106436,101368],{"class":85},[47,106438,13657],{"class":217},[47,106440,101373],{"class":81},[47,106442,106443],{"class":49,"line":1405},[47,106444,106445],{"class":81},"\u003Cmujoco model=\"one_link_motor\">\n",[47,106447,106448],{"class":49,"line":1411},[47,106449,106450],{"class":81},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[47,106452,106453],{"class":49,"line":1423},[47,106454,2493],{"emptyLinePlaceholder":145},[47,106456,106457],{"class":49,"line":1706},[47,106458,101392],{"class":81},[47,106460,106461],{"class":49,"line":1711},[47,106462,106463],{"class":81},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[47,106465,106466],{"class":49,"line":1717},[47,106467,106468],{"class":81},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[47,106470,106471],{"class":49,"line":1722},[47,106472,2493],{"emptyLinePlaceholder":145},[47,106474,106475],{"class":49,"line":1736},[47,106476,106477],{"class":81},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[47,106479,106480],{"class":49,"line":1741},[47,106481,106482],{"class":81},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[47,106484,106485],{"class":49,"line":1747},[47,106486,106487],{"class":81},"        \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",[47,106489,106490],{"class":49,"line":1768},[47,106491,106492],{"class":81},"      \u003C\u002Fbody>\n",[47,106494,106495],{"class":49,"line":1773},[47,106496,101421],{"class":81},[47,106498,106499],{"class":49,"line":1787},[47,106500,101426],{"class":81},[47,106502,106503],{"class":49,"line":1792},[47,106504,2493],{"emptyLinePlaceholder":145},[47,106506,106507],{"class":49,"line":1821},[47,106508,106509],{"class":81},"  \u003Cactuator>\n",[47,106511,106512],{"class":49,"line":1826},[47,106513,106514],{"class":81},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[47,106516,106517],{"class":49,"line":1843},[47,106518,106519],{"class":81},"  \u003C\u002Factuator>\n",[47,106521,106522],{"class":49,"line":1848},[47,106523,101431],{"class":81},[47,106525,106526],{"class":49,"line":1853},[47,106527,95752],{"class":81},[47,106529,106530],{"class":49,"line":1858},[47,106531,2493],{"emptyLinePlaceholder":145},[47,106533,106534],{"class":49,"line":1872},[47,106535,2493],{"emptyLinePlaceholder":145},[47,106537,106538,106540,106542,106544,106546],{"class":49,"line":1877},[47,106539,32001],{"class":217},[47,106541,2066],{"class":53},[47,106543,101452],{"class":221},[47,106545,95740],{"class":85},[47,106547,3832],{"class":221},[47,106549,106550,106552,106554,106556,106558],{"class":49,"line":2670},[47,106551,101461],{"class":221},[47,106553,267],{"class":217},[47,106555,101466],{"class":221},[47,106557,101368],{"class":85},[47,106559,228],{"class":221},[47,106561,106562,106564,106566],{"class":49,"line":2684},[47,106563,101475],{"class":221},[47,106565,267],{"class":217},[47,106567,101480],{"class":221},[47,106569,106570],{"class":49,"line":2692},[47,106571,2493],{"emptyLinePlaceholder":145},[47,106573,106574,106576,106578,106580],{"class":49,"line":2697},[47,106575,31353],{"class":85},[47,106577,222],{"class":221},[47,106579,101493],{"class":81},[47,106581,101496],{"class":221},[47,106583,106584,106586,106588,106590],{"class":49,"line":2703},[47,106585,31353],{"class":85},[47,106587,222],{"class":221},[47,106589,101505],{"class":81},[47,106591,101508],{"class":221},[47,106593,106594,106596,106598,106600],{"class":49,"line":2709},[47,106595,31353],{"class":85},[47,106597,222],{"class":221},[47,106599,101517],{"class":81},[47,106601,101520],{"class":221},[47,106603,106604],{"class":49,"line":2714},[47,106605,2493],{"emptyLinePlaceholder":145},[47,106607,106608,106610,106613,106615,106617],{"class":49,"line":8041},[47,106609,3194],{"class":217},[47,106611,106612],{"class":221}," model.nu ",[47,106614,21041],{"class":217},[47,106616,25172],{"class":85},[47,106618,3832],{"class":221},[47,106620,106621,106623,106625,106627,106630],{"class":49,"line":8065},[47,106622,103486],{"class":217},[47,106624,103489],{"class":85},[47,106626,222],{"class":221},[47,106628,106629],{"class":81},"\"expected exactly one actuator\"",[47,106631,228],{"class":221},[47,106633,106634],{"class":49,"line":8070},[47,106635,2493],{"emptyLinePlaceholder":145},[47,106637,106638,106640,106642,106644,106646,106648,106651],{"class":49,"line":8076},[47,106639,3294],{"class":217},[47,106641,31670],{"class":221},[47,106643,26097],{"class":217},[47,106645,32497],{"class":85},[47,106647,222],{"class":221},[47,106649,106650],{"class":85},"2000",[47,106652,30840],{"class":221},[47,106654,106655,106658,106660,106662,106664],{"class":49,"line":8103},[47,106656,106657],{"class":221},"        t ",[47,106659,267],{"class":217},[47,106661,31670],{"class":221},[47,106663,674],{"class":217},[47,106665,106666],{"class":221}," model.opt.timestep\n",[47,106668,106669,106672,106674,106676,106678,106681,106683,106686,106688,106690,106693,106695,106697,106699],{"class":49,"line":8108},[47,106670,106671],{"class":221},"        data.ctrl[",[47,106673,411],{"class":85},[47,106675,4536],{"class":221},[47,106677,267],{"class":217},[47,106679,106680],{"class":85}," 1.5",[47,106682,6611],{"class":217},[47,106684,106685],{"class":221}," math.sin(",[47,106687,105314],{"class":85},[47,106689,6611],{"class":217},[47,106691,106692],{"class":221}," math.pi ",[47,106694,674],{"class":217},[47,106696,61921],{"class":85},[47,106698,6611],{"class":217},[47,106700,106701],{"class":221}," t)\n",[47,106703,106704],{"class":49,"line":8114},[47,106705,101570],{"class":221},[47,106707,106708],{"class":49,"line":8126},[47,106709,2493],{"emptyLinePlaceholder":145},[47,106711,106712,106714,106716,106719],{"class":49,"line":8138},[47,106713,31353],{"class":85},[47,106715,222],{"class":221},[47,106717,106718],{"class":81},"\"time:\"",[47,106720,101532],{"class":221},[47,106722,106723,106725,106727,106730,106732,106734],{"class":49,"line":8150},[47,106724,31353],{"class":85},[47,106726,222],{"class":221},[47,106728,106729],{"class":81},"\"joint qpos:\"",[47,106731,104984],{"class":221},[47,106733,512],{"class":85},[47,106735,30551],{"class":221},[47,106737,106738,106740,106742,106745,106747,106749],{"class":49,"line":9809},[47,106739,31353],{"class":85},[47,106741,222],{"class":221},[47,106743,106744],{"class":81},"\"joint qvel:\"",[47,106746,105000],{"class":221},[47,106748,512],{"class":85},[47,106750,30551],{"class":221},[47,106752,106753,106755,106757,106760],{"class":49,"line":9834},[47,106754,31353],{"class":85},[47,106756,222],{"class":221},[47,106758,106759],{"class":81},"\"last ctrl:\"",[47,106761,106762],{"class":221},", data.ctrl.copy())\n",[47,106764,106765],{"class":49,"line":9857},[47,106766,2493],{"emptyLinePlaceholder":145},[47,106768,106769],{"class":49,"line":9881},[47,106770,2493],{"emptyLinePlaceholder":145},[47,106772,106773,106775,106777,106779,106781],{"class":49,"line":9886},[47,106774,1625],{"class":217},[47,106776,31274],{"class":85},[47,106778,101613],{"class":217},[47,106780,101616],{"class":81},[47,106782,3832],{"class":221},[47,106784,106785],{"class":49,"line":9891},[47,106786,101623],{"class":221},[19,106788,103624],{},[38,106790,106792],{"className":40,"code":106791,"language":42,"meta":43,"style":43},"touch ch4_joint_motor.py\n",[26,106793,106794],{"__ignoreMap":43},[47,106795,106796,106798],{"class":49,"line":50},[47,106797,101337],{"class":53},[47,106799,106800],{"class":81}," ch4_joint_motor.py\n",[19,106802,102355],{},[38,106804,106806],{"className":40,"code":106805,"language":42,"meta":43,"style":43},"python ch4_joint_motor.py\n",[26,106807,106808],{"__ignoreMap":43},[47,106809,106810,106812],{"class":49,"line":50},[47,106811,30434],{"class":53},[47,106813,106800],{"class":81},[187,106815,101626],{"id":101626},[19,106817,106818],{},"检查 actuator 数量：",[38,106820,106822],{"className":30432,"code":106821,"language":30434,"meta":43,"style":43},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[26,106823,106824,106836],{"__ignoreMap":43},[47,106825,106826,106828,106830,106832,106834],{"class":49,"line":50},[47,106827,1625],{"class":217},[47,106829,106612],{"class":221},[47,106831,21041],{"class":217},[47,106833,25172],{"class":85},[47,106835,3832],{"class":221},[47,106837,106838,106840,106842,106844,106846],{"class":49,"line":92},[47,106839,103949],{"class":217},[47,106841,103489],{"class":85},[47,106843,222],{"class":221},[47,106845,106629],{"class":81},[47,106847,228],{"class":221},[19,106849,106850,106852,106853,106855],{},[26,106851,102212],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[26,106854,101130],{}," 长度应该是 1。",[19,106857,106858],{},"产生正弦控制信号：",[38,106860,106862],{"className":30432,"code":106861,"language":30434,"meta":43,"style":43},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[26,106863,106864],{"__ignoreMap":43},[47,106865,106866,106868,106870,106872,106874,106876,106878,106880,106882,106884,106886,106888,106890,106892],{"class":49,"line":50},[47,106867,105925],{"class":221},[47,106869,411],{"class":85},[47,106871,4536],{"class":221},[47,106873,267],{"class":217},[47,106875,106680],{"class":85},[47,106877,6611],{"class":217},[47,106879,106685],{"class":221},[47,106881,105314],{"class":85},[47,106883,6611],{"class":217},[47,106885,106692],{"class":221},[47,106887,674],{"class":217},[47,106889,61921],{"class":85},[47,106891,6611],{"class":217},[47,106893,106701],{"class":221},[19,106895,106896],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,106898,101727],{},[38,106900,106901],{"className":30432,"code":104559,"language":30434,"meta":43,"style":43},[26,106902,106903],{"__ignoreMap":43},[47,106904,106905],{"class":49,"line":50},[47,106906,104559],{"class":221},[19,106908,106909],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[187,106911,101762],{"id":101762},[38,106913,106915],{"className":30432,"code":106914,"language":30434,"meta":43,"style":43},"import math\n",[26,106916,106917],{"__ignoreMap":43},[47,106918,106919,106921],{"class":49,"line":50},[47,106920,30446],{"class":217},[47,106922,106404],{"class":221},[19,106924,106925,106926,101072,106929,106932],{},"导入 Python 标准库里的数学模块。后面要用 ",[26,106927,106928],{},"math.sin",[26,106930,106931],{},"math.pi"," 生成周期变化的控制信号。",[38,106934,106935],{"className":30432,"code":103740,"language":30434,"meta":43,"style":43},[26,106936,106937,106943],{"__ignoreMap":43},[47,106938,106939,106941],{"class":49,"line":50},[47,106940,30446],{"class":217},[47,106942,101355],{"class":221},[47,106944,106945,106947,106949,106951],{"class":49,"line":92},[47,106946,30446],{"class":217},[47,106948,31434],{"class":221},[47,106950,31437],{"class":217},[47,106952,31440],{"class":221},[19,106954,106955],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[38,106957,106958],{"className":53121,"code":106241,"language":53123,"meta":43,"style":43},[26,106959,106960],{"__ignoreMap":43},[47,106961,106962,106964,106966,106968,106970,106972,106974,106976,106978,106980,106982,106984,106986,106988,106990],{"class":49,"line":50},[47,106963,1129],{"class":221},[47,106965,103010],{"class":51354},[47,106967,15013],{"class":53},[47,106969,267],{"class":221},[47,106971,106073],{"class":81},[47,106973,53878],{"class":53},[47,106975,267],{"class":221},[47,106977,106073],{"class":81},[47,106979,106082],{"class":53},[47,106981,267],{"class":221},[47,106983,106087],{"class":81},[47,106985,106270],{"class":53},[47,106987,267],{"class":221},[47,106989,106275],{"class":81},[47,106991,101198],{"class":221},[19,106993,106994,106995,106997,106998,107000,107001,107003],{},"这行定义关节。",[26,106996,105894],{}," 表示旋转关节。",[26,106999,106293],{}," 表示绕 y 轴旋转。",[26,107002,106299],{}," 表示有一点阻尼，运动不会完全无损耗。",[38,107005,107007],{"className":53121,"code":107006,"language":53123,"meta":43,"style":43},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[26,107008,107009],{"__ignoreMap":43},[47,107010,107011,107013,107015,107017,107019,107022,107024,107026,107029,107032,107034,107037,107039,107041,107043,107045,107047,107050],{"class":49,"line":50},[47,107012,1129],{"class":221},[47,107014,101174],{"class":51354},[47,107016,15013],{"class":53},[47,107018,267],{"class":221},[47,107020,107021],{"class":81},"\"link_geom\"",[47,107023,53878],{"class":53},[47,107025,267],{"class":221},[47,107027,107028],{"class":81},"\"capsule\"",[47,107030,107031],{"class":53}," fromto",[47,107033,267],{"class":221},[47,107035,107036],{"class":81},"\"0 0 0 0 0 0.5\"",[47,107038,101190],{"class":53},[47,107040,267],{"class":221},[47,107042,103832],{"class":81},[47,107044,102055],{"class":53},[47,107046,267],{"class":221},[47,107048,107049],{"class":81},"\"0.5\"",[47,107051,101198],{"class":221},[19,107053,107054,107055,107057,107058,107060,107061,107064,107065,28439,107068,107070],{},"这行定义摆杆的形状。",[26,107056,103219],{}," 是胶囊体，适合表示杆子。",[26,107059,103230],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[26,107062,107063],{},"(0,0,0)"," 延伸到 ",[26,107066,107067],{},"(0,0,0.5)",[26,107069,103224],{}," 是半径。",[38,107072,107073],{"className":53121,"code":106307,"language":53123,"meta":43,"style":43},[26,107074,107075],{"__ignoreMap":43},[47,107076,107077,107079,107081,107083,107085,107087,107089,107091,107093,107095,107097,107099,107101,107103,107105,107107,107109,107111],{"class":49,"line":50},[47,107078,1129],{"class":221},[47,107080,106128],{"class":51354},[47,107082,15013],{"class":53},[47,107084,267],{"class":221},[47,107086,106135],{"class":81},[47,107088,106138],{"class":53},[47,107090,267],{"class":221},[47,107092,106073],{"class":81},[47,107094,106145],{"class":53},[47,107096,267],{"class":221},[47,107098,3771],{"class":81},[47,107100,106152],{"class":53},[47,107102,267],{"class":221},[47,107104,106157],{"class":81},[47,107106,106160],{"class":53},[47,107108,267],{"class":221},[47,107110,106165],{"class":81},[47,107112,101198],{"class":221},[19,107114,107115,107116,107118,107119,107122,107123,107125],{},"这行定义电机。它作用在 ",[26,107117,105894],{}," 关节上。",[26,107120,107121],{},"gear"," 可以理解成放大倍数。",[26,107124,105909],{}," 限制控制输入范围。",[38,107127,107128],{"className":30432,"code":106821,"language":30434,"meta":43,"style":43},[26,107129,107130,107142],{"__ignoreMap":43},[47,107131,107132,107134,107136,107138,107140],{"class":49,"line":50},[47,107133,1625],{"class":217},[47,107135,106612],{"class":221},[47,107137,21041],{"class":217},[47,107139,25172],{"class":85},[47,107141,3832],{"class":221},[47,107143,107144,107146,107148,107150,107152],{"class":49,"line":92},[47,107145,103949],{"class":217},[47,107147,103489],{"class":85},[47,107149,222],{"class":221},[47,107151,106629],{"class":81},[47,107153,228],{"class":221},[19,107155,107156,107158],{},[26,107157,102212],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[38,107160,107162],{"className":30432,"code":107161,"language":30434,"meta":43,"style":43},"for step in range(2000):\n",[26,107163,107164],{"__ignoreMap":43},[47,107165,107166,107168,107170,107172,107174,107176,107178],{"class":49,"line":50},[47,107167,3118],{"class":217},[47,107169,31670],{"class":221},[47,107171,26097],{"class":217},[47,107173,32497],{"class":85},[47,107175,222],{"class":221},[47,107177,106650],{"class":85},[47,107179,30840],{"class":221},[19,107181,107182,107183,107185,107186,107189],{},"循环 2000 步。这里没有用 ",[26,107184,1211],{},"，而是用 ",[26,107187,107188],{},"step","，因为后面要用当前步数计算时间。",[38,107191,107193],{"className":30432,"code":107192,"language":30434,"meta":43,"style":43},"t = step * model.opt.timestep\n",[26,107194,107195],{"__ignoreMap":43},[47,107196,107197,107200,107202,107204,107206],{"class":49,"line":50},[47,107198,107199],{"class":221},"t ",[47,107201,267],{"class":217},[47,107203,31670],{"class":221},[47,107205,674],{"class":217},[47,107207,106666],{"class":221},[19,107209,107210],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[38,107212,107213],{"className":30432,"code":106861,"language":30434,"meta":43,"style":43},[26,107214,107215],{"__ignoreMap":43},[47,107216,107217,107219,107221,107223,107225,107227,107229,107231,107233,107235,107237,107239,107241,107243],{"class":49,"line":50},[47,107218,105925],{"class":221},[47,107220,411],{"class":85},[47,107222,4536],{"class":221},[47,107224,267],{"class":217},[47,107226,106680],{"class":85},[47,107228,6611],{"class":217},[47,107230,106685],{"class":221},[47,107232,105314],{"class":85},[47,107234,6611],{"class":217},[47,107236,106692],{"class":221},[47,107238,674],{"class":217},[47,107240,61921],{"class":85},[47,107242,6611],{"class":217},[47,107244,106701],{"class":221},[19,107246,107247],{},"这行给电机输入一个正弦波。拆开看：",[171,107249,107250,107256,107262],{},[109,107251,107252,107255],{},[26,107253,107254],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[109,107257,107258,107261],{},[26,107259,107260],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[109,107263,107264,107267],{},[26,107265,107266],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,107269,107270],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[38,107272,107274],{"className":30432,"code":107273,"language":30434,"meta":43,"style":43},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[26,107275,107276],{"__ignoreMap":43},[47,107277,107278,107280,107282,107284,107286,107288],{"class":49,"line":50},[47,107279,30469],{"class":85},[47,107281,222],{"class":221},[47,107283,106729],{"class":81},[47,107285,104984],{"class":221},[47,107287,512],{"class":85},[47,107289,30551],{"class":221},[19,107291,107292,107293,107295],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[26,107294,101124],{}," 只有一个数。",[14,107297,102370],{"id":102369},[19,107299,107300],{},"输出类似:",[38,107302,107305],{"className":107303,"code":107304,"language":5280,"meta":43},[5278],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[26,107306,107304],{"__ignoreMap":43},[19,107308,107309,107310,107312],{},"这里 ",[26,107311,106180],{}," 是电机输入。",[19,107314,107315,107318,107319,107322],{},[26,107316,107317],{},"joint qpos"," 是关节角度，单位通常是弧度。",[26,107320,107321],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,107324,107325],{},"角度单位提示：",[38,107327,107330],{"className":107328,"code":107329,"language":5280,"meta":43},[5278],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[26,107331,107329],{"__ignoreMap":43},[19,107333,107334,107335,107337,107338,107340],{},"如果你看到 ",[26,107336,104084],{}," 是 ",[26,107339,35383],{},"，大约就是 28.6 度。",[14,107342,102402],{"id":102401},[171,107344,107345,107352,107355,107362,107365,107373,107381],{},[109,107346,102465,107347,102468,107349,28439],{},[26,107348,106365],{},[26,107350,107351],{},"gear=\"5\"",[109,107353,107354],{},"重新运行，观察关节运动是否更剧烈。",[109,107356,102465,107357,102468,107359,28439],{},[26,107358,105909],{},[26,107360,107361],{},"-0.2 0.2",[109,107363,107364],{},"重新运行，观察控制能力是否变弱。",[109,107366,107367,107368,107370,107371,28439],{},"去掉 actuator，确认 ",[26,107369,102212],{}," 变成 ",[26,107372,411],{},[109,107374,102465,107375,102468,107377,107380],{},[26,107376,106299],{},[26,107378,107379],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[109,107382,102465,107383,102468,107385,107388],{},[26,107384,106293],{},[26,107386,107387],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,107390,102507],{"id":102506},[187,107392,107394],{"id":107393},"indexerror-index-0-is-out-of-bounds",[26,107395,107396],{},"IndexError: index 0 is out of bounds",[19,107398,107399,107400,107402],{},"原因是 ",[26,107401,106046],{},"，没有 actuator。",[187,107404,107405],{"id":107405},"关节几乎不动",[19,107407,107408],{},"可能原因:",[171,107410,107411,107416,107420,107426],{},[109,107412,107413,107415],{},[26,107414,107121],{}," 太小",[109,107417,107418,107415],{},[26,107419,105909],{},[109,107421,107422,107425],{},[26,107423,107424],{},"damping"," 太大",[109,107427,107428],{},"重力方向导致运动不明显",[187,107430,107431],{"id":107431},"模型编译失败",[19,107433,107434,107435,107437],{},"检查 actuator 引用的 ",[26,107436,106356],{}," 是否存在，joint 名称是否拼写一致。",[187,107439,107441,107443],{"id":107440},"datactrl0-写了但没有效果",[26,107442,106180],{}," 写了但没有效果",[19,107445,102629],{},[171,107447,107448,107453,107456,107461,107466],{},[109,107449,107450,107452],{},[26,107451,102212],{}," 是否大于 0。",[109,107454,107455],{},"motor 是否引用了正确 joint。",[109,107457,107458,107460],{},[26,107459,107121],{}," 是否太小。",[109,107462,107463,107465],{},[26,107464,105909],{}," 是否把输入限制得太小。",[109,107467,107468],{},"body 是否真的有可动 joint。",[187,107470,107471],{"id":107471},"控制输入超过范围会怎样",[19,107473,107474],{},"如果设置了：",[38,107476,107478],{"className":53121,"code":107477,"language":53123,"meta":43,"style":43},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[26,107479,107480],{"__ignoreMap":43},[47,107481,107482],{"class":49,"line":50},[47,107483,107477],{"class":221},[19,107485,107486],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[38,107488,107490],{"className":30432,"code":107489,"language":30434,"meta":43,"style":43},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[26,107491,107492,107512],{"__ignoreMap":43},[47,107493,107494,107497,107499,107502,107504,107506,107508,107510],{"class":49,"line":50},[47,107495,107496],{"class":221},"action ",[47,107498,267],{"class":217},[47,107500,107501],{"class":221}," np.clip(action, ",[47,107503,751],{"class":217},[47,107505,105314],{"class":85},[47,107507,12528],{"class":221},[47,107509,105314],{"class":85},[47,107511,228],{"class":221},[47,107513,107514,107516,107518,107520,107522],{"class":49,"line":92},[47,107515,105925],{"class":221},[47,107517,411],{"class":85},[47,107519,4536],{"class":221},[47,107521,267],{"class":217},[47,107523,107524],{"class":221}," action\n",[14,107526,102661],{"id":102660},[19,107528,107529],{},"这一章建立了控制任务的基本形式：",[38,107531,107534],{"className":107532,"code":107533,"language":5280,"meta":43},[5278],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[26,107535,107533],{"__ignoreMap":43},[19,107537,107538],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[134,107540,107541],{},"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":43,"searchDepth":92,"depth":92,"links":107543},[107544,107545,107546,107551,107555,107556,107557,107565],{"id":100700,"depth":92,"text":100701},{"id":100823,"depth":92,"text":100824},{"id":101098,"depth":92,"text":101099,"children":107547},[107548,107549,107550],{"id":106187,"depth":1273,"text":106188},{"id":106237,"depth":1273,"text":106238},{"id":106303,"depth":1273,"text":106304},{"id":101306,"depth":92,"text":101307,"children":107552},[107553,107554],{"id":101626,"depth":1273,"text":101626},{"id":101762,"depth":1273,"text":101762},{"id":102369,"depth":92,"text":102370},{"id":102401,"depth":92,"text":102402},{"id":102506,"depth":92,"text":102507,"children":107558},[107559,107560,107561,107562,107564],{"id":107393,"depth":1273,"text":107396},{"id":107405,"depth":1273,"text":107405},{"id":107431,"depth":1273,"text":107431},{"id":107440,"depth":1273,"text":107563},"data.ctrl[0] 写了但没有效果",{"id":107471,"depth":1273,"text":107471},{"id":102660,"depth":92,"text":102661},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":105875,"description":43},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107572,"title":107573,"body":107574,"description":43,"extension":143,"meta":109483,"navigation":145,"path":109484,"seo":109485,"stem":109486,"__hash__":109487},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107575,"toc":109459},[107576,107579,107581,107584,107592,107595,107612,107615,107640,107643,107689,107691,107693,107748,107750,107769,107771,107814,107817,107834,107837,107853,107863,107870,107872,107875,107878,107912,107915,107963,107967,107970,107984,107993,107997,108000,108025,108028,108032,108045,108048,108054,108057,108072,108074,108077,108337,108339,108351,108354,108666,108668,108680,108682,108685,108700,108705,108708,108730,108733,108736,108770,108773,108777,108788,108791,108808,108811,108825,108832,108852,108859,108873,108876,108888,108903,108923,108926,108948,108951,108955,108970,108981,108996,108999,109029,109045,109074,109082,109106,109109,109127,109137,109149,109156,109165,109171,109180,109183,109185,109194,109197,109212,109214,109217,109228,109231,109242,109245,109263,109265,109282,109285,109313,109315,109319,109322,109352,109358,109361,109365,109373,109376,109378,109399,109402,109405,109421,109424,109440,109442,109445,109456],[10,107577,107573],{"id":107578},"_5viewer-可视化与-renderer-离屏渲染",[14,107580,100701],{"id":100700},[19,107582,107583],{},"本章掌握两类可视化方式:",[171,107585,107586,107589],{},[109,107587,107588],{},"交互式 viewer: 适合人工观察仿真",[109,107590,107591],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,107593,107594],{},"使用官方接口:",[38,107596,107598],{"className":30432,"code":107597,"language":30434,"meta":43,"style":43},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[26,107599,107600,107607],{"__ignoreMap":43},[47,107601,107602,107604],{"class":49,"line":50},[47,107603,30446],{"class":217},[47,107605,107606],{"class":221}," mujoco.viewer\n",[47,107608,107609],{"class":49,"line":92},[47,107610,107611],{"class":221},"mujoco.viewer.launch_passive(model, data)\n",[19,107613,107614],{},"以及:",[38,107616,107618],{"className":30432,"code":107617,"language":30434,"meta":43,"style":43},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[26,107619,107620,107630],{"__ignoreMap":43},[47,107621,107622,107625,107627],{"class":49,"line":50},[47,107623,107624],{"class":221},"renderer ",[47,107626,267],{"class":217},[47,107628,107629],{"class":221}," mujoco.Renderer(model)\n",[47,107631,107632,107635,107637],{"class":49,"line":92},[47,107633,107634],{"class":221},"image ",[47,107636,267],{"class":217},[47,107638,107639],{"class":221}," renderer.render()\n",[19,107641,107642],{},"新手建议先理解二者区别：",[357,107644,107645,107661],{},[360,107646,107647],{},[363,107648,107649,107652,107655,107658],{},[366,107650,107651],{"align":23829},"工具",[366,107653,107654],{"align":23829},"用途",[366,107656,107657],{"align":23829},"是否打开窗口",[366,107659,107660],{"align":23829},"常见场景",[404,107662,107663,107676],{},[363,107664,107665,107668,107671,107673],{},[409,107666,107667],{"align":23829},"Viewer",[409,107669,107670],{"align":23829},"人眼实时观察仿真",[409,107672,104719],{"align":23829},[409,107674,107675],{"align":23829},"调试模型、看控制效果",[363,107677,107678,107681,107684,107686],{},[409,107679,107680],{"align":23829},"Renderer",[409,107682,107683],{"align":23829},"生成图像数组",[409,107685,104732],{"align":23829},[409,107687,107688],{"align":23829},"保存图片、训练视觉策略、服务器批量采集",[14,107690,100824],{"id":100823},[19,107692,100827],{},[38,107694,107696],{"className":40,"code":107695,"language":42,"meta":43,"style":43},"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",[26,107697,107698,107710,107720,107728,107736],{"__ignoreMap":43},[47,107699,107700,107702,107704,107706,107708],{"class":49,"line":50},[47,107701,78],{"class":53},[47,107703,26369],{"class":81},[47,107705,23925],{"class":81},[47,107707,26454],{"class":85},[47,107709,24732],{"class":85},[47,107711,107712,107714,107716,107718],{"class":49,"line":92},[47,107713,100862],{"class":81},[47,107715,100865],{"class":81},[47,107717,100868],{"class":81},[47,107719,24732],{"class":85},[47,107721,107722,107724,107726],{"class":49,"line":1273},[47,107723,100875],{"class":81},[47,107725,100878],{"class":81},[47,107727,24732],{"class":85},[47,107729,107730,107732,107734],{"class":49,"line":1288},[47,107731,100885],{"class":81},[47,107733,100888],{"class":81},[47,107735,24732],{"class":85},[47,107737,107738,107740,107742,107744,107746],{"class":49,"line":1294},[47,107739,100895],{"class":81},[47,107741,100898],{"class":81},[47,107743,100901],{"class":81},[47,107745,100904],{"class":81},[47,107747,102570],{"class":81},[19,107749,102873],{},[38,107751,107753],{"className":40,"code":107752,"language":42,"meta":43,"style":43},"pip install \"mujoco>=2.3\" numpy pillow\n",[26,107754,107755],{"__ignoreMap":43},[47,107756,107757,107759,107761,107763,107766],{"class":49,"line":50},[47,107758,23922],{"class":53},[47,107760,23925],{"class":81},[47,107762,100984],{"class":81},[47,107764,107765],{"class":81}," numpy",[47,107767,107768],{"class":81}," pillow\n",[19,107770,102890],{},[38,107772,107774],{"className":40,"code":107773,"language":42,"meta":43,"style":43},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[26,107775,107776,107793,107802],{"__ignoreMap":43},[47,107777,107778,107780,107782,107784,107787,107789,107791],{"class":49,"line":50},[47,107779,30384],{"class":53},[47,107781,29230],{"class":81},[47,107783,25169],{"class":85},[47,107785,107786],{"class":81}," mujoco-render",[47,107788,101029],{"class":81},[47,107790,101032],{"class":85},[47,107792,101035],{"class":85},[47,107794,107795,107797,107799],{"class":49,"line":92},[47,107796,30384],{"class":53},[47,107798,101042],{"class":81},[47,107800,107801],{"class":81}," mujoco-render\n",[47,107803,107804,107806,107808,107810,107812],{"class":49,"line":1273},[47,107805,23922],{"class":53},[47,107807,23925],{"class":81},[47,107809,100984],{"class":81},[47,107811,107765],{"class":81},[47,107813,107768],{"class":81},[19,107815,107816],{},"离屏渲染后端:",[38,107818,107820],{"className":40,"code":107819,"language":42,"meta":43,"style":43},"export MUJOCO_GL=egl\n",[26,107821,107822],{"__ignoreMap":43},[47,107823,107824,107826,107829,107831],{"class":49,"line":50},[47,107825,25096],{"class":217},[47,107827,107828],{"class":221}," MUJOCO_GL",[47,107830,267],{"class":217},[47,107832,107833],{"class":221},"egl\n",[19,107835,107836],{},"或:",[38,107838,107840],{"className":40,"code":107839,"language":42,"meta":43,"style":43},"export MUJOCO_GL=osmesa\n",[26,107841,107842],{"__ignoreMap":43},[47,107843,107844,107846,107848,107850],{"class":49,"line":50},[47,107845,25096],{"class":217},[47,107847,107828],{"class":221},[47,107849,267],{"class":217},[47,107851,107852],{"class":221},"osmesa\n",[19,107854,107855,107856,107859,107860,28439],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[26,107857,107858],{},"egl"," 失败，再尝试 ",[26,107861,107862],{},"osmesa",[19,107864,107865,107866,107869],{},"如果你在本机桌面环境运行，通常先不要设置 ",[26,107867,107868],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,107871,101099],{"id":101098},[19,107873,107874],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,107876,107877],{},"典型 viewer 流程:",[38,107879,107881],{"className":30432,"code":107880,"language":30434,"meta":43,"style":43},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[26,107882,107883,107896,107903,107907],{"__ignoreMap":43},[47,107884,107885,107888,107891,107893],{"class":49,"line":50},[47,107886,107887],{"class":217},"with",[47,107889,107890],{"class":221}," mujoco.viewer.launch_passive(model, data) ",[47,107892,31437],{"class":217},[47,107894,107895],{"class":221}," viewer:\n",[47,107897,107898,107900],{"class":49,"line":92},[47,107899,2344],{"class":217},[47,107901,107902],{"class":221}," viewer.is_running():\n",[47,107904,107905],{"class":49,"line":1273},[47,107906,101570],{"class":221},[47,107908,107909],{"class":49,"line":1288},[47,107910,107911],{"class":221},"        viewer.sync()\n",[19,107913,107914],{},"典型 renderer 流程:",[38,107916,107918],{"className":30432,"code":107917,"language":30434,"meta":43,"style":43},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[26,107919,107920,107946,107950,107955],{"__ignoreMap":43},[47,107921,107922,107924,107926,107929,107931,107933,107935,107937,107939,107941,107944],{"class":49,"line":50},[47,107923,107624],{"class":221},[47,107925,267],{"class":217},[47,107927,107928],{"class":221}," mujoco.Renderer(model, ",[47,107930,25035],{"class":5309},[47,107932,267],{"class":217},[47,107934,42396],{"class":85},[47,107936,12528],{"class":221},[47,107938,25031],{"class":5309},[47,107940,267],{"class":217},[47,107942,107943],{"class":85},"640",[47,107945,228],{"class":221},[47,107947,107948],{"class":49,"line":92},[47,107949,104559],{"class":221},[47,107951,107952],{"class":49,"line":1273},[47,107953,107954],{"class":221},"renderer.update_scene(data)\n",[47,107956,107957,107959,107961],{"class":49,"line":1288},[47,107958,107634],{"class":221},[47,107960,267],{"class":217},[47,107962,107639],{"class":221},[187,107964,107966],{"id":107965},"viewer-的同步逻辑","viewer 的同步逻辑",[19,107968,107969],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[38,107971,107973],{"className":30432,"code":107972,"language":30434,"meta":43,"style":43},"mujoco.mj_step(model, data)\nviewer.sync()\n",[26,107974,107975,107979],{"__ignoreMap":43},[47,107976,107977],{"class":49,"line":50},[47,107978,104559],{"class":221},[47,107980,107981],{"class":49,"line":92},[47,107982,107983],{"class":221},"viewer.sync()\n",[19,107985,107986,107988,107989,107992],{},[26,107987,101269],{}," 负责算物理，",[26,107990,107991],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[187,107994,107996],{"id":107995},"为什么要-sleep","为什么要 sleep",[19,107998,107999],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[38,108001,108003],{"className":30432,"code":108002,"language":30434,"meta":43,"style":43},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[26,108004,108005],{"__ignoreMap":43},[47,108006,108007,108010,108012,108015,108017,108020,108022],{"class":49,"line":50},[47,108008,108009],{"class":221},"sleep_time ",[47,108011,267],{"class":217},[47,108013,108014],{"class":221}," model.opt.timestep ",[47,108016,751],{"class":217},[47,108018,108019],{"class":221}," (time.time() ",[47,108021,751],{"class":217},[47,108023,108024],{"class":221}," step_start)\n",[19,108026,108027],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[187,108029,108031],{"id":108030},"renderer-输出是什么","renderer 输出是什么",[38,108033,108035],{"className":30432,"code":108034,"language":30434,"meta":43,"style":43},"image = renderer.render()\n",[26,108036,108037],{"__ignoreMap":43},[47,108038,108039,108041,108043],{"class":49,"line":50},[47,108040,107634],{"class":221},[47,108042,267],{"class":217},[47,108044,107639],{"class":221},[19,108046,108047],{},"得到的是 NumPy 数组，形状通常是：",[38,108049,108052],{"className":108050,"code":108051,"language":5280,"meta":43},[5278],"(height, width, 3)\n",[26,108053,108051],{"__ignoreMap":43},[19,108055,108056],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[38,108058,108060],{"className":30432,"code":108059,"language":30434,"meta":43,"style":43},"Image.fromarray(image).save(\"render_output.png\")\n",[26,108061,108062],{"__ignoreMap":43},[47,108063,108064,108067,108070],{"class":49,"line":50},[47,108065,108066],{"class":221},"Image.fromarray(image).save(",[47,108068,108069],{"class":81},"\"render_output.png\"",[47,108071,228],{"class":221},[14,108073,101307],{"id":101306},[19,108075,108076],{},"交互式 Viewer:",[38,108078,108080],{"className":30432,"code":108079,"language":30434,"meta":43,"style":43},"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",[26,108081,108082,108088,108092,108098,108104,108108,108112,108120,108125,108129,108133,108137,108142,108147,108151,108155,108159,108164,108168,108172,108176,108180,108184,108188,108200,108212,108220,108224,108234,108254,108264,108269,108274,108278,108295,108308,108313,108317,108321,108333],{"__ignoreMap":43},[47,108083,108084,108086],{"class":49,"line":50},[47,108085,30446],{"class":217},[47,108087,31883],{"class":221},[47,108089,108090],{"class":49,"line":92},[47,108091,2493],{"emptyLinePlaceholder":145},[47,108093,108094,108096],{"class":49,"line":1273},[47,108095,30446],{"class":217},[47,108097,101355],{"class":221},[47,108099,108100,108102],{"class":49,"line":1288},[47,108101,30446],{"class":217},[47,108103,107606],{"class":221},[47,108105,108106],{"class":49,"line":1294},[47,108107,2493],{"emptyLinePlaceholder":145},[47,108109,108110],{"class":49,"line":1308},[47,108111,2493],{"emptyLinePlaceholder":145},[47,108113,108114,108116,108118],{"class":49,"line":1314},[47,108115,101368],{"class":85},[47,108117,13657],{"class":217},[47,108119,101373],{"class":81},[47,108121,108122],{"class":49,"line":1405},[47,108123,108124],{"class":81},"\u003Cmujoco model=\"viewer_demo\">\n",[47,108126,108127],{"class":49,"line":1411},[47,108128,101383],{"class":81},[47,108130,108131],{"class":49,"line":1423},[47,108132,2493],{"emptyLinePlaceholder":145},[47,108134,108135],{"class":49,"line":1706},[47,108136,101392],{"class":81},[47,108138,108139],{"class":49,"line":1711},[47,108140,108141],{"class":81},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[47,108143,108144],{"class":49,"line":1717},[47,108145,108146],{"class":81},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[47,108148,108149],{"class":49,"line":1722},[47,108150,2493],{"emptyLinePlaceholder":145},[47,108152,108153],{"class":49,"line":1736},[47,108154,101406],{"class":81},[47,108156,108157],{"class":49,"line":1741},[47,108158,101411],{"class":81},[47,108160,108161],{"class":49,"line":1747},[47,108162,108163],{"class":81},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[47,108165,108166],{"class":49,"line":1768},[47,108167,101421],{"class":81},[47,108169,108170],{"class":49,"line":1773},[47,108171,101426],{"class":81},[47,108173,108174],{"class":49,"line":1787},[47,108175,101431],{"class":81},[47,108177,108178],{"class":49,"line":1792},[47,108179,95752],{"class":81},[47,108181,108182],{"class":49,"line":1821},[47,108183,2493],{"emptyLinePlaceholder":145},[47,108185,108186],{"class":49,"line":1826},[47,108187,2493],{"emptyLinePlaceholder":145},[47,108189,108190,108192,108194,108196,108198],{"class":49,"line":1843},[47,108191,32001],{"class":217},[47,108193,2066],{"class":53},[47,108195,101452],{"class":221},[47,108197,95740],{"class":85},[47,108199,3832],{"class":221},[47,108201,108202,108204,108206,108208,108210],{"class":49,"line":1848},[47,108203,101461],{"class":221},[47,108205,267],{"class":217},[47,108207,101466],{"class":221},[47,108209,101368],{"class":85},[47,108211,228],{"class":221},[47,108213,108214,108216,108218],{"class":49,"line":1853},[47,108215,101475],{"class":221},[47,108217,267],{"class":217},[47,108219,101480],{"class":221},[47,108221,108222],{"class":49,"line":1858},[47,108223,2493],{"emptyLinePlaceholder":145},[47,108225,108226,108228,108230,108232],{"class":49,"line":1872},[47,108227,34232],{"class":217},[47,108229,107890],{"class":221},[47,108231,31437],{"class":217},[47,108233,107895],{"class":221},[47,108235,108236,108239,108242,108244,108247,108249,108252],{"class":49,"line":1877},[47,108237,108238],{"class":217},"        while",[47,108240,108241],{"class":221}," viewer.is_running() ",[47,108243,30516],{"class":217},[47,108245,108246],{"class":221}," data.time ",[47,108248,1129],{"class":217},[47,108250,108251],{"class":85}," 5.0",[47,108253,3832],{"class":221},[47,108255,108256,108259,108261],{"class":49,"line":2670},[47,108257,108258],{"class":221},"            step_start ",[47,108260,267],{"class":217},[47,108262,108263],{"class":221}," time.time()\n",[47,108265,108266],{"class":49,"line":2684},[47,108267,108268],{"class":221},"            mujoco.mj_step(model, data)\n",[47,108270,108271],{"class":49,"line":2692},[47,108272,108273],{"class":221},"            viewer.sync()\n",[47,108275,108276],{"class":49,"line":2697},[47,108277,2493],{"emptyLinePlaceholder":145},[47,108279,108280,108283,108285,108287,108289,108291,108293],{"class":49,"line":2703},[47,108281,108282],{"class":221},"            sleep_time ",[47,108284,267],{"class":217},[47,108286,108014],{"class":221},[47,108288,751],{"class":217},[47,108290,108019],{"class":221},[47,108292,751],{"class":217},[47,108294,108024],{"class":221},[47,108296,108297,108299,108302,108304,108306],{"class":49,"line":2709},[47,108298,4735],{"class":217},[47,108300,108301],{"class":221}," sleep_time ",[47,108303,1179],{"class":217},[47,108305,4186],{"class":85},[47,108307,3832],{"class":221},[47,108309,108310],{"class":49,"line":2714},[47,108311,108312],{"class":221},"                time.sleep(sleep_time)\n",[47,108314,108315],{"class":49,"line":8041},[47,108316,2493],{"emptyLinePlaceholder":145},[47,108318,108319],{"class":49,"line":8065},[47,108320,2493],{"emptyLinePlaceholder":145},[47,108322,108323,108325,108327,108329,108331],{"class":49,"line":8070},[47,108324,1625],{"class":217},[47,108326,31274],{"class":85},[47,108328,101613],{"class":217},[47,108330,101616],{"class":81},[47,108332,3832],{"class":221},[47,108334,108335],{"class":49,"line":8076},[47,108336,101623],{"class":221},[19,108338,103624],{},[38,108340,108342],{"className":40,"code":108341,"language":42,"meta":43,"style":43},"touch ch5_viewer.py\n",[26,108343,108344],{"__ignoreMap":43},[47,108345,108346,108348],{"class":49,"line":50},[47,108347,101337],{"class":53},[47,108349,108350],{"class":81}," ch5_viewer.py\n",[19,108352,108353],{},"离屏 Renderer 保存图片:",[38,108355,108357],{"className":30432,"code":108356,"language":30434,"meta":43,"style":43},"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",[26,108358,108359,108371,108375,108381,108391,108395,108399,108407,108412,108416,108420,108424,108428,108433,108437,108441,108445,108449,108453,108457,108461,108465,108469,108473,108477,108489,108501,108509,108534,108538,108554,108558,108562,108577,108586,108590,108604,108609,108614,108618,108630,108642,108646,108650,108662],{"__ignoreMap":43},[47,108360,108361,108363,108366,108368],{"class":49,"line":50},[47,108362,30791],{"class":217},[47,108364,108365],{"class":221}," pathlib ",[47,108367,30446],{"class":217},[47,108369,108370],{"class":221}," Path\n",[47,108372,108373],{"class":49,"line":92},[47,108374,2493],{"emptyLinePlaceholder":145},[47,108376,108377,108379],{"class":49,"line":1273},[47,108378,30446],{"class":217},[47,108380,101355],{"class":221},[47,108382,108383,108385,108387,108389],{"class":49,"line":1288},[47,108384,30791],{"class":217},[47,108386,47317],{"class":85},[47,108388,47320],{"class":217},[47,108390,47323],{"class":221},[47,108392,108393],{"class":49,"line":1294},[47,108394,2493],{"emptyLinePlaceholder":145},[47,108396,108397],{"class":49,"line":1308},[47,108398,2493],{"emptyLinePlaceholder":145},[47,108400,108401,108403,108405],{"class":49,"line":1314},[47,108402,101368],{"class":85},[47,108404,13657],{"class":217},[47,108406,101373],{"class":81},[47,108408,108409],{"class":49,"line":1405},[47,108410,108411],{"class":81},"\u003Cmujoco model=\"renderer_demo\">\n",[47,108413,108414],{"class":49,"line":1411},[47,108415,101383],{"class":81},[47,108417,108418],{"class":49,"line":1423},[47,108419,2493],{"emptyLinePlaceholder":145},[47,108421,108422],{"class":49,"line":1706},[47,108423,101392],{"class":81},[47,108425,108426],{"class":49,"line":1711},[47,108427,108141],{"class":81},[47,108429,108430],{"class":49,"line":1717},[47,108431,108432],{"class":81},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[47,108434,108435],{"class":49,"line":1722},[47,108436,108146],{"class":81},[47,108438,108439],{"class":49,"line":1736},[47,108440,2493],{"emptyLinePlaceholder":145},[47,108442,108443],{"class":49,"line":1741},[47,108444,101406],{"class":81},[47,108446,108447],{"class":49,"line":1747},[47,108448,101411],{"class":81},[47,108450,108451],{"class":49,"line":1768},[47,108452,108163],{"class":81},[47,108454,108455],{"class":49,"line":1773},[47,108456,101421],{"class":81},[47,108458,108459],{"class":49,"line":1787},[47,108460,101426],{"class":81},[47,108462,108463],{"class":49,"line":1792},[47,108464,101431],{"class":81},[47,108466,108467],{"class":49,"line":1821},[47,108468,95752],{"class":81},[47,108470,108471],{"class":49,"line":1826},[47,108472,2493],{"emptyLinePlaceholder":145},[47,108474,108475],{"class":49,"line":1843},[47,108476,2493],{"emptyLinePlaceholder":145},[47,108478,108479,108481,108483,108485,108487],{"class":49,"line":1848},[47,108480,32001],{"class":217},[47,108482,2066],{"class":53},[47,108484,101452],{"class":221},[47,108486,95740],{"class":85},[47,108488,3832],{"class":221},[47,108490,108491,108493,108495,108497,108499],{"class":49,"line":1853},[47,108492,101461],{"class":221},[47,108494,267],{"class":217},[47,108496,101466],{"class":221},[47,108498,101368],{"class":85},[47,108500,228],{"class":221},[47,108502,108503,108505,108507],{"class":49,"line":1858},[47,108504,101475],{"class":221},[47,108506,267],{"class":217},[47,108508,101480],{"class":221},[47,108510,108511,108514,108516,108518,108520,108522,108524,108526,108528,108530,108532],{"class":49,"line":1872},[47,108512,108513],{"class":221},"    renderer ",[47,108515,267],{"class":217},[47,108517,107928],{"class":221},[47,108519,25035],{"class":5309},[47,108521,267],{"class":217},[47,108523,42396],{"class":85},[47,108525,12528],{"class":221},[47,108527,25031],{"class":5309},[47,108529,267],{"class":217},[47,108531,107943],{"class":85},[47,108533,228],{"class":221},[47,108535,108536],{"class":49,"line":1877},[47,108537,2493],{"emptyLinePlaceholder":145},[47,108539,108540,108542,108544,108546,108548,108550,108552],{"class":49,"line":2670},[47,108541,3294],{"class":217},[47,108543,101555],{"class":221},[47,108545,26097],{"class":217},[47,108547,32497],{"class":85},[47,108549,222],{"class":221},[47,108551,530],{"class":85},[47,108553,30840],{"class":221},[47,108555,108556],{"class":49,"line":2684},[47,108557,101570],{"class":221},[47,108559,108560],{"class":49,"line":2692},[47,108561,2493],{"emptyLinePlaceholder":145},[47,108563,108564,108567,108570,108572,108575],{"class":49,"line":2697},[47,108565,108566],{"class":221},"    renderer.update_scene(data, ",[47,108568,108569],{"class":5309},"camera",[47,108571,267],{"class":217},[47,108573,108574],{"class":81},"\"fixed_camera\"",[47,108576,228],{"class":221},[47,108578,108579,108582,108584],{"class":49,"line":2703},[47,108580,108581],{"class":221},"    image ",[47,108583,267],{"class":217},[47,108585,107639],{"class":221},[47,108587,108588],{"class":49,"line":2709},[47,108589,2493],{"emptyLinePlaceholder":145},[47,108591,108592,108595,108597,108600,108602],{"class":49,"line":2714},[47,108593,108594],{"class":221},"    output_path ",[47,108596,267],{"class":217},[47,108598,108599],{"class":221}," Path(",[47,108601,108069],{"class":81},[47,108603,228],{"class":221},[47,108605,108606],{"class":49,"line":8041},[47,108607,108608],{"class":221},"    Image.fromarray(image).save(output_path)\n",[47,108610,108611],{"class":49,"line":8065},[47,108612,108613],{"class":221},"    renderer.close()\n",[47,108615,108616],{"class":49,"line":8070},[47,108617,2493],{"emptyLinePlaceholder":145},[47,108619,108620,108622,108624,108627],{"class":49,"line":8076},[47,108621,31353],{"class":85},[47,108623,222],{"class":221},[47,108625,108626],{"class":81},"\"saved:\"",[47,108628,108629],{"class":221},", output_path.resolve())\n",[47,108631,108632,108634,108636,108639],{"class":49,"line":8103},[47,108633,31353],{"class":85},[47,108635,222],{"class":221},[47,108637,108638],{"class":81},"\"image shape:\"",[47,108640,108641],{"class":221},", image.shape)\n",[47,108643,108644],{"class":49,"line":8108},[47,108645,2493],{"emptyLinePlaceholder":145},[47,108647,108648],{"class":49,"line":8114},[47,108649,2493],{"emptyLinePlaceholder":145},[47,108651,108652,108654,108656,108658,108660],{"class":49,"line":8126},[47,108653,1625],{"class":217},[47,108655,31274],{"class":85},[47,108657,101613],{"class":217},[47,108659,101616],{"class":81},[47,108661,3832],{"class":221},[47,108663,108664],{"class":49,"line":8138},[47,108665,101623],{"class":221},[19,108667,103624],{},[38,108669,108671],{"className":40,"code":108670,"language":42,"meta":43,"style":43},"touch ch5_renderer.py\n",[26,108672,108673],{"__ignoreMap":43},[47,108674,108675,108677],{"class":49,"line":50},[47,108676,101337],{"class":53},[47,108678,108679],{"class":81}," ch5_renderer.py\n",[187,108681,101626],{"id":101626},[19,108683,108684],{},"viewer 上下文：",[38,108686,108688],{"className":30432,"code":108687,"language":30434,"meta":43,"style":43},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[26,108689,108690],{"__ignoreMap":43},[47,108691,108692,108694,108696,108698],{"class":49,"line":50},[47,108693,107887],{"class":217},[47,108695,107890],{"class":221},[47,108697,31437],{"class":217},[47,108699,107895],{"class":221},[19,108701,108702,108704],{},[26,108703,107887],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,108706,108707],{},"窗口循环：",[38,108709,108711],{"className":30432,"code":108710,"language":30434,"meta":43,"style":43},"while viewer.is_running() and data.time \u003C 5.0:\n",[26,108712,108713],{"__ignoreMap":43},[47,108714,108715,108718,108720,108722,108724,108726,108728],{"class":49,"line":50},[47,108716,108717],{"class":217},"while",[47,108719,108241],{"class":221},[47,108721,30516],{"class":217},[47,108723,108246],{"class":221},[47,108725,1129],{"class":217},[47,108727,108251],{"class":85},[47,108729,3832],{"class":221},[19,108731,108732],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,108734,108735],{},"固定相机：",[38,108737,108739],{"className":53121,"code":108738,"language":53123,"meta":43,"style":43},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[26,108740,108741],{"__ignoreMap":43},[47,108742,108743,108745,108747,108749,108751,108753,108755,108757,108760,108763,108765,108768],{"class":49,"line":50},[47,108744,1129],{"class":221},[47,108746,108569],{"class":51354},[47,108748,15013],{"class":53},[47,108750,267],{"class":221},[47,108752,108574],{"class":81},[47,108754,101160],{"class":53},[47,108756,267],{"class":221},[47,108758,108759],{"class":81},"\"1.5 -2.0 1.2\"",[47,108761,108762],{"class":53}," xyaxes",[47,108764,267],{"class":221},[47,108766,108767],{"class":81},"\"1 0.75 0 0 0 1\"",[47,108769,101198],{"class":221},[19,108771,108772],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[187,108774,108776],{"id":108775},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[38,108778,108780],{"className":30432,"code":108779,"language":30434,"meta":43,"style":43},"import time\n",[26,108781,108782],{"__ignoreMap":43},[47,108783,108784,108786],{"class":49,"line":50},[47,108785,30446],{"class":217},[47,108787,31883],{"class":221},[19,108789,108790],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[38,108792,108794],{"className":30432,"code":108793,"language":30434,"meta":43,"style":43},"import mujoco\nimport mujoco.viewer\n",[26,108795,108796,108802],{"__ignoreMap":43},[47,108797,108798,108800],{"class":49,"line":50},[47,108799,30446],{"class":217},[47,108801,101355],{"class":221},[47,108803,108804,108806],{"class":49,"line":92},[47,108805,30446],{"class":217},[47,108807,107606],{"class":221},[19,108809,108810],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[38,108812,108813],{"className":30432,"code":108687,"language":30434,"meta":43,"style":43},[26,108814,108815],{"__ignoreMap":43},[47,108816,108817,108819,108821,108823],{"class":49,"line":50},[47,108818,107887],{"class":217},[47,108820,107890],{"class":221},[47,108822,31437],{"class":217},[47,108824,107895],{"class":221},[19,108826,108827,108828,108831],{},"打开一个 viewer 窗口。",[26,108829,108830],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[38,108833,108834],{"className":30432,"code":108710,"language":30434,"meta":43,"style":43},[26,108835,108836],{"__ignoreMap":43},[47,108837,108838,108840,108842,108844,108846,108848,108850],{"class":49,"line":50},[47,108839,108717],{"class":217},[47,108841,108241],{"class":221},[47,108843,30516],{"class":217},[47,108845,108246],{"class":221},[47,108847,1129],{"class":217},[47,108849,108251],{"class":85},[47,108851,3832],{"class":221},[19,108853,108854,108855,108858],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[26,108856,108857],{},"viewer.is_running()"," 会变成 false，循环结束。",[38,108860,108862],{"className":30432,"code":108861,"language":30434,"meta":43,"style":43},"step_start = time.time()\n",[26,108863,108864],{"__ignoreMap":43},[47,108865,108866,108869,108871],{"class":49,"line":50},[47,108867,108868],{"class":221},"step_start ",[47,108870,267],{"class":217},[47,108872,108263],{"class":221},[19,108874,108875],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[38,108877,108878],{"className":30432,"code":107972,"language":30434,"meta":43,"style":43},[26,108879,108880,108884],{"__ignoreMap":43},[47,108881,108882],{"class":49,"line":50},[47,108883,104559],{"class":221},[47,108885,108886],{"class":49,"line":92},[47,108887,107983],{"class":221},[19,108889,108890,108892,108893,108895,108896,108898,108899,108902],{},[26,108891,101269],{}," 推进物理仿真。",[26,108894,107991],{}," 把最新的 ",[26,108897,33455],{}," 同步到窗口里显示。没有 ",[26,108900,108901],{},"sync()","，窗口可能看不到最新状态。",[38,108904,108905],{"className":30432,"code":108002,"language":30434,"meta":43,"style":43},[26,108906,108907],{"__ignoreMap":43},[47,108908,108909,108911,108913,108915,108917,108919,108921],{"class":49,"line":50},[47,108910,108009],{"class":221},[47,108912,267],{"class":217},[47,108914,108014],{"class":221},[47,108916,751],{"class":217},[47,108918,108019],{"class":221},[47,108920,751],{"class":217},[47,108922,108024],{"class":221},[19,108924,108925],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[38,108927,108929],{"className":30432,"code":108928,"language":30434,"meta":43,"style":43},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[26,108930,108931,108943],{"__ignoreMap":43},[47,108932,108933,108935,108937,108939,108941],{"class":49,"line":50},[47,108934,1625],{"class":217},[47,108936,108301],{"class":221},[47,108938,1179],{"class":217},[47,108940,4186],{"class":85},[47,108942,3832],{"class":221},[47,108944,108945],{"class":49,"line":92},[47,108946,108947],{"class":221},"    time.sleep(sleep_time)\n",[19,108949,108950],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[187,108952,108954],{"id":108953},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[38,108956,108958],{"className":30432,"code":108957,"language":30434,"meta":43,"style":43},"from pathlib import Path\n",[26,108959,108960],{"__ignoreMap":43},[47,108961,108962,108964,108966,108968],{"class":49,"line":50},[47,108963,30791],{"class":217},[47,108965,108365],{"class":221},[47,108967,30446],{"class":217},[47,108969,108370],{"class":221},[19,108971,108972,108973,108976,108977,108980],{},"导入 ",[26,108974,108975],{},"Path","，用来处理文件路径。相比直接写字符串，",[26,108978,108979],{},"Path(\"render_output.png\")"," 更清晰。",[38,108982,108984],{"className":30432,"code":108983,"language":30434,"meta":43,"style":43},"from PIL import Image\n",[26,108985,108986],{"__ignoreMap":43},[47,108987,108988,108990,108992,108994],{"class":49,"line":50},[47,108989,30791],{"class":217},[47,108991,47317],{"class":85},[47,108993,47320],{"class":217},[47,108995,47323],{"class":221},[19,108997,108998],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[38,109000,109001],{"className":53121,"code":108738,"language":53123,"meta":43,"style":43},[26,109002,109003],{"__ignoreMap":43},[47,109004,109005,109007,109009,109011,109013,109015,109017,109019,109021,109023,109025,109027],{"class":49,"line":50},[47,109006,1129],{"class":221},[47,109008,108569],{"class":51354},[47,109010,15013],{"class":53},[47,109012,267],{"class":221},[47,109014,108574],{"class":81},[47,109016,101160],{"class":53},[47,109018,267],{"class":221},[47,109020,108759],{"class":81},[47,109022,108762],{"class":53},[47,109024,267],{"class":221},[47,109026,108767],{"class":81},[47,109028,101198],{"class":221},[19,109030,109031,109032,109034,109035,109037,109038,109041,109042,109044],{},"定义一个相机。",[26,109033,79864],{}," 是相机名字。",[26,109036,104200],{}," 是相机在世界里的位置。",[26,109039,109040],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[26,109043,104200],{}," 来调视角。",[38,109046,109048],{"className":30432,"code":109047,"language":30434,"meta":43,"style":43},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[26,109049,109050],{"__ignoreMap":43},[47,109051,109052,109054,109056,109058,109060,109062,109064,109066,109068,109070,109072],{"class":49,"line":50},[47,109053,107624],{"class":221},[47,109055,267],{"class":217},[47,109057,107928],{"class":221},[47,109059,25035],{"class":5309},[47,109061,267],{"class":217},[47,109063,42396],{"class":85},[47,109065,12528],{"class":221},[47,109067,25031],{"class":5309},[47,109069,267],{"class":217},[47,109071,107943],{"class":85},[47,109073,228],{"class":221},[19,109075,109076,109077,101072,109079,109081],{},"创建离屏渲染器。",[26,109078,25035],{},[26,109080,25031],{}," 决定输出图片大小。",[38,109083,109084],{"className":30432,"code":101730,"language":30434,"meta":43,"style":43},[26,109085,109086,109102],{"__ignoreMap":43},[47,109087,109088,109090,109092,109094,109096,109098,109100],{"class":49,"line":50},[47,109089,3118],{"class":217},[47,109091,101555],{"class":221},[47,109093,26097],{"class":217},[47,109095,32497],{"class":85},[47,109097,222],{"class":221},[47,109099,530],{"class":85},[47,109101,30840],{"class":221},[47,109103,109104],{"class":49,"line":92},[47,109105,101753],{"class":221},[19,109107,109108],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[38,109110,109112],{"className":30432,"code":109111,"language":30434,"meta":43,"style":43},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[26,109113,109114],{"__ignoreMap":43},[47,109115,109116,109119,109121,109123,109125],{"class":49,"line":50},[47,109117,109118],{"class":221},"renderer.update_scene(data, ",[47,109120,108569],{"class":5309},[47,109122,267],{"class":217},[47,109124,108574],{"class":81},[47,109126,228],{"class":221},[19,109128,109129,109130,109132,109133,109136],{},"告诉 renderer：用当前 ",[26,109131,33455],{}," 的状态更新画面，并使用名为 ",[26,109134,109135],{},"fixed_camera"," 的相机视角。",[38,109138,109139],{"className":30432,"code":108034,"language":30434,"meta":43,"style":43},[26,109140,109141],{"__ignoreMap":43},[47,109142,109143,109145,109147],{"class":49,"line":50},[47,109144,107634],{"class":221},[47,109146,267],{"class":217},[47,109148,107639],{"class":221},[19,109150,109151,109152,109155],{},"真正渲染出图像。",[26,109153,109154],{},"image"," 是一个 NumPy 数组，不是文件。",[38,109157,109159],{"className":30432,"code":109158,"language":30434,"meta":43,"style":43},"Image.fromarray(image).save(output_path)\n",[26,109160,109161],{"__ignoreMap":43},[47,109162,109163],{"class":49,"line":50},[47,109164,109158],{"class":221},[19,109166,109167,109168,28439],{},"把数组转换成图片，并保存到 ",[26,109169,109170],{},"render_output.png",[38,109172,109174],{"className":30432,"code":109173,"language":30434,"meta":43,"style":43},"renderer.close()\n",[26,109175,109176],{"__ignoreMap":43},[47,109177,109178],{"class":49,"line":50},[47,109179,109173],{"class":221},[19,109181,109182],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,109184,102370],{"id":102369},[19,109186,109187,109188,109190,109191,28439],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[26,109189,109170],{},"，并输出图像数组形状，例如 ",[26,109192,109193],{},"(480, 640, 3)",[19,109195,109196],{},"如果图片里看不到方块，先检查：",[171,109198,109199,109202,109205],{},[109,109200,109201],{},"方块是否掉到相机视野外。",[109,109203,109204],{},"camera 位置是否合理。",[109,109206,109207,109208,109211],{},"是否在 ",[26,109209,109210],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,109213,102402],{"id":102401},[19,109215,109216],{},"运行 viewer:",[38,109218,109220],{"className":40,"code":109219,"language":42,"meta":43,"style":43},"python ch5_viewer.py\n",[26,109221,109222],{"__ignoreMap":43},[47,109223,109224,109226],{"class":49,"line":50},[47,109225,30434],{"class":53},[47,109227,108350],{"class":81},[19,109229,109230],{},"运行 renderer:",[38,109232,109234],{"className":40,"code":109233,"language":42,"meta":43,"style":43},"python ch5_renderer.py\n",[26,109235,109236],{"__ignoreMap":43},[47,109237,109238,109240],{"class":49,"line":50},[47,109239,30434],{"class":53},[47,109241,108679],{"class":81},[19,109243,109244],{},"如果在服务器上运行:",[38,109246,109248],{"className":40,"code":109247,"language":42,"meta":43,"style":43},"MUJOCO_GL=egl python ch5_renderer.py\n",[26,109249,109250],{"__ignoreMap":43},[47,109251,109252,109254,109256,109258,109261],{"class":49,"line":50},[47,109253,107868],{"class":221},[47,109255,267],{"class":217},[47,109257,107858],{"class":81},[47,109259,109260],{"class":53}," python",[47,109262,108679],{"class":81},[19,109264,107836],{},[38,109266,109268],{"className":40,"code":109267,"language":42,"meta":43,"style":43},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[26,109269,109270],{"__ignoreMap":43},[47,109271,109272,109274,109276,109278,109280],{"class":49,"line":50},[47,109273,107868],{"class":221},[47,109275,267],{"class":217},[47,109277,107862],{"class":81},[47,109279,109260],{"class":53},[47,109281,108679],{"class":81},[19,109283,109284],{},"再做几个练习：",[171,109286,109287,109294,109297,109303],{},[109,109288,109289,109290,109293],{},"把 renderer 分辨率改成 ",[26,109291,109292],{},"height=240, width=320","，观察输出 shape。",[109,109295,109296],{},"把方块颜色改成蓝色，重新保存图片。",[109,109298,109299,109300,109302],{},"把相机 ",[26,109301,104200],{}," 改远一点，观察画面中物体是否变小。",[109,109304,109305,109306,102468,109309,109312],{},"把 viewer 示例中的 ",[26,109307,109308],{},"data.time \u003C 5.0",[26,109310,109311],{},"data.time \u003C 20.0","，观察更长时间。",[14,109314,102507],{"id":102506},[187,109316,109318],{"id":109317},"viewer-窗口打不开","viewer 窗口打不开",[19,109320,109321],{},"安装:",[38,109323,109325],{"className":40,"code":109324,"language":42,"meta":43,"style":43},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[26,109326,109327],{"__ignoreMap":43},[47,109328,109329,109331,109333,109335,109337,109339,109341,109343,109345,109347,109349],{"class":49,"line":50},[47,109330,78],{"class":53},[47,109332,26369],{"class":81},[47,109334,23925],{"class":81},[47,109336,26454],{"class":85},[47,109338,102560],{"class":81},[47,109340,100888],{"class":81},[47,109342,102565],{"class":81},[47,109344,100901],{"class":81},[47,109346,100907],{"class":81},[47,109348,100898],{"class":81},[47,109350,109351],{"class":81}," libXinerama\n",[187,109353,109355],{"id":109354},"glfwerror",[26,109356,109357],{},"GLFWError",[19,109359,109360],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[187,109362,109364],{"id":109363},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,109366,109367,109368,82593,109370,109372],{},"尝试 ",[26,109369,101091],{},[26,109371,101094],{},"。可能存在版本差异。",[187,109374,109375],{"id":109375},"保存图片是黑的",[19,109377,102629],{},[171,109379,109380,109383,109386,109396],{},[109,109381,109382],{},"XML 里是否有 light。",[109,109384,109385],{},"相机是否对着模型。",[109,109387,109388,109389,109392,109393,28439],{},"是否先 ",[26,109390,109391],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[26,109394,109395],{},"renderer.render()",[109,109397,109398],{},"物体是否已经掉出视野。",[187,109400,109401],{"id":109401},"远程服务器没有显示器",[19,109403,109404],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[38,109406,109407],{"className":40,"code":109247,"language":42,"meta":43,"style":43},[26,109408,109409],{"__ignoreMap":43},[47,109410,109411,109413,109415,109417,109419],{"class":49,"line":50},[47,109412,107868],{"class":221},[47,109414,267],{"class":217},[47,109416,107858],{"class":81},[47,109418,109260],{"class":53},[47,109420,108679],{"class":81},[19,109422,109423],{},"如果 EGL 不可用，再尝试：",[38,109425,109426],{"className":40,"code":109267,"language":42,"meta":43,"style":43},[26,109427,109428],{"__ignoreMap":43},[47,109429,109430,109432,109434,109436,109438],{"class":49,"line":50},[47,109431,107868],{"class":221},[47,109433,267],{"class":217},[47,109435,107862],{"class":81},[47,109437,109260],{"class":53},[47,109439,108679],{"class":81},[14,109441,102661],{"id":102660},[19,109443,109444],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[171,109446,109447,109450,109453],{},[109,109448,109449],{},"先用 viewer 看模型和控制是否正常。",[109,109451,109452],{},"再用 renderer 保存图片或构造视觉观测。",[109,109454,109455],{},"最后把状态、动作、图像、奖励组织成训练数据。",[134,109457,109458],{},"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":43,"searchDepth":92,"depth":92,"links":109460},[109461,109462,109463,109468,109473,109474,109475,109482],{"id":100700,"depth":92,"text":100701},{"id":100823,"depth":92,"text":100824},{"id":101098,"depth":92,"text":101099,"children":109464},[109465,109466,109467],{"id":107965,"depth":1273,"text":107966},{"id":107995,"depth":1273,"text":107996},{"id":108030,"depth":1273,"text":108031},{"id":101306,"depth":92,"text":101307,"children":109469},[109470,109471,109472],{"id":101626,"depth":1273,"text":101626},{"id":108775,"depth":1273,"text":108776},{"id":108953,"depth":1273,"text":108954},{"id":102369,"depth":92,"text":102370},{"id":102401,"depth":92,"text":102402},{"id":102506,"depth":92,"text":102507,"children":109476},[109477,109478,109479,109480,109481],{"id":109317,"depth":1273,"text":109318},{"id":109354,"depth":1273,"text":109357},{"id":109363,"depth":1273,"text":109364},{"id":109375,"depth":1273,"text":109375},{"id":109401,"depth":1273,"text":109401},{"id":102660,"depth":92,"text":102661},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107573,"description":43},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109489,"title":109490,"body":109491,"description":43,"extension":143,"meta":111402,"navigation":145,"path":111403,"seo":111404,"stem":111405,"__hash__":111406},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109492,"toc":111378},[109493,109496,109498,109501,109503,109522,109525,109531,109534,109536,109538,109562,109564,109578,109580,109621,109623,109634,109636,109639,109645,109648,109682,109685,109717,109720,109752,109756,109759,109799,109802,109808,109811,109817,109821,109824,109830,109833,109837,109840,109880,109882,109895,109898,109900,110482,110484,110496,110499,110510,110512,110515,110534,110546,110549,110570,110573,110576,110619,110622,110625,110645,110652,110654,110672,110687,110690,110696,110699,110705,110722,110729,110760,110771,110805,110816,110833,110842,110850,110855,110869,110872,110893,110899,110913,110918,110948,110958,110983,110991,111014,111017,111033,111036,111044,111050,111072,111085,111106,111115,111154,111165,111167,111170,111176,111179,111182,111188,111191,111211,111214,111216,111255,111257,111260,111268,111271,111274,111301,111304,111314,111320,111323,111329,111331,111337,111341,111344,111346,111349,111373,111376],[10,109494,109490],{"id":109495},"_6控制任务cartpole",[14,109497,100701],{"id":100700},[19,109499,109500],{},"本章搭建一个最小 Cartpole 控制任务。",[19,109502,104385],{},[171,109504,109505,109508,109510,109513,109516,109519],{},[109,109506,109507],{},"slide joint",[109,109509,106238],{},[109,109511,109512],{},"cart force actuator",[109,109514,109515],{},"状态观测",[109,109517,109518],{},"简单控制循环",[109,109520,109521],{},"reward 设计雏形",[19,109523,109524],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[38,109526,109529],{"className":109527,"code":109528,"language":5280,"meta":43},[5278],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[26,109530,109528],{"__ignoreMap":43},[19,109532,109533],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,109535,100824],{"id":100823},[19,109537,100827],{},[38,109539,109540],{"className":40,"code":104442,"language":42,"meta":43,"style":43},[26,109541,109542],{"__ignoreMap":43},[47,109543,109544,109546,109548,109550,109552,109554,109556,109558,109560],{"class":49,"line":50},[47,109545,78],{"class":53},[47,109547,26369],{"class":81},[47,109549,23925],{"class":81},[47,109551,26454],{"class":85},[47,109553,104457],{"class":81},[47,109555,100852],{"class":81},[47,109557,102555],{"class":81},[47,109559,100868],{"class":81},[47,109561,104466],{"class":81},[19,109563,102873],{},[38,109565,109566],{"className":40,"code":100973,"language":42,"meta":43,"style":43},[26,109567,109568],{"__ignoreMap":43},[47,109569,109570,109572,109574,109576],{"class":49,"line":50},[47,109571,23922],{"class":53},[47,109573,23925],{"class":81},[47,109575,100984],{"class":81},[47,109577,100987],{"class":81},[19,109579,102890],{},[38,109581,109583],{"className":40,"code":109582,"language":42,"meta":43,"style":43},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[26,109584,109585,109602,109611],{"__ignoreMap":43},[47,109586,109587,109589,109591,109593,109596,109598,109600],{"class":49,"line":50},[47,109588,30384],{"class":53},[47,109590,29230],{"class":81},[47,109592,25169],{"class":85},[47,109594,109595],{"class":81}," mujoco-cartpole",[47,109597,101029],{"class":81},[47,109599,101032],{"class":85},[47,109601,101035],{"class":85},[47,109603,109604,109606,109608],{"class":49,"line":92},[47,109605,30384],{"class":53},[47,109607,101042],{"class":81},[47,109609,109610],{"class":81}," mujoco-cartpole\n",[47,109612,109613,109615,109617,109619],{"class":49,"line":1273},[47,109614,23922],{"class":53},[47,109616,23925],{"class":81},[47,109618,100984],{"class":81},[47,109620,100987],{"class":81},[19,109622,101058],{},[171,109624,109625,109628,109631],{},[109,109626,109627],{},"本章不依赖 Gymnasium。",[109,109629,109630],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[109,109632,109633],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,109635,101099],{"id":101098},[19,109637,109638],{},"Cartpole 的模型结构:",[38,109640,109643],{"className":109641,"code":109642,"language":5280,"meta":43},[5278],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[26,109644,109642],{"__ignoreMap":43},[19,109646,109647],{},"小车通过 slide joint 左右移动:",[38,109649,109651],{"className":53121,"code":109650,"language":53123,"meta":43,"style":43},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[26,109652,109653],{"__ignoreMap":43},[47,109654,109655,109657,109659,109661,109663,109666,109668,109670,109673,109675,109677,109680],{"class":49,"line":50},[47,109656,1129],{"class":221},[47,109658,103010],{"class":51354},[47,109660,15013],{"class":53},[47,109662,267],{"class":221},[47,109664,109665],{"class":81},"\"cart_x\"",[47,109667,53878],{"class":53},[47,109669,267],{"class":221},[47,109671,109672],{"class":81},"\"slide\"",[47,109674,106082],{"class":53},[47,109676,267],{"class":221},[47,109678,109679],{"class":81},"\"1 0 0\"",[47,109681,101198],{"class":221},[19,109683,109684],{},"杆子通过 hinge joint 旋转:",[38,109686,109688],{"className":53121,"code":109687,"language":53123,"meta":43,"style":43},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[26,109689,109690],{"__ignoreMap":43},[47,109691,109692,109694,109696,109698,109700,109703,109705,109707,109709,109711,109713,109715],{"class":49,"line":50},[47,109693,1129],{"class":221},[47,109695,103010],{"class":51354},[47,109697,15013],{"class":53},[47,109699,267],{"class":221},[47,109701,109702],{"class":81},"\"pole_hinge\"",[47,109704,53878],{"class":53},[47,109706,267],{"class":221},[47,109708,106073],{"class":81},[47,109710,106082],{"class":53},[47,109712,267],{"class":221},[47,109714,106087],{"class":81},[47,109716,101198],{"class":221},[19,109718,109719],{},"控制力作用在小车 slide joint 上:",[38,109721,109723],{"className":53121,"code":109722,"language":53123,"meta":43,"style":43},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[26,109724,109725],{"__ignoreMap":43},[47,109726,109727,109729,109731,109733,109735,109738,109740,109742,109744,109746,109748,109750],{"class":49,"line":50},[47,109728,1129],{"class":221},[47,109730,106128],{"class":51354},[47,109732,15013],{"class":53},[47,109734,267],{"class":221},[47,109736,109737],{"class":81},"\"cart_motor\"",[47,109739,106138],{"class":53},[47,109741,267],{"class":221},[47,109743,109665],{"class":81},[47,109745,106145],{"class":53},[47,109747,267],{"class":221},[47,109749,54370],{"class":81},[47,109751,101198],{"class":221},[187,109753,109755],{"id":109754},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,109757,109758],{},"这个简化模型有两个关节：",[357,109760,109761,109772],{},[360,109762,109763],{},[363,109764,109765,109767,109769],{},[366,109766,102813],{"align":23829},[366,109768,23830],{"align":23829},[366,109770,109771],{"align":23829},"对应状态",[404,109773,109774,109787],{},[363,109775,109776,109781,109784],{},[409,109777,109778],{"align":23829},[26,109779,109780],{},"cart_x",[409,109782,109783],{"align":23829},"slide",[409,109785,109786],{"align":23829},"小车 x 位置",[363,109788,109789,109794,109796],{},[409,109790,109791],{"align":23829},[26,109792,109793],{},"pole_hinge",[409,109795,105894],{"align":23829},[409,109797,109798],{"align":23829},"杆子角度",[19,109800,109801],{},"所以：",[38,109803,109806],{"className":109804,"code":109805,"language":5280,"meta":43},[5278],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[26,109807,109805],{"__ignoreMap":43},[19,109809,109810],{},"把它们拼起来就是观测：",[38,109812,109815],{"className":109813,"code":109814,"language":5280,"meta":43},[5278],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[26,109816,109814],{"__ignoreMap":43},[187,109818,109820],{"id":109819},"action-是什么","action 是什么",[19,109822,109823],{},"本章只有一个 actuator：",[38,109825,109828],{"className":109826,"code":109827,"language":5280,"meta":43},[5278],"data.ctrl[0] = action\n",[26,109829,109827],{"__ignoreMap":43},[19,109831,109832],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[187,109834,109836],{"id":109835},"reward-是什么","reward 是什么",[19,109838,109839],{},"奖励函数：",[38,109841,109843],{"className":30432,"code":109842,"language":30434,"meta":43,"style":43},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[26,109844,109845],{"__ignoreMap":43},[47,109846,109847,109849,109852,109854,109856,109858,109861,109863,109866,109868,109870,109872,109875,109877],{"class":49,"line":50},[47,109848,17139],{"class":217},[47,109850,109851],{"class":85}," float",[47,109853,222],{"class":221},[47,109855,102457],{"class":85},[47,109857,52325],{"class":217},[47,109859,109860],{"class":85}," 0.1",[47,109862,6611],{"class":217},[47,109864,109865],{"class":221}," cart_x ",[47,109867,674],{"class":217},[47,109869,109865],{"class":221},[47,109871,751],{"class":217},[47,109873,109874],{"class":221}," pole_angle ",[47,109876,674],{"class":217},[47,109878,109879],{"class":221}," pole_angle)\n",[19,109881,106280],{},[171,109883,109884,109889,109892],{},[109,109885,109886,109887,28439],{},"基础奖励是 ",[26,109888,102457],{},[109,109890,109891],{},"小车离中心越远，扣分越多。",[109,109893,109894],{},"杆子角度越大，扣分越多。",[19,109896,109897],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,109899,101307],{"id":101306},[38,109901,109903],{"className":30432,"code":109902,"language":30434,"meta":43,"style":43},"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",[26,109904,109905,109911,109921,109925,109929,109937,109942,109946,109950,109954,109959,109963,109968,109973,109978,109982,109987,109992,109997,110001,110005,110009,110013,110017,110022,110026,110030,110034,110038,110042,110052,110059,110063,110067,110081,110095,110108,110138,110142,110146,110158,110170,110178,110182,110195,110199,110203,110212,110216,110232,110242,110255,110268,110272,110295,110313,110317,110329,110333,110337,110347,110357,110361,110377,110418,110422,110442,110458,110462,110466,110478],{"__ignoreMap":43},[47,109906,109907,109909],{"class":49,"line":50},[47,109908,30446],{"class":217},[47,109910,101355],{"class":221},[47,109912,109913,109915,109917,109919],{"class":49,"line":92},[47,109914,30446],{"class":217},[47,109916,31434],{"class":221},[47,109918,31437],{"class":217},[47,109920,31440],{"class":221},[47,109922,109923],{"class":49,"line":1273},[47,109924,2493],{"emptyLinePlaceholder":145},[47,109926,109927],{"class":49,"line":1288},[47,109928,2493],{"emptyLinePlaceholder":145},[47,109930,109931,109933,109935],{"class":49,"line":1294},[47,109932,101368],{"class":85},[47,109934,13657],{"class":217},[47,109936,101373],{"class":81},[47,109938,109939],{"class":49,"line":1308},[47,109940,109941],{"class":81},"\u003Cmujoco model=\"cartpole\">\n",[47,109943,109944],{"class":49,"line":1314},[47,109945,101383],{"class":81},[47,109947,109948],{"class":49,"line":1405},[47,109949,2493],{"emptyLinePlaceholder":145},[47,109951,109952],{"class":49,"line":1411},[47,109953,101392],{"class":81},[47,109955,109956],{"class":49,"line":1423},[47,109957,109958],{"class":81},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[47,109960,109961],{"class":49,"line":1706},[47,109962,2493],{"emptyLinePlaceholder":145},[47,109964,109965],{"class":49,"line":1711},[47,109966,109967],{"class":81},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[47,109969,109970],{"class":49,"line":1717},[47,109971,109972],{"class":81},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[47,109974,109975],{"class":49,"line":1722},[47,109976,109977],{"class":81},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[47,109979,109980],{"class":49,"line":1736},[47,109981,2493],{"emptyLinePlaceholder":145},[47,109983,109984],{"class":49,"line":1741},[47,109985,109986],{"class":81},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[47,109988,109989],{"class":49,"line":1747},[47,109990,109991],{"class":81},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[47,109993,109994],{"class":49,"line":1768},[47,109995,109996],{"class":81},"        \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",[47,109998,109999],{"class":49,"line":1773},[47,110000,106492],{"class":81},[47,110002,110003],{"class":49,"line":1787},[47,110004,101421],{"class":81},[47,110006,110007],{"class":49,"line":1792},[47,110008,101426],{"class":81},[47,110010,110011],{"class":49,"line":1821},[47,110012,2493],{"emptyLinePlaceholder":145},[47,110014,110015],{"class":49,"line":1826},[47,110016,106509],{"class":81},[47,110018,110019],{"class":49,"line":1843},[47,110020,110021],{"class":81},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[47,110023,110024],{"class":49,"line":1848},[47,110025,106519],{"class":81},[47,110027,110028],{"class":49,"line":1853},[47,110029,101431],{"class":81},[47,110031,110032],{"class":49,"line":1858},[47,110033,95752],{"class":81},[47,110035,110036],{"class":49,"line":1872},[47,110037,2493],{"emptyLinePlaceholder":145},[47,110039,110040],{"class":49,"line":1877},[47,110041,2493],{"emptyLinePlaceholder":145},[47,110043,110044,110046,110049],{"class":49,"line":2670},[47,110045,32001],{"class":217},[47,110047,110048],{"class":53}," get_observation",[47,110050,110051],{"class":221},"(data: mujoco.MjData) -> np.ndarray:\n",[47,110053,110054,110056],{"class":49,"line":2684},[47,110055,4183],{"class":217},[47,110057,110058],{"class":221}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[47,110060,110061],{"class":49,"line":2692},[47,110062,2493],{"emptyLinePlaceholder":145},[47,110064,110065],{"class":49,"line":2697},[47,110066,2493],{"emptyLinePlaceholder":145},[47,110068,110069,110071,110074,110077,110079],{"class":49,"line":2703},[47,110070,32001],{"class":217},[47,110072,110073],{"class":53}," compute_reward",[47,110075,110076],{"class":221},"(obs: np.ndarray) -> ",[47,110078,261],{"class":85},[47,110080,3832],{"class":221},[47,110082,110083,110086,110088,110091,110093],{"class":49,"line":2709},[47,110084,110085],{"class":221},"    cart_x ",[47,110087,267],{"class":217},[47,110089,110090],{"class":221}," obs[",[47,110092,411],{"class":85},[47,110094,33300],{"class":221},[47,110096,110097,110100,110102,110104,110106],{"class":49,"line":2714},[47,110098,110099],{"class":221},"    pole_angle ",[47,110101,267],{"class":217},[47,110103,110090],{"class":221},[47,110105,436],{"class":85},[47,110107,33300],{"class":221},[47,110109,110110,110112,110114,110116,110118,110120,110122,110124,110126,110128,110130,110132,110134,110136],{"class":49,"line":8041},[47,110111,4183],{"class":217},[47,110113,109851],{"class":85},[47,110115,222],{"class":221},[47,110117,102457],{"class":85},[47,110119,52325],{"class":217},[47,110121,109860],{"class":85},[47,110123,6611],{"class":217},[47,110125,109865],{"class":221},[47,110127,674],{"class":217},[47,110129,109865],{"class":221},[47,110131,751],{"class":217},[47,110133,109874],{"class":221},[47,110135,674],{"class":217},[47,110137,109879],{"class":221},[47,110139,110140],{"class":49,"line":8065},[47,110141,2493],{"emptyLinePlaceholder":145},[47,110143,110144],{"class":49,"line":8070},[47,110145,2493],{"emptyLinePlaceholder":145},[47,110147,110148,110150,110152,110154,110156],{"class":49,"line":8076},[47,110149,32001],{"class":217},[47,110151,2066],{"class":53},[47,110153,101452],{"class":221},[47,110155,95740],{"class":85},[47,110157,3832],{"class":221},[47,110159,110160,110162,110164,110166,110168],{"class":49,"line":8103},[47,110161,101461],{"class":221},[47,110163,267],{"class":217},[47,110165,101466],{"class":221},[47,110167,101368],{"class":85},[47,110169,228],{"class":221},[47,110171,110172,110174,110176],{"class":49,"line":8108},[47,110173,101475],{"class":221},[47,110175,267],{"class":217},[47,110177,101480],{"class":221},[47,110179,110180],{"class":49,"line":8114},[47,110181,2493],{"emptyLinePlaceholder":145},[47,110183,110184,110186,110188,110190,110192],{"class":49,"line":8126},[47,110185,105123],{"class":221},[47,110187,436],{"class":85},[47,110189,4536],{"class":221},[47,110191,267],{"class":217},[47,110193,110194],{"class":85}," 0.1\n",[47,110196,110197],{"class":49,"line":8138},[47,110198,105136],{"class":221},[47,110200,110201],{"class":49,"line":8150},[47,110202,2493],{"emptyLinePlaceholder":145},[47,110204,110205,110208,110210],{"class":49,"line":9809},[47,110206,110207],{"class":221},"    total_reward ",[47,110209,267],{"class":217},[47,110211,104815],{"class":85},[47,110213,110214],{"class":49,"line":9834},[47,110215,2493],{"emptyLinePlaceholder":145},[47,110217,110218,110220,110222,110224,110226,110228,110230],{"class":49,"line":9857},[47,110219,3294],{"class":217},[47,110221,31670],{"class":221},[47,110223,26097],{"class":217},[47,110225,32497],{"class":85},[47,110227,222],{"class":221},[47,110229,6503],{"class":85},[47,110231,30840],{"class":221},[47,110233,110234,110237,110239],{"class":49,"line":9881},[47,110235,110236],{"class":221},"        obs ",[47,110238,267],{"class":217},[47,110240,110241],{"class":221}," get_observation(data)\n",[47,110243,110244,110247,110249,110251,110253],{"class":49,"line":9886},[47,110245,110246],{"class":221},"        pole_angle ",[47,110248,267],{"class":217},[47,110250,110090],{"class":221},[47,110252,436],{"class":85},[47,110254,33300],{"class":221},[47,110256,110257,110260,110262,110264,110266],{"class":49,"line":9891},[47,110258,110259],{"class":221},"        pole_angular_velocity ",[47,110261,267],{"class":217},[47,110263,110090],{"class":221},[47,110265,292],{"class":85},[47,110267,33300],{"class":221},[47,110269,110270],{"class":49,"line":9896},[47,110271,2493],{"emptyLinePlaceholder":145},[47,110273,110274,110277,110279,110282,110284,110286,110288,110290,110292],{"class":49,"line":9905},[47,110275,110276],{"class":221},"        action ",[47,110278,267],{"class":217},[47,110280,110281],{"class":85}," 2.0",[47,110283,6611],{"class":217},[47,110285,109874],{"class":221},[47,110287,700],{"class":217},[47,110289,61921],{"class":85},[47,110291,6611],{"class":217},[47,110293,110294],{"class":221}," pole_angular_velocity\n",[47,110296,110297,110299,110301,110303,110305,110307,110309,110311],{"class":49,"line":9910},[47,110298,110276],{"class":221},[47,110300,267],{"class":217},[47,110302,107501],{"class":221},[47,110304,751],{"class":217},[47,110306,102457],{"class":85},[47,110308,12528],{"class":221},[47,110310,102457],{"class":85},[47,110312,228],{"class":221},[47,110314,110315],{"class":49,"line":9916},[47,110316,2493],{"emptyLinePlaceholder":145},[47,110318,110319,110321,110323,110325,110327],{"class":49,"line":9937},[47,110320,106671],{"class":221},[47,110322,411],{"class":85},[47,110324,4536],{"class":221},[47,110326,267],{"class":217},[47,110328,107524],{"class":221},[47,110330,110331],{"class":49,"line":9943},[47,110332,101570],{"class":221},[47,110334,110335],{"class":49,"line":9957},[47,110336,2493],{"emptyLinePlaceholder":145},[47,110338,110339,110342,110344],{"class":49,"line":9963},[47,110340,110341],{"class":221},"        reward ",[47,110343,267],{"class":217},[47,110345,110346],{"class":221}," compute_reward(get_observation(data))\n",[47,110348,110349,110352,110354],{"class":49,"line":9990},[47,110350,110351],{"class":221},"        total_reward ",[47,110353,9570],{"class":217},[47,110355,110356],{"class":221}," reward\n",[47,110358,110359],{"class":49,"line":9999},[47,110360,2493],{"emptyLinePlaceholder":145},[47,110362,110363,110365,110367,110369,110371,110373,110375],{"class":49,"line":10005},[47,110364,2590],{"class":217},[47,110366,31670],{"class":221},[47,110368,547],{"class":217},[47,110370,5847],{"class":85},[47,110372,101613],{"class":217},[47,110374,4186],{"class":85},[47,110376,3832],{"class":221},[47,110378,110379,110381,110383,110386,110389,110392,110395,110397,110400,110403,110405,110407,110409,110411,110414,110416],{"class":49,"line":10013},[47,110380,34704],{"class":85},[47,110382,222],{"class":221},[47,110384,110385],{"class":81},"\"step:\"",[47,110387,110388],{"class":221},", step, ",[47,110390,110391],{"class":81},"\"obs:\"",[47,110393,110394],{"class":221},", np.round(obs, ",[47,110396,292],{"class":85},[47,110398,110399],{"class":221},"), ",[47,110401,110402],{"class":81},"\"action:\"",[47,110404,12528],{"class":221},[47,110406,32072],{"class":85},[47,110408,222],{"class":221},[47,110410,261],{"class":85},[47,110412,110413],{"class":221},"(action), ",[47,110415,292],{"class":85},[47,110417,30551],{"class":221},[47,110419,110420],{"class":49,"line":10018},[47,110421,2493],{"emptyLinePlaceholder":145},[47,110423,110424,110426,110428,110431,110433,110435,110438,110440],{"class":49,"line":16697},[47,110425,31353],{"class":85},[47,110427,222],{"class":221},[47,110429,110430],{"class":81},"\"total_reward:\"",[47,110432,12528],{"class":221},[47,110434,32072],{"class":85},[47,110436,110437],{"class":221},"(total_reward, ",[47,110439,292],{"class":85},[47,110441,30551],{"class":221},[47,110443,110444,110446,110448,110451,110454,110456],{"class":49,"line":16703},[47,110445,31353],{"class":85},[47,110447,222],{"class":221},[47,110449,110450],{"class":81},"\"final obs:\"",[47,110452,110453],{"class":221},", np.round(get_observation(data), ",[47,110455,292],{"class":85},[47,110457,30551],{"class":221},[47,110459,110460],{"class":49,"line":16726},[47,110461,2493],{"emptyLinePlaceholder":145},[47,110463,110464],{"class":49,"line":16732},[47,110465,2493],{"emptyLinePlaceholder":145},[47,110467,110468,110470,110472,110474,110476],{"class":49,"line":16755},[47,110469,1625],{"class":217},[47,110471,31274],{"class":85},[47,110473,101613],{"class":217},[47,110475,101616],{"class":81},[47,110477,3832],{"class":221},[47,110479,110480],{"class":49,"line":16769},[47,110481,101623],{"class":221},[19,110483,103624],{},[38,110485,110487],{"className":40,"code":110486,"language":42,"meta":43,"style":43},"touch ch6_cartpole.py\n",[26,110488,110489],{"__ignoreMap":43},[47,110490,110491,110493],{"class":49,"line":50},[47,110492,101337],{"class":53},[47,110494,110495],{"class":81}," ch6_cartpole.py\n",[19,110497,110498],{},"运行：",[38,110500,110502],{"className":40,"code":110501,"language":42,"meta":43,"style":43},"python ch6_cartpole.py\n",[26,110503,110504],{"__ignoreMap":43},[47,110505,110506,110508],{"class":49,"line":50},[47,110507,30434],{"class":53},[47,110509,110495],{"class":81},[187,110511,101626],{"id":101626},[19,110513,110514],{},"构造观测：",[38,110516,110518],{"className":30432,"code":110517,"language":30434,"meta":43,"style":43},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[26,110519,110520,110528],{"__ignoreMap":43},[47,110521,110522,110524,110526],{"class":49,"line":50},[47,110523,32001],{"class":217},[47,110525,110048],{"class":53},[47,110527,110051],{"class":221},[47,110529,110530,110532],{"class":49,"line":92},[47,110531,4183],{"class":217},[47,110533,110058],{"class":221},[19,110535,110536,110539,110540,110542,110543,110545],{},[26,110537,110538],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[26,110541,104084],{}," 2 维，",[26,110544,104414],{}," 2 维，所以 obs 是 4 维。",[19,110547,110548],{},"设置初始角度：",[38,110550,110552],{"className":30432,"code":110551,"language":30434,"meta":43,"style":43},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[26,110553,110554,110566],{"__ignoreMap":43},[47,110555,110556,110558,110560,110562,110564],{"class":49,"line":50},[47,110557,104753],{"class":221},[47,110559,436],{"class":85},[47,110561,4536],{"class":221},[47,110563,267],{"class":217},[47,110565,110194],{"class":85},[47,110567,110568],{"class":49,"line":92},[47,110569,104597],{"class":221},[19,110571,110572],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,110574,110575],{},"简单反馈控制：",[38,110577,110579],{"className":30432,"code":110578,"language":30434,"meta":43,"style":43},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[26,110580,110581,110601],{"__ignoreMap":43},[47,110582,110583,110585,110587,110589,110591,110593,110595,110597,110599],{"class":49,"line":50},[47,110584,107496],{"class":221},[47,110586,267],{"class":217},[47,110588,110281],{"class":85},[47,110590,6611],{"class":217},[47,110592,109874],{"class":221},[47,110594,700],{"class":217},[47,110596,61921],{"class":85},[47,110598,6611],{"class":217},[47,110600,110294],{"class":221},[47,110602,110603,110605,110607,110609,110611,110613,110615,110617],{"class":49,"line":92},[47,110604,107496],{"class":221},[47,110606,267],{"class":217},[47,110608,107501],{"class":221},[47,110610,751],{"class":217},[47,110612,102457],{"class":85},[47,110614,12528],{"class":221},[47,110616,102457],{"class":85},[47,110618,228],{"class":221},[19,110620,110621],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,110623,110624],{},"限制动作：",[38,110626,110628],{"className":30432,"code":110627,"language":30434,"meta":43,"style":43},"np.clip(action, -1.0, 1.0)\n",[26,110629,110630],{"__ignoreMap":43},[47,110631,110632,110635,110637,110639,110641,110643],{"class":49,"line":50},[47,110633,110634],{"class":221},"np.clip(action, ",[47,110636,751],{"class":217},[47,110638,102457],{"class":85},[47,110640,12528],{"class":221},[47,110642,102457],{"class":85},[47,110644,228],{"class":221},[19,110646,110647,110648,110651],{},"因为 XML 里 ",[26,110649,110650],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[187,110653,101762],{"id":101762},[38,110655,110656],{"className":30432,"code":110517,"language":30434,"meta":43,"style":43},[26,110657,110658,110666],{"__ignoreMap":43},[47,110659,110660,110662,110664],{"class":49,"line":50},[47,110661,32001],{"class":217},[47,110663,110048],{"class":53},[47,110665,110051],{"class":221},[47,110667,110668,110670],{"class":49,"line":92},[47,110669,4183],{"class":217},[47,110671,110058],{"class":221},[19,110673,110674,110675,110678,110679,110682,110683,110686],{},"这段定义了一个函数，用来获取当前观测。",[26,110676,110677],{},"data.qpos.copy()"," 是位置数组副本，",[26,110680,110681],{},"data.qvel.copy()"," 是速度数组副本。",[26,110684,110685],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,110688,110689],{},"在本章模型里：",[38,110691,110694],{"className":110692,"code":110693,"language":5280,"meta":43},[5278],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[26,110695,110693],{"__ignoreMap":43},[19,110697,110698],{},"所以返回的 obs 是：",[38,110700,110703],{"className":110701,"code":110702,"language":5280,"meta":43},[5278],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[26,110704,110702],{"__ignoreMap":43},[38,110706,110708],{"className":30432,"code":110707,"language":30434,"meta":43,"style":43},"def compute_reward(obs: np.ndarray) -> float:\n",[26,110709,110710],{"__ignoreMap":43},[47,110711,110712,110714,110716,110718,110720],{"class":49,"line":50},[47,110713,32001],{"class":217},[47,110715,110073],{"class":53},[47,110717,110076],{"class":221},[47,110719,261],{"class":85},[47,110721,3832],{"class":221},[19,110723,110724,110725,110728],{},"这行定义奖励函数。输入是观测 ",[26,110726,110727],{},"obs","，输出是一个浮点数奖励。",[38,110730,110732],{"className":30432,"code":110731,"language":30434,"meta":43,"style":43},"cart_x = obs[0]\npole_angle = obs[1]\n",[26,110733,110734,110747],{"__ignoreMap":43},[47,110735,110736,110739,110741,110743,110745],{"class":49,"line":50},[47,110737,110738],{"class":221},"cart_x ",[47,110740,267],{"class":217},[47,110742,110090],{"class":221},[47,110744,411],{"class":85},[47,110746,33300],{"class":221},[47,110748,110749,110752,110754,110756,110758],{"class":49,"line":92},[47,110750,110751],{"class":221},"pole_angle ",[47,110753,267],{"class":217},[47,110755,110090],{"class":221},[47,110757,436],{"class":85},[47,110759,33300],{"class":221},[19,110761,110762,110763,110766,110767,110770],{},"数组索引从 0 开始。",[26,110764,110765],{},"obs[0]"," 是第一个元素，也就是小车位置。",[26,110768,110769],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[38,110772,110773],{"className":30432,"code":109842,"language":30434,"meta":43,"style":43},[26,110774,110775],{"__ignoreMap":43},[47,110776,110777,110779,110781,110783,110785,110787,110789,110791,110793,110795,110797,110799,110801,110803],{"class":49,"line":50},[47,110778,17139],{"class":217},[47,110780,109851],{"class":85},[47,110782,222],{"class":221},[47,110784,102457],{"class":85},[47,110786,52325],{"class":217},[47,110788,109860],{"class":85},[47,110790,6611],{"class":217},[47,110792,109865],{"class":221},[47,110794,674],{"class":217},[47,110796,109865],{"class":221},[47,110798,751],{"class":217},[47,110800,109874],{"class":221},[47,110802,674],{"class":217},[47,110804,109879],{"class":221},[19,110806,110807,110808,110811,110812,110815],{},"这行计算奖励。",[26,110809,110810],{},"cart_x * cart_x"," 是小车位置的平方，",[26,110813,110814],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[38,110817,110819],{"className":30432,"code":110818,"language":30434,"meta":43,"style":43},"data.qpos[1] = 0.1\n",[26,110820,110821],{"__ignoreMap":43},[47,110822,110823,110825,110827,110829,110831],{"class":49,"line":50},[47,110824,104753],{"class":221},[47,110826,436],{"class":85},[47,110828,4536],{"class":221},[47,110830,267],{"class":217},[47,110832,110194],{"class":85},[19,110834,110835,110836,110838,110839,110841],{},"手动设置杆子的初始角度。因为 ",[26,110837,105510],{}," 是小车位置，",[26,110840,105513],{}," 是杆子角度，所以这里改的是杆子。",[38,110843,110844],{"className":30432,"code":104597,"language":30434,"meta":43,"style":43},[26,110845,110846],{"__ignoreMap":43},[47,110847,110848],{"class":49,"line":50},[47,110849,104597],{"class":221},[19,110851,105556,110852,110854],{},[26,110853,104084],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[38,110856,110858],{"className":30432,"code":110857,"language":30434,"meta":43,"style":43},"total_reward = 0.0\n",[26,110859,110860],{"__ignoreMap":43},[47,110861,110862,110865,110867],{"class":49,"line":50},[47,110863,110864],{"class":221},"total_reward ",[47,110866,267],{"class":217},[47,110868,104815],{"class":85},[19,110870,110871],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[38,110873,110875],{"className":30432,"code":110874,"language":30434,"meta":43,"style":43},"for step in range(1000):\n",[26,110876,110877],{"__ignoreMap":43},[47,110878,110879,110881,110883,110885,110887,110889,110891],{"class":49,"line":50},[47,110880,3118],{"class":217},[47,110882,31670],{"class":221},[47,110884,26097],{"class":217},[47,110886,32497],{"class":85},[47,110888,222],{"class":221},[47,110890,6503],{"class":85},[47,110892,30840],{"class":221},[19,110894,110895,110896,110898],{},"循环 1000 步。",[26,110897,107188],{}," 是当前步数，从 0 到 999。",[38,110900,110902],{"className":30432,"code":110901,"language":30434,"meta":43,"style":43},"obs = get_observation(data)\n",[26,110903,110904],{"__ignoreMap":43},[47,110905,110906,110909,110911],{"class":49,"line":50},[47,110907,110908],{"class":221},"obs ",[47,110910,267],{"class":217},[47,110912,110241],{"class":221},[19,110914,110915,110916,28439],{},"读取当前状态，保存到 ",[26,110917,110727],{},[38,110919,110921],{"className":30432,"code":110920,"language":30434,"meta":43,"style":43},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[26,110922,110923,110935],{"__ignoreMap":43},[47,110924,110925,110927,110929,110931,110933],{"class":49,"line":50},[47,110926,110751],{"class":221},[47,110928,267],{"class":217},[47,110930,110090],{"class":221},[47,110932,436],{"class":85},[47,110934,33300],{"class":221},[47,110936,110937,110940,110942,110944,110946],{"class":49,"line":92},[47,110938,110939],{"class":221},"pole_angular_velocity ",[47,110941,267],{"class":217},[47,110943,110090],{"class":221},[47,110945,292],{"class":85},[47,110947,33300],{"class":221},[19,110949,110950,110951,110954,110955,28439],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[26,110952,110953],{},"obs[3]","？因为 obs 的顺序是 ",[26,110956,110957],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[38,110959,110961],{"className":30432,"code":110960,"language":30434,"meta":43,"style":43},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[26,110962,110963],{"__ignoreMap":43},[47,110964,110965,110967,110969,110971,110973,110975,110977,110979,110981],{"class":49,"line":50},[47,110966,107496],{"class":221},[47,110968,267],{"class":217},[47,110970,110281],{"class":85},[47,110972,6611],{"class":217},[47,110974,109874],{"class":221},[47,110976,700],{"class":217},[47,110978,61921],{"class":85},[47,110980,6611],{"class":217},[47,110982,110294],{"class":221},[19,110984,110985,110986,101072,110988,110990],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[26,110987,105314],{},[26,110989,35383],{}," 是人为设置的系数，不是固定公式。",[38,110992,110994],{"className":30432,"code":110993,"language":30434,"meta":43,"style":43},"action = np.clip(action, -1.0, 1.0)\n",[26,110995,110996],{"__ignoreMap":43},[47,110997,110998,111000,111002,111004,111006,111008,111010,111012],{"class":49,"line":50},[47,110999,107496],{"class":221},[47,111001,267],{"class":217},[47,111003,107501],{"class":221},[47,111005,751],{"class":217},[47,111007,102457],{"class":85},[47,111009,12528],{"class":221},[47,111011,102457],{"class":85},[47,111013,228],{"class":221},[19,111015,111016],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[38,111018,111019],{"className":30432,"code":109827,"language":30434,"meta":43,"style":43},[26,111020,111021],{"__ignoreMap":43},[47,111022,111023,111025,111027,111029,111031],{"class":49,"line":50},[47,111024,105925],{"class":221},[47,111026,411],{"class":85},[47,111028,4536],{"class":221},[47,111030,267],{"class":217},[47,111032,107524],{"class":221},[19,111034,111035],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[38,111037,111038],{"className":30432,"code":104559,"language":30434,"meta":43,"style":43},[26,111039,111040],{"__ignoreMap":43},[47,111041,111042],{"class":49,"line":50},[47,111043,104559],{"class":221},[19,111045,111046,111047,111049],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[26,111048,106180],{}," 计算小车和杆子的下一刻状态。",[38,111051,111053],{"className":30432,"code":111052,"language":30434,"meta":43,"style":43},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[26,111054,111055,111064],{"__ignoreMap":43},[47,111056,111057,111060,111062],{"class":49,"line":50},[47,111058,111059],{"class":221},"reward ",[47,111061,267],{"class":217},[47,111063,110346],{"class":221},[47,111065,111066,111068,111070],{"class":49,"line":92},[47,111067,110864],{"class":221},[47,111069,9570],{"class":217},[47,111071,110356],{"class":221},[19,111073,111074,111075,111077,111078,111081,111082,28439],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[26,111076,9570],{}," 是简写，",[26,111079,111080],{},"total_reward += reward"," 等价于 ",[26,111083,111084],{},"total_reward = total_reward + reward",[38,111086,111088],{"className":30432,"code":111087,"language":30434,"meta":43,"style":43},"if step % 100 == 0:\n",[26,111089,111090],{"__ignoreMap":43},[47,111091,111092,111094,111096,111098,111100,111102,111104],{"class":49,"line":50},[47,111093,1625],{"class":217},[47,111095,31670],{"class":221},[47,111097,547],{"class":217},[47,111099,5847],{"class":85},[47,111101,101613],{"class":217},[47,111103,4186],{"class":85},[47,111105,3832],{"class":221},[19,111107,111108,111110,111111,111114],{},[26,111109,547],{}," 是取余数。",[26,111112,111113],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[38,111116,111118],{"className":30432,"code":111117,"language":30434,"meta":43,"style":43},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[26,111119,111120],{"__ignoreMap":43},[47,111121,111122,111124,111126,111128,111130,111132,111134,111136,111138,111140,111142,111144,111146,111148,111150,111152],{"class":49,"line":50},[47,111123,30469],{"class":85},[47,111125,222],{"class":221},[47,111127,110385],{"class":81},[47,111129,110388],{"class":221},[47,111131,110391],{"class":81},[47,111133,110394],{"class":221},[47,111135,292],{"class":85},[47,111137,110399],{"class":221},[47,111139,110402],{"class":81},[47,111141,12528],{"class":221},[47,111143,32072],{"class":85},[47,111145,222],{"class":221},[47,111147,261],{"class":85},[47,111149,110413],{"class":221},[47,111151,292],{"class":85},[47,111153,30551],{"class":221},[19,111155,111156,111157,111160,111161,111164],{},"打印当前步数、观测和动作。",[26,111158,111159],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[26,111162,111163],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,111166,102370],{"id":102369},[19,111168,111169],{},"观测向量:",[38,111171,111174],{"className":111172,"code":111173,"language":5280,"meta":43},[5278],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[26,111175,111173],{"__ignoreMap":43},[19,111177,111178],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,111180,111181],{},"每隔 100 步会打印一次：",[38,111183,111186],{"className":111184,"code":111185,"language":5280,"meta":43},[5278],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[26,111187,111185],{"__ignoreMap":43},[19,111189,111190],{},"重点观察：",[171,111192,111193,111199,111204],{},[109,111194,111195,111198],{},[26,111196,111197],{},"pole_angle"," 是否越来越大。",[109,111200,111201,111203],{},[26,111202,109780],{}," 是否跑得太远。",[109,111205,111206,111207,82593,111209,28439],{},"action 是否经常被 clip 到 ",[26,111208,103969],{},[26,111210,436],{},[19,111212,111213],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,111215,102402],{"id":102401},[171,111217,111218,111224,111227,111233,111243,111249,111252],{},[109,111219,111220,111221,28439],{},"把初始角度改为 ",[26,111222,111223],{},"data.qpos[1] = 0.3",[109,111225,111226],{},"重新运行，观察控制是否变差。",[109,111228,111229,111230,111232],{},"把 actuator ",[26,111231,107121],{}," 改小。",[109,111234,111235,111236,111239,111240,28439],{},"打印 ",[26,111237,111238],{},"model.nq, model.nv, model.nu","，应为 ",[26,111241,111242],{},"2 2 1",[109,111244,111245,111246,111248],{},"把 reward 里的 ",[26,111247,110814],{}," 系数改大，观察总奖励变化。",[109,111250,111251],{},"把控制器改成反号，观察杆子是否更容易倒。",[109,111253,111254],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,111256,102507],{"id":102506},[187,111258,111259],{"id":111259},"杆子方向和预期不一致",[19,111261,102450,111262,111264,111265,111267],{},[26,111263,106293],{}," 和 capsule 的 ",[26,111266,103230],{},"，必要时用 viewer 可视化确认。",[187,111269,111270],{"id":111270},"控制器越控越倒",[19,111272,111273],{},"说明反馈符号可能反了，尝试:",[38,111275,111277],{"className":30432,"code":111276,"language":30434,"meta":43,"style":43},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[26,111278,111279],{"__ignoreMap":43},[47,111280,111281,111283,111285,111287,111289,111291,111293,111295,111297,111299],{"class":49,"line":50},[47,111282,107496],{"class":221},[47,111284,267],{"class":217},[47,111286,52325],{"class":217},[47,111288,105314],{"class":85},[47,111290,6611],{"class":217},[47,111292,109874],{"class":221},[47,111294,751],{"class":217},[47,111296,61921],{"class":85},[47,111298,6611],{"class":217},[47,111300,110294],{"class":221},[187,111302,111303],{"id":111303},"小车飞走",[19,111305,111306,111307,111309,111310,111313],{},"降低 ",[26,111308,107121],{}," 或缩小 ",[26,111311,111312],{},"action"," 的 clip 范围。",[187,111315,111317,111319],{"id":111316},"obs3-为什么是杆子角速度",[26,111318,110953],{}," 为什么是杆子角速度",[19,111321,111322],{},"因为这个模型里：",[38,111324,111327],{"className":111325,"code":111326,"language":5280,"meta":43},[5278],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[26,111328,111326],{"__ignoreMap":43},[19,111330,109801],{},[38,111332,111335],{"className":111333,"code":111334,"language":5280,"meta":43},[5278],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[26,111336,111334],{"__ignoreMap":43},[187,111338,111340],{"id":111339},"reward-变成负数是否错误","reward 变成负数是否错误",[19,111342,111343],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,111345,102661],{"id":102660},[19,111347,111348],{},"一个控制任务通常包含：",[171,111350,111351,111354,111362,111367,111370],{},[109,111352,111353],{},"模型：Cartpole 的 body、joint、actuator。",[109,111355,111356,111357,60,111359,111361],{},"观测：从 ",[26,111358,104084],{},[26,111360,104414],{}," 里取状态。",[109,111363,111364,111365,28439],{},"动作：写入 ",[26,111366,101130],{},[109,111368,111369],{},"奖励：根据任务目标打分。",[109,111371,111372],{},"循环：obs -> action -> step -> reward。",[19,111374,111375],{},"这就是后面 Gymnasium 环境的基本骨架。",[134,111377,104340],{},{"title":43,"searchDepth":92,"depth":92,"links":111379},[111380,111381,111382,111387,111391,111392,111393,111401],{"id":100700,"depth":92,"text":100701},{"id":100823,"depth":92,"text":100824},{"id":101098,"depth":92,"text":101099,"children":111383},[111384,111385,111386],{"id":109754,"depth":1273,"text":109755},{"id":109819,"depth":1273,"text":109820},{"id":109835,"depth":1273,"text":109836},{"id":101306,"depth":92,"text":101307,"children":111388},[111389,111390],{"id":101626,"depth":1273,"text":101626},{"id":101762,"depth":1273,"text":101762},{"id":102369,"depth":92,"text":102370},{"id":102401,"depth":92,"text":102402},{"id":102506,"depth":92,"text":102507,"children":111394},[111395,111396,111397,111398,111400],{"id":111259,"depth":1273,"text":111259},{"id":111270,"depth":1273,"text":111270},{"id":111303,"depth":1273,"text":111303},{"id":111316,"depth":1273,"text":111399},"obs[3] 为什么是杆子角速度",{"id":111339,"depth":1273,"text":111340},{"id":102660,"depth":92,"text":102661},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109490,"description":43},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111408,"title":111409,"body":111410,"description":43,"extension":143,"meta":113424,"navigation":145,"path":113425,"seo":113426,"stem":113427,"__hash__":113428},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111411,"toc":113400},[111412,111415,111417,111420,111422,111439,111442,111445,111451,111454,111456,111458,111482,111484,111498,111500,111541,111543,111561,111563,111566,111572,111575,111603,111607,111613,111638,111641,111672,111679,111682,111685,111691,111694,111700,111703,111709,111713,111716,111741,111744,111746,112506,112508,112520,112522,112533,112535,112538,112555,112558,112560,112571,112574,112576,112622,112625,112638,112641,112723,112726,112728,112744,112754,112767,112770,112809,112819,112830,112840,112853,112856,112885,112888,112898,112901,112907,112924,112935,112937,112943,112960,112971,112992,112995,113007,113010,113031,113034,113042,113050,113067,113070,113139,113146,113154,113157,113170,113177,113179,113182,113188,113191,113194,113200,113206,113208,113248,113250,113256,113265,113268,113270,113290,113293,113296,113302,113306,113308,113335,113338,113341,113368,113374,113377,113380,113382,113385,113388,113394,113397],[10,111413,111409],{"id":111414},"_7控制任务reacher-机械臂到达目标",[14,111416,100701],{"id":100700},[19,111418,111419],{},"本章搭建一个二维两关节 reacher 任务。",[19,111421,104385],{},[171,111423,111424,111427,111430,111433,111436],{},[109,111425,111426],{},"两个 hinge joint",[109,111428,111429],{},"两个 motor actuator",[109,111431,111432],{},"site 作为末端点和目标点",[109,111434,111435],{},"根据末端和目标距离设计 reward",[109,111437,111438],{},"构造机械臂任务的基本形式",[19,111440,111441],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,111443,111444],{},"Reacher 任务可以理解为：",[38,111446,111449],{"className":111447,"code":111448,"language":5280,"meta":43},[5278],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[26,111450,111448],{"__ignoreMap":43},[19,111452,111453],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,111455,100824],{"id":100823},[19,111457,100827],{},[38,111459,111460],{"className":40,"code":104442,"language":42,"meta":43,"style":43},[26,111461,111462],{"__ignoreMap":43},[47,111463,111464,111466,111468,111470,111472,111474,111476,111478,111480],{"class":49,"line":50},[47,111465,78],{"class":53},[47,111467,26369],{"class":81},[47,111469,23925],{"class":81},[47,111471,26454],{"class":85},[47,111473,104457],{"class":81},[47,111475,100852],{"class":81},[47,111477,102555],{"class":81},[47,111479,100868],{"class":81},[47,111481,104466],{"class":81},[19,111483,102873],{},[38,111485,111486],{"className":40,"code":100973,"language":42,"meta":43,"style":43},[26,111487,111488],{"__ignoreMap":43},[47,111489,111490,111492,111494,111496],{"class":49,"line":50},[47,111491,23922],{"class":53},[47,111493,23925],{"class":81},[47,111495,100984],{"class":81},[47,111497,100987],{"class":81},[19,111499,102890],{},[38,111501,111503],{"className":40,"code":111502,"language":42,"meta":43,"style":43},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[26,111504,111505,111522,111531],{"__ignoreMap":43},[47,111506,111507,111509,111511,111513,111516,111518,111520],{"class":49,"line":50},[47,111508,30384],{"class":53},[47,111510,29230],{"class":81},[47,111512,25169],{"class":85},[47,111514,111515],{"class":81}," mujoco-reacher",[47,111517,101029],{"class":81},[47,111519,101032],{"class":85},[47,111521,101035],{"class":85},[47,111523,111524,111526,111528],{"class":49,"line":92},[47,111525,30384],{"class":53},[47,111527,101042],{"class":81},[47,111529,111530],{"class":81}," mujoco-reacher\n",[47,111532,111533,111535,111537,111539],{"class":49,"line":1273},[47,111534,23922],{"class":53},[47,111536,23925],{"class":81},[47,111538,100984],{"class":81},[47,111540,100987],{"class":81},[19,111542,101058],{},[171,111544,111545,111548,111551],{},[109,111546,111547],{},"本章使用低维状态，不使用图像输入。",[109,111549,111550],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[109,111552,111553,111554,60,111556,60,111558,111560],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[26,111555,104084],{},[26,111557,104414],{},[26,111559,103734],{}," 的方法一致。",[14,111562,101099],{"id":101098},[19,111564,111565],{},"Reacher 任务核心:",[38,111567,111570],{"className":111568,"code":111569,"language":5280,"meta":43},[5278],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[26,111571,111569],{"__ignoreMap":43},[19,111573,111574],{},"读取 site 世界坐标:",[38,111576,111578],{"className":30432,"code":111577,"language":30434,"meta":43,"style":43},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[26,111579,111580,111593],{"__ignoreMap":43},[47,111581,111582,111584,111586,111588,111591],{"class":49,"line":50},[47,111583,103688],{"class":221},[47,111585,267],{"class":217},[47,111587,103459],{"class":221},[47,111589,111590],{"class":81},"\"tip\"",[47,111592,228],{"class":221},[47,111594,111595,111598,111600],{"class":49,"line":92},[47,111596,111597],{"class":221},"tip_pos ",[47,111599,267],{"class":217},[47,111601,111602],{"class":221}," data.site_xpos[site_id]\n",[187,111604,111606],{"id":111605},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,111608,111609,111610,111612],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[26,111611,104084],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[38,111614,111616],{"className":30432,"code":111615,"language":30434,"meta":43,"style":43},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[26,111617,111618,111628],{"__ignoreMap":43},[47,111619,111620,111623,111625],{"class":49,"line":50},[47,111621,111622],{"class":221},"tip ",[47,111624,267],{"class":217},[47,111626,111627],{"class":221}," data.site_xpos[tip_site_id]\n",[47,111629,111630,111633,111635],{"class":49,"line":92},[47,111631,111632],{"class":221},"target ",[47,111634,267],{"class":217},[47,111636,111637],{"class":221}," data.site_xpos[target_site_id]\n",[19,111639,111640],{},"这样 reward 就很容易写：",[38,111642,111644],{"className":30432,"code":111643,"language":30434,"meta":43,"style":43},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[26,111645,111646,111661],{"__ignoreMap":43},[47,111647,111648,111651,111653,111656,111658],{"class":49,"line":50},[47,111649,111650],{"class":221},"dist ",[47,111652,267],{"class":217},[47,111654,111655],{"class":221}," np.linalg.norm(tip ",[47,111657,751],{"class":217},[47,111659,111660],{"class":221}," target)\n",[47,111662,111663,111665,111667,111669],{"class":49,"line":92},[47,111664,111059],{"class":221},[47,111666,267],{"class":217},[47,111668,52325],{"class":217},[47,111670,111671],{"class":221},"dist\n",[19,111673,111674,111675,111678],{},"距离越小，",[26,111676,111677],{},"-dist"," 越接近 0，奖励越高。",[187,111680,111681],{"id":111681},"两关节机械臂的状态",[19,111683,111684],{},"这个模型有两个 hinge joint：",[38,111686,111689],{"className":111687,"code":111688,"language":5280,"meta":43},[5278],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[26,111690,111688],{"__ignoreMap":43},[19,111692,111693],{},"再加上末端和目标位置：",[38,111695,111698],{"className":111696,"code":111697,"language":5280,"meta":43},[5278],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[26,111699,111697],{"__ignoreMap":43},[19,111701,111702],{},"总维度：",[38,111704,111707],{"className":111705,"code":111706,"language":5280,"meta":43},[5278],"2 + 2 + 3 + 3 = 10\n",[26,111708,111706],{"__ignoreMap":43},[187,111710,111712],{"id":111711},"为什么-gravity-是-0","为什么 gravity 是 0",[19,111714,111715],{},"本章把重力设为：",[38,111717,111719],{"className":53121,"code":111718,"language":53123,"meta":43,"style":43},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[26,111720,111721],{"__ignoreMap":43},[47,111722,111723,111725,111727,111729,111731,111733,111735,111737,111739],{"class":49,"line":50},[47,111724,1129],{"class":221},[47,111726,69220],{"class":51354},[47,111728,101248],{"class":53},[47,111730,267],{"class":221},[47,111732,101253],{"class":81},[47,111734,101256],{"class":53},[47,111736,267],{"class":221},[47,111738,103825],{"class":81},[47,111740,101198],{"class":221},[19,111742,111743],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,111745,101307],{"id":101306},[38,111747,111749],{"className":30432,"code":111748,"language":30434,"meta":43,"style":43},"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",[26,111750,111751,111757,111767,111771,111775,111783,111788,111793,111797,111801,111806,111811,111815,111820,111825,111830,111834,111839,111844,111849,111854,111858,111862,111866,111870,111874,111879,111884,111888,111892,111896,111900,111904,111919,111928,111940,111963,111970,111974,111978,111988,112002,112016,112023,112027,112031,112045,112057,112069,112082,112097,112114,112118,112122,112134,112146,112154,112162,112166,112182,112187,112200,112213,112228,112232,112267,112299,112303,112307,112316,112320,112336,112346,112357,112373,112389,112405,112421,112425,112443,112463,112482,112486,112490,112502],{"__ignoreMap":43},[47,111752,111753,111755],{"class":49,"line":50},[47,111754,30446],{"class":217},[47,111756,101355],{"class":221},[47,111758,111759,111761,111763,111765],{"class":49,"line":92},[47,111760,30446],{"class":217},[47,111762,31434],{"class":221},[47,111764,31437],{"class":217},[47,111766,31440],{"class":221},[47,111768,111769],{"class":49,"line":1273},[47,111770,2493],{"emptyLinePlaceholder":145},[47,111772,111773],{"class":49,"line":1288},[47,111774,2493],{"emptyLinePlaceholder":145},[47,111776,111777,111779,111781],{"class":49,"line":1294},[47,111778,101368],{"class":85},[47,111780,13657],{"class":217},[47,111782,101373],{"class":81},[47,111784,111785],{"class":49,"line":1308},[47,111786,111787],{"class":81},"\u003Cmujoco model=\"two_link_reacher\">\n",[47,111789,111790],{"class":49,"line":1314},[47,111791,111792],{"class":81},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[47,111794,111795],{"class":49,"line":1405},[47,111796,2493],{"emptyLinePlaceholder":145},[47,111798,111799],{"class":49,"line":1411},[47,111800,101392],{"class":81},[47,111802,111803],{"class":49,"line":1423},[47,111804,111805],{"class":81},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[47,111807,111808],{"class":49,"line":1706},[47,111809,111810],{"class":81},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[47,111812,111813],{"class":49,"line":1711},[47,111814,2493],{"emptyLinePlaceholder":145},[47,111816,111817],{"class":49,"line":1717},[47,111818,111819],{"class":81},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[47,111821,111822],{"class":49,"line":1722},[47,111823,111824],{"class":81},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[47,111826,111827],{"class":49,"line":1736},[47,111828,111829],{"class":81},"      \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",[47,111831,111832],{"class":49,"line":1741},[47,111833,2493],{"emptyLinePlaceholder":145},[47,111835,111836],{"class":49,"line":1747},[47,111837,111838],{"class":81},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[47,111840,111841],{"class":49,"line":1768},[47,111842,111843],{"class":81},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[47,111845,111846],{"class":49,"line":1773},[47,111847,111848],{"class":81},"        \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",[47,111850,111851],{"class":49,"line":1787},[47,111852,111853],{"class":81},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[47,111855,111856],{"class":49,"line":1792},[47,111857,106492],{"class":81},[47,111859,111860],{"class":49,"line":1821},[47,111861,101421],{"class":81},[47,111863,111864],{"class":49,"line":1826},[47,111865,101426],{"class":81},[47,111867,111868],{"class":49,"line":1843},[47,111869,2493],{"emptyLinePlaceholder":145},[47,111871,111872],{"class":49,"line":1848},[47,111873,106509],{"class":81},[47,111875,111876],{"class":49,"line":1853},[47,111877,111878],{"class":81},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[47,111880,111881],{"class":49,"line":1858},[47,111882,111883],{"class":81},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[47,111885,111886],{"class":49,"line":1872},[47,111887,106519],{"class":81},[47,111889,111890],{"class":49,"line":1877},[47,111891,101431],{"class":81},[47,111893,111894],{"class":49,"line":2670},[47,111895,95752],{"class":81},[47,111897,111898],{"class":49,"line":2684},[47,111899,2493],{"emptyLinePlaceholder":145},[47,111901,111902],{"class":49,"line":2692},[47,111903,2493],{"emptyLinePlaceholder":145},[47,111905,111906,111908,111911,111914,111916],{"class":49,"line":2697},[47,111907,32001],{"class":217},[47,111909,111910],{"class":53}," site_position",[47,111912,111913],{"class":221},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[47,111915,1393],{"class":85},[47,111917,111918],{"class":221},") -> np.ndarray:\n",[47,111920,111921,111923,111925],{"class":49,"line":2703},[47,111922,103454],{"class":221},[47,111924,267],{"class":217},[47,111926,111927],{"class":221}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[47,111929,111930,111932,111934,111936,111938],{"class":49,"line":2709},[47,111931,3194],{"class":217},[47,111933,103503],{"class":221},[47,111935,1129],{"class":217},[47,111937,4186],{"class":85},[47,111939,3832],{"class":221},[47,111941,111942,111944,111946,111948,111950,111953,111955,111957,111959,111961],{"class":49,"line":2714},[47,111943,103486],{"class":217},[47,111945,103489],{"class":85},[47,111947,222],{"class":221},[47,111949,273],{"class":217},[47,111951,111952],{"class":81},"\"site not found: ",[47,111954,1115],{"class":85},[47,111956,79864],{"class":221},[47,111958,1165],{"class":85},[47,111960,470],{"class":81},[47,111962,228],{"class":221},[47,111964,111965,111967],{"class":49,"line":8041},[47,111966,4183],{"class":217},[47,111968,111969],{"class":221}," data.site_xpos[site_id].copy()\n",[47,111971,111972],{"class":49,"line":8065},[47,111973,2493],{"emptyLinePlaceholder":145},[47,111975,111976],{"class":49,"line":8070},[47,111977,2493],{"emptyLinePlaceholder":145},[47,111979,111980,111982,111985],{"class":49,"line":8076},[47,111981,32001],{"class":217},[47,111983,111984],{"class":53}," get_obs",[47,111986,111987],{"class":221},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[47,111989,111990,111993,111995,111998,112000],{"class":49,"line":8103},[47,111991,111992],{"class":221},"    tip ",[47,111994,267],{"class":217},[47,111996,111997],{"class":221}," site_position(model, data, ",[47,111999,111590],{"class":81},[47,112001,228],{"class":221},[47,112003,112004,112007,112009,112011,112014],{"class":49,"line":8108},[47,112005,112006],{"class":221},"    target ",[47,112008,267],{"class":217},[47,112010,111997],{"class":221},[47,112012,112013],{"class":81},"\"target\"",[47,112015,228],{"class":221},[47,112017,112018,112020],{"class":49,"line":8114},[47,112019,4183],{"class":217},[47,112021,112022],{"class":221}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[47,112024,112025],{"class":49,"line":8126},[47,112026,2493],{"emptyLinePlaceholder":145},[47,112028,112029],{"class":49,"line":8138},[47,112030,2493],{"emptyLinePlaceholder":145},[47,112032,112033,112035,112038,112041,112043],{"class":49,"line":8150},[47,112034,32001],{"class":217},[47,112036,112037],{"class":53}," reward",[47,112039,112040],{"class":221},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[47,112042,261],{"class":85},[47,112044,3832],{"class":221},[47,112046,112047,112049,112051,112053,112055],{"class":49,"line":9809},[47,112048,111992],{"class":221},[47,112050,267],{"class":217},[47,112052,111997],{"class":221},[47,112054,111590],{"class":81},[47,112056,228],{"class":221},[47,112058,112059,112061,112063,112065,112067],{"class":49,"line":9834},[47,112060,112006],{"class":221},[47,112062,267],{"class":217},[47,112064,111997],{"class":221},[47,112066,112013],{"class":81},[47,112068,228],{"class":221},[47,112070,112071,112074,112076,112078,112080],{"class":49,"line":9857},[47,112072,112073],{"class":221},"    dist ",[47,112075,267],{"class":217},[47,112077,111655],{"class":221},[47,112079,751],{"class":217},[47,112081,111660],{"class":221},[47,112083,112084,112087,112089,112092,112094],{"class":49,"line":9881},[47,112085,112086],{"class":221},"    control_cost ",[47,112088,267],{"class":217},[47,112090,112091],{"class":85}," 0.01",[47,112093,6611],{"class":217},[47,112095,112096],{"class":221}," np.sum(np.square(data.ctrl))\n",[47,112098,112099,112101,112103,112105,112107,112109,112111],{"class":49,"line":9886},[47,112100,4183],{"class":217},[47,112102,109851],{"class":85},[47,112104,222],{"class":221},[47,112106,751],{"class":217},[47,112108,111650],{"class":221},[47,112110,751],{"class":217},[47,112112,112113],{"class":221}," control_cost)\n",[47,112115,112116],{"class":49,"line":9891},[47,112117,2493],{"emptyLinePlaceholder":145},[47,112119,112120],{"class":49,"line":9896},[47,112121,2493],{"emptyLinePlaceholder":145},[47,112123,112124,112126,112128,112130,112132],{"class":49,"line":9905},[47,112125,32001],{"class":217},[47,112127,2066],{"class":53},[47,112129,101452],{"class":221},[47,112131,95740],{"class":85},[47,112133,3832],{"class":221},[47,112135,112136,112138,112140,112142,112144],{"class":49,"line":9910},[47,112137,101461],{"class":221},[47,112139,267],{"class":217},[47,112141,101466],{"class":221},[47,112143,101368],{"class":85},[47,112145,228],{"class":221},[47,112147,112148,112150,112152],{"class":49,"line":9916},[47,112149,101475],{"class":221},[47,112151,267],{"class":217},[47,112153,101480],{"class":221},[47,112155,112156,112158,112160],{"class":49,"line":9937},[47,112157,110207],{"class":221},[47,112159,267],{"class":217},[47,112161,104815],{"class":85},[47,112163,112164],{"class":49,"line":9943},[47,112165,2493],{"emptyLinePlaceholder":145},[47,112167,112168,112170,112172,112174,112176,112178,112180],{"class":49,"line":9957},[47,112169,3294],{"class":217},[47,112171,31670],{"class":221},[47,112173,26097],{"class":217},[47,112175,32497],{"class":85},[47,112177,222],{"class":221},[47,112179,65128],{"class":85},[47,112181,30840],{"class":221},[47,112183,112184],{"class":49,"line":9963},[47,112185,112186],{"class":221},"        mujoco.mj_forward(model, data)\n",[47,112188,112189,112192,112194,112196,112198],{"class":49,"line":9990},[47,112190,112191],{"class":221},"        tip ",[47,112193,267],{"class":217},[47,112195,111997],{"class":221},[47,112197,111590],{"class":81},[47,112199,228],{"class":221},[47,112201,112202,112205,112207,112209,112211],{"class":49,"line":9999},[47,112203,112204],{"class":221},"        target ",[47,112206,267],{"class":217},[47,112208,111997],{"class":221},[47,112210,112013],{"class":81},[47,112212,228],{"class":221},[47,112214,112215,112218,112220,112223,112225],{"class":49,"line":10005},[47,112216,112217],{"class":221},"        error ",[47,112219,267],{"class":217},[47,112221,112222],{"class":221}," target ",[47,112224,751],{"class":217},[47,112226,112227],{"class":221}," tip\n",[47,112229,112230],{"class":49,"line":10013},[47,112231,2493],{"emptyLinePlaceholder":145},[47,112233,112234,112236,112238,112240,112242,112245,112247,112249,112252,112254,112257,112259,112261,112263,112265],{"class":49,"line":10018},[47,112235,106671],{"class":221},[47,112237,411],{"class":85},[47,112239,4536],{"class":221},[47,112241,267],{"class":217},[47,112243,112244],{"class":221}," np.clip(",[47,112246,105314],{"class":85},[47,112248,6611],{"class":217},[47,112250,112251],{"class":221}," error[",[47,112253,298],{"class":85},[47,112255,112256],{"class":221},"], ",[47,112258,751],{"class":217},[47,112260,102457],{"class":85},[47,112262,12528],{"class":221},[47,112264,102457],{"class":85},[47,112266,228],{"class":221},[47,112268,112269,112271,112273,112275,112277,112279,112281,112283,112285,112287,112289,112291,112293,112295,112297],{"class":49,"line":16697},[47,112270,106671],{"class":221},[47,112272,436],{"class":85},[47,112274,4536],{"class":221},[47,112276,267],{"class":217},[47,112278,112244],{"class":221},[47,112280,105314],{"class":85},[47,112282,6611],{"class":217},[47,112284,112251],{"class":221},[47,112286,411],{"class":85},[47,112288,112256],{"class":221},[47,112290,751],{"class":217},[47,112292,102457],{"class":85},[47,112294,12528],{"class":221},[47,112296,102457],{"class":85},[47,112298,228],{"class":221},[47,112300,112301],{"class":49,"line":16703},[47,112302,2493],{"emptyLinePlaceholder":145},[47,112304,112305],{"class":49,"line":16726},[47,112306,101570],{"class":221},[47,112308,112309,112311,112313],{"class":49,"line":16732},[47,112310,110351],{"class":221},[47,112312,9570],{"class":217},[47,112314,112315],{"class":221}," reward(model, data)\n",[47,112317,112318],{"class":49,"line":16755},[47,112319,2493],{"emptyLinePlaceholder":145},[47,112321,112322,112324,112326,112328,112330,112332,112334],{"class":49,"line":16769},[47,112323,2590],{"class":217},[47,112325,31670],{"class":221},[47,112327,547],{"class":217},[47,112329,5847],{"class":85},[47,112331,101613],{"class":217},[47,112333,4186],{"class":85},[47,112335,3832],{"class":221},[47,112337,112338,112341,112343],{"class":49,"line":16789},[47,112339,112340],{"class":221},"            obs ",[47,112342,267],{"class":217},[47,112344,112345],{"class":221}," get_obs(model, data)\n",[47,112347,112348,112350,112352,112354],{"class":49,"line":16795},[47,112349,34704],{"class":85},[47,112351,222],{"class":221},[47,112353,110385],{"class":81},[47,112355,112356],{"class":221},", step)\n",[47,112358,112359,112361,112363,112366,112369,112371],{"class":49,"line":16806},[47,112360,34704],{"class":85},[47,112362,222],{"class":221},[47,112364,112365],{"class":81},"\"  tip:\"",[47,112367,112368],{"class":221},", np.round(tip, ",[47,112370,292],{"class":85},[47,112372,30551],{"class":221},[47,112374,112375,112377,112379,112382,112385,112387],{"class":49,"line":16829},[47,112376,34704],{"class":85},[47,112378,222],{"class":221},[47,112380,112381],{"class":81},"\"  target:\"",[47,112383,112384],{"class":221},", np.round(target, ",[47,112386,292],{"class":85},[47,112388,30551],{"class":221},[47,112390,112391,112393,112395,112398,112401,112403],{"class":49,"line":16851},[47,112392,34704],{"class":85},[47,112394,222],{"class":221},[47,112396,112397],{"class":81},"\"  ctrl:\"",[47,112399,112400],{"class":221},", np.round(data.ctrl.copy(), ",[47,112402,292],{"class":85},[47,112404,30551],{"class":221},[47,112406,112407,112409,112411,112414,112417,112419],{"class":49,"line":16856},[47,112408,34704],{"class":85},[47,112410,222],{"class":221},[47,112412,112413],{"class":81},"\"  obs_dim:\"",[47,112415,112416],{"class":221},", obs.shape[",[47,112418,411],{"class":85},[47,112420,4750],{"class":221},[47,112422,112423],{"class":49,"line":16862},[47,112424,2493],{"emptyLinePlaceholder":145},[47,112426,112427,112429,112431,112433,112435,112437,112439,112441],{"class":49,"line":16876},[47,112428,31353],{"class":85},[47,112430,222],{"class":221},[47,112432,110430],{"class":81},[47,112434,12528],{"class":221},[47,112436,32072],{"class":85},[47,112438,110437],{"class":221},[47,112440,292],{"class":85},[47,112442,30551],{"class":221},[47,112444,112445,112447,112449,112452,112455,112457,112459,112461],{"class":49,"line":16889},[47,112446,31353],{"class":85},[47,112448,222],{"class":221},[47,112450,112451],{"class":81},"\"final tip:\"",[47,112453,112454],{"class":221},", np.round(site_position(model, data, ",[47,112456,111590],{"class":81},[47,112458,110399],{"class":221},[47,112460,292],{"class":85},[47,112462,30551],{"class":221},[47,112464,112465,112467,112469,112472,112474,112476,112478,112480],{"class":49,"line":16894},[47,112466,31353],{"class":85},[47,112468,222],{"class":221},[47,112470,112471],{"class":81},"\"target:\"",[47,112473,112454],{"class":221},[47,112475,112013],{"class":81},[47,112477,110399],{"class":221},[47,112479,292],{"class":85},[47,112481,30551],{"class":221},[47,112483,112484],{"class":49,"line":16908},[47,112485,2493],{"emptyLinePlaceholder":145},[47,112487,112488],{"class":49,"line":16913},[47,112489,2493],{"emptyLinePlaceholder":145},[47,112491,112492,112494,112496,112498,112500],{"class":49,"line":16919},[47,112493,1625],{"class":217},[47,112495,31274],{"class":85},[47,112497,101613],{"class":217},[47,112499,101616],{"class":81},[47,112501,3832],{"class":221},[47,112503,112504],{"class":49,"line":16924},[47,112505,101623],{"class":221},[19,112507,103624],{},[38,112509,112511],{"className":40,"code":112510,"language":42,"meta":43,"style":43},"touch ch7_reacher.py\n",[26,112512,112513],{"__ignoreMap":43},[47,112514,112515,112517],{"class":49,"line":50},[47,112516,101337],{"class":53},[47,112518,112519],{"class":81}," ch7_reacher.py\n",[19,112521,110498],{},[38,112523,112525],{"className":40,"code":112524,"language":42,"meta":43,"style":43},"python ch7_reacher.py\n",[26,112526,112527],{"__ignoreMap":43},[47,112528,112529,112531],{"class":49,"line":50},[47,112530,30434],{"class":53},[47,112532,112519],{"class":81},[187,112534,101626],{"id":101626},[19,112536,112537],{},"读取 site 坐标：",[38,112539,112541],{"className":30432,"code":112540,"language":30434,"meta":43,"style":43},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[26,112542,112543],{"__ignoreMap":43},[47,112544,112545,112547,112549,112551,112553],{"class":49,"line":50},[47,112546,32001],{"class":217},[47,112548,111910],{"class":53},[47,112550,111913],{"class":221},[47,112552,1393],{"class":85},[47,112554,111918],{"class":221},[19,112556,112557],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,112559,110514],{},[38,112561,112563],{"className":30432,"code":112562,"language":30434,"meta":43,"style":43},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[26,112564,112565],{"__ignoreMap":43},[47,112566,112567,112569],{"class":49,"line":50},[47,112568,17139],{"class":217},[47,112570,112022],{"class":221},[19,112572,112573],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,112575,109839],{},[38,112577,112579],{"className":30432,"code":112578,"language":30434,"meta":43,"style":43},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[26,112580,112581,112593,112606],{"__ignoreMap":43},[47,112582,112583,112585,112587,112589,112591],{"class":49,"line":50},[47,112584,111650],{"class":221},[47,112586,267],{"class":217},[47,112588,111655],{"class":221},[47,112590,751],{"class":217},[47,112592,111660],{"class":221},[47,112594,112595,112598,112600,112602,112604],{"class":49,"line":92},[47,112596,112597],{"class":221},"control_cost ",[47,112599,267],{"class":217},[47,112601,112091],{"class":85},[47,112603,6611],{"class":217},[47,112605,112096],{"class":221},[47,112607,112608,112610,112612,112614,112616,112618,112620],{"class":49,"line":1273},[47,112609,17139],{"class":217},[47,112611,109851],{"class":85},[47,112613,222],{"class":221},[47,112615,751],{"class":217},[47,112617,111650],{"class":221},[47,112619,751],{"class":217},[47,112621,112113],{"class":221},[19,112623,112624],{},"奖励由两部分组成：",[171,112626,112627,112632],{},[109,112628,112629,112631],{},[26,112630,111677],{},"：末端离目标越远，奖励越低。",[109,112633,112634,112637],{},[26,112635,112636],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,112639,112640],{},"简单控制器：",[38,112642,112644],{"className":30432,"code":112643,"language":30434,"meta":43,"style":43},"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",[26,112645,112646,112659,112691],{"__ignoreMap":43},[47,112647,112648,112651,112653,112655,112657],{"class":49,"line":50},[47,112649,112650],{"class":221},"error ",[47,112652,267],{"class":217},[47,112654,112222],{"class":221},[47,112656,751],{"class":217},[47,112658,112227],{"class":221},[47,112660,112661,112663,112665,112667,112669,112671,112673,112675,112677,112679,112681,112683,112685,112687,112689],{"class":49,"line":92},[47,112662,105925],{"class":221},[47,112664,411],{"class":85},[47,112666,4536],{"class":221},[47,112668,267],{"class":217},[47,112670,112244],{"class":221},[47,112672,105314],{"class":85},[47,112674,6611],{"class":217},[47,112676,112251],{"class":221},[47,112678,298],{"class":85},[47,112680,112256],{"class":221},[47,112682,751],{"class":217},[47,112684,102457],{"class":85},[47,112686,12528],{"class":221},[47,112688,102457],{"class":85},[47,112690,228],{"class":221},[47,112692,112693,112695,112697,112699,112701,112703,112705,112707,112709,112711,112713,112715,112717,112719,112721],{"class":49,"line":1273},[47,112694,105925],{"class":221},[47,112696,436],{"class":85},[47,112698,4536],{"class":221},[47,112700,267],{"class":217},[47,112702,112244],{"class":221},[47,112704,105314],{"class":85},[47,112706,6611],{"class":217},[47,112708,112251],{"class":221},[47,112710,411],{"class":85},[47,112712,112256],{"class":221},[47,112714,751],{"class":217},[47,112716,102457],{"class":85},[47,112718,12528],{"class":221},[47,112720,102457],{"class":85},[47,112722,228],{"class":221},[19,112724,112725],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[187,112727,101762],{"id":101762},[38,112729,112730],{"className":30432,"code":112540,"language":30434,"meta":43,"style":43},[26,112731,112732],{"__ignoreMap":43},[47,112733,112734,112736,112738,112740,112742],{"class":49,"line":50},[47,112735,32001],{"class":217},[47,112737,111910],{"class":53},[47,112739,111913],{"class":221},[47,112741,1393],{"class":85},[47,112743,111918],{"class":221},[19,112745,112746,112747,112749,112750,82593,112752,28439],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[26,112748,79864],{}," 是 site 的名字，比如 ",[26,112751,111590],{},[26,112753,112013],{},[38,112755,112757],{"className":30432,"code":112756,"language":30434,"meta":43,"style":43},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[26,112758,112759],{"__ignoreMap":43},[47,112760,112761,112763,112765],{"class":49,"line":50},[47,112762,103688],{"class":221},[47,112764,267],{"class":217},[47,112766,111927],{"class":221},[19,112768,112769],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[38,112771,112773],{"className":30432,"code":112772,"language":30434,"meta":43,"style":43},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[26,112774,112775,112787],{"__ignoreMap":43},[47,112776,112777,112779,112781,112783,112785],{"class":49,"line":50},[47,112778,1625],{"class":217},[47,112780,103503],{"class":221},[47,112782,1129],{"class":217},[47,112784,4186],{"class":85},[47,112786,3832],{"class":221},[47,112788,112789,112791,112793,112795,112797,112799,112801,112803,112805,112807],{"class":49,"line":92},[47,112790,103949],{"class":217},[47,112792,103489],{"class":85},[47,112794,222],{"class":221},[47,112796,273],{"class":217},[47,112798,111952],{"class":81},[47,112800,1115],{"class":85},[47,112802,79864],{"class":221},[47,112804,1165],{"class":85},[47,112806,470],{"class":81},[47,112808,228],{"class":221},[19,112810,112811,112812,112815,112816,112818],{},"如果 site 没找到，就主动报错。",[26,112813,112814],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[26,112817,79864],{}," 的值放进字符串里。",[38,112820,112822],{"className":30432,"code":112821,"language":30434,"meta":43,"style":43},"return data.site_xpos[site_id].copy()\n",[26,112823,112824],{"__ignoreMap":43},[47,112825,112826,112828],{"class":49,"line":50},[47,112827,17139],{"class":217},[47,112829,111969],{"class":221},[19,112831,112832,112833,112835,112836,112839],{},"返回这个 site 的世界坐标。",[26,112834,103734],{}," 里的每一行都是一个 site 的 ",[26,112837,112838],{},"(x, y, z)"," 坐标。",[38,112841,112843],{"className":30432,"code":112842,"language":30434,"meta":43,"style":43},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[26,112844,112845],{"__ignoreMap":43},[47,112846,112847,112849,112851],{"class":49,"line":50},[47,112848,32001],{"class":217},[47,112850,111984],{"class":53},[47,112852,111987],{"class":221},[19,112854,112855],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[38,112857,112859],{"className":30432,"code":112858,"language":30434,"meta":43,"style":43},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[26,112860,112861,112873],{"__ignoreMap":43},[47,112862,112863,112865,112867,112869,112871],{"class":49,"line":50},[47,112864,111622],{"class":221},[47,112866,267],{"class":217},[47,112868,111997],{"class":221},[47,112870,111590],{"class":81},[47,112872,228],{"class":221},[47,112874,112875,112877,112879,112881,112883],{"class":49,"line":92},[47,112876,111632],{"class":221},[47,112878,267],{"class":217},[47,112880,111997],{"class":221},[47,112882,112013],{"class":81},[47,112884,228],{"class":221},[19,112886,112887],{},"分别读取末端点和目标点的世界坐标。",[38,112889,112890],{"className":30432,"code":112562,"language":30434,"meta":43,"style":43},[26,112891,112892],{"__ignoreMap":43},[47,112893,112894,112896],{"class":49,"line":50},[47,112895,17139],{"class":217},[47,112897,112022],{"class":221},[19,112899,112900],{},"把四部分拼成一个观测数组：",[38,112902,112905],{"className":112903,"code":112904,"language":5280,"meta":43},[5278],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[26,112906,112904],{"__ignoreMap":43},[38,112908,112910],{"className":30432,"code":112909,"language":30434,"meta":43,"style":43},"dist = np.linalg.norm(tip - target)\n",[26,112911,112912],{"__ignoreMap":43},[47,112913,112914,112916,112918,112920,112922],{"class":49,"line":50},[47,112915,111650],{"class":221},[47,112917,267],{"class":217},[47,112919,111655],{"class":221},[47,112921,751],{"class":217},[47,112923,111660],{"class":221},[19,112925,112926,112927,112930,112931,112934],{},"计算 tip 到 target 的距离。",[26,112928,112929],{},"tip - target"," 得到一个三维向量，",[26,112932,112933],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,112936,14726],{},[38,112938,112941],{"className":112939,"code":112940,"language":5280,"meta":43},[5278],"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",[26,112942,112940],{"__ignoreMap":43},[38,112944,112946],{"className":30432,"code":112945,"language":30434,"meta":43,"style":43},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[26,112947,112948],{"__ignoreMap":43},[47,112949,112950,112952,112954,112956,112958],{"class":49,"line":50},[47,112951,112597],{"class":221},[47,112953,267],{"class":217},[47,112955,112091],{"class":85},[47,112957,6611],{"class":217},[47,112959,112096],{"class":221},[19,112961,112962,112963,112966,112967,112970],{},"计算动作惩罚。",[26,112964,112965],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[26,112968,112969],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[38,112972,112974],{"className":30432,"code":112973,"language":30434,"meta":43,"style":43},"return float(-dist - control_cost)\n",[26,112975,112976],{"__ignoreMap":43},[47,112977,112978,112980,112982,112984,112986,112988,112990],{"class":49,"line":50},[47,112979,17139],{"class":217},[47,112981,109851],{"class":85},[47,112983,222],{"class":221},[47,112985,751],{"class":217},[47,112987,111650],{"class":221},[47,112989,751],{"class":217},[47,112991,112113],{"class":221},[19,112993,112994],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[38,112996,112997],{"className":30432,"code":110857,"language":30434,"meta":43,"style":43},[26,112998,112999],{"__ignoreMap":43},[47,113000,113001,113003,113005],{"class":49,"line":50},[47,113002,110864],{"class":221},[47,113004,267],{"class":217},[47,113006,104815],{"class":85},[19,113008,113009],{},"累计奖励变量，记录整个运行过程的总分。",[38,113011,113013],{"className":30432,"code":113012,"language":30434,"meta":43,"style":43},"for step in range(500):\n",[26,113014,113015],{"__ignoreMap":43},[47,113016,113017,113019,113021,113023,113025,113027,113029],{"class":49,"line":50},[47,113018,3118],{"class":217},[47,113020,31670],{"class":221},[47,113022,26097],{"class":217},[47,113024,32497],{"class":85},[47,113026,222],{"class":221},[47,113028,65128],{"class":85},[47,113030,30840],{"class":221},[19,113032,113033],{},"运行 500 个控制步。",[38,113035,113036],{"className":30432,"code":104597,"language":30434,"meta":43,"style":43},[26,113037,113038],{"__ignoreMap":43},[47,113039,113040],{"class":49,"line":50},[47,113041,104597],{"class":221},[19,113043,113044,113045,101072,113047,113049],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[26,113046,103285],{},[26,113048,103288],{}," 是当前状态下的坐标。",[38,113051,113053],{"className":30432,"code":113052,"language":30434,"meta":43,"style":43},"error = target - tip\n",[26,113054,113055],{"__ignoreMap":43},[47,113056,113057,113059,113061,113063,113065],{"class":49,"line":50},[47,113058,112650],{"class":221},[47,113060,267],{"class":217},[47,113062,112222],{"class":221},[47,113064,751],{"class":217},[47,113066,112227],{"class":221},[19,113068,113069],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[38,113071,113073],{"className":30432,"code":113072,"language":30434,"meta":43,"style":43},"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",[26,113074,113075,113107],{"__ignoreMap":43},[47,113076,113077,113079,113081,113083,113085,113087,113089,113091,113093,113095,113097,113099,113101,113103,113105],{"class":49,"line":50},[47,113078,105925],{"class":221},[47,113080,411],{"class":85},[47,113082,4536],{"class":221},[47,113084,267],{"class":217},[47,113086,112244],{"class":221},[47,113088,105314],{"class":85},[47,113090,6611],{"class":217},[47,113092,112251],{"class":221},[47,113094,298],{"class":85},[47,113096,112256],{"class":221},[47,113098,751],{"class":217},[47,113100,102457],{"class":85},[47,113102,12528],{"class":221},[47,113104,102457],{"class":85},[47,113106,228],{"class":221},[47,113108,113109,113111,113113,113115,113117,113119,113121,113123,113125,113127,113129,113131,113133,113135,113137],{"class":49,"line":92},[47,113110,105925],{"class":221},[47,113112,436],{"class":85},[47,113114,4536],{"class":221},[47,113116,267],{"class":217},[47,113118,112244],{"class":221},[47,113120,105314],{"class":85},[47,113122,6611],{"class":217},[47,113124,112251],{"class":221},[47,113126,411],{"class":85},[47,113128,112256],{"class":221},[47,113130,751],{"class":217},[47,113132,102457],{"class":85},[47,113134,12528],{"class":221},[47,113136,102457],{"class":85},[47,113138,228],{"class":221},[19,113140,113141,113142,113145],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[26,113143,113144],{},"error -> ctrl -> step"," 的流程。",[38,113147,113148],{"className":30432,"code":104559,"language":30434,"meta":43,"style":43},[26,113149,113150],{"__ignoreMap":43},[47,113151,113152],{"class":49,"line":50},[47,113153,104559],{"class":221},[19,113155,113156],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[38,113158,113160],{"className":30432,"code":113159,"language":30434,"meta":43,"style":43},"obs = get_obs(model, data)\n",[26,113161,113162],{"__ignoreMap":43},[47,113163,113164,113166,113168],{"class":49,"line":50},[47,113165,110908],{"class":221},[47,113167,267],{"class":217},[47,113169,112345],{"class":221},[19,113171,113172,113173,113176],{},"读取最新观测。后面打印 ",[26,113174,113175],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,113178,102370],{"id":102369},[19,113180,113181],{},"观测维度为:",[38,113183,113186],{"className":113184,"code":113185,"language":5280,"meta":43},[5278],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[26,113187,113185],{"__ignoreMap":43},[19,113189,113190],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,113192,113193],{},"程序每 100 步打印：",[38,113195,113198],{"className":113196,"code":113197,"language":5280,"meta":43},[5278],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[26,113199,113197],{"__ignoreMap":43},[19,113201,113202,113203,113205],{},"如果控制有效，你应该看到最终 ",[26,113204,103285],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,113207,102402],{"id":102401},[171,113209,113210,113213,113216,113222,113228,113235,113245],{},[109,113211,113212],{},"修改目标点位置。",[109,113214,113215],{},"重新运行，观察最终 tip 是否变化。",[109,113217,113218,113219,113221],{},"把 gravity 改成 ",[26,113220,102643],{},"，观察控制是否变差。",[109,113223,111235,113224,111239,113226,28439],{},[26,113225,102212],{},[26,113227,298],{},[109,113229,102465,113230,102468,113232,113234],{},[26,113231,110650],{},[26,113233,107361],{},"，观察机械臂是否更难移动。",[109,113236,102465,113237,82584,113239,102468,113241,113244],{},[26,113238,103288],{},[26,113240,104200],{},[26,113242,113243],{},"0.2 0 0.6","，观察 reward 和 final tip。",[109,113246,113247],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,113249,102507],{"id":102506},[187,113251,113253],{"id":113252},"site-not-found",[26,113254,113255],{},"site not found",[19,113257,113258,113259,101072,113262,28439],{},"检查 XML 中是否有 ",[26,113260,113261],{},"site name=\"tip\"",[26,113263,113264],{},"site name=\"target\"",[187,113266,113267],{"id":113267},"机械臂完全不动",[19,113269,102577],{},[171,113271,113272,113277,113280,113285],{},[109,113273,113274,113276],{},[26,113275,102212],{}," 是否为 2",[109,113278,113279],{},"actuator 是否引用正确 joint",[109,113281,113282,113284],{},[26,113283,101130],{}," 是否被赋值",[109,113286,113287,113288],{},"是否执行了 ",[26,113289,100739],{},[187,113291,113292],{"id":113292},"控制效果不好",[19,113294,113295],{},"正常。本章重点不是控制器最优，而是任务结构:",[38,113297,113300],{"className":113298,"code":113299,"language":5280,"meta":43},[5278],"obs → action → mj_step → reward → next_obs\n",[26,113301,113299],{"__ignoreMap":43},[187,113303,113305],{"id":113304},"tip-坐标不变化","tip 坐标不变化",[19,113307,102629],{},[171,113309,113310,113315,113323,113332],{},[109,113311,113312,113313,28439],{},"是否每步调用了 ",[26,113314,100739],{},[109,113316,113317,113318,101072,113320,28439],{},"是否写入了 ",[26,113319,106180],{},[26,113321,113322],{},"data.ctrl[1]",[109,113324,113325,113326,60,113329,28439],{},"actuator 是否正确引用 ",[26,113327,113328],{},"joint1",[26,113330,113331],{},"joint2",[109,113333,113334],{},"控制输入是否太小。",[187,113336,113337],{"id":113337},"目标点不会动",[19,113339,113340],{},"本章的 target 是固定 site：",[38,113342,113344],{"className":53121,"code":113343,"language":53123,"meta":43,"style":43},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[26,113345,113346],{"__ignoreMap":43},[47,113347,113348,113350,113352,113354,113356,113358,113360,113362,113365],{"class":49,"line":50},[47,113349,1129],{"class":221},[47,113351,103264],{"class":51354},[47,113353,15013],{"class":53},[47,113355,267],{"class":221},[47,113357,112013],{"class":81},[47,113359,101160],{"class":53},[47,113361,267],{"class":221},[47,113363,113364],{"class":81},"\"0.5 0 0.4\"",[47,113366,113367],{"class":221}," ...\u002F>\n",[19,113369,113370,113371,113373],{},"它直接挂在 ",[26,113372,101895],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[187,113375,113376],{"id":113376},"机械臂不像真实机械臂",[19,113378,113379],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,113381,102661],{"id":102660},[19,113383,113384],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,113386,113387],{},"核心公式：",[38,113389,113392],{"className":113390,"code":113391,"language":5280,"meta":43},[5278],"distance = ||tip - target||\nreward = -distance - action_cost\n",[26,113393,113391],{"__ignoreMap":43},[19,113395,113396],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[134,113398,113399],{},"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":43,"searchDepth":92,"depth":92,"links":113401},[113402,113403,113404,113409,113413,113414,113415,113423],{"id":100700,"depth":92,"text":100701},{"id":100823,"depth":92,"text":100824},{"id":101098,"depth":92,"text":101099,"children":113405},[113406,113407,113408],{"id":111605,"depth":1273,"text":111606},{"id":111681,"depth":1273,"text":111681},{"id":111711,"depth":1273,"text":111712},{"id":101306,"depth":92,"text":101307,"children":113410},[113411,113412],{"id":101626,"depth":1273,"text":101626},{"id":101762,"depth":1273,"text":101762},{"id":102369,"depth":92,"text":102370},{"id":102401,"depth":92,"text":102402},{"id":102506,"depth":92,"text":102507,"children":113416},[113417,113418,113419,113420,113421,113422],{"id":113252,"depth":1273,"text":113255},{"id":113267,"depth":1273,"text":113267},{"id":113292,"depth":1273,"text":113292},{"id":113304,"depth":1273,"text":113305},{"id":113337,"depth":1273,"text":113337},{"id":113376,"depth":1273,"text":113376},{"id":102660,"depth":92,"text":102661},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111409,"description":43},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113430,"title":113431,"body":113432,"description":43,"extension":143,"meta":116894,"navigation":145,"path":116895,"seo":116896,"stem":116897,"__hash__":116898},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113433,"toc":116865},[113434,113437,113439,113442,113445,113470,113473,113479,113482,113488,113490,113492,113516,113518,113536,113538,113581,113583,113610,113612,113615,113667,113670,113676,113685,113688,113726,113729,113768,113771,113779,113786,113789,113795,113797,113851,113858,113903,113906,113910,113926,113936,113938,115199,115201,115213,115215,115226,115228,115231,115252,115255,115258,115291,115297,115300,115333,115336,115339,115380,115385,115399,115402,115415,115420,115443,115445,115460,115470,115485,115492,115512,115527,115545,115548,115565,115573,115589,115595,115627,115640,115672,115682,115717,115731,115777,115791,115833,115844,115857,115863,115896,115899,115926,115936,115976,115986,116003,116010,116028,116031,116072,116085,116100,116103,116126,116129,116141,116144,116163,116168,116189,116192,116207,116210,116244,116256,116271,116274,116299,116302,116321,116324,116356,116359,116383,116389,116419,116426,116439,116442,116444,116446,116452,116455,116458,116470,116473,116475,116529,116531,116535,116541,116550,116553,116560,116562,116585,116588,116592,116594,116612,116618,116620,116653,116656,116662,116666,116669,116689,116694,116698,116705,116725,116730,116734,116737,116757,116760,116846,116850,116853,116859,116862],[10,113435,113431],{"id":113436},"_8gymnasium-风格强化学习接口基础",[14,113438,100701],{"id":100700},[19,113440,113441],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,113443,113444],{},"你将实现:",[38,113446,113448],{"className":30432,"code":113447,"language":30434,"meta":43,"style":43},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[26,113449,113450,113460],{"__ignoreMap":43},[47,113451,113452,113455,113457],{"class":49,"line":50},[47,113453,113454],{"class":221},"obs, info ",[47,113456,267],{"class":217},[47,113458,113459],{"class":221}," env.reset()\n",[47,113461,113462,113465,113467],{"class":49,"line":92},[47,113463,113464],{"class":221},"obs, reward, terminated, truncated, info ",[47,113466,267],{"class":217},[47,113468,113469],{"class":221}," env.step(action)\n",[19,113471,113472],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,113474,113475,113476,113478],{},"前面章节的代码都是“脚本式”的：在 ",[26,113477,102349],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,113480,113481],{},"可以先记住 Gymnasium 环境的核心交互：",[38,113483,113486],{"className":113484,"code":113485,"language":5280,"meta":43},[5278],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[26,113487,113485],{"__ignoreMap":43},[14,113489,100824],{"id":100823},[19,113491,100827],{},[38,113493,113494],{"className":40,"code":104442,"language":42,"meta":43,"style":43},[26,113495,113496],{"__ignoreMap":43},[47,113497,113498,113500,113502,113504,113506,113508,113510,113512,113514],{"class":49,"line":50},[47,113499,78],{"class":53},[47,113501,26369],{"class":81},[47,113503,23925],{"class":81},[47,113505,26454],{"class":85},[47,113507,104457],{"class":81},[47,113509,100852],{"class":81},[47,113511,102555],{"class":81},[47,113513,100868],{"class":81},[47,113515,104466],{"class":81},[19,113517,102873],{},[38,113519,113521],{"className":40,"code":113520,"language":42,"meta":43,"style":43},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[26,113522,113523],{"__ignoreMap":43},[47,113524,113525,113527,113529,113531,113533],{"class":49,"line":50},[47,113526,23922],{"class":53},[47,113528,23925],{"class":81},[47,113530,100984],{"class":81},[47,113532,107765],{"class":81},[47,113534,113535],{"class":81}," gymnasium\n",[19,113537,102890],{},[38,113539,113541],{"className":40,"code":113540,"language":42,"meta":43,"style":43},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[26,113542,113543,113560,113569],{"__ignoreMap":43},[47,113544,113545,113547,113549,113551,113554,113556,113558],{"class":49,"line":50},[47,113546,30384],{"class":53},[47,113548,29230],{"class":81},[47,113550,25169],{"class":85},[47,113552,113553],{"class":81}," mujoco-gym-api",[47,113555,101029],{"class":81},[47,113557,101032],{"class":85},[47,113559,101035],{"class":85},[47,113561,113562,113564,113566],{"class":49,"line":92},[47,113563,30384],{"class":53},[47,113565,101042],{"class":81},[47,113567,113568],{"class":81}," mujoco-gym-api\n",[47,113570,113571,113573,113575,113577,113579],{"class":49,"line":1273},[47,113572,23922],{"class":53},[47,113574,23925],{"class":81},[47,113576,100984],{"class":81},[47,113578,107765],{"class":81},[47,113580,113535],{"class":81},[19,113582,101058],{},[171,113584,113585,113595,113598,113604],{},[109,113586,113587,113588,113591,113592,28439],{},"本章使用 ",[26,113589,113590],{},"gymnasium","，不是旧版 ",[26,113593,113594],{},"gym",[109,113596,113597],{},"Gymnasium API 与旧 Gym API 有差异。",[109,113599,113600,113601,28439],{},"旧 Gym 常见返回值是 4 个: ",[26,113602,113603],{},"obs, reward, done, info",[109,113605,113606,113607,28439],{},"Gymnasium 返回值是 5 个: ",[26,113608,113609],{},"obs, reward, terminated, truncated, info",[14,113611,101099],{"id":101098},[19,113613,113614],{},"强化学习环境接口包含:",[357,113616,113617,113626],{},[360,113618,113619],{},[363,113620,113621,113624],{},[366,113622,113623],{"align":23829},"方法",[366,113625,102750],{"align":23829},[404,113627,113628,113638,113648,113658],{},[363,113629,113630,113635],{},[409,113631,113632],{"align":23829},[26,113633,113634],{},"reset()",[409,113636,113637],{"align":23829},"重置环境",[363,113639,113640,113645],{},[409,113641,113642],{"align":23829},[26,113643,113644],{},"step(action)",[409,113646,113647],{"align":23829},"执行动作",[363,113649,113650,113655],{},[409,113651,113652],{"align":23829},[26,113653,113654],{},"observation_space",[409,113656,113657],{"align":23829},"观测空间",[363,113659,113660,113665],{},[409,113661,113662],{"align":23829},[26,113663,113664],{},"action_space",[409,113666,23747],{"align":23829},[19,113668,113669],{},"一个最小环境需要完成:",[38,113671,113674],{"className":113672,"code":113673,"language":5280,"meta":43},[5278],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[26,113675,113673],{"__ignoreMap":43},[187,113677,113679,101072,113682,104692],{"id":113678},"terminated-和-truncated-的区别",[26,113680,113681],{},"terminated",[26,113683,113684],{},"truncated",[19,113686,113687],{},"Gymnasium 把“结束”拆成两个概念：",[357,113689,113690,113700],{},[360,113691,113692],{},[363,113693,113694,113696,113698],{},[366,113695,104628],{"align":23829},[366,113697,100754],{"align":23829},[366,113699,21280],{"align":23829},[404,113701,113702,113714],{},[363,113703,113704,113708,113711],{},[409,113705,113706],{"align":23829},[26,113707,113681],{},[409,113709,113710],{"align":23829},"任务自然结束",[409,113712,113713],{"align":23829},"机械臂到达目标、机器人摔倒",[363,113715,113716,113720,113723],{},[409,113717,113718],{"align":23829},[26,113719,113684],{},[409,113721,113722],{"align":23829},"因外部限制截断",[409,113724,113725],{"align":23829},"达到最大步数、时间限制",[19,113727,113728],{},"本章中：",[38,113730,113732],{"className":30432,"code":113731,"language":30434,"meta":43,"style":43},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[26,113733,113734,113749],{"__ignoreMap":43},[47,113735,113736,113739,113741,113744,113746],{"class":49,"line":50},[47,113737,113738],{"class":221},"terminated ",[47,113740,267],{"class":217},[47,113742,113743],{"class":221}," dist ",[47,113745,1129],{"class":217},[47,113747,113748],{"class":85}," 0.05\n",[47,113750,113751,113754,113756,113758,113761,113763,113765],{"class":49,"line":92},[47,113752,113753],{"class":221},"truncated ",[47,113755,267],{"class":217},[47,113757,38927],{"class":85},[47,113759,113760],{"class":221},".steps ",[47,113762,1804],{"class":217},[47,113764,38927],{"class":85},[47,113766,113767],{"class":221},".max_steps\n",[19,113769,113770],{},"也就是：",[171,113772,113773,113776],{},[109,113774,113775],{},"末端距离目标小于 0.05，任务成功结束。",[109,113777,113778],{},"步数超过上限，episode 被截断。",[187,113780,113782,101072,113784],{"id":113781},"observation_space-和-action_space",[26,113783,113654],{},[26,113785,113664],{},[19,113787,113788],{},"这两个对象告诉算法：",[38,113790,113793],{"className":113791,"code":113792,"language":5280,"meta":43},[5278],"观测长什么样\n动作允许多大\n",[26,113794,113792],{"__ignoreMap":43},[19,113796,14726],{},[38,113798,113800],{"className":30432,"code":113799,"language":30434,"meta":43,"style":43},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[26,113801,113802],{"__ignoreMap":43},[47,113803,113804,113806,113809,113811,113814,113817,113820,113822,113824,113827,113829,113831,113833,113835,113837,113839,113841,113844,113846,113848],{"class":49,"line":50},[47,113805,30877],{"class":85},[47,113807,113808],{"class":221},".action_space ",[47,113810,267],{"class":217},[47,113812,113813],{"class":221}," spaces.Box(",[47,113815,113816],{"class":5309},"low",[47,113818,113819],{"class":217},"=-",[47,113821,102457],{"class":85},[47,113823,12528],{"class":221},[47,113825,113826],{"class":5309},"high",[47,113828,267],{"class":217},[47,113830,102457],{"class":85},[47,113832,12528],{"class":221},[47,113834,96017],{"class":5309},[47,113836,267],{"class":217},[47,113838,222],{"class":221},[47,113840,298],{"class":85},[47,113842,113843],{"class":221},",), ",[47,113845,93554],{"class":5309},[47,113847,267],{"class":217},[47,113849,113850],{"class":221},"np.float32)\n",[19,113852,113853,113854,113857],{},"表示动作是 2 维数组，每个值都在 ",[26,113855,113856],{},"[-1, 1]"," 范围内。",[38,113859,113861],{"className":30432,"code":113860,"language":30434,"meta":43,"style":43},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[26,113862,113863],{"__ignoreMap":43},[47,113864,113865,113867,113870,113872,113874,113876,113878,113881,113883,113885,113887,113889,113891,113893,113895,113897,113899,113901],{"class":49,"line":50},[47,113866,30877],{"class":85},[47,113868,113869],{"class":221},".observation_space ",[47,113871,267],{"class":217},[47,113873,113813],{"class":221},[47,113875,113816],{"class":5309},[47,113877,113819],{"class":217},[47,113879,113880],{"class":221},"np.inf, ",[47,113882,113826],{"class":5309},[47,113884,267],{"class":217},[47,113886,113880],{"class":221},[47,113888,96017],{"class":5309},[47,113890,267],{"class":217},[47,113892,222],{"class":221},[47,113894,665],{"class":85},[47,113896,113843],{"class":221},[47,113898,93554],{"class":5309},[47,113900,267],{"class":217},[47,113902,113850],{"class":221},[19,113904,113905],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[187,113907,113909],{"id":113908},"frame_skip-是什么","frame_skip 是什么",[38,113911,113913],{"className":30432,"code":113912,"language":30434,"meta":43,"style":43},"self.frame_skip = 5\n",[26,113914,113915],{"__ignoreMap":43},[47,113916,113917,113919,113922,113924],{"class":49,"line":50},[47,113918,30877],{"class":85},[47,113920,113921],{"class":221},".frame_skip ",[47,113923,267],{"class":217},[47,113925,54481],{"class":85},[19,113927,113928,113929,113932,113933,113935],{},"表示外部调用一次 ",[26,113930,113931],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[26,113934,101269],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,113937,101307],{"id":101306},[38,113939,113941],{"className":30432,"code":113940,"language":30434,"meta":43,"style":43},"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",[26,113942,113943,113955,113961,113971,113982,113986,113990,113998,114003,114007,114011,114015,114019,114023,114027,114031,114036,114040,114044,114048,114053,114057,114061,114065,114069,114073,114077,114081,114085,114089,114093,114097,114101,114105,114123,114138,114142,114155,114165,114180,114197,114201,114222,114241,114266,114280,114284,114294,114306,114316,114320,114362,114400,114404,114414,114430,114445,114464,114471,114475,114488,114503,114518,114531,114550,114566,114570,114611,114626,114641,114645,114684,114695,114708,114712,114722,114731,114735,114745,114760,114778,114782,114793,114810,114823,114827,114837,114841,114852,114863,114867,114881,114895,114911,114915,114928,114945,114960,114967,114971,114975,114987,114997,115015,115027,115039,115043,115051,115067,115076,115085,115093,115135,115148,115153,115157,115175,115179,115183,115195],{"__ignoreMap":43},[47,113944,113945,113947,113950,113952],{"class":49,"line":50},[47,113946,30446],{"class":217},[47,113948,113949],{"class":221}," gymnasium ",[47,113951,31437],{"class":217},[47,113953,113954],{"class":221}," gym\n",[47,113956,113957,113959],{"class":49,"line":92},[47,113958,30446],{"class":217},[47,113960,101355],{"class":221},[47,113962,113963,113965,113967,113969],{"class":49,"line":1273},[47,113964,30446],{"class":217},[47,113966,31434],{"class":221},[47,113968,31437],{"class":217},[47,113970,31440],{"class":221},[47,113972,113973,113975,113977,113979],{"class":49,"line":1288},[47,113974,30791],{"class":217},[47,113976,113949],{"class":221},[47,113978,30446],{"class":217},[47,113980,113981],{"class":221}," spaces\n",[47,113983,113984],{"class":49,"line":1294},[47,113985,2493],{"emptyLinePlaceholder":145},[47,113987,113988],{"class":49,"line":1308},[47,113989,2493],{"emptyLinePlaceholder":145},[47,113991,113992,113994,113996],{"class":49,"line":1314},[47,113993,101368],{"class":85},[47,113995,13657],{"class":217},[47,113997,101373],{"class":81},[47,113999,114000],{"class":49,"line":1405},[47,114001,114002],{"class":81},"\u003Cmujoco model=\"gym_reacher\">\n",[47,114004,114005],{"class":49,"line":1411},[47,114006,111792],{"class":81},[47,114008,114009],{"class":49,"line":1423},[47,114010,2493],{"emptyLinePlaceholder":145},[47,114012,114013],{"class":49,"line":1706},[47,114014,101392],{"class":81},[47,114016,114017],{"class":49,"line":1711},[47,114018,111810],{"class":81},[47,114020,114021],{"class":49,"line":1717},[47,114022,2493],{"emptyLinePlaceholder":145},[47,114024,114025],{"class":49,"line":1722},[47,114026,111819],{"class":81},[47,114028,114029],{"class":49,"line":1736},[47,114030,111824],{"class":81},[47,114032,114033],{"class":49,"line":1741},[47,114034,114035],{"class":81},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[47,114037,114038],{"class":49,"line":1747},[47,114039,2493],{"emptyLinePlaceholder":145},[47,114041,114042],{"class":49,"line":1768},[47,114043,111838],{"class":81},[47,114045,114046],{"class":49,"line":1773},[47,114047,111843],{"class":81},[47,114049,114050],{"class":49,"line":1787},[47,114051,114052],{"class":81},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[47,114054,114055],{"class":49,"line":1792},[47,114056,111853],{"class":81},[47,114058,114059],{"class":49,"line":1821},[47,114060,106492],{"class":81},[47,114062,114063],{"class":49,"line":1826},[47,114064,101421],{"class":81},[47,114066,114067],{"class":49,"line":1843},[47,114068,101426],{"class":81},[47,114070,114071],{"class":49,"line":1848},[47,114072,2493],{"emptyLinePlaceholder":145},[47,114074,114075],{"class":49,"line":1853},[47,114076,106509],{"class":81},[47,114078,114079],{"class":49,"line":1858},[47,114080,111878],{"class":81},[47,114082,114083],{"class":49,"line":1872},[47,114084,111883],{"class":81},[47,114086,114087],{"class":49,"line":1877},[47,114088,106519],{"class":81},[47,114090,114091],{"class":49,"line":2670},[47,114092,101431],{"class":81},[47,114094,114095],{"class":49,"line":2684},[47,114096,95752],{"class":81},[47,114098,114099],{"class":49,"line":2692},[47,114100,2493],{"emptyLinePlaceholder":145},[47,114102,114103],{"class":49,"line":2697},[47,114104,2493],{"emptyLinePlaceholder":145},[47,114106,114107,114109,114112,114114,114116,114118,114121],{"class":49,"line":2703},[47,114108,14787],{"class":217},[47,114110,114111],{"class":53}," ReacherEnv",[47,114113,222],{"class":221},[47,114115,113594],{"class":53},[47,114117,777],{"class":221},[47,114119,114120],{"class":53},"Env",[47,114122,30840],{"class":221},[47,114124,114125,114128,114130,114132,114135],{"class":49,"line":2709},[47,114126,114127],{"class":221},"    metadata ",[47,114129,267],{"class":217},[47,114131,4541],{"class":221},[47,114133,114134],{"class":81},"\"render_modes\"",[47,114136,114137],{"class":221},": []}\n",[47,114139,114140],{"class":49,"line":2714},[47,114141,2493],{"emptyLinePlaceholder":145},[47,114143,114144,114146,114148,114151,114153],{"class":49,"line":8041},[47,114145,30855],{"class":217},[47,114147,30858],{"class":85},[47,114149,114150],{"class":221},"(self) -> ",[47,114152,95740],{"class":85},[47,114154,3832],{"class":221},[47,114156,114157,114159,114161,114163],{"class":49,"line":8065},[47,114158,30871],{"class":85},[47,114160,17354],{"class":221},[47,114162,30883],{"class":85},[47,114164,2069],{"class":221},[47,114166,114167,114169,114172,114174,114176,114178],{"class":49,"line":8070},[47,114168,30899],{"class":85},[47,114170,114171],{"class":221},".model ",[47,114173,267],{"class":217},[47,114175,101466],{"class":221},[47,114177,101368],{"class":85},[47,114179,228],{"class":221},[47,114181,114182,114184,114187,114189,114192,114194],{"class":49,"line":8076},[47,114183,30899],{"class":85},[47,114185,114186],{"class":221},".data ",[47,114188,267],{"class":217},[47,114190,114191],{"class":221}," mujoco.MjData(",[47,114193,30877],{"class":85},[47,114195,114196],{"class":221},".model)\n",[47,114198,114199],{"class":49,"line":8103},[47,114200,2493],{"emptyLinePlaceholder":145},[47,114202,114203,114205,114208,114210,114213,114215,114218,114220],{"class":49,"line":8108},[47,114204,30899],{"class":85},[47,114206,114207],{"class":221},".tip_site_id ",[47,114209,267],{"class":217},[47,114211,114212],{"class":221}," mujoco.mj_name2id(",[47,114214,30877],{"class":85},[47,114216,114217],{"class":221},".model, mujoco.mjtObj.mjOBJ_SITE, ",[47,114219,111590],{"class":81},[47,114221,228],{"class":221},[47,114223,114224,114226,114229,114231,114233,114235,114237,114239],{"class":49,"line":8114},[47,114225,30899],{"class":85},[47,114227,114228],{"class":221},".target_site_id ",[47,114230,267],{"class":217},[47,114232,114212],{"class":221},[47,114234,30877],{"class":85},[47,114236,114217],{"class":221},[47,114238,112013],{"class":81},[47,114240,228],{"class":221},[47,114242,114243,114245,114247,114249,114251,114253,114256,114258,114260,114262,114264],{"class":49,"line":8126},[47,114244,2590],{"class":217},[47,114246,38927],{"class":85},[47,114248,114207],{"class":221},[47,114250,1129],{"class":217},[47,114252,4186],{"class":85},[47,114254,114255],{"class":217}," or",[47,114257,38927],{"class":85},[47,114259,114228],{"class":221},[47,114261,1129],{"class":217},[47,114263,4186],{"class":85},[47,114265,3832],{"class":221},[47,114267,114268,114271,114273,114275,114278],{"class":49,"line":8138},[47,114269,114270],{"class":217},"            raise",[47,114272,103489],{"class":85},[47,114274,222],{"class":221},[47,114276,114277],{"class":81},"\"required sites not found\"",[47,114279,228],{"class":221},[47,114281,114282],{"class":49,"line":8150},[47,114283,2493],{"emptyLinePlaceholder":145},[47,114285,114286,114288,114290,114292],{"class":49,"line":9809},[47,114287,30899],{"class":85},[47,114289,113921],{"class":221},[47,114291,267],{"class":217},[47,114293,54481],{"class":85},[47,114295,114296,114298,114301,114303],{"class":49,"line":9834},[47,114297,30899],{"class":85},[47,114299,114300],{"class":221},".max_steps ",[47,114302,267],{"class":217},[47,114304,114305],{"class":85}," 200\n",[47,114307,114308,114310,114312,114314],{"class":49,"line":9857},[47,114309,30899],{"class":85},[47,114311,113760],{"class":221},[47,114313,267],{"class":217},[47,114315,47387],{"class":85},[47,114317,114318],{"class":49,"line":9881},[47,114319,2493],{"emptyLinePlaceholder":145},[47,114321,114322,114324,114326,114328,114330,114332,114334,114336,114338,114340,114342,114344,114346,114348,114350,114352,114354,114356,114358,114360],{"class":49,"line":9886},[47,114323,30899],{"class":85},[47,114325,113808],{"class":221},[47,114327,267],{"class":217},[47,114329,113813],{"class":221},[47,114331,113816],{"class":5309},[47,114333,113819],{"class":217},[47,114335,102457],{"class":85},[47,114337,12528],{"class":221},[47,114339,113826],{"class":5309},[47,114341,267],{"class":217},[47,114343,102457],{"class":85},[47,114345,12528],{"class":221},[47,114347,96017],{"class":5309},[47,114349,267],{"class":217},[47,114351,222],{"class":221},[47,114353,298],{"class":85},[47,114355,113843],{"class":221},[47,114357,93554],{"class":5309},[47,114359,267],{"class":217},[47,114361,113850],{"class":221},[47,114363,114364,114366,114368,114370,114372,114374,114376,114378,114380,114382,114384,114386,114388,114390,114392,114394,114396,114398],{"class":49,"line":9891},[47,114365,30899],{"class":85},[47,114367,113869],{"class":221},[47,114369,267],{"class":217},[47,114371,113813],{"class":221},[47,114373,113816],{"class":5309},[47,114375,113819],{"class":217},[47,114377,113880],{"class":221},[47,114379,113826],{"class":5309},[47,114381,267],{"class":217},[47,114383,113880],{"class":221},[47,114385,96017],{"class":5309},[47,114387,267],{"class":217},[47,114389,222],{"class":221},[47,114391,665],{"class":85},[47,114393,113843],{"class":221},[47,114395,93554],{"class":5309},[47,114397,267],{"class":217},[47,114399,113850],{"class":221},[47,114401,114402],{"class":49,"line":9896},[47,114403,2493],{"emptyLinePlaceholder":145},[47,114405,114406,114408,114411],{"class":49,"line":9905},[47,114407,30855],{"class":217},[47,114409,114410],{"class":53}," _get_obs",[47,114412,114413],{"class":221},"(self) -> np.ndarray:\n",[47,114415,114416,114418,114420,114422,114425,114427],{"class":49,"line":9910},[47,114417,112191],{"class":221},[47,114419,267],{"class":217},[47,114421,38927],{"class":85},[47,114423,114424],{"class":221},".data.site_xpos[",[47,114426,30877],{"class":85},[47,114428,114429],{"class":221},".tip_site_id].copy()\n",[47,114431,114432,114434,114436,114438,114440,114442],{"class":49,"line":9916},[47,114433,112204],{"class":221},[47,114435,267],{"class":217},[47,114437,38927],{"class":85},[47,114439,114424],{"class":221},[47,114441,30877],{"class":85},[47,114443,114444],{"class":221},".target_site_id].copy()\n",[47,114446,114447,114449,114451,114454,114456,114459,114461],{"class":49,"line":9937},[47,114448,110236],{"class":221},[47,114450,267],{"class":217},[47,114452,114453],{"class":221}," np.concatenate([",[47,114455,30877],{"class":85},[47,114457,114458],{"class":221},".data.qpos.copy(), ",[47,114460,30877],{"class":85},[47,114462,114463],{"class":221},".data.qvel.copy(), tip, target])\n",[47,114465,114466,114468],{"class":49,"line":9943},[47,114467,14845],{"class":217},[47,114469,114470],{"class":221}," obs.astype(np.float32)\n",[47,114472,114473],{"class":49,"line":9957},[47,114474,2493],{"emptyLinePlaceholder":145},[47,114476,114477,114479,114482,114484,114486],{"class":49,"line":9963},[47,114478,30855],{"class":217},[47,114480,114481],{"class":53}," _get_reward",[47,114483,114150],{"class":221},[47,114485,261],{"class":85},[47,114487,3832],{"class":221},[47,114489,114490,114492,114494,114496,114498,114500],{"class":49,"line":9990},[47,114491,112191],{"class":221},[47,114493,267],{"class":217},[47,114495,38927],{"class":85},[47,114497,114424],{"class":221},[47,114499,30877],{"class":85},[47,114501,114502],{"class":221},".tip_site_id]\n",[47,114504,114505,114507,114509,114511,114513,114515],{"class":49,"line":9999},[47,114506,112204],{"class":221},[47,114508,267],{"class":217},[47,114510,38927],{"class":85},[47,114512,114424],{"class":221},[47,114514,30877],{"class":85},[47,114516,114517],{"class":221},".target_site_id]\n",[47,114519,114520,114523,114525,114527,114529],{"class":49,"line":10005},[47,114521,114522],{"class":221},"        dist ",[47,114524,267],{"class":217},[47,114526,111655],{"class":221},[47,114528,751],{"class":217},[47,114530,111660],{"class":221},[47,114532,114533,114536,114538,114540,114542,114545,114547],{"class":49,"line":10013},[47,114534,114535],{"class":221},"        control_cost ",[47,114537,267],{"class":217},[47,114539,112091],{"class":85},[47,114541,6611],{"class":217},[47,114543,114544],{"class":221}," np.sum(np.square(",[47,114546,30877],{"class":85},[47,114548,114549],{"class":221},".data.ctrl))\n",[47,114551,114552,114554,114556,114558,114560,114562,114564],{"class":49,"line":10018},[47,114553,14845],{"class":217},[47,114555,109851],{"class":85},[47,114557,222],{"class":221},[47,114559,751],{"class":217},[47,114561,111650],{"class":221},[47,114563,751],{"class":217},[47,114565,112113],{"class":221},[47,114567,114568],{"class":49,"line":16697},[47,114569,2493],{"emptyLinePlaceholder":145},[47,114571,114572,114574,114577,114580,114582,114585,114587,114589,114591,114593,114595,114598,114601,114603,114605,114607,114609],{"class":49,"line":16703},[47,114573,30855],{"class":217},[47,114575,114576],{"class":53}," reset",[47,114578,114579],{"class":221},"(self, ",[47,114581,674],{"class":217},[47,114583,114584],{"class":221},", seed: ",[47,114586,225],{"class":85},[47,114588,25163],{"class":217},[47,114590,38987],{"class":85},[47,114592,13657],{"class":217},[47,114594,38987],{"class":85},[47,114596,114597],{"class":221},", options: ",[47,114599,114600],{"class":85},"dict",[47,114602,25163],{"class":217},[47,114604,38987],{"class":85},[47,114606,13657],{"class":217},[47,114608,38987],{"class":85},[47,114610,30840],{"class":221},[47,114612,114613,114615,114618,114621,114623],{"class":49,"line":16726},[47,114614,30871],{"class":85},[47,114616,114617],{"class":221},"().reset(",[47,114619,114620],{"class":5309},"seed",[47,114622,267],{"class":217},[47,114624,114625],{"class":221},"seed)\n",[47,114627,114628,114631,114633,114636,114638],{"class":49,"line":16732},[47,114629,114630],{"class":221},"        mujoco.mj_resetData(",[47,114632,30877],{"class":85},[47,114634,114635],{"class":221},".model, ",[47,114637,30877],{"class":85},[47,114639,114640],{"class":221},".data)\n",[47,114642,114643],{"class":49,"line":16755},[47,114644,2493],{"emptyLinePlaceholder":145},[47,114646,114647,114649,114652,114654,114656,114659,114661,114663,114665,114667,114669,114671,114673,114675,114677,114679,114681],{"class":49,"line":16769},[47,114648,30899],{"class":85},[47,114650,114651],{"class":221},".data.qpos[:] ",[47,114653,267],{"class":217},[47,114655,38927],{"class":85},[47,114657,114658],{"class":221},".np_random.uniform(",[47,114660,113816],{"class":5309},[47,114662,113819],{"class":217},[47,114664,86264],{"class":85},[47,114666,12528],{"class":221},[47,114668,113826],{"class":5309},[47,114670,267],{"class":217},[47,114672,86264],{"class":85},[47,114674,12528],{"class":221},[47,114676,31550],{"class":5309},[47,114678,267],{"class":217},[47,114680,30877],{"class":85},[47,114682,114683],{"class":221},".model.nq)\n",[47,114685,114686,114688,114691,114693],{"class":49,"line":16789},[47,114687,30899],{"class":85},[47,114689,114690],{"class":221},".data.qvel[:] ",[47,114692,267],{"class":217},[47,114694,104815],{"class":85},[47,114696,114697,114700,114702,114704,114706],{"class":49,"line":16795},[47,114698,114699],{"class":221},"        mujoco.mj_forward(",[47,114701,30877],{"class":85},[47,114703,114635],{"class":221},[47,114705,30877],{"class":85},[47,114707,114640],{"class":221},[47,114709,114710],{"class":49,"line":16806},[47,114711,2493],{"emptyLinePlaceholder":145},[47,114713,114714,114716,114718,114720],{"class":49,"line":16829},[47,114715,30899],{"class":85},[47,114717,113760],{"class":221},[47,114719,267],{"class":217},[47,114721,47387],{"class":85},[47,114723,114724,114726,114728],{"class":49,"line":16851},[47,114725,14845],{"class":217},[47,114727,38927],{"class":85},[47,114729,114730],{"class":221},"._get_obs(), {}\n",[47,114732,114733],{"class":49,"line":16856},[47,114734,2493],{"emptyLinePlaceholder":145},[47,114736,114737,114739,114742],{"class":49,"line":16862},[47,114738,30855],{"class":217},[47,114740,114741],{"class":53}," step",[47,114743,114744],{"class":221},"(self, action):\n",[47,114746,114747,114749,114751,114754,114756,114758],{"class":49,"line":16876},[47,114748,110276],{"class":221},[47,114750,267],{"class":217},[47,114752,114753],{"class":221}," np.asarray(action, ",[47,114755,93554],{"class":5309},[47,114757,267],{"class":217},[47,114759,113850],{"class":221},[47,114761,114762,114764,114766,114768,114770,114773,114775],{"class":49,"line":16889},[47,114763,110276],{"class":221},[47,114765,267],{"class":217},[47,114767,107501],{"class":221},[47,114769,30877],{"class":85},[47,114771,114772],{"class":221},".action_space.low, ",[47,114774,30877],{"class":85},[47,114776,114777],{"class":221},".action_space.high)\n",[47,114779,114780],{"class":49,"line":16894},[47,114781,2493],{"emptyLinePlaceholder":145},[47,114783,114784,114786,114789,114791],{"class":49,"line":16908},[47,114785,30899],{"class":85},[47,114787,114788],{"class":221},".data.ctrl[:] ",[47,114790,267],{"class":217},[47,114792,107524],{"class":221},[47,114794,114795,114797,114799,114801,114803,114805,114807],{"class":49,"line":16913},[47,114796,3496],{"class":217},[47,114798,101555],{"class":221},[47,114800,26097],{"class":217},[47,114802,32497],{"class":85},[47,114804,222],{"class":221},[47,114806,30877],{"class":85},[47,114808,114809],{"class":221},".frame_skip):\n",[47,114811,114812,114815,114817,114819,114821],{"class":49,"line":16919},[47,114813,114814],{"class":221},"            mujoco.mj_step(",[47,114816,30877],{"class":85},[47,114818,114635],{"class":221},[47,114820,30877],{"class":85},[47,114822,114640],{"class":221},[47,114824,114825],{"class":49,"line":16924},[47,114826,2493],{"emptyLinePlaceholder":145},[47,114828,114829,114831,114833,114835],{"class":49,"line":16938},[47,114830,30899],{"class":85},[47,114832,113760],{"class":221},[47,114834,9570],{"class":217},[47,114836,55753],{"class":85},[47,114838,114839],{"class":49,"line":16943},[47,114840,2493],{"emptyLinePlaceholder":145},[47,114842,114843,114845,114847,114849],{"class":49,"line":16948},[47,114844,110236],{"class":221},[47,114846,267],{"class":217},[47,114848,38927],{"class":85},[47,114850,114851],{"class":221},"._get_obs()\n",[47,114853,114854,114856,114858,114860],{"class":49,"line":16962},[47,114855,110341],{"class":221},[47,114857,267],{"class":217},[47,114859,38927],{"class":85},[47,114861,114862],{"class":221},"._get_reward()\n",[47,114864,114865],{"class":49,"line":16974},[47,114866,2493],{"emptyLinePlaceholder":145},[47,114868,114869,114871,114873,114875,114877,114879],{"class":49,"line":16979},[47,114870,112191],{"class":221},[47,114872,267],{"class":217},[47,114874,38927],{"class":85},[47,114876,114424],{"class":221},[47,114878,30877],{"class":85},[47,114880,114502],{"class":221},[47,114882,114883,114885,114887,114889,114891,114893],{"class":49,"line":16992},[47,114884,112204],{"class":221},[47,114886,267],{"class":217},[47,114888,38927],{"class":85},[47,114890,114424],{"class":221},[47,114892,30877],{"class":85},[47,114894,114517],{"class":221},[47,114896,114897,114899,114901,114903,114906,114908],{"class":49,"line":16997},[47,114898,114522],{"class":221},[47,114900,267],{"class":217},[47,114902,109851],{"class":85},[47,114904,114905],{"class":221},"(np.linalg.norm(tip ",[47,114907,751],{"class":217},[47,114909,114910],{"class":221}," target))\n",[47,114912,114913],{"class":49,"line":17002},[47,114914,2493],{"emptyLinePlaceholder":145},[47,114916,114917,114920,114922,114924,114926],{"class":49,"line":17007},[47,114918,114919],{"class":221},"        terminated ",[47,114921,267],{"class":217},[47,114923,113743],{"class":221},[47,114925,1129],{"class":217},[47,114927,113748],{"class":85},[47,114929,114930,114933,114935,114937,114939,114941,114943],{"class":49,"line":17020},[47,114931,114932],{"class":221},"        truncated ",[47,114934,267],{"class":217},[47,114936,38927],{"class":85},[47,114938,113760],{"class":221},[47,114940,1804],{"class":217},[47,114942,38927],{"class":85},[47,114944,113767],{"class":221},[47,114946,114947,114950,114952,114954,114957],{"class":49,"line":17025},[47,114948,114949],{"class":221},"        info ",[47,114951,267],{"class":217},[47,114953,4541],{"class":221},[47,114955,114956],{"class":81},"\"distance\"",[47,114958,114959],{"class":221},": dist}\n",[47,114961,114962,114964],{"class":49,"line":32687},[47,114963,14845],{"class":217},[47,114965,114966],{"class":221}," obs, reward, terminated, truncated, info\n",[47,114968,114969],{"class":49,"line":32693},[47,114970,2493],{"emptyLinePlaceholder":145},[47,114972,114973],{"class":49,"line":32699},[47,114974,2493],{"emptyLinePlaceholder":145},[47,114976,114977,114979,114981,114983,114985],{"class":49,"line":32705},[47,114978,32001],{"class":217},[47,114980,2066],{"class":53},[47,114982,101452],{"class":221},[47,114984,95740],{"class":85},[47,114986,3832],{"class":221},[47,114988,114989,114992,114994],{"class":49,"line":32711},[47,114990,114991],{"class":221},"    env ",[47,114993,267],{"class":217},[47,114995,114996],{"class":221}," ReacherEnv()\n",[47,114998,114999,115002,115004,115007,115009,115011,115013],{"class":49,"line":32722},[47,115000,115001],{"class":221},"    obs, info ",[47,115003,267],{"class":217},[47,115005,115006],{"class":221}," env.reset(",[47,115008,114620],{"class":5309},[47,115010,267],{"class":217},[47,115012,411],{"class":85},[47,115014,228],{"class":221},[47,115016,115017,115019,115021,115024],{"class":49,"line":32728},[47,115018,31353],{"class":85},[47,115020,222],{"class":221},[47,115022,115023],{"class":81},"\"initial obs shape:\"",[47,115025,115026],{"class":221},", obs.shape)\n",[47,115028,115029,115031,115033,115036],{"class":49,"line":32748},[47,115030,31353],{"class":85},[47,115032,222],{"class":221},[47,115034,115035],{"class":81},"\"initial info:\"",[47,115037,115038],{"class":221},", info)\n",[47,115040,115041],{"class":49,"line":32754},[47,115042,2493],{"emptyLinePlaceholder":145},[47,115044,115045,115047,115049],{"class":49,"line":32765},[47,115046,110207],{"class":221},[47,115048,267],{"class":217},[47,115050,104815],{"class":85},[47,115052,115053,115055,115057,115059,115061,115063,115065],{"class":49,"line":32771},[47,115054,3294],{"class":217},[47,115056,31670],{"class":221},[47,115058,26097],{"class":217},[47,115060,32497],{"class":85},[47,115062,222],{"class":221},[47,115064,919],{"class":85},[47,115066,30840],{"class":221},[47,115068,115069,115071,115073],{"class":49,"line":32777},[47,115070,110276],{"class":221},[47,115072,267],{"class":217},[47,115074,115075],{"class":221}," env.action_space.sample()\n",[47,115077,115078,115081,115083],{"class":49,"line":32783},[47,115079,115080],{"class":221},"        obs, reward, terminated, truncated, info ",[47,115082,267],{"class":217},[47,115084,113469],{"class":221},[47,115086,115087,115089,115091],{"class":49,"line":32789},[47,115088,110351],{"class":221},[47,115090,9570],{"class":217},[47,115092,110356],{"class":221},[47,115094,115095,115097,115099,115101,115103,115106,115108,115110,115113,115115,115117,115120,115122,115124,115127,115129,115131,115133],{"class":49,"line":32795},[47,115096,32505],{"class":85},[47,115098,222],{"class":221},[47,115100,110385],{"class":81},[47,115102,110388],{"class":221},[47,115104,115105],{"class":81},"\"reward:\"",[47,115107,12528],{"class":221},[47,115109,32072],{"class":85},[47,115111,115112],{"class":221},"(reward, ",[47,115114,292],{"class":85},[47,115116,110399],{"class":221},[47,115118,115119],{"class":81},"\"distance:\"",[47,115121,12528],{"class":221},[47,115123,32072],{"class":85},[47,115125,115126],{"class":221},"(info[",[47,115128,114956],{"class":81},[47,115130,112256],{"class":221},[47,115132,292],{"class":85},[47,115134,30551],{"class":221},[47,115136,115137,115139,115142,115145],{"class":49,"line":32801},[47,115138,2590],{"class":217},[47,115140,115141],{"class":221}," terminated ",[47,115143,115144],{"class":217},"or",[47,115146,115147],{"class":221}," truncated:\n",[47,115149,115150],{"class":49,"line":32807},[47,115151,115152],{"class":217},"            break\n",[47,115154,115155],{"class":49,"line":32827},[47,115156,2493],{"emptyLinePlaceholder":145},[47,115158,115159,115161,115163,115165,115167,115169,115171,115173],{"class":49,"line":32833},[47,115160,31353],{"class":85},[47,115162,222],{"class":221},[47,115164,110430],{"class":81},[47,115166,12528],{"class":221},[47,115168,32072],{"class":85},[47,115170,110437],{"class":221},[47,115172,292],{"class":85},[47,115174,30551],{"class":221},[47,115176,115177],{"class":49,"line":32849},[47,115178,2493],{"emptyLinePlaceholder":145},[47,115180,115181],{"class":49,"line":32855},[47,115182,2493],{"emptyLinePlaceholder":145},[47,115184,115185,115187,115189,115191,115193],{"class":49,"line":32869},[47,115186,1625],{"class":217},[47,115188,31274],{"class":85},[47,115190,101613],{"class":217},[47,115192,101616],{"class":81},[47,115194,3832],{"class":221},[47,115196,115197],{"class":49,"line":32875},[47,115198,101623],{"class":221},[19,115200,103624],{},[38,115202,115204],{"className":40,"code":115203,"language":42,"meta":43,"style":43},"touch ch8_gym_env.py\n",[26,115205,115206],{"__ignoreMap":43},[47,115207,115208,115210],{"class":49,"line":50},[47,115209,101337],{"class":53},[47,115211,115212],{"class":81}," ch8_gym_env.py\n",[19,115214,110498],{},[38,115216,115218],{"className":40,"code":115217,"language":42,"meta":43,"style":43},"python ch8_gym_env.py\n",[26,115219,115220],{"__ignoreMap":43},[47,115221,115222,115224],{"class":49,"line":50},[47,115223,30434],{"class":53},[47,115225,115212],{"class":81},[187,115227,101626],{"id":101626},[19,115229,115230],{},"继承 Gymnasium 环境：",[38,115232,115234],{"className":30432,"code":115233,"language":30434,"meta":43,"style":43},"class ReacherEnv(gym.Env):\n",[26,115235,115236],{"__ignoreMap":43},[47,115237,115238,115240,115242,115244,115246,115248,115250],{"class":49,"line":50},[47,115239,14787],{"class":217},[47,115241,114111],{"class":53},[47,115243,222],{"class":221},[47,115245,113594],{"class":53},[47,115247,777],{"class":221},[47,115249,114120],{"class":53},[47,115251,30840],{"class":221},[19,115253,115254],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,115256,115257],{},"初始化模型：",[38,115259,115261],{"className":30432,"code":115260,"language":30434,"meta":43,"style":43},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[26,115262,115263,115277],{"__ignoreMap":43},[47,115264,115265,115267,115269,115271,115273,115275],{"class":49,"line":50},[47,115266,30877],{"class":85},[47,115268,114171],{"class":221},[47,115270,267],{"class":217},[47,115272,101466],{"class":221},[47,115274,101368],{"class":85},[47,115276,228],{"class":221},[47,115278,115279,115281,115283,115285,115287,115289],{"class":49,"line":92},[47,115280,30877],{"class":85},[47,115282,114186],{"class":221},[47,115284,267],{"class":217},[47,115286,114191],{"class":221},[47,115288,30877],{"class":85},[47,115290,114196],{"class":221},[19,115292,115293,115294,115296],{},"这和前面章节一样，只是现在放到了类的 ",[26,115295,30883],{}," 里。",[19,115298,115299],{},"缓存 site ID：",[38,115301,115303],{"className":30432,"code":115302,"language":30434,"meta":43,"style":43},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[26,115304,115305,115319],{"__ignoreMap":43},[47,115306,115307,115309,115311,115313,115315,115317],{"class":49,"line":50},[47,115308,30877],{"class":85},[47,115310,114207],{"class":221},[47,115312,267],{"class":217},[47,115314,114212],{"class":221},[47,115316,89608],{"class":85},[47,115318,228],{"class":221},[47,115320,115321,115323,115325,115327,115329,115331],{"class":49,"line":92},[47,115322,30877],{"class":85},[47,115324,114228],{"class":221},[47,115326,267],{"class":217},[47,115328,114212],{"class":221},[47,115330,89608],{"class":85},[47,115332,228],{"class":221},[19,115334,115335],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,115337,115338],{},"reset：",[38,115340,115342],{"className":30432,"code":115341,"language":30434,"meta":43,"style":43},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[26,115343,115344],{"__ignoreMap":43},[47,115345,115346,115348,115350,115352,115354,115356,115358,115360,115362,115364,115366,115368,115370,115372,115374,115376,115378],{"class":49,"line":50},[47,115347,32001],{"class":217},[47,115349,114576],{"class":53},[47,115351,114579],{"class":221},[47,115353,674],{"class":217},[47,115355,114584],{"class":221},[47,115357,225],{"class":85},[47,115359,25163],{"class":217},[47,115361,38987],{"class":85},[47,115363,13657],{"class":217},[47,115365,38987],{"class":85},[47,115367,114597],{"class":221},[47,115369,114600],{"class":85},[47,115371,25163],{"class":217},[47,115373,38987],{"class":85},[47,115375,13657],{"class":217},[47,115377,38987],{"class":85},[47,115379,30840],{"class":221},[19,115381,115382,115384],{},[26,115383,70110],{}," 做四件事：",[171,115386,115387,115390,115393,115396],{},[109,115388,115389],{},"设置随机种子。",[109,115391,115392],{},"重置 MuJoCo data。",[109,115394,115395],{},"随机初始化关节角。",[109,115397,115398],{},"返回初始观测和 info。",[19,115400,115401],{},"step：",[38,115403,115405],{"className":30432,"code":115404,"language":30434,"meta":43,"style":43},"def step(self, action):\n",[26,115406,115407],{"__ignoreMap":43},[47,115408,115409,115411,115413],{"class":49,"line":50},[47,115410,32001],{"class":217},[47,115412,114741],{"class":53},[47,115414,114744],{"class":221},[19,115416,115417,115419],{},[26,115418,107188],{}," 做六件事：",[171,115421,115422,115425,115431,115434,115437,115440],{},[109,115423,115424],{},"检查并裁剪 action。",[109,115426,115427,115428,28439],{},"写入 ",[26,115429,115430],{},"self.data.ctrl",[109,115432,115433],{},"连续推进若干个 MuJoCo 物理步。",[109,115435,115436],{},"计算新观测。",[109,115438,115439],{},"计算奖励和结束条件。",[109,115441,115442],{},"返回 Gymnasium 标准五元组。",[187,115444,101762],{"id":101762},[38,115446,115448],{"className":30432,"code":115447,"language":30434,"meta":43,"style":43},"import gymnasium as gym\n",[26,115449,115450],{"__ignoreMap":43},[47,115451,115452,115454,115456,115458],{"class":49,"line":50},[47,115453,30446],{"class":217},[47,115455,113949],{"class":221},[47,115457,31437],{"class":217},[47,115459,113954],{"class":221},[19,115461,115462,115463,115465,115466,115469],{},"导入 Gymnasium，并起别名 ",[26,115464,113594],{},"。后面写 ",[26,115467,115468],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[38,115471,115473],{"className":30432,"code":115472,"language":30434,"meta":43,"style":43},"from gymnasium import spaces\n",[26,115474,115475],{"__ignoreMap":43},[47,115476,115477,115479,115481,115483],{"class":49,"line":50},[47,115478,30791],{"class":217},[47,115480,113949],{"class":221},[47,115482,30446],{"class":217},[47,115484,113981],{"class":221},[19,115486,115487,115488,115491],{},"导入空间定义工具。",[26,115489,115490],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[38,115493,115494],{"className":30432,"code":115233,"language":30434,"meta":43,"style":43},[26,115495,115496],{"__ignoreMap":43},[47,115497,115498,115500,115502,115504,115506,115508,115510],{"class":49,"line":50},[47,115499,14787],{"class":217},[47,115501,114111],{"class":53},[47,115503,222],{"class":221},[47,115505,113594],{"class":53},[47,115507,777],{"class":221},[47,115509,114120],{"class":53},[47,115511,30840],{"class":221},[19,115513,115514,115515,115518,115519,115521,115522,101072,115524,115526],{},"定义一个类，名字叫 ",[26,115516,115517],{},"ReacherEnv","。括号里的 ",[26,115520,115468],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[26,115523,70110],{},[26,115525,107188],{}," 这两个核心方法。",[38,115528,115530],{"className":30432,"code":115529,"language":30434,"meta":43,"style":43},"metadata = {\"render_modes\": []}\n",[26,115531,115532],{"__ignoreMap":43},[47,115533,115534,115537,115539,115541,115543],{"class":49,"line":50},[47,115535,115536],{"class":221},"metadata ",[47,115538,267],{"class":217},[47,115540,4541],{"class":221},[47,115542,114134],{"class":81},[47,115544,114137],{"class":221},[19,115546,115547],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[38,115549,115551],{"className":30432,"code":115550,"language":30434,"meta":43,"style":43},"def __init__(self) -> None:\n",[26,115552,115553],{"__ignoreMap":43},[47,115554,115555,115557,115559,115561,115563],{"class":49,"line":50},[47,115556,32001],{"class":217},[47,115558,30858],{"class":85},[47,115560,114150],{"class":221},[47,115562,95740],{"class":85},[47,115564,3832],{"class":221},[19,115566,115567,115569,115570,28439],{},[26,115568,30883],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[26,115571,115572],{},"env = ReacherEnv()",[38,115574,115576],{"className":30432,"code":115575,"language":30434,"meta":43,"style":43},"super().__init__()\n",[26,115577,115578],{"__ignoreMap":43},[47,115579,115580,115583,115585,115587],{"class":49,"line":50},[47,115581,115582],{"class":85},"super",[47,115584,17354],{"class":221},[47,115586,30883],{"class":85},[47,115588,2069],{"class":221},[19,115590,115591,115592,115594],{},"调用父类 ",[26,115593,115468],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[38,115596,115597],{"className":30432,"code":115260,"language":30434,"meta":43,"style":43},[26,115598,115599,115613],{"__ignoreMap":43},[47,115600,115601,115603,115605,115607,115609,115611],{"class":49,"line":50},[47,115602,30877],{"class":85},[47,115604,114171],{"class":221},[47,115606,267],{"class":217},[47,115608,101466],{"class":221},[47,115610,101368],{"class":85},[47,115612,228],{"class":221},[47,115614,115615,115617,115619,115621,115623,115625],{"class":49,"line":92},[47,115616,30877],{"class":85},[47,115618,114186],{"class":221},[47,115620,267],{"class":217},[47,115622,114191],{"class":221},[47,115624,30877],{"class":85},[47,115626,114196],{"class":221},[19,115628,115629,115630,115632,115633,101072,115636,115639],{},"把 MuJoCo 模型和状态保存到 ",[26,115631,30877],{}," 上。",[26,115634,115635],{},"self.model",[26,115637,115638],{},"self.data"," 表示这个环境对象自己的模型和状态。",[38,115641,115642],{"className":30432,"code":115302,"language":30434,"meta":43,"style":43},[26,115643,115644,115658],{"__ignoreMap":43},[47,115645,115646,115648,115650,115652,115654,115656],{"class":49,"line":50},[47,115647,30877],{"class":85},[47,115649,114207],{"class":221},[47,115651,267],{"class":217},[47,115653,114212],{"class":221},[47,115655,89608],{"class":85},[47,115657,228],{"class":221},[47,115659,115660,115662,115664,115666,115668,115670],{"class":49,"line":92},[47,115661,30877],{"class":85},[47,115663,114228],{"class":221},[47,115665,267],{"class":217},[47,115667,114212],{"class":221},[47,115669,89608],{"class":85},[47,115671,228],{"class":221},[19,115673,115674,115675,101072,115678,115681],{},"提前查好 tip 和 target 的 site ID。这样 ",[26,115676,115677],{},"_get_obs",[26,115679,115680],{},"_get_reward"," 里就不用每次按名字查找。",[38,115683,115685],{"className":30432,"code":115684,"language":30434,"meta":43,"style":43},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[26,115686,115687,115697,115707],{"__ignoreMap":43},[47,115688,115689,115691,115693,115695],{"class":49,"line":50},[47,115690,30877],{"class":85},[47,115692,113921],{"class":221},[47,115694,267],{"class":217},[47,115696,54481],{"class":85},[47,115698,115699,115701,115703,115705],{"class":49,"line":92},[47,115700,30877],{"class":85},[47,115702,114300],{"class":221},[47,115704,267],{"class":217},[47,115706,114305],{"class":85},[47,115708,115709,115711,115713,115715],{"class":49,"line":1273},[47,115710,30877],{"class":85},[47,115712,113760],{"class":221},[47,115714,267],{"class":217},[47,115716,47387],{"class":85},[19,115718,115719,115722,115723,115726,115727,115730],{},[26,115720,115721],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[26,115724,115725],{},"max_steps"," 是一个 episode 最多运行多少步。",[26,115728,115729],{},"steps"," 记录当前 episode 已经走了多少步。",[38,115732,115733],{"className":30432,"code":113799,"language":30434,"meta":43,"style":43},[26,115734,115735],{"__ignoreMap":43},[47,115736,115737,115739,115741,115743,115745,115747,115749,115751,115753,115755,115757,115759,115761,115763,115765,115767,115769,115771,115773,115775],{"class":49,"line":50},[47,115738,30877],{"class":85},[47,115740,113808],{"class":221},[47,115742,267],{"class":217},[47,115744,113813],{"class":221},[47,115746,113816],{"class":5309},[47,115748,113819],{"class":217},[47,115750,102457],{"class":85},[47,115752,12528],{"class":221},[47,115754,113826],{"class":5309},[47,115756,267],{"class":217},[47,115758,102457],{"class":85},[47,115760,12528],{"class":221},[47,115762,96017],{"class":5309},[47,115764,267],{"class":217},[47,115766,222],{"class":221},[47,115768,298],{"class":85},[47,115770,113843],{"class":221},[47,115772,93554],{"class":5309},[47,115774,267],{"class":217},[47,115776,113850],{"class":221},[19,115778,115779,115780,115783,115784,101072,115787,115790],{},"定义动作空间。",[26,115781,115782],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[26,115785,115786],{},"low=-1.0",[26,115788,115789],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[38,115792,115793],{"className":30432,"code":113860,"language":30434,"meta":43,"style":43},[26,115794,115795],{"__ignoreMap":43},[47,115796,115797,115799,115801,115803,115805,115807,115809,115811,115813,115815,115817,115819,115821,115823,115825,115827,115829,115831],{"class":49,"line":50},[47,115798,30877],{"class":85},[47,115800,113869],{"class":221},[47,115802,267],{"class":217},[47,115804,113813],{"class":221},[47,115806,113816],{"class":5309},[47,115808,113819],{"class":217},[47,115810,113880],{"class":221},[47,115812,113826],{"class":5309},[47,115814,267],{"class":217},[47,115816,113880],{"class":221},[47,115818,96017],{"class":5309},[47,115820,267],{"class":217},[47,115822,222],{"class":221},[47,115824,665],{"class":85},[47,115826,113843],{"class":221},[47,115828,93554],{"class":5309},[47,115830,267],{"class":217},[47,115832,113850],{"class":221},[19,115834,115835,115836,115839,115840,115843],{},"定义观测空间。",[26,115837,115838],{},"shape=(10,)"," 表示观测是 10 个数。",[26,115841,115842],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[38,115845,115847],{"className":30432,"code":115846,"language":30434,"meta":43,"style":43},"def _get_obs(self) -> np.ndarray:\n",[26,115848,115849],{"__ignoreMap":43},[47,115850,115851,115853,115855],{"class":49,"line":50},[47,115852,32001],{"class":217},[47,115854,114410],{"class":53},[47,115856,114413],{"class":221},[19,115858,115859,115860,115862],{},"定义内部函数，用来生成观测。函数名前面的 ",[26,115861,1211],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[38,115864,115866],{"className":30432,"code":115865,"language":30434,"meta":43,"style":43},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[26,115867,115868,115882],{"__ignoreMap":43},[47,115869,115870,115872,115874,115876,115878,115880],{"class":49,"line":50},[47,115871,111622],{"class":221},[47,115873,267],{"class":217},[47,115875,38927],{"class":85},[47,115877,114424],{"class":221},[47,115879,30877],{"class":85},[47,115881,114429],{"class":221},[47,115883,115884,115886,115888,115890,115892,115894],{"class":49,"line":92},[47,115885,111632],{"class":221},[47,115887,267],{"class":217},[47,115889,38927],{"class":85},[47,115891,114424],{"class":221},[47,115893,30877],{"class":85},[47,115895,114444],{"class":221},[19,115897,115898],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[38,115900,115902],{"className":30432,"code":115901,"language":30434,"meta":43,"style":43},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[26,115903,115904,115920],{"__ignoreMap":43},[47,115905,115906,115908,115910,115912,115914,115916,115918],{"class":49,"line":50},[47,115907,110908],{"class":221},[47,115909,267],{"class":217},[47,115911,114453],{"class":221},[47,115913,30877],{"class":85},[47,115915,114458],{"class":221},[47,115917,30877],{"class":85},[47,115919,114463],{"class":221},[47,115921,115922,115924],{"class":49,"line":92},[47,115923,17139],{"class":217},[47,115925,114470],{"class":221},[19,115927,115928,115929,115932,115933,115935],{},"拼接观测，并转换成 ",[26,115930,115931],{},"float32","。很多强化学习库默认使用 ",[26,115934,115931],{},"，所以这里主动转换。",[38,115937,115938],{"className":30432,"code":115341,"language":30434,"meta":43,"style":43},[26,115939,115940],{"__ignoreMap":43},[47,115941,115942,115944,115946,115948,115950,115952,115954,115956,115958,115960,115962,115964,115966,115968,115970,115972,115974],{"class":49,"line":50},[47,115943,32001],{"class":217},[47,115945,114576],{"class":53},[47,115947,114579],{"class":221},[47,115949,674],{"class":217},[47,115951,114584],{"class":221},[47,115953,225],{"class":85},[47,115955,25163],{"class":217},[47,115957,38987],{"class":85},[47,115959,13657],{"class":217},[47,115961,38987],{"class":85},[47,115963,114597],{"class":221},[47,115965,114600],{"class":85},[47,115967,25163],{"class":217},[47,115969,38987],{"class":85},[47,115971,13657],{"class":217},[47,115973,38987],{"class":85},[47,115975,30840],{"class":221},[19,115977,115978,115979,115981,115982,115985],{},"定义 reset。",[26,115980,114620],{}," 用来控制随机数，保证实验可以复现。",[26,115983,115984],{},"options"," 用来接收额外配置，本章暂时不用。",[38,115987,115989],{"className":30432,"code":115988,"language":30434,"meta":43,"style":43},"super().reset(seed=seed)\n",[26,115990,115991],{"__ignoreMap":43},[47,115992,115993,115995,115997,115999,116001],{"class":49,"line":50},[47,115994,115582],{"class":85},[47,115996,114617],{"class":221},[47,115998,114620],{"class":5309},[47,116000,267],{"class":217},[47,116002,114625],{"class":221},[19,116004,116005,116006,116009],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[26,116007,116008],{},"self.np_random"," 生成可复现的随机数。",[38,116011,116013],{"className":30432,"code":116012,"language":30434,"meta":43,"style":43},"mujoco.mj_resetData(self.model, self.data)\n",[26,116014,116015],{"__ignoreMap":43},[47,116016,116017,116020,116022,116024,116026],{"class":49,"line":50},[47,116018,116019],{"class":221},"mujoco.mj_resetData(",[47,116021,30877],{"class":85},[47,116023,114635],{"class":221},[47,116025,30877],{"class":85},[47,116027,114640],{"class":221},[19,116029,116030],{},"把 MuJoCo 状态重置到默认状态。",[38,116032,116034],{"className":30432,"code":116033,"language":30434,"meta":43,"style":43},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[26,116035,116036],{"__ignoreMap":43},[47,116037,116038,116040,116042,116044,116046,116048,116050,116052,116054,116056,116058,116060,116062,116064,116066,116068,116070],{"class":49,"line":50},[47,116039,30877],{"class":85},[47,116041,114651],{"class":221},[47,116043,267],{"class":217},[47,116045,38927],{"class":85},[47,116047,114658],{"class":221},[47,116049,113816],{"class":5309},[47,116051,113819],{"class":217},[47,116053,86264],{"class":85},[47,116055,12528],{"class":221},[47,116057,113826],{"class":5309},[47,116059,267],{"class":217},[47,116061,86264],{"class":85},[47,116063,12528],{"class":221},[47,116065,31550],{"class":5309},[47,116067,267],{"class":217},[47,116069,30877],{"class":85},[47,116071,114683],{"class":221},[19,116073,115395,116074,116077,116078,116081,116082,116084],{},[26,116075,116076],{},"[:]"," 表示修改整个数组。",[26,116079,116080],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[26,116083,102204],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[38,116086,116088],{"className":30432,"code":116087,"language":30434,"meta":43,"style":43},"self.data.qvel[:] = 0.0\n",[26,116089,116090],{"__ignoreMap":43},[47,116091,116092,116094,116096,116098],{"class":49,"line":50},[47,116093,30877],{"class":85},[47,116095,114690],{"class":221},[47,116097,267],{"class":217},[47,116099,104815],{"class":85},[19,116101,116102],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[38,116104,116106],{"className":30432,"code":116105,"language":30434,"meta":43,"style":43},"self.steps = 0\nreturn self._get_obs(), {}\n",[26,116107,116108,116118],{"__ignoreMap":43},[47,116109,116110,116112,116114,116116],{"class":49,"line":50},[47,116111,30877],{"class":85},[47,116113,113760],{"class":221},[47,116115,267],{"class":217},[47,116117,47387],{"class":85},[47,116119,116120,116122,116124],{"class":49,"line":92},[47,116121,17139],{"class":217},[47,116123,38927],{"class":85},[47,116125,114730],{"class":221},[19,116127,116128],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[38,116130,116131],{"className":30432,"code":115404,"language":30434,"meta":43,"style":43},[26,116132,116133],{"__ignoreMap":43},[47,116134,116135,116137,116139],{"class":49,"line":50},[47,116136,32001],{"class":217},[47,116138,114741],{"class":53},[47,116140,114744],{"class":221},[19,116142,116143],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[38,116145,116147],{"className":30432,"code":116146,"language":30434,"meta":43,"style":43},"action = np.asarray(action, dtype=np.float32)\n",[26,116148,116149],{"__ignoreMap":43},[47,116150,116151,116153,116155,116157,116159,116161],{"class":49,"line":50},[47,116152,107496],{"class":221},[47,116154,267],{"class":217},[47,116156,114753],{"class":221},[47,116158,93554],{"class":5309},[47,116160,267],{"class":217},[47,116162,113850],{"class":221},[19,116164,116165,116166,28439],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[26,116167,115931],{},[38,116169,116171],{"className":30432,"code":116170,"language":30434,"meta":43,"style":43},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[26,116172,116173],{"__ignoreMap":43},[47,116174,116175,116177,116179,116181,116183,116185,116187],{"class":49,"line":50},[47,116176,107496],{"class":221},[47,116178,267],{"class":217},[47,116180,107501],{"class":221},[47,116182,30877],{"class":85},[47,116184,114772],{"class":221},[47,116186,30877],{"class":85},[47,116188,114777],{"class":221},[19,116190,116191],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[38,116193,116195],{"className":30432,"code":116194,"language":30434,"meta":43,"style":43},"self.data.ctrl[:] = action\n",[26,116196,116197],{"__ignoreMap":43},[47,116198,116199,116201,116203,116205],{"class":49,"line":50},[47,116200,30877],{"class":85},[47,116202,114788],{"class":221},[47,116204,267],{"class":217},[47,116206,107524],{"class":221},[19,116208,116209],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[38,116211,116213],{"className":30432,"code":116212,"language":30434,"meta":43,"style":43},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[26,116214,116215,116231],{"__ignoreMap":43},[47,116216,116217,116219,116221,116223,116225,116227,116229],{"class":49,"line":50},[47,116218,3118],{"class":217},[47,116220,101555],{"class":221},[47,116222,26097],{"class":217},[47,116224,32497],{"class":85},[47,116226,222],{"class":221},[47,116228,30877],{"class":85},[47,116230,114809],{"class":221},[47,116232,116233,116236,116238,116240,116242],{"class":49,"line":92},[47,116234,116235],{"class":221},"    mujoco.mj_step(",[47,116237,30877],{"class":85},[47,116239,114635],{"class":221},[47,116241,30877],{"class":85},[47,116243,114640],{"class":221},[19,116245,116246,116247,116250,116251,116253,116254,28439],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[26,116248,116249],{},"frame_skip=5","，所以外部调用一次 ",[26,116252,113931],{},"，内部实际执行 5 次 ",[26,116255,101269],{},[38,116257,116259],{"className":30432,"code":116258,"language":30434,"meta":43,"style":43},"self.steps += 1\n",[26,116260,116261],{"__ignoreMap":43},[47,116262,116263,116265,116267,116269],{"class":49,"line":50},[47,116264,30877],{"class":85},[47,116266,113760],{"class":221},[47,116268,9570],{"class":217},[47,116270,55753],{"class":85},[19,116272,116273],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[38,116275,116277],{"className":30432,"code":116276,"language":30434,"meta":43,"style":43},"obs = self._get_obs()\nreward = self._get_reward()\n",[26,116278,116279,116289],{"__ignoreMap":43},[47,116280,116281,116283,116285,116287],{"class":49,"line":50},[47,116282,110908],{"class":221},[47,116284,267],{"class":217},[47,116286,38927],{"class":85},[47,116288,114851],{"class":221},[47,116290,116291,116293,116295,116297],{"class":49,"line":92},[47,116292,111059],{"class":221},[47,116294,267],{"class":217},[47,116296,38927],{"class":85},[47,116298,114862],{"class":221},[19,116300,116301],{},"计算新的观测和奖励。",[38,116303,116305],{"className":30432,"code":116304,"language":30434,"meta":43,"style":43},"dist = float(np.linalg.norm(tip - target))\n",[26,116306,116307],{"__ignoreMap":43},[47,116308,116309,116311,116313,116315,116317,116319],{"class":49,"line":50},[47,116310,111650],{"class":221},[47,116312,267],{"class":217},[47,116314,109851],{"class":85},[47,116316,114905],{"class":221},[47,116318,751],{"class":217},[47,116320,114910],{"class":221},[19,116322,116323],{},"计算末端到目标的距离，并转换成 Python float。",[38,116325,116326],{"className":30432,"code":113731,"language":30434,"meta":43,"style":43},[26,116327,116328,116340],{"__ignoreMap":43},[47,116329,116330,116332,116334,116336,116338],{"class":49,"line":50},[47,116331,113738],{"class":221},[47,116333,267],{"class":217},[47,116335,113743],{"class":221},[47,116337,1129],{"class":217},[47,116339,113748],{"class":85},[47,116341,116342,116344,116346,116348,116350,116352,116354],{"class":49,"line":92},[47,116343,113753],{"class":221},[47,116345,267],{"class":217},[47,116347,38927],{"class":85},[47,116349,113760],{"class":221},[47,116351,1804],{"class":217},[47,116353,38927],{"class":85},[47,116355,113767],{"class":221},[19,116357,116358],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[38,116360,116362],{"className":30432,"code":116361,"language":30434,"meta":43,"style":43},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[26,116363,116364,116377],{"__ignoreMap":43},[47,116365,116366,116369,116371,116373,116375],{"class":49,"line":50},[47,116367,116368],{"class":221},"info ",[47,116370,267],{"class":217},[47,116372,4541],{"class":221},[47,116374,114956],{"class":81},[47,116376,114959],{"class":221},[47,116378,116379,116381],{"class":49,"line":92},[47,116380,17139],{"class":217},[47,116382,114966],{"class":221},[19,116384,116385,116388],{},[26,116386,116387],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[38,116390,116392],{"className":30432,"code":116391,"language":30434,"meta":43,"style":43},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[26,116393,116394,116403],{"__ignoreMap":43},[47,116395,116396,116399,116401],{"class":49,"line":50},[47,116397,116398],{"class":221},"env ",[47,116400,267],{"class":217},[47,116402,114996],{"class":221},[47,116404,116405,116407,116409,116411,116413,116415,116417],{"class":49,"line":92},[47,116406,113454],{"class":221},[47,116408,267],{"class":217},[47,116410,115006],{"class":221},[47,116412,114620],{"class":5309},[47,116414,267],{"class":217},[47,116416,411],{"class":85},[47,116418,228],{"class":221},[19,116420,116421,116422,116425],{},"创建环境并重置。",[26,116423,116424],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[38,116427,116429],{"className":30432,"code":116428,"language":30434,"meta":43,"style":43},"action = env.action_space.sample()\n",[26,116430,116431],{"__ignoreMap":43},[47,116432,116433,116435,116437],{"class":49,"line":50},[47,116434,107496],{"class":221},[47,116436,267],{"class":217},[47,116438,115075],{"class":221},[19,116440,116441],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,116443,102370],{"id":102369},[19,116445,105538],{},[38,116447,116450],{"className":116448,"code":116449,"language":5280,"meta":43},[5278],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[26,116451,116449],{"__ignoreMap":43},[19,116453,116454],{},"这个环境已经具备强化学习环境的基本结构。",[19,116456,116457],{},"主函数里使用随机动作：",[38,116459,116460],{"className":30432,"code":116428,"language":30434,"meta":43,"style":43},[26,116461,116462],{"__ignoreMap":43},[47,116463,116464,116466,116468],{"class":49,"line":50},[47,116465,107496],{"class":221},[47,116467,267],{"class":217},[47,116469,115075],{"class":221},[19,116471,116472],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,116474,102402],{"id":102401},[171,116476,116477,116480,116486,116495,116504,116513,116519],{},[109,116478,116479],{},"运行程序。",[109,116481,116482,116483,28439],{},"确认 ",[26,116484,116485],{},"obs.shape == (10,)",[109,116487,111235,116488,116491,116492,28439],{},[26,116489,116490],{},"env.action_space","，应类似 ",[26,116493,116494],{},"Box(-1.0, 1.0, (2,), float32)",[109,116496,105639,116497,116500,116501,28439],{},[26,116498,116499],{},"self.max_steps = 10","，确认环境会更快 ",[26,116502,116503],{},"truncated=True",[109,116505,102465,116506,102468,116509,116512],{},[26,116507,116508],{},"terminated = dist \u003C 0.05",[26,116510,116511],{},"dist \u003C 0.2","，观察是否更容易结束。",[109,116514,102465,116515,116518],{},[26,116516,116517],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[109,116520,116521,116522,116524,116525,116528],{},"在 ",[26,116523,116387],{}," 里加入 ",[26,116526,116527],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,116530,102507],{"id":102506},[187,116532,116534],{"id":116533},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,116536,116537,116538,116540],{},"Gymnasium 的 ",[26,116539,107188],{}," 返回 5 个值:",[38,116542,116544],{"className":30432,"code":116543,"language":30434,"meta":43,"style":43},"obs, reward, terminated, truncated, info\n",[26,116545,116546],{"__ignoreMap":43},[47,116547,116548],{"class":49,"line":50},[47,116549,116543],{"class":221},[19,116551,116552],{},"不是旧 Gym 的 4 个值。",[187,116554,116556,116559],{"id":116555},"datactrl-action-维度错误",[26,116557,116558],{},"data.ctrl[:] = action"," 维度错误",[19,116561,102577],{},[38,116563,116565],{"className":30432,"code":116564,"language":30434,"meta":43,"style":43},"print(self.model.nu)\nprint(action.shape)\n",[26,116566,116567,116578],{"__ignoreMap":43},[47,116568,116569,116571,116573,116575],{"class":49,"line":50},[47,116570,30469],{"class":85},[47,116572,222],{"class":221},[47,116574,30877],{"class":85},[47,116576,116577],{"class":221},".model.nu)\n",[47,116579,116580,116582],{"class":49,"line":92},[47,116581,30469],{"class":85},[47,116583,116584],{"class":221},"(action.shape)\n",[19,116586,116587],{},"两者必须匹配。",[187,116589,116591],{"id":116590},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,116593,102516],{},[38,116595,116597],{"className":30432,"code":116596,"language":30434,"meta":43,"style":43},"mujoco.mj_forward(self.model, self.data)\n",[26,116598,116599],{"__ignoreMap":43},[47,116600,116601,116604,116606,116608,116610],{"class":49,"line":50},[47,116602,116603],{"class":221},"mujoco.mj_forward(",[47,116605,30877],{"class":85},[47,116607,114635],{"class":221},[47,116609,30877],{"class":85},[47,116611,114640],{"class":221},[187,116613,116615,116617],{"id":116614},"observation_space-维度和-obs-不一致",[26,116616,113654],{}," 维度和 obs 不一致",[19,116619,102629],{},[38,116621,116623],{"className":30432,"code":116622,"language":30434,"meta":43,"style":43},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[26,116624,116625,116635,116642],{"__ignoreMap":43},[47,116626,116627,116629,116631,116633],{"class":49,"line":50},[47,116628,110908],{"class":221},[47,116630,267],{"class":217},[47,116632,38927],{"class":85},[47,116634,114851],{"class":221},[47,116636,116637,116639],{"class":49,"line":92},[47,116638,30469],{"class":85},[47,116640,116641],{"class":221},"(obs.shape)\n",[47,116643,116644,116646,116648,116650],{"class":49,"line":1273},[47,116645,30469],{"class":85},[47,116647,222],{"class":221},[47,116649,30877],{"class":85},[47,116651,116652],{"class":221},".observation_space.shape)\n",[19,116654,116655],{},"两者必须一致。本章观测是：",[38,116657,116660],{"className":116658,"code":116659,"language":5280,"meta":43},[5278],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[26,116661,116659],{"__ignoreMap":43},[187,116663,116665],{"id":116664},"action-超过范围","action 超过范围",[19,116667,116668],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[38,116670,116671],{"className":30432,"code":116170,"language":30434,"meta":43,"style":43},[26,116672,116673],{"__ignoreMap":43},[47,116674,116675,116677,116679,116681,116683,116685,116687],{"class":49,"line":50},[47,116676,107496],{"class":221},[47,116678,267],{"class":217},[47,116680,107501],{"class":221},[47,116682,30877],{"class":85},[47,116684,114772],{"class":221},[47,116686,30877],{"class":85},[47,116688,114777],{"class":221},[19,116690,116691,116692,28439],{},"这能避免无效动作直接写入 ",[26,116693,101130],{},[187,116695,116697],{"id":116696},"忘记返回-info","忘记返回 info",[19,116699,116537,116700,101072,116702,116704],{},[26,116701,70110],{},[26,116703,107188],{}," 都会返回 info：",[38,116706,116707],{"className":30432,"code":113447,"language":30434,"meta":43,"style":43},[26,116708,116709,116717],{"__ignoreMap":43},[47,116710,116711,116713,116715],{"class":49,"line":50},[47,116712,113454],{"class":221},[47,116714,267],{"class":217},[47,116716,113459],{"class":221},[47,116718,116719,116721,116723],{"class":49,"line":92},[47,116720,113464],{"class":221},[47,116722,267],{"class":217},[47,116724,113469],{"class":221},[19,116726,116727,116728,28439],{},"即使暂时没有额外信息，也返回 ",[26,116729,32513],{},[14,116731,116733],{"id":116732},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,116735,116736],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[171,116738,116739,116742,116745,116748,116751,116754],{},[109,116740,116741],{},"更稳定的 reward。",[109,116743,116744],{},"合理的 episode 长度。",[109,116746,116747],{},"可重复的随机目标采样。",[109,116749,116750],{},"render 接口。",[109,116752,116753],{},"环境注册代码。",[109,116755,116756],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,116758,116759],{},"如果只是自己写训练循环，最小形式是：",[38,116761,116763],{"className":30432,"code":116762,"language":30434,"meta":43,"style":43},"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",[26,116764,116765,116773,116789,116793,116809,116818,116827,116837],{"__ignoreMap":43},[47,116766,116767,116769,116771],{"class":49,"line":50},[47,116768,116398],{"class":221},[47,116770,267],{"class":217},[47,116772,114996],{"class":221},[47,116774,116775,116777,116779,116781,116783,116785,116787],{"class":49,"line":92},[47,116776,113454],{"class":221},[47,116778,267],{"class":217},[47,116780,115006],{"class":221},[47,116782,114620],{"class":5309},[47,116784,267],{"class":217},[47,116786,411],{"class":85},[47,116788,228],{"class":221},[47,116790,116791],{"class":49,"line":1273},[47,116792,2493],{"emptyLinePlaceholder":145},[47,116794,116795,116797,116799,116801,116803,116805,116807],{"class":49,"line":1288},[47,116796,3118],{"class":217},[47,116798,101555],{"class":221},[47,116800,26097],{"class":217},[47,116802,32497],{"class":85},[47,116804,222],{"class":221},[47,116806,6503],{"class":85},[47,116808,30840],{"class":221},[47,116810,116811,116814,116816],{"class":49,"line":1294},[47,116812,116813],{"class":221},"    action ",[47,116815,267],{"class":217},[47,116817,115075],{"class":221},[47,116819,116820,116823,116825],{"class":49,"line":1308},[47,116821,116822],{"class":221},"    obs, reward, terminated, truncated, info ",[47,116824,267],{"class":217},[47,116826,113469],{"class":221},[47,116828,116829,116831,116833,116835],{"class":49,"line":1314},[47,116830,3194],{"class":217},[47,116832,115141],{"class":221},[47,116834,115144],{"class":217},[47,116836,115147],{"class":221},[47,116838,116839,116842,116844],{"class":49,"line":1405},[47,116840,116841],{"class":221},"        obs, info ",[47,116843,267],{"class":217},[47,116845,113459],{"class":221},[14,116847,116849],{"id":116848},"_9本章小结","9.本章小结",[19,116851,116852],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[38,116854,116857],{"className":116855,"code":116856,"language":5280,"meta":43},[5278],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[26,116858,116856],{"__ignoreMap":43},[19,116860,116861],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[134,116863,116864],{},"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":43,"searchDepth":92,"depth":92,"links":116866},[116867,116868,116869,116876,116880,116881,116882,116892,116893],{"id":100700,"depth":92,"text":100701},{"id":100823,"depth":92,"text":100824},{"id":101098,"depth":92,"text":101099,"children":116870},[116871,116873,116875],{"id":113678,"depth":1273,"text":116872},"terminated 和 truncated 的区别",{"id":113781,"depth":1273,"text":116874},"observation_space 和 action_space",{"id":113908,"depth":1273,"text":113909},{"id":101306,"depth":92,"text":101307,"children":116877},[116878,116879],{"id":101626,"depth":1273,"text":101626},{"id":101762,"depth":1273,"text":101762},{"id":102369,"depth":92,"text":102370},{"id":102401,"depth":92,"text":102402},{"id":102506,"depth":92,"text":102507,"children":116883},[116884,116885,116887,116888,116890,116891],{"id":116533,"depth":1273,"text":116534},{"id":116555,"depth":1273,"text":116886},"data.ctrl[:] = action 维度错误",{"id":116590,"depth":1273,"text":116591},{"id":116614,"depth":1273,"text":116889},"observation_space 维度和 obs 不一致",{"id":116664,"depth":1273,"text":116665},{"id":116696,"depth":1273,"text":116697},{"id":116732,"depth":92,"text":116733},{"id":116848,"depth":92,"text":116849},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113431,"description":43},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":116900,"title":116901,"body":116902,"description":117325,"extension":143,"meta":117326,"navigation":145,"path":117327,"seo":117328,"stem":117329,"__hash__":117330},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":116903,"toc":117315},[116904,116908,116911,116914,116934,116940,116946,116956,116959,116962,116982,116985,116989,116992,116998,117001,117015,117018,117021,117095,117098,117104,117107,117130,117133,117183,117186,117192,117195,117198,117201,117220,117223,117229,117232,117235,117238,117258,117261,117264,117267,117312],[10,116905,116907],{"id":116906},"mujoco-学习","MuJoCo 学习",[19,116909,116910],{},"初版",[19,116912,116913],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[171,116915,116916,116919,116922,116931],{},[109,116917,116918],{},"MuJoCo 模型文件在描述什么。",[109,116920,116921],{},"Python 代码怎样读取和推进仿真。",[109,116923,116924,60,116926,60,116928,116930],{},[26,116925,104084],{},[26,116927,104414],{},[26,116929,104417],{}," 这些数组为什么重要。",[109,116932,116933],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,116935,116936,116937,116939],{},"默认环境为 Fedora 44、Python >= 3.10、",[26,116938,101081],{}," 官方 Python bindings。",[19,116941,116942,116943,116945],{},"注意：本文禁止使用 ",[26,116944,101066],{},"。所有示例均使用：",[38,116947,116948],{"className":30432,"code":101632,"language":30434,"meta":43,"style":43},[26,116949,116950],{"__ignoreMap":43},[47,116951,116952,116954],{"class":49,"line":50},[47,116953,30446],{"class":217},[47,116955,101355],{"class":221},[14,116957,116958],{"id":116958},"适合谁阅读",[19,116960,116961],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[171,116963,116964,116967,116970,116973],{},[109,116965,116966],{},"没学过 MuJoCo，只会一点 Python。",[109,116968,116969],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[109,116971,116972],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[109,116974,116975,116976,116978,116979,116981],{},"以前接触过 ",[26,116977,101066],{},"，现在想迁移到官方 ",[26,116980,101075],{}," Python bindings。",[19,116983,116984],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,116986,116988],{"id":116987},"mujoco-到底是什么","MuJoCo 到底是什么",[19,116990,116991],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[38,116993,116996],{"className":116994,"code":116995,"language":5280,"meta":43},[5278],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[26,116997,116995],{"__ignoreMap":43},[19,116999,117000],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[171,117002,117003,117006,117009,117012],{},[109,117004,117005],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[109,117007,117008],{},"快速测试控制算法，不必一开始就上真实机器人。",[109,117010,117011],{},"生成强化学习环境。",[109,117013,117014],{},"采集状态、动作、图像、奖励等训练数据。",[14,117016,117017],{"id":117017},"学习前的心智模型",[19,117019,117020],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[357,117022,117023,117035],{},[360,117024,117025],{},[363,117026,117027,117030,117033],{},[366,117028,117029],{"align":23829},"部分",[366,117031,117032],{"align":23829},"负责什么",[366,117034,21280],{"align":23829},[404,117036,117037,117048,117060,117072,117084],{},[363,117038,117039,117042,117045],{},[409,117040,117041],{"align":23829},"MJCF XML",[409,117043,117044],{"align":23829},"定义世界和机器人结构",[409,117046,117047],{"align":23829},"地面、盒子、关节、电机、摄像头",[363,117049,117050,117054,117057],{},[409,117051,117052],{"align":23829},[26,117053,100763],{},[409,117055,117056],{"align":23829},"编译后的静态模型",[409,117058,117059],{"align":23829},"有几个关节、有几个电机、时间步长是多少",[363,117061,117062,117066,117069],{},[409,117063,117064],{"align":23829},[26,117065,100773],{},[409,117067,117068],{"align":23829},"运行中的动态状态",[409,117070,117071],{"align":23829},"当前时间、位置、速度、电机输入",[363,117073,117074,117078,117081],{},[409,117075,117076],{"align":23829},[26,117077,101269],{},[409,117079,117080],{"align":23829},"推进一步物理仿真",[409,117082,117083],{"align":23829},"根据重力、力、碰撞更新状态",[363,117085,117086,117089,117092],{},[409,117087,117088],{"align":23829},"Viewer \u002F Renderer",[409,117090,117091],{"align":23829},"把仿真显示出来",[409,117093,117094],{"align":23829},"打开窗口或保存图片",[19,117096,117097],{},"一句话总结：",[38,117099,117102],{"className":117100,"code":117101,"language":5280,"meta":43},[5278],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[26,117103,117101],{"__ignoreMap":43},[19,117105,117106],{},"参考来源：",[106,117108,117109,117116,117123],{},[109,117110,117111,117112],{},"MuJoCo Python 官方文档：",[457,117113,117114],{"href":117114,"rel":117115},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[23956],[109,117117,117118,117119],{},"MuJoCo XML Reference：",[457,117120,117121],{"href":117121,"rel":117122},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[23956],[109,117124,117125,117126],{},"MuJoCo Overview：",[457,117127,117128],{"href":117128,"rel":117129},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[23956],[14,117131,117132],{"id":117132},"章节目录",[171,117134,117135,117141,117147,117153,117159,117165,117171,117177],{},[109,117136,117137],{},[457,117138,117140],{"href":117139},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[109,117142,117143],{},[457,117144,117146],{"href":117145},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[109,117148,117149],{},[457,117150,117152],{"href":117151},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[109,117154,117155],{},[457,117156,117158],{"href":117157},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[109,117160,117161],{},[457,117162,117164],{"href":117163},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[109,117166,117167],{},[457,117168,117170],{"href":117169},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[109,117172,117173],{},[457,117174,117176],{"href":117175},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[109,117178,117179],{},[457,117180,117182],{"href":117181},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,117184,117185],{"id":117185},"推荐学习路线",[38,117187,117190],{"className":117188,"code":117189,"language":5280,"meta":43},[5278],"环境安装\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",[26,117191,117189],{"__ignoreMap":43},[19,117193,117194],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,117196,117197],{"id":117197},"建议的目录结构",[19,117199,117200],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[38,117202,117204],{"className":40,"code":117203,"language":42,"meta":43,"style":43},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[26,117205,117206,117214],{"__ignoreMap":43},[47,117207,117208,117210,117212],{"class":49,"line":50},[47,117209,101320],{"class":53},[47,117211,29270],{"class":85},[47,117213,101325],{"class":81},[47,117215,117216,117218],{"class":49,"line":92},[47,117217,101330],{"class":85},[47,117219,101325],{"class":81},[19,117221,117222],{},"每一章的代码都单独保存：",[38,117224,117227],{"className":117225,"code":117226,"language":5280,"meta":43},[5278],"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",[26,117228,117226],{"__ignoreMap":43},[19,117230,117231],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,117233,117234],{"id":117234},"学习方法",[19,117236,117237],{},"每章建议按这个顺序操作：",[171,117239,117240,117243,117246,117249,117252,117255],{},[109,117241,117242],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[109,117244,117245],{},"复制最小可运行代码，保存成指定文件。",[109,117247,117248],{},"运行代码，确认没有报错。",[109,117250,117251],{},"对照“运行结果说明”理解输出。",[109,117253,117254],{},"做“验证步骤”，主动改一两个参数。",[109,117256,117257],{},"遇到报错先看“常见错误与解决方案”。",[19,117259,117260],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,117262,117263],{"id":117263},"全局排错顺序",[19,117265,117266],{},"遇到问题时，按下面顺序查：",[171,117268,117269,117275,117281,117286,117289,117292,117299,117309],{},[109,117270,117271,117272],{},"Python 环境是否激活：",[26,117273,117274],{},"which python",[109,117276,117277,117278],{},"MuJoCo 是否能导入：",[26,117279,117280],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[109,117282,117283,117284],{},"是否误装了 ",[26,117285,101066],{},[109,117287,117288],{},"XML 标签是否闭合、属性是否拼写正确",[109,117290,117291],{},"actuator 引用的 joint 名字是否存在",[109,117293,117294,117296,117297],{},[26,117295,101130],{}," 的长度是否等于 ",[26,117298,102212],{},[109,117300,105639,117301,82593,117303,117305,117306],{},[26,117302,104084],{},[26,117304,104414],{}," 后是否调用了 ",[26,117307,117308],{},"mujoco.mj_forward",[109,117310,117311],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[134,117313,117314],{},"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":43,"searchDepth":92,"depth":92,"links":117316},[117317,117318,117319,117320,117321,117322,117323,117324],{"id":116958,"depth":92,"text":116958},{"id":116987,"depth":92,"text":116988},{"id":117017,"depth":92,"text":117017},{"id":117132,"depth":92,"text":117132},{"id":117185,"depth":92,"text":117185},{"id":117197,"depth":92,"text":117197},{"id":117234,"depth":92,"text":117234},{"id":117263,"depth":92,"text":117263},"仿真搭建。",{"category":23471},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":116901,"description":117325},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117332,"title":117333,"body":117334,"description":142,"extension":143,"meta":117789,"navigation":145,"path":117790,"seo":117791,"stem":117792,"__hash__":117793},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117335,"toc":117787},[117336,117339,117342,117348,117784],[10,117337,117333],{"id":117338},"_1-最常用的基本操作更新",[19,117340,117341],{},"装linux系统教程：",[19,117343,117344],{},[457,117345,117346],{"href":117346,"rel":117347},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[23956],[38,117349,117353],{"className":117350,"code":117351,"language":117352,"meta":43,"style":43},"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",[26,117354,117355,117360,117365,117374,117379,117388,117393,117413,117418,117429,117434,117443,117448,117476,117481,117500,117505,117524,117528,117533,117549,117553,117558,117588,117592,117597,117613,117617,117622,117637,117641,117646,117662,117666,117671,117683,117695,117699,117704,117721,117725,117730,117748,117752,117757,117766,117770,117775],{"__ignoreMap":43},[47,117356,117357],{"class":49,"line":50},[47,117358,117359],{"class":279},"#更新相关的知识\n",[47,117361,117362],{"class":49,"line":92},[47,117363,117364],{"class":279},"# 更新软件包列表（从服务器获取最新软件信息）\n",[47,117366,117367,117369,117372],{"class":49,"line":1273},[47,117368,78],{"class":53},[47,117370,117371],{"class":81}," apt",[47,117373,26296],{"class":81},[47,117375,117376],{"class":49,"line":1288},[47,117377,117378],{"class":279},"# 升级所有可更新的软件包（不删除旧包）\n",[47,117380,117381,117383,117385],{"class":49,"line":1294},[47,117382,78],{"class":53},[47,117384,117371],{"class":81},[47,117386,117387],{"class":81}," upgrade\n",[47,117389,117390],{"class":49,"line":1308},[47,117391,117392],{"class":279},"#更新和升级软件包\n",[47,117394,117395,117397,117399,117402,117404,117406,117408,117411],{"class":49,"line":1314},[47,117396,78],{"class":53},[47,117398,117371],{"class":81},[47,117400,117401],{"class":81}," update",[47,117403,26244],{"class":221},[47,117405,78],{"class":53},[47,117407,117371],{"class":81},[47,117409,117410],{"class":81}," upgrade",[47,117412,101035],{"class":85},[47,117414,117415],{"class":49,"line":1405},[47,117416,117417],{"class":279},"#列出可更新的软件包及版本信息\n",[47,117419,117420,117423,117426],{"class":49,"line":1411},[47,117421,117422],{"class":53},"apt",[47,117424,117425],{"class":81}," list",[47,117427,117428],{"class":85}," --upgradable\n",[47,117430,117431],{"class":49,"line":1423},[47,117432,117433],{"class":279},"#彻底升级（处理依赖关系，可能删除旧包）\n",[47,117435,117436,117438,117440],{"class":49,"line":1706},[47,117437,78],{"class":53},[47,117439,117371],{"class":81},[47,117441,117442],{"class":81}," full-upgrade\n",[47,117444,117445],{"class":49,"line":1711},[47,117446,117447],{"class":279},"#设置指定版本\n",[47,117449,117450,117452,117454,117456,117458,117461,117463,117465,117467,117469,117472,117474],{"class":49,"line":1717},[47,117451,78],{"class":53},[47,117453,117371],{"class":81},[47,117455,23925],{"class":81},[47,117457,28956],{"class":217},[47,117459,117460],{"class":81},"package_nam",[47,117462,295],{"class":221},[47,117464,1179],{"class":217},[47,117466,267],{"class":81},[47,117468,1129],{"class":217},[47,117470,117471],{"class":81},"version_numbe",[47,117473,889],{"class":221},[47,117475,51361],{"class":217},[47,117477,117478],{"class":49,"line":1722},[47,117479,117480],{"class":279},"#只安装软件包不升级\n",[47,117482,117483,117485,117487,117489,117491,117493,117495,117497],{"class":49,"line":1736},[47,117484,78],{"class":53},[47,117486,117371],{"class":81},[47,117488,23925],{"class":81},[47,117490,28956],{"class":217},[47,117492,117460],{"class":81},[47,117494,295],{"class":221},[47,117496,1179],{"class":217},[47,117498,117499],{"class":85}," --no-upgrade\n",[47,117501,117502],{"class":49,"line":1741},[47,117503,117504],{"class":279},"#只升级，不存在就不安装\n",[47,117506,117507,117509,117511,117513,117515,117517,117519,117521],{"class":49,"line":1747},[47,117508,78],{"class":53},[47,117510,117371],{"class":81},[47,117512,23925],{"class":81},[47,117514,28956],{"class":217},[47,117516,117460],{"class":81},[47,117518,295],{"class":221},[47,117520,1179],{"class":217},[47,117522,117523],{"class":85}," --only-upgrade\n",[47,117525,117526],{"class":49,"line":1768},[47,117527,2493],{"emptyLinePlaceholder":145},[47,117529,117530],{"class":49,"line":1773},[47,117531,117532],{"class":279},"#安装指定的软件命令\n",[47,117534,117535,117537,117539,117541,117543,117545,117547],{"class":49,"line":1787},[47,117536,78],{"class":53},[47,117538,117371],{"class":81},[47,117540,23925],{"class":81},[47,117542,28956],{"class":217},[47,117544,117460],{"class":81},[47,117546,295],{"class":221},[47,117548,51361],{"class":217},[47,117550,117551],{"class":49,"line":1792},[47,117552,2493],{"emptyLinePlaceholder":145},[47,117554,117555],{"class":49,"line":1821},[47,117556,117557],{"class":279},"#安装多个软件包\n",[47,117559,117560,117562,117564,117566,117568,117571,117574,117576,117578,117581,117583,117585],{"class":49,"line":1826},[47,117561,78],{"class":53},[47,117563,117371],{"class":81},[47,117565,23925],{"class":81},[47,117567,28956],{"class":217},[47,117569,117570],{"class":81},"package_",[47,117572,117573],{"class":217},"1>",[47,117575,28956],{"class":217},[47,117577,117570],{"class":81},[47,117579,117580],{"class":217},"2>",[47,117582,28956],{"class":217},[47,117584,117570],{"class":81},[47,117586,117587],{"class":217},"3>\n",[47,117589,117590],{"class":49,"line":1843},[47,117591,2493],{"emptyLinePlaceholder":145},[47,117593,117594],{"class":49,"line":1848},[47,117595,117596],{"class":279},"#更新指定的软件命令\n",[47,117598,117599,117601,117603,117605,117607,117609,117611],{"class":49,"line":1853},[47,117600,78],{"class":53},[47,117602,117371],{"class":81},[47,117604,117401],{"class":81},[47,117606,28956],{"class":217},[47,117608,117460],{"class":81},[47,117610,295],{"class":221},[47,117612,51361],{"class":217},[47,117614,117615],{"class":49,"line":1858},[47,117616,2493],{"emptyLinePlaceholder":145},[47,117618,117619],{"class":49,"line":1872},[47,117620,117621],{"class":279},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[47,117623,117624,117626,117629,117631,117633,117635],{"class":49,"line":1877},[47,117625,117422],{"class":53},[47,117627,117628],{"class":81}," show",[47,117630,28956],{"class":217},[47,117632,117460],{"class":81},[47,117634,295],{"class":221},[47,117636,51361],{"class":217},[47,117638,117639],{"class":49,"line":2670},[47,117640,2493],{"emptyLinePlaceholder":145},[47,117642,117643],{"class":49,"line":2684},[47,117644,117645],{"class":279},"#删除软件包命令\n",[47,117647,117648,117650,117652,117654,117656,117658,117660],{"class":49,"line":2692},[47,117649,78],{"class":53},[47,117651,117371],{"class":81},[47,117653,26133],{"class":81},[47,117655,28956],{"class":217},[47,117657,117460],{"class":81},[47,117659,295],{"class":221},[47,117661,51361],{"class":217},[47,117663,117664],{"class":49,"line":2697},[47,117665,2493],{"emptyLinePlaceholder":145},[47,117667,117668],{"class":49,"line":2703},[47,117669,117670],{"class":279},"# 清理旧版本和缓存（释放磁盘空间）\n",[47,117672,117673,117675,117677,117680],{"class":49,"line":2709},[47,117674,78],{"class":53},[47,117676,117371],{"class":81},[47,117678,117679],{"class":81}," autoremove",[47,117681,117682],{"class":279},"  # 删除不再需要的依赖和库文件\n",[47,117684,117685,117687,117689,117692],{"class":49,"line":2714},[47,117686,78],{"class":53},[47,117688,117371],{"class":81},[47,117690,117691],{"class":81}," clean",[47,117693,117694],{"class":279},"       # 清理下载的缓存包\n",[47,117696,117697],{"class":49,"line":8041},[47,117698,2493],{"emptyLinePlaceholder":145},[47,117700,117701],{"class":49,"line":8065},[47,117702,117703],{"class":279},"#移除软件包及配置文件\n",[47,117705,117706,117708,117710,117713,117715,117717,117719],{"class":49,"line":8070},[47,117707,78],{"class":53},[47,117709,117371],{"class":81},[47,117711,117712],{"class":81}," purge",[47,117714,28956],{"class":217},[47,117716,117460],{"class":81},[47,117718,295],{"class":221},[47,117720,51361],{"class":217},[47,117722,117723],{"class":49,"line":8076},[47,117724,2493],{"emptyLinePlaceholder":145},[47,117726,117727],{"class":49,"line":8103},[47,117728,117729],{"class":279},"#查找软件包命令\n",[47,117731,117732,117734,117736,117739,117741,117744,117746],{"class":49,"line":8108},[47,117733,78],{"class":53},[47,117735,117371],{"class":81},[47,117737,117738],{"class":81}," search",[47,117740,28956],{"class":217},[47,117742,117743],{"class":81},"keywor",[47,117745,533],{"class":221},[47,117747,51361],{"class":217},[47,117749,117750],{"class":49,"line":8114},[47,117751,2493],{"emptyLinePlaceholder":145},[47,117753,117754],{"class":49,"line":8126},[47,117755,117756],{"class":279},"#列出所有已安装的包\n",[47,117758,117759,117761,117763],{"class":49,"line":8138},[47,117760,117422],{"class":53},[47,117762,117425],{"class":81},[47,117764,117765],{"class":85}," --installed\n",[47,117767,117768],{"class":49,"line":8150},[47,117769,2493],{"emptyLinePlaceholder":145},[47,117771,117772],{"class":49,"line":9809},[47,117773,117774],{"class":279},"#列出所有已安装的包的版本信息\n",[47,117776,117777,117779,117781],{"class":49,"line":9834},[47,117778,117422],{"class":53},[47,117780,117425],{"class":81},[47,117782,117783],{"class":85}," --all-versions\n",[134,117785,117786],{},"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":43,"searchDepth":92,"depth":92,"links":117788},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117333,"description":142},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117795,"title":117796,"body":117797,"description":142,"extension":143,"meta":118538,"navigation":145,"path":118539,"seo":118540,"stem":118541,"__hash__":118542},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117798,"toc":118525},[117799,117802,117806,117809,117815,117819,117823,117829,117834,117839,117844,117849,117854,117857,117860,117863,117866,117870,117873,117878,117881,117886,117889,117894,117901,117904,117907,117910,117913,117916,117927,117931,117935,117940,117945,117949,117954,117958,117963,117967,117971,117976,117979,118024,118029,118033,118037,118042,118048,118053,118063,118068,118078,118083,118088,118115,118119,118122,118127,118130,118155,118159,118164,118167,118172,118177,118197,118202,118205,118220,118224,118277,118280,118285,118289,118292,118307,118310,118313,118318,118322,118326,118329,118333,118337,118340,118345,118350,118354,118361,118369,118372,118379,118384,118389,118392,118397,118404,118409,118416,118420,118422,118427,118431,118434,118437,118442,118445,118450,118453,118458,118463,118468,118472,118477,118481,118522],[10,117800,117796],{"id":117801},"_2-linux装机教程",[14,117803,117805],{"id":117804},"_21-实体机","2.1 实体机",[19,117807,117808],{},"使用清华源：（Ubuntu24.04）",[19,117810,117811],{},[457,117812,117813],{"href":117813,"rel":117814},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[23956],[14,117816,117818],{"id":117817},"_22-普通虚拟机","2.2 普通虚拟机",[187,117820,117822],{"id":117821},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,117824,117825],{},[457,117826,117827],{"href":117827,"rel":117828},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[23956],[19,117830,117831],{},[1556,117832],{"alt":43,"src":117833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,117835,117836],{},[1556,117837],{"alt":43,"src":117838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,117840,117841],{},[1556,117842],{"alt":43,"src":117843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,117845,117846],{},[1556,117847],{"alt":43,"src":117848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,117850,117851],{},[1556,117852],{"alt":43,"src":117853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,117855,117856],{},"内存4G（4096MB）；",[19,117858,117859],{},"CPU给4个核；",[19,117861,117862],{},"硬盘动态分配60G；",[19,117864,117865],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[187,117867,117869],{"id":117868},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,117871,117872],{},"按照1.1的步骤下载Ubuntu",[19,117874,117875],{},[1556,117876],{"alt":43,"src":117877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,117879,117880],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,117882,117883],{},[1556,117884],{"alt":43,"src":117885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,117887,117888],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,117890,117891],{},[1556,117892],{"alt":43,"src":117893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,117895,117896,117897,117900],{},"选择“正常安装”(找不到都用Alt+F7)， ",[369,117898,117899],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,117902,117903],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,117905,117906],{},"将改动写入磁盘吗 继续",[19,117908,117909],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,117911,117912],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,117914,117915],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,117917,117918,117919,117922,117923,117926],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[369,117920,117921],{},"除了"," 选不发送系统信息与不升级之外， ",[369,117924,117925],{},"其它"," 都跳过或前进）",[187,117928,117930],{"id":117929},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22091,117932,117934],{"id":117933},"_2231-全屏","2.2.3.1 全屏",[19,117936,117937],{},[1556,117938],{"alt":43,"src":117939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,117941,117942],{},[1556,117943],{"alt":43,"src":117944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22091,117946,117948],{"id":117947},"_2232-文件交换","2.2.3.2 文件交换",[19,117950,117951],{},[1556,117952],{"alt":43,"src":117953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22091,117955,117957],{"id":117956},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,117959,117960],{},[1556,117961],{"alt":43,"src":117962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,117964,117966],{"id":117965},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[187,117968,117970],{"id":117969},"_231-简介与优缺点","2.3.1 简介与优缺点",[171,117972,117973],{},[109,117974,117975],{},"什么情况下推荐？",[19,117977,117978],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[171,117980,117981],{"start":92},[109,117982,117983,117984],{},"优缺点：",[171,117985,117986,118016],{},[109,117987,117988,117989],{},"优点：",[171,117990,117991,117994,118001,118004,118007,118010,118013],{},[109,117992,117993],{},"WSL2是最好的Linux发行版;(bushi)",[109,117995,117996,117997,118000],{},"性能损耗极低。且比在Windows上跑深度性能 ",[369,117998,117999],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[109,118002,118003],{},"非常方便调用USB设备，可以USB直通;",[109,118005,118006],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[109,118008,118009],{},"非常方便Win与WSL2互相传文件等协同操作;",[109,118011,118012],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[109,118014,118015],{},"非常方便使用Windows的VScode远程开发;",[109,118017,118018,118019],{},"缺点：",[171,118020,118021],{},[109,118022,118023],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,118025,118026],{},[1556,118027],{"alt":43,"src":118028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[187,118030,118032],{"id":118031},"_232-安装教程","2.3.2 安装教程",[22091,118034,118036],{"id":118035},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[171,118038,118039],{},[109,118040,118041],{},"方法一(图形界面)",[19,118043,118044,118045,125],{},"用Win+R输入",[26,118046,118047],{},"appwiz.cpl",[19,118049,118050],{},[1556,118051],{"alt":43,"src":118052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,118054,118055,118056,118059,118060,26527],{},"点击OK进入 ",[369,118057,118058],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[369,118061,118062],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,118064,118065],{},[1556,118066],{"alt":43,"src":118067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,118069,118070,118071,101072,118074,118077],{},"选择 ",[369,118072,118073],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[369,118075,118076],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,118079,118080],{},[1556,118081],{"alt":43,"src":118082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[171,118084,118085],{"start":92},[109,118086,118087],{},"方法二(命令行)",[38,118089,118093],{"className":118090,"code":118091,"language":118092,"meta":43,"style":43},"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",[26,118094,118095,118100,118105,118110],{"__ignoreMap":43},[47,118096,118097],{"class":49,"line":50},[47,118098,118099],{},"# 开启 Linux 子系统\n",[47,118101,118102],{"class":49,"line":92},[47,118103,118104],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[47,118106,118107],{"class":49,"line":1273},[47,118108,118109],{},"# 开启虚拟机平台\n",[47,118111,118112],{"class":49,"line":1288},[47,118113,118114],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22091,118116,118118],{"id":118117},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,118120,118121],{},"用管理员权限打开powershell",[19,118123,118124],{},[1556,118125],{"alt":43,"src":118126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,118128,118129],{},"升级WSL并设置默认版本为WSL2",[38,118131,118133],{"className":118090,"code":118132,"language":118092,"meta":43,"style":43},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[26,118134,118135,118140,118145,118150],{"__ignoreMap":43},[47,118136,118137],{"class":49,"line":50},[47,118138,118139],{},"# 更新 wsl\n",[47,118141,118142],{"class":49,"line":92},[47,118143,118144],{},"wsl --update\n",[47,118146,118147],{"class":49,"line":1273},[47,118148,118149],{},"# 将 wsl 版本设置为 wsl2\n",[47,118151,118152],{"class":49,"line":1288},[47,118153,118154],{},"wsl --set-default-version 2\n",[22091,118156,118158],{"id":118157},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[171,118160,118161],{},[109,118162,118163],{},"方式一(商店下载)",[19,118165,118166],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,118168,118169],{},[1556,118170],{"alt":43,"src":118171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[171,118173,118174],{"start":92},[109,118175,118176],{},"方式二(命令行安装)",[38,118178,118180],{"className":118090,"code":118179,"language":118092,"meta":43,"style":43},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[26,118181,118182,118187,118192],{"__ignoreMap":43},[47,118183,118184],{"class":49,"line":50},[47,118185,118186],{},"# 列出可安装的 Linux 版本\n",[47,118188,118189],{"class":49,"line":92},[47,118190,118191],{},"#（需要科学手段）\n",[47,118193,118194],{"class":49,"line":1273},[47,118195,118196],{},"wsl --list --online\n",[19,118198,118199],{},[1556,118200],{"alt":43,"src":118201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,118203,118204],{},"选择对应发行版并安装",[38,118206,118208],{"className":118090,"code":118207,"language":118092,"meta":43,"style":43},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[26,118209,118210,118215],{"__ignoreMap":43},[47,118211,118212],{"class":49,"line":50},[47,118213,118214],{},"# Ubuntu安装完毕后需要重启系统\n",[47,118216,118217],{"class":49,"line":92},[47,118218,118219],{},"wsl --install -d Ubuntu-24.04\n",[22091,118221,118223],{"id":118222},"_2324-查看系统状态","2.3.2.4 查看系统状态",[38,118225,118227],{"className":118090,"code":118226,"language":118092,"meta":43,"style":43},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[26,118228,118229,118234,118239,118244,118249,118253,118257,118262,118267,118272],{"__ignoreMap":43},[47,118230,118231],{"class":49,"line":50},[47,118232,118233],{},"# 查看 wsl\n",[47,118235,118236],{"class":49,"line":92},[47,118237,118238],{},"wsl -l\n",[47,118240,118241],{"class":49,"line":1273},[47,118242,118243],{},"# 查看 wsl 运行版本或模式\n",[47,118245,118246],{"class":49,"line":1288},[47,118247,118248],{},"wsl -l -v\n",[47,118250,118251],{"class":49,"line":1294},[47,118252,2493],{"emptyLinePlaceholder":145},[47,118254,118255],{"class":49,"line":1308},[47,118256,2493],{"emptyLinePlaceholder":145},[47,118258,118259],{"class":49,"line":1314},[47,118260,118261],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[47,118263,118264],{"class":49,"line":1405},[47,118265,118266],{},"wsl --set-version \u003Cdistro> 2\n",[47,118268,118269],{"class":49,"line":1411},[47,118270,118271],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[47,118273,118274],{"class":49,"line":1423},[47,118275,118276],{},"wsl --unregister \u003Cdistro>\n",[19,118278,118279],{},"输出Version为2即正常",[19,118281,118282],{},[1556,118283],{"alt":43,"src":118284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22091,118286,118288],{"id":118287},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,118290,118291],{},"直接在Powershell里输入wsl命令进入子系统",[38,118293,118295],{"className":118090,"code":118294,"language":118092,"meta":43,"style":43},"# 进入子系统\nwsl\n",[26,118296,118297,118302],{"__ignoreMap":43},[47,118298,118299],{"class":49,"line":50},[47,118300,118301],{},"# 进入子系统\n",[47,118303,118304],{"class":49,"line":92},[47,118305,118306],{},"wsl\n",[19,118308,118309],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,118311,118312],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,118314,118315],{},[1556,118316],{"alt":43,"src":118317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[187,118319,118321],{"id":118320},"_233-配置各种环境","2.3.3 配置各种环境",[22091,118323,118325],{"id":118324},"_2331-换源","2.3.3.1 换源",[19,118327,118328],{},"(同实体机LINUX，往下找教程)",[22091,118330,118332],{"id":118331},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23003,118334,118336],{"id":118335},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,118338,118339],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,118341,118342],{},[1556,118343],{"alt":43,"src":118344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,118346,118347],{},[1556,118348],{"alt":43,"src":118349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23003,118351,118353],{"id":118352},"_23322-cuda","2.3.3.2.2 CUDA",[19,118355,118356,118357],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[457,118358,118359],{"href":118359,"rel":118360},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[23956],[19,118362,118363,118366],{},[1556,118364],{"alt":43,"src":118365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[1556,118367],{"alt":43,"src":118368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,118370,118371],{},"在下方的网站，选择合适的版本。",[19,118373,118374,118375],{},"WSL2 专属 CUDA 指南：",[457,118376,118377],{"href":118377,"rel":118378},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[23956],[19,118380,118381],{},[369,118382,118383],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,118385,118386],{},[1556,118387],{"alt":43,"src":118388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,118390,118391],{},"挨行敲一遍",[19,118393,118394],{},[1556,118395],{"alt":43,"src":118396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,118398,118399,118400,118403],{},"敲完后，输入",[26,118401,118402],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,118405,118406],{},[1556,118407],{"alt":43,"src":118408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,118410,118411,118412,118415],{},"（请详看下方教程的",[369,118413,118414],{},"安装CUDA的配置环境来看","如何配置环境）",[23003,118417,118419],{"id":118418},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,118421,118328],{},[19,118423,118424],{},[1556,118425],{"alt":43,"src":118426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22091,118428,118430],{"id":118429},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,118432,118433],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,118435,118436],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,118438,118439],{},[1556,118440],{"alt":43,"src":118441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,118443,118444],{},"连接WSL2",[19,118446,118447],{},[1556,118448],{"alt":43,"src":118449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,118451,118452],{},"远程开发成功。",[19,118454,118455],{},[1556,118456],{"alt":43,"src":118457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,118459,118460],{},[1556,118461],{"alt":43,"src":118462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,118464,118465],{},[1556,118466],{"alt":43,"src":118467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22091,118469,118471],{"id":118470},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,118473,118474],{},[1556,118475],{"alt":43,"src":118476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22091,118478,118480],{"id":118479},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[38,118482,118484],{"className":117350,"code":118483,"language":117352,"meta":43,"style":43},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[26,118485,118486,118494,118502,118513,118517],{"__ignoreMap":43},[47,118487,118488,118490,118492],{"class":49,"line":50},[47,118489,78],{"class":53},[47,118491,117371],{"class":81},[47,118493,26296],{"class":81},[47,118495,118496,118498,118500],{"class":49,"line":92},[47,118497,78],{"class":53},[47,118499,117371],{"class":81},[47,118501,117387],{"class":81},[47,118503,118504,118506,118508,118510],{"class":49,"line":1273},[47,118505,78],{"class":53},[47,118507,117371],{"class":81},[47,118509,23925],{"class":81},[47,118511,118512],{"class":81}," mesa-utils\n",[47,118514,118515],{"class":49,"line":1288},[47,118516,2493],{"emptyLinePlaceholder":145},[47,118518,118519],{"class":49,"line":1294},[47,118520,118521],{"class":279},"#然后重启wsl2即可\n",[134,118523,118524],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":43,"searchDepth":92,"depth":92,"links":118526},[118527,118528,118533],{"id":117804,"depth":92,"text":117805},{"id":117817,"depth":92,"text":117818,"children":118529},[118530,118531,118532],{"id":117821,"depth":1273,"text":117822},{"id":117868,"depth":1273,"text":117869},{"id":117929,"depth":1273,"text":117930},{"id":117965,"depth":92,"text":117966,"children":118534},[118535,118536,118537],{"id":117969,"depth":1273,"text":117970},{"id":118031,"depth":1273,"text":118032},{"id":118320,"depth":1273,"text":118321},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117796,"description":142},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118544,"title":118545,"body":118546,"description":142,"extension":143,"meta":121482,"navigation":145,"path":121483,"seo":121484,"stem":121485,"__hash__":121486},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118547,"toc":121454},[118548,118551,118555,118561,118565,118571,118575,118763,118766,118771,118775,118779,118782,118785,118791,118796,118799,118802,118807,118840,118845,118849,118926,118929,118934,118938,118941,118980,118983,118992,119010,119015,119022,119139,119144,119147,119174,119179,119183,119192,119242,119249,119253,119256,119270,119277,119311,119316,119320,119343,119346,119351,119355,119358,119361,119364,119406,119410,119413,119416,119457,119461,119465,119468,119473,119478,119481,119504,119507,119515,119520,119523,119528,119533,119536,119541,119545,119550,119573,119578,119640,119648,119653,119658,119661,119666,119669,119674,119679,119697,119702,119708,119713,119727,119731,119734,119737,119740,119783,119786,119791,119892,119895,119900,119904,119908,119945,119949,119953,119957,120003,120007,120052,120056,120063,120071,120126,120129,120206,120209,120232,120236,120239,120244,120249,120257,120260,120265,120270,120275,120278,120283,120292,120295,120300,120303,120374,120379,120382,120387,120390,120395,120398,120403,120406,120411,120416,120419,120494,120497,120510,120515,120518,120532,120535,120564,120569,120598,120601,120606,120610,120615,120624,120627,120632,120635,120640,120643,120646,120651,120654,120659,120664,120667,120672,120675,120800,120805,120835,120838,120843,120848,120865,120868,120911,120914,120941,120946,120959,121102,121106,121111,121125,121128,121179,121182,121212,121215,121231,121236,121250,121253,121320,121325,121334,121339,121342,121354,121359,121366,121390,121393,121398,121401,121420,121425,121432,121444,121451],[10,118549,118545],{"id":118550},"_3-安装必备配置",[14,118552,118554],{"id":118553},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[38,118556,118559],{"className":118557,"code":118558,"language":5280},[5278],"  打开下方网站（注意，该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",[26,118560,118558],{"__ignoreMap":43},[187,118562,118564],{"id":118563},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[38,118566,118569],{"className":118567,"code":118568,"language":5280},[5278],"  输入以下命令\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",[26,118570,118568],{"__ignoreMap":43},[187,118572,118574],{"id":118573},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[38,118576,118580],{"className":118577,"code":118578,"language":118579,"meta":43,"style":43},"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",[26,118581,118582,118590,118601,118613,118627,118631,118641,118646,118650,118654,118659,118663,118675,118679,118684,118688,118699,118703,118719,118723,118734,118738,118743,118747,118755],{"__ignoreMap":43},[47,118583,118584,118586,118588],{"class":49,"line":50},[47,118585,78],{"class":53},[47,118587,117371],{"class":81},[47,118589,26296],{"class":81},[47,118591,118592,118594,118596,118598],{"class":49,"line":92},[47,118593,78],{"class":53},[47,118595,117371],{"class":81},[47,118597,23925],{"class":81},[47,118599,118600],{"class":81}," vim\n",[47,118602,118603,118605,118608,118610],{"class":49,"line":1273},[47,118604,78],{"class":53},[47,118606,118607],{"class":81}," rm",[47,118609,25379],{"class":85},[47,118611,118612],{"class":81}," \u002Fetc\u002Fapt\u002Fsources.list\n",[47,118614,118615,118617,118619,118621,118624],{"class":49,"line":1288},[47,118616,78],{"class":53},[47,118618,118607],{"class":81},[47,118620,25379],{"class":85},[47,118622,118623],{"class":81}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[47,118625,118626],{"class":85},"**\n",[47,118628,118629],{"class":49,"line":1294},[47,118630,2493],{"emptyLinePlaceholder":145},[47,118632,118633,118635,118638],{"class":49,"line":1308},[47,118634,78],{"class":53},[47,118636,118637],{"class":81}," vim",[47,118639,118640],{"class":81}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[47,118642,118643],{"class":49,"line":1314},[47,118644,118645],{"class":81},"```\n",[47,118647,118648],{"class":49,"line":1405},[47,118649,2493],{"emptyLinePlaceholder":145},[47,118651,118652],{"class":49,"line":1411},[47,118653,2493],{"emptyLinePlaceholder":145},[47,118655,118656],{"class":49,"line":1423},[47,118657,118658],{"class":53},"选择好Ubuntu版本后，复制下方的内容。\n",[47,118660,118661],{"class":49,"line":1706},[47,118662,2493],{"emptyLinePlaceholder":145},[47,118664,118665,118667,118670,118673],{"class":49,"line":1711},[47,118666,445],{"class":217},[47,118668,118669],{"class":81},"[](",[47,118671,118672],{"class":53},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[47,118674,228],{"class":81},[47,118676,118677],{"class":49,"line":1717},[47,118678,2493],{"emptyLinePlaceholder":145},[47,118680,118681],{"class":49,"line":1722},[47,118682,118683],{"class":53},"粘贴进去\n",[47,118685,118686],{"class":49,"line":1736},[47,118687,2493],{"emptyLinePlaceholder":145},[47,118689,118690,118692,118694,118697],{"class":49,"line":1741},[47,118691,445],{"class":217},[47,118693,118669],{"class":81},[47,118695,118696],{"class":53},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[47,118698,228],{"class":81},[47,118700,118701],{"class":49,"line":1747},[47,118702,2493],{"emptyLinePlaceholder":145},[47,118704,118705,118708,118711,118714,118716],{"class":49,"line":1768},[47,118706,118707],{"class":53},"按一下ESC，然后英文冒号，输入",[47,118709,118710],{"class":81}," `",[47,118712,118713],{"class":53},":wq!",[47,118715,1191],{"class":81},[47,118717,118718],{"class":53},"然后回车\n",[47,118720,118721],{"class":49,"line":1773},[47,118722,2493],{"emptyLinePlaceholder":145},[47,118724,118725,118727,118729,118732],{"class":49,"line":1787},[47,118726,445],{"class":217},[47,118728,118669],{"class":81},[47,118730,118731],{"class":53},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[47,118733,228],{"class":81},[47,118735,118736],{"class":49,"line":1792},[47,118737,2493],{"emptyLinePlaceholder":145},[47,118739,118740],{"class":49,"line":1821},[47,118741,118742],{"class":53},"输入以下命令\n",[47,118744,118745],{"class":49,"line":1826},[47,118746,2493],{"emptyLinePlaceholder":145},[47,118748,118749,118752],{"class":49,"line":1843},[47,118750,118751],{"class":81},"```",[47,118753,118754],{"class":53},"Bash\n",[47,118756,118757,118759,118761],{"class":49,"line":1848},[47,118758,78],{"class":53},[47,118760,117371],{"class":81},[47,118762,26296],{"class":81},[19,118764,118765],{},"这里被替换成对应学校则成功",[19,118767,118768],{},[1556,118769],{"alt":43,"src":118770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,118772,118774],{"id":118773},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[187,118776,118778],{"id":118777},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,118780,118781],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,118783,118784],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,118786,118787],{},[457,118788,118789],{"href":118789,"rel":118790},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[23956],[19,118792,118793],{},[1556,118794],{"alt":43,"src":118795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,118797,118798],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,118800,118801],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,118803,118804],{},[1556,118805],{"alt":43,"src":118806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[38,118808,118810],{"className":117350,"code":118809,"language":117352,"meta":43,"style":43},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[26,118811,118812,118817,118824,118829],{"__ignoreMap":43},[47,118813,118814],{"class":49,"line":50},[47,118815,118816],{"class":279},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[47,118818,118819,118821],{"class":49,"line":92},[47,118820,101330],{"class":85},[47,118822,118823],{"class":81}," ~\u002FDownloads\n",[47,118825,118826],{"class":49,"line":1273},[47,118827,118828],{"class":279},"#下方chrome安装包名不一定是这个，根据名字来看\n",[47,118830,118831,118833,118835,118837],{"class":49,"line":1288},[47,118832,78],{"class":53},[47,118834,117371],{"class":81},[47,118836,23925],{"class":81},[47,118838,118839],{"class":81}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,118841,118842],{},[1556,118843],{"alt":43,"src":118844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[187,118846,118848],{"id":118847},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[38,118850,118852],{"className":117350,"code":118851,"language":117352,"meta":43,"style":43},"# 老版\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",[26,118853,118854,118859,118867,118878,118883,118887,118892,118902,118910,118921],{"__ignoreMap":43},[47,118855,118856],{"class":49,"line":50},[47,118857,118858],{"class":279},"# 老版\n",[47,118860,118861,118863,118865],{"class":49,"line":92},[47,118862,78],{"class":53},[47,118864,117371],{"class":81},[47,118866,26296],{"class":81},[47,118868,118869,118871,118873,118875],{"class":49,"line":1273},[47,118870,78],{"class":53},[47,118872,117371],{"class":81},[47,118874,23925],{"class":81},[47,118876,118877],{"class":81}," neofetch\n",[47,118879,118880],{"class":49,"line":1288},[47,118881,118882],{"class":53},"neofetch\n",[47,118884,118885],{"class":49,"line":1294},[47,118886,2493],{"emptyLinePlaceholder":145},[47,118888,118889],{"class":49,"line":1308},[47,118890,118891],{"class":279},"# 新版\n",[47,118893,118894,118896,118899],{"class":49,"line":1314},[47,118895,78],{"class":53},[47,118897,118898],{"class":81}," add-apt-repository",[47,118900,118901],{"class":81}," ppa:zhangsongcui3371\u002Ffastfetch\n",[47,118903,118904,118906,118908],{"class":49,"line":1405},[47,118905,78],{"class":53},[47,118907,117371],{"class":81},[47,118909,26296],{"class":81},[47,118911,118912,118914,118916,118918],{"class":49,"line":1411},[47,118913,78],{"class":53},[47,118915,117371],{"class":81},[47,118917,23925],{"class":81},[47,118919,118920],{"class":81}," fastfetch\n",[47,118922,118923],{"class":49,"line":1423},[47,118924,118925],{"class":53},"fastfetch\n",[19,118927,118928],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,118930,118931],{},[1556,118932],{"alt":43,"src":118933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[187,118935,118937],{"id":118936},"_323-移除snap应用","3.2.3 移除snap应用",[19,118939,118940],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[38,118942,118944],{"className":117350,"code":118943,"language":117352,"meta":43,"style":43},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[26,118945,118946,118958,118969],{"__ignoreMap":43},[47,118947,118948,118950,118952,118955],{"class":49,"line":50},[47,118949,78],{"class":53},[47,118951,26567],{"class":81},[47,118953,118954],{"class":81}," disable",[47,118956,118957],{"class":81}," snapd.service\n",[47,118959,118960,118962,118964,118966],{"class":49,"line":92},[47,118961,78],{"class":53},[47,118963,26567],{"class":81},[47,118965,118954],{"class":81},[47,118967,118968],{"class":81}," snapd.socket\n",[47,118970,118971,118973,118975,118977],{"class":49,"line":1273},[47,118972,78],{"class":53},[47,118974,26567],{"class":81},[47,118976,118954],{"class":81},[47,118978,118979],{"class":81}," snapd.seeded.service\n",[19,118981,118982],{},"然后查看snap应用列表",[19,118984,118985,118986,118991],{},"根据你安装的选择不同（最小安装或普通安装），有",[457,118987,118990],{"href":118988,"rel":118989},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[23956],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[38,118993,118995],{"className":117350,"code":118994,"language":117352,"meta":43,"style":43},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[26,118996,118997,119002],{"__ignoreMap":43},[47,118998,118999],{"class":49,"line":50},[47,119000,119001],{"class":279},"# 查询当前系统上snap安装了哪些app\n",[47,119003,119004,119007],{"class":49,"line":92},[47,119005,119006],{"class":53},"snap",[47,119008,119009],{"class":81}," list\n",[19,119011,119012],{},[1556,119013],{"alt":43,"src":119014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,119016,119017,119018,119021],{},"卸载掉图中所有应用，按照 ",[369,119019,119020],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[38,119023,119025],{"className":117350,"code":119024,"language":117352,"meta":43,"style":43},"#移除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",[26,119026,119027,119032,119044,119049,119060,119065,119076,119081,119092,119097,119101,119106,119117,119128],{"__ignoreMap":43},[47,119028,119029],{"class":49,"line":50},[47,119030,119031],{"class":279},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[47,119033,119034,119036,119039,119041],{"class":49,"line":92},[47,119035,78],{"class":53},[47,119037,119038],{"class":81}," snap",[47,119040,26133],{"class":81},[47,119042,119043],{"class":81}," snap-store\n",[47,119045,119046],{"class":49,"line":1273},[47,119047,119048],{"class":279},"#移除firefox浏览器\n",[47,119050,119051,119053,119055,119057],{"class":49,"line":1288},[47,119052,78],{"class":53},[47,119054,119038],{"class":81},[47,119056,26133],{"class":81},[47,119058,119059],{"class":81}," firefox\n",[47,119061,119062],{"class":49,"line":1294},[47,119063,119064],{"class":279},"#移除gnome-42-2204\n",[47,119066,119067,119069,119071,119073],{"class":49,"line":1308},[47,119068,78],{"class":53},[47,119070,119038],{"class":81},[47,119072,26133],{"class":81},[47,119074,119075],{"class":81}," gnome-42-2204\n",[47,119077,119078],{"class":49,"line":1314},[47,119079,119080],{"class":279},"#移除gtk-common-themes\n",[47,119082,119083,119085,119087,119089],{"class":49,"line":1405},[47,119084,78],{"class":53},[47,119086,119038],{"class":81},[47,119088,26133],{"class":81},[47,119090,119091],{"class":81}," gtk-common-themes\n",[47,119093,119094],{"class":49,"line":1411},[47,119095,119096],{"class":279},"#移除其它...\n",[47,119098,119099],{"class":49,"line":1423},[47,119100,2767],{"class":221},[47,119102,119103],{"class":49,"line":1706},[47,119104,119105],{"class":279},"#移除core22,bare以及snapd\n",[47,119107,119108,119110,119112,119114],{"class":49,"line":1711},[47,119109,78],{"class":53},[47,119111,119038],{"class":81},[47,119113,26133],{"class":81},[47,119115,119116],{"class":81}," core22\n",[47,119118,119119,119121,119123,119125],{"class":49,"line":1717},[47,119120,78],{"class":53},[47,119122,119038],{"class":81},[47,119124,26133],{"class":81},[47,119126,119127],{"class":81}," bare\n",[47,119129,119130,119132,119134,119136],{"class":49,"line":1722},[47,119131,78],{"class":53},[47,119133,119038],{"class":81},[47,119135,26133],{"class":81},[47,119137,119138],{"class":81}," snapd\n",[19,119140,119141],{},[1556,119142],{"alt":43,"src":119143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,119145,119146],{},"输入以下命令查看是否还有snap包",[38,119148,119150],{"className":117350,"code":119149,"language":117352,"meta":43,"style":43},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[26,119151,119152,119158,119162,119166,119170],{"__ignoreMap":43},[47,119153,119154,119156],{"class":49,"line":50},[47,119155,119006],{"class":53},[47,119157,119009],{"class":81},[47,119159,119160],{"class":49,"line":92},[47,119161,118858],{"class":279},[47,119163,119164],{"class":49,"line":1273},[47,119165,118882],{"class":53},[47,119167,119168],{"class":49,"line":1288},[47,119169,118891],{"class":279},[47,119171,119172],{"class":49,"line":1294},[47,119173,118925],{"class":53},[19,119175,119176],{},[1556,119177],{"alt":43,"src":119178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[187,119180,119182],{"id":119181},"_324-移除snap","3.2.4 移除snap",[19,119184,119185,119186,119191],{},"在删除掉",[457,119187,119190],{"href":119188,"rel":119189},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[23956],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[38,119193,119195],{"className":117350,"code":119194,"language":117352,"meta":43,"style":43}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[26,119196,119197,119202,119215,119220,119231],{"__ignoreMap":43},[47,119198,119199],{"class":49,"line":50},[47,119200,119201],{"class":279}," #使用apt移除掉snap\n",[47,119203,119204,119206,119208,119210,119213],{"class":49,"line":92},[47,119205,78],{"class":53},[47,119207,117371],{"class":81},[47,119209,117679],{"class":81},[47,119211,119212],{"class":85}," --purge",[47,119214,119138],{"class":81},[47,119216,119217],{"class":49,"line":1273},[47,119218,119219],{"class":279},"#移除snapd的一些目录\n",[47,119221,119222,119224,119226,119228],{"class":49,"line":1288},[47,119223,78],{"class":53},[47,119225,118607],{"class":81},[47,119227,25379],{"class":85},[47,119229,119230],{"class":81}," \u002Fvar\u002Fcache\u002Fsnapd\n",[47,119232,119233,119235,119237,119239],{"class":49,"line":1294},[47,119234,78],{"class":53},[47,119236,118607],{"class":81},[47,119238,25379],{"class":85},[47,119240,119241],{"class":81}," ~\u002Fsnap\n",[19,119243,119244,119245,119248],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[26,119246,119247],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[187,119250,119252],{"id":119251},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,119254,119255],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[38,119257,119259],{"className":117350,"code":119258,"language":117352,"meta":43,"style":43},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[26,119260,119261],{"__ignoreMap":43},[47,119262,119263,119265,119267],{"class":49,"line":50},[47,119264,78],{"class":53},[47,119266,118637],{"class":81},[47,119268,119269],{"class":81}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,119271,119272,119273,119276],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[26,119274,119275],{},":wq"," 回车",[38,119278,119280],{"className":117350,"code":119279,"language":117352,"meta":43,"style":43},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[26,119281,119282,119289,119303],{"__ignoreMap":43},[47,119283,119284,119287],{"class":49,"line":50},[47,119285,119286],{"class":53},"Package:",[47,119288,119138],{"class":81},[47,119290,119291,119294,119297,119300],{"class":49,"line":92},[47,119292,119293],{"class":53},"Pin:",[47,119295,119296],{"class":81}," release",[47,119298,119299],{"class":81}," a=",[47,119301,119302],{"class":85},"*\n",[47,119304,119305,119308],{"class":49,"line":1273},[47,119306,119307],{"class":53},"Pin-Priority:",[47,119309,119310],{"class":85}," -10\n",[19,119312,119313],{},[1556,119314],{"alt":43,"src":119315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[187,119317,119319],{"id":119318},"_326-测试是否成功","3.2.6 测试是否成功",[38,119321,119323],{"className":117350,"code":119322,"language":117352,"meta":43,"style":43},"sudo apt update\nsudo apt install firefox\n",[26,119324,119325,119333],{"__ignoreMap":43},[47,119326,119327,119329,119331],{"class":49,"line":50},[47,119328,78],{"class":53},[47,119330,117371],{"class":81},[47,119332,26296],{"class":81},[47,119334,119335,119337,119339,119341],{"class":49,"line":92},[47,119336,78],{"class":53},[47,119338,117371],{"class":81},[47,119340,23925],{"class":81},[47,119342,119059],{"class":81},[19,119344,119345],{},"这里提示snapd无法被安装，就证明成功了",[19,119347,119348],{},[1556,119349],{"alt":43,"src":119350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[187,119352,119354],{"id":119353},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,119356,119357],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,119359,119360],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,119362,119363],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[38,119365,119367],{"className":117350,"code":119366,"language":117352,"meta":43,"style":43},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[26,119368,119369,119374,119383,119388,119396],{"__ignoreMap":43},[47,119370,119371],{"class":49,"line":50},[47,119372,119373],{"class":279},"# 添加Mozilla提供的源\n",[47,119375,119376,119378,119380],{"class":49,"line":92},[47,119377,78],{"class":53},[47,119379,118898],{"class":81},[47,119381,119382],{"class":81}," ppa:mozillateam\u002Fppa\n",[47,119384,119385],{"class":49,"line":1273},[47,119386,119387],{"class":279},"# 安装Firefox\n",[47,119389,119390,119392,119394],{"class":49,"line":1288},[47,119391,78],{"class":53},[47,119393,117371],{"class":81},[47,119395,26296],{"class":81},[47,119397,119398,119400,119402,119404],{"class":49,"line":1294},[47,119399,78],{"class":53},[47,119401,117371],{"class":81},[47,119403,23925],{"class":81},[47,119405,119059],{"class":81},[187,119407,119409],{"id":119408},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,119411,119412],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,119414,119415],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[38,119417,119419],{"className":117350,"code":119418,"language":117352,"meta":43,"style":43},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[26,119420,119421,119426,119436,119444,119448],{"__ignoreMap":43},[47,119422,119423],{"class":49,"line":50},[47,119424,119425],{"class":279},"#删掉禁止安装snap的配置文件\n",[47,119427,119428,119430,119432,119434],{"class":49,"line":92},[47,119429,78],{"class":53},[47,119431,118607],{"class":81},[47,119433,25379],{"class":85},[47,119435,119269],{"class":81},[47,119437,119438,119440,119442],{"class":49,"line":1273},[47,119439,78],{"class":53},[47,119441,117371],{"class":81},[47,119443,26296],{"class":81},[47,119445,119446],{"class":49,"line":1288},[47,119447,2493],{"emptyLinePlaceholder":145},[47,119449,119450,119452,119454],{"class":49,"line":1294},[47,119451,78],{"class":53},[47,119453,117371],{"class":81},[47,119455,119456],{"class":81}," dist-update\n",[14,119458,119460],{"id":119459},"_33-中文输入法","3.3 中文输入法",[187,119462,119464],{"id":119463},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,119466,119467],{},"官网下载搜狗输入法",[19,119469,119470],{},[1556,119471],{"alt":43,"src":119472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,119474,119475],{},[1556,119476],{"alt":43,"src":119477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,119479,119480],{},"打开终端输入如下",[38,119482,119484],{"className":117350,"code":119483,"language":117352,"meta":43,"style":43},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[26,119485,119486,119493],{"__ignoreMap":43},[47,119487,119488,119490],{"class":49,"line":50},[47,119489,101330],{"class":85},[47,119491,119492],{"class":81}," ~\u002FDownloads\u002F\n",[47,119494,119495,119497,119499,119501],{"class":49,"line":92},[47,119496,78],{"class":53},[47,119498,117371],{"class":81},[47,119500,23925],{"class":81},[47,119502,119503],{"class":81}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,119505,119506],{},"打开Fcitx",[19,119508,119509,119512],{},[1556,119510],{"alt":43,"src":119511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[1556,119513],{"alt":43,"src":119514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,119516,119517],{},[1556,119518],{"alt":43,"src":119519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,119521,119522],{},"添加搜狗输入法",[19,119524,119525],{},[1556,119526],{"alt":43,"src":119527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,119529,119530],{},[1556,119531],{"alt":43,"src":119532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,119534,119535],{},"将搜狗输入法设置为唯一输入法",[19,119537,119538],{},[1556,119539],{"alt":43,"src":119540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[187,119542,119544],{"id":119543},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[171,119546,119547],{},[109,119548,119549],{},"卸载旧输入法",[38,119551,119553],{"className":118577,"code":119552,"language":118579,"meta":43,"style":43},"sudo apt purge fcitx* ibus*\n",[26,119554,119555],{"__ignoreMap":43},[47,119556,119557,119559,119561,119563,119566,119568,119571],{"class":49,"line":50},[47,119558,78],{"class":53},[47,119560,117371],{"class":81},[47,119562,117712],{"class":81},[47,119564,119565],{"class":81}," fcitx",[47,119567,674],{"class":85},[47,119569,119570],{"class":81}," ibus",[47,119572,119302],{"class":85},[171,119574,119575],{"start":92},[109,119576,119577],{},"安装Fcitx5",[38,119579,119581],{"className":117350,"code":119580,"language":117352,"meta":43,"style":43},"# 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",[26,119582,119583,119588,119602,119606,119611,119620,119628],{"__ignoreMap":43},[47,119584,119585],{"class":49,"line":50},[47,119586,119587],{"class":279},"# Ubuntu22.04及以上、Debian12及以上\n",[47,119589,119590,119592,119594,119596,119599],{"class":49,"line":92},[47,119591,78],{"class":53},[47,119593,117371],{"class":81},[47,119595,23925],{"class":81},[47,119597,119598],{"class":81}," fcitx5",[47,119600,119601],{"class":81}," fcitx5-chinese-addons\n",[47,119603,119604],{"class":49,"line":1273},[47,119605,2493],{"emptyLinePlaceholder":145},[47,119607,119608],{"class":49,"line":1288},[47,119609,119610],{"class":279},"# Ubuntu20.04\n",[47,119612,119613,119615,119617],{"class":49,"line":1294},[47,119614,78],{"class":53},[47,119616,118898],{"class":81},[47,119618,119619],{"class":81}," ppa:zhsj\u002Ffcitx5\n",[47,119621,119622,119624,119626],{"class":49,"line":1308},[47,119623,78],{"class":53},[47,119625,117371],{"class":81},[47,119627,26296],{"class":81},[47,119629,119630,119632,119634,119636,119638],{"class":49,"line":1314},[47,119631,78],{"class":53},[47,119633,117371],{"class":81},[47,119635,23925],{"class":81},[47,119637,119598],{"class":81},[47,119639,119601],{"class":81},[171,119641,119642,119645],{"start":1273},[109,119643,119644],{},"Reboot System",[109,119646,119647],{},"启动Fcitx5",[19,119649,119650],{},[1556,119651],{"alt":43,"src":119652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[171,119654,119655],{"start":1294},[109,119656,119657],{},"修改一些设置",[19,119659,119660],{},"将Pinyin和Keyboard - English US加入到左边。",[19,119662,119663],{},[1556,119664],{"alt":43,"src":119665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,119667,119668],{},"添加快捷键以便于更好切换中英文",[19,119670,119671],{},[1556,119672],{"alt":43,"src":119673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[171,119675,119676],{"start":1308},[109,119677,119678],{},"重启",[38,119680,119682],{"className":118577,"code":119681,"language":118579,"meta":43,"style":43},"sudo shutdown -r now\n",[26,119683,119684],{"__ignoreMap":43},[47,119685,119686,119688,119691,119694],{"class":49,"line":50},[47,119687,78],{"class":53},[47,119689,119690],{"class":81}," shutdown",[47,119692,119693],{"class":85}," -r",[47,119695,119696],{"class":81}," now\n",[171,119698,119699],{"start":1314},[109,119700,119701],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,119703,119704],{},[457,119705,119706],{"href":119706,"rel":119707},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[23956],[171,119709,119710],{"start":1405},[109,119711,119712],{},"再重启",[38,119714,119715],{"className":118577,"code":119681,"language":118579,"meta":43,"style":43},[26,119716,119717],{"__ignoreMap":43},[47,119718,119719,119721,119723,119725],{"class":49,"line":50},[47,119720,78],{"class":53},[47,119722,119690],{"class":81},[47,119724,119693],{"class":85},[47,119726,119696],{"class":81},[14,119728,119730],{"id":119729},"_34-pip3源替换","3.4 pip3源替换",[19,119732,119733],{},"非Debian系发行版需要做。",[19,119735,119736],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,119738,119739],{},"使用dnf的系统也可能不用做。",[38,119741,119743],{"className":117350,"code":119742,"language":117352,"meta":43,"style":43},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[26,119744,119745,119750,119757,119762,119767],{"__ignoreMap":43},[47,119746,119747],{"class":49,"line":50},[47,119748,119749],{"class":279},"# 检查是否已安装 pip\n",[47,119751,119752,119755],{"class":49,"line":92},[47,119753,119754],{"class":53},"pip3",[47,119756,26347],{"class":85},[47,119758,119759],{"class":49,"line":1273},[47,119760,119761],{"class":279},"# 如果未安装，先安装 pip3（见下方）\n",[47,119763,119764],{"class":49,"line":1288},[47,119765,119766],{"class":279},"# 配置 pip 使用清华源\n",[47,119768,119769,119771,119774,119777,119780],{"class":49,"line":1294},[47,119770,119754],{"class":53},[47,119772,119773],{"class":81}," config",[47,119775,119776],{"class":81}," set",[47,119778,119779],{"class":81}," global.index-url",[47,119781,119782],{"class":81}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,119784,119785],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,119787,119788],{},[1556,119789],{"alt":43,"src":119790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[38,119792,119794],{"className":117350,"code":119793,"language":117352,"meta":43,"style":43},"#安装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",[26,119795,119796,119801,119809,119820,119824,119829,119848,119852,119857,119869,119873,119878],{"__ignoreMap":43},[47,119797,119798],{"class":49,"line":50},[47,119799,119800],{"class":279},"#安装pip3\n",[47,119802,119803,119805,119807],{"class":49,"line":92},[47,119804,78],{"class":53},[47,119806,117371],{"class":81},[47,119808,26296],{"class":81},[47,119810,119811,119813,119815,119817],{"class":49,"line":1273},[47,119812,78],{"class":53},[47,119814,26130],{"class":81},[47,119816,23925],{"class":81},[47,119818,119819],{"class":81}," python3-pip\n",[47,119821,119822],{"class":49,"line":1288},[47,119823,2493],{"emptyLinePlaceholder":145},[47,119825,119826],{"class":49,"line":1294},[47,119827,119828],{"class":279},"#更新pip3\n",[47,119830,119831,119833,119835,119837,119839,119841,119844,119846],{"class":49,"line":1308},[47,119832,100933],{"class":53},[47,119834,100936],{"class":85},[47,119836,100959],{"class":81},[47,119838,23925],{"class":81},[47,119840,26484],{"class":85},[47,119842,119843],{"class":81}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[47,119845,100964],{"class":85},[47,119847,100967],{"class":81},[47,119849,119850],{"class":49,"line":1314},[47,119851,2493],{"emptyLinePlaceholder":145},[47,119853,119854],{"class":49,"line":1405},[47,119855,119856],{"class":279},"#设置pip源为清华源\n",[47,119858,119859,119861,119863,119865,119867],{"class":49,"line":1411},[47,119860,119754],{"class":53},[47,119862,119773],{"class":81},[47,119864,119776],{"class":81},[47,119866,119779],{"class":81},[47,119868,119782],{"class":81},[47,119870,119871],{"class":49,"line":1423},[47,119872,2493],{"emptyLinePlaceholder":145},[47,119874,119875],{"class":49,"line":1706},[47,119876,119877],{"class":279},"#测试\n",[47,119879,119880,119882,119884,119886,119888,119890],{"class":49,"line":1711},[47,119881,100933],{"class":53},[47,119883,100936],{"class":85},[47,119885,100959],{"class":81},[47,119887,23925],{"class":81},[47,119889,100964],{"class":85},[47,119891,100967],{"class":81},[19,119893,119894],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,119896,119897],{},[1556,119898],{"alt":43,"src":119899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,119901,119903],{"id":119902},"_35-显卡驱动安装","3.5 显卡驱动安装",[187,119905,119907],{"id":119906},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[38,119909,119911],{"className":118577,"code":119910,"language":118579,"meta":43,"style":43},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[26,119912,119913,119918,119933,119938],{"__ignoreMap":43},[47,119914,119915],{"class":49,"line":50},[47,119916,119917],{"class":279},"# 如果是使用apt安装的驱动\n",[47,119919,119920,119922,119924,119926,119928,119931],{"class":49,"line":92},[47,119921,78],{"class":53},[47,119923,26130],{"class":81},[47,119925,26133],{"class":81},[47,119927,119212],{"class":85},[47,119929,119930],{"class":81}," nvidia",[47,119932,119302],{"class":85},[47,119934,119935],{"class":49,"line":1273},[47,119936,119937],{"class":279},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[47,119939,119940,119942],{"class":49,"line":1288},[47,119941,78],{"class":53},[47,119943,119944],{"class":81}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[187,119946,119948],{"id":119947},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22091,119950,119952],{"id":119951},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23003,119954,119956],{"id":119955},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[38,119958,119960],{"className":118577,"code":119959,"language":118579,"meta":43,"style":43},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[26,119961,119962,119967,119978,119983,119993,119998],{"__ignoreMap":43},[47,119963,119964],{"class":49,"line":50},[47,119965,119966],{"class":279},"# 安装英伟达驱动\n",[47,119968,119969,119971,119973,119975],{"class":49,"line":92},[47,119970,78],{"class":53},[47,119972,117371],{"class":81},[47,119974,23925],{"class":81},[47,119976,119977],{"class":81}," nvidia-driver-版本号\n",[47,119979,119980],{"class":49,"line":1273},[47,119981,119982],{"class":279},"# 重启 \n",[47,119984,119985,119987,119989,119991],{"class":49,"line":1288},[47,119986,78],{"class":53},[47,119988,119690],{"class":81},[47,119990,119693],{"class":85},[47,119992,119696],{"class":81},[47,119994,119995],{"class":49,"line":1294},[47,119996,119997],{"class":279},"# 检查驱动是否安装成功\n",[47,119999,120000],{"class":49,"line":1308},[47,120001,120002],{"class":53},"nvidia-smi\n",[23003,120004,120006],{"id":120005},"_35212-debian","3.5.2.1.2 Debian",[38,120008,120010],{"className":118577,"code":120009,"language":118579,"meta":43,"style":43},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[26,120011,120012,120016,120030,120034,120044,120048],{"__ignoreMap":43},[47,120013,120014],{"class":49,"line":50},[47,120015,119966],{"class":279},[47,120017,120018,120020,120022,120024,120027],{"class":49,"line":92},[47,120019,78],{"class":53},[47,120021,117371],{"class":81},[47,120023,23925],{"class":81},[47,120025,120026],{"class":81}," nvidia-driver",[47,120028,120029],{"class":81}," nvidia-settings\n",[47,120031,120032],{"class":49,"line":1273},[47,120033,119982],{"class":279},[47,120035,120036,120038,120040,120042],{"class":49,"line":1288},[47,120037,78],{"class":53},[47,120039,119690],{"class":81},[47,120041,119693],{"class":85},[47,120043,119696],{"class":81},[47,120045,120046],{"class":49,"line":1294},[47,120047,119997],{"class":279},[47,120049,120050],{"class":49,"line":1308},[47,120051,120002],{"class":53},[22091,120053,120055],{"id":120054},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,120057,120058,120059,120062],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[369,120060,120061],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,120064,120065,120066],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23646,120067,120068],{},[369,120069,120070],{},"（也可以不禁用桌面环境，直接进行下一步。）",[38,120072,120074],{"className":118577,"code":120073,"language":118579,"meta":43,"style":43},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[26,120075,120076,120081,120091,120096,120109,120114],{"__ignoreMap":43},[47,120077,120078],{"class":49,"line":50},[47,120079,120080],{"class":279},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[47,120082,120083,120085,120088],{"class":49,"line":92},[47,120084,78],{"class":53},[47,120086,120087],{"class":81}," telinit",[47,120089,120090],{"class":85}," 3\n",[47,120092,120093],{"class":49,"line":1273},[47,120094,120095],{"class":279},"# ubuntu 使用下方命令\n",[47,120097,120098,120100,120103,120106],{"class":49,"line":1288},[47,120099,78],{"class":53},[47,120101,120102],{"class":81}," service",[47,120104,120105],{"class":81}," lightdm",[47,120107,120108],{"class":81}," stop\n",[47,120110,120111],{"class":49,"line":1294},[47,120112,120113],{"class":279},"# Fedora 使用下方命令\n",[47,120115,120116,120118,120120,120123],{"class":49,"line":1308},[47,120117,78],{"class":53},[47,120119,26567],{"class":81},[47,120121,120122],{"class":81}," isolate",[47,120124,120125],{"class":81}," multi-user.target\n",[19,120127,120128],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[38,120130,120132],{"className":118577,"code":120131,"language":118579,"meta":43,"style":43},"# 编译环境+准备工作\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",[26,120133,120134,120139,120150,120155,120162,120167,120179,120184,120191,120196],{"__ignoreMap":43},[47,120135,120136],{"class":49,"line":50},[47,120137,120138],{"class":279},"# 编译环境+准备工作\n",[47,120140,120141,120143,120145,120147],{"class":49,"line":92},[47,120142,78],{"class":53},[47,120144,117371],{"class":81},[47,120146,23925],{"class":81},[47,120148,120149],{"class":81}," build-essential\n",[47,120151,120152],{"class":49,"line":1273},[47,120153,120154],{"class":279},"# 进入到.run目录中\n",[47,120156,120157,120159],{"class":49,"line":1288},[47,120158,101330],{"class":85},[47,120160,120161],{"class":81}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[47,120163,120164],{"class":49,"line":1294},[47,120165,120166],{"class":279},"# 给驱动文件增加可执行权限：\n",[47,120168,120169,120171,120173,120176],{"class":49,"line":1308},[47,120170,78],{"class":53},[47,120172,82],{"class":81},[47,120174,120175],{"class":81}," a+x",[47,120177,120178],{"class":81}," NVIDIA-Linux-x86_64-550.107.02.run\n",[47,120180,120181],{"class":49,"line":1314},[47,120182,120183],{"class":279},"# 然后执行安装：\n",[47,120185,120186,120188],{"class":49,"line":1405},[47,120187,78],{"class":53},[47,120189,120190],{"class":81}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[47,120192,120193],{"class":49,"line":1411},[47,120194,120195],{"class":279},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[47,120197,120198,120200,120203],{"class":49,"line":1423},[47,120199,78],{"class":53},[47,120201,120202],{"class":81}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[47,120204,120205],{"class":85},"  --no-opengl-files\n",[19,120207,120208],{},"安装完毕重启即可",[38,120210,120212],{"className":118577,"code":120211,"language":118579,"meta":43,"style":43},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[26,120213,120214,120218,120224,120228],{"__ignoreMap":43},[47,120215,120216],{"class":49,"line":50},[47,120217,119982],{"class":279},[47,120219,120220,120222],{"class":49,"line":92},[47,120221,78],{"class":53},[47,120223,26701],{"class":81},[47,120225,120226],{"class":49,"line":1273},[47,120227,119997],{"class":279},[47,120229,120230],{"class":49,"line":1288},[47,120231,120002],{"class":53},[187,120233,120235],{"id":120234},"_353-安装cuda","3.5.3 安装CUDA",[19,120237,120238],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,120240,120241],{},[1556,120242],{"alt":43,"src":120243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[171,120245,120246],{},[109,120247,120248],{},"先查看显卡驱动所支持的最高CUDA版本",[38,120250,120251],{"className":118577,"code":120002,"language":118579,"meta":43,"style":43},[26,120252,120253],{"__ignoreMap":43},[47,120254,120255],{"class":49,"line":50},[47,120256,120002],{"class":53},[19,120258,120259],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,120261,120262],{},[1556,120263],{"alt":43,"src":120264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[171,120266,120267],{"start":92},[109,120268,120269],{},"下载CUDA并安装CUDA",[19,120271,118356,120272],{},[457,120273,118359],{"href":118359,"rel":120274},[23956],[19,120276,120277],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,120279,120280],{},[1556,120281],{"alt":43,"src":120282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,120284,120285,120286,120291],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[457,120287,120290],{"href":120288,"rel":120289},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[23956],"Vinci机器人队单片机教程","）",[19,120293,120294],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,120296,120297],{},[1556,120298],{"alt":43,"src":120299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,120301,120302],{},"将最下方框框里的命令敲入终端",[38,120304,120306],{"className":118577,"code":120305,"language":118579,"meta":43,"style":43},"# 在当前文件夹下创建一个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",[26,120307,120308,120313,120322,120327,120334,120339,120347,120352,120363,120368],{"__ignoreMap":43},[47,120309,120310],{"class":49,"line":50},[47,120311,120312],{"class":279},"# 在当前文件夹下创建一个ttt的子文件夹\n",[47,120314,120315,120317,120319],{"class":49,"line":92},[47,120316,101320],{"class":53},[47,120318,29270],{"class":85},[47,120320,120321],{"class":81}," .\u002Fttt\n",[47,120323,120324],{"class":49,"line":1273},[47,120325,120326],{"class":279},"# 进入ttt文件夹\n",[47,120328,120329,120331],{"class":49,"line":1288},[47,120330,101330],{"class":85},[47,120332,120333],{"class":81}," ttt\n",[47,120335,120336],{"class":49,"line":1294},[47,120337,120338],{"class":279},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[47,120340,120341,120344],{"class":49,"line":1308},[47,120342,120343],{"class":53},"wget",[47,120345,120346],{"class":81}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[47,120348,120349],{"class":49,"line":1314},[47,120350,120351],{"class":279},"# 给予权限\n",[47,120353,120354,120356,120358,120360],{"class":49,"line":1405},[47,120355,78],{"class":53},[47,120357,82],{"class":81},[47,120359,120175],{"class":81},[47,120361,120362],{"class":81}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[47,120364,120365],{"class":49,"line":1411},[47,120366,120367],{"class":279},"# 运行脚本\n",[47,120369,120370,120372],{"class":49,"line":1423},[47,120371,78],{"class":53},[47,120373,120362],{"class":81},[19,120375,120376],{},[1556,120377],{"alt":43,"src":120378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,120380,120381],{},"正在安装中：",[19,120383,120384],{},[1556,120385],{"alt":43,"src":120386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,120388,120389],{},"输入accept接受即可",[19,120391,120392],{},[1556,120393],{"alt":43,"src":120394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,120396,120397],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,120399,120400],{},[1556,120401],{"alt":43,"src":120402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,120404,120405],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,120407,120408],{},[1556,120409],{"alt":43,"src":120410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[171,120412,120413],{"start":1273},[109,120414,120415],{},"配置环境",[19,120417,120418],{},"根据上方确认一下路径，比如我上面红色框起来的为",[38,120420,120422],{"className":118577,"code":120421,"language":118579,"meta":43,"style":43},"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",[26,120423,120424,120440,120455],{"__ignoreMap":43},[47,120425,120426,120429,120432,120435,120438],{"class":49,"line":50},[47,120427,120428],{"class":53},"Please",[47,120430,120431],{"class":81}," make",[47,120433,120434],{"class":81}," sure",[47,120436,120437],{"class":81}," that",[47,120439,2767],{"class":221},[47,120441,120442,120444,120447,120450,120453],{"class":49,"line":92},[47,120443,52325],{"class":53},[47,120445,120446],{"class":81},"   PATH",[47,120448,120449],{"class":81}," includes",[47,120451,120452],{"class":81}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[47,120454,2767],{"class":221},[47,120456,120457,120459,120462,120464,120467,120470,120472,120475,120478,120481,120484,120486,120489,120491],{"class":49,"line":1273},[47,120458,52325],{"class":53},[47,120460,120461],{"class":81},"   LD_LIBRARY_PATH",[47,120463,120449],{"class":81},[47,120465,120466],{"class":81}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[47,120468,120469],{"class":81}," or,",[47,120471,5302],{"class":81},[47,120473,120474],{"class":81}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[47,120476,120477],{"class":81}," to",[47,120479,120480],{"class":81}," \u002Fetc\u002Fld.so.conf",[47,120482,120483],{"class":81}," and",[47,120485,27284],{"class":81},[47,120487,120488],{"class":81}," ldconfig",[47,120490,64658],{"class":81},[47,120492,120493],{"class":81}," root\n",[19,120495,120496],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[38,120498,120500],{"className":118577,"code":120499,"language":118579,"meta":43,"style":43},"which nvcc\n",[26,120501,120502],{"__ignoreMap":43},[47,120503,120504,120507],{"class":49,"line":50},[47,120505,120506],{"class":85},"which",[47,120508,120509],{"class":81}," nvcc\n",[19,120511,120512],{},[1556,120513],{"alt":43,"src":120514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,120516,120517],{},"所以我进行以下操作：",[38,120519,120521],{"className":118577,"code":120520,"language":118579,"meta":43,"style":43},"sudo vim ~\u002F.bashrc\n",[26,120522,120523],{"__ignoreMap":43},[47,120524,120525,120527,120529],{"class":49,"line":50},[47,120526,78],{"class":53},[47,120528,118637],{"class":81},[47,120530,120531],{"class":81}," ~\u002F.bashrc\n",[19,120533,120534],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[38,120536,120538],{"className":118577,"code":120537,"language":118579,"meta":43,"style":43},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[26,120539,120540,120552],{"__ignoreMap":43},[47,120541,120542,120544,120547,120549],{"class":49,"line":50},[47,120543,25096],{"class":217},[47,120545,120546],{"class":221}," PATH",[47,120548,267],{"class":217},[47,120550,120551],{"class":221},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[47,120553,120554,120556,120559,120561],{"class":49,"line":92},[47,120555,25096],{"class":217},[47,120557,120558],{"class":221}," LD_LIBRARY_PATH",[47,120560,267],{"class":217},[47,120562,120563],{"class":221},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,120565,120566],{},[1556,120567],{"alt":43,"src":120568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[38,120570,120572],{"className":118577,"code":120571,"language":118579,"meta":43,"style":43},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[26,120573,120574,120579,120585,120590],{"__ignoreMap":43},[47,120575,120576],{"class":49,"line":50},[47,120577,120578],{"class":279},"# 刷新当前终端的环境变量\n",[47,120580,120581,120583],{"class":49,"line":92},[47,120582,100947],{"class":85},[47,120584,120531],{"class":81},[47,120586,120587],{"class":49,"line":1273},[47,120588,120589],{"class":279},"# 验证CUDA是否安装成功\n",[47,120591,120592,120595],{"class":49,"line":1288},[47,120593,120594],{"class":53},"nvcc",[47,120596,120597],{"class":85}," -V\n",[19,120599,120600],{},"出现下图这种则安装成功。",[19,120602,120603],{},[1556,120604],{"alt":43,"src":120605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[187,120607,120609],{"id":120608},"_354-安装cudnn","3.5.4 安装cuDNN",[171,120611,120612],{},[109,120613,120614],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,120616,120617,120618,120623],{},"前往 NVIDIA cuDNN 下载页面：",[457,120619,120622],{"href":120620,"rel":120621},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[23956],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,120625,120626],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,120628,120629],{},[1556,120630],{"alt":43,"src":120631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,120633,120634],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,120636,120637],{},[1556,120638],{"alt":43,"src":120639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,120641,120642],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,120644,120645],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,120647,120648],{},[369,120649,120650],{},"我这里选择所有Linux X86_64最通用的办法：",[19,120652,120653],{},"下载好的：",[19,120655,120656],{},[1556,120657],{"alt":43,"src":120658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[171,120660,120661],{"start":92},[109,120662,120663],{},"安装cuDNN",[19,120665,120666],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,120668,120669],{},[1556,120670],{"alt":43,"src":120671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,120673,120674],{},"解压文件，并复制到对应位置完成安装",[38,120676,120678],{"className":118577,"code":120677,"language":118579,"meta":43,"style":43},"# 解压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",[26,120679,120680,120685,120696,120701,120708,120713,120729,120743,120748,120759,120768,120772,120788],{"__ignoreMap":43},[47,120681,120682],{"class":49,"line":50},[47,120683,120684],{"class":279},"# 解压cuDNN文件\n",[47,120686,120687,120690,120693],{"class":49,"line":92},[47,120688,120689],{"class":53},"tar",[47,120691,120692],{"class":85}," -xvf",[47,120694,120695],{"class":81}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[47,120697,120698],{"class":49,"line":1273},[47,120699,120700],{"class":279},"# cd进文件夹\n",[47,120702,120703,120705],{"class":49,"line":1288},[47,120704,101330],{"class":85},[47,120706,120707],{"class":81}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[47,120709,120710],{"class":49,"line":1294},[47,120711,120712],{"class":279},"# 复制cuDNN文件到CUDA目录\n",[47,120714,120715,120717,120719,120722,120724,120727],{"class":49,"line":1308},[47,120716,78],{"class":53},[47,120718,27915],{"class":81},[47,120720,120721],{"class":81}," include\u002Fcudnn",[47,120723,674],{"class":85},[47,120725,120726],{"class":81},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[47,120728,2767],{"class":221},[47,120730,120731,120733,120735,120738,120740],{"class":49,"line":1314},[47,120732,78],{"class":53},[47,120734,27915],{"class":81},[47,120736,120737],{"class":81}," lib\u002Flibcudnn",[47,120739,674],{"class":85},[47,120741,120742],{"class":81},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[47,120744,120745],{"class":49,"line":1405},[47,120746,120747],{"class":279},"# 对比一下有没有缺文件\n",[47,120749,120750,120752,120755,120757],{"class":49,"line":1411},[47,120751,26815],{"class":53},[47,120753,120754],{"class":81}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[47,120756,674],{"class":85},[47,120758,2767],{"class":221},[47,120760,120761,120763,120766],{"class":49,"line":1423},[47,120762,26815],{"class":53},[47,120764,120765],{"class":81}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[47,120767,119302],{"class":85},[47,120769,120770],{"class":49,"line":1706},[47,120771,120351],{"class":279},[47,120773,120774,120776,120778,120781,120783,120785],{"class":49,"line":1711},[47,120775,78],{"class":53},[47,120777,82],{"class":81},[47,120779,120780],{"class":81}," a+r",[47,120782,120754],{"class":81},[47,120784,674],{"class":85},[47,120786,120787],{"class":221},"   \n",[47,120789,120790,120792,120794,120796,120798],{"class":49,"line":1717},[47,120791,78],{"class":53},[47,120793,82],{"class":81},[47,120795,120780],{"class":81},[47,120797,120765],{"class":81},[47,120799,119302],{"class":85},[171,120801,120802],{"start":1273},[109,120803,120804],{},"检查是否安装成功",[38,120806,120808],{"className":118577,"code":120807,"language":118579,"meta":43,"style":43},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[26,120809,120810,120815],{"__ignoreMap":43},[47,120811,120812],{"class":49,"line":50},[47,120813,120814],{"class":279},"# 检查cuDNN版本命令\n",[47,120816,120817,120820,120823,120825,120827,120830,120833],{"class":49,"line":92},[47,120818,120819],{"class":53},"cat",[47,120821,120822],{"class":81}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[47,120824,25163],{"class":217},[47,120826,30290],{"class":53},[47,120828,120829],{"class":81}," CUDNN_MAJOR",[47,120831,120832],{"class":85}," -A",[47,120834,47777],{"class":85},[19,120836,120837],{},"出现下图这样的就是安装成功了",[19,120839,120840],{},[1556,120841],{"alt":43,"src":120842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[171,120844,120845],{"start":1288},[109,120846,120847],{},"软链接(一般不需要)",[38,120849,120851],{"className":118577,"code":120850,"language":118579,"meta":43,"style":43},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[26,120852,120853,120858],{"__ignoreMap":43},[47,120854,120855],{"class":49,"line":50},[47,120856,120857],{"class":279},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[47,120859,120860,120862],{"class":49,"line":92},[47,120861,78],{"class":53},[47,120863,120864],{"class":81}," ldconfig\n",[19,120866,120867],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[38,120869,120874],{"className":120870,"code":120871,"language":120872,"meta":120873,"style":43},"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",[26,120875,120876,120881,120886,120891,120896,120901,120906],{"__ignoreMap":43},[47,120877,120878],{"class":49,"line":50},[47,120879,120880],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[47,120882,120883],{"class":49,"line":92},[47,120884,120885],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[47,120887,120888],{"class":49,"line":1273},[47,120889,120890],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[47,120892,120893],{"class":49,"line":1288},[47,120894,120895],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[47,120897,120898],{"class":49,"line":1294},[47,120899,120900],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[47,120902,120903],{"class":49,"line":1308},[47,120904,120905],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[47,120907,120908],{"class":49,"line":1314},[47,120909,120910],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,120912,120913],{},"运行下方的命令",[38,120915,120917],{"className":118577,"code":120916,"language":118579,"meta":43,"style":43},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[26,120918,120919,120924,120931,120936],{"__ignoreMap":43},[47,120920,120921],{"class":49,"line":50},[47,120922,120923],{"class":279},"# cd进入CUDA路径\n",[47,120925,120926,120928],{"class":49,"line":92},[47,120927,101330],{"class":85},[47,120929,120930],{"class":81}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[47,120932,120933],{"class":49,"line":1273},[47,120934,120935],{"class":279}," # 查看本路径下的需要软链接的文件名\n",[47,120937,120938],{"class":49,"line":1288},[47,120939,120940],{"class":53}," ls\n",[19,120942,120943],{},[1556,120944],{"alt":43,"src":120945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,120947,120948,120949,18503,120952,18503,120955,120958],{},"如上图，我需要将",[26,120950,120951],{},"libcudnn_xxx_xxxxx.so.8.9.7",[26,120953,120954],{},"libcudnn_xxx_xxxxx.so.8",[26,120956,120957],{},"libcudnn_xxx_xxxxx.so","软链接",[38,120960,120962],{"className":118577,"code":120961,"language":118579,"meta":43,"style":43},"# 创建符号链接。对于每个 .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",[26,120963,120964,120969,120985,120999,121013,121027,121041,121055,121069,121074,121080,121085],{"__ignoreMap":43},[47,120965,120966],{"class":49,"line":50},[47,120967,120968],{"class":279},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[47,120970,120971,120973,120976,120979,120982],{"class":49,"line":92},[47,120972,78],{"class":53},[47,120974,120975],{"class":81}," ln",[47,120977,120978],{"class":85}," -sf",[47,120980,120981],{"class":81}," libcudnn_cnn_train.so.8.9.7",[47,120983,120984],{"class":81}," libcudnn_cnn_train.so.8\n",[47,120986,120987,120989,120991,120993,120996],{"class":49,"line":1273},[47,120988,78],{"class":53},[47,120990,120975],{"class":81},[47,120992,120978],{"class":85},[47,120994,120995],{"class":81}," libcudnn_adv_infer.so.8.9.7",[47,120997,120998],{"class":81}," libcudnn_adv_infer.so.8\n",[47,121000,121001,121003,121005,121007,121010],{"class":49,"line":1288},[47,121002,78],{"class":53},[47,121004,120975],{"class":81},[47,121006,120978],{"class":85},[47,121008,121009],{"class":81}," libcudnn_adv_train.so.8.9.7",[47,121011,121012],{"class":81}," libcudnn_adv_train.so.8\n",[47,121014,121015,121017,121019,121021,121024],{"class":49,"line":1294},[47,121016,78],{"class":53},[47,121018,120975],{"class":81},[47,121020,120978],{"class":85},[47,121022,121023],{"class":81}," libcudnn_cnn_infer.so.8.9.7",[47,121025,121026],{"class":81}," libcudnn_cnn_infer.so.8\n",[47,121028,121029,121031,121033,121035,121038],{"class":49,"line":1308},[47,121030,78],{"class":53},[47,121032,120975],{"class":81},[47,121034,120978],{"class":85},[47,121036,121037],{"class":81}," libcudnn.so.8.9.7",[47,121039,121040],{"class":81}," libcudnn.so.8\n",[47,121042,121043,121045,121047,121049,121052],{"class":49,"line":1314},[47,121044,78],{"class":53},[47,121046,120975],{"class":81},[47,121048,120978],{"class":85},[47,121050,121051],{"class":81}," libcudnn_ops_infer.so.8.9.7",[47,121053,121054],{"class":81}," libcudnn_ops_infer.so.8\n",[47,121056,121057,121059,121061,121063,121066],{"class":49,"line":1405},[47,121058,78],{"class":53},[47,121060,120975],{"class":81},[47,121062,120978],{"class":85},[47,121064,121065],{"class":81}," libcudnn_ops_train.so.8.9.7",[47,121067,121068],{"class":81}," libcudnn_ops_train.so.8\n",[47,121070,121071],{"class":49,"line":1411},[47,121072,121073],{"class":279},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[47,121075,121076,121078],{"class":49,"line":1423},[47,121077,78],{"class":53},[47,121079,120864],{"class":81},[47,121081,121082],{"class":49,"line":1706},[47,121083,121084],{"class":279},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[47,121086,121087,121089,121092,121095,121097,121100],{"class":49,"line":1711},[47,121088,26815],{"class":53},[47,121090,121091],{"class":85}," -l",[47,121093,121094],{"class":81}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[47,121096,674],{"class":85},[47,121098,121099],{"class":81},".so",[47,121101,119302],{"class":85},[187,121103,121105],{"id":121104},"_355-常见问题","3.5.5 常见问题",[171,121107,121108],{},[109,121109,121110],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[38,121112,121114],{"className":118577,"code":121113,"language":118579,"meta":43,"style":43},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[26,121115,121116],{"__ignoreMap":43},[47,121117,121118,121120,121122],{"class":49,"line":50},[47,121119,78],{"class":53},[47,121121,118637],{"class":81},[47,121123,121124],{"class":81}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,121126,121127],{},"blacklist-nouveau.conf文件内容如下：",[38,121129,121131],{"className":118577,"code":121130,"language":118579,"meta":43,"style":43},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[26,121132,121133,121141,121148,121160,121170],{"__ignoreMap":43},[47,121134,121135,121138],{"class":49,"line":50},[47,121136,121137],{"class":53},"blacklist",[47,121139,121140],{"class":81}," nouveau\n",[47,121142,121143,121145],{"class":49,"line":92},[47,121144,121137],{"class":53},[47,121146,121147],{"class":81}," lbm-nouveau\n",[47,121149,121150,121152,121155,121158],{"class":49,"line":1273},[47,121151,115984],{"class":53},[47,121153,121154],{"class":81}," nouveau",[47,121156,121157],{"class":81}," modeset=",[47,121159,3178],{"class":85},[47,121161,121162,121165,121167],{"class":49,"line":1288},[47,121163,121164],{"class":85},"alias",[47,121166,121154],{"class":81},[47,121168,121169],{"class":81}," off\n",[47,121171,121172,121174,121177],{"class":49,"line":1294},[47,121173,121164],{"class":85},[47,121175,121176],{"class":81}," lbm-nouveau",[47,121178,121169],{"class":81},[19,121180,121181],{},"接着运行下方命令",[38,121183,121185],{"className":118577,"code":121184,"language":118579,"meta":43,"style":43},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[26,121186,121187,121197,121202],{"__ignoreMap":43},[47,121188,121189,121191,121194],{"class":49,"line":50},[47,121190,78],{"class":53},[47,121192,121193],{"class":81}," update-initramfs",[47,121195,121196],{"class":85}," -u\n",[47,121198,121199],{"class":49,"line":92},[47,121200,121201],{"class":53},"或者\n",[47,121203,121204,121206,121209],{"class":49,"line":1273},[47,121205,78],{"class":53},[47,121207,121208],{"class":81}," dracut",[47,121210,121211],{"class":85}," --force\n",[19,121213,121214],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[38,121216,121218],{"className":118577,"code":121217,"language":118579,"meta":43,"style":43},"lsmod | grep nouveau\n",[26,121219,121220],{"__ignoreMap":43},[47,121221,121222,121225,121227,121229],{"class":49,"line":50},[47,121223,121224],{"class":53},"lsmod",[47,121226,25163],{"class":217},[47,121228,30290],{"class":53},[47,121230,121140],{"class":81},[171,121232,121233],{"start":92},[109,121234,121235],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[38,121237,121239],{"className":118577,"code":121238,"language":118579,"meta":43,"style":43},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[26,121240,121241],{"__ignoreMap":43},[47,121242,121243,121245,121247],{"class":49,"line":50},[47,121244,78],{"class":53},[47,121246,118637],{"class":81},[47,121248,121249],{"class":81}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,121251,121252],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[38,121254,121256],{"className":118577,"code":121255,"language":118579,"meta":43,"style":43},"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",[26,121257,121258,121266,121274,121282,121289,121297,121307,121315],{"__ignoreMap":43},[47,121259,121260,121263],{"class":49,"line":50},[47,121261,121262],{"class":53},"Section",[47,121264,121265],{"class":81}," \"OutputClass\"\n",[47,121267,121268,121271],{"class":49,"line":92},[47,121269,121270],{"class":53},"   Identifier",[47,121272,121273],{"class":81}," \"nvidia\"\n",[47,121275,121276,121279],{"class":49,"line":1273},[47,121277,121278],{"class":53},"   MatchDriver",[47,121280,121281],{"class":81}," \"nvidia-drm\"\n",[47,121283,121284,121287],{"class":49,"line":1288},[47,121285,121286],{"class":53},"   Driver",[47,121288,121273],{"class":81},[47,121290,121291,121294],{"class":49,"line":1294},[47,121292,121293],{"class":53},"   Option",[47,121295,121296],{"class":81}," \"AllowEmptyInitialConfiguration\"\n",[47,121298,121299,121301,121304],{"class":49,"line":1308},[47,121300,121293],{"class":53},[47,121302,121303],{"class":81}," \"PrimaryGPU\"",[47,121305,121306],{"class":81}," \"yes\"\n",[47,121308,121309,121312],{"class":49,"line":1314},[47,121310,121311],{"class":53},"   ModulePath",[47,121313,121314],{"class":81}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[47,121316,121317],{"class":49,"line":1405},[47,121318,121319],{"class":53},"EndSection\n",[171,121321,121322],{"start":1273},[109,121323,121324],{},"安装N卡驱动提示错误",[38,121326,121328],{"className":120870,"code":121327,"language":120872,"meta":120873,"style":43},"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",[26,121329,121330],{"__ignoreMap":43},[47,121331,121332],{"class":49,"line":50},[47,121333,121327],{},[171,121335,121336],{},[109,121337,121338],{},"检查当前运行的内核版本：",[19,121340,121341],{},"运行以下命令以查看你当前正在使用的内核版本：",[38,121343,121345],{"className":117350,"code":121344,"language":117352,"meta":43,"style":43},"uname -r\n",[26,121346,121347],{"__ignoreMap":43},[47,121348,121349,121351],{"class":49,"line":50},[47,121350,70258],{"class":53},[47,121352,121353],{"class":85}," -r\n",[171,121355,121356],{"start":92},[109,121357,121358],{},"安装内核开发文件：",[19,121360,121361,121362,121365],{},"确保你已经安装了与当前内核版本相匹配的 ",[26,121363,121364],{},"kernel-devel"," 包。运行以下命令来安装：",[38,121367,121369],{"className":117350,"code":121368,"language":117352,"meta":43,"style":43},"sudo dnf install kernel-devel-$(uname -r)\n",[26,121370,121371],{"__ignoreMap":43},[47,121372,121373,121375,121377,121379,121382,121384,121386,121388],{"class":49,"line":50},[47,121374,78],{"class":53},[47,121376,26369],{"class":81},[47,121378,23925],{"class":81},[47,121380,121381],{"class":81}," kernel-devel-",[47,121383,25153],{"class":221},[47,121385,70258],{"class":53},[47,121387,119693],{"class":85},[47,121389,228],{"class":221},[19,121391,121392],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[171,121394,121395],{"start":1273},[109,121396,121397],{},"安装内核源代码（如果需要）：",[19,121399,121400],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[38,121402,121404],{"className":117350,"code":121403,"language":117352,"meta":43,"style":43},"sudo dnf install kernel-headers kernel-source\n",[26,121405,121406],{"__ignoreMap":43},[47,121407,121408,121410,121412,121414,121417],{"class":49,"line":50},[47,121409,78],{"class":53},[47,121411,26369],{"class":81},[47,121413,23925],{"class":81},[47,121415,121416],{"class":81}," kernel-headers",[47,121418,121419],{"class":81}," kernel-source\n",[171,121421,121422],{"start":1288},[109,121423,121424],{},"检查安装：",[19,121426,121427,121428,121431],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[26,121429,121430],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[38,121433,121435],{"className":117350,"code":121434,"language":117352,"meta":43,"style":43},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[26,121436,121437],{"__ignoreMap":43},[47,121438,121439,121441],{"class":49,"line":50},[47,121440,26815],{"class":53},[47,121442,121443],{"class":81}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,121445,121446,121447,121450],{},"如果仍然遇到问题，可以通过 ",[26,121448,121449],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[134,121452,121453],{},"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":43,"searchDepth":92,"depth":92,"links":121455},[121456,121460,121470,121474,121475],{"id":118553,"depth":92,"text":118554,"children":121457},[121458,121459],{"id":118563,"depth":1273,"text":118564},{"id":118573,"depth":1273,"text":118574},{"id":118773,"depth":92,"text":118774,"children":121461},[121462,121463,121464,121465,121466,121467,121468,121469],{"id":118777,"depth":1273,"text":118778},{"id":118847,"depth":1273,"text":118848},{"id":118936,"depth":1273,"text":118937},{"id":119181,"depth":1273,"text":119182},{"id":119251,"depth":1273,"text":119252},{"id":119318,"depth":1273,"text":119319},{"id":119353,"depth":1273,"text":119354},{"id":119408,"depth":1273,"text":119409},{"id":119459,"depth":92,"text":119460,"children":121471},[121472,121473],{"id":119463,"depth":1273,"text":119464},{"id":119543,"depth":1273,"text":119544},{"id":119729,"depth":92,"text":119730},{"id":119902,"depth":92,"text":119903,"children":121476},[121477,121478,121479,121480,121481],{"id":119906,"depth":1273,"text":119907},{"id":119947,"depth":1273,"text":119948},{"id":120234,"depth":1273,"text":120235},{"id":120608,"depth":1273,"text":120609},{"id":121104,"depth":1273,"text":121105},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118545,"description":142},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121488,"title":121489,"body":121490,"description":142,"extension":143,"meta":121830,"navigation":145,"path":121831,"seo":121832,"stem":121833,"__hash__":121834},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121491,"toc":121828},[121492,121495,121500,121503,121749,121754,121757,121793,121796,121825],[10,121493,121489],{"id":121494},"_4-命令教程长期积累",[171,121496,121497],{},[109,121498,121499],{},"大多数命令",[19,121501,121502],{},"常用 Linux 命令速查：",[38,121504,121506],{"className":117350,"code":121505,"language":117352,"meta":43,"style":43},"# 文件与目录\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",[26,121507,121508,121513,121520,121527,121535,121542,121549,121557,121565,121572,121579,121587,121591,121596,121603,121611,121618,121622,121627,121634,121642,121650,121658,121666,121670,121675,121683,121690,121697,121705,121713,121717,121722,121731,121740],{"__ignoreMap":43},[47,121509,121510],{"class":49,"line":50},[47,121511,121512],{"class":279},"# 文件与目录\n",[47,121514,121515,121517],{"class":49,"line":92},[47,121516,26815],{"class":53},[47,121518,121519],{"class":279},"        # 列出目录内容\n",[47,121521,121522,121524],{"class":49,"line":1273},[47,121523,101330],{"class":85},[47,121525,121526],{"class":279},"        # 切换目录\n",[47,121528,121529,121532],{"class":49,"line":1288},[47,121530,121531],{"class":85},"pwd",[47,121533,121534],{"class":279},"       # 显示当前路径\n",[47,121536,121537,121539],{"class":49,"line":1294},[47,121538,101320],{"class":53},[47,121540,121541],{"class":279},"     # 创建目录\n",[47,121543,121544,121546],{"class":49,"line":1308},[47,121545,25376],{"class":53},[47,121547,121548],{"class":279},"        # 删除文件或目录\n",[47,121550,121551,121554],{"class":49,"line":1314},[47,121552,121553],{"class":53},"cp",[47,121555,121556],{"class":279},"        # 复制文件或目录\n",[47,121558,121559,121562],{"class":49,"line":1405},[47,121560,121561],{"class":53},"mv",[47,121563,121564],{"class":279},"        # 移动\u002F重命名文件或目录\n",[47,121566,121567,121569],{"class":49,"line":1411},[47,121568,101337],{"class":53},[47,121570,121571],{"class":279},"     # 创建空文件\n",[47,121573,121574,121576],{"class":49,"line":1423},[47,121575,120819],{"class":53},[47,121577,121578],{"class":279},"       # 查看文件内容\n",[47,121580,121581,121584],{"class":49,"line":1706},[47,121582,121583],{"class":53},"head\u002Ftail",[47,121585,121586],{"class":279}," # 查看文件头部\u002F尾部\n",[47,121588,121589],{"class":49,"line":1711},[47,121590,2493],{"emptyLinePlaceholder":145},[47,121592,121593],{"class":49,"line":1717},[47,121594,121595],{"class":279},"# 权限管理\n",[47,121597,121598,121600],{"class":49,"line":1722},[47,121599,118],{"class":53},[47,121601,121602],{"class":279},"     # 修改文件权限\n",[47,121604,121605,121608],{"class":49,"line":1736},[47,121606,121607],{"class":53},"chown",[47,121609,121610],{"class":279},"     # 修改文件所有者\n",[47,121612,121613,121615],{"class":49,"line":1741},[47,121614,78],{"class":53},[47,121616,121617],{"class":279},"      # 以管理员身份执行\n",[47,121619,121620],{"class":49,"line":1747},[47,121621,2493],{"emptyLinePlaceholder":145},[47,121623,121624],{"class":49,"line":1768},[47,121625,121626],{"class":279},"# 系统信息\n",[47,121628,121629,121631],{"class":49,"line":1773},[47,121630,70258],{"class":53},[47,121632,121633],{"class":279},"     # 系统信息\n",[47,121635,121636,121639],{"class":49,"line":1787},[47,121637,121638],{"class":53},"df",[47,121640,121641],{"class":279},"        # 磁盘使用情况\n",[47,121643,121644,121647],{"class":49,"line":1792},[47,121645,121646],{"class":53},"free",[47,121648,121649],{"class":279},"      # 内存使用情况\n",[47,121651,121652,121655],{"class":49,"line":1821},[47,121653,121654],{"class":53},"top\u002Fhtop",[47,121656,121657],{"class":279},"  # 进程监控\n",[47,121659,121660,121663],{"class":49,"line":1826},[47,121661,121662],{"class":53},"ps",[47,121664,121665],{"class":279},"        # 查看进程\n",[47,121667,121668],{"class":49,"line":1843},[47,121669,2493],{"emptyLinePlaceholder":145},[47,121671,121672],{"class":49,"line":1848},[47,121673,121674],{"class":279},"# 网络\n",[47,121676,121677,121680],{"class":49,"line":1853},[47,121678,121679],{"class":53},"ping",[47,121681,121682],{"class":279},"      # 测试网络连通性\n",[47,121684,121685,121687],{"class":49,"line":1858},[47,121686,26903],{"class":53},[47,121688,121689],{"class":279},"      # 发送 HTTP 请求\n",[47,121691,121692,121694],{"class":49,"line":1872},[47,121693,120343],{"class":53},[47,121695,121696],{"class":279},"      # 下载文件\n",[47,121698,121699,121702],{"class":49,"line":1877},[47,121700,121701],{"class":53},"ssh",[47,121703,121704],{"class":279},"       # 远程登录\n",[47,121706,121707,121710],{"class":49,"line":2670},[47,121708,121709],{"class":53},"scp",[47,121711,121712],{"class":279},"       # 远程文件传输\n",[47,121714,121715],{"class":49,"line":2684},[47,121716,2493],{"emptyLinePlaceholder":145},[47,121718,121719],{"class":49,"line":2692},[47,121720,121721],{"class":279},"# 包管理（Debian\u002FUbuntu）\n",[47,121723,121724,121726,121728],{"class":49,"line":2697},[47,121725,117422],{"class":53},[47,121727,117401],{"class":81},[47,121729,121730],{"class":279},"   # 更新软件源\n",[47,121732,121733,121735,121737],{"class":49,"line":2703},[47,121734,117422],{"class":53},[47,121736,23925],{"class":81},[47,121738,121739],{"class":279},"  # 安装软件包\n",[47,121741,121742,121744,121746],{"class":49,"line":2709},[47,121743,117422],{"class":53},[47,121745,26133],{"class":81},[47,121747,121748],{"class":279},"   # 卸载软件包\n",[171,121750,121751],{"start":92},[109,121752,121753],{},"KDE Dolphin 以root打开",[19,121755,121756],{},"kde5",[38,121758,121760],{"className":117350,"code":121759,"language":117352,"meta":43,"style":43},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[26,121761,121762],{"__ignoreMap":43},[47,121763,121764,121767,121770,121773,121775,121777,121780,121783,121785,121788,121790],{"class":49,"line":50},[47,121765,121766],{"class":53},"pkexec",[47,121768,121769],{"class":81}," env",[47,121771,121772],{"class":81}," DISPLAY=",[47,121774,28197],{"class":221},[47,121776,28255],{"class":81},[47,121778,121779],{"class":221},"$XAUTHORITY ",[47,121781,121782],{"class":81},"KDE_SESSION_VERSION=",[47,121784,538],{"class":85},[47,121786,121787],{"class":81}," KDE_FULL_SESSION=",[47,121789,1456],{"class":85},[47,121791,121792],{"class":81}," dolphin\n",[19,121794,121795],{},"kde6",[38,121797,121799],{"className":117350,"code":121798,"language":117352,"meta":43,"style":43},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[26,121800,121801],{"__ignoreMap":43},[47,121802,121803,121805,121807,121809,121811,121813,121815,121817,121819,121821,121823],{"class":49,"line":50},[47,121804,121766],{"class":53},[47,121806,121769],{"class":81},[47,121808,121772],{"class":81},[47,121810,28197],{"class":221},[47,121812,28255],{"class":81},[47,121814,121779],{"class":221},[47,121816,121782],{"class":81},[47,121818,563],{"class":85},[47,121820,121787],{"class":81},[47,121822,1456],{"class":85},[47,121824,121792],{"class":81},[134,121826,121827],{},"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":43,"searchDepth":92,"depth":92,"links":121829},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121489,"description":142},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121836,"title":121837,"body":121838,"description":142,"extension":143,"meta":121852,"navigation":145,"path":121853,"seo":121854,"stem":121855,"__hash__":121856},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121839,"toc":121850},[121840,121843],[10,121841,121837],{"id":121842},"_5-各种环境配置",[19,121844,121845],{},[457,121846,121849],{"href":121847,"rel":121848},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[23956],"电控组环境搭建大全",{"title":43,"searchDepth":92,"depth":92,"links":121851},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121837,"description":142},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121858,"title":121859,"body":121860,"description":142,"extension":143,"meta":122208,"navigation":145,"path":122209,"seo":122210,"stem":122211,"__hash__":122212},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":121861,"toc":122200},[121862,121865,121869,121873,121877,121882,121889,121893,122186,122190,122197],[10,121863,121859],{"id":121864},"_6-拓展功能",[14,121866,121868],{"id":121867},"_61-wine","6.1 Wine",[14,121870,121872],{"id":121871},"_62-android","6.2 Android",[187,121874,121876],{"id":121875},"_621-i卡a卡","6.2.1 I卡、A卡",[171,121878,121879],{},[109,121880,121881],{},"Wayland-Waydroid(体验超级好)",[19,121883,121884,121885],{},"Waydroid 官网与安装指南：",[457,121886,121887],{"href":121887,"rel":121888},"https:\u002F\u002Fwaydro.id\u002F",[23956],[187,121890,121892],{"id":121891},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[171,121894,121895],{},[109,121896,121897,121898,121900,121901,121905,121907,121910,121915,122112],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53770,121899],{},"BlissOS 官网下载：",[457,121902,121903],{"href":121903,"rel":121904},"https:\u002F\u002Fblissos.org\u002F",[23956],[53770,121906],{},[1556,121908],{"alt":43,"src":121909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[171,121911,121912],{"start":1273},[109,121913,121914],{},"比较推荐的配置",[38,121916,121918],{"className":117350,"code":121917,"language":117352,"meta":43,"style":43},"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",[26,121919,121920,121927,121937,121947,121957,121969,121979,121986,121996,122005,122014,122024,122034,122043,122053,122063,122075,122085,122094,122104],{"__ignoreMap":43},[47,121921,121922,121925],{"class":49,"line":50},[47,121923,121924],{"class":53},"qemu-system-x86_64",[47,121926,24732],{"class":85},[47,121928,121929,121932,121935],{"class":49,"line":92},[47,121930,121931],{"class":85},"        -M",[47,121933,121934],{"class":81}," q35,vmport=off",[47,121936,24732],{"class":85},[47,121938,121939,121942,121945],{"class":49,"line":1273},[47,121940,121941],{"class":85},"        -accel",[47,121943,121944],{"class":81}," kvm",[47,121946,24732],{"class":85},[47,121948,121949,121952,121955],{"class":49,"line":1288},[47,121950,121951],{"class":85},"        -cpu",[47,121953,121954],{"class":81}," qemu64,+sse3,+sse4.2",[47,121956,24732],{"class":85},[47,121958,121959,121962,121965,121967],{"class":49,"line":1294},[47,121960,121961],{"class":85},"        -smp",[47,121963,121964],{"class":81}," 8,cores=",[47,121966,512],{"class":85},[47,121968,24732],{"class":85},[47,121970,121971,121974,121977],{"class":49,"line":1308},[47,121972,121973],{"class":85},"        -m",[47,121975,121976],{"class":81}," 6G",[47,121978,24732],{"class":85},[47,121980,121981,121984],{"class":49,"line":1314},[47,121982,121983],{"class":85},"        -usb",[47,121985,24732],{"class":85},[47,121987,121988,121991,121994],{"class":49,"line":1405},[47,121989,121990],{"class":85},"        -device",[47,121992,121993],{"class":81}," virtio-tablet",[47,121995,24732],{"class":85},[47,121997,121998,122000,122003],{"class":49,"line":1411},[47,121999,121990],{"class":85},[47,122001,122002],{"class":81}," virtio-keyboard",[47,122004,24732],{"class":85},[47,122006,122007,122009,122012],{"class":49,"line":1423},[47,122008,121990],{"class":85},[47,122010,122011],{"class":81}," usb-tablet",[47,122013,24732],{"class":85},[47,122015,122016,122019,122022],{"class":49,"line":1706},[47,122017,122018],{"class":85},"        -bios",[47,122020,122021],{"class":81}," OVMF-pure-efi64.fd",[47,122023,24732],{"class":85},[47,122025,122026,122029,122032],{"class":49,"line":1711},[47,122027,122028],{"class":85},"        -net",[47,122030,122031],{"class":81}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[47,122033,24732],{"class":85},[47,122035,122036,122038,122041],{"class":49,"line":1717},[47,122037,122028],{"class":85},[47,122039,122040],{"class":81}," nic,model=virtio",[47,122042,24732],{"class":85},[47,122044,122045,122048,122051],{"class":49,"line":1722},[47,122046,122047],{"class":85},"        -audio",[47,122049,122050],{"class":81}," sdl,model=hda",[47,122052,24732],{"class":85},[47,122054,122055,122058,122061],{"class":49,"line":1736},[47,122056,122057],{"class":85},"        -display",[47,122059,122060],{"class":81}," sdl,gl=on,show-cursor=on",[47,122062,24732],{"class":85},[47,122064,122065,122067,122070,122073],{"class":49,"line":1741},[47,122066,121990],{"class":85},[47,122068,122069],{"class":81}," virtio-vga-gl,xres=1920,yres=",[47,122071,122072],{"class":85},"1080",[47,122074,24732],{"class":85},[47,122076,122077,122080,122083],{"class":49,"line":1747},[47,122078,122079],{"class":85},"        -drive",[47,122081,122082],{"class":81}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[47,122084,24732],{"class":85},[47,122086,122087,122089,122092],{"class":49,"line":1768},[47,122088,122079],{"class":85},[47,122090,122091],{"class":81}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[47,122093,24732],{"class":85},[47,122095,122096,122099,122102],{"class":49,"line":1773},[47,122097,122098],{"class":85},"        -monitor",[47,122100,122101],{"class":81}," stdio",[47,122103,24732],{"class":85},[47,122105,122106,122109],{"class":49,"line":1787},[47,122107,122108],{"class":85},"        -serial",[47,122110,122111],{"class":81}," none\n",[171,122113,122114],{"start":1294},[109,122115,122116,122117],{},"常用操作：",[171,122118,122119,122122,122178],{},[109,122120,122121],{},"全屏：Ctrl+Alt+F",[109,122123,122124,122125,122130],{},"adb调试",[171,122126,122127],{},[109,122128,122129],{},"使Linux与Android用ADB连接。",[38,122131,122133],{"className":117350,"code":122132,"language":117352,"meta":43,"style":43},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[26,122134,122135,122140,122151,122156,122168,122173],{"__ignoreMap":43},[47,122136,122137],{"class":49,"line":50},[47,122138,122139],{"class":279},"# 连接安卓\n",[47,122141,122142,122145,122148],{"class":49,"line":92},[47,122143,122144],{"class":53},"adb",[47,122146,122147],{"class":81}," connect",[47,122149,122150],{"class":85}," 127.0.0.1\n",[47,122152,122153],{"class":49,"line":1273},[47,122154,122155],{"class":279},"# 打开shell\n",[47,122157,122158,122160,122162,122165],{"class":49,"line":1288},[47,122159,122144],{"class":53},[47,122161,26937],{"class":85},[47,122163,122164],{"class":81}," 127.0.0.1:5555",[47,122166,122167],{"class":81}," shell\n",[47,122169,122170],{"class":49,"line":1294},[47,122171,122172],{"class":279},"# 使用root权限\n",[47,122174,122175],{"class":49,"line":1308},[47,122176,122177],{"class":53},"su\n",[109,122179,122180,122181],{},"中文输入法",[171,122182,122183],{},[109,122184,122185],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,122187,122189],{"id":122188},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,122191,122192,122193],{},"rEFInd 官网与文档：",[457,122194,122195],{"href":122195,"rel":122196},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[23956],[134,122198,122199],{},"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":43,"searchDepth":92,"depth":92,"links":122201},[122202,122203,122207],{"id":121867,"depth":92,"text":121868},{"id":121871,"depth":92,"text":121872,"children":122204},[122205,122206],{"id":121875,"depth":1273,"text":121876},{"id":121891,"depth":1273,"text":121892},{"id":122188,"depth":92,"text":122189},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121859,"description":142},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122214,"title":122215,"body":122216,"description":142,"extension":143,"meta":125515,"navigation":145,"path":125516,"seo":125517,"stem":125518,"__hash__":125519},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122217,"toc":125489},[122218,122221,122225,122228,122235,122485,122488,122560,122563,122567,122571,122576,122579,122582,122585,122590,122593,122596,122599,122604,122607,122612,122615,122618,122623,122626,122631,122634,122638,122642,122645,122650,122653,122667,122670,122673,122682,122685,122694,122697,122700,122709,122712,122721,122724,122727,122736,122739,122742,122757,122760,122763,122772,122777,122780,122783,122792,122795,122804,122807,122816,122819,122828,122833,122836,122844,122849,122852,122861,122864,122872,122877,122880,122889,122892,122895,122899,122902,122907,122910,122915,122929,122934,122939,122950,122955,122961,122966,122981,122986,122989,122994,122999,123004,123012,123017,123024,123029,123040,123045,123048,123052,123055,123058,123063,123066,123085,123090,123093,123102,123107,123110,123132,123135,123165,123168,123173,123176,123190,123195,123214,123217,123220,123225,123237,123242,123247,123250,123255,123258,123273,123276,123281,123286,123290,123295,123335,123338,123342,123348,123354,123359,123362,123369,123374,123381,123384,123387,123394,123408,123411,123471,123474,123488,123500,123503,123506,123509,123573,123576,123579,123582,123602,123605,123610,123617,123621,123624,123628,123633,123638,123642,123645,123648,123690,123695,123698,123720,123735,123737,123742,123754,123814,123816,123818,123872,123874,123876,123882,123887,123890,123895,123899,123902,123964,123969,123972,123974,123978,123990,124072,124074,124076,124130,124136,124138,124142,124147,124149,124154,124158,124178,124213,124217,124220,124223,124226,124233,124236,124248,124251,124266,124269,124288,124336,124339,124356,124359,124373,124378,124381,124390,124405,124417,124455,124460,124469,124474,124479,124505,124514,124518,124522,124527,124530,124534,124538,124543,124546,124551,124554,124559,124562,124567,124570,124574,124579,124582,124587,124590,124594,124599,124602,124607,124610,124615,124618,124622,124627,124630,124635,124638,124643,124646,124650,124655,124658,124663,124666,124671,124674,124679,124682,124687,124690,124695,124698,124702,124707,124710,124715,124722,124726,124731,124734,124739,124742,124746,124751,124754,124757,124760,124763,124766,124770,124773,124783,124788,124793,124815,124820,124825,124832,124836,124841,124844,124847,124852,124855,124858,124861,124864,124867,124870,124873,124876,124879,124882,124885,124888,124893,124898,124903,124908,124913,124918,124923,124926,124930,124933,124937,124942,124947,124952,124957,124961,124967,124975,124980,124983,124988,125003,125006,125011,125045,125060,125063,125118,125144,125156,125159,125168,125171,125186,125191,125194,125200,125205,125208,125213,125216,125221,125226,125233,125236,125251,125254,125289,125294,125302,125340,125343,125346,125351,125354,125359,125370,125404,125409,125412,125421,125426,125432,125435,125440,125449,125454,125457,125460,125465,125473,125476,125481,125486],[10,122219,122215],{"id":122220},"_7-其他操作",[14,122222,122224],{"id":122223},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,122226,122227],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,122229,122230,122231,122234],{},"进入工控机的硬盘目录，进入",[26,122232,122233],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[38,122236,122240],{"className":122237,"code":122238,"language":122239,"meta":43,"style":43},"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",[26,122241,122242,122250,122261,122268,122275,122287,122294,122306,122317,122328,122335,122342,122349,122361,122373,122380,122392,122404,122411,122423,122435,122447,122458,122465,122476],{"__ignoreMap":43},[47,122243,122244,122247],{"class":49,"line":50},[47,122245,122246],{"class":51354},"network",[47,122248,122249],{"class":221},": \n",[47,122251,122252,122255,122257,122259],{"class":49,"line":92},[47,122253,122254],{"class":51354},"  version",[47,122256,51491],{"class":221},[47,122258,298],{"class":85},[47,122260,2767],{"class":221},[47,122262,122263,122266],{"class":49,"line":1273},[47,122264,122265],{"class":51354},"  wifis",[47,122267,122249],{"class":221},[47,122269,122270,122273],{"class":49,"line":1288},[47,122271,122272],{"class":51354},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[47,122274,122249],{"class":221},[47,122276,122277,122280,122282,122285],{"class":49,"line":1294},[47,122278,122279],{"class":51354},"      renderer",[47,122281,51491],{"class":221},[47,122283,122284],{"class":81},"NetworkManager",[47,122286,2767],{"class":221},[47,122288,122289,122292],{"class":49,"line":1308},[47,122290,122291],{"class":51354},"      match",[47,122293,122249],{"class":221},[47,122295,122296,122299,122301,122304],{"class":49,"line":1314},[47,122297,122298],{"class":51354},"        name",[47,122300,51491],{"class":221},[47,122302,122303],{"class":81},"\"wlan0\"",[47,122305,2767],{"class":221},[47,122307,122308,122311,122313,122315],{"class":49,"line":1405},[47,122309,122310],{"class":51354},"      dhcp4",[47,122312,51491],{"class":221},[47,122314,1456],{"class":85},[47,122316,2767],{"class":221},[47,122318,122319,122322,122324,122326],{"class":49,"line":1411},[47,122320,122321],{"class":51354},"      dhcp6",[47,122323,51491],{"class":221},[47,122325,1456],{"class":85},[47,122327,2767],{"class":221},[47,122329,122330,122333],{"class":49,"line":1423},[47,122331,122332],{"class":51354},"      access-points",[47,122334,122249],{"class":221},[47,122336,122337,122340],{"class":49,"line":1706},[47,122338,122339],{"class":81},"        \"EMIS_Vinci_Robocon_5G\"",[47,122341,122249],{"class":221},[47,122343,122344,122347],{"class":49,"line":1711},[47,122345,122346],{"class":51354},"          auth",[47,122348,122249],{"class":221},[47,122350,122351,122354,122356,122359],{"class":49,"line":1717},[47,122352,122353],{"class":51354},"            key-management",[47,122355,51491],{"class":221},[47,122357,122358],{"class":81},"\"psk\"",[47,122360,2767],{"class":221},[47,122362,122363,122366,122368,122371],{"class":49,"line":1722},[47,122364,122365],{"class":51354},"            password",[47,122367,51491],{"class":221},[47,122369,122370],{"class":81},"\"vinci666\"",[47,122372,2767],{"class":221},[47,122374,122375,122378],{"class":49,"line":1736},[47,122376,122377],{"class":51354},"          networkmanager",[47,122379,122249],{"class":221},[47,122381,122382,122385,122387,122390],{"class":49,"line":1741},[47,122383,122384],{"class":51354},"            uuid",[47,122386,51491],{"class":221},[47,122388,122389],{"class":81},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[47,122391,2767],{"class":221},[47,122393,122394,122397,122399,122402],{"class":49,"line":1747},[47,122395,122396],{"class":51354},"            name",[47,122398,51491],{"class":221},[47,122400,122401],{"class":81},"\"EMIS_Vinci_Robocon_5G\"",[47,122403,2767],{"class":221},[47,122405,122406,122409],{"class":49,"line":1768},[47,122407,122408],{"class":51354},"            passthrough",[47,122410,122249],{"class":221},[47,122412,122413,122416,122418,122421],{"class":49,"line":1773},[47,122414,122415],{"class":51354},"              wifi-security.auth-alg",[47,122417,51491],{"class":221},[47,122419,122420],{"class":81},"\"open\"",[47,122422,2767],{"class":221},[47,122424,122425,122428,122430,122433],{"class":49,"line":1787},[47,122426,122427],{"class":51354},"              ipv6.addr-gen-mode",[47,122429,51491],{"class":221},[47,122431,122432],{"class":81},"\"default\"",[47,122434,2767],{"class":221},[47,122436,122437,122440,122442,122445],{"class":49,"line":1792},[47,122438,122439],{"class":51354},"              ipv6.ip6-privacy",[47,122441,51491],{"class":221},[47,122443,122444],{"class":81},"\"-1\"",[47,122446,2767],{"class":221},[47,122448,122449,122452,122454,122456],{"class":49,"line":1821},[47,122450,122451],{"class":51354},"              proxy._",[47,122453,51491],{"class":221},[47,122455,7745],{"class":81},[47,122457,2767],{"class":221},[47,122459,122460,122463],{"class":49,"line":1826},[47,122461,122462],{"class":51354},"      networkmanager",[47,122464,122249],{"class":221},[47,122466,122467,122470,122472,122474],{"class":49,"line":1843},[47,122468,122469],{"class":51354},"        uuid",[47,122471,51491],{"class":221},[47,122473,122389],{"class":81},[47,122475,2767],{"class":221},[47,122477,122478,122480,122482],{"class":49,"line":1848},[47,122479,122298],{"class":51354},[47,122481,51491],{"class":221},[47,122483,122484],{"class":81},"\"EMIS_Vinci_Robocon_5G\"\n",[19,122486,122487],{},"将其改为新wifi的名和密码：",[38,122489,122491],{"className":122237,"code":122490,"language":122239,"meta":43,"style":43},"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",[26,122492,122493,122499,122508,122514,122521,122530,122538,122544,122550],{"__ignoreMap":43},[47,122494,122495,122497],{"class":49,"line":50},[47,122496,122246],{"class":51354},[47,122498,3832],{"class":221},[47,122500,122501,122503,122505],{"class":49,"line":92},[47,122502,122254],{"class":51354},[47,122504,51491],{"class":221},[47,122506,122507],{"class":85},"2\n",[47,122509,122510,122512],{"class":49,"line":1273},[47,122511,122265],{"class":51354},[47,122513,3832],{"class":221},[47,122515,122516,122519],{"class":49,"line":1288},[47,122517,122518],{"class":51354},"    wlan0",[47,122520,3832],{"class":221},[47,122522,122523,122525,122527],{"class":49,"line":1294},[47,122524,122310],{"class":51354},[47,122526,51491],{"class":221},[47,122528,122529],{"class":85},"true\n",[47,122531,122532,122534,122536],{"class":49,"line":1308},[47,122533,122321],{"class":51354},[47,122535,51491],{"class":221},[47,122537,122529],{"class":85},[47,122539,122540,122542],{"class":49,"line":1314},[47,122541,122332],{"class":51354},[47,122543,3832],{"class":221},[47,122545,122546,122548],{"class":49,"line":1405},[47,122547,122339],{"class":81},[47,122549,3832],{"class":221},[47,122551,122552,122555,122557],{"class":49,"line":1411},[47,122553,122554],{"class":51354},"          password",[47,122556,51491],{"class":221},[47,122558,122559],{"class":81},"\"vinci666\"\n",[19,122561,122562],{},"工控机开机即可连上网。",[14,122564,122566],{"id":122565},"_72-ssh远程开发","7.2 SSH远程开发",[187,122568,122570],{"id":122569},"_721-环境准备","7.2.1 环境准备",[19,122572,122573],{},[369,122574,122575],{},"1.硬件准备",[19,122577,122578],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,122580,122581],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,122583,122584],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,122586,122587],{},[369,122588,122589],{},"2.设置固定IP",[19,122591,122592],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,122594,122595],{},"1.进入设置界面",[19,122597,122598],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,122600,122601],{},[1556,122602],{"alt":43,"src":122603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,122605,122606],{},"2.配置所连接的网络",[19,122608,122609],{},[1556,122610],{"alt":43,"src":122611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,122613,122614],{},"3.设置固定IP",[19,122616,122617],{},"查看当前IP地址。",[19,122619,122620],{},[1556,122621],{"alt":43,"src":122622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,122624,122625],{},"设置固定IP。",[19,122627,122628],{},[1556,122629],{"alt":43,"src":122630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,122632,122633],{},"至此，IP配置完毕。",[187,122635,122637],{"id":122636},"_722-环境搭建","7.2.2 环境搭建",[19,122639,122640],{},[369,122641,25807],{},[19,122643,122644],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,122646,122647],{},[369,122648,122649],{},"实现",[19,122651,122652],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[171,122654,122655,122658,122661,122664],{},[109,122656,122657],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[109,122659,122660],{},"远程主机启动SSH服务；",[109,122662,122663],{},"本地主机登陆远程主机；",[109,122665,122666],{},"实现数据传输。",[19,122668,122669],{},"1.安装SSH客户端与服务端",[19,122671,122672],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[38,122674,122676],{"className":120870,"code":122675,"language":120872,"meta":120873,"style":43}," sudo apt install openssh-server\n",[26,122677,122678],{"__ignoreMap":43},[47,122679,122680],{"class":49,"line":50},[47,122681,122675],{},[19,122683,122684],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[38,122686,122688],{"className":120870,"code":122687,"language":120872,"meta":120873,"style":43},"sudo apt install openssh-client\n",[26,122689,122690],{"__ignoreMap":43},[47,122691,122692],{"class":49,"line":50},[47,122693,122687],{},[19,122695,122696],{},"2.远程主机启动SSH服务",[19,122698,122699],{},"远程主机启动 ssh 服务命令如下：",[38,122701,122703],{"className":120870,"code":122702,"language":120872,"meta":120873,"style":43},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[26,122704,122705],{"__ignoreMap":43},[47,122706,122707],{"class":49,"line":50},[47,122708,122702],{},[19,122710,122711],{},"启动后可使用如下命令查看服务是否正常运行：",[38,122713,122715],{"className":120870,"code":122714,"language":120872,"meta":120873,"style":43},"ps -e | grep ssh\n",[26,122716,122717],{"__ignoreMap":43},[47,122718,122719],{"class":49,"line":50},[47,122720,122714],{},[19,122722,122723],{},"如果启动成功，会包含 sshd 程序。",[19,122725,122726],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[38,122728,122730],{"className":120870,"code":122729,"language":120872,"meta":120873,"style":43},"sudo systemctl enable ssh\n",[26,122731,122732],{"__ignoreMap":43},[47,122733,122734],{"class":49,"line":50},[47,122735,122729],{},[19,122737,122738],{},"3.本地远程登录",[19,122740,122741],{},"登录远程主机可以调用如下命令:",[38,122743,122745],{"className":117350,"code":122744,"language":117352,"meta":43,"style":43},"ssh -X 用户名@ip地址\n",[26,122746,122747],{"__ignoreMap":43},[47,122748,122749,122751,122754],{"class":49,"line":50},[47,122750,121701],{"class":53},[47,122752,122753],{"class":85}," -X",[47,122755,122756],{"class":81}," 用户名@ip地址\n",[19,122758,122759],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,122761,122762],{},"如果退出，可以调用exit命令：",[38,122764,122766],{"className":120870,"code":122765,"language":120872,"meta":120873,"style":43},"exit\n",[26,122767,122768],{"__ignoreMap":43},[47,122769,122770],{"class":49,"line":50},[47,122771,122765],{},[19,122773,122774],{},[369,122775,122776],{},"4.实现数据传输",[19,122778,122779],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,122781,122782],{},"上传文件指令格式如下：",[38,122784,122786],{"className":120870,"code":122785,"language":120872,"meta":120873,"style":43},"scp 本地文件路径 账号@ip:路径\n",[26,122787,122788],{"__ignoreMap":43},[47,122789,122790],{"class":49,"line":50},[47,122791,122785],{},[19,122793,122794],{},"上传文件夹指令格式如下：",[38,122796,122798],{"className":120870,"code":122797,"language":120872,"meta":120873,"style":43},"scp -r 本地文件夹路径 账号@ip:路径\n",[26,122799,122800],{"__ignoreMap":43},[47,122801,122802],{"class":49,"line":50},[47,122803,122797],{},[19,122805,122806],{},"下载文件指令格式如下：",[38,122808,122810],{"className":120870,"code":122809,"language":120872,"meta":120873,"style":43},"scp 账号@ip:路径 本地文件夹路径\n",[26,122811,122812],{"__ignoreMap":43},[47,122813,122814],{"class":49,"line":50},[47,122815,122809],{},[19,122817,122818],{},"下载文件夹指令格式如下：",[38,122820,122822],{"className":120870,"code":122821,"language":120872,"meta":120873,"style":43},"scp -r 账号@ip:路径 本地文件夹路径\n",[26,122823,122824],{"__ignoreMap":43},[47,122825,122826],{"class":49,"line":50},[47,122827,122821],{},[19,122829,122830],{},[369,122831,122832],{},"优化",[19,122834,122835],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[171,122837,122838,122841],{},[109,122839,122840],{},"本地生成密钥对；",[109,122842,122843],{},"将公钥上传至远程主机。",[19,122845,122846],{},[369,122847,122848],{},"1.生成密钥对",[19,122850,122851],{},"本地客户端生成公私钥：（一路回车默认即可）",[38,122853,122855],{"className":120870,"code":122854,"language":120872,"meta":120873,"style":43},"ssh-keygen\n",[26,122856,122857],{"__ignoreMap":43},[47,122858,122859],{"class":49,"line":50},[47,122860,122854],{},[19,122862,122863],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[171,122865,122866,122869],{},[109,122867,122868],{},"id_rsa （私钥）；",[109,122870,122871],{},"id_rsa.pub (公钥)。",[19,122873,122874],{},[369,122875,122876],{},"2.公钥上传",[19,122878,122879],{},"上传指令如下：",[38,122881,122883],{"className":120870,"code":122882,"language":120872,"meta":120873,"style":43},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[26,122884,122885],{"__ignoreMap":43},[47,122886,122887],{"class":49,"line":50},[47,122888,122882],{},[19,122890,122891],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,122893,122894],{},"以后再远程登录就无需录入密码了。",[187,122896,122898],{"id":122897},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,122900,122901],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,122903,122904],{},[369,122905,122906],{},"1.准备工作",[19,122908,122909],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,122911,122912],{},[369,122913,122914],{},"2.为VScode安装远程开发插件",[19,122916,122917,122918,122921,122922,122925,122926,28439],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[26,122919,122920],{},"扩展：商店","的搜索栏输入",[26,122923,122924],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[26,122927,122928],{},"安装",[19,122930,122931],{},[1556,122932],{"alt":43,"src":122933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,122935,122936],{},[369,122937,122938],{},"3.配置远程连接",[19,122940,122941,122942,122945,122946,122949],{},"步骤1：使用快捷键",[26,122943,122944],{},"ctrl + shift + p","打开命令输入窗口，并输入",[26,122947,122948],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,122951,122952],{},[1556,122953],{"alt":43,"src":122954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,122956,122957,122958,28439],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[26,122959,122960],{},"Add New SSH Host",[19,122962,122963],{},[1556,122964],{"alt":43,"src":122965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,122967,122968,122969,122972,122973,122976,122977,122980],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[26,122970,122971],{},"ssh +X ubuntu@192.168.43.164","，其中，",[26,122974,122975],{},"ubuntu","需要替换为你的登录用户名，",[26,122978,122979],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,122982,122983],{},[1556,122984],{"alt":43,"src":122985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,122987,122988],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,122990,122991],{},[1556,122992],{"alt":43,"src":122993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,122995,122996],{},[1556,122997],{"alt":43,"src":122998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,123000,123001],{},[369,123002,123003],{},"4.使用",[19,123005,123006,123007,122945,123009,123011],{},"步骤1：继续使用快捷键",[26,123008,122944],{},[26,123010,122948],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,123013,123014],{},[1556,123015],{"alt":43,"src":123016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,123018,123019,123020,123023],{},"或者，也可以点击侧边栏的",[26,123021,123022],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,123025,123026],{},[1556,123027],{"alt":43,"src":123028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,123030,123031,123032,123035,123036,123039],{},"步骤2：选择菜单栏的",[26,123033,123034],{},"文件","下的",[26,123037,123038],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,123041,123042],{},[1556,123043],{"alt":43,"src":123044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,123046,123047],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,123049,123051],{"id":123050},"_73-远程桌面","7.3 远程桌面",[19,123053,123054],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,123056,123057],{},"我们选择使用VNC来看。",[171,123059,123060],{},[109,123061,123062],{},"安装VNC服务器：",[19,123064,123065],{},"这里以TigerVNC为例进行安装：",[38,123067,123069],{"className":117350,"code":123068,"language":117352,"meta":43,"style":43},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[26,123070,123071],{"__ignoreMap":43},[47,123072,123073,123075,123077,123079,123082],{"class":49,"line":50},[47,123074,78],{"class":53},[47,123076,117371],{"class":81},[47,123078,23925],{"class":81},[47,123080,123081],{"class":81}," tigervnc-standalone-server",[47,123083,123084],{"class":81}," tigervnc-common\n",[171,123086,123087],{"start":92},[109,123088,123089],{},"设置VNC密码：",[19,123091,123092],{},"为VNC用户设置密码，运行以下命令：",[38,123094,123096],{"className":117350,"code":123095,"language":117352,"meta":43,"style":43},"vncpasswd\n",[26,123097,123098],{"__ignoreMap":43},[47,123099,123100],{"class":49,"line":50},[47,123101,123095],{"class":53},[171,123103,123104],{"start":1273},[109,123105,123106],{},"配置VNC启动脚本:",[19,123108,123109],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[38,123111,123113],{"className":117350,"code":123112,"language":117352,"meta":43,"style":43},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[26,123114,123115,123124],{"__ignoreMap":43},[47,123116,123117,123119,123121],{"class":49,"line":50},[47,123118,101320],{"class":53},[47,123120,29270],{"class":85},[47,123122,123123],{"class":81}," ~\u002F.vnc\n",[47,123125,123126,123129],{"class":49,"line":92},[47,123127,123128],{"class":53},"nano",[47,123130,123131],{"class":81}," ~\u002F.vnc\u002Fxstartup\n",[19,123133,123134],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[38,123136,123138],{"className":117350,"code":123137,"language":117352,"meta":43,"style":43},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[26,123139,123140,123145,123153,123160],{"__ignoreMap":43},[47,123141,123142],{"class":49,"line":50},[47,123143,123144],{"class":279},"#!\u002Fbin\u002Fsh\n",[47,123146,123147,123150],{"class":49,"line":92},[47,123148,123149],{"class":85},"unset",[47,123151,123152],{"class":81}," SESSION_MANAGER\n",[47,123154,123155,123157],{"class":49,"line":1273},[47,123156,123149],{"class":85},[47,123158,123159],{"class":81}," DBUS_SESSION_BUS_ADDRESS\n",[47,123161,123162],{"class":49,"line":1288},[47,123163,123164],{"class":53},"gnome-session\n",[19,123166,123167],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[171,123169,123170],{"start":1288},[109,123171,123172],{},"给予执行权限：",[19,123174,123175],{},"为xstartup文件设置执行权限：",[38,123177,123179],{"className":117350,"code":123178,"language":117352,"meta":43,"style":43},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[26,123180,123181],{"__ignoreMap":43},[47,123182,123183,123185,123188],{"class":49,"line":50},[47,123184,118],{"class":53},[47,123186,123187],{"class":81}," +x",[47,123189,123131],{"class":81},[171,123191,123192],{"start":1294},[109,123193,123194],{},"启动VNC服务器：",[38,123196,123198],{"className":117350,"code":123197,"language":117352,"meta":43,"style":43},"vncserver -geometry 1920x1080 -localhost=0\n",[26,123199,123200],{"__ignoreMap":43},[47,123201,123202,123205,123208,123211],{"class":49,"line":50},[47,123203,123204],{"class":53},"vncserver",[47,123206,123207],{"class":85}," -geometry",[47,123209,123210],{"class":81}," 1920x1080",[47,123212,123213],{"class":85}," -localhost=0\n",[19,123215,123216],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,123218,123219],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[171,123221,123222],{"start":1308},[109,123223,123224],{},"查看已开启的VNC服务器：",[38,123226,123228],{"className":117350,"code":123227,"language":117352,"meta":43,"style":43},"vncserver -list\n",[26,123229,123230],{"__ignoreMap":43},[47,123231,123232,123234],{"class":49,"line":50},[47,123233,123204],{"class":53},[47,123235,123236],{"class":85}," -list\n",[19,123238,123239],{},[1556,123240],{"alt":43,"src":123241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[171,123243,123244],{"start":1314},[109,123245,123246],{},"连接到VNC服务器：",[19,123248,123249],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[171,123251,123252],{"start":1405},[109,123253,123254],{},"停止VNC服务器：",[19,123256,123257],{},"如果需要停止VNC服务器，可以使用以下命令：",[38,123259,123261],{"className":117350,"code":123260,"language":117352,"meta":43,"style":43},"vncserver -kill :1\n",[26,123262,123263],{"__ignoreMap":43},[47,123264,123265,123267,123270],{"class":49,"line":50},[47,123266,123204],{"class":53},[47,123268,123269],{"class":85}," -kill",[47,123271,123272],{"class":81}," :1\n",[19,123274,123275],{},"将:1替换为你实际使用的显示编号。",[19,123277,123278],{},[1556,123279],{"alt":43,"src":123280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,123282,123283],{},[1556,123284],{"alt":43,"src":123285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,123287,123289],{"id":123288},"_74-usb端口设置","7.4 USB端口设置",[19,123291,123292],{},[369,123293,123294],{},"首先先配置好权限",[38,123296,123298],{"className":117350,"code":123297,"language":117352,"meta":43,"style":43},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[26,123299,123300,123305,123318,123325,123330],{"__ignoreMap":43},[47,123301,123302],{"class":49,"line":50},[47,123303,123304],{"class":279},"# 将用户权限提高\n",[47,123306,123307,123309,123311,123313,123316],{"class":49,"line":92},[47,123308,78],{"class":53},[47,123310,26628],{"class":81},[47,123312,26631],{"class":85},[47,123314,123315],{"class":81}," dialout",[47,123317,26636],{"class":221},[47,123319,123320,123322],{"class":49,"line":1273},[47,123321,26655],{"class":53},[47,123323,123324],{"class":81}," dialout\n",[47,123326,123327],{"class":49,"line":1288},[47,123328,123329],{"class":279},"# 查看下面命令是否输出dialout（若输出才正常）\n",[47,123331,123332],{"class":49,"line":1294},[47,123333,123334],{"class":53},"groups\n",[19,123336,123337],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[187,123339,123341],{"id":123340},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,123343,123344,123347],{},[369,123345,123346],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,123349,123350,123353],{},[369,123351,123352],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,123355,123356],{},[369,123357,123358],{},"流程如下：",[19,123360,123361],{},"（1）.查找设备idVendor和idProduct",[19,123363,123364,123365,123368],{},"接入两个USB设备，在终端调用指令",[26,123366,123367],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,123370,123371],{},[1556,123372],{"alt":43,"src":123373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,123375,123376,123377,123380],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[26,123378,123379],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,123382,123383],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,123385,123386],{},"（2）.编写映射规则",[19,123388,123389,123390,123393],{},"在",[26,123391,123392],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[38,123395,123397],{"className":117350,"code":123396,"language":117352,"meta":43,"style":43},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[26,123398,123399],{"__ignoreMap":43},[47,123400,123401,123403,123405],{"class":49,"line":50},[47,123402,78],{"class":53},[47,123404,118637],{"class":81},[47,123406,123407],{"class":81}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,123409,123410],{},"输入如下内容：",[38,123412,123414],{"className":117350,"code":123413,"language":117352,"meta":43,"style":43},"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",[26,123415,123416,123446],{"__ignoreMap":43},[47,123417,123418,123421,123423,123426,123429,123432,123435,123437,123440,123443],{"class":49,"line":50},[47,123419,123420],{"class":221},"KERNEL",[47,123422,267],{"class":217},[47,123424,123425],{"class":81},"=\"ttyUSB*\",",[47,123427,123428],{"class":53}," ATTRS",[47,123430,123431],{"class":81},"{idVendor}==",[47,123433,123434],{"class":53},"\"10c4\"",[47,123436,597],{"class":53},[47,123438,123439],{"class":81}," ATTRS{idProduct}==\"ea60\",",[47,123441,123442],{"class":81}," MODE:=\"0777\",",[47,123444,123445],{"class":81}," SYMLINK+=\"mylidar\"\n",[47,123447,123448,123450,123452,123454,123456,123458,123461,123463,123466,123468],{"class":49,"line":92},[47,123449,123420],{"class":221},[47,123451,267],{"class":217},[47,123453,123425],{"class":81},[47,123455,123428],{"class":53},[47,123457,123431],{"class":81},[47,123459,123460],{"class":53},"\"1a86\"",[47,123462,597],{"class":53},[47,123464,123465],{"class":81}," ATTRS{idProduct}==\"7523\",",[47,123467,123442],{"class":81},[47,123469,123470],{"class":81}," SYMLINK+=\"mycar\"\n",[19,123472,123473],{},"代码解释：",[106,123475,123476,123479,123482,123485],{},[109,123477,123478],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[109,123480,123481],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[109,123483,123484],{},"SYMLINK是符号连接，即绑定的别名；",[109,123486,123487],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,123489,123490,123491,123494,123497],{},"***小提示：***",[23646,123492,123493],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[26,123495,123496],{},"\u002Fetc\u002Fudev\u002Frule.d",[23646,123498,123499],{},"目录即可。",[19,123501,123502],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,123504,123505],{},"（3）.使规则生效",[19,123507,123508],{},"在终端下输入如下指令：",[38,123510,123512],{"className":117350,"code":123511,"language":117352,"meta":43,"style":43},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[26,123513,123514,123519,123531,123542,123546,123551,123564],{"__ignoreMap":43},[47,123515,123516],{"class":49,"line":50},[47,123517,123518],{"class":279},"# Ubuntu用下方命令\n",[47,123520,123521,123523,123525,123528],{"class":49,"line":92},[47,123522,78],{"class":53},[47,123524,120102],{"class":81},[47,123526,123527],{"class":81}," udev",[47,123529,123530],{"class":81}," reload\n",[47,123532,123533,123535,123537,123539],{"class":49,"line":1273},[47,123534,78],{"class":53},[47,123536,120102],{"class":81},[47,123538,123527],{"class":81},[47,123540,123541],{"class":81}," restart\n",[47,123543,123544],{"class":49,"line":1288},[47,123545,2493],{"emptyLinePlaceholder":145},[47,123547,123548],{"class":49,"line":1294},[47,123549,123550],{"class":279},"#Fedora用下方命令\n",[47,123552,123553,123555,123558,123561],{"class":49,"line":1308},[47,123554,78],{"class":53},[47,123556,123557],{"class":81}," udevadm",[47,123559,123560],{"class":81}," control",[47,123562,123563],{"class":85}," --reload\n",[47,123565,123566,123568,123570],{"class":49,"line":1314},[47,123567,78],{"class":53},[47,123569,123557],{"class":81},[47,123571,123572],{"class":81}," trigger\n",[19,123574,123575],{},"再重新插拔设备即可。",[19,123577,123578],{},"（4）.测试",[19,123580,123581],{},"终端下输入如下指令",[38,123583,123585],{"className":117350,"code":123584,"language":117352,"meta":43,"style":43},"ll \u002Fdev | grep ttyUSB\n",[26,123586,123587],{"__ignoreMap":43},[47,123588,123589,123592,123595,123597,123599],{"class":49,"line":50},[47,123590,123591],{"class":53},"ll",[47,123593,123594],{"class":81}," \u002Fdev",[47,123596,25163],{"class":217},[47,123598,30290],{"class":53},[47,123600,123601],{"class":81}," ttyUSB\n",[19,123603,123604],{},"运行结果如下：",[19,123606,123607],{},[1556,123608],{"alt":43,"src":123609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,123611,123612,123613,123616],{},"也可以多次插拔USB设备，会发现设备端口",[26,123614,123615],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,123618,123619],{},[369,123620,118018],{},[19,123622,123623],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[187,123625,123627],{"id":123626},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,123629,123630,123632],{},[369,123631,123346],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,123634,123635,123637],{},[369,123636,123352],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,123639,123640],{},[369,123641,123358],{},[19,123643,123644],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,123646,123647],{},"调用如下指令查看第一台雷达的USB信息：",[38,123649,123651],{"className":117350,"code":123650,"language":117352,"meta":43,"style":43},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[26,123652,123653,123673],{"__ignoreMap":43},[47,123654,123655,123658,123660,123663,123666,123668,123670],{"class":49,"line":50},[47,123656,123657],{"class":53},"udevadm",[47,123659,69875],{"class":81},[47,123661,123662],{"class":85}," --attribute-walk",[47,123664,123665],{"class":85}," --name=\u002Fdev\u002FttyUSB0",[47,123667,25163],{"class":217},[47,123669,30290],{"class":53},[47,123671,123672],{"class":81}," KERNELS\n",[47,123674,123675,123677,123679,123681,123684,123686,123688],{"class":49,"line":92},[47,123676,123657],{"class":53},[47,123678,69875],{"class":81},[47,123680,123662],{"class":85},[47,123682,123683],{"class":85}," --name=\u002Fdev\u002FttyACM0",[47,123685,25163],{"class":217},[47,123687,30290],{"class":53},[47,123689,123672],{"class":81},[19,123691,123692],{},[1556,123693],{"alt":43,"src":123694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,123696,123697],{},"调用如下指令查看第二台雷达的USB信息：",[38,123699,123701],{"className":117350,"code":123700,"language":117352,"meta":43,"style":43},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[26,123702,123703],{"__ignoreMap":43},[47,123704,123705,123707,123709,123711,123714,123716,123718],{"class":49,"line":50},[47,123706,123657],{"class":53},[47,123708,69875],{"class":81},[47,123710,123662],{"class":85},[47,123712,123713],{"class":85}," --name=\u002Fdev\u002FttyUSB1",[47,123715,25163],{"class":217},[47,123717,30290],{"class":53},[47,123719,123672],{"class":81},[19,123721,123722,123723,123726,123727,123730,123731,123734],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[26,123724,123725],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[26,123728,123729],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[369,123732,123733],{},"唯一性标识","”。",[19,123736,123386],{},[19,123738,123389,123739,123741],{},[26,123740,123392],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[38,123743,123744],{"className":117350,"code":123396,"language":117352,"meta":43,"style":43},[26,123745,123746],{"__ignoreMap":43},[47,123747,123748,123750,123752],{"class":49,"line":50},[47,123749,78],{"class":53},[47,123751,118637],{"class":81},[47,123753,123407],{"class":81},[38,123755,123757],{"className":117350,"code":123756,"language":117352,"meta":43,"style":43},"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",[26,123758,123759,123788],{"__ignoreMap":43},[47,123760,123761,123763,123765,123767,123770,123772,123775,123778,123780,123783,123785],{"class":49,"line":50},[47,123762,123420],{"class":221},[47,123764,267],{"class":217},[47,123766,123425],{"class":81},[47,123768,123769],{"class":221}," KERNELS",[47,123771,267],{"class":217},[47,123773,123774],{"class":81},"=\"1-1.3:1.0\",",[47,123776,123777],{"class":53}," MODE:",[47,123779,267],{"class":81},[47,123781,123782],{"class":53},"\"0777\"",[47,123784,597],{"class":53},[47,123786,123787],{"class":81}," SYMLINK+=\"rplidar_front\"\n",[47,123789,123790,123792,123794,123796,123798,123800,123803,123805,123807,123809,123811],{"class":49,"line":92},[47,123791,123420],{"class":221},[47,123793,267],{"class":217},[47,123795,123425],{"class":81},[47,123797,123769],{"class":221},[47,123799,267],{"class":217},[47,123801,123802],{"class":81},"=\"1-1.4:1.0\",",[47,123804,123777],{"class":53},[47,123806,267],{"class":81},[47,123808,123782],{"class":53},[47,123810,597],{"class":53},[47,123812,123813],{"class":81}," SYMLINK+=\"rplidar_back\"\n",[19,123815,123505],{},[19,123817,123508],{},[38,123819,123820],{"className":117350,"code":123511,"language":117352,"meta":43,"style":43},[26,123821,123822,123826,123836,123846,123850,123854,123864],{"__ignoreMap":43},[47,123823,123824],{"class":49,"line":50},[47,123825,123518],{"class":279},[47,123827,123828,123830,123832,123834],{"class":49,"line":92},[47,123829,78],{"class":53},[47,123831,120102],{"class":81},[47,123833,123527],{"class":81},[47,123835,123530],{"class":81},[47,123837,123838,123840,123842,123844],{"class":49,"line":1273},[47,123839,78],{"class":53},[47,123841,120102],{"class":81},[47,123843,123527],{"class":81},[47,123845,123541],{"class":81},[47,123847,123848],{"class":49,"line":1288},[47,123849,2493],{"emptyLinePlaceholder":145},[47,123851,123852],{"class":49,"line":1294},[47,123853,123550],{"class":279},[47,123855,123856,123858,123860,123862],{"class":49,"line":1308},[47,123857,78],{"class":53},[47,123859,123557],{"class":81},[47,123861,123560],{"class":81},[47,123863,123563],{"class":85},[47,123865,123866,123868,123870],{"class":49,"line":1314},[47,123867,78],{"class":53},[47,123869,123557],{"class":81},[47,123871,123572],{"class":81},[19,123873,123575],{},[19,123875,123578],{},[19,123877,123581,123878,123881],{},[26,123879,123880],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,123883,123884],{},[1556,123885],{"alt":43,"src":123886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,123888,123889],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,123891,123892,123894],{},[369,123893,118018],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[187,123896,123898],{"id":123897},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,123900,123901],{},"（1）.查看所连接的主机USB接口的信息",[38,123903,123905],{"className":117350,"code":123904,"language":117352,"meta":43,"style":43},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[26,123906,123907,123937],{"__ignoreMap":43},[47,123908,123909,123911,123913,123916,123918,123920,123922,123924,123927,123930,123932,123935],{"class":49,"line":50},[47,123910,123657],{"class":53},[47,123912,69875],{"class":81},[47,123914,123915],{"class":85}," -a",[47,123917,29270],{"class":85},[47,123919,28476],{"class":221},[47,123921,123657],{"class":53},[47,123923,69875],{"class":81},[47,123925,123926],{"class":85}," -q",[47,123928,123929],{"class":81}," path",[47,123931,25169],{"class":85},[47,123933,123934],{"class":81}," \u002Fdev\u002FttyACM0",[47,123936,228],{"class":221},[47,123938,123939,123941,123943,123945,123947,123949,123951,123953,123955,123957,123959,123962],{"class":49,"line":92},[47,123940,123657],{"class":53},[47,123942,69875],{"class":81},[47,123944,123915],{"class":85},[47,123946,29270],{"class":85},[47,123948,28476],{"class":221},[47,123950,123657],{"class":53},[47,123952,69875],{"class":81},[47,123954,123926],{"class":85},[47,123956,123929],{"class":81},[47,123958,25169],{"class":85},[47,123960,123961],{"class":81}," \u002Fdev\u002FttyUSB0",[47,123963,228],{"class":221},[19,123965,123966],{},[1556,123967],{"alt":43,"src":123968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,123970,123971],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,123973,123386],{},[19,123975,123389,123976,123741],{},[26,123977,123392],{},[38,123979,123980],{"className":117350,"code":123396,"language":117352,"meta":43,"style":43},[26,123981,123982],{"__ignoreMap":43},[47,123983,123984,123986,123988],{"class":49,"line":50},[47,123985,78],{"class":53},[47,123987,118637],{"class":81},[47,123989,123407],{"class":81},[38,123991,123993],{"className":117350,"code":123992,"language":117352,"meta":43,"style":43},"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",[26,123994,123995,124023,124049],{"__ignoreMap":43},[47,123996,123997,123999,124001,124004,124006,124008,124010,124012,124015,124018,124020],{"class":49,"line":50},[47,123998,123420],{"class":221},[47,124000,267],{"class":217},[47,124002,124003],{"class":81},"=\"ttyACM*\",",[47,124005,123428],{"class":53},[47,124007,123431],{"class":81},[47,124009,123460],{"class":53},[47,124011,597],{"class":53},[47,124013,124014],{"class":81}," ATTRS{idProduct}==\"55d4\",",[47,124016,124017],{"class":81}," ATTRS{serial}==\"0001\",",[47,124019,123442],{"class":81},[47,124021,124022],{"class":81}," SYMLINK+=\"ttyACM_MCU\"\n",[47,124024,124025,124027,124029,124031,124033,124035,124037,124039,124041,124044,124046],{"class":49,"line":92},[47,124026,123420],{"class":221},[47,124028,267],{"class":217},[47,124030,124003],{"class":81},[47,124032,123428],{"class":53},[47,124034,123431],{"class":81},[47,124036,123460],{"class":53},[47,124038,597],{"class":53},[47,124040,124014],{"class":81},[47,124042,124043],{"class":81}," ATTRS{serial}==\"0002\",",[47,124045,123442],{"class":81},[47,124047,124048],{"class":81}," SYMLINK+=\"ttyACM_Lidar\"\n",[47,124050,124051,124053,124055,124057,124059,124061,124063,124065,124067,124069],{"class":49,"line":1273},[47,124052,123420],{"class":221},[47,124054,267],{"class":217},[47,124056,123425],{"class":81},[47,124058,123428],{"class":53},[47,124060,123431],{"class":81},[47,124062,123460],{"class":53},[47,124064,597],{"class":53},[47,124066,123465],{"class":81},[47,124068,123442],{"class":81},[47,124070,124071],{"class":81}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,124073,123505],{},[19,124075,123508],{},[38,124077,124078],{"className":117350,"code":123511,"language":117352,"meta":43,"style":43},[26,124079,124080,124084,124094,124104,124108,124112,124122],{"__ignoreMap":43},[47,124081,124082],{"class":49,"line":50},[47,124083,123518],{"class":279},[47,124085,124086,124088,124090,124092],{"class":49,"line":92},[47,124087,78],{"class":53},[47,124089,120102],{"class":81},[47,124091,123527],{"class":81},[47,124093,123530],{"class":81},[47,124095,124096,124098,124100,124102],{"class":49,"line":1273},[47,124097,78],{"class":53},[47,124099,120102],{"class":81},[47,124101,123527],{"class":81},[47,124103,123541],{"class":81},[47,124105,124106],{"class":49,"line":1288},[47,124107,2493],{"emptyLinePlaceholder":145},[47,124109,124110],{"class":49,"line":1294},[47,124111,123550],{"class":279},[47,124113,124114,124116,124118,124120],{"class":49,"line":1308},[47,124115,78],{"class":53},[47,124117,123557],{"class":81},[47,124119,123560],{"class":81},[47,124121,123563],{"class":85},[47,124123,124124,124126,124128],{"class":49,"line":1314},[47,124125,78],{"class":53},[47,124127,123557],{"class":81},[47,124129,123572],{"class":81},[19,124131,124132,124133],{},"再重新插拔设备即可，或者 ",[369,124134,124135],{},"直接重启系统。",[19,124137,123578],{},[19,124139,123581,124140,123881],{},[26,124141,123880],{},[19,124143,124144],{},[1556,124145],{"alt":43,"src":124146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,124148,123889],{},[19,124150,124151,124153],{},[369,124152,118018],{}," 一些设备可能没有串口号等。",[187,124155,124157],{"id":124156},"_744-其他注意事项","7.4.4 其他注意事项",[19,124159,124160,124161,124163,124164,124167,124168,18503,124171,124174,124175,124177],{},"并非所有的USB设备端口号都是",[26,124162,123615],{},"的格式，比如Arduino的端口号可能是",[26,124165,124166],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[26,124169,124170],{},"videon",[26,124172,124173],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[26,124176,124170],{},"端口，绑定时需要关联的也是该接口。",[19,124179,124180,124181,124184,124185,124188,124189,124191,124192,124195,124196,124199,124200,124203,124204,124203,124207,124203,124210,28439],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[26,124182,124183],{},"KERNEL==\"ttyUSB*\"","修改为",[26,124186,124187],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[26,124190,124183],{},"修改为类似于",[26,124193,124194],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[26,124197,124198],{},"video[0,2,4,6]","表示可以绑定的端口为",[26,124201,124202],{},"video0","或",[26,124205,124206],{},"video2",[26,124208,124209],{},"video4",[26,124211,124212],{},"video6",[14,124214,124216],{"id":124215},"_75-挂载内网网页","7.5 挂载内网网页",[19,124218,124219],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,124221,124222],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,124224,124225],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,124227,124228,124229],{},"Termux 下载地址（F-Droid）：",[457,124230,124231],{"href":124231,"rel":124232},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[23956],[19,124234,124235],{},"首先打开app后，先更新软件缓存：",[38,124237,124239],{"className":117350,"code":124238,"language":117352,"meta":43,"style":43},"pkg update\n",[26,124240,124241],{"__ignoreMap":43},[47,124242,124243,124246],{"class":49,"line":50},[47,124244,124245],{"class":53},"pkg",[47,124247,26296],{"class":81},[19,124249,124250],{},"然后换源",[38,124252,124254],{"className":117350,"code":124253,"language":117352,"meta":43,"style":43},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[26,124255,124256],{"__ignoreMap":43},[47,124257,124258,124260,124263],{"class":49,"line":50},[47,124259,123128],{"class":53},[47,124261,124262],{"class":221}," $PREFIX",[47,124264,124265],{"class":81},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,124267,124268],{},"将该文件内容替换为下面：",[38,124270,124272],{"className":117350,"code":124271,"language":117352,"meta":43,"style":43},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[26,124273,124274],{"__ignoreMap":43},[47,124275,124276,124279,124282,124285],{"class":49,"line":50},[47,124277,124278],{"class":53},"deb",[47,124280,124281],{"class":81}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[47,124283,124284],{"class":81}," stable",[47,124286,124287],{"class":81}," main\n",[106,124289,124290,124317],{},[109,124291,124292,124293,124295,124296],{},"如果你使用的是",[26,124294,123128],{},"编辑器：",[106,124297,124298,124305,124311],{},[109,124299,124300,124301,124304],{},"按 ",[26,124302,124303],{},"Ctrl+O"," 保存文件。",[109,124306,124300,124307,124310],{},[26,124308,124309],{},"Enter"," 确认文件名。",[109,124312,124300,124313,124316],{},[26,124314,124315],{},"Ctrl+X"," 退出编辑器。",[109,124318,124292,124319,124295,124322],{},[26,124320,124321],{},"vim",[106,124323,124324,124330],{},[109,124325,124300,124326,124329],{},[26,124327,124328],{},"Esc"," 退出编辑模式。",[109,124331,124332,124333,124335],{},"输入 ",[26,124334,119275],{}," 保存并退出。",[19,124337,124338],{},"接下来重新更新软件源：",[38,124340,124342],{"className":117350,"code":124341,"language":117352,"meta":43,"style":43},"pkg update && pkg upgrade\n",[26,124343,124344],{"__ignoreMap":43},[47,124345,124346,124348,124350,124352,124354],{"class":49,"line":50},[47,124347,124245],{"class":53},[47,124349,117401],{"class":81},[47,124351,26244],{"class":221},[47,124353,124245],{"class":53},[47,124355,117387],{"class":81},[19,124357,124358],{},"安装python：",[38,124360,124362],{"className":117350,"code":124361,"language":117352,"meta":43,"style":43},"pkg install python\n",[26,124363,124364],{"__ignoreMap":43},[47,124365,124366,124368,124370],{"class":49,"line":50},[47,124367,124245],{"class":53},[47,124369,23925],{"class":81},[47,124371,124372],{"class":81}," python\n",[19,124374,124375,26527],{},[369,124376,124377],{},"通过Termux访问设备存储",[19,124379,124380],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[38,124382,124384],{"className":117350,"code":124383,"language":117352,"meta":43,"style":43},"termux-setup-storage\n",[26,124385,124386],{"__ignoreMap":43},[47,124387,124388],{"class":49,"line":50},[47,124389,124383],{"class":53},[171,124391,124392],{},[109,124393,124394,26527,124397],{},[369,124395,124396],{},"进入HTML文件所在的目录",[171,124398,124399],{},[109,124400,124401,124402,124404],{},"使用",[26,124403,101330],{},"命令进入HTML文件所在的目录：",[38,124406,124408],{"className":117350,"code":124407,"language":117352,"meta":43,"style":43},"cd ~\u002Fyour_html_folder\n",[26,124409,124410],{"__ignoreMap":43},[47,124411,124412,124414],{"class":49,"line":50},[47,124413,101330],{"class":85},[47,124415,124416],{"class":81}," ~\u002Fyour_html_folder\n",[171,124418,124419],{"start":92},[109,124420,124421,26527,124424,124429,124446],{},[369,124422,124423],{},"启动Python HTTP服务器",[171,124425,124426],{},[109,124427,124428],{},"运行以下命令启动一个简单的HTTP服务器：",[38,124430,124432],{"className":117350,"code":124431,"language":117352,"meta":43,"style":43},"python -m http.server 8000\n",[26,124433,124434],{"__ignoreMap":43},[47,124435,124436,124438,124440,124443],{"class":49,"line":50},[47,124437,30434],{"class":53},[47,124439,100936],{"class":85},[47,124441,124442],{"class":81}," http.server",[47,124444,124445],{"class":85}," 8000\n",[171,124447,124448],{"start":1273},[109,124449,124450,124451,124454],{},"这会在端口",[26,124452,124453],{},"8000","上启动一个Web服务器。",[106,124456,124457],{},[109,124458,124459],{},"启动服务器后，Termux会显示日志信息，例如：",[38,124461,124463],{"className":120870,"code":124462,"language":120872,"meta":120873,"style":43},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[26,124464,124465],{"__ignoreMap":43},[47,124466,124467],{"class":49,"line":50},[47,124468,124462],{},[106,124470,124471],{},[109,124472,124473],{},"这表示服务器已成功启动。",[19,124475,124476],{},[369,124477,124478],{},"在浏览器中访问HTML文件",[171,124480,124481],{},[109,124482,124483,26527,124486,124491],{},[369,124484,124485],{},"在同一设备上访问",[171,124487,124488],{},[109,124489,124490],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[38,124492,124495],{"className":124493,"code":124494,"language":71718,"meta":43,"style":43},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[26,124496,124497],{"__ignoreMap":43},[47,124498,124499,124502],{"class":49,"line":50},[47,124500,124501],{"class":221},"http:",[47,124503,124504],{"class":279},"\u002F\u002Flocalhost:8000\n",[106,124506,124507],{},[109,124508,124509,124510,124513],{},"如果HTML文件中有",[26,124511,124512],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,124515,124517],{"id":124516},"_76-linux重点知识","7.6 Linux重点知识",[187,124519,124521],{"id":124520},"_761-关于点的说明","7.6.1 关于点的说明",[19,124523,124524],{},[1556,124525],{"alt":43,"src":124526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,124528,124529],{},"一点本目录，两点上目录",[187,124531,124533],{"id":124532},"_762-目录","7.6.2 目录",[22091,124535,124537],{"id":124536},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,124539,124540],{},[369,124541,124542],{},"\u002Fboot:",[19,124544,124545],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,124547,124548],{},[369,124549,124550],{},"\u002Fetc:",[19,124552,124553],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,124555,124556],{},[369,124557,124558],{},"\u002Flib：",[19,124560,124561],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,124563,124564],{},[369,124565,124566],{},"\u002Fsys:",[19,124568,124569],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22091,124571,124573],{"id":124572},"_7622-指令集合","7.6.2.2 指令集合",[19,124575,124576],{},[369,124577,124578],{},"\u002Fbin:",[19,124580,124581],{},"为二进制文件的缩写，存放最经常使用的命令",[19,124583,124584],{},[369,124585,124586],{},"\u002Fsbin:",[19,124588,124589],{},"只有系统管理员才能使用的程序和指令",[22091,124591,124593],{"id":124592},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,124595,124596],{},[369,124597,124598],{},"\u002Fdev:",[19,124600,124601],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,124603,124604],{},[369,124605,124606],{},"\u002Fmedia:",[19,124608,124609],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,124611,124612],{},[369,124613,124614],{},"\u002Fmnt:",[19,124616,124617],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22091,124619,124621],{"id":124620},"_7624-临时文件","7.6.2.4 临时文件",[19,124623,124624],{},[369,124625,124626],{},"\u002Frun:",[19,124628,124629],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,124631,124632],{},[369,124633,124634],{},"\u002Flost+found:",[19,124636,124637],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,124639,124640],{},[369,124641,124642],{},"\u002Ftmp:",[19,124644,124645],{},"这个目录是用来存放一些临时文件的",[22091,124647,124649],{"id":124648},"_7625-账户","7.6.2.5 账户",[19,124651,124652],{},[369,124653,124654],{},"\u002Froot：",[19,124656,124657],{},"系统管理员的用户主目录",[19,124659,124660,26527],{},[369,124661,124662],{},"\u002Fhome",[19,124664,124665],{},"用户的主目录，以用户的账号命名的",[19,124667,124668,26527],{},[369,124669,124670],{},"\u002Fusr",[19,124672,124673],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,124675,124676],{},[369,124677,124678],{},"\u002Fusr\u002Fbin：",[19,124680,124681],{},"系统用户使用的应用程序与指令",[19,124683,124684],{},[369,124685,124686],{},"\u002Fusr\u002Fsbin：",[19,124688,124689],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,124691,124692],{},[369,124693,124694],{},"\u002Fusr\u002Fsrc：",[19,124696,124697],{},"内核源代码默认的放置目录",[22091,124699,124701],{"id":124700},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,124703,124704],{},[369,124705,124706],{},"\u002Fvar：",[19,124708,124709],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,124711,124712],{},[369,124713,124714],{},"\u002Fproc:",[19,124716,124717,124718,124721],{},"管理 ",[369,124719,124720],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22091,124723,124725],{"id":124724},"_7627-扩展用的","7.6.2.7 扩展用的",[19,124727,124728],{},[369,124729,124730],{},"\u002Fopt:",[19,124732,124733],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,124735,124736],{},[369,124737,124738],{},"\u002Fsrv:",[19,124740,124741],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[187,124743,124745],{"id":124744},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,124747,124748],{},[1556,124749],{"alt":43,"src":124750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,124752,124753],{},"windows-->linux:",[19,124755,124756],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,124758,124759],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,124761,124762],{},"linux传输文件到windows",[19,124764,124765],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[187,124767,124769],{"id":124768},"_764-易忘知识","7.6.4 易忘知识",[19,124771,124772],{},"操作系统内核查看",[38,124774,124775],{"className":117350,"code":121344,"language":117352,"meta":43,"style":43},[26,124776,124777],{"__ignoreMap":43},[47,124778,124779,124781],{"class":49,"line":50},[47,124780,70258],{"class":53},[47,124782,121353],{"class":85},[19,124784,124785],{},[1556,124786],{"alt":43,"src":124787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,124789,124790],{},[1556,124791],{"alt":43,"src":124792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[38,124794,124796],{"className":117350,"code":124795,"language":117352,"meta":43,"style":43},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[26,124797,124798,124810],{"__ignoreMap":43},[47,124799,124800,124802,124805,124808],{"class":49,"line":50},[47,124801,121561],{"class":53},[47,124803,124804],{"class":81}," mvtest",[47,124806,124807],{"class":81}," mvtest2",[47,124809,2767],{"class":221},[47,124811,124812],{"class":49,"line":92},[47,124813,124814],{"class":53},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,124816,124817],{},[1556,124818],{"alt":43,"src":124819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,124821,124822],{},[1556,124823],{"alt":43,"src":124824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,124826,124827,124828,124831],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[26,124829,124830],{},"du -a"," 可以快速查看磁盘使用细节。",[187,124833,124835],{"id":124834},"_765-vim","7.6.5 Vim",[19,124837,124838],{},[1556,124839],{"alt":43,"src":124840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,124842,124843],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,124845,124846],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,124848,124849],{},[369,124850,124851],{},"1.命令模式：",[19,124853,124854],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,124856,124857],{},"x 删除当前光标所在处的字符",[19,124859,124860],{},"：切换到底线命令模式，以在最底一行输入命令",[19,124862,124863],{},"a 进行插入模式，在光标下一个位置输入文本",[19,124865,124866],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,124868,124869],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,124871,124872],{},"dd 剪切当前行",[19,124874,124875],{},"yy 复制当前行",[19,124877,124878],{},"p 粘贴剪贴板内容到光标下方",[19,124880,124881],{},"P 粘贴剪贴板内容到光标上方",[19,124883,124884],{},"u 撤销上一次操作",[19,124886,124887],{},"ctrl+r 重做上一次操作",[19,124889,124890,124892],{},[1014,124891],{}," 保存文件",[19,124894,124895,124897],{},[864,124896],{}," 退出Vim编辑器",[19,124899,124900,124902],{},[864,124901],{},"! 强制退出Vim编辑器，不保存修改",[19,124904,124905],{},[369,124906,124907],{},"2.输入模式：",[19,124909,124910],{},[1556,124911],{"alt":43,"src":124912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,124914,124915],{},[369,124916,124917],{},"3.底线命令模式：",[19,124919,124920],{},[1556,124921],{"alt":43,"src":124922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,124924,124925],{},"按下esc可以退出底线命令模式",[187,124927,124929],{"id":124928},"_766-apt","7.6.6 apt",[19,124931,124932],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[187,124934,124936],{"id":124935},"_767-home与root的区别","7.6.7 home与root的区别",[19,124938,124939],{},[1556,124940],{"alt":43,"src":124941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,124943,124944],{},[1556,124945],{"alt":43,"src":124946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,124948,124949],{},[1556,124950],{"alt":43,"src":124951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,124953,124954],{},[1556,124955],{"alt":43,"src":124956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[187,124958,124960],{"id":124959},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,124962,124963],{},[457,124964,124965],{"href":124965,"rel":124966},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[23956],[171,124968,124969,124972],{},[109,124970,124971],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[109,124973,124974],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,124976,124977],{},[1556,124978],{"alt":43,"src":124979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,124981,124982],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,124984,124985],{},[1556,124986],{"alt":43,"src":124987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[38,124989,124991],{"className":120870,"code":124990,"language":120872,"meta":120873,"style":43},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[26,124992,124993,124998],{"__ignoreMap":43},[47,124994,124995],{"class":49,"line":50},[47,124996,124997],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[47,124999,125000],{"class":49,"line":92},[47,125001,125002],{},".\u002Fpycharm.sh\n",[19,125004,125005],{},"3️⃣创建.desktop文件",[19,125007,125008],{},[369,125009,125010],{},"原理：",[106,125012,125013,125023],{},[109,125014,125015,125016,125022],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[369,125017,125018,125021],{},[26,125019,125020],{},".desktop"," 文件"," 来识别应用。",[109,125024,125025,125027,125028],{},[26,125026,125020],{}," 文件相当于一个“应用注册表”，告诉系统：",[106,125029,125030,125033,125036,125039,125042],{},[109,125031,125032],{},"应用名字（Name）",[109,125034,125035],{},"图标（Icon）",[109,125037,125038],{},"执行命令（Exec）",[109,125040,125041],{},"分类（Categories）",[109,125043,125044],{},"是否需要终端（Terminal）",[38,125046,125048],{"className":120870,"code":125047,"language":120872,"meta":120873,"style":43},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[26,125049,125050,125055],{"__ignoreMap":43},[47,125051,125052],{"class":49,"line":50},[47,125053,125054],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[47,125056,125057],{"class":49,"line":92},[47,125058,125059],{},"nano pycharm.desktop\n",[19,125061,125062],{},"nano是一个命令行下的编辑器，也可以使用vim",[38,125064,125066],{"className":120870,"code":125065,"language":120872,"meta":120873,"style":43},"[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",[26,125067,125068,125073,125078,125083,125088,125093,125098,125103,125108,125113],{"__ignoreMap":43},[47,125069,125070],{"class":49,"line":50},[47,125071,125072],{},"[Desktop Entry]\n",[47,125074,125075],{"class":49,"line":92},[47,125076,125077],{},"Version=1.0\n",[47,125079,125080],{"class":49,"line":1273},[47,125081,125082],{},"Type=Application\n",[47,125084,125085],{"class":49,"line":1288},[47,125086,125087],{},"Name=PyCharm\n",[47,125089,125090],{"class":49,"line":1294},[47,125091,125092],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[47,125094,125095],{"class":49,"line":1308},[47,125096,125097],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[47,125099,125100],{"class":49,"line":1314},[47,125101,125102],{},"Comment=JetBrains PyCharm IDE\n",[47,125104,125105],{"class":49,"line":1405},[47,125106,125107],{},"Categories=Development;IDE;\n",[47,125109,125110],{"class":49,"line":1411},[47,125111,125112],{},"Terminal=false\n",[47,125114,125115],{"class":49,"line":1423},[47,125116,125117],{},"StartupWMClass=jetbrains-pycharm\n",[106,125119,125120,125126,125132,125138],{},[109,125121,125122,125125],{},[26,125123,125124],{},"Exec"," → 点击图标时执行的命令",[109,125127,125128,125131],{},[26,125129,125130],{},"Icon"," → 显示在菜单和桌面上的图标",[109,125133,125134,125137],{},[26,125135,125136],{},"Terminal=false"," → 不打开终端",[109,125139,125140,125143],{},[26,125141,125142],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125145,125146,125147],"blockquote",{},[19,125148,125149,125150,125152,125153],{},"可以理解成 ",[26,125151,125020],{}," 文件是 Linux 的 ",[369,125154,125155],{},"快捷方式配置文件",[19,125157,125158],{},"4️⃣设置可执行权限",[38,125160,125162],{"className":120870,"code":125161,"language":120872,"meta":120873,"style":43},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[26,125163,125164],{"__ignoreMap":43},[47,125165,125166],{"class":49,"line":50},[47,125167,125161],{},[19,125169,125170],{},"5️⃣桌面图标启动的话如下：",[38,125172,125174],{"className":120870,"code":125173,"language":120872,"meta":120873,"style":43},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[26,125175,125176,125181],{"__ignoreMap":43},[47,125177,125178],{"class":49,"line":50},[47,125179,125180],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[47,125182,125183],{"class":49,"line":92},[47,125184,125185],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[171,125187,125188],{"start":1273},[109,125189,125190],{},"下载Appimage文件实现软件的安装",[19,125192,125193],{},"1️⃣先下载appimage",[19,125195,125196],{},[457,125197,125198],{"href":125198,"rel":125199},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[23956],[19,125201,125202],{},[1556,125203],{"alt":43,"src":125204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,125206,125207],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,125209,125210],{},[1556,125211],{"alt":43,"src":125212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,125214,125215],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,125217,125218],{},[1556,125219],{"alt":43,"src":125220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,125222,125223],{},[1556,125224],{"alt":43,"src":125225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,125227,125228,125229,125232],{},"3️⃣给他们放在",[26,125230,125231],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,125234,125235],{},"4️⃣给软件执行权限",[38,125237,125239],{"className":120870,"code":125238,"language":120872,"meta":120873,"style":43},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[26,125240,125241,125246],{"__ignoreMap":43},[47,125242,125243],{"class":49,"line":50},[47,125244,125245],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[47,125247,125248],{"class":49,"line":92},[47,125249,125250],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,125252,125253],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[38,125255,125257],{"className":117350,"code":125256,"language":117352,"meta":43,"style":43},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[26,125258,125259,125266,125273,125279],{"__ignoreMap":43},[47,125260,125261,125263],{"class":49,"line":50},[47,125262,101330],{"class":85},[47,125264,125265],{"class":81}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[47,125267,125268,125270],{"class":49,"line":92},[47,125269,101337],{"class":53},[47,125271,125272],{"class":81}," .\u002Fqqmusic.desktop\n",[47,125274,125275,125277],{"class":49,"line":1273},[47,125276,124321],{"class":53},[47,125278,125272],{"class":81},[47,125280,125281,125283,125285,125287],{"class":49,"line":1288},[47,125282,78],{"class":53},[47,125284,82],{"class":81},[47,125286,123187],{"class":81},[47,125288,125272],{"class":81},[19,125290,125291,125293],{},[26,125292,101337],{},"：一个 Linux 命令，主要功能是：",[106,125295,125296,125299],{},[109,125297,125298],{},"如果文件不存在，就创建一个新的空文件",[109,125300,125301],{},"如果文件已存在，就更新该文件的最后修改时间",[38,125303,125305],{"className":120870,"code":125304,"language":120872,"meta":120873,"style":43},"[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",[26,125306,125307,125311,125316,125321,125326,125330,125335],{"__ignoreMap":43},[47,125308,125309],{"class":49,"line":50},[47,125310,125072],{},[47,125312,125313],{"class":49,"line":92},[47,125314,125315],{},"Name=QQ音乐\n",[47,125317,125318],{"class":49,"line":1273},[47,125319,125320],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[47,125322,125323],{"class":49,"line":1288},[47,125324,125325],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[47,125327,125328],{"class":49,"line":1294},[47,125329,125082],{},[47,125331,125332],{"class":49,"line":1308},[47,125333,125334],{},"Categories=Audio;Music;Player;\n",[47,125336,125337],{"class":49,"line":1314},[47,125338,125339],{},"Comment=QQ Music Client for Linux\n",[19,125341,125342],{},"将文件复制进去",[19,125344,125345],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,125347,125348],{},[1556,125349],{"alt":43,"src":125350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,125352,125353],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,125355,125356],{},[1556,125357],{"alt":43,"src":125358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,125360,125361,125362,125365,125366,125369],{},"如果你用的不是KDE，那么也可以直接修改",[26,125363,125364],{},"qqmuic.desktop","：在exec的末尾加上",[26,125367,125368],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[38,125371,125373],{"className":120870,"code":125372,"language":120872,"meta":120873,"style":43},"[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",[26,125374,125375,125379,125383,125388,125392,125396,125400],{"__ignoreMap":43},[47,125376,125377],{"class":49,"line":50},[47,125378,125072],{},[47,125380,125381],{"class":49,"line":92},[47,125382,125315],{},[47,125384,125385],{"class":49,"line":1273},[47,125386,125387],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[47,125389,125390],{"class":49,"line":1288},[47,125391,125325],{},[47,125393,125394],{"class":49,"line":1294},[47,125395,125082],{},[47,125397,125398],{"class":49,"line":1308},[47,125399,125334],{},[47,125401,125402],{"class":49,"line":1314},[47,125403,125339],{},[19,125405,125406],{},[1556,125407],{"alt":43,"src":125408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,125410,125411],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[38,125413,125415],{"className":120870,"code":125414,"language":120872,"meta":120873,"style":43},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[26,125416,125417],{"__ignoreMap":43},[47,125418,125419],{"class":49,"line":50},[47,125420,125414],{},[171,125422,125423],{"start":1288},[109,125424,125425],{},"去Flathub上安装软件",[19,125427,125428],{},[457,125429,125430],{"href":125430,"rel":125431},"https:\u002F\u002Fflathub.org\u002F",[23956],[19,125433,125434],{},"1️⃣去上面的官网搜索软件+下载软件",[19,125436,125437],{},[1556,125438],{"alt":43,"src":125439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[38,125441,125443],{"className":120870,"code":125442,"language":120872,"meta":120873,"style":43},"flatpak install flathub com.obsproject.Studio\n",[26,125444,125445],{"__ignoreMap":43},[47,125446,125447],{"class":49,"line":50},[47,125448,125442],{},[19,125450,125451],{},[1556,125452],{"alt":43,"src":125453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,125455,125456],{},"2️⃣运行软件",[19,125458,125459],{},"a.官方方式：",[19,125461,125462],{},[1556,125463],{"alt":43,"src":125464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[38,125466,125467],{"className":120870,"code":125442,"language":120872,"meta":120873,"style":43},[26,125468,125469],{"__ignoreMap":43},[47,125470,125471],{"class":49,"line":50},[47,125472,125442],{},[19,125474,125475],{},"b.当普通软件运行：",[19,125477,125478],{},[1556,125479],{"alt":43,"src":125480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,125482,125483],{},[1556,125484],{"alt":43,"src":125485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[134,125487,125488],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":43,"searchDepth":92,"depth":92,"links":125490},[125491,125492,125497,125498,125504,125505],{"id":122223,"depth":92,"text":122224},{"id":122565,"depth":92,"text":122566,"children":125493},[125494,125495,125496],{"id":122569,"depth":1273,"text":122570},{"id":122636,"depth":1273,"text":122637},{"id":122897,"depth":1273,"text":122898},{"id":123050,"depth":92,"text":123051},{"id":123288,"depth":92,"text":123289,"children":125499},[125500,125501,125502,125503],{"id":123340,"depth":1273,"text":123341},{"id":123626,"depth":1273,"text":123627},{"id":123897,"depth":1273,"text":123898},{"id":124156,"depth":1273,"text":124157},{"id":124215,"depth":92,"text":124216},{"id":124516,"depth":92,"text":124517,"children":125506},[125507,125508,125509,125510,125511,125512,125513,125514],{"id":124520,"depth":1273,"text":124521},{"id":124532,"depth":1273,"text":124533},{"id":124744,"depth":1273,"text":124745},{"id":124768,"depth":1273,"text":124769},{"id":124834,"depth":1273,"text":124835},{"id":124928,"depth":1273,"text":124929},{"id":124935,"depth":1273,"text":124936},{"id":124959,"depth":1273,"text":124960},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122215,"description":142},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125521,"title":125522,"body":125523,"description":142,"extension":143,"meta":125527,"navigation":145,"path":125528,"seo":125529,"stem":125530,"__hash__":125531},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125524,"toc":125525},[],{"title":43,"searchDepth":92,"depth":92,"links":125526},[],{"category":30317},"\u002Fwiki\u002F2025-01-27-linux",{"title":125522,"description":142},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125533,"title":125534,"body":125535,"description":125539,"extension":143,"meta":125930,"navigation":145,"path":125931,"seo":125932,"stem":125933,"__hash__":125934},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125536,"toc":125928},[125537,125540,125544,125561,125564,125617,125621,125623,125663,125672,125676,125679,125920,125925],[19,125538,125539],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125541,125543],{"id":125542},"_1ubuntu环境配置","1.Ubuntu环境配置",[171,125545,125546,125549,125552,125555,125558],{},[109,125547,125548],{},"ubuntu环境换源",[109,125550,125551],{},"安装cuda",[109,125553,125554],{},"安装miniconda",[109,125556,125557],{},"安装pytorch",[109,125559,125560],{},"安装genesis",[19,125562,125563],{},"参考链接：",[38,125565,125567],{"className":40,"code":125566,"language":42,"meta":43,"style":43},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[26,125568,125569],{"__ignoreMap":43},[47,125570,125571,125574,125577,125580,125582,125585,125588,125590,125593,125596,125598,125601,125604,125606,125609,125612,125614],{"class":49,"line":50},[47,125572,125573],{"class":53},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[47,125575,125576],{"class":81},"=blogdetail",[47,125578,125579],{"class":221},"&sharetype",[47,125581,267],{"class":217},[47,125583,125584],{"class":81},"blogdetail",[47,125586,125587],{"class":221},"&sharerId",[47,125589,267],{"class":217},[47,125591,125592],{"class":81},"144728092",[47,125594,125595],{"class":221},"&sharerefer",[47,125597,267],{"class":217},[47,125599,125600],{"class":81},"PC",[47,125602,125603],{"class":221},"&sharesource",[47,125605,267],{"class":217},[47,125607,125608],{"class":81},"qq_69379513",[47,125610,125611],{"class":221},"&sharefrom",[47,125613,267],{"class":217},[47,125615,125616],{"class":81},"from_link\n",[10,125618,125620],{"id":125619},"_2genesis-报错issue","2.Genesis 报错issue",[19,125622,125563],{},[38,125624,125625],{"className":40,"code":125566,"language":42,"meta":43,"style":43},[26,125626,125627],{"__ignoreMap":43},[47,125628,125629,125631,125633,125635,125637,125639,125641,125643,125645,125647,125649,125651,125653,125655,125657,125659,125661],{"class":49,"line":50},[47,125630,125573],{"class":53},[47,125632,125576],{"class":81},[47,125634,125579],{"class":221},[47,125636,267],{"class":217},[47,125638,125584],{"class":81},[47,125640,125587],{"class":221},[47,125642,267],{"class":217},[47,125644,125592],{"class":81},[47,125646,125595],{"class":221},[47,125648,267],{"class":217},[47,125650,125600],{"class":81},[47,125652,125603],{"class":221},[47,125654,267],{"class":217},[47,125656,125608],{"class":81},[47,125658,125611],{"class":221},[47,125660,267],{"class":217},[47,125662,125616],{"class":81},[38,125664,125666],{"className":40,"code":125665,"language":42,"meta":43,"style":43},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[26,125667,125668],{"__ignoreMap":43},[47,125669,125670],{"class":49,"line":50},[47,125671,125665],{"class":53},[10,125673,125675],{"id":125674},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,125677,125678],{},"hello_robot.py",[38,125680,125682],{"className":30432,"code":125681,"language":30434,"meta":43,"style":43},"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",[26,125683,125684,125690,125705,125709,125721,125733,125737,125750,125754,125773,125783,125793,125807,125811,125815,125820,125824,125834,125841,125855,125862,125872,125877,125881,125899,125904,125908,125915],{"__ignoreMap":43},[47,125685,125686,125688],{"class":49,"line":50},[47,125687,30446],{"class":217},[47,125689,45359],{"class":221},[47,125691,125692,125695,125698,125700,125702],{"class":49,"line":92},[47,125693,125694],{"class":221},"os.environ[",[47,125696,125697],{"class":81},"'PYOPENGL_PLATFORM'",[47,125699,4536],{"class":221},[47,125701,267],{"class":217},[47,125703,125704],{"class":81}," 'glx'\n",[47,125706,125707],{"class":49,"line":1273},[47,125708,2493],{"emptyLinePlaceholder":145},[47,125710,125711,125713,125716,125718],{"class":49,"line":1288},[47,125712,30446],{"class":217},[47,125714,125715],{"class":221}," genesis ",[47,125717,31437],{"class":217},[47,125719,125720],{"class":221}," gs\n",[47,125722,125723,125725,125728,125730],{"class":49,"line":1294},[47,125724,30791],{"class":217},[47,125726,125727],{"class":221}," pynput ",[47,125729,30446],{"class":217},[47,125731,125732],{"class":221}," keyboard\n",[47,125734,125735],{"class":49,"line":1308},[47,125736,2493],{"emptyLinePlaceholder":145},[47,125738,125739,125742,125745,125747],{"class":49,"line":1314},[47,125740,125741],{"class":221},"gs.init(",[47,125743,125744],{"class":5309},"backend",[47,125746,267],{"class":217},[47,125748,125749],{"class":221},"gs.gpu)\n",[47,125751,125752],{"class":49,"line":1405},[47,125753,2493],{"emptyLinePlaceholder":145},[47,125755,125756,125759,125761,125764,125767,125769,125771],{"class":49,"line":1411},[47,125757,125758],{"class":221},"scene ",[47,125760,267],{"class":217},[47,125762,125763],{"class":221}," gs.Scene(",[47,125765,125766],{"class":5309},"show_viewer",[47,125768,267],{"class":217},[47,125770,31530],{"class":85},[47,125772,228],{"class":221},[47,125774,125775,125778,125780],{"class":49,"line":1423},[47,125776,125777],{"class":221},"plane ",[47,125779,267],{"class":217},[47,125781,125782],{"class":221}," scene.add_entity(gs.morphs.Plane())\n",[47,125784,125785,125788,125790],{"class":49,"line":1706},[47,125786,125787],{"class":221},"franka ",[47,125789,267],{"class":217},[47,125791,125792],{"class":221}," scene.add_entity(\n",[47,125794,125795,125798,125800,125802,125805],{"class":49,"line":1711},[47,125796,125797],{"class":221},"    gs.morphs.MJCF(",[47,125799,45408],{"class":5309},[47,125801,267],{"class":217},[47,125803,125804],{"class":81},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[47,125806,38101],{"class":221},[47,125808,125809],{"class":49,"line":1717},[47,125810,228],{"class":221},[47,125812,125813],{"class":49,"line":1722},[47,125814,2493],{"emptyLinePlaceholder":145},[47,125816,125817],{"class":49,"line":1736},[47,125818,125819],{"class":221},"scene.build()\n",[47,125821,125822],{"class":49,"line":1741},[47,125823,2493],{"emptyLinePlaceholder":145},[47,125825,125826,125828,125831],{"class":49,"line":1747},[47,125827,32001],{"class":217},[47,125829,125830],{"class":53}," on_press",[47,125832,125833],{"class":221},"(key):\n",[47,125835,125836,125839],{"class":49,"line":1768},[47,125837,125838],{"class":217},"    try",[47,125840,3832],{"class":221},[47,125842,125843,125845,125848,125850,125853],{"class":49,"line":1773},[47,125844,2590],{"class":217},[47,125846,125847],{"class":221}," key.char ",[47,125849,3042],{"class":217},[47,125851,125852],{"class":81}," 'q'",[47,125854,3832],{"class":221},[47,125856,125857,125859],{"class":49,"line":1787},[47,125858,15825],{"class":217},[47,125860,125861],{"class":85}," False\n",[47,125863,125864,125867,125870],{"class":49,"line":1792},[47,125865,125866],{"class":217},"    except",[47,125868,125869],{"class":85}," AttributeError",[47,125871,3832],{"class":221},[47,125873,125874],{"class":49,"line":1821},[47,125875,125876],{"class":217},"        pass\n",[47,125878,125879],{"class":49,"line":1826},[47,125880,2493],{"emptyLinePlaceholder":145},[47,125882,125883,125886,125888,125891,125894,125896],{"class":49,"line":1843},[47,125884,125885],{"class":221},"listener ",[47,125887,267],{"class":217},[47,125889,125890],{"class":221}," keyboard.Listener(",[47,125892,125893],{"class":5309},"on_press",[47,125895,267],{"class":217},[47,125897,125898],{"class":221},"on_press)\n",[47,125900,125901],{"class":49,"line":1848},[47,125902,125903],{"class":221},"listener.start()\n",[47,125905,125906],{"class":49,"line":1853},[47,125907,2493],{"emptyLinePlaceholder":145},[47,125909,125910,125912],{"class":49,"line":1858},[47,125911,108717],{"class":217},[47,125913,125914],{"class":221}," listener.running:\n",[47,125916,125917],{"class":49,"line":1872},[47,125918,125919],{"class":221},"    scene.step()\n",[19,125921,125922],{},[1556,125923],{"alt":43,"src":125924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[134,125926,125927],{},"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":43,"searchDepth":92,"depth":92,"links":125929},[],{"category":23471},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125534,"description":125539},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":125936,"title":125937,"body":125938,"description":142,"extension":143,"meta":125953,"navigation":145,"path":125954,"seo":125955,"stem":125956,"__hash__":125957},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":125939,"toc":125950},[125940,125943,125947],[10,125941,125937],{"id":125942},"_1-基础知识",[14,125944,125946],{"id":125945},"_11-js的组成","1.1 js的组成",[19,125948,125949],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":43,"searchDepth":92,"depth":92,"links":125951},[125952],{"id":125945,"depth":92,"text":125946},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":125937,"description":142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":125959,"title":125960,"body":125961,"description":142,"extension":143,"meta":126100,"navigation":145,"path":126101,"seo":126102,"stem":126103,"__hash__":126104},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":125962,"toc":126088},[125963,125966,125970,125973,125977,125987,125991,125994,125997,126000,126004,126011,126017,126021,126027,126038,126042,126045,126049,126052,126056,126059,126063,126066,126070,126073,126076,126079,126082,126085],[10,125964,125960],{"id":125965},"_2-vscode必备内容",[14,125967,125969],{"id":125968},"_21-标签分类","2.1 标签分类",[19,125971,125972],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,125974,125976],{"id":125975},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,125978,125979,125980,125982,125983,125986],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[26,125981,445],{}," 然后按 ",[26,125984,125985],{},"Tab","，快速自动生成基本结构。",[14,125988,125990],{"id":125989},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,125992,125993],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,125995,125996],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,125998,125999],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,126001,126003],{"id":126002},"_24-视图缩放","2.4 视图缩放",[19,126005,126006,126007,126010],{},"缩放视图 ",[26,126008,126009],{},"ctrl+"," 可实现代码增大。",[19,126012,126013,126016],{},[26,126014,126015],{},"ctrl-"," 可实现代码减小。",[14,126018,126020],{"id":126019},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,126022,126023,126024,28439],{},"VSCode 新建文件快捷键为 ",[26,126025,126026],{},"ctrl+N",[19,126028,126029,126030,126033,126034,126037],{},"保存快捷键为 ",[26,126031,126032],{},"ctrl+S","，将文本保存为 ",[26,126035,126036],{},".html"," 文件。",[14,126039,126041],{"id":126040},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,126043,126044],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,126046,126048],{"id":126047},"_27-vscode-icons","2.7 vscode-icons",[19,126050,126051],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,126053,126055],{"id":126054},"_28-easy-less","2.8 Easy LESS",[19,126057,126058],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,126060,126062],{"id":126061},"_29-会了吧插件","2.9 会了吧插件",[19,126064,126065],{},"会了吧插件可以展示代码中英语单词的意思。",[14,126067,126069],{"id":126068},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,126071,126072],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,126074,126075],{},"②选定多个相同的单词:ctrl+D",[19,126077,126078],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,126080,126081],{},"④全局替换某些单词:ctrl+h",[19,126083,126084],{},"⑤快速定位到某一行:ctrl+g",[19,126086,126087],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":43,"searchDepth":92,"depth":92,"links":126089},[126090,126091,126092,126093,126094,126095,126096,126097,126098,126099],{"id":125968,"depth":92,"text":125969},{"id":125975,"depth":92,"text":125976},{"id":125989,"depth":92,"text":125990},{"id":126002,"depth":92,"text":126003},{"id":126019,"depth":92,"text":126020},{"id":126040,"depth":92,"text":126041},{"id":126047,"depth":92,"text":126048},{"id":126054,"depth":92,"text":126055},{"id":126061,"depth":92,"text":126062},{"id":126068,"depth":92,"text":126069},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":125960,"description":142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126106,"title":126107,"body":126108,"description":142,"extension":143,"meta":126267,"navigation":145,"path":126268,"seo":126269,"stem":126270,"__hash__":126271},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126109,"toc":126259},[126110,126113,126117,126127,126133,126139,126143,126152,126156,126161,126164,126167,126171,126174,126184,126193,126202,126211,126221,126228,126233,126238,126251],[10,126111,126107],{"id":126112},"_3-html文本与容器标签",[14,126114,126116],{"id":126115},"_31-标题标签","3.1 标题标签",[19,126118,126119,126122,126123,126126],{},[26,126120,126121],{},"\u003Ch1>","我是一级标签",[26,126124,126125],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,126128,126129,126122,126131],{},[26,126130,126121],{},[26,126132,126125],{},[19,126134,123389,126135,126138],{},[26,126136,126137],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,126140,126142],{"id":126141},"_32-段落标签","3.2 段落标签",[19,126144,126145,126148,126149],{},[26,126146,126147],{},"\u003Cp>","....",[26,126150,126151],{},"\u003C\u002Fp>",[14,126153,126155],{"id":126154},"_33-换行标签","3.3 换行标签",[19,126157,126158],{},[26,126159,126160],{},"\u003Cbr \u002F>",[19,126162,126163],{},"具有强制换行的作用",[19,126165,126166],{},"单标签",[14,126168,126170],{"id":126169},"_34-文本格式化标签","3.4 文本格式化标签",[19,126172,126173],{},"提供粗体、斜体和下划线等效果",[19,126175,126176,126177,82593,126180,126183],{},"加粗：",[26,126178,126179],{},"\u003Cstrong>...\u003C\u002Fstrong>",[26,126181,126182],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,126185,126186,126187,82593,126190,126183],{},"斜体：",[26,126188,126189],{},"\u003Cem>...\u003C\u002Fem>",[26,126191,126192],{},"\u003Ci>...\u003C\u002Fi>",[19,126194,126195,126196,82593,126199,126183],{},"删除线：",[26,126197,126198],{},"\u003Cdel>...\u003C\u002Fdel>",[26,126200,126201],{},"\u003Cs>...\u003C\u002Fs>",[19,126203,126204,126205,82593,126208,126183],{},"下划线：",[26,126206,126207],{},"\u003Cins>...\u003C\u002Fins>",[26,126209,126210],{},"\u003Cu>...\u003C\u002Fu>",[14,126212,126214,126215,18503,126218,102747],{"id":126213},"_35-div和span标签","3.5 ",[26,126216,126217],{},"\u003Cdiv>",[26,126219,126220],{},"\u003Cspan>",[19,126222,126223,101072,126225,126227],{},[26,126224,126217],{},[26,126226,126220],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,126229,126230],{},[26,126231,126232],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,126234,126235],{},[26,126236,126237],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,126239,126240,126241,126243,126244,126246,126247,126250],{},"两者特点：①",[26,126242,126217],{}," 标签用来布局，但一行通常只放一个 ",[26,126245,126217],{},"。可以理解为一个大盒子，独占一行，在 ",[26,126248,126249],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,126252,77303,126253,126255,126256,126258],{},[26,126254,126220],{}," 标签也可用于布局，一行可以放多个 ",[26,126257,126220],{},"，可理解为小盒子。",{"title":43,"searchDepth":92,"depth":92,"links":126260},[126261,126262,126263,126264,126265],{"id":126115,"depth":92,"text":126116},{"id":126141,"depth":92,"text":126142},{"id":126154,"depth":92,"text":126155},{"id":126169,"depth":92,"text":126170},{"id":126213,"depth":92,"text":126266},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126107,"description":142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126273,"title":126274,"body":126275,"description":142,"extension":143,"meta":126472,"navigation":145,"path":126473,"seo":126474,"stem":126475,"__hash__":126476},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126276,"toc":126464},[126277,126280,126284,126287,126293,126300,126306,126312,126315,126318,126321,126324,126327,126330,126333,126337,126340,126343,126346,126352,126358,126364,126371,126375,126381,126387,126390,126393,126399,126405,126411,126414,126417,126421,126424,126434,126440,126444,126453,126457,126460],[10,126278,126274],{"id":126279},"_4-html图像与链接",[14,126281,126283],{"id":126282},"_41-图像标签","4.1 图像标签",[19,126285,126286],{},"（1）标签",[19,126288,126289,126292],{},[26,126290,126291],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,126294,126295,126296,126299],{},"src是",[26,126297,126298],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,126301,126302,126303],{},"alt:文本，替换文本。图像不能显示的文字 ",[26,126304,126305],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,126307,126308,126309],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[26,126310,126311],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,126313,126314],{},"width:像素，设置图像的宽度",[19,126316,126317],{},"height:像素，设置图像的高度",[19,126319,126320],{},"border：像素，设置图像的边框粗细",[19,126322,126323],{},"（2）图像标签属性的注意点：",[19,126325,126326],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,126328,126329],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,126331,126332],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,126334,126336],{"id":126335},"_42-路径注意要点","4.2 路径注意要点：",[19,126338,126339],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,126341,126342],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,126344,126345],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,126347,126348,126349],{},"①同一级路径：图像文件位于HTML文件同一级，如",[26,126350,126351],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,126353,126354,126355],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[26,126356,126357],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,126359,126360,126361],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[26,126362,126363],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,126365,126366,126367,470],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[457,126368,126369],{"href":126369,"rel":126370},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[23956],[14,126372,126374],{"id":126373},"_43-超链接标签","4.3 超链接标签",[19,126376,126377,126380],{},[26,126378,126379],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,126382,126383,126384],{},"①语法格式：",[26,126385,126386],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,126388,126389],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,126391,126392],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,126394,126395,126396],{},"③链接分类：外部链接：",[26,126397,126398],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,126400,126401,126402],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[26,126403,126404],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,126406,126407,126408],{},"空链接：如果当时没有确定链接目标时，",[26,126409,126410],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,126412,126413],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,126415,126416],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,126418,126420],{"id":126419},"_44-锚点链接","4.4 锚点链接",[19,126422,126423],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,126425,126426,126427,126430,126431],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[26,126428,126429],{},"\u003Ca href=\"#two\">","第二级",[26,126432,126433],{},"\u003C\u002Fa>",[19,126435,126436,126437],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[26,126438,126439],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,126441,126443],{"id":126442},"_45-注释标签","4.5 注释标签",[19,126445,126446,126449,126450],{},[26,126447,126448],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[26,126451,126452],{},"ctrl+\u002F",[14,126454,126456],{"id":126455},"_46-特殊字符","4.6 特殊字符",[19,126458,126459],{},"可以实现添加多个空格",[1556,126461],{"style":126462,"src":126463},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":43,"searchDepth":92,"depth":92,"links":126465},[126466,126467,126468,126469,126470,126471],{"id":126282,"depth":92,"text":126283},{"id":126335,"depth":92,"text":126336},{"id":126373,"depth":92,"text":126374},{"id":126419,"depth":92,"text":126420},{"id":126442,"depth":92,"text":126443},{"id":126455,"depth":92,"text":126456},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126274,"description":142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126478,"title":126479,"body":126480,"description":142,"extension":143,"meta":126773,"navigation":145,"path":126774,"seo":126775,"stem":126776,"__hash__":126777},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126481,"toc":126764},[126482,126485,126489,126492,126495,126498,126501,126504,126507,126510,126513,126516,126536,126542,126546,126549,126552,126555,126558,126561,126564,126568,126571,126574,126577,126580,126593,126598,126601,126604,126619,126622,126625,126628,126631,126634,126638,126641,126648,126651,126654,126657,126660,126663,126669,126672,126675,126681,126684,126687,126690,126696,126699,126702,126716,126723,126726,126729,126736,126745,126748,126751,126754,126758,126761],[10,126483,126479],{"id":126484},"_5-html表格列表与表单",[14,126486,126488],{"id":126487},"_51-表格标签","5.1 表格标签",[19,126490,126491],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,126493,126494],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,126496,126497],{},"②表格基本语法：",[1556,126499],{"style":126462,"src":126500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,126502,126503],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[1556,126505],{"style":126462,"src":126506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,126508,126509],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[1556,126511],{"style":126462,"src":126512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,126514,126515],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,126517,126518,126521,126522,126524,126525,126528,126529,126531,126532,126535],{},[26,126519,126520],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[26,126523,126520],{},"内部必须拥有",[26,126526,126527],{},"\u003Ctr>","标签，一般位于第一行，",[26,126530,126520],{},"比",[26,126533,126534],{},"\u003Cth>","范围广",[19,126537,126538,126541],{},[26,126539,126540],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,126543,126545],{"id":126544},"_52-合并单元格","5.2 合并单元格",[19,126547,126548],{},"（1）合并单元格方式：",[19,126550,126551],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,126553,126554],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,126556,126557],{},"（2）目标单元格：",[19,126559,126560],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,126562,126563],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,126565,126567],{"id":126566},"_53-列表标签","5.3 列表标签",[19,126569,126570],{},"（1）分类：无序列表、有序列表、自定义列表",[19,126572,126573],{},"①无序列表：",[1556,126575],{"style":126462,"src":126576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,126578,126579],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,126581,126582,126585,126586,126589,126590,126592],{},[26,126583,126584],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[26,126587,126588],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[26,126591,126584],{},"中输入其他标签或文字是不对的",[19,126594,126595,126597],{},[26,126596,126588],{},"之间相当于一个容器，可以容纳所有元素",[19,126599,126600],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,126602,126603],{},"在css中去除前边的小圆点采用如下代码:",[38,126605,126609],{"className":126606,"code":126607,"language":126608,"meta":43,"style":43},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[26,126610,126611],{"__ignoreMap":43},[47,126612,126613,126616],{"class":49,"line":50},[47,126614,126615],{"class":51354},"list-style",[47,126617,126618],{"class":221},": none;\n",[19,126620,126621],{},"②有序列表：",[1556,126623],{"style":126462,"src":126624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,126626,126627],{},"③自定义列表：",[1556,126629],{"style":126462,"src":126630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[1556,126632],{"style":126462,"src":126633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,126635,126637],{"id":126636},"_54-表单标签","5.4 表单标签",[19,126639,126640],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,126642,126643,126644,126647],{},"（1）表单域：包含单元素的区域，",[26,126645,126646],{},"\u003Cform>","标签可以实现信息的收集和传递。",[1556,126649],{"style":126462,"src":126650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,126652,126653],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,126655,126656],{},"表单元素提交必须有name属性",[19,126658,126659],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,126661,126662],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,126664,77280,126665,126668],{},[26,126666,126667],{},"\u003Cinput>","输入表单元素",[1556,126670],{"style":126462,"src":126671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[1556,126673],{"style":126462,"src":126674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,126676,126677,126678],{},"单选按钮：",[26,126679,126680],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[1556,126682],{"style":126462,"src":126683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,126685,126686],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[1556,126688],{"style":126462,"src":126689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,126691,126692,126695],{},[369,126693,126694],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,126697,126698],{},"②select下拉表单元素：可以节约页面控件",[1556,126700],{"style":126462,"src":126701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,126703,126704,13888,126706,126709,126710,126712,126713,126715],{},[369,126705,251],{},[26,126707,126708],{},"\u003Cselect>","中至少包含一对",[26,126711,102768],{},"；在",[26,126714,102768],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,126717,126718,126719,126722],{},"③",[26,126720,126721],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[1556,126724],{"style":126462,"src":126725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,126727,126728],{},"3行20列",[14,126730,126732,126733,102747],{"id":126731},"_55-lable标签","5.5 ",[26,126734,126735],{},"\u003Clable>",[19,126737,126738,126739,126741,126742,126744],{},"它不是表单标签，但常常与表单标签搭配使用，",[26,126740,126735],{},"标签用于绑定一个表单标签，当点击",[26,126743,126735],{},"标签内的文本",[19,126746,126747],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[1556,126749],{"style":126462,"src":126750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[1556,126752],{"style":126462,"src":126753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,126755,126757],{"id":126756},"_56-实例","5.6 实例",[1556,126759],{"style":126462,"src":126760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[134,126762,126763],{},"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":43,"searchDepth":92,"depth":92,"links":126765},[126766,126767,126768,126769,126770,126772],{"id":126487,"depth":92,"text":126488},{"id":126544,"depth":92,"text":126545},{"id":126566,"depth":92,"text":126567},{"id":126636,"depth":92,"text":126637},{"id":126731,"depth":92,"text":126771},"5.5 \u003Clable>标签",{"id":126756,"depth":92,"text":126757},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126479,"description":142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126779,"title":126780,"body":126781,"description":142,"extension":143,"meta":127330,"navigation":145,"path":127331,"seo":127332,"stem":127333,"__hash__":127334},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126782,"toc":127305},[126783,126786,126790,126793,126796,126800,126803,126806,126809,126812,126815,126818,126821,126825,126828,126832,126835,126838,126841,126845,126848,126851,126854,126860,126863,126866,126869,126872,126875,126878,126881,126914,126918,126921,126924,126927,126931,126934,126937,126940,126943,126946,126950,126953,126956,126959,126963,126966,126970,126973,126977,126980,126985,126989,126992,126996,126999,127002,127005,127008,127035,127038,127042,127045,127048,127053,127056,127059,127063,127066,127071,127074,127077,127080,127084,127087,127090,127093,127097,127100,127103,127106,127110,127114,127117,127157,127160,127164,127171,127174,127178,127181,127227,127231,127234,127237,127240,127268,127272,127275,127302],[10,126784,126780],{"id":126785},"_6-css语法与文本样式",[14,126787,126789],{"id":126788},"_61-css语法规范","6.1 css语法规范",[19,126791,126792],{},"由两部分组成，选择器及一条或多条声明",[1556,126794],{"style":126462,"src":126795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,126797,126798],{},[369,126799,251],{},[19,126801,126802],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,126804,126805],{},"②属性与属性值以“键值对”的形式出现",[19,126807,126808],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,126810,126811],{},"④属性和属性值之间用英文“;”分开",[1556,126813],{"style":126462,"src":126814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[1556,126816],{"style":126462,"src":126817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[1556,126819],{"style":126462,"src":126820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,126822,126824],{"id":126823},"_62-css选择器","6.2 css选择器",[19,126826,126827],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[187,126829,126831],{"id":126830},"_621-标签选择器","6.2.1 标签选择器",[19,126833,126834],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,126836,126837],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[1556,126839],{"style":126462,"src":126840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[187,126842,126844],{"id":126843},"_622-类选择器","6.2.2 类选择器",[19,126846,126847],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,126849,126850],{},"②样例",[1556,126852],{"style":126462,"src":126853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,126855,126856,126857,126859],{},"③ ",[369,126858,126694],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,126861,126862],{},"可以理解为给这个标签起了个名字，来表示；",[19,126864,126865],{},"长名称或词组可以使用横线来为选择器命名；",[19,126867,126868],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,126870,126871],{},"命名要有意义；",[1556,126873],{"style":126462,"src":126874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,126876,126877],{},"类选择器也可以指定特殊的元素p.center{}",[19,126879,126880],{},"p.center和.center都对",[38,126882,126884],{"className":126606,"code":126883,"language":126608,"meta":43,"style":43},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[26,126885,126886,126891,126900,126910],{"__ignoreMap":43},[47,126887,126888],{"class":49,"line":50},[47,126889,126890],{"class":279},"\u002F* 类选择器指定特殊元素 *\u002F\n",[47,126892,126893,126895,126898],{"class":49,"line":92},[47,126894,19],{"class":51354},[47,126896,126897],{"class":53},".center",[47,126899,15665],{"class":221},[47,126901,126902,126904,126906,126908],{"class":49,"line":1273},[47,126903,70580],{"class":85},[47,126905,51491],{"class":221},[47,126907,51646],{"class":85},[47,126909,1384],{"class":221},[47,126911,126912],{"class":49,"line":1288},[47,126913,1659],{"class":221},[187,126915,126917],{"id":126916},"_623-多类名使用","6.2.3 多类名使用",[19,126919,126920],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[1556,126922],{"style":126462,"src":126923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,126925,126926],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[187,126928,126930],{"id":126929},"_624-id选择器","6.2.4 id选择器",[19,126932,126933],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,126935,126936],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[1556,126938],{"style":126462,"src":126939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,126941,126942],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,126944,126945],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[187,126947,126949],{"id":126948},"_625-通配符选择器","6.2.5 通配符选择器",[19,126951,126952],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,126954,126955],{},"* {",[19,126957,126958],{},"color=\"red\"}",[187,126960,126962],{"id":126961},"_626-总结","6.2.6 总结",[1556,126964],{"style":126462,"src":126965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,126967,126969],{"id":126968},"_63-css字体属性","6.3 css字体属性",[19,126971,126972],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[187,126974,126976],{"id":126975},"_631-字体系列","6.3.1 字体系列",[19,126978,126979],{},"font-family: '宋体';",[19,126981,126982,126984],{},[369,126983,251],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[187,126986,126988],{"id":126987},"_632-字体大小","6.3.2 字体大小",[19,126990,126991],{},"font-size: 20px",[19,126993,126994,26527],{},[369,126995,126694],{},[19,126997,126998],{},"①px（像素）大小是网页的最常用单位",[19,127000,127001],{},"②谷歌浏览器默认为16px",[19,127003,127004],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,127006,127007],{},"④可以给body指定整个页面的大小：会自动引用",[38,127009,127011],{"className":126606,"code":127010,"language":126608,"meta":43,"style":43},"body {\n  font-size: 16px;\n}\n",[26,127012,127013,127019,127031],{"__ignoreMap":43},[47,127014,127015,127017],{"class":49,"line":50},[47,127016,51854],{"class":51354},[47,127018,15665],{"class":221},[47,127020,127021,127023,127025,127027,127029],{"class":49,"line":92},[47,127022,70680],{"class":85},[47,127024,51491],{"class":221},[47,127026,820],{"class":85},[47,127028,51546],{"class":217},[47,127030,1384],{"class":221},[47,127032,127033],{"class":49,"line":1273},[47,127034,1659],{"class":221},[19,127036,127037],{},"⑤标题标签比较特殊，需要单独指定大小",[187,127039,127041],{"id":127040},"_633-字体粗细","6.3.3 字体粗细",[19,127043,127044],{},"font-weight: bold;",[19,127046,127047],{},"font-weight: 100；",[19,127049,127050,127052],{},[369,127051,251],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,127054,127055],{},"font-weight= 400;",[19,127057,127058],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[187,127060,127062],{"id":127061},"_634-文字样式","6.3.4 文字样式",[19,127064,127065],{},"font-style: normal；",[19,127067,127068,26527],{},[369,127069,127070],{},"属性值",[19,127072,127073],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,127075,127076],{},"②italic：浏览器会显示斜体的字体样式",[1556,127078],{"style":126462,"src":127079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[187,127081,127083],{"id":127082},"_635-字体符合属性","6.3.5 字体符合属性",[1556,127085],{"style":126462,"src":127086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[1556,127088],{"style":126462,"src":127089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,127091,127092],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,127094,127095,26527],{},[369,127096,126694],{},[19,127098,127099],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,127101,127102],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,127104,127105],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,127107,127109],{"id":127108},"_64-css-test文本属性","6.4 css test文本属性",[187,127111,127113],{"id":127112},"_641-文本颜色","6.4.1 文本颜色",[19,127115,127116],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[38,127118,127120],{"className":126606,"code":127119,"language":126608,"meta":43,"style":43},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[26,127121,127122,127127,127133,127143,127148,127153],{"__ignoreMap":43},[47,127123,127124],{"class":49,"line":50},[47,127125,127126],{"class":279},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[47,127128,127129,127131],{"class":49,"line":92},[47,127130,19],{"class":51354},[47,127132,15665],{"class":221},[47,127134,127135,127137,127139,127141],{"class":49,"line":1273},[47,127136,70959],{"class":85},[47,127138,51491],{"class":221},[47,127140,57475],{"class":85},[47,127142,1384],{"class":221},[47,127144,127145],{"class":49,"line":1288},[47,127146,127147],{"class":279},"  \u002F* color: #ff0000; *\u002F\n",[47,127149,127150],{"class":49,"line":1294},[47,127151,127152],{"class":279},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[47,127154,127155],{"class":49,"line":1308},[47,127156,1659],{"class":221},[1556,127158],{"style":126462,"src":127159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[187,127161,127163],{"id":127162},"_642-对齐文本","6.4.2 对齐文本",[19,127165,127166,127167,127170],{},"text-align属于用于设置元素内文本内容的 ",[369,127168,127169],{},"水平对齐"," 方式",[19,127172,127173],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[187,127175,127177],{"id":127176},"_643-装饰文本","6.4.3 装饰文本",[19,127179,127180],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[38,127182,127184],{"className":126606,"code":127183,"language":126608,"meta":43,"style":43},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[26,127185,127186,127192,127202,127206,127212,127223],{"__ignoreMap":43},[47,127187,127188,127190],{"class":49,"line":50},[47,127189,457],{"class":51354},[47,127191,15665],{"class":221},[47,127193,127194,127196,127198,127200],{"class":49,"line":92},[47,127195,70556],{"class":85},[47,127197,51491],{"class":221},[47,127199,54791],{"class":85},[47,127201,1384],{"class":221},[47,127203,127204],{"class":49,"line":1273},[47,127205,1659],{"class":221},[47,127207,127208,127210],{"class":49,"line":1288},[47,127209,19],{"class":51354},[47,127211,15665],{"class":221},[47,127213,127214,127216,127218,127221],{"class":49,"line":1294},[47,127215,70556],{"class":85},[47,127217,51491],{"class":221},[47,127219,127220],{"class":85},"underline",[47,127222,1384],{"class":221},[47,127224,127225],{"class":49,"line":1308},[47,127226,1659],{"class":221},[187,127228,127230],{"id":127229},"_644-文本缩进","6.4.4 文本缩进",[19,127232,127233],{},"实现文本的第一行首行缩进自己指定的距离",[19,127235,127236],{},"20px往右边走；-20px往左边走",[19,127238,127239],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[38,127241,127243],{"className":126606,"code":127242,"language":126608,"meta":43,"style":43},"p {\n  text-indent: 2em;\n}\n",[26,127244,127245,127251,127264],{"__ignoreMap":43},[47,127246,127247,127249],{"class":49,"line":50},[47,127248,19],{"class":51354},[47,127250,15665],{"class":221},[47,127252,127253,127256,127258,127260,127262],{"class":49,"line":92},[47,127254,127255],{"class":85},"  text-indent",[47,127257,51491],{"class":221},[47,127259,298],{"class":85},[47,127261,23646],{"class":217},[47,127263,1384],{"class":221},[47,127265,127266],{"class":49,"line":1273},[47,127267,1659],{"class":221},[187,127269,127271],{"id":127270},"_645-行间距","6.4.5 行间距",[19,127273,127274],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[38,127276,127278],{"className":126606,"code":127277,"language":126608,"meta":43,"style":43},"p {\n  line-height: 1.6;\n}\n",[26,127279,127280,127286,127298],{"__ignoreMap":43},[47,127281,127282,127284],{"class":49,"line":50},[47,127283,19],{"class":51354},[47,127285,15665],{"class":221},[47,127287,127288,127291,127293,127296],{"class":49,"line":92},[47,127289,127290],{"class":85},"  line-height",[47,127292,51491],{"class":221},[47,127294,127295],{"class":85},"1.6",[47,127297,1384],{"class":221},[47,127299,127300],{"class":49,"line":1273},[47,127301,1659],{"class":221},[134,127303,127304],{},"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":43,"searchDepth":92,"depth":92,"links":127306},[127307,127308,127316,127323],{"id":126788,"depth":92,"text":126789},{"id":126823,"depth":92,"text":126824,"children":127309},[127310,127311,127312,127313,127314,127315],{"id":126830,"depth":1273,"text":126831},{"id":126843,"depth":1273,"text":126844},{"id":126916,"depth":1273,"text":126917},{"id":126929,"depth":1273,"text":126930},{"id":126948,"depth":1273,"text":126949},{"id":126961,"depth":1273,"text":126962},{"id":126968,"depth":92,"text":126969,"children":127317},[127318,127319,127320,127321,127322],{"id":126975,"depth":1273,"text":126976},{"id":126987,"depth":1273,"text":126988},{"id":127040,"depth":1273,"text":127041},{"id":127061,"depth":1273,"text":127062},{"id":127082,"depth":1273,"text":127083},{"id":127108,"depth":92,"text":127109,"children":127324},[127325,127326,127327,127328,127329],{"id":127112,"depth":1273,"text":127113},{"id":127162,"depth":1273,"text":127163},{"id":127176,"depth":1273,"text":127177},{"id":127229,"depth":1273,"text":127230},{"id":127270,"depth":1273,"text":127271},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126780,"description":142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127336,"title":127337,"body":127338,"description":142,"extension":143,"meta":127987,"navigation":145,"path":127988,"seo":127989,"stem":127990,"__hash__":127991},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127339,"toc":127968},[127340,127343,127347,127351,127411,127415,127425,127428,127431,127435,127460,127464,127467,127470,127473,127476,127479,127483,127486,127489,127531,127534,127560,127566,127569,127573,127577,127583,127586,127589,127592,127595,127598,127601,127646,127650,127653,127656,127660,127664,127693,127696,127701,127704,127707,127710,127713,127717,127721,127724,127726,127729,127733,127736,127740,127743,127746,127749,127753,127757,127763,127773,127776,127779,127782,127785,127788,127911,127919,127927,127965],[10,127341,127337],{"id":127342},"_7-css引入方式与选择器进阶",[14,127344,127346],{"id":127345},"_71-css引入方式","7.1 css引入方式",[187,127348,127350],{"id":127349},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[38,127352,127356],{"className":127353,"code":127354,"language":127355,"meta":43,"style":43},"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",[26,127357,127358,127366,127373,127385,127398,127403],{"__ignoreMap":43},[47,127359,127360,127362,127364],{"class":49,"line":50},[47,127361,1129],{"class":221},[47,127363,134],{"class":51354},[47,127365,51361],{"class":221},[47,127367,127368,127371],{"class":49,"line":92},[47,127369,127370],{"class":51354},"  h1",[47,127372,15665],{"class":221},[47,127374,127375,127378,127380,127383],{"class":49,"line":1273},[47,127376,127377],{"class":85},"    color",[47,127379,51491],{"class":221},[47,127381,127382],{"class":85},"blue",[47,127384,1384],{"class":221},[47,127386,127387,127390,127392,127394,127396],{"class":49,"line":1288},[47,127388,127389],{"class":85},"    font-size",[47,127391,51491],{"class":221},[47,127393,1019],{"class":85},[47,127395,51546],{"class":217},[47,127397,1384],{"class":221},[47,127399,127400],{"class":49,"line":1294},[47,127401,127402],{"class":221},"  }\n",[47,127404,127405,127407,127409],{"class":49,"line":1308},[47,127406,51839],{"class":221},[47,127408,134],{"class":51354},[47,127410,51361],{"class":221},[19,127412,127413,26527],{},[369,127414,126694],{},[19,127416,77280,127417,127420,127421,127424],{},[26,127418,127419],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[26,127422,127423],{},"\u003Chead>","标签中",[19,127426,127427],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,127429,127430],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[187,127432,127434],{"id":127433},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[38,127436,127438],{"className":127353,"code":127437,"language":127355,"meta":43,"style":43},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[26,127439,127440],{"__ignoreMap":43},[47,127441,127442,127444,127446,127448,127450,127453,127456,127458],{"class":49,"line":50},[47,127443,1129],{"class":221},[47,127445,19],{"class":51354},[47,127447,62680],{"class":53},[47,127449,267],{"class":221},[47,127451,127452],{"class":81},"\"color: red; font-size: 16px;\"",[47,127454,127455],{"class":221},">这是一个段落\u003C\u002F",[47,127457,19],{"class":51354},[47,127459,51361],{"class":221},[19,127461,127462,26527],{},[369,127463,126694],{},[19,127465,127466],{},"①style其实就是标签的属性",[19,127468,127469],{},"②在双引号中间，写法要符合css规范",[19,127471,127472],{},"③可以控制当前的标签设置样式",[19,127474,127475],{},"④书写繁琐，简单时才用",[19,127477,127478],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[187,127480,127482],{"id":127481},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,127484,127485],{},"使用最多，单独建一个css文件，然后html引用",[19,127487,127488],{},"①css文件部分： style.css",[38,127490,127492],{"className":126606,"code":127491,"language":126608,"meta":43,"style":43},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[26,127493,127494,127499,127505,127515,127527],{"__ignoreMap":43},[47,127495,127496],{"class":49,"line":50},[47,127497,127498],{"class":279},"\u002F* style.css *\u002F\n",[47,127500,127501,127503],{"class":49,"line":92},[47,127502,10],{"class":51354},[47,127504,15665],{"class":221},[47,127506,127507,127509,127511,127513],{"class":49,"line":1273},[47,127508,70959],{"class":85},[47,127510,51491],{"class":221},[47,127512,127382],{"class":85},[47,127514,1384],{"class":221},[47,127516,127517,127519,127521,127523,127525],{"class":49,"line":1288},[47,127518,70680],{"class":85},[47,127520,51491],{"class":221},[47,127522,1019],{"class":85},[47,127524,51546],{"class":217},[47,127526,1384],{"class":221},[47,127528,127529],{"class":49,"line":1294},[47,127530,1659],{"class":221},[19,127532,127533],{},"②html部分",[38,127535,127537],{"className":127353,"code":127536,"language":127355,"meta":43,"style":43},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[26,127538,127539],{"__ignoreMap":43},[47,127540,127541,127543,127545,127547,127549,127551,127553,127555,127558],{"class":49,"line":50},[47,127542,1129],{"class":221},[47,127544,69059],{"class":51354},[47,127546,69062],{"class":53},[47,127548,267],{"class":221},[47,127550,69067],{"class":81},[47,127552,61111],{"class":53},[47,127554,267],{"class":221},[47,127556,127557],{"class":81},"\"style.css\"",[47,127559,51361],{"class":221},[19,127561,127562,127565],{},[26,127563,127564],{},"\u003Chr>","水平线标签（但是不常用！）",[19,127567,127568],{},"ctrl+0回到页面原来大小",[14,127570,127572],{"id":127571},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[187,127574,127576],{"id":127575},"_721-快速生成html","7.2.1 快速生成html",[19,127578,127579,127580],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[26,127581,127582],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,127584,127585],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,127587,127588],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,127590,127591],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,127593,127594],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,127596,127597],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,127599,127600],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[38,127602,127604],{"className":127353,"code":127603,"language":127355,"meta":43,"style":43},"\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",[26,127605,127606,127611,127616,127621,127626,127631,127636,127641],{"__ignoreMap":43},[47,127607,127608],{"class":49,"line":50},[47,127609,127610],{"class":279},"\u003C!-- Emmet 语法示例 -->\n",[47,127612,127613],{"class":49,"line":92},[47,127614,127615],{"class":279},"\u003C!-- div*3        → 生成3个div -->\n",[47,127617,127618],{"class":49,"line":1273},[47,127619,127620],{"class":279},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[47,127622,127623],{"class":49,"line":1288},[47,127624,127625],{"class":279},"\u003C!-- div+p        → 兄弟div和p -->\n",[47,127627,127628],{"class":49,"line":1294},[47,127629,127630],{"class":279},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[47,127632,127633],{"class":49,"line":1308},[47,127634,127635],{"class":279},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[47,127637,127638],{"class":49,"line":1314},[47,127639,127640],{"class":279},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[47,127642,127643],{"class":49,"line":1405},[47,127644,127645],{"class":279},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[187,127647,127649],{"id":127648},"_722-快速生成css","7.2.2 快速生成css",[19,127651,127652],{},"简写开头",[19,127654,127655],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,127657,127659],{"id":127658},"_73-css复合选择器","7.3 css复合选择器",[187,127661,127663],{"id":127662},"_731-后代选择器","7.3.1 后代选择器",[38,127665,127667],{"className":126606,"code":127666,"language":126608,"meta":43,"style":43},".parent .child {\n  color: blue;\n}\n",[26,127668,127669,127679,127689],{"__ignoreMap":43},[47,127670,127671,127674,127677],{"class":49,"line":50},[47,127672,127673],{"class":53},".parent",[47,127675,127676],{"class":53}," .child",[47,127678,15665],{"class":221},[47,127680,127681,127683,127685,127687],{"class":49,"line":92},[47,127682,70959],{"class":85},[47,127684,51491],{"class":221},[47,127686,127382],{"class":85},[47,127688,1384],{"class":221},[47,127690,127691],{"class":49,"line":1273},[47,127692,1659],{"class":221},[19,127694,127695],{},"元素1 元素2 {样式声明}",[19,127697,127698],{},[369,127699,127700],{},"注意点:",[19,127702,127703],{},"①元素1和元素2中间用空格隔开",[19,127705,127706],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,127708,127709],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,127711,127712],{},"④元素1和元素2可以是任意基础选择器",[187,127714,127716],{"id":127715},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,127718,127719],{},[369,127720,127700],{},[19,127722,127723],{},"①元素1和元素2中间用大于号隔开",[19,127725,127706],{},[19,127727,127728],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[187,127730,127732],{"id":127731},"_733-并集选择器","7.3.3 并集选择器",[19,127734,127735],{},"元素1，元素2 {样式声明}",[19,127737,127738],{},[369,127739,127700],{},[19,127741,127742],{},"①元素1和元素2中间用逗号隔开",[19,127744,127745],{},"②逗号可以理解为和的意思",[19,127747,127748],{},"③并集选择器通常用于集体声明",[187,127750,127752],{"id":127751},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,127754,127755],{},[369,127756,127700],{},[19,127758,127759,127760,127762],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69059,127761],{},"－:visited－:hover－:active。",[19,127764,127765,127766,127769,127770,25794],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127767,127768],"hover",{}," 、 ",[127771,127772],"first-child",{},[19,127774,127775],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,127777,127778],{},"link对没访问的进行设置",[19,127780,127781],{},"vistied对已访问的进行改变",[19,127783,127784],{},"hover鼠标经过就会变",[19,127786,127787],{},"active常按(点)就会变",[38,127789,127791],{"className":126606,"code":127790,"language":126608,"meta":43,"style":43},"\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",[26,127792,127793,127798,127807,127817,127827,127831,127840,127851,127855,127863,127873,127883,127887,127896,127907],{"__ignoreMap":43},[47,127794,127795],{"class":49,"line":50},[47,127796,127797],{"class":279},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[47,127799,127800,127802,127805],{"class":49,"line":92},[47,127801,457],{"class":51354},[47,127803,127804],{"class":53},":link",[47,127806,15665],{"class":221},[47,127808,127809,127811,127813,127815],{"class":49,"line":1273},[47,127810,70959],{"class":85},[47,127812,51491],{"class":221},[47,127814,62423],{"class":85},[47,127816,1384],{"class":221},[47,127818,127819,127821,127823,127825],{"class":49,"line":1288},[47,127820,70556],{"class":85},[47,127822,51491],{"class":221},[47,127824,54791],{"class":85},[47,127826,1384],{"class":221},[47,127828,127829],{"class":49,"line":1294},[47,127830,1659],{"class":221},[47,127832,127833,127835,127838],{"class":49,"line":1308},[47,127834,457],{"class":51354},[47,127836,127837],{"class":53},":visited",[47,127839,15665],{"class":221},[47,127841,127842,127844,127846,127849],{"class":49,"line":1314},[47,127843,70959],{"class":85},[47,127845,51491],{"class":221},[47,127847,127848],{"class":85},"purple",[47,127850,1384],{"class":221},[47,127852,127853],{"class":49,"line":1405},[47,127854,1659],{"class":221},[47,127856,127857,127859,127861],{"class":49,"line":1411},[47,127858,457],{"class":51354},[47,127860,60994],{"class":53},[47,127862,15665],{"class":221},[47,127864,127865,127867,127869,127871],{"class":49,"line":1423},[47,127866,70959],{"class":85},[47,127868,51491],{"class":221},[47,127870,54943],{"class":85},[47,127872,1384],{"class":221},[47,127874,127875,127877,127879,127881],{"class":49,"line":1706},[47,127876,70556],{"class":85},[47,127878,51491],{"class":221},[47,127880,127220],{"class":85},[47,127882,1384],{"class":221},[47,127884,127885],{"class":49,"line":1711},[47,127886,1659],{"class":221},[47,127888,127889,127891,127894],{"class":49,"line":1717},[47,127890,457],{"class":51354},[47,127892,127893],{"class":53},":active",[47,127895,15665],{"class":221},[47,127897,127898,127900,127902,127905],{"class":49,"line":1722},[47,127899,70959],{"class":85},[47,127901,51491],{"class":221},[47,127903,127904],{"class":85},"green",[47,127906,1384],{"class":221},[47,127908,127909],{"class":49,"line":1736},[47,127910,1659],{"class":221},[187,127912,127914,127915,127918],{"id":127913},"_735-伪类选择器","7.3.5 ",[127916,127917],"focus",{},"伪类选择器",[19,127920,127921,127923,127924,127926],{},[127916,127922],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[26,127925,126667],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[38,127928,127930],{"className":126606,"code":127929,"language":126608,"meta":43,"style":43},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[26,127931,127932,127940,127951,127961],{"__ignoreMap":43},[47,127933,127934,127936,127938],{"class":49,"line":50},[47,127935,53875],{"class":51354},[47,127937,61954],{"class":53},[47,127939,15665],{"class":221},[47,127941,127942,127945,127947,127949],{"class":49,"line":92},[47,127943,127944],{"class":85},"  border-color",[47,127946,51491],{"class":221},[47,127948,54943],{"class":85},[47,127950,1384],{"class":221},[47,127952,127953,127955,127957,127959],{"class":49,"line":1273},[47,127954,70852],{"class":85},[47,127956,51491],{"class":221},[47,127958,54791],{"class":85},[47,127960,1384],{"class":221},[47,127962,127963],{"class":49,"line":1288},[47,127964,1659],{"class":221},[134,127966,127967],{},"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":43,"searchDepth":92,"depth":92,"links":127969},[127970,127975,127979],{"id":127345,"depth":92,"text":127346,"children":127971},[127972,127973,127974],{"id":127349,"depth":1273,"text":127350},{"id":127433,"depth":1273,"text":127434},{"id":127481,"depth":1273,"text":127482},{"id":127571,"depth":92,"text":127572,"children":127976},[127977,127978],{"id":127575,"depth":1273,"text":127576},{"id":127648,"depth":1273,"text":127649},{"id":127658,"depth":92,"text":127659,"children":127980},[127981,127982,127983,127984,127985],{"id":127662,"depth":1273,"text":127663},{"id":127715,"depth":1273,"text":127716},{"id":127731,"depth":1273,"text":127732},{"id":127751,"depth":1273,"text":127752},{"id":127913,"depth":1273,"text":127986},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127337,"description":142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":127993,"title":127994,"body":127995,"description":142,"extension":143,"meta":129918,"navigation":145,"path":129919,"seo":129920,"stem":129921,"__hash__":129922},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":127996,"toc":129892},[127997,128000,128004,128013,128017,128043,128048,128051,128054,128057,128060,128064,128067,128077,128085,128089,128124,128129,128132,128135,128138,128141,128145,128148,128157,128161,128174,128179,128182,128185,128188,128192,128195,128199,128202,128257,128260,128291,128294,128348,128352,128355,128521,128644,128647,128650,128653,128656,128660,128663,128667,128670,128673,128677,128680,128711,128738,128766,128769,128773,128799,128842,128846,128940,128943,128970,128973,128976,128979,128982,128985,128988,128991,128994,128997,129001,129058,129085,129089,129137,129141,129182,129184,129187,129190,129193,129196,129200,129292,129295,129298,129301,129305,129428,129629,129633,129637,129640,129643,129646,129650,129653,129656,129681,129684,129687,129690,129693,129696,129700,129708,129770,129773,129831,129834,129837,129840,129843,129846,129849,129852,129889],[10,127998,127994],{"id":127999},"_8-css显示模式与背景特性",[14,128001,128003],{"id":128002},"_81-css元素显示模式","8.1 css元素显示模式",[19,128005,128006,128007,128009,128010,128012],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[26,128008,126217],{},"自己占一行，比如一行可以放多个",[26,128011,126220],{},"，HTML 元素一般分为块元素和行内元素两种类型",[187,128014,128016],{"id":128015},"_811-块元素","8.1.1 块元素",[19,128018,128019,128020,128022,128023,60,128026,60,128028,60,128030,60,128033,60,128036,128039,128040,128042],{},"常见的块元素有",[26,128021,126121],{},"~",[26,128024,128025],{},"\u003Ch6>",[26,128027,126147],{},[26,128029,126217],{},[26,128031,128032],{},"\u003Cul>",[26,128034,128035],{},"\u003Col>",[26,128037,128038],{},"\u003Cli>","等，其中 ",[26,128041,126217],{}," 标签是最典型的块元素",[19,128044,128045],{},[369,128046,128047],{},"块级元素的特点：",[19,128049,128050],{},"① 比较霸道，自己独占一行。",[19,128052,128053],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,128055,128056],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,128058,128059],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,128061,128062],{},[369,128063,251],{},[19,128065,128066],{},"①文字类的元素内不能使用块级元素",[19,128068,77303,128069,128071,128072,128074,128075],{},[26,128070,126147],{}," 标签主要用于存放文字，因此 ",[26,128073,126147],{}," 里面不能放块级元素，特别是不能放",[26,128076,126217],{},[19,128078,128079,128080,128022,128082,128084],{},"⑥同理， ",[26,128081,126121],{},[26,128083,128025],{},"等都是文字类块级标签，里面也不能放其他块级元素",[187,128086,128088],{"id":128087},"_812-行内元素","8.1.2 行内元素",[19,128090,128091,128092,60,128094,60,128097,60,128100,60,128103,60,128106,60,128109,60,128112,60,128115,60,128118,128120,128121,128123],{},"常见的行内元素有 ",[26,128093,126379],{},[26,128095,128096],{},"\u003Cstrong>",[26,128098,128099],{},"\u003Cb>",[26,128101,128102],{},"\u003Cem>",[26,128104,128105],{},"\u003Ci>",[26,128107,128108],{},"\u003Cdel>",[26,128110,128111],{},"\u003Cs>",[26,128113,128114],{},"\u003Cins>",[26,128116,128117],{},"\u003Cu>",[26,128119,126220],{}," 等，其中 ",[26,128122,126220],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,128125,128126],{},[369,128127,128128],{},"特点：",[19,128130,128131],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,128133,128134],{},"② 高、宽直接设置是无效的。",[19,128136,128137],{},"③ 默认宽度就是它本身内容的宽度。",[19,128139,128140],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,128142,128143],{},[369,128144,251],{},[19,128146,128147],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,128149,128150,128151,128153,128154,128156],{},"②特殊情况链接 ",[26,128152,126379],{}," 里面可以放块级元素，但是给 ",[26,128155,126379],{}," 转换一下块级模式最安全",[187,128158,128160],{"id":128159},"_813-行内块元素","8.1.3 行内块元素",[19,128162,128163,128164,60,128167,60,128170,128173],{},"在行内元素中有几个特殊的标签 —— ",[26,128165,128166],{},"\u003Cimg \u002F>",[26,128168,128169],{},"\u003Cinput \u002F>",[26,128171,128172],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,128175,128176],{},[369,128177,128178],{},"行内块元素的特点：",[19,128180,128181],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,128183,128184],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,128186,128187],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[187,128189,128191],{"id":128190},"_814-总结","8.1.4 总结",[1556,128193],{"style":126462,"src":128194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[187,128196,128198],{"id":128197},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,128200,128201],{},"①转换为块元素：display:block;",[38,128203,128205],{"className":126606,"code":128204,"language":126608,"meta":43,"style":43},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[26,128206,128207,128212,128218,128229,128241,128253],{"__ignoreMap":43},[47,128208,128209],{"class":49,"line":50},[47,128210,128211],{"class":279},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[47,128213,128214,128216],{"class":49,"line":92},[47,128215,457],{"class":51354},[47,128217,15665],{"class":221},[47,128219,128220,128223,128225,128227],{"class":49,"line":1273},[47,128221,128222],{"class":85},"  display",[47,128224,51491],{"class":221},[47,128226,60923],{"class":85},[47,128228,1384],{"class":221},[47,128230,128231,128233,128235,128237,128239],{"class":49,"line":1288},[47,128232,70622],{"class":85},[47,128234,51491],{"class":221},[47,128236,530],{"class":85},[47,128238,51546],{"class":217},[47,128240,1384],{"class":221},[47,128242,128243,128245,128247,128249,128251],{"class":49,"line":1294},[47,128244,70842],{"class":85},[47,128246,51491],{"class":221},[47,128248,620],{"class":85},[47,128250,51546],{"class":217},[47,128252,1384],{"class":221},[47,128254,128255],{"class":49,"line":1308},[47,128256,1659],{"class":221},[19,128258,128259],{},"②转换为行内元素：display:inline;",[38,128261,128263],{"className":126606,"code":128262,"language":126608,"meta":43,"style":43},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[26,128264,128265,128270,128276,128287],{"__ignoreMap":43},[47,128266,128267],{"class":49,"line":50},[47,128268,128269],{"class":279},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[47,128271,128272,128274],{"class":49,"line":92},[47,128273,51665],{"class":51354},[47,128275,15665],{"class":221},[47,128277,128278,128280,128282,128285],{"class":49,"line":1273},[47,128279,128222],{"class":85},[47,128281,51491],{"class":221},[47,128283,128284],{"class":85},"inline",[47,128286,1384],{"class":221},[47,128288,128289],{"class":49,"line":1288},[47,128290,1659],{"class":221},[19,128292,128293],{},"③转换为行内块：display:inline-block;",[38,128295,128297],{"className":126606,"code":128296,"language":126608,"meta":43,"style":43},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[26,128298,128299,128304,128310,128320,128332,128344],{"__ignoreMap":43},[47,128300,128301],{"class":49,"line":50},[47,128302,128303],{"class":279},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[47,128305,128306,128308],{"class":49,"line":92},[47,128307,47],{"class":51354},[47,128309,15665],{"class":221},[47,128311,128312,128314,128316,128318],{"class":49,"line":1273},[47,128313,128222],{"class":85},[47,128315,51491],{"class":221},[47,128317,72437],{"class":85},[47,128319,1384],{"class":221},[47,128321,128322,128324,128326,128328,128330],{"class":49,"line":1288},[47,128323,70622],{"class":85},[47,128325,51491],{"class":221},[47,128327,831],{"class":85},[47,128329,51546],{"class":217},[47,128331,1384],{"class":221},[47,128333,128334,128336,128338,128340,128342],{"class":49,"line":1294},[47,128335,70842],{"class":85},[47,128337,51491],{"class":221},[47,128339,1170],{"class":85},[47,128341,51546],{"class":217},[47,128343,1384],{"class":221},[47,128345,128346],{"class":49,"line":1308},[47,128347,1659],{"class":221},[187,128349,128351],{"id":128350},"_816-小米侧边栏","8.1.6 小米侧边栏",[1556,128353],{"style":126462,"src":128354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[38,128356,128358],{"className":127353,"code":128357,"language":127355,"meta":43,"style":43},"\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",[26,128359,128360,128365,128380,128399,128418,128437,128456,128475,128494,128513],{"__ignoreMap":43},[47,128361,128362],{"class":49,"line":50},[47,128363,128364],{"class":279},"\u003C!-- 小米侧边栏案例 -->\n",[47,128366,128367,128369,128371,128373,128375,128378],{"class":49,"line":92},[47,128368,1129],{"class":221},[47,128370,51665],{"class":51354},[47,128372,53540],{"class":53},[47,128374,267],{"class":221},[47,128376,128377],{"class":81},"\"sidebar\"",[47,128379,51361],{"class":221},[47,128381,128382,128384,128386,128388,128390,128392,128395,128397],{"class":49,"line":1273},[47,128383,52198],{"class":221},[47,128385,457],{"class":51354},[47,128387,61111],{"class":53},[47,128389,267],{"class":221},[47,128391,61116],{"class":81},[47,128393,128394],{"class":221},">手机 电话卡\u003C\u002F",[47,128396,457],{"class":51354},[47,128398,51361],{"class":221},[47,128400,128401,128403,128405,128407,128409,128411,128414,128416],{"class":49,"line":1288},[47,128402,52198],{"class":221},[47,128404,457],{"class":51354},[47,128406,61111],{"class":53},[47,128408,267],{"class":221},[47,128410,61116],{"class":81},[47,128412,128413],{"class":221},">电视 盒子\u003C\u002F",[47,128415,457],{"class":51354},[47,128417,51361],{"class":221},[47,128419,128420,128422,128424,128426,128428,128430,128433,128435],{"class":49,"line":1294},[47,128421,52198],{"class":221},[47,128423,457],{"class":51354},[47,128425,61111],{"class":53},[47,128427,267],{"class":221},[47,128429,61116],{"class":81},[47,128431,128432],{"class":221},">笔记本 平板\u003C\u002F",[47,128434,457],{"class":51354},[47,128436,51361],{"class":221},[47,128438,128439,128441,128443,128445,128447,128449,128452,128454],{"class":49,"line":1308},[47,128440,52198],{"class":221},[47,128442,457],{"class":51354},[47,128444,61111],{"class":53},[47,128446,267],{"class":221},[47,128448,61116],{"class":81},[47,128450,128451],{"class":221},">出行 穿戴\u003C\u002F",[47,128453,457],{"class":51354},[47,128455,51361],{"class":221},[47,128457,128458,128460,128462,128464,128466,128468,128471,128473],{"class":49,"line":1314},[47,128459,52198],{"class":221},[47,128461,457],{"class":51354},[47,128463,61111],{"class":53},[47,128465,267],{"class":221},[47,128467,61116],{"class":81},[47,128469,128470],{"class":221},">智能 路由器\u003C\u002F",[47,128472,457],{"class":51354},[47,128474,51361],{"class":221},[47,128476,128477,128479,128481,128483,128485,128487,128490,128492],{"class":49,"line":1405},[47,128478,52198],{"class":221},[47,128480,457],{"class":51354},[47,128482,61111],{"class":53},[47,128484,267],{"class":221},[47,128486,61116],{"class":81},[47,128488,128489],{"class":221},">健康 儿童\u003C\u002F",[47,128491,457],{"class":51354},[47,128493,51361],{"class":221},[47,128495,128496,128498,128500,128502,128504,128506,128509,128511],{"class":49,"line":1411},[47,128497,52198],{"class":221},[47,128499,457],{"class":51354},[47,128501,61111],{"class":53},[47,128503,267],{"class":221},[47,128505,61116],{"class":81},[47,128507,128508],{"class":221},">耳机 音响\u003C\u002F",[47,128510,457],{"class":51354},[47,128512,51361],{"class":221},[47,128514,128515,128517,128519],{"class":49,"line":1423},[47,128516,51839],{"class":221},[47,128518,51665],{"class":51354},[47,128520,51361],{"class":221},[38,128522,128524],{"className":126606,"code":128523,"language":126608,"meta":43,"style":43},".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",[26,128525,128526,128535,128545,128558,128570,128582,128594,128604,128615,128619,128629,128640],{"__ignoreMap":43},[47,128527,128528,128531,128533],{"class":49,"line":50},[47,128529,128530],{"class":53},".sidebar",[47,128532,1492],{"class":51354},[47,128534,15665],{"class":221},[47,128536,128537,128539,128541,128543],{"class":49,"line":92},[47,128538,128222],{"class":85},[47,128540,51491],{"class":221},[47,128542,60923],{"class":85},[47,128544,1384],{"class":221},[47,128546,128547,128549,128551,128554,128556],{"class":49,"line":1273},[47,128548,70622],{"class":85},[47,128550,51491],{"class":221},[47,128552,128553],{"class":85},"234",[47,128555,51546],{"class":217},[47,128557,1384],{"class":221},[47,128559,128560,128562,128564,128566,128568],{"class":49,"line":1288},[47,128561,70842],{"class":85},[47,128563,51491],{"class":221},[47,128565,671],{"class":85},[47,128567,51546],{"class":217},[47,128569,1384],{"class":221},[47,128571,128572,128574,128576,128578,128580],{"class":49,"line":1294},[47,128573,127290],{"class":85},[47,128575,51491],{"class":221},[47,128577,671],{"class":85},[47,128579,51546],{"class":217},[47,128581,1384],{"class":221},[47,128583,128584,128586,128588,128590,128592],{"class":49,"line":1308},[47,128585,70877],{"class":85},[47,128587,51491],{"class":221},[47,128589,1170],{"class":85},[47,128591,51546],{"class":217},[47,128593,1384],{"class":221},[47,128595,128596,128598,128600,128602],{"class":49,"line":1314},[47,128597,70959],{"class":85},[47,128599,51491],{"class":221},[47,128601,60896],{"class":85},[47,128603,1384],{"class":221},[47,128605,128606,128608,128610,128613],{"class":49,"line":1405},[47,128607,70932],{"class":85},[47,128609,51491],{"class":221},[47,128611,128612],{"class":85},"#55585a",[47,128614,1384],{"class":221},[47,128616,128617],{"class":49,"line":1411},[47,128618,1659],{"class":221},[47,128620,128621,128623,128625,128627],{"class":49,"line":1423},[47,128622,128530],{"class":53},[47,128624,1492],{"class":51354},[47,128626,60994],{"class":53},[47,128628,15665],{"class":221},[47,128630,128631,128633,128635,128638],{"class":49,"line":1706},[47,128632,70932],{"class":85},[47,128634,51491],{"class":221},[47,128636,128637],{"class":85},"#ff6700",[47,128639,1384],{"class":221},[47,128641,128642],{"class":49,"line":1711},[47,128643,1659],{"class":221},[1556,128645],{"style":126462,"src":128646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,128648,128649],{},"行高=盒子高度：实现文字的垂直居中",[19,128651,128652],{},"原理讲解：",[1556,128654],{"style":126462,"src":128655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,128657,128659],{"id":128658},"_82-css背景","8.2 css背景",[19,128661,128662],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[187,128664,128666],{"id":128665},"_821-背景颜色","8.2.1 背景颜色",[19,128668,128669],{},"background-color:颜色值;",[19,128671,128672],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[187,128674,128676],{"id":128675},"_822-背景图片","8.2.2 背景图片",[19,128678,128679],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[38,128681,128683],{"className":126606,"code":128682,"language":126608,"meta":43,"style":43},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[26,128684,128685,128691,128707],{"__ignoreMap":43},[47,128686,128687,128689],{"class":49,"line":50},[47,128688,51665],{"class":51354},[47,128690,15665],{"class":221},[47,128692,128693,128696,128698,128700,128702,128705],{"class":49,"line":92},[47,128694,128695],{"class":85},"  background-image",[47,128697,51491],{"class":221},[47,128699,61780],{"class":85},[47,128701,222],{"class":221},[47,128703,128704],{"class":5309},"images\u002Fbg.png",[47,128706,2812],{"class":221},[47,128708,128709],{"class":49,"line":1273},[47,128710,1659],{"class":221},[357,128712,128713,128722],{},[360,128714,128715],{},[363,128716,128717,128720],{},[366,128718,128719],{"align":23829},"参数值",[366,128721,102750],{"align":23829},[404,128723,128724,128731],{},[363,128725,128726,128728],{},[409,128727,54791],{"align":23829},[409,128729,128730],{"align":23829},"无背景图（默认的）",[363,128732,128733,128735],{},[409,128734,61780],{"align":23829},[409,128736,128737],{"align":23829},"使用绝对或相对地址指定背景图像",[38,128739,128740],{"className":126606,"code":128682,"language":126608,"meta":43,"style":43},[26,128741,128742,128748,128762],{"__ignoreMap":43},[47,128743,128744,128746],{"class":49,"line":50},[47,128745,51665],{"class":51354},[47,128747,15665],{"class":221},[47,128749,128750,128752,128754,128756,128758,128760],{"class":49,"line":92},[47,128751,128695],{"class":85},[47,128753,51491],{"class":221},[47,128755,61780],{"class":85},[47,128757,222],{"class":221},[47,128759,128704],{"class":5309},[47,128761,2812],{"class":221},[47,128763,128764],{"class":49,"line":1273},[47,128765,1659],{"class":221},[19,128767,128768],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[187,128770,128772],{"id":128771},"_823-背景平铺","8.2.3 背景平铺",[38,128774,128776],{"className":126606,"code":128775,"language":126608,"meta":43,"style":43},"div {\n  background-repeat: no-repeat;\n}\n",[26,128777,128778,128784,128795],{"__ignoreMap":43},[47,128779,128780,128782],{"class":49,"line":50},[47,128781,51665],{"class":51354},[47,128783,15665],{"class":221},[47,128785,128786,128789,128791,128793],{"class":49,"line":92},[47,128787,128788],{"class":85},"  background-repeat",[47,128790,51491],{"class":221},[47,128792,61790],{"class":85},[47,128794,1384],{"class":221},[47,128796,128797],{"class":49,"line":1273},[47,128798,1659],{"class":221},[357,128800,128801,128809],{},[360,128802,128803],{},[363,128804,128805,128807],{},[366,128806,128719],{"align":23829},[366,128808,102750],{"align":23829},[404,128810,128811,128819,128826,128834],{},[363,128812,128813,128816],{},[409,128814,128815],{"align":23829},"repeat",[409,128817,128818],{"align":23829},"背景图像在纵向和横向上平铺（默认的）",[363,128820,128821,128823],{},[409,128822,61790],{"align":23829},[409,128824,128825],{"align":23829},"背景图像不平铺",[363,128827,128828,128831],{},[409,128829,128830],{"align":23829},"repeat-x",[409,128832,128833],{"align":23829},"背景图像在横向上平铺",[363,128835,128836,128839],{},[409,128837,128838],{"align":23829},"repeat-y",[409,128840,128841],{"align":23829},"背景图像在纵向平铺",[187,128843,128845],{"id":128844},"_824-背景图片位置","8.2.4 背景图片位置",[38,128847,128849],{"className":126606,"code":128848,"language":126608,"meta":43,"style":43},"\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",[26,128850,128851,128856,128862,128876,128880,128885,128891,128907,128911,128916,128922,128936],{"__ignoreMap":43},[47,128852,128853],{"class":49,"line":50},[47,128854,128855],{"class":279},"\u002F* 方位名词 *\u002F\n",[47,128857,128858,128860],{"class":49,"line":92},[47,128859,51665],{"class":51354},[47,128861,15665],{"class":221},[47,128863,128864,128867,128869,128871,128874],{"class":49,"line":1273},[47,128865,128866],{"class":85},"  background-position",[47,128868,51491],{"class":221},[47,128870,51646],{"class":85},[47,128872,128873],{"class":85}," top",[47,128875,1384],{"class":221},[47,128877,128878],{"class":49,"line":1288},[47,128879,1659],{"class":221},[47,128881,128882],{"class":49,"line":1294},[47,128883,128884],{"class":279},"\u002F* 精确单位 *\u002F\n",[47,128886,128887,128889],{"class":49,"line":1308},[47,128888,51665],{"class":51354},[47,128890,15665],{"class":221},[47,128892,128893,128895,128897,128899,128901,128903,128905],{"class":49,"line":1314},[47,128894,128866],{"class":85},[47,128896,51491],{"class":221},[47,128898,919],{"class":85},[47,128900,51546],{"class":217},[47,128902,57558],{"class":85},[47,128904,51546],{"class":217},[47,128906,1384],{"class":221},[47,128908,128909],{"class":49,"line":1405},[47,128910,1659],{"class":221},[47,128912,128913],{"class":49,"line":1411},[47,128914,128915],{"class":279},"\u002F* 混合单位 *\u002F\n",[47,128917,128918,128920],{"class":49,"line":1423},[47,128919,51665],{"class":51354},[47,128921,15665],{"class":221},[47,128923,128924,128926,128928,128930,128932,128934],{"class":49,"line":1706},[47,128925,128866],{"class":85},[47,128927,51491],{"class":221},[47,128929,919],{"class":85},[47,128931,51546],{"class":217},[47,128933,17237],{"class":85},[47,128935,1384],{"class":221},[47,128937,128938],{"class":49,"line":1711},[47,128939,1659],{"class":221},[19,128941,128942],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[357,128944,128945,128953],{},[360,128946,128947],{},[363,128948,128949,128951],{},[366,128950,128719],{"align":23829},[366,128952,25923],{"align":23829},[404,128954,128955,128962],{},[363,128956,128957,128959],{},[409,128958,52022],{"align":23829},[409,128960,128961],{"align":23829},"百分数|由浮点数和单位标识符组成的长度值",[363,128963,128964,128967],{},[409,128965,128966],{"align":23829},"position",[409,128968,128969],{"align":23829},"top|center|bottom|left|center|right 方位名词",[19,128971,128972],{},"其他说明：",[19,128974,128975],{},"①参数是方位名词",[19,128977,128978],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,128980,128981],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,128983,128984],{},"②参数是精确单位",[19,128986,128987],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,128989,128990],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,128992,128993],{},"③参数是混合单位",[19,128995,128996],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[187,128998,129000],{"id":128999},"_825-背景图片固定","8.2.5 背景图片固定",[38,129002,129004],{"className":126606,"code":129003,"language":126608,"meta":43,"style":43},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[26,129005,129006,129011,129017,129029,129033,129038,129044,129054],{"__ignoreMap":43},[47,129007,129008],{"class":49,"line":50},[47,129009,129010],{"class":279},"\u002F* 背景滚动（默认） *\u002F\n",[47,129012,129013,129015],{"class":49,"line":92},[47,129014,51665],{"class":51354},[47,129016,15665],{"class":221},[47,129018,129019,129022,129024,129027],{"class":49,"line":1273},[47,129020,129021],{"class":85},"  background-attachment",[47,129023,51491],{"class":221},[47,129025,129026],{"class":85},"scroll",[47,129028,1384],{"class":221},[47,129030,129031],{"class":49,"line":1288},[47,129032,1659],{"class":221},[47,129034,129035],{"class":49,"line":1294},[47,129036,129037],{"class":279},"\u002F* 背景固定 *\u002F\n",[47,129039,129040,129042],{"class":49,"line":1308},[47,129041,51665],{"class":51354},[47,129043,15665],{"class":221},[47,129045,129046,129048,129050,129052],{"class":49,"line":1314},[47,129047,129021],{"class":85},[47,129049,51491],{"class":221},[47,129051,86287],{"class":85},[47,129053,1384],{"class":221},[47,129055,129056],{"class":49,"line":1405},[47,129057,1659],{"class":221},[357,129059,129060,129069],{},[360,129061,129062],{},[363,129063,129064,129067],{},[366,129065,129066],{"align":23829},"参数",[366,129068,102750],{"align":23829},[404,129070,129071,129078],{},[363,129072,129073,129075],{},[409,129074,129026],{"align":23829},[409,129076,129077],{"align":23829},"背景图像是随对象内容滚动",[363,129079,129080,129082],{},[409,129081,86287],{"align":23829},[409,129083,129084],{"align":23829},"背景图像固定",[187,129086,129088],{"id":129087},"_826-背景样式合写","8.2.6 背景样式合写",[38,129090,129092],{"className":126606,"code":129091,"language":126608,"meta":43,"style":43},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[26,129093,129094,129099,129105,129133],{"__ignoreMap":43},[47,129095,129096],{"class":49,"line":50},[47,129097,129098],{"class":279},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[47,129100,129101,129103],{"class":49,"line":92},[47,129102,51665],{"class":51354},[47,129104,15665],{"class":221},[47,129106,129107,129109,129111,129113,129116,129118,129120,129122,129124,129127,129129,129131],{"class":49,"line":1273},[47,129108,70665],{"class":85},[47,129110,51491],{"class":221},[47,129112,60896],{"class":85},[47,129114,129115],{"class":85}," url",[47,129117,222],{"class":221},[47,129119,128704],{"class":5309},[47,129121,13807],{"class":221},[47,129123,61790],{"class":85},[47,129125,129126],{"class":85}," fixed",[47,129128,17237],{"class":85},[47,129130,128873],{"class":85},[47,129132,1384],{"class":221},[47,129134,129135],{"class":49,"line":1288},[47,129136,1659],{"class":221},[187,129138,129140],{"id":129139},"_827-背景色半透明","8.2.7 背景色半透明",[38,129142,129144],{"className":126606,"code":129143,"language":126608,"meta":43,"style":43},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[26,129145,129146,129152,129178],{"__ignoreMap":43},[47,129147,129148,129150],{"class":49,"line":50},[47,129149,51665],{"class":51354},[47,129151,15665],{"class":221},[47,129153,129154,129156,129158,129160,129162,129164,129166,129168,129170,129172,129174,129176],{"class":49,"line":92},[47,129155,70665],{"class":85},[47,129157,51491],{"class":221},[47,129159,55164],{"class":85},[47,129161,222],{"class":221},[47,129163,411],{"class":85},[47,129165,12528],{"class":221},[47,129167,411],{"class":85},[47,129169,12528],{"class":221},[47,129171,411],{"class":85},[47,129173,12528],{"class":221},[47,129175,100575],{"class":85},[47,129177,2812],{"class":221},[47,129179,129180],{"class":49,"line":1273},[47,129181,1659],{"class":221},[19,129183,99450],{},[19,129185,129186],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,129188,129189],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,129191,129192],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,129194,129195],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[187,129197,129199],{"id":129198},"_828-总结","8.2.8 总结",[357,129201,129202,129213],{},[360,129203,129204],{},[363,129205,129206,129209,129211],{},[366,129207,129208],{"align":23829},"属性",[366,129210,102750],{"align":23829},[366,129212,372],{"align":23829},[404,129214,129215,129226,129237,129248,129259,129270,129281],{},[363,129216,129217,129220,129223],{},[409,129218,129219],{"align":23829},"background-color",[409,129221,129222],{"align":23829},"背景颜色",[409,129224,129225],{"align":23829},"预定义的颜色值\u002F十六进制\u002FRGB代码",[363,129227,129228,129231,129234],{},[409,129229,129230],{"align":23829},"background-image",[409,129232,129233],{"align":23829},"背景图片",[409,129235,129236],{"align":23829},"url(图片路径)",[363,129238,129239,129242,129245],{},[409,129240,129241],{"align":23829},"background-repeat",[409,129243,129244],{"align":23829},"是否平铺",[409,129246,129247],{"align":23829},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[363,129249,129250,129253,129256],{},[409,129251,129252],{"align":23829},"background-position",[409,129254,129255],{"align":23829},"背景位置",[409,129257,129258],{"align":23829},"length\u002Fposition 分别是x和y坐标",[363,129260,129261,129264,129267],{},[409,129262,129263],{"align":23829},"background-attachment",[409,129265,129266],{"align":23829},"背景附着",[409,129268,129269],{"align":23829},"scroll(背景滚动) \u002Ffixed (背景固定)",[363,129271,129272,129275,129278],{},[409,129273,129274],{"align":23829},"背景简写",[409,129276,129277],{"align":23829},"书写更简单",[409,129279,129280],{"align":23829},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[363,129282,129283,129286,129289],{},[409,129284,129285],{"align":23829},"背景半透明",[409,129287,129288],{"align":23829},"背景颜色半透明",[409,129290,129291],{"align":23829},"background: rgba(0,0,0.3); 后面必须是4个值",[19,129293,129294],{},"颜色渐变：",[1556,129296],{"style":126462,"src":129297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[1556,129299],{"style":126462,"src":129300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[187,129302,129304],{"id":129303},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[38,129306,129308],{"className":127353,"code":129307,"language":127355,"meta":43,"style":43},"\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",[26,129309,129310,129325,129344,129363,129382,129401,129420],{"__ignoreMap":43},[47,129311,129312,129314,129316,129318,129320,129323],{"class":49,"line":50},[47,129313,1129],{"class":221},[47,129315,51665],{"class":51354},[47,129317,53540],{"class":53},[47,129319,267],{"class":221},[47,129321,129322],{"class":81},"\"nav\"",[47,129324,51361],{"class":221},[47,129326,129327,129329,129331,129333,129335,129337,129340,129342],{"class":49,"line":92},[47,129328,52198],{"class":221},[47,129330,457],{"class":51354},[47,129332,61111],{"class":53},[47,129334,267],{"class":221},[47,129336,61116],{"class":81},[47,129338,129339],{"class":221},">五彩导航1\u003C\u002F",[47,129341,457],{"class":51354},[47,129343,51361],{"class":221},[47,129345,129346,129348,129350,129352,129354,129356,129359,129361],{"class":49,"line":1273},[47,129347,52198],{"class":221},[47,129349,457],{"class":51354},[47,129351,61111],{"class":53},[47,129353,267],{"class":221},[47,129355,61116],{"class":81},[47,129357,129358],{"class":221},">五彩导航2\u003C\u002F",[47,129360,457],{"class":51354},[47,129362,51361],{"class":221},[47,129364,129365,129367,129369,129371,129373,129375,129378,129380],{"class":49,"line":1288},[47,129366,52198],{"class":221},[47,129368,457],{"class":51354},[47,129370,61111],{"class":53},[47,129372,267],{"class":221},[47,129374,61116],{"class":81},[47,129376,129377],{"class":221},">五彩导航3\u003C\u002F",[47,129379,457],{"class":51354},[47,129381,51361],{"class":221},[47,129383,129384,129386,129388,129390,129392,129394,129397,129399],{"class":49,"line":1294},[47,129385,52198],{"class":221},[47,129387,457],{"class":51354},[47,129389,61111],{"class":53},[47,129391,267],{"class":221},[47,129393,61116],{"class":81},[47,129395,129396],{"class":221},">五彩导航4\u003C\u002F",[47,129398,457],{"class":51354},[47,129400,51361],{"class":221},[47,129402,129403,129405,129407,129409,129411,129413,129416,129418],{"class":49,"line":1308},[47,129404,52198],{"class":221},[47,129406,457],{"class":51354},[47,129408,61111],{"class":53},[47,129410,267],{"class":221},[47,129412,61116],{"class":81},[47,129414,129415],{"class":221},">五彩导航5\u003C\u002F",[47,129417,457],{"class":51354},[47,129419,51361],{"class":221},[47,129421,129422,129424,129426],{"class":49,"line":1314},[47,129423,51839],{"class":221},[47,129425,51665],{"class":51354},[47,129427,51361],{"class":221},[38,129429,129431],{"className":126606,"code":129430,"language":126608,"meta":43,"style":43},".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",[26,129432,129433,129442,129452,129464,129476,129486,129498,129508,129512,129537,129560,129583,129606],{"__ignoreMap":43},[47,129434,129435,129438,129440],{"class":49,"line":50},[47,129436,129437],{"class":53},".nav",[47,129439,1492],{"class":51354},[47,129441,15665],{"class":221},[47,129443,129444,129446,129448,129450],{"class":49,"line":92},[47,129445,128222],{"class":85},[47,129447,51491],{"class":221},[47,129449,72437],{"class":85},[47,129451,1384],{"class":221},[47,129453,129454,129456,129458,129460,129462],{"class":49,"line":1273},[47,129455,70622],{"class":85},[47,129457,51491],{"class":221},[47,129459,1036],{"class":85},[47,129461,51546],{"class":217},[47,129463,1384],{"class":221},[47,129465,129466,129468,129470,129472,129474],{"class":49,"line":1288},[47,129467,70842],{"class":85},[47,129469,51491],{"class":221},[47,129471,1075],{"class":85},[47,129473,51546],{"class":217},[47,129475,1384],{"class":221},[47,129477,129478,129480,129482,129484],{"class":49,"line":1294},[47,129479,70580],{"class":85},[47,129481,51491],{"class":221},[47,129483,51646],{"class":85},[47,129485,1384],{"class":221},[47,129487,129488,129490,129492,129494,129496],{"class":49,"line":1308},[47,129489,127290],{"class":85},[47,129491,51491],{"class":221},[47,129493,1075],{"class":85},[47,129495,51546],{"class":217},[47,129497,1384],{"class":221},[47,129499,129500,129502,129504,129506],{"class":49,"line":1314},[47,129501,70959],{"class":85},[47,129503,51491],{"class":221},[47,129505,60896],{"class":85},[47,129507,1384],{"class":221},[47,129509,129510],{"class":49,"line":1405},[47,129511,1659],{"class":221},[47,129513,129514,129516,129518,129521,129523,129525,129528,129530,129532,129534],{"class":49,"line":1411},[47,129515,129437],{"class":53},[47,129517,1492],{"class":51354},[47,129519,129520],{"class":53},":nth-child",[47,129522,222],{"class":221},[47,129524,436],{"class":85},[47,129526,129527],{"class":221},") { ",[47,129529,129219],{"class":85},[47,129531,51491],{"class":221},[47,129533,128637],{"class":85},[47,129535,129536],{"class":221},"; }\n",[47,129538,129539,129541,129543,129545,129547,129549,129551,129553,129555,129558],{"class":49,"line":1423},[47,129540,129437],{"class":53},[47,129542,1492],{"class":51354},[47,129544,129520],{"class":53},[47,129546,222],{"class":221},[47,129548,298],{"class":85},[47,129550,129527],{"class":221},[47,129552,129219],{"class":85},[47,129554,51491],{"class":221},[47,129556,129557],{"class":85},"#ff0000",[47,129559,129536],{"class":221},[47,129561,129562,129564,129566,129568,129570,129572,129574,129576,129578,129581],{"class":49,"line":1706},[47,129563,129437],{"class":53},[47,129565,1492],{"class":51354},[47,129567,129520],{"class":53},[47,129569,222],{"class":221},[47,129571,292],{"class":85},[47,129573,129527],{"class":221},[47,129575,129219],{"class":85},[47,129577,51491],{"class":221},[47,129579,129580],{"class":85},"#00a4ff",[47,129582,129536],{"class":221},[47,129584,129585,129587,129589,129591,129593,129595,129597,129599,129601,129604],{"class":49,"line":1711},[47,129586,129437],{"class":53},[47,129588,1492],{"class":51354},[47,129590,129520],{"class":53},[47,129592,222],{"class":221},[47,129594,512],{"class":85},[47,129596,129527],{"class":221},[47,129598,129219],{"class":85},[47,129600,51491],{"class":221},[47,129602,129603],{"class":85},"#ff00ff",[47,129605,129536],{"class":221},[47,129607,129608,129610,129612,129614,129616,129618,129620,129622,129624,129627],{"class":49,"line":1717},[47,129609,129437],{"class":53},[47,129611,1492],{"class":51354},[47,129613,129520],{"class":53},[47,129615,222],{"class":221},[47,129617,538],{"class":85},[47,129619,129527],{"class":221},[47,129621,129219],{"class":85},[47,129623,51491],{"class":221},[47,129625,129626],{"class":85},"#00ff00",[47,129628,129536],{"class":221},[14,129630,129632],{"id":129631},"_83-css三大特性","8.3 css三大特性",[187,129634,129636],{"id":129635},"_831-层叠性","8.3.1 层叠性",[19,129638,129639],{},"为了解决样式冲突问题",[19,129641,129642],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,129644,129645],{},"   ②样式不冲突，不会层叠",[187,129647,129649],{"id":129648},"_832-继承性","8.3.2 继承性",[19,129651,129652],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,129654,129655],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[38,129657,129659],{"className":126606,"code":129658,"language":126608,"meta":43,"style":43},"p {\n  color: #333;\n}\n",[26,129660,129661,129667,129677],{"__ignoreMap":43},[47,129662,129663,129665],{"class":49,"line":50},[47,129664,19],{"class":51354},[47,129666,15665],{"class":221},[47,129668,129669,129671,129673,129675],{"class":49,"line":92},[47,129670,70959],{"class":85},[47,129672,51491],{"class":221},[47,129674,62423],{"class":85},[47,129676,1384],{"class":221},[47,129678,129679],{"class":49,"line":1273},[47,129680,1659],{"class":221},[1556,129682],{"style":126462,"src":129683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,129685,129686],{},"解释：①行高可以跟单位也可以不跟单位",[19,129688,129689],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,129691,129692],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,129694,129695],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[187,129697,129699],{"id":129698},"_833-优先级","8.3.3 优先级",[171,129701,129702,129705],{},[109,129703,129704],{},"选择器相同，则执行层叠性",[109,129706,129707],{},"选择器不同，则根据选择器权重执行",[357,129709,129710,129720],{},[360,129711,129712],{},[363,129713,129714,129717],{},[366,129715,129716],{"align":23829},"选择器",[366,129718,129719],{"align":23829},"选择器权重",[404,129721,129722,129730,129738,129746,129754,129762],{},[363,129723,129724,129727],{},[409,129725,129726],{"align":23829},"继承 或者*",[409,129728,129729],{"align":23829},"0，0，0，0",[363,129731,129732,129735],{},[409,129733,129734],{"align":23829},"标签选择器",[409,129736,129737],{"align":23829},"0，0，0，1",[363,129739,129740,129743],{},[409,129741,129742],{"align":23829},"类选择器，伪类选择器",[409,129744,129745],{"align":23829},"0，0，1，0",[363,129747,129748,129751],{},[409,129749,129750],{"align":23829},"ID选择器",[409,129752,129753],{"align":23829},"0，1，0，0",[363,129755,129756,129759],{},[409,129757,129758],{"align":23829},"行内样式",[409,129760,129761],{"align":23829},"1，0，0，0",[363,129763,129764,129767],{},[409,129765,129766],{"align":23829},"！important",[409,129768,129769],{"align":23829},"无穷大",[19,129771,129772],{},"! important用法：",[38,129774,129776],{"className":126606,"code":129775,"language":126608,"meta":43,"style":43},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[26,129777,129778,129783,129789,129802,129806,129811,129817,129827],{"__ignoreMap":43},[47,129779,129780],{"class":49,"line":50},[47,129781,129782],{"class":279},"\u002F* !important 拥有最高优先级 *\u002F\n",[47,129784,129785,129787],{"class":49,"line":92},[47,129786,51665],{"class":51354},[47,129788,15665],{"class":221},[47,129790,129791,129793,129795,129797,129800],{"class":49,"line":1273},[47,129792,70959],{"class":85},[47,129794,51491],{"class":221},[47,129796,51699],{"class":85},[47,129798,129799],{"class":217}," !important",[47,129801,1384],{"class":221},[47,129803,129804],{"class":49,"line":1288},[47,129805,1659],{"class":221},[47,129807,129808],{"class":49,"line":1294},[47,129809,129810],{"class":279},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[47,129812,129813,129815],{"class":49,"line":1308},[47,129814,51665],{"class":51354},[47,129816,15665],{"class":221},[47,129818,129819,129821,129823,129825],{"class":49,"line":1314},[47,129820,70959],{"class":85},[47,129822,51491],{"class":221},[47,129824,57475],{"class":85},[47,129826,1384],{"class":221},[47,129828,129829],{"class":49,"line":1405},[47,129830,1659],{"class":221},[19,129832,129833],{},"优先级注意点：",[19,129835,129836],{},"①权重是有4组数字组成,但是不会有进位",[19,129838,129839],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,129841,129842],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,129844,129845],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,129847,129848],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,129850,129851],{},"⑥复合选择器",[357,129853,129854,129864],{},[360,129855,129856],{},[363,129857,129858,129861],{},[366,129859,129860],{"align":23829},"div ul li",[366,129862,129863],{"align":23829},"0,0,0,3",[404,129865,129866,129874,129882],{},[363,129867,129868,129871],{},[409,129869,129870],{"align":23829},".nav ul li",[409,129872,129873],{"align":23829},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[363,129875,129876,129879],{},[409,129877,129878],{"align":23829},"a:hover",[409,129880,129881],{"align":23829},"0,0,1,1",[363,129883,129884,129887],{},[409,129885,129886],{"align":23829},".nav a",[409,129888,129881],{"align":23829},[134,129890,129891],{},"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":43,"searchDepth":92,"depth":92,"links":129893},[129894,129902,129913],{"id":128002,"depth":92,"text":128003,"children":129895},[129896,129897,129898,129899,129900,129901],{"id":128015,"depth":1273,"text":128016},{"id":128087,"depth":1273,"text":128088},{"id":128159,"depth":1273,"text":128160},{"id":128190,"depth":1273,"text":128191},{"id":128197,"depth":1273,"text":128198},{"id":128350,"depth":1273,"text":128351},{"id":128658,"depth":92,"text":128659,"children":129903},[129904,129905,129906,129907,129908,129909,129910,129911,129912],{"id":128665,"depth":1273,"text":128666},{"id":128675,"depth":1273,"text":128676},{"id":128771,"depth":1273,"text":128772},{"id":128844,"depth":1273,"text":128845},{"id":128999,"depth":1273,"text":129000},{"id":129087,"depth":1273,"text":129088},{"id":129139,"depth":1273,"text":129140},{"id":129198,"depth":1273,"text":129199},{"id":129303,"depth":1273,"text":129304},{"id":129631,"depth":92,"text":129632,"children":129914},[129915,129916,129917],{"id":129635,"depth":1273,"text":129636},{"id":129648,"depth":1273,"text":129649},{"id":129698,"depth":1273,"text":129699},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":127994,"description":142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":129924,"title":129925,"body":129926,"description":142,"extension":143,"meta":131516,"navigation":145,"path":131517,"seo":131518,"stem":131519,"__hash__":131520},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":129927,"toc":131495},[129928,129931,129935,129938,129941,129944,129947,129950,129953,129956,129960,129968,130005,130041,130044,130058,130063,130097,130100,130193,130198,130201,130231,130234,130239,130247,130251,130258,130304,130348,130353,130356,130359,130362,130365,130368,130371,130373,130376,130380,130385,130429,130434,130437,130440,130477,130482,130485,130488,130491,130494,130526,130529,130532,130535,130567,130570,130573,130576,130580,130583,130615,130618,130622,130642,130645,130653,130656,130660,130665,130668,130700,130705,130708,130746,130750,130755,130758,130761,130792,130795,130812,130817,130869,130929,130934,130988,131026,131030,131034,131037,131041,131049,131052,131054,131065,131070,131118,131152,131155,131158,131161,131164,131208,131211,131214,131217,131220,131223,131226,131270,131273,131276,131279,131282,131285,131288,131294,131297,131341,131344,131347,131350,131353,131356,131400,131403,131405,131408,131412,131416,131454,131458,131461,131464,131468,131476,131480,131483,131486,131489,131492],[10,129929,129925],{"id":129930},"_9-css盒模型浮动与切图",[14,129932,129934],{"id":129933},"_91-盒子模型","9.1 盒子模型",[19,129936,129937],{},"利用盒子来设计网页",[19,129939,129940],{},"盒子包含：边框、外边距、内边距、实际内容",[19,129942,129943],{},"网页布局设置：",[19,129945,129946],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,129948,129949],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,129951,129952],{},"③往盒子里装内容",[1556,129954],{"style":126462,"src":129955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[187,129957,129959],{"id":129958},"_911-边框border","9.1.1 边框（border）",[171,129961,129962,129965],{},[109,129963,129964],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[109,129966,129967],{},"语法",[38,129969,129971],{"className":126606,"code":129970,"language":126608,"meta":43,"style":43},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[26,129972,129973,129978,129984,130001],{"__ignoreMap":43},[47,129974,129975],{"class":49,"line":50},[47,129976,129977],{"class":279},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[47,129979,129980,129982],{"class":49,"line":92},[47,129981,51665],{"class":51354},[47,129983,15665],{"class":221},[47,129985,129986,129988,129990,129992,129994,129996,129999],{"class":49,"line":1273},[47,129987,70950],{"class":85},[47,129989,51491],{"class":221},[47,129991,436],{"class":85},[47,129993,51546],{"class":217},[47,129995,51575],{"class":85},[47,129997,129998],{"class":85}," #ccc",[47,130000,1384],{"class":221},[47,130002,130003],{"class":49,"line":1288},[47,130004,1659],{"class":221},[357,130006,130007,130015],{},[360,130008,130009],{},[363,130010,130011,130013],{},[366,130012,129208],{"align":23829},[366,130014,102750],{"align":23829},[404,130016,130017,130025,130033],{},[363,130018,130019,130022],{},[409,130020,130021],{"align":23829},"border-width",[409,130023,130024],{"align":23829},"定义边框粗细，单位是px",[363,130026,130027,130030],{},[409,130028,130029],{"align":23829},"border-style",[409,130031,130032],{"align":23829},"边框的样式",[363,130034,130035,130038],{},[409,130036,130037],{"align":23829},"border-color",[409,130039,130040],{"align":23829},"边框的颜色",[19,130042,130043],{},"边框样式 border-style 可以设置如下值：",[106,130045,130046,130049,130052,130055],{},[109,130047,130048],{},"none：没有边框即忽略所有边框的宽度（默认值）",[109,130050,130051],{},"solid：边框为单实线(最为常用的)",[109,130053,130054],{},"dashed：边框为虚线",[109,130056,130057],{},"dotted：边框为点线",[171,130059,130060],{"start":1273},[109,130061,130062],{},"边框的合写分写",[38,130064,130065],{"className":126606,"code":129970,"language":126608,"meta":43,"style":43},[26,130066,130067,130071,130077,130093],{"__ignoreMap":43},[47,130068,130069],{"class":49,"line":50},[47,130070,129977],{"class":279},[47,130072,130073,130075],{"class":49,"line":92},[47,130074,51665],{"class":51354},[47,130076,15665],{"class":221},[47,130078,130079,130081,130083,130085,130087,130089,130091],{"class":49,"line":1273},[47,130080,70950],{"class":85},[47,130082,51491],{"class":221},[47,130084,436],{"class":85},[47,130086,51546],{"class":217},[47,130088,51575],{"class":85},[47,130090,129998],{"class":85},[47,130092,1384],{"class":221},[47,130094,130095],{"class":49,"line":1288},[47,130096,1659],{"class":221},[19,130098,130099],{},"边框分开写法：",[38,130101,130103],{"className":126606,"code":130102,"language":126608,"meta":43,"style":43},"\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",[26,130104,130105,130110,130116,130134,130152,130171,130189],{"__ignoreMap":43},[47,130106,130107],{"class":49,"line":50},[47,130108,130109],{"class":279},"\u002F* 边框分开写法 *\u002F\n",[47,130111,130112,130114],{"class":49,"line":92},[47,130113,51665],{"class":51354},[47,130115,15665],{"class":221},[47,130117,130118,130121,130123,130125,130127,130129,130132],{"class":49,"line":1273},[47,130119,130120],{"class":85},"  border-top",[47,130122,51491],{"class":221},[47,130124,436],{"class":85},[47,130126,51546],{"class":217},[47,130128,51575],{"class":85},[47,130130,130131],{"class":85}," #000",[47,130133,1384],{"class":221},[47,130135,130136,130139,130141,130143,130145,130147,130150],{"class":49,"line":1288},[47,130137,130138],{"class":85},"  border-right",[47,130140,51491],{"class":221},[47,130142,298],{"class":85},[47,130144,51546],{"class":217},[47,130146,62295],{"class":85},[47,130148,130149],{"class":85}," #333",[47,130151,1384],{"class":221},[47,130153,130154,130157,130159,130161,130163,130166,130169],{"class":49,"line":1294},[47,130155,130156],{"class":85},"  border-bottom",[47,130158,51491],{"class":221},[47,130160,292],{"class":85},[47,130162,51546],{"class":217},[47,130164,130165],{"class":85}," dotted",[47,130167,130168],{"class":85}," #666",[47,130170,1384],{"class":221},[47,130172,130173,130176,130178,130180,130182,130184,130187],{"class":49,"line":1308},[47,130174,130175],{"class":85},"  border-left",[47,130177,51491],{"class":221},[47,130179,436],{"class":85},[47,130181,51546],{"class":217},[47,130183,51575],{"class":85},[47,130185,130186],{"class":85}," #999",[47,130188,1384],{"class":221},[47,130190,130191],{"class":49,"line":1314},[47,130192,1659],{"class":221},[171,130194,130195],{"start":1288},[109,130196,130197],{},"表格的细线边框",[19,130199,130200],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[38,130202,130204],{"className":126606,"code":130203,"language":126608,"meta":43,"style":43},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[26,130205,130206,130211,130217,130227],{"__ignoreMap":43},[47,130207,130208],{"class":49,"line":50},[47,130209,130210],{"class":279},"\u002F* 表格细线边框合并 *\u002F\n",[47,130212,130213,130215],{"class":49,"line":92},[47,130214,357],{"class":51354},[47,130216,15665],{"class":221},[47,130218,130219,130221,130223,130225],{"class":49,"line":1273},[47,130220,70632],{"class":85},[47,130222,51491],{"class":221},[47,130224,65089],{"class":85},[47,130226,1384],{"class":221},[47,130228,130229],{"class":49,"line":1288},[47,130230,1659],{"class":221},[19,130232,130233],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[171,130235,130236],{"start":1294},[109,130237,130238],{},"解决边框额外增加盒子的实际大小的方法：",[106,130240,130241,130244],{},[109,130242,130243],{},"测量盒子大小的时候,不量边框",[109,130245,130246],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[187,130248,130250],{"id":130249},"_912-内边距","9.1.2 内边距",[171,130252,130253,130256],{},[109,130254,130255],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[109,130257,129967],{},[357,130259,130260,130270],{},[360,130261,130262],{},[363,130263,130264,130267],{},[366,130265,130266],{"align":23829},"值的个数",[366,130268,130269],{"align":23829},"表达意思",[404,130271,130272,130280,130288,130296],{},[363,130273,130274,130277],{},[409,130275,130276],{"align":23829},"padding: 5px;",[409,130278,130279],{"align":23829},"1个值，代表上下左右都有5个元素",[363,130281,130282,130285],{},[409,130283,130284],{"align":23829},"padding: 5px 10px;",[409,130286,130287],{"align":23829},"2个值，代表上下内边距为5像素，左右内边距为10像素",[363,130289,130290,130293],{},[409,130291,130292],{"align":23829},"padding: 5px 10px 20px;",[409,130294,130295],{"align":23829},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[363,130297,130298,130301],{},[409,130299,130300],{"align":23829},"padding: 5px 10px 20px 30px;",[409,130302,130303],{"align":23829},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[357,130305,130306,130314],{},[360,130307,130308],{},[363,130309,130310,130312],{},[366,130311,129208],{"align":23829},[366,130313,102750],{"align":23829},[404,130315,130316,130324,130332,130340],{},[363,130317,130318,130321],{},[409,130319,130320],{"align":23829},"padding-left",[409,130322,130323],{"align":23829},"左内边距",[363,130325,130326,130329],{},[409,130327,130328],{"align":23829},"padding-right",[409,130330,130331],{"align":23829},"右内边距",[363,130333,130334,130337],{},[409,130335,130336],{"align":23829},"padding-top",[409,130338,130339],{"align":23829},"上内边距",[363,130341,130342,130345],{},[409,130343,130344],{"align":23829},"padding-bottom",[409,130346,130347],{"align":23829},"下内边距",[171,130349,130350],{"start":1273},[109,130351,130352],{},"内边距会影响盒子的实际大小",[19,130354,130355],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,130357,130358],{},"①内容和边框有了距离，添加了内边距",[19,130360,130361],{},"②padding影响了盒子实际大小",[19,130363,130364],{},"内边距对盒子大小的影响：",[19,130366,130367],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,130369,130370],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,130372,95274],{},[19,130374,130375],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[187,130377,130379],{"id":130378},"_913-外边距","9.1.3 外边距",[171,130381,130382],{},[109,130383,130384],{},"控制盒子与盒子之间的距离",[357,130386,130387,130395],{},[360,130388,130389],{},[363,130390,130391,130393],{},[366,130392,129208],{"align":23829},[366,130394,102750],{"align":23829},[404,130396,130397,130405,130413,130421],{},[363,130398,130399,130402],{},[409,130400,130401],{"align":23829},"margin-left",[409,130403,130404],{"align":23829},"左外边距",[363,130406,130407,130410],{},[409,130408,130409],{"align":23829},"margin-right",[409,130411,130412],{"align":23829},"右外边距",[363,130414,130415,130418],{},[409,130416,130417],{"align":23829},"margin-top",[409,130419,130420],{"align":23829},"上外边距",[363,130422,130423,130426],{},[409,130424,130425],{"align":23829},"margin-bottom",[409,130427,130428],{"align":23829},"下外边距",[171,130430,130431],{"start":92},[109,130432,130433],{},"外边距可以让块级盒子水平居中的两个条件：",[19,130435,130436],{},"①盒子必须指定了宽度（width）",[19,130438,130439],{},"②盒子左右的外边距都设置为 auto",[38,130441,130443],{"className":126606,"code":130442,"language":126608,"meta":43,"style":43},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[26,130444,130445,130450,130457,130473],{"__ignoreMap":43},[47,130446,130447],{"class":49,"line":50},[47,130448,130449],{"class":279},"\u002F* margin 复合写法（同上） *\u002F\n",[47,130451,130452,130455],{"class":49,"line":92},[47,130453,130454],{"class":53},".box",[47,130456,15665],{"class":221},[47,130458,130459,130461,130463,130465,130467,130470],{"class":49,"line":1273},[47,130460,70524],{"class":85},[47,130462,51491],{"class":221},[47,130464,411],{"class":85},[47,130466,51610],{"class":85},[47,130468,130469],{"class":221},";  ",[47,130471,130472],{"class":279},"\u002F* 块级盒子水平居中 *\u002F\n",[47,130474,130475],{"class":49,"line":1288},[47,130476,1659],{"class":221},[171,130478,130479],{"start":1273},[109,130480,130481],{},"外边距塌陷问题",[19,130483,130484],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[1556,130486],{"style":126462,"src":130487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,130489,130490],{},"解决方案：",[19,130492,130493],{},"①可以为父亲元素定义上边距",[38,130495,130496],{"className":126606,"code":130442,"language":126608,"meta":43,"style":43},[26,130497,130498,130502,130508,130522],{"__ignoreMap":43},[47,130499,130500],{"class":49,"line":50},[47,130501,130449],{"class":279},[47,130503,130504,130506],{"class":49,"line":92},[47,130505,130454],{"class":53},[47,130507,15665],{"class":221},[47,130509,130510,130512,130514,130516,130518,130520],{"class":49,"line":1273},[47,130511,70524],{"class":85},[47,130513,51491],{"class":221},[47,130515,411],{"class":85},[47,130517,51610],{"class":85},[47,130519,130469],{"class":221},[47,130521,130472],{"class":279},[47,130523,130524],{"class":49,"line":1288},[47,130525,1659],{"class":221},[19,130527,130528],{},"②可以为父亲元素定义上内边距",[19,130530,130531],{},"③可以为父亲元素添加overflow:hidden",[1556,130533],{"style":126462,"src":130534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[38,130536,130537],{"className":126606,"code":130442,"language":126608,"meta":43,"style":43},[26,130538,130539,130543,130549,130563],{"__ignoreMap":43},[47,130540,130541],{"class":49,"line":50},[47,130542,130449],{"class":279},[47,130544,130545,130547],{"class":49,"line":92},[47,130546,130454],{"class":53},[47,130548,15665],{"class":221},[47,130550,130551,130553,130555,130557,130559,130561],{"class":49,"line":1273},[47,130552,70524],{"class":85},[47,130554,51491],{"class":221},[47,130556,411],{"class":85},[47,130558,51610],{"class":85},[47,130560,130469],{"class":221},[47,130562,130472],{"class":279},[47,130564,130565],{"class":49,"line":1288},[47,130566,1659],{"class":221},[1556,130568],{"style":126462,"src":130569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,130571,130572],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,130574,130575],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[187,130577,130579],{"id":130578},"_914-清除内外边距","9.1.4 清除内外边距",[19,130581,130582],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[38,130584,130585],{"className":126606,"code":130442,"language":126608,"meta":43,"style":43},[26,130586,130587,130591,130597,130611],{"__ignoreMap":43},[47,130588,130589],{"class":49,"line":50},[47,130590,130449],{"class":279},[47,130592,130593,130595],{"class":49,"line":92},[47,130594,130454],{"class":53},[47,130596,15665],{"class":221},[47,130598,130599,130601,130603,130605,130607,130609],{"class":49,"line":1273},[47,130600,70524],{"class":85},[47,130602,51491],{"class":221},[47,130604,411],{"class":85},[47,130606,51610],{"class":85},[47,130608,130469],{"class":221},[47,130610,130472],{"class":279},[47,130612,130613],{"class":49,"line":1288},[47,130614,1659],{"class":221},[19,130616,130617],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[187,130619,130621],{"id":130620},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[106,130623,130624,130627,130630,130633,130636,130639],{},[109,130625,130626],{},"文件→打开 ：可以打开我们要测量的图片",[109,130628,130629],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[109,130631,130632],{},"右击标尺，把里面的单位改为像素",[109,130634,130635],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[109,130637,130638],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[109,130640,130641],{},"用选区拖动 可以测量大小",[1556,130643],{"style":126462,"src":130644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[106,130646,130647,130650],{},[109,130648,130649],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[109,130651,130652],{},"吸管取色工具",[1556,130654],{"style":126462,"src":130655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[187,130657,130659],{"id":130658},"_916-案例","9.1.6 案例",[171,130661,130662],{},[109,130663,130664],{},"小米商品",[1556,130666],{"style":126462,"src":130667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[38,130669,130670],{"className":126606,"code":130442,"language":126608,"meta":43,"style":43},[26,130671,130672,130676,130682,130696],{"__ignoreMap":43},[47,130673,130674],{"class":49,"line":50},[47,130675,130449],{"class":279},[47,130677,130678,130680],{"class":49,"line":92},[47,130679,130454],{"class":53},[47,130681,15665],{"class":221},[47,130683,130684,130686,130688,130690,130692,130694],{"class":49,"line":1273},[47,130685,70524],{"class":85},[47,130687,51491],{"class":221},[47,130689,411],{"class":85},[47,130691,51610],{"class":85},[47,130693,130469],{"class":221},[47,130695,130472],{"class":279},[47,130697,130698],{"class":49,"line":1288},[47,130699,1659],{"class":221},[171,130701,130702],{"start":92},[109,130703,130704],{},"快报模块",[1556,130706],{"style":126462,"src":130707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[38,130709,130711],{"className":127353,"code":130710,"language":127355,"meta":43,"style":43},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[26,130712,130713,130718,130733,130738],{"__ignoreMap":43},[47,130714,130715],{"class":49,"line":50},[47,130716,130717],{"class":279},"\u003C!-- HTML 代码示例 -->\n",[47,130719,130720,130722,130724,130726,130728,130731],{"class":49,"line":92},[47,130721,1129],{"class":221},[47,130723,51665],{"class":51354},[47,130725,53540],{"class":53},[47,130727,267],{"class":221},[47,130729,130730],{"class":81},"\"example\"",[47,130732,51361],{"class":221},[47,130734,130735],{"class":49,"line":1273},[47,130736,130737],{"class":221},"  示例内容\n",[47,130739,130740,130742,130744],{"class":49,"line":1288},[47,130741,51839],{"class":221},[47,130743,51665],{"class":51354},[47,130745,51361],{"class":221},[187,130747,130749],{"id":130748},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[171,130751,130752],{},[109,130753,130754],{},"圆角边框",[19,130756,130757],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[1556,130759],{"style":126462,"src":130760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[38,130762,130764],{"className":126606,"code":130763,"language":126608,"meta":43,"style":43},"div {\n  border: 1px solid #ccc;\n}\n",[26,130765,130766,130772,130788],{"__ignoreMap":43},[47,130767,130768,130770],{"class":49,"line":50},[47,130769,51665],{"class":51354},[47,130771,15665],{"class":221},[47,130773,130774,130776,130778,130780,130782,130784,130786],{"class":49,"line":92},[47,130775,70950],{"class":85},[47,130777,51491],{"class":221},[47,130779,436],{"class":85},[47,130781,51546],{"class":217},[47,130783,51575],{"class":85},[47,130785,129998],{"class":85},[47,130787,1384],{"class":221},[47,130789,130790],{"class":49,"line":1273},[47,130791,1659],{"class":221},[19,130793,130794],{},"解释:",[106,130796,130797,130800,130803,130806,130809],{},[109,130798,130799],{},"参数值可以为数值或百分比的形式",[109,130801,130802],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[109,130804,130805],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[109,130807,130808],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[109,130810,130811],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[171,130813,130814],{"start":92},[109,130815,130816],{},"盒子阴影",[38,130818,130820],{"className":126606,"code":130819,"language":126608,"meta":43,"style":43},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[26,130821,130822,130828,130865],{"__ignoreMap":43},[47,130823,130824,130826],{"class":49,"line":50},[47,130825,51665],{"class":51354},[47,130827,15665],{"class":221},[47,130829,130830,130833,130835,130837,130839,130841,130843,130845,130847,130849,130851,130853,130855,130857,130859,130861,130863],{"class":49,"line":92},[47,130831,130832],{"class":85},"  box-shadow",[47,130834,51491],{"class":221},[47,130836,411],{"class":85},[47,130838,14848],{"class":85},[47,130840,51546],{"class":217},[47,130842,2131],{"class":85},[47,130844,51546],{"class":217},[47,130846,78821],{"class":85},[47,130848,222],{"class":221},[47,130850,411],{"class":85},[47,130852,12528],{"class":221},[47,130854,411],{"class":85},[47,130856,12528],{"class":221},[47,130858,411],{"class":85},[47,130860,12528],{"class":221},[47,130862,86264],{"class":85},[47,130864,2812],{"class":221},[47,130866,130867],{"class":49,"line":1273},[47,130868,1659],{"class":221},[357,130870,130871,130879],{},[360,130872,130873],{},[363,130874,130875,130877],{},[366,130876,372],{"align":23829},[366,130878,27543],{"align":23829},[404,130880,130881,130889,130897,130905,130913,130921],{},[363,130882,130883,130886],{},[409,130884,130885],{"align":23829},"h-shadow",[409,130887,130888],{"align":23829},"必需,水平阴影的位置,允许负值",[363,130890,130891,130894],{},[409,130892,130893],{"align":23829},"v-shadow",[409,130895,130896],{"align":23829},"必需,垂直阴影的位置,允许负值",[363,130898,130899,130902],{},[409,130900,130901],{"align":23829},"blur",[409,130903,130904],{"align":23829},"可选,模糊距离,就是影子的虚实",[363,130906,130907,130910],{},[409,130908,130909],{"align":23829},"spread",[409,130911,130912],{"align":23829},"可选,阴影尺寸",[363,130914,130915,130918],{},[409,130916,130917],{"align":23829},"color",[409,130919,130920],{"align":23829},"可选,阴影的颜色",[363,130922,130923,130926],{},[409,130924,130925],{"align":23829},"inset",[409,130927,130928],{"align":23829},"可选,将外部阴影(outset)改为内部阴影",[171,130930,130931],{"start":1273},[109,130932,130933],{},"文字阴影",[38,130935,130937],{"className":126606,"code":130936,"language":126608,"meta":43,"style":43},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[26,130938,130939,130945,130984],{"__ignoreMap":43},[47,130940,130941,130943],{"class":49,"line":50},[47,130942,19],{"class":51354},[47,130944,15665],{"class":221},[47,130946,130947,130950,130952,130954,130956,130958,130960,130962,130964,130966,130968,130970,130972,130974,130976,130978,130980,130982],{"class":49,"line":92},[47,130948,130949],{"class":85},"  text-shadow",[47,130951,51491],{"class":221},[47,130953,436],{"class":85},[47,130955,51546],{"class":217},[47,130957,25172],{"class":85},[47,130959,51546],{"class":217},[47,130961,14848],{"class":85},[47,130963,51546],{"class":217},[47,130965,78821],{"class":85},[47,130967,222],{"class":221},[47,130969,411],{"class":85},[47,130971,12528],{"class":221},[47,130973,411],{"class":85},[47,130975,12528],{"class":221},[47,130977,411],{"class":85},[47,130979,12528],{"class":221},[47,130981,100575],{"class":85},[47,130983,2812],{"class":221},[47,130985,130986],{"class":49,"line":1273},[47,130987,1659],{"class":221},[357,130989,130990,130998],{},[360,130991,130992],{},[363,130993,130994,130996],{},[366,130995,372],{"align":23829},[366,130997,27543],{"align":23829},[404,130999,131000,131006,131013,131020],{},[363,131001,131002,131004],{},[409,131003,130885],{"align":23829},[409,131005,130888],{"align":23829},[363,131007,131008,131010],{},[409,131009,130893],{"align":23829},[409,131011,131012],{"align":23829},"必需,垂直阴影位置,允许负值",[363,131014,131015,131017],{},[409,131016,130901],{"align":23829},[409,131018,131019],{"align":23829},"可选,模糊的距离",[363,131021,131022,131024],{},[409,131023,130917],{"align":23829},[409,131025,130920],{"align":23829},[14,131027,131029],{"id":131028},"_92-浮动","9.2 浮动",[187,131031,131033],{"id":131032},"_921-浮动介绍","9.2.1 浮动介绍",[19,131035,131036],{},"在16.2中详细介绍",[187,131038,131040],{"id":131039},"_922-清除浮动","9.2.2 清除浮动",[171,131042,131043,131046],{},[109,131044,131045],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[109,131047,131048],{},"清除浮动的本质",[19,131050,131051],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,131053,9118],{},[106,131055,131056,131059,131062],{},[109,131057,131058],{},"如果父盒子本身有高度，则不需要清除浮动",[109,131060,131061],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[109,131063,131064],{},"父级有了高度，就不会影响下面的标准流了",[171,131066,131067],{"start":1273},[109,131068,131069],{},"清除浮动样式",[38,131071,131073],{"className":126606,"code":131072,"language":126608,"meta":43,"style":43},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[26,131074,131075,131082,131093,131097,131104,131114],{"__ignoreMap":43},[47,131076,131077,131080],{"class":49,"line":50},[47,131078,131079],{"class":53},".left",[47,131081,15665],{"class":221},[47,131083,131084,131087,131089,131091],{"class":49,"line":92},[47,131085,131086],{"class":85},"  float",[47,131088,51491],{"class":221},[47,131090,23829],{"class":85},[47,131092,1384],{"class":221},[47,131094,131095],{"class":49,"line":1273},[47,131096,1659],{"class":221},[47,131098,131099,131102],{"class":49,"line":1288},[47,131100,131101],{"class":53},".right",[47,131103,15665],{"class":221},[47,131105,131106,131108,131110,131112],{"class":49,"line":1294},[47,131107,131086],{"class":85},[47,131109,51491],{"class":221},[47,131111,72576],{"class":85},[47,131113,1384],{"class":221},[47,131115,131116],{"class":49,"line":1308},[47,131117,1659],{"class":221},[357,131119,131120,131128],{},[360,131121,131122],{},[363,131123,131124,131126],{},[366,131125,127070],{"align":23829},[366,131127,27543],{"align":23829},[404,131129,131130,131137,131144],{},[363,131131,131132,131134],{},[409,131133,23829],{"align":23829},[409,131135,131136],{"align":23829},"不允许左侧有浮动元素（清除左侧浮动的影响）",[363,131138,131139,131141],{},[409,131140,72576],{"align":23829},[409,131142,131143],{"align":23829},"不允许右侧有浮动元素（清除右侧浮动的影响）",[363,131145,131146,131149],{},[409,131147,131148],{"align":23829},"both",[409,131150,131151],{"align":23829},"同时清除左右侧浮动的影响",[19,131153,131154],{},"法一",[19,131156,131157],{},"额外标签法也称为隔墙法",[19,131159,131160],{},"使用方式：",[19,131162,131163],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[38,131165,131166],{"className":126606,"code":131072,"language":126608,"meta":43,"style":43},[26,131167,131168,131174,131184,131188,131194,131204],{"__ignoreMap":43},[47,131169,131170,131172],{"class":49,"line":50},[47,131171,131079],{"class":53},[47,131173,15665],{"class":221},[47,131175,131176,131178,131180,131182],{"class":49,"line":92},[47,131177,131086],{"class":85},[47,131179,51491],{"class":221},[47,131181,23829],{"class":85},[47,131183,1384],{"class":221},[47,131185,131186],{"class":49,"line":1273},[47,131187,1659],{"class":221},[47,131189,131190,131192],{"class":49,"line":1288},[47,131191,131101],{"class":53},[47,131193,15665],{"class":221},[47,131195,131196,131198,131200,131202],{"class":49,"line":1294},[47,131197,131086],{"class":85},[47,131199,51491],{"class":221},[47,131201,72576],{"class":85},[47,131203,1384],{"class":221},[47,131205,131206],{"class":49,"line":1308},[47,131207,1659],{"class":221},[19,131209,131210],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,131212,131213],{},"优点： 通俗易懂，书写方便",[19,131215,131216],{},"缺点： 添加许多无意义的标签，结构化较差",[19,131218,131219],{},"注意： 要求这个新的空标签必须是块级元素。",[19,131221,131222],{},"法二",[19,131224,131225],{},"父级添加overflow属性",[38,131227,131228],{"className":126606,"code":131072,"language":126608,"meta":43,"style":43},[26,131229,131230,131236,131246,131250,131256,131266],{"__ignoreMap":43},[47,131231,131232,131234],{"class":49,"line":50},[47,131233,131079],{"class":53},[47,131235,15665],{"class":221},[47,131237,131238,131240,131242,131244],{"class":49,"line":92},[47,131239,131086],{"class":85},[47,131241,51491],{"class":221},[47,131243,23829],{"class":85},[47,131245,1384],{"class":221},[47,131247,131248],{"class":49,"line":1273},[47,131249,1659],{"class":221},[47,131251,131252,131254],{"class":49,"line":1288},[47,131253,131101],{"class":53},[47,131255,15665],{"class":221},[47,131257,131258,131260,131262,131264],{"class":49,"line":1294},[47,131259,131086],{"class":85},[47,131261,51491],{"class":221},[47,131263,72576],{"class":85},[47,131265,1384],{"class":221},[47,131267,131268],{"class":49,"line":1308},[47,131269,1659],{"class":221},[19,131271,131272],{},"overflow: hidden;",[19,131274,131275],{},"优点：代码简洁",[19,131277,131278],{},"缺点：无法显示溢出的部分",[19,131280,131281],{},"注意：是给父元素添加代码",[19,131283,131284],{},"法三",[19,131286,131287],{},"父级添加after伪元素",[19,131289,131290,131293],{},[131291,131292],"after",{}," 方式是额外标签法的升级版",[19,131295,131296],{},"使用的时候复制就可以",[38,131298,131299],{"className":126606,"code":131072,"language":126608,"meta":43,"style":43},[26,131300,131301,131307,131317,131321,131327,131337],{"__ignoreMap":43},[47,131302,131303,131305],{"class":49,"line":50},[47,131304,131079],{"class":53},[47,131306,15665],{"class":221},[47,131308,131309,131311,131313,131315],{"class":49,"line":92},[47,131310,131086],{"class":85},[47,131312,51491],{"class":221},[47,131314,23829],{"class":85},[47,131316,1384],{"class":221},[47,131318,131319],{"class":49,"line":1273},[47,131320,1659],{"class":221},[47,131322,131323,131325],{"class":49,"line":1288},[47,131324,131101],{"class":53},[47,131326,15665],{"class":221},[47,131328,131329,131331,131333,131335],{"class":49,"line":1294},[47,131330,131086],{"class":85},[47,131332,51491],{"class":221},[47,131334,72576],{"class":85},[47,131336,1384],{"class":221},[47,131338,131339],{"class":49,"line":1308},[47,131340,1659],{"class":221},[19,131342,131343],{},"优点：没有增加标签，结构更简单",[19,131345,131346],{},"缺点：照顾低版本浏览器",[19,131348,131349],{},"代表网站： 百度、淘宝网、网易等",[19,131351,131352],{},"法四",[19,131354,131355],{},"父级添加双伪元素",[38,131357,131358],{"className":126606,"code":131072,"language":126608,"meta":43,"style":43},[26,131359,131360,131366,131376,131380,131386,131396],{"__ignoreMap":43},[47,131361,131362,131364],{"class":49,"line":50},[47,131363,131079],{"class":53},[47,131365,15665],{"class":221},[47,131367,131368,131370,131372,131374],{"class":49,"line":92},[47,131369,131086],{"class":85},[47,131371,51491],{"class":221},[47,131373,23829],{"class":85},[47,131375,1384],{"class":221},[47,131377,131378],{"class":49,"line":1273},[47,131379,1659],{"class":221},[47,131381,131382,131384],{"class":49,"line":1288},[47,131383,131101],{"class":53},[47,131385,15665],{"class":221},[47,131387,131388,131390,131392,131394],{"class":49,"line":1294},[47,131389,131086],{"class":85},[47,131391,51491],{"class":221},[47,131393,72576],{"class":85},[47,131395,1384],{"class":221},[47,131397,131398],{"class":49,"line":1308},[47,131399,1659],{"class":221},[19,131401,131402],{},"优点：代码更简洁",[19,131404,131346],{},[19,131406,131407],{},"代表网站：小米、腾讯等",[14,131409,131411],{"id":131410},"_93-ps切图","9.3 PS切图",[187,131413,131415],{"id":131414},"_931-常见图片格式","9.3.1 常见图片格式",[357,131417,131418,131428],{},[360,131419,131420],{},[363,131421,131422,131425],{},[366,131423,131424],{"align":23829},"jpg图像格式",[366,131426,131427],{"align":23829},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[404,131429,131430,131438,131446],{},[363,131431,131432,131435],{},[409,131433,131434],{"align":23829},"gif图像格式",[409,131436,131437],{"align":23829},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[363,131439,131440,131443],{},[409,131441,131442],{"align":23829},"png图像格式",[409,131444,131445],{"align":23829},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[363,131447,131448,131451],{},[409,131449,131450],{"align":23829},"PSD图像格式",[409,131452,131453],{"align":23829},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[187,131455,131457],{"id":131456},"_932-图层切图","9.3.2 图层切图",[19,131459,131460],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,131462,131463],{},"按住shift选中两个图层->图层菜单->合并图层",[187,131465,131467],{"id":131466},"_933-切片切图","9.3.3 切片切图",[106,131469,131470,131473],{},[109,131471,131472],{},"利用切片工具手动划出",[109,131474,131475],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[187,131477,131479],{"id":131478},"_934-切图步骤","9.3.4 切图步骤",[19,131481,131482],{},"用切片工具选中：",[1556,131484],{"style":126462,"src":131485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,131487,131488],{},"文件 -> 导出",[1556,131490],{"style":126462,"src":131491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[134,131493,131494],{},"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":43,"searchDepth":92,"depth":92,"links":131496},[131497,131506,131510],{"id":129933,"depth":92,"text":129934,"children":131498},[131499,131500,131501,131502,131503,131504,131505],{"id":129958,"depth":1273,"text":129959},{"id":130249,"depth":1273,"text":130250},{"id":130378,"depth":1273,"text":130379},{"id":130578,"depth":1273,"text":130579},{"id":130620,"depth":1273,"text":130621},{"id":130658,"depth":1273,"text":130659},{"id":130748,"depth":1273,"text":130749},{"id":131028,"depth":92,"text":131029,"children":131507},[131508,131509],{"id":131032,"depth":1273,"text":131033},{"id":131039,"depth":1273,"text":131040},{"id":131410,"depth":92,"text":131411,"children":131511},[131512,131513,131514,131515],{"id":131414,"depth":1273,"text":131415},{"id":131456,"depth":1273,"text":131457},{"id":131466,"depth":1273,"text":131467},{"id":131478,"depth":1273,"text":131479},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":129925,"description":142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131522,"title":131523,"body":131524,"description":142,"extension":143,"meta":132165,"navigation":145,"path":132166,"seo":132167,"stem":132168,"__hash__":132169},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131525,"toc":132153},[131526,131529,131533,131559,131593,131597,131601,131604,131646,131653,131663,131671,131673,131676,131679,131682,131689,131703,131707,131710,131739,131743,131746,131760,131764,131767,131795,131799,131802,131828,131832,131837,131870,131875,131903,131907,131924,131970,131975,132019,132036,132143,132151],[10,131527,131523],{"id":131528},"_10-css规范与学成在线案例",[14,131530,131532],{"id":131531},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[171,131534,131535,131541,131547,131553],{},[109,131536,131537,131540],{},[369,131538,131539],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[109,131542,131543,131546],{},[369,131544,131545],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[109,131548,131549,131552],{},[369,131550,131551],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[109,131554,131555,131558],{},[369,131556,131557],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[38,131560,131561],{"className":126606,"code":129970,"language":126608,"meta":43,"style":43},[26,131562,131563,131567,131573,131589],{"__ignoreMap":43},[47,131564,131565],{"class":49,"line":50},[47,131566,129977],{"class":279},[47,131568,131569,131571],{"class":49,"line":92},[47,131570,51665],{"class":51354},[47,131572,15665],{"class":221},[47,131574,131575,131577,131579,131581,131583,131585,131587],{"class":49,"line":1273},[47,131576,70950],{"class":85},[47,131578,51491],{"class":221},[47,131580,436],{"class":85},[47,131582,51546],{"class":217},[47,131584,51575],{"class":85},[47,131586,129998],{"class":85},[47,131588,1384],{"class":221},[47,131590,131591],{"class":49,"line":1288},[47,131592,1659],{"class":221},[14,131594,131596],{"id":131595},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[187,131598,131600],{"id":131599},"_1021-header头部制作","10.2.1 header头部制作",[1556,131602],{"style":126462,"src":131603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[106,131605,131606,131613,131620,131626,131633,131640],{},[109,131607,131608,131609,131612],{},"1号是版心盒子 ",[369,131610,131611],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[109,131614,131615,131616,131619],{},"版心盒子 里面包含 2号盒子 ",[369,131617,131618],{},"logo"," 图标",[109,131621,131622,131623,131625],{},"版心盒子 里面包含 3号盒子 ",[369,131624,53767],{}," 导航栏",[109,131627,131628,131629,131632],{},"版心盒子 里面包含 4号盒子 ",[369,131630,131631],{},"search"," 搜索框",[109,131634,131635,131636,131639],{},"版心盒子 里面包含 5号盒子 ",[369,131637,131638],{},"user"," 个人信息",[109,131641,131642,131643],{},"注意，要求里面的 ",[369,131644,131645],{},"4个子盒子 必须都浮动",[171,131647,131648],{},[109,131649,131650],{},[369,131651,131652],{},"导航栏注意点:",[19,131654,131655,131656,131659,131660],{},"实际开发中， ",[369,131657,131658],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[369,131661,131662],{},"用 li 包含链接(li+a)的做法",[106,131664,131665,131668],{},[109,131666,131667],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[109,131669,131670],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,131672,9118],{},[19,131674,131675],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,131677,131678],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,131680,131681],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[171,131683,131684],{"start":92},[109,131685,131686],{},[369,131687,131688],{},"4号盒子search的细节：",[106,131690,131691,131694,131697],{},[109,131692,131693],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[109,131695,131696],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[109,131698,131699,131702],{},[26,131700,131701],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[187,131704,131706],{"id":131705},"_1022-banner制作","10.2.2 banner制作",[1556,131708],{"style":126462,"src":131709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[106,131711,131712,131719,131725,131732],{},[109,131713,131714,131715,131718],{},"1号盒子是通栏的大盒子 ",[369,131716,131717],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[109,131720,131721,131722,131724],{},"2号盒子是版心 ",[369,131723,1014],{}," ， 要水平居中对齐",[109,131726,131727,131728,131731],{},"3号盒子版心内，左对齐 ",[369,131729,131730],{},"subnav"," 侧导航栏",[109,131733,131734,131735,131738],{},"4号盒子版心内，右对齐 ",[369,131736,131737],{},"course"," 课程",[187,131740,131742],{"id":131741},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[1556,131744],{"style":126462,"src":131745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[106,131747,131748,131751,131754,131757],{},[109,131749,131750],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[109,131752,131753],{},"1号盒子是标题 H3 左侧浮动",[109,131755,131756],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[109,131758,131759],{},"3号盒子 右浮动 mod 修改",[187,131761,131763],{"id":131762},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[1556,131765],{"style":126462,"src":131766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[106,131768,131769,131775,131782,131789,131792],{},[109,131770,131771,131772,131774],{},"1号盒子为最大的盒子 ",[369,131773,53768],{}," 版心水平居中对齐",[109,131776,131777,131778,131781],{},"2号盒子为上面部分 ",[369,131779,131780],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[109,131783,131784,131785,131788],{},"3号盒子为底下部分 ",[369,131786,131787],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[109,131790,131791],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[109,131793,131794],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[187,131796,131798],{"id":131797},"_1025-底部模块制作","10.2.5 底部模块制作",[1556,131800],{"style":126462,"src":131801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[106,131803,131804,131811,131814,131821],{},[109,131805,131806,131807,131810],{},"1号盒子通栏大盒子 底部 ",[369,131808,131809],{},"footer"," 给高度 底色是白色",[109,131812,131813],{},"2号盒子版心水平居中",[109,131815,131816,131817,131820],{},"3号盒子版权 ",[369,131818,131819],{},"copyright"," 左对齐",[109,131822,131823,131824,131827],{},"4号盒子 链接组 ",[369,131825,131826],{},"links"," 右对齐",[187,131829,131831],{"id":131830},"_1026-代码模块","10.2.6 代码模块",[171,131833,131834],{},[109,131835,131836],{},"html部分",[38,131838,131840],{"className":127353,"code":131839,"language":127355,"meta":43,"style":43},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[26,131841,131842],{"__ignoreMap":43},[47,131843,131844,131846,131848,131850,131852,131855,131858,131860,131863,131866,131868],{"class":49,"line":50},[47,131845,1129],{"class":221},[47,131847,457],{"class":51354},[47,131849,61111],{"class":53},[47,131851,267],{"class":221},[47,131853,131854],{"class":81},"\"https:\u002F\u002Fexample.com\"",[47,131856,131857],{"class":53}," target",[47,131859,267],{"class":221},[47,131861,131862],{"class":81},"\"_blank\"",[47,131864,131865],{"class":221},">链接文字\u003C\u002F",[47,131867,457],{"class":51354},[47,131869,51361],{"class":221},[171,131871,131872],{"start":92},[109,131873,131874],{},"css部分",[38,131876,131877],{"className":127353,"code":131839,"language":127355,"meta":43,"style":43},[26,131878,131879],{"__ignoreMap":43},[47,131880,131881,131883,131885,131887,131889,131891,131893,131895,131897,131899,131901],{"class":49,"line":50},[47,131882,1129],{"class":221},[47,131884,457],{"class":51354},[47,131886,61111],{"class":53},[47,131888,267],{"class":221},[47,131890,131854],{"class":81},[47,131892,131857],{"class":53},[47,131894,267],{"class":221},[47,131896,131862],{"class":81},[47,131898,131865],{"class":221},[47,131900,457],{"class":51354},[47,131902,51361],{"class":221},[187,131904,131906],{"id":131905},"_1027-收获","10.2.7 收获",[171,131908,131909,131912,131915,131918,131921],{},[109,131910,131911],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[109,131913,131914],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[109,131916,131917],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[109,131919,131920],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[109,131922,131923],{},"遗忘代码",[38,131925,131927],{"className":126606,"code":131926,"language":126608,"meta":43,"style":43},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[26,131928,131929,131951,131956,131966],{"__ignoreMap":43},[47,131930,131931,131933,131935,131937,131939,131941,131943,131945,131947,131949],{"class":49,"line":50},[47,131932,51665],{"class":51354},[47,131934,12528],{"class":221},[47,131936,19],{"class":51354},[47,131938,12528],{"class":221},[47,131940,10],{"class":51354},[47,131942,12528],{"class":221},[47,131944,106],{"class":51354},[47,131946,12528],{"class":221},[47,131948,109],{"class":51354},[47,131950,15665],{"class":221},[47,131952,131953],{"class":49,"line":92},[47,131954,131955],{"class":279},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[47,131957,131958,131960,131962,131964],{"class":49,"line":1273},[47,131959,128222],{"class":85},[47,131961,51491],{"class":221},[47,131963,60923],{"class":85},[47,131965,1384],{"class":221},[47,131967,131968],{"class":49,"line":1288},[47,131969,1659],{"class":221},[171,131971,131972],{"start":1308},[109,131973,131974],{},"html引css的程序",[38,131976,131977],{"className":126606,"code":131926,"language":126608,"meta":43,"style":43},[26,131978,131979,132001,132005,132015],{"__ignoreMap":43},[47,131980,131981,131983,131985,131987,131989,131991,131993,131995,131997,131999],{"class":49,"line":50},[47,131982,51665],{"class":51354},[47,131984,12528],{"class":221},[47,131986,19],{"class":51354},[47,131988,12528],{"class":221},[47,131990,10],{"class":51354},[47,131992,12528],{"class":221},[47,131994,106],{"class":51354},[47,131996,12528],{"class":221},[47,131998,109],{"class":51354},[47,132000,15665],{"class":221},[47,132002,132003],{"class":49,"line":92},[47,132004,131955],{"class":279},[47,132006,132007,132009,132011,132013],{"class":49,"line":1273},[47,132008,128222],{"class":85},[47,132010,51491],{"class":221},[47,132012,60923],{"class":85},[47,132014,1384],{"class":221},[47,132016,132017],{"class":49,"line":1288},[47,132018,1659],{"class":221},[171,132020,132021,132024,132027,132030,132033],{"start":1314},[109,132022,132023],{},"浮动的盒子不会有外边距合并问题",[109,132025,132026],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[109,132028,132029],{},"ctrl+g快速定位行；shift+alt多个光标",[109,132031,132032],{},"学习上方各个模块的选择器起名方法，以后就这样用",[109,132034,132035],{},"在写选择器时尽量写全一些，例如",[38,132037,132039],{"className":126606,"code":132038,"language":126608,"meta":43,"style":43},"\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",[26,132040,132041,132046,132062,132067,132082,132087,132102,132107,132122,132127],{"__ignoreMap":43},[47,132042,132043],{"class":49,"line":50},[47,132044,132045],{"class":279},"\u002F* 静态定位（默认） *\u002F\n",[47,132047,132048,132051,132053,132055,132057,132060],{"class":49,"line":92},[47,132049,132050],{"class":53},".static",[47,132052,79861],{"class":221},[47,132054,128966],{"class":85},[47,132056,51491],{"class":221},[47,132058,132059],{"class":85},"static",[47,132061,129536],{"class":221},[47,132063,132064],{"class":49,"line":1273},[47,132065,132066],{"class":279},"\u002F* 相对定位 *\u002F\n",[47,132068,132069,132072,132074,132076,132078,132080],{"class":49,"line":1288},[47,132070,132071],{"class":53},".relative",[47,132073,79861],{"class":221},[47,132075,128966],{"class":85},[47,132077,51491],{"class":221},[47,132079,54818],{"class":85},[47,132081,129536],{"class":221},[47,132083,132084],{"class":49,"line":1294},[47,132085,132086],{"class":279},"\u002F* 绝对定位 *\u002F\n",[47,132088,132089,132092,132094,132096,132098,132100],{"class":49,"line":1308},[47,132090,132091],{"class":53},".absolute",[47,132093,79861],{"class":221},[47,132095,128966],{"class":85},[47,132097,51491],{"class":221},[47,132099,54885],{"class":85},[47,132101,129536],{"class":221},[47,132103,132104],{"class":49,"line":1314},[47,132105,132106],{"class":279},"\u002F* 固定定位 *\u002F\n",[47,132108,132109,132112,132114,132116,132118,132120],{"class":49,"line":1405},[47,132110,132111],{"class":53},".fixed",[47,132113,79861],{"class":221},[47,132115,128966],{"class":85},[47,132117,51491],{"class":221},[47,132119,86287],{"class":85},[47,132121,129536],{"class":221},[47,132123,132124],{"class":49,"line":1411},[47,132125,132126],{"class":279},"\u002F* 粘性定位 *\u002F\n",[47,132128,132129,132132,132134,132136,132138,132141],{"class":49,"line":1423},[47,132130,132131],{"class":53},".sticky",[47,132133,79861],{"class":221},[47,132135,128966],{"class":85},[47,132137,51491],{"class":221},[47,132139,132140],{"class":85},"sticky",[47,132142,129536],{"class":221},[171,132144,132145,132148],{"start":1711},[109,132146,132147],{},"一定要用好注释",[109,132149,132150],{},"浮动的盒子不会有外边距合并的问题",[134,132152,131494],{},{"title":43,"searchDepth":92,"depth":92,"links":132154},[132155,132156],{"id":131531,"depth":92,"text":131532},{"id":131595,"depth":92,"text":131596,"children":132157},[132158,132159,132160,132161,132162,132163,132164],{"id":131599,"depth":1273,"text":131600},{"id":131705,"depth":1273,"text":131706},{"id":131741,"depth":1273,"text":131742},{"id":131762,"depth":1273,"text":131763},{"id":131797,"depth":1273,"text":131798},{"id":131830,"depth":1273,"text":131831},{"id":131905,"depth":1273,"text":131906},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131523,"description":142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132171,"title":132172,"body":132173,"description":142,"extension":143,"meta":133659,"navigation":145,"path":133660,"seo":133661,"stem":133662,"__hash__":133663},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132174,"toc":133651},[132175,132178,132182,132186,132197,132201,132218,132262,132295,132298,132315,132318,132321,132365,132369,132373,132376,132379,132383,132386,132397,132460,132501,132504,132519,132573,132581,132584,132595,132649,132675,132678,132691,132745,132777,132831,132854,132908,132911,132914,132921,132975,132996,133050,133053,133056,133141,133149,133206,133229,133233,133236,133254,133258,133277,133331,133369,133373,133376,133379,133401,133405,133413,133416,133421,133432,133435,133439,133453,133497,133500,133504,133507,133512,133538,133543,133620,133623,133627,133630,133633,133636,133639,133642,133645,133648],[10,132176,132172],{"id":132177},"_11-传统布局与定位体系",[14,132179,132181],{"id":132180},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[187,132183,132185],{"id":132184},"_1111-普通流标准流","11.1.1 普通流（标准流）",[106,132187,132188,132191,132194],{},[109,132189,132190],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[109,132192,132193],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[109,132195,132196],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[187,132198,132200],{"id":132199},"_1112-浮动","11.1.2 浮动",[106,132202,132203,132206,132209,132212,132215],{},[109,132204,132205],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[109,132207,132208],{},"浮动可以改变元素标签默认的排列方式",[109,132210,132211],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[109,132213,132214],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[109,132216,132217],{},"在使用行内块转换时盒子之间是有空隙的",[38,132219,132220],{"className":126606,"code":131072,"language":126608,"meta":43,"style":43},[26,132221,132222,132228,132238,132242,132248,132258],{"__ignoreMap":43},[47,132223,132224,132226],{"class":49,"line":50},[47,132225,131079],{"class":53},[47,132227,15665],{"class":221},[47,132229,132230,132232,132234,132236],{"class":49,"line":92},[47,132231,131086],{"class":85},[47,132233,51491],{"class":221},[47,132235,23829],{"class":85},[47,132237,1384],{"class":221},[47,132239,132240],{"class":49,"line":1273},[47,132241,1659],{"class":221},[47,132243,132244,132246],{"class":49,"line":1288},[47,132245,131101],{"class":53},[47,132247,15665],{"class":221},[47,132249,132250,132252,132254,132256],{"class":49,"line":1294},[47,132251,131086],{"class":85},[47,132253,51491],{"class":221},[47,132255,72576],{"class":85},[47,132257,1384],{"class":221},[47,132259,132260],{"class":49,"line":1308},[47,132261,1659],{"class":221},[357,132263,132264,132272],{},[360,132265,132266],{},[363,132267,132268,132270],{},[366,132269,127070],{"align":23829},[366,132271,27543],{"align":23829},[404,132273,132274,132281,132288],{},[363,132275,132276,132278],{},[409,132277,54791],{"align":23829},[409,132279,132280],{"align":23829},"元素不浮动（默认值）",[363,132282,132283,132285],{},[409,132284,23829],{"align":23829},[409,132286,132287],{"align":23829},"元素向左浮动",[363,132289,132290,132292],{},[409,132291,72576],{"align":23829},[409,132293,132294],{"align":23829},"元素向右浮动",[19,132296,132297],{},"浮动重点：",[106,132299,132300,132303,132306,132309,132312],{},[109,132301,132302],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[109,132304,132305],{},"浮动的元素会一行内显示并且元素顶部对齐",[109,132307,132308],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[109,132310,132311],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[109,132313,132314],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,132316,132317],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,132319,132320],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[38,132322,132323],{"className":126606,"code":131072,"language":126608,"meta":43,"style":43},[26,132324,132325,132331,132341,132345,132351,132361],{"__ignoreMap":43},[47,132326,132327,132329],{"class":49,"line":50},[47,132328,131079],{"class":53},[47,132330,15665],{"class":221},[47,132332,132333,132335,132337,132339],{"class":49,"line":92},[47,132334,131086],{"class":85},[47,132336,51491],{"class":221},[47,132338,23829],{"class":85},[47,132340,1384],{"class":221},[47,132342,132343],{"class":49,"line":1273},[47,132344,1659],{"class":221},[47,132346,132347,132349],{"class":49,"line":1288},[47,132348,131101],{"class":53},[47,132350,15665],{"class":221},[47,132352,132353,132355,132357,132359],{"class":49,"line":1294},[47,132354,131086],{"class":85},[47,132356,51491],{"class":221},[47,132358,72576],{"class":85},[47,132360,1384],{"class":221},[47,132362,132363],{"class":49,"line":1308},[47,132364,1659],{"class":221},[187,132366,132368],{"id":132367},"_1113-定位","11.1.3 定位",[22091,132370,132372],{"id":132371},"_11131-使用场景","11.1.3.1 使用场景",[19,132374,132375],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,132377,132378],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22091,132380,132382],{"id":132381},"_11132-定位组成","11.1.3.2 定位组成",[19,132384,132385],{},"定位 = 定位模式 + 边偏移",[171,132387,132388],{},[109,132389,132390,132393,132394],{},[369,132391,132392],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[369,132395,132396],{},"定位模式",[38,132398,132400],{"className":126606,"code":132399,"language":126608,"meta":43,"style":43},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[26,132401,132402,132408,132422,132439,132456],{"__ignoreMap":43},[47,132403,132404,132406],{"class":49,"line":50},[47,132405,130454],{"class":53},[47,132407,15665],{"class":221},[47,132409,132410,132413,132415,132417,132419],{"class":49,"line":92},[47,132411,132412],{"class":85},"  position",[47,132414,51491],{"class":221},[47,132416,54818],{"class":85},[47,132418,130469],{"class":221},[47,132420,132421],{"class":279},"\u002F* 定位模式 *\u002F\n",[47,132423,132424,132427,132429,132431,132433,132436],{"class":49,"line":1273},[47,132425,132426],{"class":85},"  top",[47,132428,51491],{"class":221},[47,132430,665],{"class":85},[47,132432,51546],{"class":217},[47,132434,132435],{"class":221},";           ",[47,132437,132438],{"class":279},"\u002F* 边偏移：上 *\u002F\n",[47,132440,132441,132444,132446,132448,132450,132453],{"class":49,"line":1288},[47,132442,132443],{"class":85},"  left",[47,132445,51491],{"class":221},[47,132447,919],{"class":85},[47,132449,51546],{"class":217},[47,132451,132452],{"class":221},";          ",[47,132454,132455],{"class":279},"\u002F* 边偏移：左 *\u002F\n",[47,132457,132458],{"class":49,"line":1294},[47,132459,1659],{"class":221},[357,132461,132462,132471],{},[360,132463,132464],{},[363,132465,132466,132468],{},[366,132467,372],{"align":23829},[366,132469,132470],{"align":23829},"语义",[404,132472,132473,132480,132487,132494],{},[363,132474,132475,132477],{},[409,132476,132059],{"align":23829},[409,132478,132479],{"align":23829},"静态定位",[363,132481,132482,132484],{},[409,132483,54818],{"align":23829},[409,132485,132486],{"align":23829},"相对定位",[363,132488,132489,132491],{},[409,132490,54885],{"align":23829},[409,132492,132493],{"align":23829},"绝对定位",[363,132495,132496,132498],{},[409,132497,86287],{"align":23829},[409,132499,132500],{"align":23829},"固定定位",[19,132502,132503],{},"（1）静态定位：",[106,132505,132506,132517],{},[109,132507,132508,132509,132512,132513,132516],{},"静态定位是元素的 ",[369,132510,132511],{},"默认定位方式"," ， ",[369,132514,132515],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[109,132518,5274],{},[38,132520,132521],{"className":126606,"code":132399,"language":126608,"meta":43,"style":43},[26,132522,132523,132529,132541,132555,132569],{"__ignoreMap":43},[47,132524,132525,132527],{"class":49,"line":50},[47,132526,130454],{"class":53},[47,132528,15665],{"class":221},[47,132530,132531,132533,132535,132537,132539],{"class":49,"line":92},[47,132532,132412],{"class":85},[47,132534,51491],{"class":221},[47,132536,54818],{"class":85},[47,132538,130469],{"class":221},[47,132540,132421],{"class":279},[47,132542,132543,132545,132547,132549,132551,132553],{"class":49,"line":1273},[47,132544,132426],{"class":85},[47,132546,51491],{"class":221},[47,132548,665],{"class":85},[47,132550,51546],{"class":217},[47,132552,132435],{"class":221},[47,132554,132438],{"class":279},[47,132556,132557,132559,132561,132563,132565,132567],{"class":49,"line":1288},[47,132558,132443],{"class":85},[47,132560,51491],{"class":221},[47,132562,919],{"class":85},[47,132564,51546],{"class":217},[47,132566,132452],{"class":221},[47,132568,132455],{"class":279},[47,132570,132571],{"class":49,"line":1294},[47,132572,1659],{"class":221},[106,132574,132575,132578],{},[109,132576,132577],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[109,132579,132580],{},"静态定位在布局时我们几乎不用的",[19,132582,132583],{},"（2）相对定位",[106,132585,132586,132593],{},[109,132587,132588,132589,132592],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[369,132590,132591],{},"原来的位置"," 来说的（自恋型）",[109,132594,5274],{},[38,132596,132597],{"className":126606,"code":132399,"language":126608,"meta":43,"style":43},[26,132598,132599,132605,132617,132631,132645],{"__ignoreMap":43},[47,132600,132601,132603],{"class":49,"line":50},[47,132602,130454],{"class":53},[47,132604,15665],{"class":221},[47,132606,132607,132609,132611,132613,132615],{"class":49,"line":92},[47,132608,132412],{"class":85},[47,132610,51491],{"class":221},[47,132612,54818],{"class":85},[47,132614,130469],{"class":221},[47,132616,132421],{"class":279},[47,132618,132619,132621,132623,132625,132627,132629],{"class":49,"line":1273},[47,132620,132426],{"class":85},[47,132622,51491],{"class":221},[47,132624,665],{"class":85},[47,132626,51546],{"class":217},[47,132628,132435],{"class":221},[47,132630,132438],{"class":279},[47,132632,132633,132635,132637,132639,132641,132643],{"class":49,"line":1288},[47,132634,132443],{"class":85},[47,132636,51491],{"class":221},[47,132638,919],{"class":85},[47,132640,51546],{"class":217},[47,132642,132452],{"class":221},[47,132644,132455],{"class":279},[47,132646,132647],{"class":49,"line":1294},[47,132648,1659],{"class":221},[106,132650,132651],{},[109,132652,132653,132654,132656,132657,132659,132660,132663,132664,132667,132668,132670,132671,132674],{},"相对定位的特点：",[53770,132655],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53770,132658],{},"  ② ",[369,132661,132662],{},"原来"," 在标准流的 ",[369,132665,132666],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53770,132669],{},"  ③因此， ",[369,132672,132673],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,132676,132677],{},"（3）绝对定位",[106,132679,132680,132689],{},[109,132681,132682,132684,132685,132688],{},[369,132683,132493],{}," 是元素在移动位置的时候，是相对于它 ",[369,132686,132687],{},"祖先元素"," 来说的（拼爹型）",[109,132690,5274],{},[38,132692,132693],{"className":126606,"code":132399,"language":126608,"meta":43,"style":43},[26,132694,132695,132701,132713,132727,132741],{"__ignoreMap":43},[47,132696,132697,132699],{"class":49,"line":50},[47,132698,130454],{"class":53},[47,132700,15665],{"class":221},[47,132702,132703,132705,132707,132709,132711],{"class":49,"line":92},[47,132704,132412],{"class":85},[47,132706,51491],{"class":221},[47,132708,54818],{"class":85},[47,132710,130469],{"class":221},[47,132712,132421],{"class":279},[47,132714,132715,132717,132719,132721,132723,132725],{"class":49,"line":1273},[47,132716,132426],{"class":85},[47,132718,51491],{"class":221},[47,132720,665],{"class":85},[47,132722,51546],{"class":217},[47,132724,132435],{"class":221},[47,132726,132438],{"class":279},[47,132728,132729,132731,132733,132735,132737,132739],{"class":49,"line":1288},[47,132730,132443],{"class":85},[47,132732,51491],{"class":221},[47,132734,919],{"class":85},[47,132736,51546],{"class":217},[47,132738,132452],{"class":221},[47,132740,132455],{"class":279},[47,132742,132743],{"class":49,"line":1294},[47,132744,1659],{"class":221},[106,132746,132747,132762,132771,132774],{},[109,132748,132749,132750,132752,132753,132755,132756,132758,132759,132761],{},"绝对定位的特点：",[53770,132751],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53770,132754],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53770,132757],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53770,132760],{},"  (4)固定定位",[109,132763,132764,132766,132767,132770],{},[369,132765,132500],{}," 是元素 ",[369,132768,132769],{},"固定于浏览器可视区的位置"," 。（认死理型）",[109,132772,132773],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[109,132775,132776],{},"语法:",[38,132778,132779],{"className":126606,"code":132399,"language":126608,"meta":43,"style":43},[26,132780,132781,132787,132799,132813,132827],{"__ignoreMap":43},[47,132782,132783,132785],{"class":49,"line":50},[47,132784,130454],{"class":53},[47,132786,15665],{"class":221},[47,132788,132789,132791,132793,132795,132797],{"class":49,"line":92},[47,132790,132412],{"class":85},[47,132792,51491],{"class":221},[47,132794,54818],{"class":85},[47,132796,130469],{"class":221},[47,132798,132421],{"class":279},[47,132800,132801,132803,132805,132807,132809,132811],{"class":49,"line":1273},[47,132802,132426],{"class":85},[47,132804,51491],{"class":221},[47,132806,665],{"class":85},[47,132808,51546],{"class":217},[47,132810,132435],{"class":221},[47,132812,132438],{"class":279},[47,132814,132815,132817,132819,132821,132823,132825],{"class":49,"line":1288},[47,132816,132443],{"class":85},[47,132818,51491],{"class":221},[47,132820,919],{"class":85},[47,132822,51546],{"class":217},[47,132824,132452],{"class":221},[47,132826,132455],{"class":279},[47,132828,132829],{"class":49,"line":1294},[47,132830,1659],{"class":221},[106,132832,132833,132842],{},[109,132834,132835,132836,132838,132839,132841],{},"特点:",[53770,132837],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53770,132840],{},"  ②固定定位不再占有原先的位置,完全脱标",[109,132843,132844,132845,132847,132848,132850,132851,132853],{},"固定在版心位置的方法:",[53770,132846],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53770,132849],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53770,132852],{},"  实例：",[38,132855,132856],{"className":126606,"code":132399,"language":126608,"meta":43,"style":43},[26,132857,132858,132864,132876,132890,132904],{"__ignoreMap":43},[47,132859,132860,132862],{"class":49,"line":50},[47,132861,130454],{"class":53},[47,132863,15665],{"class":221},[47,132865,132866,132868,132870,132872,132874],{"class":49,"line":92},[47,132867,132412],{"class":85},[47,132869,51491],{"class":221},[47,132871,54818],{"class":85},[47,132873,130469],{"class":221},[47,132875,132421],{"class":279},[47,132877,132878,132880,132882,132884,132886,132888],{"class":49,"line":1273},[47,132879,132426],{"class":85},[47,132881,51491],{"class":221},[47,132883,665],{"class":85},[47,132885,51546],{"class":217},[47,132887,132435],{"class":221},[47,132889,132438],{"class":279},[47,132891,132892,132894,132896,132898,132900,132902],{"class":49,"line":1288},[47,132893,132443],{"class":85},[47,132895,51491],{"class":221},[47,132897,919],{"class":85},[47,132899,51546],{"class":217},[47,132901,132452],{"class":221},[47,132903,132455],{"class":279},[47,132905,132906],{"class":49,"line":1294},[47,132907,1659],{"class":221},[1556,132909],{"style":126462,"src":132910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,132912,132913],{},"(5)粘性定位",[106,132915,132916,132919],{},[109,132917,132918],{},"粘性定位可以被认为是相对定位和固定定位的混合",[109,132920,5274],{},[38,132922,132923],{"className":126606,"code":132399,"language":126608,"meta":43,"style":43},[26,132924,132925,132931,132943,132957,132971],{"__ignoreMap":43},[47,132926,132927,132929],{"class":49,"line":50},[47,132928,130454],{"class":53},[47,132930,15665],{"class":221},[47,132932,132933,132935,132937,132939,132941],{"class":49,"line":92},[47,132934,132412],{"class":85},[47,132936,51491],{"class":221},[47,132938,54818],{"class":85},[47,132940,130469],{"class":221},[47,132942,132421],{"class":279},[47,132944,132945,132947,132949,132951,132953,132955],{"class":49,"line":1273},[47,132946,132426],{"class":85},[47,132948,51491],{"class":221},[47,132950,665],{"class":85},[47,132952,51546],{"class":217},[47,132954,132435],{"class":221},[47,132956,132438],{"class":279},[47,132958,132959,132961,132963,132965,132967,132969],{"class":49,"line":1288},[47,132960,132443],{"class":85},[47,132962,51491],{"class":221},[47,132964,919],{"class":85},[47,132966,51546],{"class":217},[47,132968,132452],{"class":221},[47,132970,132455],{"class":279},[47,132972,132973],{"class":49,"line":1294},[47,132974,1659],{"class":221},[106,132976,132977],{},[109,132978,132979,132980,132982,132983,132985,132986,132988,132989,132992,132993,132995],{},"粘性定位的特点：",[53770,132981],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53770,132984],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53770,132987],{},"  ③必须添加 top 、left、right、bottom ",[369,132990,132991],{},"其中一个"," 才有效",[53770,132994],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[38,132997,132998],{"className":126606,"code":132399,"language":126608,"meta":43,"style":43},[26,132999,133000,133006,133018,133032,133046],{"__ignoreMap":43},[47,133001,133002,133004],{"class":49,"line":50},[47,133003,130454],{"class":53},[47,133005,15665],{"class":221},[47,133007,133008,133010,133012,133014,133016],{"class":49,"line":92},[47,133009,132412],{"class":85},[47,133011,51491],{"class":221},[47,133013,54818],{"class":85},[47,133015,130469],{"class":221},[47,133017,132421],{"class":279},[47,133019,133020,133022,133024,133026,133028,133030],{"class":49,"line":1273},[47,133021,132426],{"class":85},[47,133023,51491],{"class":221},[47,133025,665],{"class":85},[47,133027,51546],{"class":217},[47,133029,132435],{"class":221},[47,133031,132438],{"class":279},[47,133033,133034,133036,133038,133040,133042,133044],{"class":49,"line":1288},[47,133035,132443],{"class":85},[47,133037,51491],{"class":221},[47,133039,919],{"class":85},[47,133041,51546],{"class":217},[47,133043,132452],{"class":221},[47,133045,132455],{"class":279},[47,133047,133048],{"class":49,"line":1294},[47,133049,1659],{"class":221},[1556,133051],{"style":126462,"src":133052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,133054,133055],{},"(6)总结",[357,133057,133058,133073],{},[360,133059,133060],{},[363,133061,133062,133064,133067,133070],{},[366,133063,132396],{"align":23829},[366,133065,133066],{"align":23829},"是否脱标",[366,133068,133069],{"align":23829},"移动位置",[366,133071,133072],{"align":23829},"是否常用",[404,133074,133075,133088,133102,133116,133129],{},[363,133076,133077,133080,133082,133085],{},[409,133078,133079],{"align":23829},"Static 静态定位",[409,133081,104732],{"align":23829},[409,133083,133084],{"align":23829},"不能使用边偏移",[409,133086,133087],{"align":23829},"很少",[363,133089,133090,133093,133096,133099],{},[409,133091,133092],{"align":23829},"Relative 相对定位",[409,133094,133095],{"align":23829},"否(占有位置)",[409,133097,133098],{"align":23829},"相对于自身位置移动",[409,133100,133101],{"align":23829},"基本单独使用",[363,133103,133104,133107,133110,133113],{},[409,133105,133106],{"align":23829},"Absolute 绝对定位",[409,133108,133109],{"align":23829},"是(不占有位置)",[409,133111,133112],{"align":23829},"带有定位的父级",[409,133114,133115],{"align":23829},"要和定位父级元素搭配使用",[363,133117,133118,133121,133123,133126],{},[409,133119,133120],{"align":23829},"Fixed 固定定位",[409,133122,133109],{"align":23829},[409,133124,133125],{"align":23829},"浏览器可视区",[409,133127,133128],{"align":23829},"单独使用,不需要父级",[363,133130,133131,133134,133136,133138],{},[409,133132,133133],{"align":23829},"Sticky 粘性定位",[409,133135,133095],{"align":23829},[409,133137,133125],{"align":23829},[409,133139,133140],{"align":23829},"当前阶段少",[171,133142,133143],{"start":92},[109,133144,133145,133148],{},[369,133146,133147],{},"边偏移"," 则决定了该元素的最终位置",[357,133150,133151,133162],{},[360,133152,133153],{},[363,133154,133155,133158,133160],{},[366,133156,133157],{"align":23829},"边偏移属性",[366,133159,27546],{"align":23829},[366,133161,27543],{"align":23829},[404,133163,133164,133175,133186,133196],{},[363,133165,133166,133169,133172],{},[409,133167,133168],{"align":23829},"top",[409,133170,133171],{"align":23829},"top: 80px;",[409,133173,133174],{"align":23829},"顶端偏移量，定义元素相对于父元素上边线的距离",[363,133176,133177,133180,133183],{},[409,133178,133179],{"align":23829},"bottom",[409,133181,133182],{"align":23829},"bottom: 80px ;",[409,133184,133185],{"align":23829},"底部偏移量，定义元素相对于其父元素下边线的距离",[363,133187,133188,133190,133193],{},[409,133189,23829],{"align":23829},[409,133191,133192],{"align":23829},"left: 80px ;",[409,133194,133195],{"align":23829},"左侧偏移量，定义元素相对于其父元素左边线的距离",[363,133197,133198,133200,133203],{},[409,133199,72576],{"align":23829},[409,133201,133202],{"align":23829},"right: 80px ;",[409,133204,133205],{"align":23829},"右侧偏移量，定义元素相对于其父元素右边线的距离",[106,133207,133208],{},[109,133209,9118,133210,133212,133213,133215,133216,133218,133219,133222,133223,133225,133226,133228],{},[53770,133211],{},"  ① ",[369,133214,133147],{}," 需要和 ",[369,133217,132396],{}," 联合使用， ",[369,133220,133221],{},"单独使用无效"," ；",[53770,133224],{},"  ②top和bottom不要同时使用",[53770,133227],{},"  ③left和right不要同时使用",[22091,133230,133232],{"id":133231},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,133234,133235],{},"子级是绝对定位的话，父级要用相对定位",[106,133237,133238,133241,133244,133247],{},[109,133239,133240],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[109,133242,133243],{},"父盒子需要加定位限制子盒子在父盒子内显示",[109,133245,133246],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[109,133248,133249,133250,133253],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[369,133251,133252],{},"子绝父绝"," 也会遇到",[22091,133255,133257],{"id":133256},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[106,133259,133260,133275],{},[109,133261,133262,133263,133266,133267,133270,133271,133274],{},"在使用 ",[369,133264,133265],{},"定位"," 布局时，可能会 ",[369,133268,133269],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[369,133272,133273],{},"z-index"," 来控制盒子的前后次序 (z轴)",[109,133276,5274],{},[38,133278,133279],{"className":126606,"code":132399,"language":126608,"meta":43,"style":43},[26,133280,133281,133287,133299,133313,133327],{"__ignoreMap":43},[47,133282,133283,133285],{"class":49,"line":50},[47,133284,130454],{"class":53},[47,133286,15665],{"class":221},[47,133288,133289,133291,133293,133295,133297],{"class":49,"line":92},[47,133290,132412],{"class":85},[47,133292,51491],{"class":221},[47,133294,54818],{"class":85},[47,133296,130469],{"class":221},[47,133298,132421],{"class":279},[47,133300,133301,133303,133305,133307,133309,133311],{"class":49,"line":1273},[47,133302,132426],{"class":85},[47,133304,51491],{"class":221},[47,133306,665],{"class":85},[47,133308,51546],{"class":217},[47,133310,132435],{"class":221},[47,133312,132438],{"class":279},[47,133314,133315,133317,133319,133321,133323,133325],{"class":49,"line":1288},[47,133316,132443],{"class":85},[47,133318,51491],{"class":221},[47,133320,919],{"class":85},[47,133322,51546],{"class":217},[47,133324,132452],{"class":221},[47,133326,132455],{"class":279},[47,133328,133329],{"class":49,"line":1294},[47,133330,1659],{"class":221},[106,133332,133333],{},[109,133334,133335,133336,133212,133338,133340,133341,127769,133344,82593,133347,133349,133350,133352,133353,133356,133357,133222,133360,133362,133363,133366,133368],{},"z-index的特性",[53770,133337],{},[369,133339,127070],{}," ： ",[369,133342,133343],{},"正整数",[369,133345,133346],{},"负整数",[369,133348,411],{}," ，默认值是 0，数值越大，盒子越靠上；",[53770,133351],{},"  ②如果 ",[369,133354,133355],{},"属性值相同"," ，则按照书写顺序， ",[369,133358,133359],{},"后来居上",[53770,133361],{},"  ③数字后面 ",[369,133364,133365],{},"不能加单位",[53770,133367],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22091,133370,133372],{"id":133371},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,133374,133375],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,133377,133378],{},"方法:",[106,133380,133381,133391],{},[109,133382,133383,133384,133387,133388],{},"left: 50%; 让 ",[369,133385,133386],{},"盒子的左侧"," 移动到 ",[369,133389,133390],{},"父级元素的水平中心位置",[109,133392,133393,133394,133397,133398],{},"margin-left: -100px; 让盒子 ",[369,133395,133396],{},"向左"," 移动 ",[369,133399,133400],{},"自身宽度的一半",[22091,133402,133404],{"id":133403},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[171,133406,133407,133410],{},[109,133408,133409],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[109,133411,133412],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,133414,133415],{},"也就是说绝对定位和固定定位和浮动类似",[171,133417,133418],{"start":1273},[109,133419,133420],{},"display 是显示模式， 可以改变显示模式有以下方式:",[106,133422,133423,133426,133429],{},[109,133424,133425],{},"可以用inline-block 转换为行内块",[109,133427,133428],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[109,133430,133431],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,133433,133434],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22091,133436,133438],{"id":133437},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[171,133440,133441,133444,133447,133450],{},[109,133442,133443],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[109,133445,133446],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[109,133448,133449],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[109,133451,133452],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[38,133454,133455],{"className":126606,"code":131072,"language":126608,"meta":43,"style":43},[26,133456,133457,133463,133473,133477,133483,133493],{"__ignoreMap":43},[47,133458,133459,133461],{"class":49,"line":50},[47,133460,131079],{"class":53},[47,133462,15665],{"class":221},[47,133464,133465,133467,133469,133471],{"class":49,"line":92},[47,133466,131086],{"class":85},[47,133468,51491],{"class":221},[47,133470,23829],{"class":85},[47,133472,1384],{"class":221},[47,133474,133475],{"class":49,"line":1273},[47,133476,1659],{"class":221},[47,133478,133479,133481],{"class":49,"line":1288},[47,133480,131101],{"class":53},[47,133482,15665],{"class":221},[47,133484,133485,133487,133489,133491],{"class":49,"line":1294},[47,133486,131086],{"class":85},[47,133488,51491],{"class":221},[47,133490,72576],{"class":85},[47,133492,1384],{"class":221},[47,133494,133495],{"class":49,"line":1308},[47,133496,1659],{"class":221},[1556,133498],{"style":126462,"src":133499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22091,133501,133503],{"id":133502},"_11138-轮播图","11.1.3.8 轮播图",[1556,133505],{"style":126462,"src":133506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[171,133508,133509],{},[109,133510,133511],{},"制作顺序:",[106,133513,133514,133517,133520,133529],{},[109,133515,133516],{},"大盒子我们类名为： tb-promo 淘宝广告",[109,133518,133519],{},"里面先放一张图片",[109,133521,133522,133523,133525,133526,133528],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53770,133524],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53770,133527],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[109,133530,133531,133532,133534,133535,133537],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53770,133533],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53770,133536],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[171,133539,133540],{"start":92},[109,133541,133542],{},"代码模块",[38,133544,133546],{"className":126606,"code":133545,"language":126608,"meta":43,"style":43},"\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",[26,133547,133548,133553,133560,133570,133580,133590,133594,133599,133606,133616],{"__ignoreMap":43},[47,133549,133550],{"class":49,"line":50},[47,133551,133552],{"class":279},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[47,133554,133555,133558],{"class":49,"line":92},[47,133556,133557],{"class":53},".son",[47,133559,15665],{"class":221},[47,133561,133562,133564,133566,133568],{"class":49,"line":1273},[47,133563,132412],{"class":85},[47,133565,51491],{"class":221},[47,133567,54885],{"class":85},[47,133569,1384],{"class":221},[47,133571,133572,133574,133576,133578],{"class":49,"line":1288},[47,133573,132426],{"class":85},[47,133575,51491],{"class":221},[47,133577,411],{"class":85},[47,133579,1384],{"class":221},[47,133581,133582,133584,133586,133588],{"class":49,"line":1294},[47,133583,132443],{"class":85},[47,133585,51491],{"class":221},[47,133587,411],{"class":85},[47,133589,1384],{"class":221},[47,133591,133592],{"class":49,"line":1308},[47,133593,1659],{"class":221},[47,133595,133596],{"class":49,"line":1314},[47,133597,133598],{"class":279},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[47,133600,133601,133604],{"class":49,"line":1405},[47,133602,133603],{"class":53},".father",[47,133605,15665],{"class":221},[47,133607,133608,133610,133612,133614],{"class":49,"line":1411},[47,133609,132412],{"class":85},[47,133611,51491],{"class":221},[47,133613,54818],{"class":85},[47,133615,1384],{"class":221},[47,133617,133618],{"class":49,"line":1423},[47,133619,1659],{"class":221},[19,133621,133622],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[187,133624,133626],{"id":133625},"_1114-定位数值的移动","11.1.4 定位数值的移动",[1556,133628],{"style":126462,"src":133629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,133631,133632],{},"✨ 黄金口诀：",[19,133634,133635],{},"\"TOP正下负上，LEFT正右负左\"",[19,133637,133638],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,133640,133641],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,133643,133644],{},"✨ 简单记：",[19,133646,133647],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[134,133649,133650],{},"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":43,"searchDepth":92,"depth":92,"links":133652},[133653],{"id":132180,"depth":92,"text":132181,"children":133654},[133655,133656,133657,133658],{"id":132184,"depth":1273,"text":132185},{"id":132199,"depth":1273,"text":132200},{"id":132367,"depth":1273,"text":132368},{"id":133625,"depth":1273,"text":133626},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132172,"description":142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133665,"title":133666,"body":133667,"description":142,"extension":143,"meta":135090,"navigation":145,"path":135091,"seo":135092,"stem":135093,"__hash__":135094},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133668,"toc":135069},[133669,133672,133676,133684,133688,133693,133701,133713,133717,133722,133730,133741,133745,133750,133791,133799,133803,133806,133809,133812,133906,133909,134003,134006,134100,134103,134106,134141,134144,134147,134177,134180,134183,134186,134189,134192,134195,134198,134268,134271,134275,134279,134320,134324,134330,134333,134336,134340,134343,134346,134349,134430,134433,134436,134440,134444,134447,134450,134453,134456,134459,134465,134474,134478,134497,134501,134511,134514,134517,134520,134523,134526,134529,134532,134535,134544,134548,134557,134560,134565,134618,134623,134789,134792,134795,134800,134803,134806,134809,134812,134817,134965,134968,134971,134976,134979,134984,135018,135021,135024,135028,135031,135038,135041,135044,135047,135050,135053,135056,135059,135063,135066],[10,133670,133666],{"id":133671},"_12-显示隐藏与图形资源",[14,133673,133675],{"id":133674},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[106,133677,133678,133681],{},[109,133679,133680],{},"目的:让一个元素在页面中消失或者显示出来",[109,133682,133683],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[187,133685,133687],{"id":133686},"_1211-display-显示","12.1.1 display 显示",[171,133689,133690],{},[109,133691,133692],{},"display 设置或检索对象是否及如何显示",[106,133694,133695,133698],{},[109,133696,133697],{},"display: none;隐藏对象",[109,133699,133700],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[171,133702,133703,133710],{"start":92},[109,133704,133705,133706,133709],{},"特点： display 隐藏元素后， ",[369,133707,133708],{},"不再占"," 有原来的位置",[109,133711,133712],{},"在js中使用非常的广泛",[187,133714,133716],{"id":133715},"_1212-visibility可见性","12.1.2 visibility可见性",[171,133718,133719],{},[109,133720,133721],{},"visibility 属性用于指定一个元素应可见还是隐藏",[106,133723,133724,133727],{},[109,133725,133726],{},"visibility： visible；元素可见",[109,133728,133729],{},"visibility：hidden；元素隐藏",[171,133731,133732,133735,133738],{"start":92},[109,133733,133734],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[109,133736,133737],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[109,133739,133740],{},"隐藏后继续占有原有位置",[187,133742,133744],{"id":133743},"_1213-overflow溢出","12.1.3 overflow溢出",[106,133746,133747],{},[109,133748,133749],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[357,133751,133752,133760],{},[360,133753,133754],{},[363,133755,133756,133758],{},[366,133757,127070],{"align":23829},[366,133759,27543],{"align":23829},[404,133761,133762,133770,133777,133784],{},[363,133763,133764,133767],{},[409,133765,133766],{"align":23829},"visible",[409,133768,133769],{"align":23829},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[363,133771,133772,133774],{},[409,133773,61768],{"align":23829},[409,133775,133776],{"align":23829},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[363,133778,133779,133781],{},[409,133780,129026],{"align":23829},[409,133782,133783],{"align":23829},"不管超出内容否，总是显示滚动条",[363,133785,133786,133788],{},[409,133787,72717],{"align":23829},[409,133789,133790],{"align":23829},"超出自动显示滚动条，不超出不显示滚动条",[106,133792,133793,133796],{},[109,133794,133795],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[109,133797,133798],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[187,133800,133802],{"id":133801},"_1214-案例收获","12.1.4 案例收获",[1556,133804],{"style":126462,"src":133805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,133807,133808],{},"问题：没做出来动态效果，使用hover没实现",[19,133810,133811],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[38,133813,133814],{"className":126606,"code":132038,"language":126608,"meta":43,"style":43},[26,133815,133816,133820,133834,133838,133852,133856,133870,133874,133888,133892],{"__ignoreMap":43},[47,133817,133818],{"class":49,"line":50},[47,133819,132045],{"class":279},[47,133821,133822,133824,133826,133828,133830,133832],{"class":49,"line":92},[47,133823,132050],{"class":53},[47,133825,79861],{"class":221},[47,133827,128966],{"class":85},[47,133829,51491],{"class":221},[47,133831,132059],{"class":85},[47,133833,129536],{"class":221},[47,133835,133836],{"class":49,"line":1273},[47,133837,132066],{"class":279},[47,133839,133840,133842,133844,133846,133848,133850],{"class":49,"line":1288},[47,133841,132071],{"class":53},[47,133843,79861],{"class":221},[47,133845,128966],{"class":85},[47,133847,51491],{"class":221},[47,133849,54818],{"class":85},[47,133851,129536],{"class":221},[47,133853,133854],{"class":49,"line":1294},[47,133855,132086],{"class":279},[47,133857,133858,133860,133862,133864,133866,133868],{"class":49,"line":1308},[47,133859,132091],{"class":53},[47,133861,79861],{"class":221},[47,133863,128966],{"class":85},[47,133865,51491],{"class":221},[47,133867,54885],{"class":85},[47,133869,129536],{"class":221},[47,133871,133872],{"class":49,"line":1314},[47,133873,132106],{"class":279},[47,133875,133876,133878,133880,133882,133884,133886],{"class":49,"line":1405},[47,133877,132111],{"class":53},[47,133879,79861],{"class":221},[47,133881,128966],{"class":85},[47,133883,51491],{"class":221},[47,133885,86287],{"class":85},[47,133887,129536],{"class":221},[47,133889,133890],{"class":49,"line":1411},[47,133891,132126],{"class":279},[47,133893,133894,133896,133898,133900,133902,133904],{"class":49,"line":1423},[47,133895,132131],{"class":53},[47,133897,79861],{"class":221},[47,133899,128966],{"class":85},[47,133901,51491],{"class":221},[47,133903,132140],{"class":85},[47,133905,129536],{"class":221},[19,133907,133908],{},"完整代码：",[38,133910,133911],{"className":126606,"code":132038,"language":126608,"meta":43,"style":43},[26,133912,133913,133917,133931,133935,133949,133953,133967,133971,133985,133989],{"__ignoreMap":43},[47,133914,133915],{"class":49,"line":50},[47,133916,132045],{"class":279},[47,133918,133919,133921,133923,133925,133927,133929],{"class":49,"line":92},[47,133920,132050],{"class":53},[47,133922,79861],{"class":221},[47,133924,128966],{"class":85},[47,133926,51491],{"class":221},[47,133928,132059],{"class":85},[47,133930,129536],{"class":221},[47,133932,133933],{"class":49,"line":1273},[47,133934,132066],{"class":279},[47,133936,133937,133939,133941,133943,133945,133947],{"class":49,"line":1288},[47,133938,132071],{"class":53},[47,133940,79861],{"class":221},[47,133942,128966],{"class":85},[47,133944,51491],{"class":221},[47,133946,54818],{"class":85},[47,133948,129536],{"class":221},[47,133950,133951],{"class":49,"line":1294},[47,133952,132086],{"class":279},[47,133954,133955,133957,133959,133961,133963,133965],{"class":49,"line":1308},[47,133956,132091],{"class":53},[47,133958,79861],{"class":221},[47,133960,128966],{"class":85},[47,133962,51491],{"class":221},[47,133964,54885],{"class":85},[47,133966,129536],{"class":221},[47,133968,133969],{"class":49,"line":1314},[47,133970,132106],{"class":279},[47,133972,133973,133975,133977,133979,133981,133983],{"class":49,"line":1405},[47,133974,132111],{"class":53},[47,133976,79861],{"class":221},[47,133978,128966],{"class":85},[47,133980,51491],{"class":221},[47,133982,86287],{"class":85},[47,133984,129536],{"class":221},[47,133986,133987],{"class":49,"line":1411},[47,133988,132126],{"class":279},[47,133990,133991,133993,133995,133997,133999,134001],{"class":49,"line":1423},[47,133992,132131],{"class":53},[47,133994,79861],{"class":221},[47,133996,128966],{"class":85},[47,133998,51491],{"class":221},[47,134000,132140],{"class":85},[47,134002,129536],{"class":221},[19,134004,134005],{},"分布思路重点详解：",[38,134007,134008],{"className":126606,"code":132038,"language":126608,"meta":43,"style":43},[26,134009,134010,134014,134028,134032,134046,134050,134064,134068,134082,134086],{"__ignoreMap":43},[47,134011,134012],{"class":49,"line":50},[47,134013,132045],{"class":279},[47,134015,134016,134018,134020,134022,134024,134026],{"class":49,"line":92},[47,134017,132050],{"class":53},[47,134019,79861],{"class":221},[47,134021,128966],{"class":85},[47,134023,51491],{"class":221},[47,134025,132059],{"class":85},[47,134027,129536],{"class":221},[47,134029,134030],{"class":49,"line":1273},[47,134031,132066],{"class":279},[47,134033,134034,134036,134038,134040,134042,134044],{"class":49,"line":1288},[47,134035,132071],{"class":53},[47,134037,79861],{"class":221},[47,134039,128966],{"class":85},[47,134041,51491],{"class":221},[47,134043,54818],{"class":85},[47,134045,129536],{"class":221},[47,134047,134048],{"class":49,"line":1294},[47,134049,132086],{"class":279},[47,134051,134052,134054,134056,134058,134060,134062],{"class":49,"line":1308},[47,134053,132091],{"class":53},[47,134055,79861],{"class":221},[47,134057,128966],{"class":85},[47,134059,51491],{"class":221},[47,134061,54885],{"class":85},[47,134063,129536],{"class":221},[47,134065,134066],{"class":49,"line":1314},[47,134067,132106],{"class":279},[47,134069,134070,134072,134074,134076,134078,134080],{"class":49,"line":1405},[47,134071,132111],{"class":53},[47,134073,79861],{"class":221},[47,134075,128966],{"class":85},[47,134077,51491],{"class":221},[47,134079,86287],{"class":85},[47,134081,129536],{"class":221},[47,134083,134084],{"class":49,"line":1411},[47,134085,132126],{"class":279},[47,134087,134088,134090,134092,134094,134096,134098],{"class":49,"line":1423},[47,134089,132131],{"class":53},[47,134091,79861],{"class":221},[47,134093,128966],{"class":85},[47,134095,51491],{"class":221},[47,134097,132140],{"class":85},[47,134099,129536],{"class":221},[1556,134101],{"style":126462,"src":134102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,134104,134105],{},"图片太大，盒子太小，此时需要修改图片的大小",[38,134107,134109],{"className":127353,"code":134108,"language":127355,"meta":43,"style":43},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[26,134110,134111],{"__ignoreMap":43},[47,134112,134113,134115,134117,134119,134121,134124,134126,134128,134131,134134,134136,134139],{"class":49,"line":50},[47,134114,1129],{"class":221},[47,134116,1556],{"class":51354},[47,134118,55293],{"class":53},[47,134120,267],{"class":221},[47,134122,134123],{"class":81},"\"images\u002Fpic.jpg\"",[47,134125,55301],{"class":53},[47,134127,267],{"class":221},[47,134129,134130],{"class":81},"\"描述文字\"",[47,134132,134133],{"class":53}," title",[47,134135,267],{"class":221},[47,134137,134138],{"class":81},"\"悬停提示\"",[47,134140,51361],{"class":221},[1556,134142],{"style":126462,"src":134143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,134145,134146],{},"制造遮罩层",[38,134148,134149],{"className":127353,"code":134108,"language":127355,"meta":43,"style":43},[26,134150,134151],{"__ignoreMap":43},[47,134152,134153,134155,134157,134159,134161,134163,134165,134167,134169,134171,134173,134175],{"class":49,"line":50},[47,134154,1129],{"class":221},[47,134156,1556],{"class":51354},[47,134158,55293],{"class":53},[47,134160,267],{"class":221},[47,134162,134123],{"class":81},[47,134164,55301],{"class":53},[47,134166,267],{"class":221},[47,134168,134130],{"class":81},[47,134170,134133],{"class":53},[47,134172,267],{"class":221},[47,134174,134138],{"class":81},[47,134176,51361],{"class":221},[19,134178,134179],{},"此时是这样的为标准流",[1556,134181],{"style":126462,"src":134182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,134184,134185],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,134187,134188],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,134190,134191],{},"让他在中间，用center(background-position)",[19,134193,134194],{},"将需要变的尽可能放到一个盒子中",[19,134196,134197],{},"放大盒子上内部盒子发生变化",[38,134199,134201],{"className":126606,"code":134200,"language":126608,"meta":43,"style":43},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[26,134202,134203,134209,134219,134223,134230,134240,134252,134264],{"__ignoreMap":43},[47,134204,134205,134207],{"class":49,"line":50},[47,134206,127673],{"class":53},[47,134208,15665],{"class":221},[47,134210,134211,134213,134215,134217],{"class":49,"line":92},[47,134212,132412],{"class":85},[47,134214,51491],{"class":221},[47,134216,54818],{"class":85},[47,134218,1384],{"class":221},[47,134220,134221],{"class":49,"line":1273},[47,134222,1659],{"class":221},[47,134224,134225,134228],{"class":49,"line":1288},[47,134226,134227],{"class":53},".child",[47,134229,15665],{"class":221},[47,134231,134232,134234,134236,134238],{"class":49,"line":1294},[47,134233,132412],{"class":85},[47,134235,51491],{"class":221},[47,134237,54885],{"class":85},[47,134239,1384],{"class":221},[47,134241,134242,134244,134246,134248,134250],{"class":49,"line":1308},[47,134243,132426],{"class":85},[47,134245,51491],{"class":221},[47,134247,875],{"class":85},[47,134249,547],{"class":217},[47,134251,1384],{"class":221},[47,134253,134254,134256,134258,134260,134262],{"class":49,"line":1314},[47,134255,132443],{"class":85},[47,134257,51491],{"class":221},[47,134259,875],{"class":85},[47,134261,547],{"class":217},[47,134263,1384],{"class":221},[47,134265,134266],{"class":49,"line":1405},[47,134267,1659],{"class":221},[19,134269,134270],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,134272,134274],{"id":134273},"_122-精灵图","12.2 精灵图",[187,134276,134278],{"id":134277},"_1221-理解","12.2.1 理解",[171,134280,134281,134299],{},[109,134282,134283,134284,132512,134287,134290,134291,134294,134295,134298],{},"目的： ",[369,134285,134286],{},"为了有效地减少服务器接收和发送请求的次数",[369,134288,134289],{},"提高"," 页面的 ",[369,134292,134293],{},"加载速度"," ，出现了 ",[369,134296,134297],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[109,134300,134301,134302,134304,134305,134307,134308,134310,134311,134313,134314,134316,134317,134319],{},"使用精灵图核心：",[53770,134303],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53770,134306],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53770,134309],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53770,134312],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53770,134315],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53770,134318],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[187,134321,134323],{"id":134322},"_1222-扒图","12.2.2 扒图",[38,134325,134328],{"className":134326,"code":134327,"language":5280},[5278],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[26,134329,134327],{"__ignoreMap":43},[1556,134331],{"style":126462,"src":134332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[1556,134334],{"style":126462,"src":134335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[187,134337,134339],{"id":134338},"_1223-精灵图的实现","12.2.3 精灵图的实现",[1556,134341],{"style":126462,"src":134342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,134344,134345],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[1556,134347],{"style":126462,"src":134348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[38,134350,134352],{"className":126606,"code":134351,"language":126608,"meta":43,"style":43},"\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",[26,134353,134354,134359,134366,134378,134390,134409,134426],{"__ignoreMap":43},[47,134355,134356],{"class":49,"line":50},[47,134357,134358],{"class":279},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[47,134360,134361,134364],{"class":49,"line":92},[47,134362,134363],{"class":53},".icon",[47,134365,15665],{"class":221},[47,134367,134368,134370,134372,134374,134376],{"class":49,"line":1273},[47,134369,70622],{"class":85},[47,134371,51491],{"class":221},[47,134373,919],{"class":85},[47,134375,51546],{"class":217},[47,134377,1384],{"class":221},[47,134379,134380,134382,134384,134386,134388],{"class":49,"line":1288},[47,134381,70842],{"class":85},[47,134383,51491],{"class":221},[47,134385,919],{"class":85},[47,134387,51546],{"class":217},[47,134389,1384],{"class":221},[47,134391,134392,134394,134396,134398,134400,134403,134405,134407],{"class":49,"line":1294},[47,134393,70665],{"class":85},[47,134395,51491],{"class":221},[47,134397,61780],{"class":85},[47,134399,222],{"class":221},[47,134401,134402],{"class":5309},"sprites.png",[47,134404,13807],{"class":221},[47,134406,61790],{"class":85},[47,134408,1384],{"class":221},[47,134410,134411,134413,134415,134417,134419,134422,134424],{"class":49,"line":1308},[47,134412,128866],{"class":85},[47,134414,51491],{"class":221},[47,134416,51817],{"class":85},[47,134418,51546],{"class":217},[47,134420,134421],{"class":85}," -20",[47,134423,51546],{"class":217},[47,134425,1384],{"class":221},[47,134427,134428],{"class":49,"line":1314},[47,134429,1659],{"class":221},[1556,134431],{"style":126462,"src":134432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,134434,134435],{},"在前端中坐标轴的正方向是右和下",[14,134437,134439],{"id":134438},"_123-字体图标","12.3 字体图标",[187,134441,134443],{"id":134442},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,134445,134446],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,134448,134449],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,134451,134452],{},"1.图片文件还是比较大的。",[19,134454,134455],{},"2.图片本身放大和缩小会失真。",[19,134457,134458],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,134460,134461,134462,25794],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[369,134463,134464],{},"字体图标 iconfont",[19,134466,134467,134470,134471,28439],{},[369,134468,134469],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[369,134472,134473],{},"展示的是图标，本质属于字体",[187,134475,134477],{"id":134476},"_1232-字体图标的优点","12.3.2 字体图标的优点",[106,134479,134480,134485,134488,134491,134494],{},[109,134481,134482,134484],{},[369,134483,25930],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[109,134486,134487],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[109,134489,134490],{},"兼容性：几乎支持所有的浏览器，请放心使用",[109,134492,134493],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[109,134495,134496],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[187,134498,134500],{"id":134499},"_1233-字体库下载网站","12.3.3 字体库下载网站",[106,134502,134503],{},[109,134504,134505,134506],{},"icomoon字体库：",[457,134507,134510],{"href":134508,"rel":134509},"http:\u002F\u002Ficomoon.io\u002F",[23956],"http:\u002F\u002Ficomoon.io",[19,134512,134513],{},"进去之后点icomoon app",[1556,134515],{"style":126462,"src":134516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,134518,134519],{},"可以对其编辑：",[1556,134521],{"style":126462,"src":134522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,134524,134525],{},"生成字体：",[1556,134527],{"style":126462,"src":134528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,134530,134531],{},"下载：",[1556,134533],{"style":126462,"src":134534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[106,134536,134537],{},[109,134538,134539,134540],{},"阿里iconfont字体库： ",[457,134541,134542],{"href":134542,"rel":134543},"http:\u002F\u002Fwww.iconfont.cn\u002F",[23956],[187,134545,134547],{"id":134546},"_1234-字体图标的引入","12.3.4 字体图标的引入",[171,134549,134550],{},[109,134551,134552,134553,134556],{},"把下载包里面的 ",[369,134554,134555],{},"fonts"," 文件夹放入页面根目录下",[1556,134558],{"style":126462,"src":134559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[171,134561,134562],{"start":92},[109,134563,134564],{},"字体文件格式",[357,134566,134567,134576],{},[360,134568,134569],{},[363,134570,134571,134574],{},[366,134572,134573],{"align":23829},"格式",[366,134575,23833],{"align":23829},[404,134577,134578,134588,134598,134608],{},[363,134579,134580,134585],{},[409,134581,134582],{"align":23829},[369,134583,134584],{},".ttf",[409,134586,134587],{"align":23829},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[363,134589,134590,134595],{},[409,134591,134592],{"align":23829},[369,134593,134594],{},".woff",[409,134596,134597],{"align":23829},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[363,134599,134600,134605],{},[409,134601,134602],{"align":23829},[369,134603,134604],{},".eot",[409,134606,134607],{"align":23829},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[363,134609,134610,134615],{},[409,134611,134612],{"align":23829},[369,134613,134614],{},"svg",[409,134616,134617],{"align":23829},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[171,134619,134620],{"start":1273},[109,134621,134622],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[38,134624,134626],{"className":126606,"code":134625,"language":126608,"meta":43,"style":43},"\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",[26,134627,134628,134633,134640,134652,134668,134693,134714,134734,134754,134758,134764,134774,134785],{"__ignoreMap":43},[47,134629,134630],{"class":49,"line":50},[47,134631,134632],{"class":279},"\u002F* 引入字体图标 *\u002F\n",[47,134634,134635,134638],{"class":49,"line":92},[47,134636,134637],{"class":217},"@font-face",[47,134639,15665],{"class":221},[47,134641,134642,134645,134647,134650],{"class":49,"line":1273},[47,134643,134644],{"class":85},"  font-family",[47,134646,51491],{"class":221},[47,134648,134649],{"class":81},"'icomoon'",[47,134651,1384],{"class":221},[47,134653,134654,134657,134659,134661,134663,134666],{"class":49,"line":1288},[47,134655,134656],{"class":85},"  src",[47,134658,51491],{"class":221},[47,134660,61780],{"class":85},[47,134662,222],{"class":221},[47,134664,134665],{"class":81},"'fonts\u002Ficomoon.eot'",[47,134667,2812],{"class":221},[47,134669,134670,134672,134674,134676,134678,134681,134683,134686,134688,134691],{"class":49,"line":1294},[47,134671,134656],{"class":85},[47,134673,51491],{"class":221},[47,134675,61780],{"class":85},[47,134677,222],{"class":221},[47,134679,134680],{"class":81},"'fonts\u002Ficomoon.eot?#iefix'",[47,134682,13807],{"class":221},[47,134684,134685],{"class":85},"format",[47,134687,222],{"class":221},[47,134689,134690],{"class":81},"'embedded-opentype'",[47,134692,38101],{"class":221},[47,134694,134695,134698,134700,134703,134705,134707,134709,134712],{"class":49,"line":1308},[47,134696,134697],{"class":85},"       url",[47,134699,222],{"class":221},[47,134701,134702],{"class":81},"'fonts\u002Ficomoon.woff'",[47,134704,13807],{"class":221},[47,134706,134685],{"class":85},[47,134708,222],{"class":221},[47,134710,134711],{"class":81},"'woff'",[47,134713,38101],{"class":221},[47,134715,134716,134718,134720,134723,134725,134727,134729,134732],{"class":49,"line":1314},[47,134717,134697],{"class":85},[47,134719,222],{"class":221},[47,134721,134722],{"class":81},"'fonts\u002Ficomoon.ttf'",[47,134724,13807],{"class":221},[47,134726,134685],{"class":85},[47,134728,222],{"class":221},[47,134730,134731],{"class":81},"'truetype'",[47,134733,38101],{"class":221},[47,134735,134736,134738,134740,134743,134745,134747,134749,134752],{"class":49,"line":1405},[47,134737,134697],{"class":85},[47,134739,222],{"class":221},[47,134741,134742],{"class":81},"'fonts\u002Ficomoon.svg#icomoon'",[47,134744,13807],{"class":221},[47,134746,134685],{"class":85},[47,134748,222],{"class":221},[47,134750,134751],{"class":81},"'svg'",[47,134753,2812],{"class":221},[47,134755,134756],{"class":49,"line":1411},[47,134757,1659],{"class":221},[47,134759,134760,134762],{"class":49,"line":1423},[47,134761,134363],{"class":53},[47,134763,15665],{"class":221},[47,134765,134766,134768,134770,134772],{"class":49,"line":1706},[47,134767,134644],{"class":85},[47,134769,51491],{"class":221},[47,134771,134649],{"class":81},[47,134773,1384],{"class":221},[47,134775,134776,134779,134781,134783],{"class":49,"line":1711},[47,134777,134778],{"class":85},"  font-style",[47,134780,51491],{"class":221},[47,134782,63895],{"class":85},[47,134784,1384],{"class":221},[47,134786,134787],{"class":49,"line":1717},[47,134788,1659],{"class":221},[19,134790,134791],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[1556,134793],{"style":126462,"src":134794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[171,134796,134797],{"start":1288},[109,134798,134799],{},"添加字体",[1556,134801],{"style":126462,"src":134802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,134804,134805],{},"复制：",[1556,134807],{"style":126462,"src":134808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,134810,134811],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[171,134813,134814],{"start":1294},[109,134815,134816],{},"代码展示：",[38,134818,134819],{"className":126606,"code":134625,"language":126608,"meta":43,"style":43},[26,134820,134821,134825,134831,134841,134855,134877,134895,134913,134931,134935,134941,134951,134961],{"__ignoreMap":43},[47,134822,134823],{"class":49,"line":50},[47,134824,134632],{"class":279},[47,134826,134827,134829],{"class":49,"line":92},[47,134828,134637],{"class":217},[47,134830,15665],{"class":221},[47,134832,134833,134835,134837,134839],{"class":49,"line":1273},[47,134834,134644],{"class":85},[47,134836,51491],{"class":221},[47,134838,134649],{"class":81},[47,134840,1384],{"class":221},[47,134842,134843,134845,134847,134849,134851,134853],{"class":49,"line":1288},[47,134844,134656],{"class":85},[47,134846,51491],{"class":221},[47,134848,61780],{"class":85},[47,134850,222],{"class":221},[47,134852,134665],{"class":81},[47,134854,2812],{"class":221},[47,134856,134857,134859,134861,134863,134865,134867,134869,134871,134873,134875],{"class":49,"line":1294},[47,134858,134656],{"class":85},[47,134860,51491],{"class":221},[47,134862,61780],{"class":85},[47,134864,222],{"class":221},[47,134866,134680],{"class":81},[47,134868,13807],{"class":221},[47,134870,134685],{"class":85},[47,134872,222],{"class":221},[47,134874,134690],{"class":81},[47,134876,38101],{"class":221},[47,134878,134879,134881,134883,134885,134887,134889,134891,134893],{"class":49,"line":1308},[47,134880,134697],{"class":85},[47,134882,222],{"class":221},[47,134884,134702],{"class":81},[47,134886,13807],{"class":221},[47,134888,134685],{"class":85},[47,134890,222],{"class":221},[47,134892,134711],{"class":81},[47,134894,38101],{"class":221},[47,134896,134897,134899,134901,134903,134905,134907,134909,134911],{"class":49,"line":1314},[47,134898,134697],{"class":85},[47,134900,222],{"class":221},[47,134902,134722],{"class":81},[47,134904,13807],{"class":221},[47,134906,134685],{"class":85},[47,134908,222],{"class":221},[47,134910,134731],{"class":81},[47,134912,38101],{"class":221},[47,134914,134915,134917,134919,134921,134923,134925,134927,134929],{"class":49,"line":1405},[47,134916,134697],{"class":85},[47,134918,222],{"class":221},[47,134920,134742],{"class":81},[47,134922,13807],{"class":221},[47,134924,134685],{"class":85},[47,134926,222],{"class":221},[47,134928,134751],{"class":81},[47,134930,2812],{"class":221},[47,134932,134933],{"class":49,"line":1411},[47,134934,1659],{"class":221},[47,134936,134937,134939],{"class":49,"line":1423},[47,134938,134363],{"class":53},[47,134940,15665],{"class":221},[47,134942,134943,134945,134947,134949],{"class":49,"line":1706},[47,134944,134644],{"class":85},[47,134946,51491],{"class":221},[47,134948,134649],{"class":81},[47,134950,1384],{"class":221},[47,134952,134953,134955,134957,134959],{"class":49,"line":1711},[47,134954,134778],{"class":85},[47,134956,51491],{"class":221},[47,134958,63895],{"class":85},[47,134960,1384],{"class":221},[47,134962,134963],{"class":49,"line":1717},[47,134964,1659],{"class":221},[1556,134966],{"style":126462,"src":134967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,134969,134970],{},"更加细节展示：",[171,134972,134973],{},[109,134974,134975],{},"html 标签内添加小图标",[1556,134977],{"style":126462,"src":134978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[171,134980,134981],{"start":92},[109,134982,134983],{},"给标签定义字体",[38,134985,134986],{"className":127353,"code":130710,"language":127355,"meta":43,"style":43},[26,134987,134988,134992,135006,135010],{"__ignoreMap":43},[47,134989,134990],{"class":49,"line":50},[47,134991,130717],{"class":279},[47,134993,134994,134996,134998,135000,135002,135004],{"class":49,"line":92},[47,134995,1129],{"class":221},[47,134997,51665],{"class":51354},[47,134999,53540],{"class":53},[47,135001,267],{"class":221},[47,135003,130730],{"class":81},[47,135005,51361],{"class":221},[47,135007,135008],{"class":49,"line":1273},[47,135009,130737],{"class":221},[47,135011,135012,135014,135016],{"class":49,"line":1288},[47,135013,51839],{"class":221},[47,135015,51665],{"class":51354},[47,135017,51361],{"class":221},[19,135019,135020],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[1556,135022],{"style":126462,"src":135023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[187,135025,135027],{"id":135026},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,135029,135030],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,135032,135033,135034,135037],{},"把压缩包里面的 ",[369,135035,135036],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,135039,135040],{},"打开网站，点下方：",[1556,135042],{"style":126462,"src":135043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[1556,135045],{"style":126462,"src":135046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[1556,135048],{"style":126462,"src":135049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,135051,135052],{},"点yes重新加载",[19,135054,135055],{},"然后重复之前的操作就可以实现了",[19,135057,135058],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[187,135060,135062],{"id":135061},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[1556,135064],{"style":126462,"src":135065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[134,135067,135068],{},"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":43,"searchDepth":92,"depth":92,"links":135070},[135071,135077,135082],{"id":133674,"depth":92,"text":133675,"children":135072},[135073,135074,135075,135076],{"id":133686,"depth":1273,"text":133687},{"id":133715,"depth":1273,"text":133716},{"id":133743,"depth":1273,"text":133744},{"id":133801,"depth":1273,"text":133802},{"id":134273,"depth":92,"text":134274,"children":135078},[135079,135080,135081],{"id":134277,"depth":1273,"text":134278},{"id":134322,"depth":1273,"text":134323},{"id":134338,"depth":1273,"text":134339},{"id":134438,"depth":92,"text":134439,"children":135083},[135084,135085,135086,135087,135088,135089],{"id":134442,"depth":1273,"text":134443},{"id":134476,"depth":1273,"text":134477},{"id":134499,"depth":1273,"text":134500},{"id":134546,"depth":1273,"text":134547},{"id":135026,"depth":1273,"text":135027},{"id":135061,"depth":1273,"text":135062},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133666,"description":142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135096,"title":135097,"body":135098,"description":142,"extension":143,"meta":136325,"navigation":145,"path":136326,"seo":136327,"stem":136328,"__hash__":136329},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135099,"toc":136306},[135100,135103,135107,135110,135124,135192,135222,135225,135229,135233,135335,135382,135386,135389,135392,135426,135429,135432,135435,135438,135441,135444,135447,135449,135452,135455,135458,135461,135464,135467,135470,135498,135501,135505,135508,135515,135518,135521,135547,135550,135554,135557,135560,135567,135571,135574,135576,135608,135611,135614,135626,135632,135635,135638,135641,135643,135647,135650,135653,135656,135701,135705,135707,135710,135717,135759,135762,135766,135771,135785,135789,135792,135795,135798,135801,135804,135838,135841,135844,135898,135901,135904,135907,135910,135962,135965,135968,136017,136021,136023,136026,136029,136032,136035,136038,136096,136099,136105,136108,136111,136143,136146,136150,136154,136157,136189,136193,136196,136240,136244,136247,136250,136253,136256,136259,136262,136265,136267,136270,136272,136275,136278,136281,136284,136289,136292,136294,136297,136300,136303],[10,135101,135097],{"id":135102},"_13-界面样式与布局技巧",[14,135104,135106],{"id":135105},"_131-css三角","13.1 css三角",[19,135108,135109],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[106,135111,135112,135115,135118,135121],{},[109,135113,135114],{},"用css 边框可以模拟三角效果",[109,135116,135117],{},"宽度高度为0",[109,135119,135120],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[109,135122,135123],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[38,135125,135127],{"className":126606,"code":135126,"language":126608,"meta":43,"style":43},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[26,135128,135129,135134,135141,135151,135161,135177,135188],{"__ignoreMap":43},[47,135130,135131],{"class":49,"line":50},[47,135132,135133],{"class":279},"\u002F* CSS 实现三角形 *\u002F\n",[47,135135,135136,135139],{"class":49,"line":92},[47,135137,135138],{"class":53},".triangle",[47,135140,15665],{"class":221},[47,135142,135143,135145,135147,135149],{"class":49,"line":1273},[47,135144,70622],{"class":85},[47,135146,51491],{"class":221},[47,135148,411],{"class":85},[47,135150,1384],{"class":221},[47,135152,135153,135155,135157,135159],{"class":49,"line":1288},[47,135154,70842],{"class":85},[47,135156,51491],{"class":221},[47,135158,411],{"class":85},[47,135160,1384],{"class":221},[47,135162,135163,135165,135167,135169,135171,135173,135175],{"class":49,"line":1294},[47,135164,70950],{"class":85},[47,135166,51491],{"class":221},[47,135168,665],{"class":85},[47,135170,51546],{"class":217},[47,135172,51575],{"class":85},[47,135174,64045],{"class":85},[47,135176,1384],{"class":221},[47,135178,135179,135182,135184,135186],{"class":49,"line":1308},[47,135180,135181],{"class":85},"  border-bottom-color",[47,135183,51491],{"class":221},[47,135185,62423],{"class":85},[47,135187,1384],{"class":221},[47,135189,135190],{"class":49,"line":1314},[47,135191,1659],{"class":221},[38,135193,135194],{"className":126606,"code":130763,"language":126608,"meta":43,"style":43},[26,135195,135196,135202,135218],{"__ignoreMap":43},[47,135197,135198,135200],{"class":49,"line":50},[47,135199,51665],{"class":51354},[47,135201,15665],{"class":221},[47,135203,135204,135206,135208,135210,135212,135214,135216],{"class":49,"line":92},[47,135205,70950],{"class":85},[47,135207,51491],{"class":221},[47,135209,436],{"class":85},[47,135211,51546],{"class":217},[47,135213,51575],{"class":85},[47,135215,129998],{"class":85},[47,135217,1384],{"class":221},[47,135219,135220],{"class":49,"line":1273},[47,135221,1659],{"class":221},[1556,135223],{"style":126462,"src":135224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,135226,135228],{"id":135227},"_132-css用户界面样式","13.2 css用户界面样式",[187,135230,135232],{"id":135231},"_1321-鼠标样式","13.2.1 鼠标样式",[38,135234,135236],{"className":126606,"code":135235,"language":126608,"meta":43,"style":43},"\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",[26,135237,135238,135243,135262,135280,135299,135316],{"__ignoreMap":43},[47,135239,135240],{"class":49,"line":50},[47,135241,135242],{"class":279},"\u002F* 鼠标样式 *\u002F\n",[47,135244,135245,135247,135249,135252,135254,135256,135259],{"class":49,"line":92},[47,135246,51665],{"class":51354},[47,135248,79861],{"class":221},[47,135250,135251],{"class":85},"cursor",[47,135253,51491],{"class":221},[47,135255,62084],{"class":85},[47,135257,135258],{"class":221},"; }   ",[47,135260,135261],{"class":279},"\u002F* 手型 *\u002F\n",[47,135263,135264,135266,135268,135270,135272,135275,135277],{"class":49,"line":1273},[47,135265,51665],{"class":51354},[47,135267,79861],{"class":221},[47,135269,135251],{"class":85},[47,135271,51491],{"class":221},[47,135273,135274],{"class":85},"default",[47,135276,135258],{"class":221},[47,135278,135279],{"class":279},"\u002F* 默认 *\u002F\n",[47,135281,135282,135284,135286,135288,135290,135293,135296],{"class":49,"line":1288},[47,135283,51665],{"class":51354},[47,135285,79861],{"class":221},[47,135287,135251],{"class":85},[47,135289,51491],{"class":221},[47,135291,135292],{"class":85},"move",[47,135294,135295],{"class":221},"; }      ",[47,135297,135298],{"class":279},"\u002F* 移动 *\u002F\n",[47,135300,135301,135303,135305,135307,135309,135311,135313],{"class":49,"line":1294},[47,135302,51665],{"class":51354},[47,135304,79861],{"class":221},[47,135306,135251],{"class":85},[47,135308,51491],{"class":221},[47,135310,5280],{"class":85},[47,135312,135295],{"class":221},[47,135314,135315],{"class":279},"\u002F* 文本 *\u002F\n",[47,135317,135318,135320,135322,135324,135326,135329,135332],{"class":49,"line":1308},[47,135319,51665],{"class":51354},[47,135321,79861],{"class":221},[47,135323,135251],{"class":85},[47,135325,51491],{"class":221},[47,135327,135328],{"class":85},"not-allowed",[47,135330,135331],{"class":221},"; } ",[47,135333,135334],{"class":279},"\u002F* 禁止 *\u002F\n",[357,135336,135337,135345],{},[360,135338,135339],{},[363,135340,135341,135343],{},[366,135342,127070],{"align":23829},[366,135344,27543],{"align":23829},[404,135346,135347,135354,135361,135368,135375],{},[363,135348,135349,135351],{},[409,135350,135274],{"align":23829},[409,135352,135353],{"align":23829},"小白 默认",[363,135355,135356,135358],{},[409,135357,62084],{"align":23829},[409,135359,135360],{"align":23829},"小手",[363,135362,135363,135365],{},[409,135364,135292],{"align":23829},[409,135366,135367],{"align":23829},"移动",[363,135369,135370,135372],{},[409,135371,5280],{"align":23829},[409,135373,135374],{"align":23829},"文本",[363,135376,135377,135379],{},[409,135378,135328],{"align":23829},[409,135380,135381],{"align":23829},"禁止",[187,135383,135385],{"id":135384},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,135387,135388],{},"去除表单轮廓线",[19,135390,135391],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[38,135393,135394],{"className":126606,"code":129970,"language":126608,"meta":43,"style":43},[26,135395,135396,135400,135406,135422],{"__ignoreMap":43},[47,135397,135398],{"class":49,"line":50},[47,135399,129977],{"class":279},[47,135401,135402,135404],{"class":49,"line":92},[47,135403,51665],{"class":51354},[47,135405,15665],{"class":221},[47,135407,135408,135410,135412,135414,135416,135418,135420],{"class":49,"line":1273},[47,135409,70950],{"class":85},[47,135411,51491],{"class":221},[47,135413,436],{"class":85},[47,135415,51546],{"class":217},[47,135417,51575],{"class":85},[47,135419,129998],{"class":85},[47,135421,1384],{"class":221},[47,135423,135424],{"class":49,"line":1288},[47,135425,1659],{"class":221},[19,135427,135428],{},"文本域：",[1556,135430],{"style":126462,"src":135431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,135433,135434],{},"此时会有一个空白区域",[1556,135436],{"style":126462,"src":135437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,135439,135440],{},"写在同一行就不会出现这个问题",[1556,135442],{"style":126462,"src":135443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,135445,135446],{},"文本域是行内块元素，一定记住！！！",[19,135448,98287],{},[1556,135450],{"style":126462,"src":135451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,135453,135454],{},"文本域尽量放在一行",[19,135456,135457],{},"知识回顾：cols是列，rols是行",[1556,135459],{"style":126462,"src":135460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,135462,135463],{},"它可以进行拖动，显然这是我们不愿意看到的",[1556,135465],{"style":126462,"src":135466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,135468,135469],{},"使用resize进行解决",[38,135471,135473],{"className":126606,"code":135472,"language":126608,"meta":43,"style":43},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[26,135474,135475,135481,135494],{"__ignoreMap":43},[47,135476,135477,135479],{"class":49,"line":50},[47,135478,53875],{"class":51354},[47,135480,15665],{"class":221},[47,135482,135483,135485,135487,135489,135491],{"class":49,"line":92},[47,135484,70852],{"class":85},[47,135486,51491],{"class":221},[47,135488,54791],{"class":85},[47,135490,130469],{"class":221},[47,135492,135493],{"class":279},"\u002F* 取消表单轮廓线 *\u002F\n",[47,135495,135496],{"class":49,"line":1273},[47,135497,1659],{"class":221},[19,135499,135500],{},"此时就无法通过右下方实现拖动了",[187,135502,135504],{"id":135503},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,135506,135507],{},"实现一个盒子中的文字和图片对齐",[19,135509,135510,135511,135514],{},"用于设置一个元素的 ",[369,135512,135513],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,135516,135517],{},"图片和文字默认是基线对齐",[1556,135519],{"style":126462,"src":135520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[38,135522,135523],{"className":126606,"code":135472,"language":126608,"meta":43,"style":43},[26,135524,135525,135531,135543],{"__ignoreMap":43},[47,135526,135527,135529],{"class":49,"line":50},[47,135528,53875],{"class":51354},[47,135530,15665],{"class":221},[47,135532,135533,135535,135537,135539,135541],{"class":49,"line":92},[47,135534,70852],{"class":85},[47,135536,51491],{"class":221},[47,135538,54791],{"class":85},[47,135540,130469],{"class":221},[47,135542,135493],{"class":279},[47,135544,135545],{"class":49,"line":1273},[47,135546,1659],{"class":221},[1556,135548],{"style":126462,"src":135549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22091,135551,135553],{"id":135552},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,135555,135556],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[1556,135558],{"style":126462,"src":135559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,135561,135562,135563,135566],{},"此时可以给图片、表单这些行内块元素的 ",[369,135564,135565],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22091,135568,135570],{"id":135569},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,135572,135573],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,135575,14726],{},[38,135577,135579],{"className":126606,"code":135578,"language":126608,"meta":43,"style":43},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[26,135580,135581,135586,135592,135604],{"__ignoreMap":43},[47,135582,135583],{"class":49,"line":50},[47,135584,135585],{"class":279},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[47,135587,135588,135590],{"class":49,"line":92},[47,135589,1556],{"class":51354},[47,135591,15665],{"class":221},[47,135593,135594,135597,135599,135602],{"class":49,"line":1273},[47,135595,135596],{"class":85},"  vertical-align",[47,135598,51491],{"class":221},[47,135600,135601],{"class":85},"middle",[47,135603,1384],{"class":221},[47,135605,135606],{"class":49,"line":1288},[47,135607,1659],{"class":221},[1556,135609],{"style":126462,"src":135610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,135612,135613],{},"主要解决方法有两种：",[171,135615,135616],{},[109,135617,135618,135621,135622,135625],{},[369,135619,135620],{},"给图片"," 添加 ",[369,135623,135624],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,135627,135628,135629],{},"2.把图片转换为块级元素 ",[369,135630,135631],{},"display: block",[19,135633,135634],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,135636,135637],{},"img {",[19,135639,135640],{},"vertical-align:middle;",[19,135642,1165],{},[187,135644,135646],{"id":135645},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,135648,135649],{},"效果：",[1556,135651],{"style":126462,"src":135652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,135654,135655],{},"单行文本溢出显示省略号--必须满足三个条件：",[38,135657,135659],{"className":126606,"code":135658,"language":126608,"meta":43,"style":43},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[26,135660,135661,135666,135672,135682,135687,135697],{"__ignoreMap":43},[47,135662,135663],{"class":49,"line":50},[47,135664,135665],{"class":279},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[47,135667,135668,135670],{"class":49,"line":92},[47,135669,1556],{"class":51354},[47,135671,15665],{"class":221},[47,135673,135674,135676,135678,135680],{"class":49,"line":1273},[47,135675,135596],{"class":85},[47,135677,51491],{"class":221},[47,135679,135601],{"class":85},[47,135681,1384],{"class":221},[47,135683,135684],{"class":49,"line":1288},[47,135685,135686],{"class":279},"  \u002F* 或 *\u002F\n",[47,135688,135689,135691,135693,135695],{"class":49,"line":1294},[47,135690,128222],{"class":85},[47,135692,51491],{"class":221},[47,135694,60923],{"class":85},[47,135696,1384],{"class":221},[47,135698,135699],{"class":49,"line":1308},[47,135700,1659],{"class":221},[187,135702,135704],{"id":135703},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,135706,135649],{},[1556,135708],{"style":126462,"src":135709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,135711,135712,135713,135716],{},"多行文本溢出显示省略号， ",[369,135714,135715],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[38,135718,135719],{"className":126606,"code":135658,"language":126608,"meta":43,"style":43},[26,135720,135721,135725,135731,135741,135745,135755],{"__ignoreMap":43},[47,135722,135723],{"class":49,"line":50},[47,135724,135665],{"class":279},[47,135726,135727,135729],{"class":49,"line":92},[47,135728,1556],{"class":51354},[47,135730,15665],{"class":221},[47,135732,135733,135735,135737,135739],{"class":49,"line":1273},[47,135734,135596],{"class":85},[47,135736,51491],{"class":221},[47,135738,135601],{"class":85},[47,135740,1384],{"class":221},[47,135742,135743],{"class":49,"line":1288},[47,135744,135686],{"class":279},[47,135746,135747,135749,135751,135753],{"class":49,"line":1294},[47,135748,128222],{"class":85},[47,135750,51491],{"class":221},[47,135752,60923],{"class":85},[47,135754,1384],{"class":221},[47,135756,135757],{"class":49,"line":1308},[47,135758,1659],{"class":221},[19,135760,135761],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,135763,135765],{"id":135764},"_133-常见布局技巧","13.3 常见布局技巧",[19,135767,135768],{},[369,135769,135770],{},"巧妙利用一个技术更快更好的布局：",[171,135772,135773,135776,135779,135782],{},[109,135774,135775],{},"margin负值的运用",[109,135777,135778],{},"文字围绕浮动元素",[109,135780,135781],{},"行内块的巧妙运用",[109,135783,135784],{},"CSS三角强化",[187,135786,135788],{"id":135787},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,135790,135791],{},"应用场景：",[1556,135793],{"style":126462,"src":135794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[1556,135796],{"style":126462,"src":135797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,135799,135800],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,135802,135803],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[38,135805,135806],{"className":126606,"code":129970,"language":126608,"meta":43,"style":43},[26,135807,135808,135812,135818,135834],{"__ignoreMap":43},[47,135809,135810],{"class":49,"line":50},[47,135811,129977],{"class":279},[47,135813,135814,135816],{"class":49,"line":92},[47,135815,51665],{"class":51354},[47,135817,15665],{"class":221},[47,135819,135820,135822,135824,135826,135828,135830,135832],{"class":49,"line":1273},[47,135821,70950],{"class":85},[47,135823,51491],{"class":221},[47,135825,436],{"class":85},[47,135827,51546],{"class":217},[47,135829,51575],{"class":85},[47,135831,129998],{"class":85},[47,135833,1384],{"class":221},[47,135835,135836],{"class":49,"line":1288},[47,135837,1659],{"class":221},[1556,135839],{"style":126462,"src":135840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,135842,135843],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[38,135845,135847],{"className":126606,"code":135846,"language":126608,"meta":43,"style":43},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[26,135848,135849,135854,135860,135870,135882,135894],{"__ignoreMap":43},[47,135850,135851],{"class":49,"line":50},[47,135852,135853],{"class":279},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[47,135855,135856,135858],{"class":49,"line":92},[47,135857,130454],{"class":53},[47,135859,15665],{"class":221},[47,135861,135862,135864,135866,135868],{"class":49,"line":1273},[47,135863,132412],{"class":85},[47,135865,51491],{"class":221},[47,135867,54818],{"class":85},[47,135869,1384],{"class":221},[47,135871,135872,135874,135876,135878,135880],{"class":49,"line":1288},[47,135873,132426],{"class":85},[47,135875,51491],{"class":221},[47,135877,665],{"class":85},[47,135879,51546],{"class":217},[47,135881,1384],{"class":221},[47,135883,135884,135886,135888,135890,135892],{"class":49,"line":1294},[47,135885,132443],{"class":85},[47,135887,51491],{"class":221},[47,135889,919],{"class":85},[47,135891,51546],{"class":217},[47,135893,1384],{"class":221},[47,135895,135896],{"class":49,"line":1308},[47,135897,1659],{"class":221},[19,135899,135900],{},"加上上述代码会发现：",[1556,135902],{"style":126462,"src":135903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,135905,135906],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,135908,135909],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[38,135911,135912],{"className":126606,"code":135846,"language":126608,"meta":43,"style":43},[26,135913,135914,135918,135924,135934,135946,135958],{"__ignoreMap":43},[47,135915,135916],{"class":49,"line":50},[47,135917,135853],{"class":279},[47,135919,135920,135922],{"class":49,"line":92},[47,135921,130454],{"class":53},[47,135923,15665],{"class":221},[47,135925,135926,135928,135930,135932],{"class":49,"line":1273},[47,135927,132412],{"class":85},[47,135929,51491],{"class":221},[47,135931,54818],{"class":85},[47,135933,1384],{"class":221},[47,135935,135936,135938,135940,135942,135944],{"class":49,"line":1288},[47,135937,132426],{"class":85},[47,135939,51491],{"class":221},[47,135941,665],{"class":85},[47,135943,51546],{"class":217},[47,135945,1384],{"class":221},[47,135947,135948,135950,135952,135954,135956],{"class":49,"line":1294},[47,135949,132443],{"class":85},[47,135951,51491],{"class":221},[47,135953,919],{"class":85},[47,135955,51546],{"class":217},[47,135957,1384],{"class":221},[47,135959,135960],{"class":49,"line":1308},[47,135961,1659],{"class":221},[19,135963,135964],{},"解决方式2：",[19,135966,135967],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[38,135969,135971],{"className":126606,"code":135970,"language":126608,"meta":43,"style":43},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[26,135972,135973,135979,135989,136001,136013],{"__ignoreMap":43},[47,135974,135975,135977],{"class":49,"line":50},[47,135976,51665],{"class":51354},[47,135978,15665],{"class":221},[47,135980,135981,135983,135985,135987],{"class":49,"line":92},[47,135982,132412],{"class":85},[47,135984,51491],{"class":221},[47,135986,54818],{"class":85},[47,135988,1384],{"class":221},[47,135990,135991,135993,135995,135997,135999],{"class":49,"line":1273},[47,135992,132426],{"class":85},[47,135994,51491],{"class":221},[47,135996,665],{"class":85},[47,135998,51546],{"class":217},[47,136000,1384],{"class":221},[47,136002,136003,136005,136007,136009,136011],{"class":49,"line":1288},[47,136004,132443],{"class":85},[47,136006,51491],{"class":221},[47,136008,919],{"class":85},[47,136010,51546],{"class":217},[47,136012,1384],{"class":221},[47,136014,136015],{"class":49,"line":1294},[47,136016,1659],{"class":221},[187,136018,136020],{"id":136019},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,136022,135791],{},[1556,136024],{"style":126462,"src":136025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,136027,136028],{},"实现结构图：",[1556,136030],{"style":126462,"src":136031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,136033,136034],{},"巧妙运用浮动元素不会压住文字的特性",[19,136036,136037],{},"代码显示：",[38,136039,136041],{"className":126606,"code":136040,"language":126608,"meta":43,"style":43},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[26,136042,136043,136049,136059,136063,136068,136072,136078,136092],{"__ignoreMap":43},[47,136044,136045,136047],{"class":49,"line":50},[47,136046,130454],{"class":53},[47,136048,15665],{"class":221},[47,136050,136051,136053,136055,136057],{"class":49,"line":92},[47,136052,131086],{"class":85},[47,136054,51491],{"class":221},[47,136056,23829],{"class":85},[47,136058,1384],{"class":221},[47,136060,136061],{"class":49,"line":1273},[47,136062,1659],{"class":221},[47,136064,136065],{"class":49,"line":1288},[47,136066,136067],{"class":221},"```Css\n",[47,136069,136070],{"class":49,"line":1294},[47,136071,130449],{"class":279},[47,136073,136074,136076],{"class":49,"line":1308},[47,136075,130454],{"class":53},[47,136077,15665],{"class":221},[47,136079,136080,136082,136084,136086,136088,136090],{"class":49,"line":1314},[47,136081,70524],{"class":85},[47,136083,51491],{"class":221},[47,136085,411],{"class":85},[47,136087,51610],{"class":85},[47,136089,130469],{"class":221},[47,136091,130472],{"class":279},[47,136093,136094],{"class":49,"line":1405},[47,136095,1659],{"class":221},[19,136097,136098],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[38,136100,136103],{"className":136101,"code":136102,"language":5280},[5278],"\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",[26,136104,136102],{"__ignoreMap":43},[1556,136106],{"style":126462,"src":136107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,136109,136110],{},"最终展示结果：",[38,136112,136113],{"className":126606,"code":130442,"language":126608,"meta":43,"style":43},[26,136114,136115,136119,136125,136139],{"__ignoreMap":43},[47,136116,136117],{"class":49,"line":50},[47,136118,130449],{"class":279},[47,136120,136121,136123],{"class":49,"line":92},[47,136122,130454],{"class":53},[47,136124,15665],{"class":221},[47,136126,136127,136129,136131,136133,136135,136137],{"class":49,"line":1273},[47,136128,70524],{"class":85},[47,136130,51491],{"class":221},[47,136132,411],{"class":85},[47,136134,51610],{"class":85},[47,136136,130469],{"class":221},[47,136138,130472],{"class":279},[47,136140,136141],{"class":49,"line":1288},[47,136142,1659],{"class":221},[1556,136144],{"style":126462,"src":136145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,136147,136149],{"id":136148},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[187,136151,136153],{"id":136152},"_1341-原理","13.4.1 原理",[1556,136155],{"style":126462,"src":136156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[38,136158,136159],{"className":126606,"code":130442,"language":126608,"meta":43,"style":43},[26,136160,136161,136165,136171,136185],{"__ignoreMap":43},[47,136162,136163],{"class":49,"line":50},[47,136164,130449],{"class":279},[47,136166,136167,136169],{"class":49,"line":92},[47,136168,130454],{"class":53},[47,136170,15665],{"class":221},[47,136172,136173,136175,136177,136179,136181,136183],{"class":49,"line":1273},[47,136174,70524],{"class":85},[47,136176,51491],{"class":221},[47,136178,411],{"class":85},[47,136180,51610],{"class":85},[47,136182,130469],{"class":221},[47,136184,130472],{"class":279},[47,136186,136187],{"class":49,"line":1288},[47,136188,1659],{"class":221},[187,136190,136192],{"id":136191},"_1342-实例","13.4.2 实例",[1556,136194],{"style":126462,"src":136195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[38,136197,136198],{"className":126606,"code":131072,"language":126608,"meta":43,"style":43},[26,136199,136200,136206,136216,136220,136226,136236],{"__ignoreMap":43},[47,136201,136202,136204],{"class":49,"line":50},[47,136203,131079],{"class":53},[47,136205,15665],{"class":221},[47,136207,136208,136210,136212,136214],{"class":49,"line":92},[47,136209,131086],{"class":85},[47,136211,51491],{"class":221},[47,136213,23829],{"class":85},[47,136215,1384],{"class":221},[47,136217,136218],{"class":49,"line":1273},[47,136219,1659],{"class":221},[47,136221,136222,136224],{"class":49,"line":1288},[47,136223,131101],{"class":53},[47,136225,15665],{"class":221},[47,136227,136228,136230,136232,136234],{"class":49,"line":1294},[47,136229,131086],{"class":85},[47,136231,51491],{"class":221},[47,136233,72576],{"class":85},[47,136235,1384],{"class":221},[47,136237,136238],{"class":49,"line":1308},[47,136239,1659],{"class":221},[14,136241,136243],{"id":136242},"_135-css的初始化","13.5 css的初始化",[19,136245,136246],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,136248,136249],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,136251,136252],{},"每个网页都必须首先进行 CSS初始化。",[19,136254,136255],{},"这里我们以 京东CSS初始化代码为例。",[19,136257,136258],{},"在网页右键查看网页源代码",[19,136260,136261],{},"找到css的link引入语句",[19,136263,136264],{},"然后ctrl+f 输入body",[19,136266,77280],{},[1556,136268],{"style":126462,"src":136269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,136271,77303],{},[1556,136273],{"style":126462,"src":136274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,136276,136277],{},"③打开了网页上传压缩的代码",[1556,136279],{"style":126462,"src":136280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,136282,136283],{},"④从body前可以查看这个网页的初始化代码",[19,136285,136286],{},[369,136287,136288],{},"Unicode编码字体：",[19,136290,136291],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,136293,83261],{},[19,136295,136296],{},"黑体 \\9ED1\\4F53",[19,136298,136299],{},"宋体 \\5B8B\\4F53",[19,136301,136302],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[134,136304,136305],{},"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":43,"searchDepth":92,"depth":92,"links":136307},[136308,136309,136316,136320,136324],{"id":135105,"depth":92,"text":135106},{"id":135227,"depth":92,"text":135228,"children":136310},[136311,136312,136313,136314,136315],{"id":135231,"depth":1273,"text":135232},{"id":135384,"depth":1273,"text":135385},{"id":135503,"depth":1273,"text":135504},{"id":135645,"depth":1273,"text":135646},{"id":135703,"depth":1273,"text":135704},{"id":135764,"depth":92,"text":135765,"children":136317},[136318,136319],{"id":135787,"depth":1273,"text":135788},{"id":136019,"depth":1273,"text":136020},{"id":136148,"depth":92,"text":136149,"children":136321},[136322,136323],{"id":136152,"depth":1273,"text":136153},{"id":136191,"depth":1273,"text":136192},{"id":136242,"depth":92,"text":136243},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135097,"description":142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136331,"title":136332,"body":136333,"description":142,"extension":143,"meta":138019,"navigation":145,"path":138020,"seo":138021,"stem":138022,"__hash__":138023},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136334,"toc":138008},[136335,136338,136342,136346,136349,136356,136359,136362,136400,136403,136405,136419,136423,136432,136436,136441,136444,136447,136450,136485,136490,136493,136523,136526,136531,136534,136537,136567,136570,136624,136627,136631,136636,136648,136651,136655,136685,136688,136693,136696,136726,136729,136733,136750,136754,136758,136761,136794,136797,136801,136804,136807,136810,136813,136816,136927,136930,136933,136936,137038,137041,137045,137049,137053,137056,137096,137099,137101,137117,137121,137124,137129,137210,137213,137216,137342,137347,137350,137358,137361,137366,137451,137454,137458,137461,137464,137468,137488,137493,137577,137580,137585,137588,137591,137669,137672,137675,137678,137681,137684,137689,137692,137695,137767,137770,137775,137778,137875,137878,137884,137887,137890,137893,137896,137899,137902,137905,137908,137912,137917,137920,137953,137958,137961,138002,138005],[10,136336,136332],{"id":136337},"_14-html5与css3新特性",[14,136339,136341],{"id":136340},"_141-html5的新特性","14.1 HTML5的新特性",[187,136343,136345],{"id":136344},"_1411-基本标签","14.1.1 基本标签",[19,136347,136348],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,136350,136351,136352,136355],{},"这些新特性都有兼容性问题，基本是 ",[369,136353,136354],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,136357,136358],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,136360,136361],{},"现在使用的是新特性：",[106,136363,136364,136370,136376,136382,136388,136394],{},[109,136365,136366,136369],{},[26,136367,136368],{},"\u003Cheader>"," 头部标签",[109,136371,136372,136375],{},[26,136373,136374],{},"\u003Cnav>"," 导航标签",[109,136377,136378,136381],{},[26,136379,136380],{},"\u003Carticle>"," 内容标签",[109,136383,136384,136387],{},[26,136385,136386],{},"\u003Csection>"," 定义文档某个区域",[109,136389,136390,136393],{},[26,136391,136392],{},"\u003Caside>"," 侧边栏标签",[109,136395,136396,136399],{},[26,136397,136398],{},"\u003Cfooter>"," 尾部标签",[1556,136401],{"style":126462,"src":136402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,136404,251],{},[106,136406,136407,136410,136413,136416],{},[109,136408,136409],{},"这种语义化标准主要是针对搜索引擎的",[109,136411,136412],{},"这些标签页面中可以经常使用",[109,136414,136415],{},"在IE9中，需要把这些元素转换为块级元素",[109,136417,136418],{},"移动端更喜欢使用这些标签",[187,136420,136422],{"id":136421},"_1412-多媒体标签","14.1.2 多媒体标签",[19,136424,136425,136426,136428,136429,136431],{},"音频 ",[369,136427,28228],{}," 和视频 ",[369,136430,28237],{}," 两个标签",[22091,136433,136435],{"id":136434},"_14121-视频标签-video","14.1.2.1 视频标签- video",[171,136437,136438],{},[109,136439,136440],{},"支持格式：",[1556,136442],{"style":126462,"src":136443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,136445,136446],{},"尽量使用MP4，兼容性好",[19,136448,136449],{},"用MP4就可以",[38,136451,136453],{"className":127353,"code":136452,"language":127355,"meta":43,"style":43},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[26,136454,136455],{"__ignoreMap":43},[47,136456,136457,136459,136461,136463,136465,136468,136470,136473,136476,136479,136481,136483],{"class":49,"line":50},[47,136458,1129],{"class":221},[47,136460,28237],{"class":51354},[47,136462,55293],{"class":53},[47,136464,267],{"class":221},[47,136466,136467],{"class":81},"\"movie.mp4\"",[47,136469,92477],{"class":53},[47,136471,136472],{"class":53}," autoplay",[47,136474,136475],{"class":53}," muted",[47,136477,136478],{"class":53}," loop",[47,136480,55368],{"class":221},[47,136482,28237],{"class":51354},[47,136484,51361],{"class":221},[171,136486,136487],{"start":92},[109,136488,136489],{},"兼容写法",[19,136491,136492],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[38,136494,136495],{"className":127353,"code":136452,"language":127355,"meta":43,"style":43},[26,136496,136497],{"__ignoreMap":43},[47,136498,136499,136501,136503,136505,136507,136509,136511,136513,136515,136517,136519,136521],{"class":49,"line":50},[47,136500,1129],{"class":221},[47,136502,28237],{"class":51354},[47,136504,55293],{"class":53},[47,136506,267],{"class":221},[47,136508,136467],{"class":81},[47,136510,92477],{"class":53},[47,136512,136472],{"class":53},[47,136514,136475],{"class":53},[47,136516,136478],{"class":53},[47,136518,55368],{"class":221},[47,136520,28237],{"class":51354},[47,136522,51361],{"class":221},[19,136524,136525],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[171,136527,136528],{"start":1273},[109,136529,136530],{},"video常用属性",[1556,136532],{"style":126462,"src":136533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,136535,136536],{},"poster属性后面是跟的等待加载图片的地址",[38,136538,136539],{"className":127353,"code":134108,"language":127355,"meta":43,"style":43},[26,136540,136541],{"__ignoreMap":43},[47,136542,136543,136545,136547,136549,136551,136553,136555,136557,136559,136561,136563,136565],{"class":49,"line":50},[47,136544,1129],{"class":221},[47,136546,1556],{"class":51354},[47,136548,55293],{"class":53},[47,136550,267],{"class":221},[47,136552,134123],{"class":81},[47,136554,55301],{"class":53},[47,136556,267],{"class":221},[47,136558,134130],{"class":81},[47,136560,134133],{"class":53},[47,136562,267],{"class":221},[47,136564,134138],{"class":81},[47,136566,51361],{"class":221},[19,136568,136569],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[38,136571,136573],{"className":126606,"code":136572,"language":126608,"meta":43,"style":43},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[26,136574,136575,136580,136586,136610,136615,136620],{"__ignoreMap":43},[47,136576,136577],{"class":49,"line":50},[47,136578,136579],{"class":279},"\u002F* 2D 位移 *\u002F\n",[47,136581,136582,136584],{"class":49,"line":92},[47,136583,51665],{"class":51354},[47,136585,15665],{"class":221},[47,136587,136588,136591,136593,136596,136598,136600,136602,136604,136606,136608],{"class":49,"line":1273},[47,136589,136590],{"class":85},"  transform",[47,136592,51491],{"class":221},[47,136594,136595],{"class":85},"translate",[47,136597,222],{"class":221},[47,136599,530],{"class":85},[47,136601,51546],{"class":217},[47,136603,12528],{"class":221},[47,136605,875],{"class":85},[47,136607,51546],{"class":217},[47,136609,2812],{"class":221},[47,136611,136612],{"class":49,"line":1288},[47,136613,136614],{"class":279},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[47,136616,136617],{"class":49,"line":1294},[47,136618,136619],{"class":279},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[47,136621,136622],{"class":49,"line":1308},[47,136623,1659],{"class":221},[19,136625,136626],{},"muted:自动静音属性",[22091,136628,136630],{"id":136629},"_14122-音频标签audio","14.1.2.2 音频标签audio",[171,136632,136633],{},[109,136634,136635],{},"基本使用",[19,136637,136638,136639,136644,136645],{},"当前 ",[369,136640,136641],{},[26,136642,136643],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[369,136646,136647],{},"mp3格式",[1556,136649],{"style":126462,"src":136650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[171,136652,136653],{"start":92},[109,136654,136489],{},[38,136656,136657],{"className":127353,"code":136452,"language":127355,"meta":43,"style":43},[26,136658,136659],{"__ignoreMap":43},[47,136660,136661,136663,136665,136667,136669,136671,136673,136675,136677,136679,136681,136683],{"class":49,"line":50},[47,136662,1129],{"class":221},[47,136664,28237],{"class":51354},[47,136666,55293],{"class":53},[47,136668,267],{"class":221},[47,136670,136467],{"class":81},[47,136672,92477],{"class":53},[47,136674,136472],{"class":53},[47,136676,136475],{"class":53},[47,136678,136478],{"class":53},[47,136680,55368],{"class":221},[47,136682,28237],{"class":51354},[47,136684,51361],{"class":221},[19,136686,136687],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[171,136689,136690],{"start":1273},[109,136691,136692],{},"常用属性",[1556,136694],{"style":126462,"src":136695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[38,136697,136698],{"className":127353,"code":136452,"language":127355,"meta":43,"style":43},[26,136699,136700],{"__ignoreMap":43},[47,136701,136702,136704,136706,136708,136710,136712,136714,136716,136718,136720,136722,136724],{"class":49,"line":50},[47,136703,1129],{"class":221},[47,136705,28237],{"class":51354},[47,136707,55293],{"class":53},[47,136709,267],{"class":221},[47,136711,136467],{"class":81},[47,136713,92477],{"class":53},[47,136715,136472],{"class":53},[47,136717,136475],{"class":53},[47,136719,136478],{"class":53},[47,136721,55368],{"class":221},[47,136723,28237],{"class":51354},[47,136725,51361],{"class":221},[19,136727,136728],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22091,136730,136732],{"id":136731},"_14123-总结","14.1.2.3 总结",[106,136734,136735,136738,136741,136744,136747],{},[109,136736,136737],{},"音频标签和视频标签使用方式基本一致",[109,136739,136740],{},"浏览器支持情况不同",[109,136742,136743],{},"谷歌浏览器把音频和视频自动播放禁止了",[109,136745,136746],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[109,136748,136749],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[187,136751,136753],{"id":136752},"_1413-表单元素","14.1.3 表单元素",[22091,136755,136757],{"id":136756},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[1556,136759],{"style":126462,"src":136760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[38,136762,136764],{"className":127353,"code":136763,"language":127355,"meta":43,"style":43},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[26,136765,136766],{"__ignoreMap":43},[47,136767,136768,136770,136772,136774,136776,136778,136780,136782,136785,136787,136789,136792],{"class":49,"line":50},[47,136769,1129],{"class":221},[47,136771,53875],{"class":51354},[47,136773,53878],{"class":53},[47,136775,267],{"class":221},[47,136777,62753],{"class":81},[47,136779,15013],{"class":53},[47,136781,267],{"class":221},[47,136783,136784],{"class":81},"\"username\"",[47,136786,61074],{"class":53},[47,136788,267],{"class":221},[47,136790,136791],{"class":81},"\"请输入用户名\"",[47,136793,51361],{"class":221},[1556,136795],{"style":126462,"src":136796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22091,136798,136800],{"id":136799},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[1556,136802],{"style":126462,"src":136803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,136805,136806],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,136808,136809],{},"快捷操作：",[1556,136811],{"style":126462,"src":136812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,136814,136815],{},"例子1：",[38,136817,136819],{"className":127353,"code":136818,"language":127355,"meta":43,"style":43},"\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",[26,136820,136821,136844,136871,136900,136919],{"__ignoreMap":43},[47,136822,136823,136825,136827,136829,136831,136834,136837,136839,136842],{"class":49,"line":50},[47,136824,1129],{"class":221},[47,136826,66679],{"class":51354},[47,136828,66682],{"class":53},[47,136830,267],{"class":221},[47,136832,136833],{"class":81},"\"\u002Fsubmit\"",[47,136835,136836],{"class":53}," method",[47,136838,267],{"class":221},[47,136840,136841],{"class":81},"\"post\"",[47,136843,51361],{"class":221},[47,136845,136846,136848,136850,136852,136854,136856,136858,136860,136862,136864,136866,136869],{"class":49,"line":92},[47,136847,52198],{"class":221},[47,136849,53875],{"class":51354},[47,136851,53878],{"class":53},[47,136853,267],{"class":221},[47,136855,62753],{"class":81},[47,136857,15013],{"class":53},[47,136859,267],{"class":221},[47,136861,136784],{"class":81},[47,136863,61074],{"class":53},[47,136865,267],{"class":221},[47,136867,136868],{"class":81},"\"用户名\"",[47,136870,51361],{"class":221},[47,136872,136873,136875,136877,136879,136881,136884,136886,136888,136891,136893,136895,136898],{"class":49,"line":1273},[47,136874,52198],{"class":221},[47,136876,53875],{"class":51354},[47,136878,53878],{"class":53},[47,136880,267],{"class":221},[47,136882,136883],{"class":81},"\"password\"",[47,136885,15013],{"class":53},[47,136887,267],{"class":221},[47,136889,136890],{"class":81},"\"pwd\"",[47,136892,61074],{"class":53},[47,136894,267],{"class":221},[47,136896,136897],{"class":81},"\"密码\"",[47,136899,51361],{"class":221},[47,136901,136902,136904,136906,136908,136910,136912,136915,136917],{"class":49,"line":1288},[47,136903,52198],{"class":221},[47,136905,53941],{"class":51354},[47,136907,53878],{"class":53},[47,136909,267],{"class":221},[47,136911,66702],{"class":81},[47,136913,136914],{"class":221},">提交\u003C\u002F",[47,136916,53941],{"class":51354},[47,136918,51361],{"class":221},[47,136920,136921,136923,136925],{"class":49,"line":1294},[47,136922,51839],{"class":221},[47,136924,66679],{"class":51354},[47,136926,51361],{"class":221},[1556,136928],{"style":126462,"src":136929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,136931,136932],{},"value是表单域的内容",[19,136934,136935],{},"例子2：",[38,136937,136938],{"className":127353,"code":136818,"language":127355,"meta":43,"style":43},[26,136939,136940,136960,136986,137012,137030],{"__ignoreMap":43},[47,136941,136942,136944,136946,136948,136950,136952,136954,136956,136958],{"class":49,"line":50},[47,136943,1129],{"class":221},[47,136945,66679],{"class":51354},[47,136947,66682],{"class":53},[47,136949,267],{"class":221},[47,136951,136833],{"class":81},[47,136953,136836],{"class":53},[47,136955,267],{"class":221},[47,136957,136841],{"class":81},[47,136959,51361],{"class":221},[47,136961,136962,136964,136966,136968,136970,136972,136974,136976,136978,136980,136982,136984],{"class":49,"line":92},[47,136963,52198],{"class":221},[47,136965,53875],{"class":51354},[47,136967,53878],{"class":53},[47,136969,267],{"class":221},[47,136971,62753],{"class":81},[47,136973,15013],{"class":53},[47,136975,267],{"class":221},[47,136977,136784],{"class":81},[47,136979,61074],{"class":53},[47,136981,267],{"class":221},[47,136983,136868],{"class":81},[47,136985,51361],{"class":221},[47,136987,136988,136990,136992,136994,136996,136998,137000,137002,137004,137006,137008,137010],{"class":49,"line":1273},[47,136989,52198],{"class":221},[47,136991,53875],{"class":51354},[47,136993,53878],{"class":53},[47,136995,267],{"class":221},[47,136997,136883],{"class":81},[47,136999,15013],{"class":53},[47,137001,267],{"class":221},[47,137003,136890],{"class":81},[47,137005,61074],{"class":53},[47,137007,267],{"class":221},[47,137009,136897],{"class":81},[47,137011,51361],{"class":221},[47,137013,137014,137016,137018,137020,137022,137024,137026,137028],{"class":49,"line":1288},[47,137015,52198],{"class":221},[47,137017,53941],{"class":51354},[47,137019,53878],{"class":53},[47,137021,267],{"class":221},[47,137023,66702],{"class":81},[47,137025,136914],{"class":221},[47,137027,53941],{"class":51354},[47,137029,51361],{"class":221},[47,137031,137032,137034,137036],{"class":49,"line":1294},[47,137033,51839],{"class":221},[47,137035,66679],{"class":51354},[47,137037,51361],{"class":221},[1556,137039],{"style":126462,"src":137040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,137042,137044],{"id":137043},"_142-css新特性","14.2 CSS新特性",[187,137046,137048],{"id":137047},"_1421-新增选择器","14.2.1 新增选择器",[22091,137050,137052],{"id":137051},"_14211-属性选择器","14.2.1.1 属性选择器",[1556,137054],{"style":126462,"src":137055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[38,137057,137059],{"className":126606,"code":137058,"language":126608,"meta":43,"style":43},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[26,137060,137061,137076,137092],{"__ignoreMap":43},[47,137062,137063,137065,137067,137069,137071,137073],{"class":49,"line":50},[47,137064,53875],{"class":51354},[47,137066,1109],{"class":221},[47,137068,103161],{"class":53},[47,137070,267],{"class":217},[47,137072,62753],{"class":81},[47,137074,137075],{"class":221},"] {\n",[47,137077,137078,137080,137082,137084,137086,137088,137090],{"class":49,"line":92},[47,137079,70950],{"class":85},[47,137081,51491],{"class":221},[47,137083,436],{"class":85},[47,137085,51546],{"class":217},[47,137087,51575],{"class":85},[47,137089,130186],{"class":85},[47,137091,1384],{"class":221},[47,137093,137094],{"class":49,"line":1273},[47,137095,1659],{"class":221},[1556,137097],{"style":126462,"src":137098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,137100,251],{},[106,137102,137103,137106,137109,137112],{},[109,137104,137105],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[109,137107,137108],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[109,137110,137111],{},"属性选择器也可以选择出来自定义的属性",[109,137113,137114,137116],{},[369,137115,9118],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22091,137118,137120],{"id":137119},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[1556,137122],{"style":126462,"src":137123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[171,137125,137126],{},[109,137127,137128],{},"fist-child",[38,137130,137132],{"className":126606,"code":137131,"language":126608,"meta":43,"style":43},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[26,137133,137134,137139,137154,137174,137192],{"__ignoreMap":43},[47,137135,137136],{"class":49,"line":50},[47,137137,137138],{"class":279},"\u002F* 属性选择器 *\u002F\n",[47,137140,137141,137143,137145,137147,137149,137151],{"class":49,"line":92},[47,137142,53875],{"class":51354},[47,137144,1109],{"class":221},[47,137146,103161],{"class":53},[47,137148,267],{"class":217},[47,137150,62753],{"class":81},[47,137152,137153],{"class":221},"] { }\n",[47,137155,137156,137158,137160,137162,137165,137168,137171],{"class":49,"line":1273},[47,137157,53875],{"class":51354},[47,137159,1109],{"class":221},[47,137161,14787],{"class":53},[47,137163,137164],{"class":217},"^=",[47,137166,137167],{"class":81},"\"icon\"",[47,137169,137170],{"class":221},"] { }  ",[47,137172,137173],{"class":279},"\u002F* 以 icon 开头 *\u002F\n",[47,137175,137176,137178,137180,137182,137185,137187,137189],{"class":49,"line":1288},[47,137177,53875],{"class":51354},[47,137179,1109],{"class":221},[47,137181,14787],{"class":53},[47,137183,137184],{"class":217},"$=",[47,137186,137167],{"class":81},[47,137188,137170],{"class":221},[47,137190,137191],{"class":279},"\u002F* 以 icon 结尾 *\u002F\n",[47,137193,137194,137196,137198,137200,137203,137205,137207],{"class":49,"line":1294},[47,137195,53875],{"class":51354},[47,137197,1109],{"class":221},[47,137199,14787],{"class":53},[47,137201,137202],{"class":217},"*=",[47,137204,137167],{"class":81},[47,137206,137170],{"class":221},[47,137208,137209],{"class":279},"\u002F* 包含 icon *\u002F\n",[19,137211,137212],{},"ul的第一个儿子文本为红色",[19,137214,137215],{},"一定要在冒号前加空格，不然就是选中所有的了",[38,137217,137219],{"className":126606,"code":137218,"language":126608,"meta":43,"style":43},".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",[26,137220,137221,137227,137237,137241,137245,137250,137263,137276,137292,137309,137326],{"__ignoreMap":43},[47,137222,137223,137225],{"class":49,"line":50},[47,137224,126897],{"class":53},[47,137226,15665],{"class":221},[47,137228,137229,137231,137233,137235],{"class":49,"line":92},[47,137230,70959],{"class":85},[47,137232,51491],{"class":221},[47,137234,57475],{"class":85},[47,137236,1384],{"class":221},[47,137238,137239],{"class":49,"line":1273},[47,137240,1659],{"class":221},[47,137242,137243],{"class":49,"line":1288},[47,137244,136067],{"class":221},[47,137246,137247],{"class":49,"line":1294},[47,137248,137249],{"class":279},"\u002F* 结构伪类选择器 *\u002F\n",[47,137251,137252,137254,137257,137260],{"class":49,"line":1308},[47,137253,109],{"class":51354},[47,137255,137256],{"class":53},":first-child",[47,137258,137259],{"class":221}," { }           ",[47,137261,137262],{"class":279},"\u002F* 第一个 *\u002F\n",[47,137264,137265,137267,137270,137273],{"class":49,"line":1314},[47,137266,109],{"class":51354},[47,137268,137269],{"class":53},":last-child",[47,137271,137272],{"class":221}," { }            ",[47,137274,137275],{"class":279},"\u002F* 最后一个 *\u002F\n",[47,137277,137278,137280,137282,137284,137286,137289],{"class":49,"line":1405},[47,137279,109],{"class":51354},[47,137281,129520],{"class":53},[47,137283,222],{"class":221},[47,137285,298],{"class":85},[47,137287,137288],{"class":221},") { }          ",[47,137290,137291],{"class":279},"\u002F* 第2个 *\u002F\n",[47,137293,137294,137296,137298,137300,137303,137306],{"class":49,"line":1411},[47,137295,109],{"class":51354},[47,137297,129520],{"class":53},[47,137299,222],{"class":221},[47,137301,137302],{"class":85},"2n",[47,137304,137305],{"class":221},") { }         ",[47,137307,137308],{"class":279},"\u002F* 偶数 *\u002F\n",[47,137310,137311,137313,137315,137317,137320,137323],{"class":49,"line":1423},[47,137312,109],{"class":51354},[47,137314,129520],{"class":53},[47,137316,222],{"class":221},[47,137318,137319],{"class":85},"2n+1",[47,137321,137322],{"class":221},") { }       ",[47,137324,137325],{"class":279},"\u002F* 奇数 *\u002F\n",[47,137327,137328,137330,137332,137334,137337,137339],{"class":49,"line":1706},[47,137329,109],{"class":51354},[47,137331,129520],{"class":53},[47,137333,222],{"class":221},[47,137335,137336],{"class":85},"-n+3",[47,137338,137322],{"class":221},[47,137340,137341],{"class":279},"\u002F* 前3个 *\u002F\n",[51665,137343,137346],{"className":137344},[137345],"example","\n  示例内容\n",[19,137348,137349],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[106,137351,137352],{},[109,137353,137354,137357],{},[26,137355,137356],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,137359,137360],{},"也就是说它选择的是熊大",[171,137362,137363],{"start":1308},[109,137364,137365],{},"权重",[38,137367,137369],{"className":126606,"code":137368,"language":126608,"meta":43,"style":43},"\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",[26,137370,137371,137375,137385,137395,137409,137423,137437],{"__ignoreMap":43},[47,137372,137373],{"class":49,"line":50},[47,137374,137249],{"class":279},[47,137376,137377,137379,137381,137383],{"class":49,"line":92},[47,137378,109],{"class":51354},[47,137380,137256],{"class":53},[47,137382,137259],{"class":221},[47,137384,137262],{"class":279},[47,137386,137387,137389,137391,137393],{"class":49,"line":1273},[47,137388,109],{"class":51354},[47,137390,137269],{"class":53},[47,137392,137272],{"class":221},[47,137394,137275],{"class":279},[47,137396,137397,137399,137401,137403,137405,137407],{"class":49,"line":1288},[47,137398,109],{"class":51354},[47,137400,129520],{"class":53},[47,137402,222],{"class":221},[47,137404,298],{"class":85},[47,137406,137288],{"class":221},[47,137408,137291],{"class":279},[47,137410,137411,137413,137415,137417,137419,137421],{"class":49,"line":1294},[47,137412,109],{"class":51354},[47,137414,129520],{"class":53},[47,137416,222],{"class":221},[47,137418,137302],{"class":85},[47,137420,137305],{"class":221},[47,137422,137308],{"class":279},[47,137424,137425,137427,137429,137431,137433,137435],{"class":49,"line":1308},[47,137426,109],{"class":51354},[47,137428,129520],{"class":53},[47,137430,222],{"class":221},[47,137432,137319],{"class":85},[47,137434,137322],{"class":221},[47,137436,137325],{"class":279},[47,137438,137439,137441,137443,137445,137447,137449],{"class":49,"line":1314},[47,137440,109],{"class":51354},[47,137442,129520],{"class":53},[47,137444,222],{"class":221},[47,137446,137336],{"class":85},[47,137448,137322],{"class":221},[47,137450,137341],{"class":279},[19,137452,137453],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22091,137455,137457],{"id":137456},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,137459,137460],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[1556,137462],{"style":126462,"src":137463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[171,137465,137466],{},[109,137467,251],{},[106,137469,137470,137473,137476,137479,137482,137485],{},[109,137471,137472],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[109,137474,137475],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[109,137477,137478],{},"语法： element::before {}",[109,137480,137481],{},"before 和 after 必须有 content 属性",[109,137483,137484],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[109,137486,137487],{},"伪元素选择器和标签选择器一样，权重为 1",[171,137489,137490],{"start":92},[109,137491,137492],{},"实例",[38,137494,137495],{"className":126606,"code":137368,"language":126608,"meta":43,"style":43},[26,137496,137497,137501,137511,137521,137535,137549,137563],{"__ignoreMap":43},[47,137498,137499],{"class":49,"line":50},[47,137500,137249],{"class":279},[47,137502,137503,137505,137507,137509],{"class":49,"line":92},[47,137504,109],{"class":51354},[47,137506,137256],{"class":53},[47,137508,137259],{"class":221},[47,137510,137262],{"class":279},[47,137512,137513,137515,137517,137519],{"class":49,"line":1273},[47,137514,109],{"class":51354},[47,137516,137269],{"class":53},[47,137518,137272],{"class":221},[47,137520,137275],{"class":279},[47,137522,137523,137525,137527,137529,137531,137533],{"class":49,"line":1288},[47,137524,109],{"class":51354},[47,137526,129520],{"class":53},[47,137528,222],{"class":221},[47,137530,298],{"class":85},[47,137532,137288],{"class":221},[47,137534,137291],{"class":279},[47,137536,137537,137539,137541,137543,137545,137547],{"class":49,"line":1294},[47,137538,109],{"class":51354},[47,137540,129520],{"class":53},[47,137542,222],{"class":221},[47,137544,137302],{"class":85},[47,137546,137305],{"class":221},[47,137548,137308],{"class":279},[47,137550,137551,137553,137555,137557,137559,137561],{"class":49,"line":1308},[47,137552,109],{"class":51354},[47,137554,129520],{"class":53},[47,137556,222],{"class":221},[47,137558,137319],{"class":85},[47,137560,137322],{"class":221},[47,137562,137325],{"class":279},[47,137564,137565,137567,137569,137571,137573,137575],{"class":49,"line":1314},[47,137566,109],{"class":51354},[47,137568,129520],{"class":53},[47,137570,222],{"class":221},[47,137572,137336],{"class":85},[47,137574,137322],{"class":221},[47,137576,137341],{"class":279},[1556,137578],{"style":126462,"src":137579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[171,137581,137582],{"start":1273},[109,137583,137584],{},"使用场景1",[1556,137586],{"style":126462,"src":137587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,137589,137590],{},"不需要再加盒子来整红色那部分了",[38,137592,137594],{"className":126606,"code":137593,"language":126608,"meta":43,"style":43},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[26,137595,137596,137601,137610,137621,137631,137635,137644,137655,137665],{"__ignoreMap":43},[47,137597,137598],{"class":49,"line":50},[47,137599,137600],{"class":279},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[47,137602,137603,137605,137608],{"class":49,"line":92},[47,137604,51665],{"class":51354},[47,137606,137607],{"class":53},"::before",[47,137609,15665],{"class":221},[47,137611,137612,137615,137617,137619],{"class":49,"line":1273},[47,137613,137614],{"class":85},"  content",[47,137616,51491],{"class":221},[47,137618,7745],{"class":81},[47,137620,1384],{"class":221},[47,137622,137623,137625,137627,137629],{"class":49,"line":1288},[47,137624,128222],{"class":85},[47,137626,51491],{"class":221},[47,137628,60923],{"class":85},[47,137630,1384],{"class":221},[47,137632,137633],{"class":49,"line":1294},[47,137634,1659],{"class":221},[47,137636,137637,137639,137642],{"class":49,"line":1308},[47,137638,51665],{"class":51354},[47,137640,137641],{"class":53},"::after",[47,137643,15665],{"class":221},[47,137645,137646,137648,137650,137653],{"class":49,"line":1314},[47,137647,137614],{"class":85},[47,137649,51491],{"class":221},[47,137651,137652],{"class":81},"\"→\"",[47,137654,1384],{"class":221},[47,137656,137657,137659,137661,137663],{"class":49,"line":1405},[47,137658,70959],{"class":85},[47,137660,51491],{"class":221},[47,137662,62124],{"class":85},[47,137664,1384],{"class":221},[47,137666,137667],{"class":49,"line":1411},[47,137668,1659],{"class":221},[1556,137670],{"style":126462,"src":137671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,137673,137674],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[1556,137676],{"style":126462,"src":137677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,137679,137680],{},"但是在引用时需要先转义一下",[19,137682,137683],{},"content='\\e930'",[171,137685,137686],{"start":1288},[109,137687,137688],{},"使用场景2",[19,137690,137691],{},"仿土豆效果",[19,137693,137694],{},"通过使用伪元素选择器可以减少body中盒子的数量",[38,137696,137697],{"className":126606,"code":137593,"language":126608,"meta":43,"style":43},[26,137698,137699,137703,137711,137721,137731,137735,137743,137753,137763],{"__ignoreMap":43},[47,137700,137701],{"class":49,"line":50},[47,137702,137600],{"class":279},[47,137704,137705,137707,137709],{"class":49,"line":92},[47,137706,51665],{"class":51354},[47,137708,137607],{"class":53},[47,137710,15665],{"class":221},[47,137712,137713,137715,137717,137719],{"class":49,"line":1273},[47,137714,137614],{"class":85},[47,137716,51491],{"class":221},[47,137718,7745],{"class":81},[47,137720,1384],{"class":221},[47,137722,137723,137725,137727,137729],{"class":49,"line":1288},[47,137724,128222],{"class":85},[47,137726,51491],{"class":221},[47,137728,60923],{"class":85},[47,137730,1384],{"class":221},[47,137732,137733],{"class":49,"line":1294},[47,137734,1659],{"class":221},[47,137736,137737,137739,137741],{"class":49,"line":1308},[47,137738,51665],{"class":51354},[47,137740,137641],{"class":53},[47,137742,15665],{"class":221},[47,137744,137745,137747,137749,137751],{"class":49,"line":1314},[47,137746,137614],{"class":85},[47,137748,51491],{"class":221},[47,137750,137652],{"class":81},[47,137752,1384],{"class":221},[47,137754,137755,137757,137759,137761],{"class":49,"line":1405},[47,137756,70959],{"class":85},[47,137758,51491],{"class":221},[47,137760,62124],{"class":85},[47,137762,1384],{"class":221},[47,137764,137765],{"class":49,"line":1411},[47,137766,1659],{"class":221},[1556,137768],{"style":126462,"src":137769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[171,137771,137772],{"start":1294},[109,137773,137774],{},"使用场景3",[19,137776,137777],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[38,137779,137781],{"className":126606,"code":137780,"language":126608,"meta":43,"style":43},".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",[26,137782,137783,137789,137799,137803,137807,137811,137819,137829,137839,137843,137851,137861,137871],{"__ignoreMap":43},[47,137784,137785,137787],{"class":49,"line":50},[47,137786,130454],{"class":53},[47,137788,15665],{"class":221},[47,137790,137791,137793,137795,137797],{"class":49,"line":92},[47,137792,131086],{"class":85},[47,137794,51491],{"class":221},[47,137796,23829],{"class":85},[47,137798,1384],{"class":221},[47,137800,137801],{"class":49,"line":1273},[47,137802,1659],{"class":221},[47,137804,137805],{"class":49,"line":1288},[47,137806,136067],{"class":221},[47,137808,137809],{"class":49,"line":1294},[47,137810,137600],{"class":279},[47,137812,137813,137815,137817],{"class":49,"line":1308},[47,137814,51665],{"class":51354},[47,137816,137607],{"class":53},[47,137818,15665],{"class":221},[47,137820,137821,137823,137825,137827],{"class":49,"line":1314},[47,137822,137614],{"class":85},[47,137824,51491],{"class":221},[47,137826,7745],{"class":81},[47,137828,1384],{"class":221},[47,137830,137831,137833,137835,137837],{"class":49,"line":1405},[47,137832,128222],{"class":85},[47,137834,51491],{"class":221},[47,137836,60923],{"class":85},[47,137838,1384],{"class":221},[47,137840,137841],{"class":49,"line":1411},[47,137842,1659],{"class":221},[47,137844,137845,137847,137849],{"class":49,"line":1423},[47,137846,51665],{"class":51354},[47,137848,137641],{"class":53},[47,137850,15665],{"class":221},[47,137852,137853,137855,137857,137859],{"class":49,"line":1706},[47,137854,137614],{"class":85},[47,137856,51491],{"class":221},[47,137858,137652],{"class":81},[47,137860,1384],{"class":221},[47,137862,137863,137865,137867,137869],{"class":49,"line":1711},[47,137864,70959],{"class":85},[47,137866,51491],{"class":221},[47,137868,62124],{"class":85},[47,137870,1384],{"class":221},[47,137872,137873],{"class":49,"line":1717},[47,137874,1659],{"class":221},[19,137876,137877],{},"div {\nmargin: 0 auto;\n}",[38,137879,137882],{"className":137880,"code":137881,"language":5280},[5278],"\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",[26,137883,137881],{"__ignoreMap":43},[19,137885,137886],{},"如果想让多个元素都发生变化",[19,137888,137889],{},"不能如下操作：",[19,137891,137892],{},"transition: width 2s ease 0.5s;",[19,137894,137895],{},"transition: height 2s ease 0.5s;不对！！！",[19,137897,137898],{},"上方会样式冲突，导致不显示任何过渡效果",[19,137900,137901],{},"使用如下：加逗号隔开",[19,137903,137904],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,137906,137907],{},"transition all 2s ease;",[187,137909,137911],{"id":137910},"_1426-过渡练习","14.2.6 过渡练习",[171,137913,137914],{},[109,137915,137916],{},"进度条",[1556,137918],{"style":126462,"src":137919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[38,137921,137923],{"className":126606,"code":137922,"language":126608,"meta":43,"style":43},"div {\n  transition: all 0.3s ease;\n}\n",[26,137924,137925,137931,137949],{"__ignoreMap":43},[47,137926,137927,137929],{"class":49,"line":50},[47,137928,51665],{"class":51354},[47,137930,15665],{"class":221},[47,137932,137933,137936,137938,137940,137943,137945,137947],{"class":49,"line":92},[47,137934,137935],{"class":85},"  transition",[47,137937,51491],{"class":221},[47,137939,28175],{"class":85},[47,137941,137942],{"class":85}," 0.3",[47,137944,914],{"class":217},[47,137946,78734],{"class":85},[47,137948,1384],{"class":221},[47,137950,137951],{"class":49,"line":1273},[47,137952,1659],{"class":221},[171,137954,137955],{"start":92},[109,137956,137957],{},"小米logo",[19,137959,137960],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[38,137962,137964],{"className":126606,"code":137963,"language":126608,"meta":43,"style":43},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[26,137965,137966,137971,137977,137993,137998],{"__ignoreMap":43},[47,137967,137968],{"class":49,"line":50},[47,137969,137970],{"class":279},"\u002F* CSS3 过渡 *\u002F\n",[47,137972,137973,137975],{"class":49,"line":92},[47,137974,51665],{"class":51354},[47,137976,15665],{"class":221},[47,137978,137979,137981,137983,137985,137987,137989,137991],{"class":49,"line":1273},[47,137980,137935],{"class":85},[47,137982,51491],{"class":221},[47,137984,28175],{"class":85},[47,137986,137942],{"class":85},[47,137988,914],{"class":217},[47,137990,78734],{"class":85},[47,137992,1384],{"class":221},[47,137994,137995],{"class":49,"line":1288},[47,137996,137997],{"class":279},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[47,137999,138000],{"class":49,"line":1294},[47,138001,1659],{"class":221},[19,138003,138004],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[134,138006,138007],{},"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":43,"searchDepth":92,"depth":92,"links":138009},[138010,138015],{"id":136340,"depth":92,"text":136341,"children":138011},[138012,138013,138014],{"id":136344,"depth":1273,"text":136345},{"id":136421,"depth":1273,"text":136422},{"id":136752,"depth":1273,"text":136753},{"id":137043,"depth":92,"text":137044,"children":138016},[138017,138018],{"id":137047,"depth":1273,"text":137048},{"id":137910,"depth":1273,"text":137911},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136332,"description":142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138025,"title":138026,"body":138027,"description":142,"extension":143,"meta":139771,"navigation":145,"path":139772,"seo":139773,"stem":139774,"__hash__":139775},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138028,"toc":139752},[138029,138032,138036,138039,138045,138051,138055,138057,138060,138063,138066,138069,138072,138075,138078,138082,138086,138089,138092,138095,138099,138102,138105,138110,138113,138116,138119,138123,138126,138135,138138,138141,138145,138148,138151,138156,138163,138177,138185,138192,138197,138200,138203,138206,138213,138217,138223,138229,138232,138235,138240,138246,138248,138256,138261,138264,138270,138272,138277,138282,138285,138287,138292,138295,138300,138305,138339,138343,138347,138350,138354,138357,138443,138446,138483,138486,138522,138526,138531,138544,138598,138600,138628,138630,138658,138664,138678,138680,138724,138726,138770,138773,138780,138791,138793,138820,138822,138848,138855,138871,138873,138967,138969,139063,139070,139073,139078,139084,139158,139161,139163,139199,139201,139237,139240,139247,139266,139269,139272,139274,139299,139301,139325,139328,139331,139361,139365,139368,139431,139433,139499,139501,139565,139568,139600,139602,139628,139630,139656,139659,139690,139692,139718,139720,139746,139749],[10,138030,138026],{"id":138031},"_15-品优购项目上篇-搭建与公共模块",[14,138033,138035],{"id":138034},"_151-项目规划","15.1 项目规划",[1556,138037],{"style":126462,"src":138038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,138040,138041,138044],{},[369,138042,138043],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,138046,138047,138050],{},[369,138048,138049],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,138052,138054],{"id":138053},"_152-项目介绍","15.2 项目介绍",[19,138056,138043],{},[1556,138058],{"style":126462,"src":138059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,138061,138062],{},"主页：",[1556,138064],{"style":126462,"src":138065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,138067,138068],{},"列表页：",[1556,138070],{"style":126462,"src":138071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,138073,138074],{},"注册页：",[1556,138076],{"style":126462,"src":138077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,138079,138081],{"id":138080},"_153-项目搭建工作","15.3 项目搭建工作",[187,138083,138085],{"id":138084},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[1556,138087],{"style":126462,"src":138088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,138090,138091],{},"经常更换的图片要放到upload文件夹中",[19,138093,138094],{},"不经常换的放到images文件夹中",[187,138096,138098],{"id":138097},"_1532-创建文件如下","15.3.2 创建文件如下",[1556,138100],{"style":126462,"src":138101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[1556,138103],{"style":126462,"src":138104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,138106,138107],{},[369,138108,138109],{},"初始化样式：",[19,138111,138112],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,138114,138115],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,138117,138118],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[187,138120,138122],{"id":138121},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,138124,138125],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,138127,138128,138129,138134],{},"这里最典型的应用就是 ",[369,138130,138131],{},[26,138132,138133],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[1556,138136],{"style":126462,"src":138137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,138139,138140],{},"通过link方法来引入",[187,138142,138144],{"id":138143},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[1556,138146],{"style":126462,"src":138147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,138149,138150],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[171,138152,138153],{},[109,138154,138155],{},"制作favicon图标",[19,138157,138158,138159,138162],{},"①把品优购图标切成 ",[26,138160,138161],{},"png"," 图片",[19,138164,138165,138166,138168,138169,138172,138173],{},"②把 ",[26,138167,138161],{}," 图片转换为 ",[26,138170,138171],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[457,138174,138175],{"href":138175,"rel":138176},"http:\u002F\u002Fwww.bitbug.net\u002F",[23956],[171,138178,138179,138182],{"start":92},[109,138180,138181],{},"favicon图标放到网站根目录下",[109,138183,138184],{},"HTML页面引入favicon",[19,138186,138187,138188,138191],{},"在html 页面里面的 ",[26,138189,138190],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,138193,138194],{},[26,138195,138196],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,138198,138199],{},"复制这行代码或者在生成这个的网站进行复制",[1556,138201],{"style":126462,"src":138202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,138204,138205],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,138207,138208,138209],{},"例如:",[457,138210,138211],{"href":138211,"rel":138212},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[23956],[187,138214,138216],{"id":138215},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,138218,138219,138222],{},[369,138220,138221],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,138224,138225,138228],{},[369,138226,138227],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,138230,138231],{},"页面必须有三个标签用来符合 SEO 优化",[1556,138233],{"style":126462,"src":138234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[171,138236,138237],{},[109,138238,138239],{},"title网站标题",[19,138241,138242,138245],{},[369,138243,138244],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,138247,68844],{},[106,138249,138250,138253],{},[109,138251,138252],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[109,138254,138255],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[171,138257,138258],{"start":92},[109,138259,138260],{},"description网站描述",[19,138262,138263],{},"简要说明我们网站主要是做什么的",[19,138265,138266,138269],{},[369,138267,138268],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,138271,68844],{},[19,138273,138274],{},[26,138275,138276],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[171,138278,138279],{"start":1273},[109,138280,138281],{},"keywords关键词",[19,138283,138284],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,138286,68844],{},[19,138288,138289],{},[26,138290,138291],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,138293,138294],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,138296,138297],{},[369,138298,138299],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[171,138301,138302],{"start":1288},[109,138303,138304],{},"代码总结",[38,138306,138307],{"className":127353,"code":130710,"language":127355,"meta":43,"style":43},[26,138308,138309,138313,138327,138331],{"__ignoreMap":43},[47,138310,138311],{"class":49,"line":50},[47,138312,130717],{"class":279},[47,138314,138315,138317,138319,138321,138323,138325],{"class":49,"line":92},[47,138316,1129],{"class":221},[47,138318,51665],{"class":51354},[47,138320,53540],{"class":53},[47,138322,267],{"class":221},[47,138324,130730],{"class":81},[47,138326,51361],{"class":221},[47,138328,138329],{"class":49,"line":1273},[47,138330,130737],{"class":221},[47,138332,138333,138335,138337],{"class":49,"line":1288},[47,138334,51839],{"class":221},[47,138336,51665],{"class":51354},[47,138338,51361],{"class":221},[14,138340,138342],{"id":138341},"_154-项目公共部分制作","15.4 项目公共部分制作",[187,138344,138346],{"id":138345},"_1541-常用模块类命名","15.4.1 常用模块类命名",[1556,138348],{"style":126462,"src":138349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[187,138351,138353],{"id":138352},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,138355,138356],{},"布局思路：",[106,138358,138359,138362,138365,138387,138420],{},[109,138360,138361],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[109,138363,138364],{},"里面包含版心的盒子",[109,138366,138367,138368],{},"版心盒子里面包含 1 号左侧盒子左浮动",[106,138369,138370,138378,138384],{},[109,138371,138372,138373,21593,138375,138377],{},"1 号盒子 里面包含一个",[26,138374,106],{},[26,138376,106],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[109,138379,138380,138381,138383],{},"里面的内容是水平排列，所以需要给",[26,138382,109],{},"设置浮动",[109,138385,138386],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[109,138388,138389,138390],{},"版心盒子里面包含 2 号右侧盒子右浮动",[106,138391,138392,138406,138411],{},[109,138393,138394,138395,21593,138397,138399,138400,138402,138403,138405],{},"2 号盒子 里面包含一个",[26,138396,106],{},[26,138398,106],{},"包裹",[26,138401,109],{},"，中间的",[26,138404,1140],{},"可以用样式去设置，也可以用字符 |",[109,138407,138408,138409,138383],{},"里面内容水平排列，给",[26,138410,109],{},[109,138412,138413,138414,138416,138417,138419],{},"找到里面所有偶数的 ",[26,138415,109],{}," 设置样式（偶数的 ",[26,138418,109],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[109,138421,138422,138423],{},"需要用到字体图标",[106,138424,138425,138431,138434,138437,138440],{},[109,138426,138427,138428],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[26,138429,138430],{},"arrow-icon",[109,138432,138433],{},"先要引入字体图片的资源",[109,138435,138436],{},"在样式里面利用 font-face 来进行声明",[109,138438,138439],{},"在伪元素的 content属性设置 图标的编码",[109,138441,138442],{},"给伪元素设置font-family属性",[19,138444,138445],{},"结构实例代码：",[38,138447,138449],{"className":126606,"code":138448,"language":126608,"meta":43,"style":43},"div::before {\n  content: \"\";\n  display: block;\n}\n",[26,138450,138451,138459,138469,138479],{"__ignoreMap":43},[47,138452,138453,138455,138457],{"class":49,"line":50},[47,138454,51665],{"class":51354},[47,138456,137607],{"class":53},[47,138458,15665],{"class":221},[47,138460,138461,138463,138465,138467],{"class":49,"line":92},[47,138462,137614],{"class":85},[47,138464,51491],{"class":221},[47,138466,7745],{"class":81},[47,138468,1384],{"class":221},[47,138470,138471,138473,138475,138477],{"class":49,"line":1273},[47,138472,128222],{"class":85},[47,138474,51491],{"class":221},[47,138476,60923],{"class":85},[47,138478,1384],{"class":221},[47,138480,138481],{"class":49,"line":1288},[47,138482,1659],{"class":221},[19,138484,138485],{},"样式实例代码：",[38,138487,138488],{"className":126606,"code":138448,"language":126608,"meta":43,"style":43},[26,138489,138490,138498,138508,138518],{"__ignoreMap":43},[47,138491,138492,138494,138496],{"class":49,"line":50},[47,138493,51665],{"class":51354},[47,138495,137607],{"class":53},[47,138497,15665],{"class":221},[47,138499,138500,138502,138504,138506],{"class":49,"line":92},[47,138501,137614],{"class":85},[47,138503,51491],{"class":221},[47,138505,7745],{"class":81},[47,138507,1384],{"class":221},[47,138509,138510,138512,138514,138516],{"class":49,"line":1273},[47,138511,128222],{"class":85},[47,138513,51491],{"class":221},[47,138515,60923],{"class":85},[47,138517,1384],{"class":221},[47,138519,138520],{"class":49,"line":1288},[47,138521,1659],{"class":221},[187,138523,138525],{"id":138524},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[106,138527,138528],{},[109,138529,138530],{},"header 盒子必须要有高度",[19,138532,138533,138534,138536,138537],{},"1 号盒子是 ",[26,138535,131618],{}," 标志定位，在正常开发过程中， ",[369,138538,138539,138540,138543],{},"logo的布局其实是有讲究的，需要进行 ",[26,138541,138542],{},"logoSEO","的优化 （★★★）",[106,138545,138546,138554,138562,138589],{},[109,138547,138548,138550,138551,138553],{},[26,138549,131618],{}," 里面首先放一个 ",[26,138552,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[109,138555,138556,138558,138559,138561],{},[26,138557,10],{}," 里面再放一个链接，可以返回首页的，把 ",[26,138560,131618],{}," 的背景图片给链接即可",[109,138563,138564,138565],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[106,138566,138567,138582],{},[109,138568,138569,138570,138573,138574,138577,138578,138581],{},"方法1：",[26,138571,138572],{},"text-indent"," 移到盒子外面（",[26,138575,138576],{},"text-indent: -9999px",") ，然后 ",[26,138579,138580],{},"overflow:hidden"," ，淘宝的做法",[109,138583,138584,138585,138588],{},"方法2：直接给 ",[26,138586,138587],{},"font-size: 0;"," 就看不到文字了，京东的做法",[109,138590,138591,138592,138594,138595,138597],{},"最后给链接一个 ",[26,138593,51461],{}," 属性，这样鼠标放到 ",[26,138596,131618],{}," 上就可以看到提示文字了",[19,138599,138445],{},[38,138601,138602],{"className":127353,"code":131839,"language":127355,"meta":43,"style":43},[26,138603,138604],{"__ignoreMap":43},[47,138605,138606,138608,138610,138612,138614,138616,138618,138620,138622,138624,138626],{"class":49,"line":50},[47,138607,1129],{"class":221},[47,138609,457],{"class":51354},[47,138611,61111],{"class":53},[47,138613,267],{"class":221},[47,138615,131854],{"class":81},[47,138617,131857],{"class":53},[47,138619,267],{"class":221},[47,138621,131862],{"class":81},[47,138623,131865],{"class":221},[47,138625,457],{"class":51354},[47,138627,51361],{"class":221},[19,138629,138485],{},[38,138631,138632],{"className":127353,"code":131839,"language":127355,"meta":43,"style":43},[26,138633,138634],{"__ignoreMap":43},[47,138635,138636,138638,138640,138642,138644,138646,138648,138650,138652,138654,138656],{"class":49,"line":50},[47,138637,1129],{"class":221},[47,138639,457],{"class":51354},[47,138641,61111],{"class":53},[47,138643,267],{"class":221},[47,138645,131854],{"class":81},[47,138647,131857],{"class":53},[47,138649,267],{"class":221},[47,138651,131862],{"class":81},[47,138653,131865],{"class":221},[47,138655,457],{"class":51354},[47,138657,51361],{"class":221},[19,138659,138660,138661,138663],{},"2 号盒子是 ",[26,138662,131631],{}," 搜索模块定位",[106,138665,138666,138669,138672,138675],{},[109,138667,138668],{},"search盒子利用定位的方式放在对应的位置",[109,138670,138671],{},"search盒子设置绝对定位，header盒子设置相对定位",[109,138673,138674],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[109,138676,138677],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,138679,138445],{},[38,138681,138682],{"className":126606,"code":131926,"language":126608,"meta":43,"style":43},[26,138683,138684,138706,138710,138720],{"__ignoreMap":43},[47,138685,138686,138688,138690,138692,138694,138696,138698,138700,138702,138704],{"class":49,"line":50},[47,138687,51665],{"class":51354},[47,138689,12528],{"class":221},[47,138691,19],{"class":51354},[47,138693,12528],{"class":221},[47,138695,10],{"class":51354},[47,138697,12528],{"class":221},[47,138699,106],{"class":51354},[47,138701,12528],{"class":221},[47,138703,109],{"class":51354},[47,138705,15665],{"class":221},[47,138707,138708],{"class":49,"line":92},[47,138709,131955],{"class":279},[47,138711,138712,138714,138716,138718],{"class":49,"line":1273},[47,138713,128222],{"class":85},[47,138715,51491],{"class":221},[47,138717,60923],{"class":85},[47,138719,1384],{"class":221},[47,138721,138722],{"class":49,"line":1288},[47,138723,1659],{"class":221},[19,138725,138485],{},[38,138727,138728],{"className":126606,"code":131926,"language":126608,"meta":43,"style":43},[26,138729,138730,138752,138756,138766],{"__ignoreMap":43},[47,138731,138732,138734,138736,138738,138740,138742,138744,138746,138748,138750],{"class":49,"line":50},[47,138733,51665],{"class":51354},[47,138735,12528],{"class":221},[47,138737,19],{"class":51354},[47,138739,12528],{"class":221},[47,138741,10],{"class":51354},[47,138743,12528],{"class":221},[47,138745,106],{"class":51354},[47,138747,12528],{"class":221},[47,138749,109],{"class":51354},[47,138751,15665],{"class":221},[47,138753,138754],{"class":49,"line":92},[47,138755,131955],{"class":279},[47,138757,138758,138760,138762,138764],{"class":49,"line":1273},[47,138759,128222],{"class":85},[47,138761,51491],{"class":221},[47,138763,60923],{"class":85},[47,138765,1384],{"class":221},[47,138767,138768],{"class":49,"line":1288},[47,138769,1659],{"class":221},[19,138771,138772],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,138774,138775,138776,138779],{},"3 号盒子是 ",[26,138777,138778],{},"hotwords"," 热词模块定位",[106,138781,138782,138785,138788],{},[109,138783,138784],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[109,138786,138787],{},"给里面所有的a标签设置 左右10px的外边距",[109,138789,138790],{},"给第一个a标签设置文字变红色（#c81623）",[19,138792,138445],{},[38,138794,138796],{"className":126606,"code":138795,"language":126608,"meta":43,"style":43},"div {\n  margin: 0 auto;\n}\n",[26,138797,138798,138804,138816],{"__ignoreMap":43},[47,138799,138800,138802],{"class":49,"line":50},[47,138801,51665],{"class":51354},[47,138803,15665],{"class":221},[47,138805,138806,138808,138810,138812,138814],{"class":49,"line":92},[47,138807,70524],{"class":85},[47,138809,51491],{"class":221},[47,138811,411],{"class":85},[47,138813,51610],{"class":85},[47,138815,1384],{"class":221},[47,138817,138818],{"class":49,"line":1273},[47,138819,1659],{"class":221},[19,138821,138485],{},[38,138823,138824],{"className":126606,"code":138795,"language":126608,"meta":43,"style":43},[26,138825,138826,138832,138844],{"__ignoreMap":43},[47,138827,138828,138830],{"class":49,"line":50},[47,138829,51665],{"class":51354},[47,138831,15665],{"class":221},[47,138833,138834,138836,138838,138840,138842],{"class":49,"line":92},[47,138835,70524],{"class":85},[47,138837,51491],{"class":221},[47,138839,411],{"class":85},[47,138841,51610],{"class":85},[47,138843,1384],{"class":221},[47,138845,138846],{"class":49,"line":1273},[47,138847,1659],{"class":221},[19,138849,138850,138851,138854],{},"4 号盒子是 ",[26,138852,138853],{},"shopcar"," 购物车模块",[106,138856,138857,138862,138865,138868],{},[109,138858,123389,138859,138861],{},[26,138860,138853],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[109,138863,138864],{},"count 统计部分用绝对定位做",[109,138866,138867],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[109,138869,138870],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,138872,138445],{},[38,138874,138875],{"className":126606,"code":132038,"language":126608,"meta":43,"style":43},[26,138876,138877,138881,138895,138899,138913,138917,138931,138935,138949,138953],{"__ignoreMap":43},[47,138878,138879],{"class":49,"line":50},[47,138880,132045],{"class":279},[47,138882,138883,138885,138887,138889,138891,138893],{"class":49,"line":92},[47,138884,132050],{"class":53},[47,138886,79861],{"class":221},[47,138888,128966],{"class":85},[47,138890,51491],{"class":221},[47,138892,132059],{"class":85},[47,138894,129536],{"class":221},[47,138896,138897],{"class":49,"line":1273},[47,138898,132066],{"class":279},[47,138900,138901,138903,138905,138907,138909,138911],{"class":49,"line":1288},[47,138902,132071],{"class":53},[47,138904,79861],{"class":221},[47,138906,128966],{"class":85},[47,138908,51491],{"class":221},[47,138910,54818],{"class":85},[47,138912,129536],{"class":221},[47,138914,138915],{"class":49,"line":1294},[47,138916,132086],{"class":279},[47,138918,138919,138921,138923,138925,138927,138929],{"class":49,"line":1308},[47,138920,132091],{"class":53},[47,138922,79861],{"class":221},[47,138924,128966],{"class":85},[47,138926,51491],{"class":221},[47,138928,54885],{"class":85},[47,138930,129536],{"class":221},[47,138932,138933],{"class":49,"line":1314},[47,138934,132106],{"class":279},[47,138936,138937,138939,138941,138943,138945,138947],{"class":49,"line":1405},[47,138938,132111],{"class":53},[47,138940,79861],{"class":221},[47,138942,128966],{"class":85},[47,138944,51491],{"class":221},[47,138946,86287],{"class":85},[47,138948,129536],{"class":221},[47,138950,138951],{"class":49,"line":1411},[47,138952,132126],{"class":279},[47,138954,138955,138957,138959,138961,138963,138965],{"class":49,"line":1423},[47,138956,132131],{"class":53},[47,138958,79861],{"class":221},[47,138960,128966],{"class":85},[47,138962,51491],{"class":221},[47,138964,132140],{"class":85},[47,138966,129536],{"class":221},[19,138968,138485],{},[38,138970,138971],{"className":126606,"code":132038,"language":126608,"meta":43,"style":43},[26,138972,138973,138977,138991,138995,139009,139013,139027,139031,139045,139049],{"__ignoreMap":43},[47,138974,138975],{"class":49,"line":50},[47,138976,132045],{"class":279},[47,138978,138979,138981,138983,138985,138987,138989],{"class":49,"line":92},[47,138980,132050],{"class":53},[47,138982,79861],{"class":221},[47,138984,128966],{"class":85},[47,138986,51491],{"class":221},[47,138988,132059],{"class":85},[47,138990,129536],{"class":221},[47,138992,138993],{"class":49,"line":1273},[47,138994,132066],{"class":279},[47,138996,138997,138999,139001,139003,139005,139007],{"class":49,"line":1288},[47,138998,132071],{"class":53},[47,139000,79861],{"class":221},[47,139002,128966],{"class":85},[47,139004,51491],{"class":221},[47,139006,54818],{"class":85},[47,139008,129536],{"class":221},[47,139010,139011],{"class":49,"line":1294},[47,139012,132086],{"class":279},[47,139014,139015,139017,139019,139021,139023,139025],{"class":49,"line":1308},[47,139016,132091],{"class":53},[47,139018,79861],{"class":221},[47,139020,128966],{"class":85},[47,139022,51491],{"class":221},[47,139024,54885],{"class":85},[47,139026,129536],{"class":221},[47,139028,139029],{"class":49,"line":1314},[47,139030,132106],{"class":279},[47,139032,139033,139035,139037,139039,139041,139043],{"class":49,"line":1405},[47,139034,132111],{"class":53},[47,139036,79861],{"class":221},[47,139038,128966],{"class":85},[47,139040,51491],{"class":221},[47,139042,86287],{"class":85},[47,139044,129536],{"class":221},[47,139046,139047],{"class":49,"line":1411},[47,139048,132126],{"class":279},[47,139050,139051,139053,139055,139057,139059,139061],{"class":49,"line":1423},[47,139052,132131],{"class":53},[47,139054,79861],{"class":221},[47,139056,128966],{"class":85},[47,139058,51491],{"class":221},[47,139060,132140],{"class":85},[47,139062,129536],{"class":221},[187,139064,139066,139067,139069],{"id":139065},"_1544-nav导航模块制作","15.4.4 ",[26,139068,53767],{},"导航模块制作",[1556,139071],{"style":126462,"src":139072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,139074,139075,139077],{},[26,139076,53767],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,139079,139080,139081],{},"1 号盒子左侧浮动，",[26,139082,139083],{},"dropdown",[106,139085,139086,139096,139104,139110,139118,139128,139136,139147],{},[109,139087,139088,139089,101072,139092,139095],{},"1号盒子有讲究，根据相关性 里面包含 ",[26,139090,139091],{},".dt",[26,139093,139094],{},".dd"," 两个盒子",[109,139097,139098,139100,139101,139103],{},[26,139099,139091],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[26,139102,139094],{}," 挤到下面去了",[109,139105,139106,139107,139109],{},"给 ",[26,139108,139094],{}," 盒子设置宽度 和 高度，以及背景颜色",[109,139111,139106,139112,139114,139115,120291],{},[26,139113,139094],{}," 盒子里面定义 无序列表 （",[26,139116,139117],{},"ul > li > a",[109,139119,139120,139121,139123,139124,139127],{},"每个 ",[26,139122,109],{}," 都有一个高度（",[26,139125,139126],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[109,139129,139106,139130,139132,139133,120291],{},[26,139131,109],{}," 里面的a设置文字大小（",[26,139134,139135],{},"14px",[109,139137,139106,139138,139140,139141,139143,139144,139146],{},[26,139139,109],{}," 设置 ",[26,139142,127767],{},"，当鼠标移入的时候，让",[26,139145,109],{},"的背景变成白色，让里面的文字变成红色",[109,139148,139149,139151,139152,139154,139155,139157],{},[26,139150,109],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[26,139153,109],{},"的右侧，那么给",[26,139156,109],{},"设置相对定位",[19,139159,139160],{},"一定要注意相关性",[19,139162,138445],{},[38,139164,139165],{"className":126606,"code":138448,"language":126608,"meta":43,"style":43},[26,139166,139167,139175,139185,139195],{"__ignoreMap":43},[47,139168,139169,139171,139173],{"class":49,"line":50},[47,139170,51665],{"class":51354},[47,139172,137607],{"class":53},[47,139174,15665],{"class":221},[47,139176,139177,139179,139181,139183],{"class":49,"line":92},[47,139178,137614],{"class":85},[47,139180,51491],{"class":221},[47,139182,7745],{"class":81},[47,139184,1384],{"class":221},[47,139186,139187,139189,139191,139193],{"class":49,"line":1273},[47,139188,128222],{"class":85},[47,139190,51491],{"class":221},[47,139192,60923],{"class":85},[47,139194,1384],{"class":221},[47,139196,139197],{"class":49,"line":1288},[47,139198,1659],{"class":221},[19,139200,138485],{},[38,139202,139203],{"className":126606,"code":138448,"language":126608,"meta":43,"style":43},[26,139204,139205,139213,139223,139233],{"__ignoreMap":43},[47,139206,139207,139209,139211],{"class":49,"line":50},[47,139208,51665],{"class":51354},[47,139210,137607],{"class":53},[47,139212,15665],{"class":221},[47,139214,139215,139217,139219,139221],{"class":49,"line":92},[47,139216,137614],{"class":85},[47,139218,51491],{"class":221},[47,139220,7745],{"class":81},[47,139222,1384],{"class":221},[47,139224,139225,139227,139229,139231],{"class":49,"line":1273},[47,139226,128222],{"class":85},[47,139228,51491],{"class":221},[47,139230,60923],{"class":85},[47,139232,1384],{"class":221},[47,139234,139235],{"class":49,"line":1288},[47,139236,1659],{"class":221},[19,139238,139239],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,139241,139242,139243,139246],{},"2 号盒子左侧浮动，",[26,139244,139245],{},"navitems"," 导航栏组",[106,139248,139249,139254,139263],{},[109,139250,139251,139252],{},"里面结构是 ",[26,139253,139117],{},[109,139255,139256,139257,139259,139260,139262],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[26,139258,457],{},"左右的",[26,139261,30937],{},"把两侧撑开",[109,139264,139265],{},"让文字垂直居中（行高等于高度）",[1556,139267],{"style":126462,"src":139268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,139270,139271],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,139273,138445],{},[38,139275,139277],{"className":126606,"code":139276,"language":126608,"meta":43,"style":43},".box {\n  float: left;\n}\n",[26,139278,139279,139285,139295],{"__ignoreMap":43},[47,139280,139281,139283],{"class":49,"line":50},[47,139282,130454],{"class":53},[47,139284,15665],{"class":221},[47,139286,139287,139289,139291,139293],{"class":49,"line":92},[47,139288,131086],{"class":85},[47,139290,51491],{"class":221},[47,139292,23829],{"class":85},[47,139294,1384],{"class":221},[47,139296,139297],{"class":49,"line":1273},[47,139298,1659],{"class":221},[19,139300,138485],{},[38,139302,139303],{"className":126606,"code":139276,"language":126608,"meta":43,"style":43},[26,139304,139305,139311,139321],{"__ignoreMap":43},[47,139306,139307,139309],{"class":49,"line":50},[47,139308,130454],{"class":53},[47,139310,15665],{"class":221},[47,139312,139313,139315,139317,139319],{"class":49,"line":92},[47,139314,131086],{"class":85},[47,139316,51491],{"class":221},[47,139318,23829],{"class":85},[47,139320,1384],{"class":221},[47,139322,139323],{"class":49,"line":1273},[47,139324,1659],{"class":221},[19,139326,139327],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[1556,139329],{"style":126462,"src":139330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[38,139332,139333],{"className":126606,"code":130763,"language":126608,"meta":43,"style":43},[26,139334,139335,139341,139357],{"__ignoreMap":43},[47,139336,139337,139339],{"class":49,"line":50},[47,139338,51665],{"class":51354},[47,139340,15665],{"class":221},[47,139342,139343,139345,139347,139349,139351,139353,139355],{"class":49,"line":92},[47,139344,70950],{"class":85},[47,139346,51491],{"class":221},[47,139348,436],{"class":85},[47,139350,51546],{"class":217},[47,139352,51575],{"class":85},[47,139354,129998],{"class":85},[47,139356,1384],{"class":221},[47,139358,139359],{"class":49,"line":1273},[47,139360,1659],{"class":221},[187,139362,139364],{"id":139363},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[1556,139366],{"style":126462,"src":139367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[106,139369,139370,139375,139380],{},[109,139371,139372,139374],{},[26,139373,131809],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[109,139376,139377,139379],{},[26,139378,131809],{}," 里面有一个大的版心",[109,139381,139382,139383,139386,139387],{},"版心里面包含 1 号盒子，",[26,139384,139385],{},"mod_service"," 是服务模块，mod 是模块的意思",[106,139388,139389,139394,139407,139423,139428],{},[109,139390,139106,139391,139393],{},[26,139392,139385],{}," 设置高度（80px）和下边框",[109,139395,139396,139397,139400,139401,139403,139404,139406],{},"在里面定义 ",[26,139398,139399],{},"ul > li"," ,每个",[26,139402,109],{}," 宽度是300px 高度是 50px，给每个",[26,139405,109],{},"设置35px的左内边距",[109,139408,139409,139410,139412,139413,139415,139416,139418,139419,18503,139421,120291],{},"在每个",[26,139411,109],{},"里面，放一个 ",[26,139414,23003],{},"（里面放图标），一个",[26,139417,51665],{},"（里面放",[26,139420,51665],{},[26,139422,19],{},[109,139424,139106,139425,139427],{},[26,139426,23003],{},"设置浮动，让h5与这个div左右排列",[109,139429,139430],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,139432,138445],{},[38,139434,139436],{"className":126606,"code":139435,"language":126608,"meta":43,"style":43},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[26,139437,139438,139444,139456,139468,139495],{"__ignoreMap":43},[47,139439,139440,139442],{"class":49,"line":50},[47,139441,134363],{"class":53},[47,139443,15665],{"class":221},[47,139445,139446,139448,139450,139452,139454],{"class":49,"line":92},[47,139447,70622],{"class":85},[47,139449,51491],{"class":221},[47,139451,919],{"class":85},[47,139453,51546],{"class":217},[47,139455,1384],{"class":221},[47,139457,139458,139460,139462,139464,139466],{"class":49,"line":1273},[47,139459,70842],{"class":85},[47,139461,51491],{"class":221},[47,139463,919],{"class":85},[47,139465,51546],{"class":217},[47,139467,1384],{"class":221},[47,139469,139470,139472,139474,139476,139478,139480,139482,139484,139487,139489,139491,139493],{"class":49,"line":1288},[47,139471,70665],{"class":85},[47,139473,51491],{"class":221},[47,139475,61780],{"class":85},[47,139477,222],{"class":221},[47,139479,134402],{"class":5309},[47,139481,13807],{"class":221},[47,139483,61790],{"class":85},[47,139485,139486],{"class":85}," -10",[47,139488,51546],{"class":217},[47,139490,134421],{"class":85},[47,139492,51546],{"class":217},[47,139494,1384],{"class":221},[47,139496,139497],{"class":49,"line":1294},[47,139498,1659],{"class":221},[19,139500,138485],{},[38,139502,139503],{"className":126606,"code":139435,"language":126608,"meta":43,"style":43},[26,139504,139505,139511,139523,139535,139561],{"__ignoreMap":43},[47,139506,139507,139509],{"class":49,"line":50},[47,139508,134363],{"class":53},[47,139510,15665],{"class":221},[47,139512,139513,139515,139517,139519,139521],{"class":49,"line":92},[47,139514,70622],{"class":85},[47,139516,51491],{"class":221},[47,139518,919],{"class":85},[47,139520,51546],{"class":217},[47,139522,1384],{"class":221},[47,139524,139525,139527,139529,139531,139533],{"class":49,"line":1273},[47,139526,70842],{"class":85},[47,139528,51491],{"class":221},[47,139530,919],{"class":85},[47,139532,51546],{"class":217},[47,139534,1384],{"class":221},[47,139536,139537,139539,139541,139543,139545,139547,139549,139551,139553,139555,139557,139559],{"class":49,"line":1288},[47,139538,70665],{"class":85},[47,139540,51491],{"class":221},[47,139542,61780],{"class":85},[47,139544,222],{"class":221},[47,139546,134402],{"class":5309},[47,139548,13807],{"class":221},[47,139550,61790],{"class":85},[47,139552,139486],{"class":85},[47,139554,51546],{"class":217},[47,139556,134421],{"class":85},[47,139558,51546],{"class":217},[47,139560,1384],{"class":221},[47,139562,139563],{"class":49,"line":1294},[47,139564,1659],{"class":221},[19,139566,139567],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[106,139569,139570,139573,139579,139585,139597],{},[109,139571,139572],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[109,139574,139575,139576,120291],{},"里面的布局利用 自定义列表来实现（",[26,139577,139578],{},"dl > dt + dd",[109,139580,139106,139581,139584],{},[26,139582,139583],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[109,139586,139106,139587,139590,139591,18503,139593,139596],{},[26,139588,139589],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[26,139592,139589],{},[26,139594,139595],{},"dd","之间有些距离",[109,139598,139599],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,139601,138445],{},[38,139603,139604],{"className":126606,"code":138795,"language":126608,"meta":43,"style":43},[26,139605,139606,139612,139624],{"__ignoreMap":43},[47,139607,139608,139610],{"class":49,"line":50},[47,139609,51665],{"class":51354},[47,139611,15665],{"class":221},[47,139613,139614,139616,139618,139620,139622],{"class":49,"line":92},[47,139615,70524],{"class":85},[47,139617,51491],{"class":221},[47,139619,411],{"class":85},[47,139621,51610],{"class":85},[47,139623,1384],{"class":221},[47,139625,139626],{"class":49,"line":1273},[47,139627,1659],{"class":221},[19,139629,138485],{},[38,139631,139632],{"className":126606,"code":138795,"language":126608,"meta":43,"style":43},[26,139633,139634,139640,139652],{"__ignoreMap":43},[47,139635,139636,139638],{"class":49,"line":50},[47,139637,51665],{"class":51354},[47,139639,15665],{"class":221},[47,139641,139642,139644,139646,139648,139650],{"class":49,"line":92},[47,139643,70524],{"class":85},[47,139645,51491],{"class":221},[47,139647,411],{"class":85},[47,139649,51610],{"class":85},[47,139651,1384],{"class":221},[47,139653,139654],{"class":49,"line":1273},[47,139655,1659],{"class":221},[19,139657,139658],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[106,139660,139661,139670,139673,139684],{},[109,139662,139663,139664,139666,139667,139669],{},"分为上下两块，上面是 ",[26,139665,131826],{}," 友情链接，下面是 ",[26,139668,131819],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[109,139671,139672],{},"把内容分别复制到相应模块中",[109,139674,139106,139675,139677,139678,139680,139681,139683],{},[26,139676,131826],{}," 设置 15px 的下外边距，给",[26,139679,131826],{}," 里面 的 ",[26,139682,457],{}," 标签设置 左右 3px 的外边距",[109,139685,139686,139687,139689],{},"给",[26,139688,131819],{}," 设置 20px 的行高",[19,139691,138445],{},[38,139693,139694],{"className":126606,"code":138795,"language":126608,"meta":43,"style":43},[26,139695,139696,139702,139714],{"__ignoreMap":43},[47,139697,139698,139700],{"class":49,"line":50},[47,139699,51665],{"class":51354},[47,139701,15665],{"class":221},[47,139703,139704,139706,139708,139710,139712],{"class":49,"line":92},[47,139705,70524],{"class":85},[47,139707,51491],{"class":221},[47,139709,411],{"class":85},[47,139711,51610],{"class":85},[47,139713,1384],{"class":221},[47,139715,139716],{"class":49,"line":1273},[47,139717,1659],{"class":221},[19,139719,138485],{},[38,139721,139722],{"className":126606,"code":138795,"language":126608,"meta":43,"style":43},[26,139723,139724,139730,139742],{"__ignoreMap":43},[47,139725,139726,139728],{"class":49,"line":50},[47,139727,51665],{"class":51354},[47,139729,15665],{"class":221},[47,139731,139732,139734,139736,139738,139740],{"class":49,"line":92},[47,139733,70524],{"class":85},[47,139735,51491],{"class":221},[47,139737,411],{"class":85},[47,139739,51610],{"class":85},[47,139741,1384],{"class":221},[47,139743,139744],{"class":49,"line":1273},[47,139745,1659],{"class":221},[19,139747,139748],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[134,139750,139751],{},"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":43,"searchDepth":92,"depth":92,"links":139753},[139754,139755,139756,139763],{"id":138034,"depth":92,"text":138035},{"id":138053,"depth":92,"text":138054},{"id":138080,"depth":92,"text":138081,"children":139757},[139758,139759,139760,139761,139762],{"id":138084,"depth":1273,"text":138085},{"id":138097,"depth":1273,"text":138098},{"id":138121,"depth":1273,"text":138122},{"id":138143,"depth":1273,"text":138144},{"id":138215,"depth":1273,"text":138216},{"id":138341,"depth":92,"text":138342,"children":139764},[139765,139766,139767,139768,139770],{"id":138345,"depth":1273,"text":138346},{"id":138352,"depth":1273,"text":138353},{"id":138524,"depth":1273,"text":138525},{"id":139065,"depth":1273,"text":139769},"15.4.4 nav导航模块制作",{"id":139363,"depth":1273,"text":139364},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138026,"description":142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139777,"title":139778,"body":139779,"description":142,"extension":143,"meta":142181,"navigation":145,"path":142182,"seo":142183,"stem":142184,"__hash__":142185},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139780,"toc":142158},[139781,139784,139788,139792,139804,139807,139810,139813,139824,139826,139850,139852,139876,139881,139884,139886,139922,139924,139960,139963,139968,139971,139974,139977,140007,140014,140017,140027,140029,140063,140066,140100,140106,140123,140125,140161,140163,140199,140204,140229,140231,140257,140259,140283,140290,140293,140357,140359,140401,140403,140443,140450,140455,140457,140487,140489,140519,140523,140526,140533,140545,140547,140573,140575,140599,140602,140604,140628,140634,140644,140646,140676,140678,140708,140715,140756,140758,140794,140796,140832,140836,140839,140842,140845,140851,140856,140859,140882,140885,140909,140912,140936,140941,140944,140947,140950,140953,140956,141030,141032,141062,141064,141094,141097,141100,141132,141136,141140,141154,141163,141166,141171,141173,141267,141269,141363,141386,141388,141412,141414,141438,141445,141448,141458,141460,141484,141489,141497,141499,141529,141534,141574,141576,141602,141604,141630,141634,141637,141642,141645,141649,141657,141664,141672,141674,141704,141706,141736,141744,141747,141750,141752,141782,141784,141814,141817,141822,141824,141848,141850,141874,141877,141962,141964,141988,141990,142014,142018,142020,142044,142046,142080,142084,142098,142101,142106,142109,142114,142117,142147,142155],[10,139782,139778],{"id":139783},"_16-品优购项目下篇-主体与页面开发",[14,139785,139787],{"id":139786},"_161-项目主体模块制作","16.1 项目主体模块制作",[187,139789,139791],{"id":139790},"_1611-首页制作","16.1.1 首页制作",[19,139793,139794,139796,139797,139799,139800,139803],{},[369,139795,102112],{}," 主体模块是 ",[369,139798,74112],{}," 里面专有的，注意需要新的样式文件 ",[369,139801,139802],{},"index.css，"," 就不要写在common.css中了",[1556,139805],{"style":126462,"src":139806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[1556,139808],{"style":126462,"src":139809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,139811,139812],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[106,139814,139815,139818,139821],{},[109,139816,139817],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[109,139819,139820],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[109,139822,139823],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,139825,138445],{},[38,139827,139828],{"className":126606,"code":139276,"language":126608,"meta":43,"style":43},[26,139829,139830,139836,139846],{"__ignoreMap":43},[47,139831,139832,139834],{"class":49,"line":50},[47,139833,130454],{"class":53},[47,139835,15665],{"class":221},[47,139837,139838,139840,139842,139844],{"class":49,"line":92},[47,139839,131086],{"class":85},[47,139841,51491],{"class":221},[47,139843,23829],{"class":85},[47,139845,1384],{"class":221},[47,139847,139848],{"class":49,"line":1273},[47,139849,1659],{"class":221},[19,139851,138485],{},[38,139853,139854],{"className":126606,"code":139276,"language":126608,"meta":43,"style":43},[26,139855,139856,139862,139872],{"__ignoreMap":43},[47,139857,139858,139860],{"class":49,"line":50},[47,139859,130454],{"class":53},[47,139861,15665],{"class":221},[47,139863,139864,139866,139868,139870],{"class":49,"line":92},[47,139865,131086],{"class":85},[47,139867,51491],{"class":221},[47,139869,23829],{"class":85},[47,139871,1384],{"class":221},[47,139873,139874],{"class":49,"line":1273},[47,139875,1659],{"class":221},[171,139877,139878],{},[109,139879,139880],{},"左侧focus模块制作",[1556,139882],{"style":126462,"src":139883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,139885,138445],{},[38,139887,139888],{"className":126606,"code":127929,"language":126608,"meta":43,"style":43},[26,139889,139890,139898,139908,139918],{"__ignoreMap":43},[47,139891,139892,139894,139896],{"class":49,"line":50},[47,139893,53875],{"class":51354},[47,139895,61954],{"class":53},[47,139897,15665],{"class":221},[47,139899,139900,139902,139904,139906],{"class":49,"line":92},[47,139901,127944],{"class":85},[47,139903,51491],{"class":221},[47,139905,54943],{"class":85},[47,139907,1384],{"class":221},[47,139909,139910,139912,139914,139916],{"class":49,"line":1273},[47,139911,70852],{"class":85},[47,139913,51491],{"class":221},[47,139915,54791],{"class":85},[47,139917,1384],{"class":221},[47,139919,139920],{"class":49,"line":1288},[47,139921,1659],{"class":221},[19,139923,138485],{},[38,139925,139926],{"className":126606,"code":127929,"language":126608,"meta":43,"style":43},[26,139927,139928,139936,139946,139956],{"__ignoreMap":43},[47,139929,139930,139932,139934],{"class":49,"line":50},[47,139931,53875],{"class":51354},[47,139933,61954],{"class":53},[47,139935,15665],{"class":221},[47,139937,139938,139940,139942,139944],{"class":49,"line":92},[47,139939,127944],{"class":85},[47,139941,51491],{"class":221},[47,139943,54943],{"class":85},[47,139945,1384],{"class":221},[47,139947,139948,139950,139952,139954],{"class":49,"line":1273},[47,139949,70852],{"class":85},[47,139951,51491],{"class":221},[47,139953,54791],{"class":85},[47,139955,1384],{"class":221},[47,139957,139958],{"class":49,"line":1288},[47,139959,1659],{"class":221},[19,139961,139962],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[171,139964,139965],{"start":92},[109,139966,139967],{},"右侧newsflash模块制作",[1556,139969],{"style":126462,"src":139970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,139972,139973],{},"右侧的模块 分为上中下三个盒子",[19,139975,139976],{},"结构代码：",[38,139978,139979],{"className":127353,"code":134108,"language":127355,"meta":43,"style":43},[26,139980,139981],{"__ignoreMap":43},[47,139982,139983,139985,139987,139989,139991,139993,139995,139997,139999,140001,140003,140005],{"class":49,"line":50},[47,139984,1129],{"class":221},[47,139986,1556],{"class":51354},[47,139988,55293],{"class":53},[47,139990,267],{"class":221},[47,139992,134123],{"class":81},[47,139994,55301],{"class":53},[47,139996,267],{"class":221},[47,139998,134130],{"class":81},[47,140000,134133],{"class":53},[47,140002,267],{"class":221},[47,140004,134138],{"class":81},[47,140006,51361],{"class":221},[19,140008,140009,140010,140013],{},"1 号盒子为 ",[26,140011,140012],{},"news"," 新闻模块 高度为 165px",[1556,140015],{"style":126462,"src":140016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,140018,140019,140020,140023,140024],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[26,140021,140022],{},"news-hd","，下面是 ",[26,140025,140026],{},"news-bd",[19,140028,139976],{},[38,140030,140031],{"className":127353,"code":130710,"language":127355,"meta":43,"style":43},[26,140032,140033,140037,140051,140055],{"__ignoreMap":43},[47,140034,140035],{"class":49,"line":50},[47,140036,130717],{"class":279},[47,140038,140039,140041,140043,140045,140047,140049],{"class":49,"line":92},[47,140040,1129],{"class":221},[47,140042,51665],{"class":51354},[47,140044,53540],{"class":53},[47,140046,267],{"class":221},[47,140048,130730],{"class":81},[47,140050,51361],{"class":221},[47,140052,140053],{"class":49,"line":1273},[47,140054,130737],{"class":221},[47,140056,140057,140059,140061],{"class":49,"line":1288},[47,140058,51839],{"class":221},[47,140060,51665],{"class":51354},[47,140062,51361],{"class":221},[19,140064,140065],{},"样式代码：",[38,140067,140068],{"className":127353,"code":130710,"language":127355,"meta":43,"style":43},[26,140069,140070,140074,140088,140092],{"__ignoreMap":43},[47,140071,140072],{"class":49,"line":50},[47,140073,130717],{"class":279},[47,140075,140076,140078,140080,140082,140084,140086],{"class":49,"line":92},[47,140077,1129],{"class":221},[47,140079,51665],{"class":51354},[47,140081,53540],{"class":53},[47,140083,267],{"class":221},[47,140085,130730],{"class":81},[47,140087,51361],{"class":221},[47,140089,140090],{"class":49,"line":1273},[47,140091,130737],{"class":221},[47,140093,140094,140096,140098],{"class":49,"line":1288},[47,140095,51839],{"class":221},[47,140097,51665],{"class":51354},[47,140099,51361],{"class":221},[19,140101,140102,140103,140105],{},"上面是",[26,140104,140022],{},"，设置高度是 33px，设置下边框",[106,140107,140108,140114],{},[109,140109,140110,140111,140113],{},"里面放一个",[26,140112,23003],{}," 标题",[109,140115,140116,140117,140119,140120,140122],{},"放一个a",[26,140118,102747],{},"，内容是 更多，然后让 ",[26,140121,457],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,140124,139976],{},[38,140126,140127],{"className":126606,"code":138448,"language":126608,"meta":43,"style":43},[26,140128,140129,140137,140147,140157],{"__ignoreMap":43},[47,140130,140131,140133,140135],{"class":49,"line":50},[47,140132,51665],{"class":51354},[47,140134,137607],{"class":53},[47,140136,15665],{"class":221},[47,140138,140139,140141,140143,140145],{"class":49,"line":92},[47,140140,137614],{"class":85},[47,140142,51491],{"class":221},[47,140144,7745],{"class":81},[47,140146,1384],{"class":221},[47,140148,140149,140151,140153,140155],{"class":49,"line":1273},[47,140150,128222],{"class":85},[47,140152,51491],{"class":221},[47,140154,60923],{"class":85},[47,140156,1384],{"class":221},[47,140158,140159],{"class":49,"line":1288},[47,140160,1659],{"class":221},[19,140162,140065],{},[38,140164,140165],{"className":126606,"code":138448,"language":126608,"meta":43,"style":43},[26,140166,140167,140175,140185,140195],{"__ignoreMap":43},[47,140168,140169,140171,140173],{"class":49,"line":50},[47,140170,51665],{"class":51354},[47,140172,137607],{"class":53},[47,140174,15665],{"class":221},[47,140176,140177,140179,140181,140183],{"class":49,"line":92},[47,140178,137614],{"class":85},[47,140180,51491],{"class":221},[47,140182,7745],{"class":81},[47,140184,1384],{"class":221},[47,140186,140187,140189,140191,140193],{"class":49,"line":1273},[47,140188,128222],{"class":85},[47,140190,51491],{"class":221},[47,140192,60923],{"class":85},[47,140194,1384],{"class":221},[47,140196,140197],{"class":49,"line":1288},[47,140198,1659],{"class":221},[19,140200,140201,140202],{},"下面是",[26,140203,140026],{},[106,140205,140206,140214],{},[109,140207,140208,140209,101072,140211,140213],{},"里面包含 ",[26,140210,106],{},[26,140212,109],{}," 还有链接",[109,140215,139686,140216,140218,140219,140221,140222,140225,140226],{},[26,140217,109],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[26,140220,131272],{}," 2.设置 ",[26,140223,140224],{},"white-space: nowrap;"," 3. 设置 ",[26,140227,140228],{},"text-overflow: ellipsis;",[19,140230,139976],{},[38,140232,140234],{"className":126606,"code":140233,"language":126608,"meta":43,"style":43},"div {\n  overflow: hidden;\n}\n",[26,140235,140236,140242,140253],{"__ignoreMap":43},[47,140237,140238,140240],{"class":49,"line":50},[47,140239,51665],{"class":51354},[47,140241,15665],{"class":221},[47,140243,140244,140247,140249,140251],{"class":49,"line":92},[47,140245,140246],{"class":85},"  overflow",[47,140248,51491],{"class":221},[47,140250,61768],{"class":85},[47,140252,1384],{"class":221},[47,140254,140255],{"class":49,"line":1273},[47,140256,1659],{"class":221},[19,140258,140065],{},[38,140260,140261],{"className":126606,"code":140233,"language":126608,"meta":43,"style":43},[26,140262,140263,140269,140279],{"__ignoreMap":43},[47,140264,140265,140267],{"class":49,"line":50},[47,140266,51665],{"class":51354},[47,140268,15665],{"class":221},[47,140270,140271,140273,140275,140277],{"class":49,"line":92},[47,140272,140246],{"class":85},[47,140274,51491],{"class":221},[47,140276,61768],{"class":85},[47,140278,1384],{"class":221},[47,140280,140281],{"class":49,"line":1273},[47,140282,1659],{"class":221},[19,140284,140285,140286,140289],{},"2 号盒子为 ",[26,140287,140288],{},"lifeservice"," 生活服务模块 高度为 209px",[1556,140291],{"style":126462,"src":140292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[106,140294,140295,140298,140308,140332,140343],{},[109,140296,140297],{},"设置边框（左右下边框）",[109,140299,140300,140301,140304,140305,140307],{},"里面的内容 是 ",[26,140302,140303],{},"ul > 12*li","，给",[26,140306,109],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[109,140309,140310,140311],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[106,140312,140313,140318,140327],{},[109,140314,140315,140317],{},[26,140316,140288],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[109,140319,140320,140321,140323,140324,140326],{},"可以让 ",[26,140322,140288],{}," 里面的 ",[26,140325,106],{}," 宽度为 252，就可以装的下 4 个 小 li",[109,140328,140329,140331],{},[26,140330,140288],{}," 盒子 overflow 隐藏多余的部分就可以了",[109,140333,116521,140334,140336,140337,140339,140340,140342],{},[26,140335,109],{}," 里面放一个 ",[26,140338,660],{},"（里面放图标），下面的文本用 ",[26,140341,19],{}," 标签包裹",[109,140344,139106,140345,140347,140348,140350,140351,139140,140353,140356],{},[26,140346,660],{}," 设置 24px宽和28px的高（注意 ",[26,140349,660],{}," 是行内元素， 转成行内块），给 ",[26,140352,109],{},[26,140354,140355],{},"text-align:center"," 让里面内容居中显示",[19,140358,139976],{},[38,140360,140362],{"className":126606,"code":140361,"language":126608,"meta":43,"style":43},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[26,140363,140364,140382,140387,140397],{"__ignoreMap":43},[47,140365,140366,140368,140370,140372,140374,140376,140378,140380],{"class":49,"line":50},[47,140367,47],{"class":51354},[47,140369,12528],{"class":221},[47,140371,457],{"class":51354},[47,140373,12528],{"class":221},[47,140375,23646],{"class":51354},[47,140377,12528],{"class":221},[47,140379,369],{"class":51354},[47,140381,15665],{"class":221},[47,140383,140384],{"class":49,"line":92},[47,140385,140386],{"class":279},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[47,140388,140389,140391,140393,140395],{"class":49,"line":1273},[47,140390,128222],{"class":85},[47,140392,51491],{"class":221},[47,140394,128284],{"class":85},[47,140396,1384],{"class":221},[47,140398,140399],{"class":49,"line":1288},[47,140400,1659],{"class":221},[19,140402,140065],{},[38,140404,140405],{"className":126606,"code":140361,"language":126608,"meta":43,"style":43},[26,140406,140407,140425,140429,140439],{"__ignoreMap":43},[47,140408,140409,140411,140413,140415,140417,140419,140421,140423],{"class":49,"line":50},[47,140410,47],{"class":51354},[47,140412,12528],{"class":221},[47,140414,457],{"class":51354},[47,140416,12528],{"class":221},[47,140418,23646],{"class":51354},[47,140420,12528],{"class":221},[47,140422,369],{"class":51354},[47,140424,15665],{"class":221},[47,140426,140427],{"class":49,"line":92},[47,140428,140386],{"class":279},[47,140430,140431,140433,140435,140437],{"class":49,"line":1273},[47,140432,128222],{"class":85},[47,140434,51491],{"class":221},[47,140436,128284],{"class":85},[47,140438,1384],{"class":221},[47,140440,140441],{"class":49,"line":1288},[47,140442,1659],{"class":221},[19,140444,140445,140446,140449],{},"3 号盒子为 ",[26,140447,140448],{},"bargain"," 特价商品",[106,140451,140452],{},[109,140453,140454],{},"这个比较简单，直接插入一张图片即可",[19,140456,139976],{},[38,140458,140459],{"className":127353,"code":134108,"language":127355,"meta":43,"style":43},[26,140460,140461],{"__ignoreMap":43},[47,140462,140463,140465,140467,140469,140471,140473,140475,140477,140479,140481,140483,140485],{"class":49,"line":50},[47,140464,1129],{"class":221},[47,140466,1556],{"class":51354},[47,140468,55293],{"class":53},[47,140470,267],{"class":221},[47,140472,134123],{"class":81},[47,140474,55301],{"class":53},[47,140476,267],{"class":221},[47,140478,134130],{"class":81},[47,140480,134133],{"class":53},[47,140482,267],{"class":221},[47,140484,134138],{"class":81},[47,140486,51361],{"class":221},[19,140488,140065],{},[38,140490,140491],{"className":127353,"code":134108,"language":127355,"meta":43,"style":43},[26,140492,140493],{"__ignoreMap":43},[47,140494,140495,140497,140499,140501,140503,140505,140507,140509,140511,140513,140515,140517],{"class":49,"line":50},[47,140496,1129],{"class":221},[47,140498,1556],{"class":51354},[47,140500,55293],{"class":53},[47,140502,267],{"class":221},[47,140504,134123],{"class":81},[47,140506,55301],{"class":53},[47,140508,267],{"class":221},[47,140510,134130],{"class":81},[47,140512,134133],{"class":53},[47,140514,267],{"class":221},[47,140516,134138],{"class":81},[47,140518,51361],{"class":221},[187,140520,140522],{"id":140521},"_1612-推荐模块制作","16.1.2 推荐模块制作",[1556,140524],{"style":126462,"src":140525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,140527,140528,140529,140532],{},"大盒子 ",[26,140530,140531],{},"recom"," 推荐模块 recommend",[106,140534,140535],{},[109,140536,140537,140538,140540,140541,140544],{},"给这个 ",[26,140539,140531],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[26,140542,140543],{},"#ebebeb","），设置距离上边 12px",[19,140546,139976],{},[38,140548,140550],{"className":126606,"code":140549,"language":126608,"meta":43,"style":43},"div {\n  background-color: #f0f0f0;\n}\n",[26,140551,140552,140558,140569],{"__ignoreMap":43},[47,140553,140554,140556],{"class":49,"line":50},[47,140555,51665],{"class":51354},[47,140557,15665],{"class":221},[47,140559,140560,140562,140564,140567],{"class":49,"line":92},[47,140561,70932],{"class":85},[47,140563,51491],{"class":221},[47,140565,140566],{"class":85},"#f0f0f0",[47,140568,1384],{"class":221},[47,140570,140571],{"class":49,"line":1273},[47,140572,1659],{"class":221},[19,140574,140065],{},[38,140576,140577],{"className":126606,"code":140549,"language":126608,"meta":43,"style":43},[26,140578,140579,140585,140595],{"__ignoreMap":43},[47,140580,140581,140583],{"class":49,"line":50},[47,140582,51665],{"class":51354},[47,140584,15665],{"class":221},[47,140586,140587,140589,140591,140593],{"class":49,"line":92},[47,140588,70932],{"class":85},[47,140590,51491],{"class":221},[47,140592,140566],{"class":85},[47,140594,1384],{"class":221},[47,140596,140597],{"class":49,"line":1273},[47,140598,1659],{"class":221},[19,140600,140601],{},"里面包含 2 个盒子， 浮动即可",[19,140603,139976],{},[38,140605,140606],{"className":126606,"code":139276,"language":126608,"meta":43,"style":43},[26,140607,140608,140614,140624],{"__ignoreMap":43},[47,140609,140610,140612],{"class":49,"line":50},[47,140611,130454],{"class":53},[47,140613,15665],{"class":221},[47,140615,140616,140618,140620,140622],{"class":49,"line":92},[47,140617,131086],{"class":85},[47,140619,51491],{"class":221},[47,140621,23829],{"class":85},[47,140623,1384],{"class":221},[47,140625,140626],{"class":49,"line":1273},[47,140627,1659],{"class":221},[19,140629,140630,140631],{},"1 号盒子 ",[26,140632,140633],{},"recom_hd",[106,140635,140636,140639],{},[109,140637,140638],{},"设置宽度205px，高度163px",[109,140640,140110,140641,140643],{},[26,140642,1556],{},"标签，插入图片即可",[19,140645,139976],{},[38,140647,140648],{"className":127353,"code":134108,"language":127355,"meta":43,"style":43},[26,140649,140650],{"__ignoreMap":43},[47,140651,140652,140654,140656,140658,140660,140662,140664,140666,140668,140670,140672,140674],{"class":49,"line":50},[47,140653,1129],{"class":221},[47,140655,1556],{"class":51354},[47,140657,55293],{"class":53},[47,140659,267],{"class":221},[47,140661,134123],{"class":81},[47,140663,55301],{"class":53},[47,140665,267],{"class":221},[47,140667,134130],{"class":81},[47,140669,134133],{"class":53},[47,140671,267],{"class":221},[47,140673,134138],{"class":81},[47,140675,51361],{"class":221},[19,140677,140065],{},[38,140679,140680],{"className":127353,"code":134108,"language":127355,"meta":43,"style":43},[26,140681,140682],{"__ignoreMap":43},[47,140683,140684,140686,140688,140690,140692,140694,140696,140698,140700,140702,140704,140706],{"class":49,"line":50},[47,140685,1129],{"class":221},[47,140687,1556],{"class":51354},[47,140689,55293],{"class":53},[47,140691,267],{"class":221},[47,140693,134123],{"class":81},[47,140695,55301],{"class":53},[47,140697,267],{"class":221},[47,140699,134130],{"class":81},[47,140701,134133],{"class":53},[47,140703,267],{"class":221},[47,140705,134138],{"class":81},[47,140707,51361],{"class":221},[19,140709,140710,140711,140714],{},"2 号盒子 ",[26,140712,140713],{},"recom_bd"," ，注意里面的小竖线",[106,140716,140717,140728,140731,140736,140741],{},[109,140718,140719,140720,140722,140723,140725,140726],{},"右侧结构里面放 ",[26,140721,106],{}," 包含 4个 ",[26,140724,109],{},"，每个li里面包含一个",[26,140727,1556],{},[109,140729,140730],{},"直接利用切片工具把里面的内容当成一张图片",[109,140732,139106,140733,140735],{},[26,140734,109],{}," 设置浮动",[109,140737,139106,140738,140740],{},[26,140739,1556],{}," 设置宽高，宽度 248px，高度 163px",[109,140742,140743,140744,140304,140747,140749,140750,140752,140753],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[26,140745,140746],{},"top 10px",[26,140748,109],{},"设置相对定位（注意，最后一个",[26,140751,109],{},"不用设置伪元素），可以利用 ",[26,140754,140755],{},"nth-child(-n+3){...}",[19,140757,139976],{},[38,140759,140760],{"className":126606,"code":138448,"language":126608,"meta":43,"style":43},[26,140761,140762,140770,140780,140790],{"__ignoreMap":43},[47,140763,140764,140766,140768],{"class":49,"line":50},[47,140765,51665],{"class":51354},[47,140767,137607],{"class":53},[47,140769,15665],{"class":221},[47,140771,140772,140774,140776,140778],{"class":49,"line":92},[47,140773,137614],{"class":85},[47,140775,51491],{"class":221},[47,140777,7745],{"class":81},[47,140779,1384],{"class":221},[47,140781,140782,140784,140786,140788],{"class":49,"line":1273},[47,140783,128222],{"class":85},[47,140785,51491],{"class":221},[47,140787,60923],{"class":85},[47,140789,1384],{"class":221},[47,140791,140792],{"class":49,"line":1288},[47,140793,1659],{"class":221},[19,140795,140065],{},[38,140797,140798],{"className":126606,"code":138448,"language":126608,"meta":43,"style":43},[26,140799,140800,140808,140818,140828],{"__ignoreMap":43},[47,140801,140802,140804,140806],{"class":49,"line":50},[47,140803,51665],{"class":51354},[47,140805,137607],{"class":53},[47,140807,15665],{"class":221},[47,140809,140810,140812,140814,140816],{"class":49,"line":92},[47,140811,137614],{"class":85},[47,140813,51491],{"class":221},[47,140815,7745],{"class":81},[47,140817,1384],{"class":221},[47,140819,140820,140822,140824,140826],{"class":49,"line":1273},[47,140821,128222],{"class":85},[47,140823,51491],{"class":221},[47,140825,60923],{"class":85},[47,140827,1384],{"class":221},[47,140829,140830],{"class":49,"line":1288},[47,140831,1659],{"class":221},[187,140833,140835],{"id":140834},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[1556,140837],{"style":126462,"src":140838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,140840,140841],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,140843,140844],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,140846,140847,140850],{},[26,140848,140849],{},"box_hd"," 制作",[19,140852,140630,140853,140855],{},[26,140854,140849],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[1556,140857],{"style":126462,"src":140858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[106,140860,140861,140866,140871,140874],{},[109,140862,140863,140865],{},[26,140864,140849],{}," 给 30px 的高度，2个像素的下边框",[109,140867,140868,140869],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[26,140870,139117],{},[109,140872,140873],{},"左侧盒左浮动，右侧盒子右浮动",[109,140875,140876,140878,140879,140881],{},[26,140877,457],{},"标签之间的距离用左右的",[26,140880,30937],{},"撑开即可",[19,140883,140884],{},"结构代码",[38,140886,140887],{"className":126606,"code":139276,"language":126608,"meta":43,"style":43},[26,140888,140889,140895,140905],{"__ignoreMap":43},[47,140890,140891,140893],{"class":49,"line":50},[47,140892,130454],{"class":53},[47,140894,15665],{"class":221},[47,140896,140897,140899,140901,140903],{"class":49,"line":92},[47,140898,131086],{"class":85},[47,140900,51491],{"class":221},[47,140902,23829],{"class":85},[47,140904,1384],{"class":221},[47,140906,140907],{"class":49,"line":1273},[47,140908,1659],{"class":221},[19,140910,140911],{},"样式代码",[38,140913,140914],{"className":126606,"code":139276,"language":126608,"meta":43,"style":43},[26,140915,140916,140922,140932],{"__ignoreMap":43},[47,140917,140918,140920],{"class":49,"line":50},[47,140919,130454],{"class":53},[47,140921,15665],{"class":221},[47,140923,140924,140926,140928,140930],{"class":49,"line":92},[47,140925,131086],{"class":85},[47,140927,51491],{"class":221},[47,140929,23829],{"class":85},[47,140931,1384],{"class":221},[47,140933,140934],{"class":49,"line":1273},[47,140935,1659],{"class":221},[19,140937,140938,140850],{},[26,140939,140940],{},"box_bd",[19,140942,140943],{},"2 号盒子 box_bd，不要给高度",[1556,140945],{"style":126462,"src":140946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,140948,140949],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,140951,140952],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,140954,140955],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[106,140957,140958,140970,140986],{},[109,140959,140960,140962,140963,140966,140967,140969],{},[26,140961,140940],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[26,140964,140965],{},"tab_content","，在",[26,140968,140965],{}," 里面包裹tab选项卡对应的内容",[109,140971,140972,140973,140976,140977,140979,140980,140982,140983,140985],{},"内容被一个大盒子包裹（",[26,140974,140975],{},"tab_list_item","），里面是 ",[26,140978,106],{}," 包裹 5个 ",[26,140981,109],{},"，每个",[26,140984,109],{},"设置对应的宽度，然后设置浮动",[109,140987,140988,140989,140991,140992,140994,140995],{},"而这5个",[26,140990,109],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[26,140993,109],{},"设置",[106,140996,140997,141015,141018],{},[109,140998,140999,141000,141002,141003,141005,141006,141008,141009,141011,141012,141014],{},"第一个小 ",[26,141001,109],{}," 分为上下结构，上面是 ",[26,141004,106],{}," 包裹 ",[26,141007,109],{}," ，",[26,141010,109],{},"里面包裹 ",[26,141013,457],{},"，下面插入一张图片",[109,141016,141017],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[109,141019,141020,141021,141023,141024,141026,141027,141029],{},"后面的小 ",[26,141022,109],{}," 里面先放一个",[26,141025,457],{},"标签，然后在",[26,141028,457],{},"标签里面插入图片即可",[19,141031,140884],{},[38,141033,141034],{"className":127353,"code":134108,"language":127355,"meta":43,"style":43},[26,141035,141036],{"__ignoreMap":43},[47,141037,141038,141040,141042,141044,141046,141048,141050,141052,141054,141056,141058,141060],{"class":49,"line":50},[47,141039,1129],{"class":221},[47,141041,1556],{"class":51354},[47,141043,55293],{"class":53},[47,141045,267],{"class":221},[47,141047,134123],{"class":81},[47,141049,55301],{"class":53},[47,141051,267],{"class":221},[47,141053,134130],{"class":81},[47,141055,134133],{"class":53},[47,141057,267],{"class":221},[47,141059,134138],{"class":81},[47,141061,51361],{"class":221},[19,141063,140911],{},[38,141065,141066],{"className":127353,"code":134108,"language":127355,"meta":43,"style":43},[26,141067,141068],{"__ignoreMap":43},[47,141069,141070,141072,141074,141076,141078,141080,141082,141084,141086,141088,141090,141092],{"class":49,"line":50},[47,141071,1129],{"class":221},[47,141073,1556],{"class":51354},[47,141075,55293],{"class":53},[47,141077,267],{"class":221},[47,141079,134123],{"class":81},[47,141081,55301],{"class":53},[47,141083,267],{"class":221},[47,141085,134130],{"class":81},[47,141087,134133],{"class":53},[47,141089,267],{"class":221},[47,141091,134138],{"class":81},[47,141093,51361],{"class":221},[19,141095,141096],{},"tab栏切换需求！！！！！！介绍：",[1556,141098],{"style":126462,"src":141099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[106,141101,141102,141110,141116,141119],{},[109,141103,141104,141107,141108],{},[26,141105,141106],{},"tab","栏的布局是 ",[26,141109,139117],{},[109,141111,141112,141113,141115],{},"有多少个",[26,141114,141106],{},"选项卡，那么对应就有多少个内容",[109,141117,141118],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[109,141120,141121,141122,141125,141126,141128,141129,141131],{},"等后面我们学习了",[26,141123,141124],{},"js","之后，我们就会配合",[26,141127,141124],{},"来实现，",[26,141130,141106],{},"栏的切换",[14,141133,141135],{"id":141134},"_162-列表制作","16.2 列表制作",[187,141137,141139],{"id":141138},"_1621-准备工作","16.2.1 准备工作",[106,141141,141142,141145,141148,141151],{},[109,141143,141144],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[109,141146,141147],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[109,141149,141150],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[109,141152,141153],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[187,141155,141157,141158,101072,141160,141162],{"id":141156},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[26,141159,131611],{},[26,141161,53767],{}," 修改",[1556,141164],{"style":126462,"src":141165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[106,141167,141168],{},[109,141169,141170],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,141172,139976],{},[38,141174,141175],{"className":126606,"code":132038,"language":126608,"meta":43,"style":43},[26,141176,141177,141181,141195,141199,141213,141217,141231,141235,141249,141253],{"__ignoreMap":43},[47,141178,141179],{"class":49,"line":50},[47,141180,132045],{"class":279},[47,141182,141183,141185,141187,141189,141191,141193],{"class":49,"line":92},[47,141184,132050],{"class":53},[47,141186,79861],{"class":221},[47,141188,128966],{"class":85},[47,141190,51491],{"class":221},[47,141192,132059],{"class":85},[47,141194,129536],{"class":221},[47,141196,141197],{"class":49,"line":1273},[47,141198,132066],{"class":279},[47,141200,141201,141203,141205,141207,141209,141211],{"class":49,"line":1288},[47,141202,132071],{"class":53},[47,141204,79861],{"class":221},[47,141206,128966],{"class":85},[47,141208,51491],{"class":221},[47,141210,54818],{"class":85},[47,141212,129536],{"class":221},[47,141214,141215],{"class":49,"line":1294},[47,141216,132086],{"class":279},[47,141218,141219,141221,141223,141225,141227,141229],{"class":49,"line":1308},[47,141220,132091],{"class":53},[47,141222,79861],{"class":221},[47,141224,128966],{"class":85},[47,141226,51491],{"class":221},[47,141228,54885],{"class":85},[47,141230,129536],{"class":221},[47,141232,141233],{"class":49,"line":1314},[47,141234,132106],{"class":279},[47,141236,141237,141239,141241,141243,141245,141247],{"class":49,"line":1405},[47,141238,132111],{"class":53},[47,141240,79861],{"class":221},[47,141242,128966],{"class":85},[47,141244,51491],{"class":221},[47,141246,86287],{"class":85},[47,141248,129536],{"class":221},[47,141250,141251],{"class":49,"line":1411},[47,141252,132126],{"class":279},[47,141254,141255,141257,141259,141261,141263,141265],{"class":49,"line":1423},[47,141256,132131],{"class":53},[47,141258,79861],{"class":221},[47,141260,128966],{"class":85},[47,141262,51491],{"class":221},[47,141264,132140],{"class":85},[47,141266,129536],{"class":221},[19,141268,140065],{},[38,141270,141271],{"className":126606,"code":132038,"language":126608,"meta":43,"style":43},[26,141272,141273,141277,141291,141295,141309,141313,141327,141331,141345,141349],{"__ignoreMap":43},[47,141274,141275],{"class":49,"line":50},[47,141276,132045],{"class":279},[47,141278,141279,141281,141283,141285,141287,141289],{"class":49,"line":92},[47,141280,132050],{"class":53},[47,141282,79861],{"class":221},[47,141284,128966],{"class":85},[47,141286,51491],{"class":221},[47,141288,132059],{"class":85},[47,141290,129536],{"class":221},[47,141292,141293],{"class":49,"line":1273},[47,141294,132066],{"class":279},[47,141296,141297,141299,141301,141303,141305,141307],{"class":49,"line":1288},[47,141298,132071],{"class":53},[47,141300,79861],{"class":221},[47,141302,128966],{"class":85},[47,141304,51491],{"class":221},[47,141306,54818],{"class":85},[47,141308,129536],{"class":221},[47,141310,141311],{"class":49,"line":1294},[47,141312,132086],{"class":279},[47,141314,141315,141317,141319,141321,141323,141325],{"class":49,"line":1308},[47,141316,132091],{"class":53},[47,141318,79861],{"class":221},[47,141320,128966],{"class":85},[47,141322,51491],{"class":221},[47,141324,54885],{"class":85},[47,141326,129536],{"class":221},[47,141328,141329],{"class":49,"line":1314},[47,141330,132106],{"class":279},[47,141332,141333,141335,141337,141339,141341,141343],{"class":49,"line":1405},[47,141334,132111],{"class":53},[47,141336,79861],{"class":221},[47,141338,128966],{"class":85},[47,141340,51491],{"class":221},[47,141342,86287],{"class":85},[47,141344,129536],{"class":221},[47,141346,141347],{"class":49,"line":1411},[47,141348,132126],{"class":279},[47,141350,141351,141353,141355,141357,141359,141361],{"class":49,"line":1423},[47,141352,132131],{"class":53},[47,141354,79861],{"class":221},[47,141356,128966],{"class":85},[47,141358,51491],{"class":221},[47,141360,132140],{"class":85},[47,141362,129536],{"class":221},[106,141364,141365,141376],{},[109,141366,141367,141368,141371,141372,101072,141374],{},"1 号盒子左侧浮动 ",[26,141369,141370],{},"sk_list"," 里面包含 ",[26,141373,106],{},[26,141375,109],{},[109,141377,141378,141379,141371,141382,101072,141384],{},"2 号盒子左侧浮动 ",[26,141380,141381],{},"sk_con",[26,141383,106],{},[26,141385,109],{},[19,141387,139976],{},[38,141389,141390],{"className":126606,"code":139276,"language":126608,"meta":43,"style":43},[26,141391,141392,141398,141408],{"__ignoreMap":43},[47,141393,141394,141396],{"class":49,"line":50},[47,141395,130454],{"class":53},[47,141397,15665],{"class":221},[47,141399,141400,141402,141404,141406],{"class":49,"line":92},[47,141401,131086],{"class":85},[47,141403,51491],{"class":221},[47,141405,23829],{"class":85},[47,141407,1384],{"class":221},[47,141409,141410],{"class":49,"line":1273},[47,141411,1659],{"class":221},[19,141413,140065],{},[38,141415,141416],{"className":126606,"code":139276,"language":126608,"meta":43,"style":43},[26,141417,141418,141424,141434],{"__ignoreMap":43},[47,141419,141420,141422],{"class":49,"line":50},[47,141421,130454],{"class":53},[47,141423,15665],{"class":221},[47,141425,141426,141428,141430,141432],{"class":49,"line":92},[47,141427,131086],{"class":85},[47,141429,51491],{"class":221},[47,141431,23829],{"class":85},[47,141433,1384],{"class":221},[47,141435,141436],{"class":49,"line":1273},[47,141437,1659],{"class":221},[187,141439,141441,141442],{"id":141440},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[26,141443,141444],{},"sk_container",[1556,141446],{"style":126462,"src":141447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[106,141449,141450,141455],{},[109,141451,140630,141452,141454],{},[26,141453,141444],{}," 给宽度 1200，不要给高度",[109,141456,141457],{},"一定不要忘记清除浮动",[19,141459,139976],{},[38,141461,141462],{"className":126606,"code":139276,"language":126608,"meta":43,"style":43},[26,141463,141464,141470,141480],{"__ignoreMap":43},[47,141465,141466,141468],{"class":49,"line":50},[47,141467,130454],{"class":53},[47,141469,15665],{"class":221},[47,141471,141472,141474,141476,141478],{"class":49,"line":92},[47,141473,131086],{"class":85},[47,141475,51491],{"class":221},[47,141477,23829],{"class":85},[47,141479,1384],{"class":221},[47,141481,141482],{"class":49,"line":1273},[47,141483,1659],{"class":221},[171,141485,141486],{},[109,141487,141488],{},"sk_hd制作",[106,141490,141491],{},[109,141492,140710,141493,141496],{},[26,141494,141495],{},"sk_hd"," ，插入图片即可",[19,141498,139976],{},[38,141500,141501],{"className":127353,"code":134108,"language":127355,"meta":43,"style":43},[26,141502,141503],{"__ignoreMap":43},[47,141504,141505,141507,141509,141511,141513,141515,141517,141519,141521,141523,141525,141527],{"class":49,"line":50},[47,141506,1129],{"class":221},[47,141508,1556],{"class":51354},[47,141510,55293],{"class":53},[47,141512,267],{"class":221},[47,141514,134123],{"class":81},[47,141516,55301],{"class":53},[47,141518,267],{"class":221},[47,141520,134130],{"class":81},[47,141522,134133],{"class":53},[47,141524,267],{"class":221},[47,141526,134138],{"class":81},[47,141528,51361],{"class":221},[171,141530,141531],{"start":92},[109,141532,141533],{},"sk_bd制作",[106,141535,141536],{},[109,141537,141538,141539,141542,141543,101072,141545,141547],{},"3 号盒子 ",[26,141540,141541],{},"sk_bd"," ，里面包含很多的 ",[26,141544,106],{},[26,141546,109],{},[106,141548,141549,141558],{},[109,141550,141551,141552,141554,141555,141557],{},"当鼠标移入到 ",[26,141553,109],{}," 上面的时候显示红色的边框，在这里先给 ",[26,141556,109],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[109,141559,141560,141561,141563,141564,141566,141567,141570,141571,141573],{},"由于给每个 ",[26,141562,109],{}," 都设置了外边距，导致一行的最后一个 ",[26,141565,109],{}," 掉了下来，在这里我们利用 ",[26,141568,141569],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[26,141572,109],{},"，去掉外边距就好了",[19,141575,139976],{},[38,141577,141578],{"className":126606,"code":138795,"language":126608,"meta":43,"style":43},[26,141579,141580,141586,141598],{"__ignoreMap":43},[47,141581,141582,141584],{"class":49,"line":50},[47,141583,51665],{"class":51354},[47,141585,15665],{"class":221},[47,141587,141588,141590,141592,141594,141596],{"class":49,"line":92},[47,141589,70524],{"class":85},[47,141591,51491],{"class":221},[47,141593,411],{"class":85},[47,141595,51610],{"class":85},[47,141597,1384],{"class":221},[47,141599,141600],{"class":49,"line":1273},[47,141601,1659],{"class":221},[19,141603,140065],{},[38,141605,141606],{"className":126606,"code":138795,"language":126608,"meta":43,"style":43},[26,141607,141608,141614,141626],{"__ignoreMap":43},[47,141609,141610,141612],{"class":49,"line":50},[47,141611,51665],{"class":51354},[47,141613,15665],{"class":221},[47,141615,141616,141618,141620,141622,141624],{"class":49,"line":92},[47,141617,70524],{"class":85},[47,141619,51491],{"class":221},[47,141621,411],{"class":85},[47,141623,51610],{"class":85},[47,141625,1384],{"class":221},[47,141627,141628],{"class":49,"line":1273},[47,141629,1659],{"class":221},[14,141631,141633],{"id":141632},"_163-注册页面制作","16.3 注册页面制作",[1556,141635],{"style":126462,"src":141636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,141638,141639,141641],{},[369,141640,9118],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[1556,141643],{"style":126462,"src":141644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[187,141646,141648],{"id":141647},"_1631-准备工作","16.3.1 准备工作",[106,141650,141651,141654],{},[109,141652,141653],{},"创建register.html，引入 base.css，引入favicon图标",[109,141655,141656],{},"创建register.css ，在html页面进行引入",[187,141658,141660,141661,141663],{"id":141659},"_1632-header-头部实现","16.3.2 ",[26,141662,131611],{}," 头部实现",[106,141665,141666,141669],{},[109,141667,141668],{},"整个内容用 版心 进行包裹",[109,141670,141671],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,141673,139976],{},[38,141675,141676],{"className":127353,"code":134108,"language":127355,"meta":43,"style":43},[26,141677,141678],{"__ignoreMap":43},[47,141679,141680,141682,141684,141686,141688,141690,141692,141694,141696,141698,141700,141702],{"class":49,"line":50},[47,141681,1129],{"class":221},[47,141683,1556],{"class":51354},[47,141685,55293],{"class":53},[47,141687,267],{"class":221},[47,141689,134123],{"class":81},[47,141691,55301],{"class":53},[47,141693,267],{"class":221},[47,141695,134130],{"class":81},[47,141697,134133],{"class":53},[47,141699,267],{"class":221},[47,141701,134138],{"class":81},[47,141703,51361],{"class":221},[19,141705,140065],{},[38,141707,141708],{"className":127353,"code":134108,"language":127355,"meta":43,"style":43},[26,141709,141710],{"__ignoreMap":43},[47,141711,141712,141714,141716,141718,141720,141722,141724,141726,141728,141730,141732,141734],{"class":49,"line":50},[47,141713,1129],{"class":221},[47,141715,1556],{"class":51354},[47,141717,55293],{"class":53},[47,141719,267],{"class":221},[47,141721,134123],{"class":81},[47,141723,55301],{"class":53},[47,141725,267],{"class":221},[47,141727,134130],{"class":81},[47,141729,134133],{"class":53},[47,141731,267],{"class":221},[47,141733,134138],{"class":81},[47,141735,51361],{"class":221},[187,141737,141739,141740,141743],{"id":141738},"_1633-registerarea-主体模块实现","16.3.3 ",[26,141741,141742],{},"registerarea"," 主体模块实现",[1556,141745],{"style":126462,"src":141746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,141748,141749],{},"整个大盒子 高度为 522px，设置4个边框",[19,141751,139976],{},[38,141753,141754],{"className":126606,"code":130763,"language":126608,"meta":43,"style":43},[26,141755,141756,141762,141778],{"__ignoreMap":43},[47,141757,141758,141760],{"class":49,"line":50},[47,141759,51665],{"class":51354},[47,141761,15665],{"class":221},[47,141763,141764,141766,141768,141770,141772,141774,141776],{"class":49,"line":92},[47,141765,70950],{"class":85},[47,141767,51491],{"class":221},[47,141769,436],{"class":85},[47,141771,51546],{"class":217},[47,141773,51575],{"class":85},[47,141775,129998],{"class":85},[47,141777,1384],{"class":221},[47,141779,141780],{"class":49,"line":1273},[47,141781,1659],{"class":221},[19,141783,140065],{},[38,141785,141786],{"className":126606,"code":130763,"language":126608,"meta":43,"style":43},[26,141787,141788,141794,141810],{"__ignoreMap":43},[47,141789,141790,141792],{"class":49,"line":50},[47,141791,51665],{"class":51354},[47,141793,15665],{"class":221},[47,141795,141796,141798,141800,141802,141804,141806,141808],{"class":49,"line":92},[47,141797,70950],{"class":85},[47,141799,51491],{"class":221},[47,141801,436],{"class":85},[47,141803,51546],{"class":217},[47,141805,51575],{"class":85},[47,141807,129998],{"class":85},[47,141809,1384],{"class":221},[47,141811,141812],{"class":49,"line":1273},[47,141813,1659],{"class":221},[19,141815,141816],{},"1号盒子 是一个 h3 标签，放标题",[106,141818,141819],{},[109,141820,141821],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,141823,139976],{},[38,141825,141826],{"className":126606,"code":139276,"language":126608,"meta":43,"style":43},[26,141827,141828,141834,141844],{"__ignoreMap":43},[47,141829,141830,141832],{"class":49,"line":50},[47,141831,130454],{"class":53},[47,141833,15665],{"class":221},[47,141835,141836,141838,141840,141842],{"class":49,"line":92},[47,141837,131086],{"class":85},[47,141839,51491],{"class":221},[47,141841,23829],{"class":85},[47,141843,1384],{"class":221},[47,141845,141846],{"class":49,"line":1273},[47,141847,1659],{"class":221},[19,141849,140065],{},[38,141851,141852],{"className":126606,"code":139276,"language":126608,"meta":43,"style":43},[26,141853,141854,141860,141870],{"__ignoreMap":43},[47,141855,141856,141858],{"class":49,"line":50},[47,141857,130454],{"class":53},[47,141859,15665],{"class":221},[47,141861,141862,141864,141866,141868],{"class":49,"line":92},[47,141863,131086],{"class":85},[47,141865,51491],{"class":221},[47,141867,23829],{"class":85},[47,141869,1384],{"class":221},[47,141871,141872],{"class":49,"line":1273},[47,141873,1659],{"class":221},[19,141875,141876],{},"2号盒子 里面放注册的内容",[106,141878,141879,141882,141891,141905,141918,141921,141924,141942,141956],{},[109,141880,141881],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[109,141883,141884,141885,141887,141888,141890],{},"里面的内容利用 ",[26,141886,106],{}," 包含 ",[26,141889,109],{}," 来实现的（不需要用表格）",[109,141892,139120,141893,141895,141896,141898,141899,141901,141902,141904],{},[26,141894,109],{}," 里面，左侧放 ",[26,141897,33662],{}," 标签， 中间放",[26,141900,53875],{}," 标签， 右侧放 ",[26,141903,47],{}," 提示信息",[109,141906,141907,141908,141910,141911,141913,141914,141917],{},"左侧 ",[26,141909,33662],{},"里面的文字都是右对齐，我们可以给",[26,141912,33662],{},"设置一个宽度（88px），然后利用",[26,141915,141916],{},"text-align"," 来设置右对齐",[109,141919,141920],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[109,141922,141923],{},"右侧 span修饰一下文字颜色",[109,141925,141926,141927],{},"提示信息的样式优化",[106,141928,141929,141932,141935],{},[109,141930,141931],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[109,141933,141934],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[109,141936,141937,141938,141941],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[26,141939,141940],{},"vertical-algin"," 来设置 图片与文字对齐方式",[109,141943,141944,141945],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[106,141946,141947,141953],{},[109,141948,141949,141950,141952],{},"设置 ",[26,141951,23646],{}," 的 左右 12px 的内边距，设置一下文字颜色",[109,141954,141955],{},"分别设置 背景颜色",[109,141957,141958,141959,141961],{},"同意协议 和 完成注册 都是用 ",[26,141960,109],{}," 进行包裹",[19,141963,139976],{},[38,141965,141966],{"className":126606,"code":140549,"language":126608,"meta":43,"style":43},[26,141967,141968,141974,141984],{"__ignoreMap":43},[47,141969,141970,141972],{"class":49,"line":50},[47,141971,51665],{"class":51354},[47,141973,15665],{"class":221},[47,141975,141976,141978,141980,141982],{"class":49,"line":92},[47,141977,70932],{"class":85},[47,141979,51491],{"class":221},[47,141981,140566],{"class":85},[47,141983,1384],{"class":221},[47,141985,141986],{"class":49,"line":1273},[47,141987,1659],{"class":221},[19,141989,140065],{},[38,141991,141992],{"className":126606,"code":140549,"language":126608,"meta":43,"style":43},[26,141993,141994,142000,142010],{"__ignoreMap":43},[47,141995,141996,141998],{"class":49,"line":50},[47,141997,51665],{"class":51354},[47,141999,15665],{"class":221},[47,142001,142002,142004,142006,142008],{"class":49,"line":92},[47,142003,70932],{"class":85},[47,142005,51491],{"class":221},[47,142007,140566],{"class":85},[47,142009,1384],{"class":221},[47,142011,142012],{"class":49,"line":1273},[47,142013,1659],{"class":221},[187,142015,142017],{"id":142016},"_1634-底部实现","16.3.4 底部实现",[19,142019,139976],{},[38,142021,142022],{"className":126606,"code":140549,"language":126608,"meta":43,"style":43},[26,142023,142024,142030,142040],{"__ignoreMap":43},[47,142025,142026,142028],{"class":49,"line":50},[47,142027,51665],{"class":51354},[47,142029,15665],{"class":221},[47,142031,142032,142034,142036,142038],{"class":49,"line":92},[47,142033,70932],{"class":85},[47,142035,51491],{"class":221},[47,142037,140566],{"class":85},[47,142039,1384],{"class":221},[47,142041,142042],{"class":49,"line":1273},[47,142043,1659],{"class":221},[19,142045,140065],{},[38,142047,142048],{"className":127353,"code":130710,"language":127355,"meta":43,"style":43},[26,142049,142050,142054,142068,142072],{"__ignoreMap":43},[47,142051,142052],{"class":49,"line":50},[47,142053,130717],{"class":279},[47,142055,142056,142058,142060,142062,142064,142066],{"class":49,"line":92},[47,142057,1129],{"class":221},[47,142059,51665],{"class":51354},[47,142061,53540],{"class":53},[47,142063,267],{"class":221},[47,142065,130730],{"class":81},[47,142067,51361],{"class":221},[47,142069,142070],{"class":49,"line":1273},[47,142071,130737],{"class":221},[47,142073,142074,142076,142078],{"class":49,"line":1288},[47,142075,51839],{"class":221},[47,142077,51665],{"class":51354},[47,142079,51361],{"class":221},[14,142081,142083],{"id":142082},"_164-项目总结","16.4 项目总结",[171,142085,142086,142089,142092,142095],{},[109,142087,142088],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[109,142090,142091],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[109,142093,142094],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[109,142096,142097],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[1556,142099],{"style":126462,"src":142100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[171,142102,142103],{"start":1294},[109,142104,142105],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[1556,142107],{"style":126462,"src":142108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[171,142110,142111],{"start":1308},[109,142112,142113],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[1556,142115],{"style":126462,"src":142116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[38,142118,142119],{"className":127353,"code":136763,"language":127355,"meta":43,"style":43},[26,142120,142121],{"__ignoreMap":43},[47,142122,142123,142125,142127,142129,142131,142133,142135,142137,142139,142141,142143,142145],{"class":49,"line":50},[47,142124,1129],{"class":221},[47,142126,53875],{"class":51354},[47,142128,53878],{"class":53},[47,142130,267],{"class":221},[47,142132,62753],{"class":81},[47,142134,15013],{"class":53},[47,142136,267],{"class":221},[47,142138,136784],{"class":81},[47,142140,61074],{"class":53},[47,142142,267],{"class":221},[47,142144,136791],{"class":81},[47,142146,51361],{"class":221},[171,142148,142149,142152],{"start":1314},[109,142150,142151],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[109,142153,142154],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[134,142156,142157],{},"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":43,"searchDepth":92,"depth":92,"links":142159},[142160,142165,142172,142180],{"id":139786,"depth":92,"text":139787,"children":142161},[142162,142163,142164],{"id":139790,"depth":1273,"text":139791},{"id":140521,"depth":1273,"text":140522},{"id":140834,"depth":1273,"text":140835},{"id":141134,"depth":92,"text":141135,"children":142166},[142167,142168,142170],{"id":141138,"depth":1273,"text":141139},{"id":141156,"depth":1273,"text":142169},"16.2.2 列表页 header 和 nav 修改",{"id":141440,"depth":1273,"text":142171},"16.2.3 列表页主体 sk_container",{"id":141632,"depth":92,"text":141633,"children":142173},[142174,142175,142177,142179],{"id":141647,"depth":1273,"text":141648},{"id":141659,"depth":1273,"text":142176},"16.3.2 header 头部实现",{"id":141738,"depth":1273,"text":142178},"16.3.3 registerarea 主体模块实现",{"id":142016,"depth":1273,"text":142017},{"id":142082,"depth":92,"text":142083},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139778,"description":142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142187,"title":142188,"body":142189,"description":142,"extension":143,"meta":142297,"navigation":145,"path":142298,"seo":142299,"stem":142300,"__hash__":142301},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142190,"toc":142292},[142191,142194,142198,142201,142204,142213,142222,142226,142231,142238,142256,142259,142262,142265,142268,142271,142274,142277,142280,142283,142286,142289],[10,142192,142188],{"id":142193},"_17-web服务器与网站发布",[14,142195,142197],{"id":142196},"_171-web服务器","17.1 Web服务器",[19,142199,142200],{},"把自己网站上传到服务器上，可以让其他人访问",[1556,142202],{"style":126462,"src":142203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,142205,142206,142209,142210],{},[369,142207,142208],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[369,142211,142212],{},"Web 服务器等",[19,142214,142215,142216,101072,142219,25794],{},"根据服务器在网络中所在的位置不同，又可分为 ",[369,142217,142218],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[369,142220,142221],{},"远程服务器",[187,142223,142225],{"id":142224},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,142227,142228],{},[369,142229,142230],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,142232,142233,142234],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[457,142235,142236],{"href":142236,"rel":142237},"http:\u002F\u002Ffree.3v.do\u002F",[23956],[106,142239,142240,142243,142246,142253],{},[109,142241,142242],{},"去免费空间网站注册账号。",[109,142244,142245],{},"记录下主机名、用户名、密码、域名。",[109,142247,142248,142249,142252],{},"利用 ",[26,142250,142251],{},"utftp"," 软件 上传网站到远程服务器",[109,142254,142255],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,142257,142258],{},"使用软件上传，对上传软件文件进行解压",[1556,142260],{"style":126462,"src":142261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[1556,142263],{"style":126462,"src":142264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,142266,142267],{},"输入刚刚申请的服务器账号信息：",[1556,142269],{"style":126462,"src":142270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[1556,142272],{"style":126462,"src":142273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[1556,142275],{"style":126462,"src":142276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[1556,142278],{"style":126462,"src":142279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,142281,142282],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[1556,142284],{"style":126462,"src":142285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,142287,142288],{},"浏览器输入域名即可访问",[19,142290,142291],{},"首页一定必须是index",{"title":43,"searchDepth":92,"depth":92,"links":142293},[142294],{"id":142196,"depth":92,"text":142197,"children":142295},[142296],{"id":142224,"depth":1273,"text":142225},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142188,"description":142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142303,"title":142304,"body":142305,"description":142,"extension":143,"meta":143232,"navigation":145,"path":143233,"seo":143234,"stem":143235,"__hash__":143236},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142306,"toc":143215},[142307,142310,142314,142317,142320,142331,142334,142338,142342,142347,142350,142353,142356,142359,142363,142389,142393,142397,142400,142403,142407,142440,142444,142447,142450,142514,142518,142522,142525,142528,142531,142535,142580,142584,142587,142617,142621,142625,142628,142631,142635,142638,142707,142710,142818,142820,142826,142830,142833,142836,142932,142935,142939,142963,142967,142970,142974,142977,142981,142984,142987,142990,142993,142997,143000,143003,143007,143011,143014,143017,143020,143023,143027,143030,143034,143037,143040,143085,143089,143093,143096,143099,143102,143134,143138,143141,143175,143179,143182,143212],[10,142308,142304],{"id":142309},"_18-2d动画与3d转换",[14,142311,142313],{"id":142312},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,142315,142316],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,142318,142319],{},"转换（transform）你可以简单理解为变形",[106,142321,142322,142325,142328],{},[109,142323,142324],{},"移动：translate",[109,142326,142327],{},"旋转：rotate",[109,142329,142330],{},"缩放：scale",[1556,142332],{"style":126462,"src":142333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[187,142335,142337],{"id":142336},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22091,142339,142341],{"id":142340},"_18111-translate介绍","18.1.1.1 translate介绍",[19,142343,142344,142345],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[369,142346,133265],{},[1556,142348],{"style":126462,"src":142349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,142351,142352],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,142354,142355],{},"对于行内元素无效",[19,142357,142358],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22091,142360,142362],{"id":142361},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[38,142364,142365],{"className":126606,"code":138795,"language":126608,"meta":43,"style":43},[26,142366,142367,142373,142385],{"__ignoreMap":43},[47,142368,142369,142371],{"class":49,"line":50},[47,142370,51665],{"class":51354},[47,142372,15665],{"class":221},[47,142374,142375,142377,142379,142381,142383],{"class":49,"line":92},[47,142376,70524],{"class":85},[47,142378,51491],{"class":221},[47,142380,411],{"class":85},[47,142382,51610],{"class":85},[47,142384,1384],{"class":221},[47,142386,142387],{"class":49,"line":1273},[47,142388,1659],{"class":221},[187,142390,142392],{"id":142391},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22091,142394,142396],{"id":142395},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,142398,142399],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[1556,142401],{"style":126462,"src":142402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22091,142404,142406],{"id":142405},"_18122-旋转效果","18.1.2.2 旋转效果",[38,142408,142410],{"className":126606,"code":142409,"language":126608,"meta":43,"style":43},"div {\n  transform: rotate(45deg);\n}\n",[26,142411,142412,142418,142436],{"__ignoreMap":43},[47,142413,142414,142416],{"class":49,"line":50},[47,142415,51665],{"class":51354},[47,142417,15665],{"class":221},[47,142419,142420,142422,142424,142427,142429,142431,142434],{"class":49,"line":92},[47,142421,136590],{"class":85},[47,142423,51491],{"class":221},[47,142425,142426],{"class":85},"rotate",[47,142428,222],{"class":221},[47,142430,748],{"class":85},[47,142432,142433],{"class":217},"deg",[47,142435,2812],{"class":221},[47,142437,142438],{"class":49,"line":1273},[47,142439,1659],{"class":221},[22091,142441,142443],{"id":142442},"_18123-三角做法","18.1.2.3 三角做法",[19,142445,142446],{},"该下标当经过最外层大盒子时会实现向上反转",[1556,142448],{"style":126462,"src":142449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[38,142451,142452],{"className":126606,"code":135126,"language":126608,"meta":43,"style":43},[26,142453,142454,142458,142464,142474,142484,142500,142510],{"__ignoreMap":43},[47,142455,142456],{"class":49,"line":50},[47,142457,135133],{"class":279},[47,142459,142460,142462],{"class":49,"line":92},[47,142461,135138],{"class":53},[47,142463,15665],{"class":221},[47,142465,142466,142468,142470,142472],{"class":49,"line":1273},[47,142467,70622],{"class":85},[47,142469,51491],{"class":221},[47,142471,411],{"class":85},[47,142473,1384],{"class":221},[47,142475,142476,142478,142480,142482],{"class":49,"line":1288},[47,142477,70842],{"class":85},[47,142479,51491],{"class":221},[47,142481,411],{"class":85},[47,142483,1384],{"class":221},[47,142485,142486,142488,142490,142492,142494,142496,142498],{"class":49,"line":1294},[47,142487,70950],{"class":85},[47,142489,51491],{"class":221},[47,142491,665],{"class":85},[47,142493,51546],{"class":217},[47,142495,51575],{"class":85},[47,142497,64045],{"class":85},[47,142499,1384],{"class":221},[47,142501,142502,142504,142506,142508],{"class":49,"line":1308},[47,142503,135181],{"class":85},[47,142505,51491],{"class":221},[47,142507,62423],{"class":85},[47,142509,1384],{"class":221},[47,142511,142512],{"class":49,"line":1314},[47,142513,1659],{"class":221},[187,142515,142517],{"id":142516},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22091,142519,142521],{"id":142520},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,142523,142524],{},"设置中心点",[1556,142526],{"style":126462,"src":142527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,142529,142530],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22091,142532,142534],{"id":142533},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[38,142536,142538],{"className":126606,"code":142537,"language":126608,"meta":43,"style":43},"\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",[26,142539,142540,142545,142551,142566,142571,142576],{"__ignoreMap":43},[47,142541,142542],{"class":49,"line":50},[47,142543,142544],{"class":279},"\u002F* 转换中心点 *\u002F\n",[47,142546,142547,142549],{"class":49,"line":92},[47,142548,51665],{"class":51354},[47,142550,15665],{"class":221},[47,142552,142553,142556,142558,142560,142562,142564],{"class":49,"line":1273},[47,142554,142555],{"class":85},"  transform-origin",[47,142557,51491],{"class":221},[47,142559,51646],{"class":85},[47,142561,17237],{"class":85},[47,142563,130469],{"class":221},[47,142565,135279],{"class":279},[47,142567,142568],{"class":49,"line":1288},[47,142569,142570],{"class":279},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[47,142572,142573],{"class":49,"line":1294},[47,142574,142575],{"class":279},"  \u002F* transform-origin: left top; *\u002F\n",[47,142577,142578],{"class":49,"line":1308},[47,142579,1659],{"class":221},[22091,142581,142583],{"id":142582},"_18133-旋转案例","18.1.3.3 旋转案例",[1556,142585],{"style":126462,"src":142586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[38,142588,142589],{"className":126606,"code":142409,"language":126608,"meta":43,"style":43},[26,142590,142591,142597,142613],{"__ignoreMap":43},[47,142592,142593,142595],{"class":49,"line":50},[47,142594,51665],{"class":51354},[47,142596,15665],{"class":221},[47,142598,142599,142601,142603,142605,142607,142609,142611],{"class":49,"line":92},[47,142600,136590],{"class":85},[47,142602,51491],{"class":221},[47,142604,142426],{"class":85},[47,142606,222],{"class":221},[47,142608,748],{"class":85},[47,142610,142433],{"class":217},[47,142612,2812],{"class":221},[47,142614,142615],{"class":49,"line":1273},[47,142616,1659],{"class":221},[187,142618,142620],{"id":142619},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22091,142622,142624],{"id":142623},"_18141-scale介绍","18.1.4.1 scale介绍",[19,142626,142627],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[1556,142629],{"style":126462,"src":142630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22091,142632,142634],{"id":142633},"_18142-分页按钮","18.1.4.2 分页按钮",[1556,142636],{"style":126462,"src":142637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[38,142639,142641],{"className":126606,"code":142640,"language":126608,"meta":43,"style":43},"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",[26,142642,142643,142649,142665,142669,142673,142678,142684,142698,142703],{"__ignoreMap":43},[47,142644,142645,142647],{"class":49,"line":50},[47,142646,51665],{"class":51354},[47,142648,15665],{"class":221},[47,142650,142651,142653,142655,142658,142660,142663],{"class":49,"line":92},[47,142652,136590],{"class":85},[47,142654,51491],{"class":221},[47,142656,142657],{"class":85},"scale",[47,142659,222],{"class":221},[47,142661,142662],{"class":85},"1.2",[47,142664,2812],{"class":221},[47,142666,142667],{"class":49,"line":1273},[47,142668,1659],{"class":221},[47,142670,142671],{"class":49,"line":1288},[47,142672,136067],{"class":221},[47,142674,142675],{"class":49,"line":1294},[47,142676,142677],{"class":279},"\u002F* 2D 缩放 *\u002F\n",[47,142679,142680,142682],{"class":49,"line":1308},[47,142681,51665],{"class":51354},[47,142683,15665],{"class":221},[47,142685,142686,142688,142690,142692,142694,142696],{"class":49,"line":1314},[47,142687,136590],{"class":85},[47,142689,51491],{"class":221},[47,142691,142657],{"class":85},[47,142693,222],{"class":221},[47,142695,142662],{"class":85},[47,142697,2812],{"class":221},[47,142699,142700],{"class":49,"line":1405},[47,142701,142702],{"class":279},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[47,142704,142705],{"class":49,"line":1411},[47,142706,1659],{"class":221},[19,142708,142709],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[38,142711,142713],{"className":126606,"code":142712,"language":126608,"meta":43,"style":43},"\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",[26,142714,142715,142720,142730,142751,142772,142776,142781,142787,142814],{"__ignoreMap":43},[47,142716,142717],{"class":49,"line":50},[47,142718,142719],{"class":279},"\u002F* 定义动画 *\u002F\n",[47,142721,142722,142725,142728],{"class":49,"line":92},[47,142723,142724],{"class":217},"@keyframes",[47,142726,142727],{"class":5309}," move",[47,142729,15665],{"class":221},[47,142731,142732,142735,142737,142739,142741,142744,142746,142748],{"class":49,"line":1273},[47,142733,142734],{"class":53},"  0%",[47,142736,79861],{"class":221},[47,142738,48188],{"class":85},[47,142740,51491],{"class":221},[47,142742,142743],{"class":85},"translateX",[47,142745,222],{"class":221},[47,142747,411],{"class":85},[47,142749,142750],{"class":221},"); }\n",[47,142752,142753,142756,142758,142760,142762,142764,142766,142768,142770],{"class":49,"line":1288},[47,142754,142755],{"class":53},"  100%",[47,142757,79861],{"class":221},[47,142759,48188],{"class":85},[47,142761,51491],{"class":221},[47,142763,142743],{"class":85},[47,142765,222],{"class":221},[47,142767,530],{"class":85},[47,142769,51546],{"class":217},[47,142771,142750],{"class":221},[47,142773,142774],{"class":49,"line":1294},[47,142775,1659],{"class":221},[47,142777,142778],{"class":49,"line":1308},[47,142779,142780],{"class":279},"\u002F* 调用动画 *\u002F\n",[47,142782,142783,142785],{"class":49,"line":1314},[47,142784,51665],{"class":51354},[47,142786,15665],{"class":221},[47,142788,142789,142792,142794,142796,142798,142800,142802,142804,142806,142809,142812],{"class":49,"line":1405},[47,142790,142791],{"class":85},"  animation",[47,142793,51491],{"class":221},[47,142795,135292],{"class":85},[47,142797,25172],{"class":85},[47,142799,914],{"class":217},[47,142801,78734],{"class":85},[47,142803,4186],{"class":85},[47,142805,914],{"class":217},[47,142807,142808],{"class":85}," infinite",[47,142810,142811],{"class":85}," alternate",[47,142813,1384],{"class":221},[47,142815,142816],{"class":49,"line":1411},[47,142817,1659],{"class":221},[19,142819,142709],{},[38,142821,142824],{"className":142822,"code":142823,"language":5280},[5278],"\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",[26,142825,142823],{"__ignoreMap":43},[22091,142827,142829],{"id":142828},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,142831,142832],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[1556,142834],{"style":126462,"src":142835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[38,142837,142838],{"className":126606,"code":142712,"language":126608,"meta":43,"style":43},[26,142839,142840,142844,142852,142870,142890,142894,142898,142904,142928],{"__ignoreMap":43},[47,142841,142842],{"class":49,"line":50},[47,142843,142719],{"class":279},[47,142845,142846,142848,142850],{"class":49,"line":92},[47,142847,142724],{"class":217},[47,142849,142727],{"class":5309},[47,142851,15665],{"class":221},[47,142853,142854,142856,142858,142860,142862,142864,142866,142868],{"class":49,"line":1273},[47,142855,142734],{"class":53},[47,142857,79861],{"class":221},[47,142859,48188],{"class":85},[47,142861,51491],{"class":221},[47,142863,142743],{"class":85},[47,142865,222],{"class":221},[47,142867,411],{"class":85},[47,142869,142750],{"class":221},[47,142871,142872,142874,142876,142878,142880,142882,142884,142886,142888],{"class":49,"line":1288},[47,142873,142755],{"class":53},[47,142875,79861],{"class":221},[47,142877,48188],{"class":85},[47,142879,51491],{"class":221},[47,142881,142743],{"class":85},[47,142883,222],{"class":221},[47,142885,530],{"class":85},[47,142887,51546],{"class":217},[47,142889,142750],{"class":221},[47,142891,142892],{"class":49,"line":1294},[47,142893,1659],{"class":221},[47,142895,142896],{"class":49,"line":1308},[47,142897,142780],{"class":279},[47,142899,142900,142902],{"class":49,"line":1314},[47,142901,51665],{"class":51354},[47,142903,15665],{"class":221},[47,142905,142906,142908,142910,142912,142914,142916,142918,142920,142922,142924,142926],{"class":49,"line":1405},[47,142907,142791],{"class":85},[47,142909,51491],{"class":221},[47,142911,135292],{"class":85},[47,142913,25172],{"class":85},[47,142915,914],{"class":217},[47,142917,78734],{"class":85},[47,142919,4186],{"class":85},[47,142921,914],{"class":217},[47,142923,142808],{"class":85},[47,142925,142811],{"class":85},[47,142927,1384],{"class":221},[47,142929,142930],{"class":49,"line":1411},[47,142931,1659],{"class":221},[19,142933,142934],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[187,142936,142938],{"id":142937},"_1823-知识点回顾","18.2.3 知识点回顾",[38,142940,142941],{"className":126606,"code":128775,"language":126608,"meta":43,"style":43},[26,142942,142943,142949,142959],{"__ignoreMap":43},[47,142944,142945,142947],{"class":49,"line":50},[47,142946,51665],{"class":51354},[47,142948,15665],{"class":221},[47,142950,142951,142953,142955,142957],{"class":49,"line":92},[47,142952,128788],{"class":85},[47,142954,51491],{"class":221},[47,142956,61790],{"class":85},[47,142958,1384],{"class":221},[47,142960,142961],{"class":49,"line":1273},[47,142962,1659],{"class":221},[14,142964,142966],{"id":142965},"_183-3d-转换","18.3 3D 转换",[19,142968,142969],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[187,142971,142973],{"id":142972},"_1831-坐标轴认识","18.3.1 坐标轴认识",[1556,142975],{"style":126462,"src":142976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[187,142978,142980],{"id":142979},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[1556,142982],{"style":126462,"src":142983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,142985,142986],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,142988,142989],{},"translate3d的效果需要搭配透视perspective来使用",[1556,142991],{"style":126462,"src":142992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[187,142994,142996],{"id":142995},"_1833-透视-perspective","18.3.3 透视 perspective",[1556,142998],{"style":126462,"src":142999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,143001,143002],{},"透视写在父盒子上，单位为像素",[187,143004,143006],{"id":143005},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22091,143008,143010],{"id":143009},"_18341-分开解释","18.3.4.1 分开解释",[1556,143012],{"style":126462,"src":143013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[1556,143015],{"style":126462,"src":143016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[1556,143018],{"style":126462,"src":143019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,143021,143022],{},"总结来说就是左手原则",[22091,143024,143026],{"id":143025},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[1556,143028],{"style":126462,"src":143029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[187,143031,143033],{"id":143032},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[1556,143035],{"style":126462,"src":143036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[1556,143038],{"style":126462,"src":143039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[38,143041,143043],{"className":126606,"code":143042,"language":126608,"meta":43,"style":43},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[26,143044,143045,143051,143064,143081],{"__ignoreMap":43},[47,143046,143047,143049],{"class":49,"line":50},[47,143048,51665],{"class":51354},[47,143050,15665],{"class":221},[47,143052,143053,143056,143058,143060,143062],{"class":49,"line":92},[47,143054,143055],{"class":85},"  perspective",[47,143057,51491],{"class":221},[47,143059,65128],{"class":85},[47,143061,51546],{"class":217},[47,143063,1384],{"class":221},[47,143065,143066,143068,143070,143073,143075,143077,143079],{"class":49,"line":1273},[47,143067,136590],{"class":85},[47,143069,51491],{"class":221},[47,143071,143072],{"class":85},"rotateX",[47,143074,222],{"class":221},[47,143076,748],{"class":85},[47,143078,142433],{"class":217},[47,143080,2812],{"class":221},[47,143082,143083],{"class":49,"line":1288},[47,143084,1659],{"class":221},[187,143086,143088],{"id":143087},"_1836-案例","18.3.6 案例",[22091,143090,143092],{"id":143091},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[1556,143094],{"style":126462,"src":143095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[1556,143097],{"style":126462,"src":143098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[1556,143100],{"style":126462,"src":143101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[38,143103,143105],{"className":126606,"code":143104,"language":126608,"meta":43,"style":43},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[26,143106,143107,143112,143118,143130],{"__ignoreMap":43},[47,143108,143109],{"class":49,"line":50},[47,143110,143111],{"class":279},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[47,143113,143114,143116],{"class":49,"line":92},[47,143115,133603],{"class":53},[47,143117,15665],{"class":221},[47,143119,143120,143122,143124,143126,143128],{"class":49,"line":1273},[47,143121,143055],{"class":85},[47,143123,51491],{"class":221},[47,143125,65128],{"class":85},[47,143127,51546],{"class":217},[47,143129,1384],{"class":221},[47,143131,143132],{"class":49,"line":1288},[47,143133,1659],{"class":221},[22091,143135,143137],{"id":143136},"_18362-3d导航栏","18.3.6.2 3D导航栏",[1556,143139],{"style":126462,"src":143140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[38,143142,143143],{"className":127353,"code":130710,"language":127355,"meta":43,"style":43},[26,143144,143145,143149,143163,143167],{"__ignoreMap":43},[47,143146,143147],{"class":49,"line":50},[47,143148,130717],{"class":279},[47,143150,143151,143153,143155,143157,143159,143161],{"class":49,"line":92},[47,143152,1129],{"class":221},[47,143154,51665],{"class":51354},[47,143156,53540],{"class":53},[47,143158,267],{"class":221},[47,143160,130730],{"class":81},[47,143162,51361],{"class":221},[47,143164,143165],{"class":49,"line":1273},[47,143166,130737],{"class":221},[47,143168,143169,143171,143173],{"class":49,"line":1288},[47,143170,51839],{"class":221},[47,143172,51665],{"class":51354},[47,143174,51361],{"class":221},[22091,143176,143178],{"id":143177},"_18363-旋转木马","18.3.6.3 旋转木马",[1556,143180],{"style":126462,"src":143181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[38,143183,143184],{"className":126606,"code":142409,"language":126608,"meta":43,"style":43},[26,143185,143186,143192,143208],{"__ignoreMap":43},[47,143187,143188,143190],{"class":49,"line":50},[47,143189,51665],{"class":51354},[47,143191,15665],{"class":221},[47,143193,143194,143196,143198,143200,143202,143204,143206],{"class":49,"line":92},[47,143195,136590],{"class":85},[47,143197,51491],{"class":221},[47,143199,142426],{"class":85},[47,143201,222],{"class":221},[47,143203,748],{"class":85},[47,143205,142433],{"class":217},[47,143207,2812],{"class":221},[47,143209,143210],{"class":49,"line":1273},[47,143211,1659],{"class":221},[134,143213,143214],{},"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":43,"searchDepth":92,"depth":92,"links":143216},[143217,143224],{"id":142312,"depth":92,"text":142313,"children":143218},[143219,143220,143221,143222,143223],{"id":142336,"depth":1273,"text":142337},{"id":142391,"depth":1273,"text":142392},{"id":142516,"depth":1273,"text":142517},{"id":142619,"depth":1273,"text":142620},{"id":142937,"depth":1273,"text":142938},{"id":142965,"depth":92,"text":142966,"children":143225},[143226,143227,143228,143229,143230,143231],{"id":142972,"depth":1273,"text":142973},{"id":142979,"depth":1273,"text":142980},{"id":142995,"depth":1273,"text":142996},{"id":143005,"depth":1273,"text":143006},{"id":143032,"depth":1273,"text":143033},{"id":143087,"depth":1273,"text":143088},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142304,"description":142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143238,"title":143239,"body":143240,"description":142,"extension":143,"meta":143443,"navigation":145,"path":143444,"seo":143445,"stem":143446,"__hash__":143447},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143241,"toc":143432},[143242,143245,143249,143252,143255,143259,143262,143265,143268,143272,143275,143279,143282,143286,143289,143293,143307,143311,143336,143339,143342,143359,143363,143367,143370,143373,143377,143380,143383,143401,143405,143408,143422,143426,143429],[10,143243,143239],{"id":143244},"_19-移动端基础-前缀现状与视口",[14,143246,143248],{"id":143247},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[1556,143250],{"style":126462,"src":143251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,143253,143254],{},"意思就是加个前缀，增加兼容性",[14,143256,143258],{"id":143257},"_192-移动端现状认识","19.2 移动端现状认识",[1556,143260],{"style":126462,"src":143261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,143263,143264],{},"调试方法：",[1556,143266],{"style":126462,"src":143267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,143269,143271],{"id":143270},"_193-视口","19.3 视口",[19,143273,143274],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[187,143276,143278],{"id":143277},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[1556,143280],{"style":126462,"src":143281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[187,143283,143285],{"id":143284},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[1556,143287],{"style":126462,"src":143288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[187,143290,143292],{"id":143291},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[106,143294,143295,143298,143301,143304],{},[109,143296,143297],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[109,143299,143300],{},"理想视口，对设备来讲，是最理想的视口尺寸",[109,143302,143303],{},"需要手动添写meta视口标签通知浏览器操作",[109,143305,143306],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[187,143308,143310],{"id":143309},"_1934-meta视口标签","19.3.4 meta视口标签",[38,143312,143314],{"className":127353,"code":143313,"language":127355,"meta":43,"style":43},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[26,143315,143316],{"__ignoreMap":43},[47,143317,143318,143320,143322,143324,143326,143328,143330,143332,143334],{"class":49,"line":50},[47,143319,1129],{"class":221},[47,143321,51398],{"class":51354},[47,143323,15013],{"class":53},[47,143325,267],{"class":221},[47,143327,51445],{"class":81},[47,143329,51425],{"class":53},[47,143331,267],{"class":221},[47,143333,51452],{"class":81},[47,143335,51361],{"class":221},[1556,143337],{"style":126462,"src":143338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,143340,143341],{},"标准视口设置：",[171,143343,143344,143347,143350,143353,143356],{},[109,143345,143346],{},"视口宽度和设备保持一致",[109,143348,143349],{},"视口的默认缩放比例1.0",[109,143351,143352],{},"不允许用户自行缩放",[109,143354,143355],{},"最大允许的缩放比例1.0",[109,143357,143358],{},"最小允许的缩放比例1.0",[187,143360,143362],{"id":143361},"_1935-二倍图","19.3.5 二倍图",[22091,143364,143366],{"id":143365},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[1556,143368],{"style":126462,"src":143369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[1556,143371],{"style":126462,"src":143372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22091,143374,143376],{"id":143375},"_19352-多倍图","19.3.5.2 多倍图",[1556,143378],{"style":126462,"src":143379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,143381,143382],{},"二倍图法，代码如下：",[38,143384,143386],{"className":126606,"code":143385,"language":126608,"meta":43,"style":43},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[26,143387,143388,143393],{"__ignoreMap":43},[47,143389,143390],{"class":49,"line":50},[47,143391,143392],{"class":279},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[47,143394,143395,143398],{"class":49,"line":92},[47,143396,143397],{"class":51354},"background-size",[47,143399,143400],{"class":221},": 50% 50%;\n",[22091,143402,143404],{"id":143403},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[1556,143406],{"style":126462,"src":143407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[171,143409,143410,143413,143416,143419],{},[109,143411,143412],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[109,143414,143415],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[109,143417,143418],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[109,143420,143421],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22091,143423,143425],{"id":143424},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[1556,143427],{"style":126462,"src":143428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[134,143430,143431],{},"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":43,"searchDepth":92,"depth":92,"links":143433},[143434,143435,143436],{"id":143247,"depth":92,"text":143248},{"id":143257,"depth":92,"text":143258},{"id":143270,"depth":92,"text":143271,"children":143437},[143438,143439,143440,143441,143442],{"id":143277,"depth":1273,"text":143278},{"id":143284,"depth":1273,"text":143285},{"id":143291,"depth":1273,"text":143292},{"id":143309,"depth":1273,"text":143310},{"id":143361,"depth":1273,"text":143362},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143239,"description":142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143449,"title":143450,"body":143451,"description":142,"extension":143,"meta":144328,"navigation":145,"path":144329,"seo":144330,"stem":144331,"__hash__":144332},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143452,"toc":144312},[143453,143456,143460,143467,143470,143477,143480,143485,143488,143492,143496,143503,143506,143509,143513,143516,143519,143522,143525,143528,143532,143535,143539,143541,143544,143547,143550,143553,143555,143558,143560,143590,143592,143622,143626,143629,143633,143636,143653,143656,143659,143735,143737,143740,143743,143746,143749,143751,143754,143757,143761,143783,143786,143789,143793,143796,143802,143805,143809,143812,143815,143819,143822,143825,143828,143832,143835,143838,143841,143844,143848,143851,143855,143862,143865,143868,143871,143874,143884,143887,143890,143897,143900,143904,143907,143910,143914,143917,143920,143923,143968,143971,143974,143977,143979,144108,144110,144148,144151,144154,144156,144274,144276,144310],[10,143454,143450],{"id":143455},"_20-移动端布局实战上篇",[14,143457,143459],{"id":143458},"_201-移动端主流方案","20.1 移动端主流方案",[171,143461,143462],{},[109,143463,143464],{},[369,143465,143466],{},"单独移动端页面（主流）",[1556,143468],{"style":126462,"src":143469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[171,143471,143472],{"start":92},[109,143473,143474],{},[369,143475,143476],{},"响应式兼容PC移动端",[1556,143478],{"style":126462,"src":143479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[171,143481,143482],{"start":1273},[109,143483,143484],{},"两种页面选型布局方式",[1556,143486],{"style":126462,"src":143487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,143489,143491],{"id":143490},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[187,143493,143495],{"id":143494},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,143497,143498,143499],{},"官网地址： ",[457,143500,143501],{"href":143501,"rel":143502},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[23956],[1556,143504],{"style":126462,"src":143505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[1556,143507],{"style":126462,"src":143508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[187,143510,143512],{"id":143511},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[1556,143514],{"style":126462,"src":143515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[1556,143517],{"style":126462,"src":143518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,143520,143521],{},"去除高亮：",[19,143523,143524],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,143526,143527],{},"-webkit- tap-highlight-color: transparent;",[14,143529,143531],{"id":143530},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[1556,143533],{"style":126462,"src":143534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,143536,143538],{"id":143537},"_204-流式布局案例","20.4 流式布局案例",[19,143540,251],{},[19,143542,143543],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,143545,143546],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,143548,143549],{},"图片格式：",[1556,143551],{"style":126462,"src":143552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,143554,135649],{},[1556,143556],{"style":126462,"src":143557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,143559,139976],{},[38,143561,143562],{"className":127353,"code":134108,"language":127355,"meta":43,"style":43},[26,143563,143564],{"__ignoreMap":43},[47,143565,143566,143568,143570,143572,143574,143576,143578,143580,143582,143584,143586,143588],{"class":49,"line":50},[47,143567,1129],{"class":221},[47,143569,1556],{"class":51354},[47,143571,55293],{"class":53},[47,143573,267],{"class":221},[47,143575,134123],{"class":81},[47,143577,55301],{"class":53},[47,143579,267],{"class":221},[47,143581,134130],{"class":81},[47,143583,134133],{"class":53},[47,143585,267],{"class":221},[47,143587,134138],{"class":81},[47,143589,51361],{"class":221},[19,143591,140065],{},[38,143593,143594],{"className":127353,"code":134108,"language":127355,"meta":43,"style":43},[26,143595,143596],{"__ignoreMap":43},[47,143597,143598,143600,143602,143604,143606,143608,143610,143612,143614,143616,143618,143620],{"class":49,"line":50},[47,143599,1129],{"class":221},[47,143601,1556],{"class":51354},[47,143603,55293],{"class":53},[47,143605,267],{"class":221},[47,143607,134123],{"class":81},[47,143609,55301],{"class":53},[47,143611,267],{"class":221},[47,143613,134130],{"class":81},[47,143615,134133],{"class":53},[47,143617,267],{"class":221},[47,143619,134138],{"class":81},[47,143621,51361],{"class":221},[14,143623,143625],{"id":143624},"_205-flex布局","20.5 flex布局",[1556,143627],{"style":126462,"src":143628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[187,143630,143632],{"id":143631},"_2051-布局原理","20.5.1 布局原理",[19,143634,143635],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[106,143637,143638,143641,143644,143647,143650],{},[109,143639,143640],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[109,143642,143643],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[109,143645,143646],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[109,143648,143649],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[109,143651,143652],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,143654,143655],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,143657,143658],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[38,143660,143662],{"className":126606,"code":143661,"language":126608,"meta":43,"style":43},"\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",[26,143663,143664,143669,143676,143686,143698,143709,143720,143731],{"__ignoreMap":43},[47,143665,143666],{"class":49,"line":50},[47,143667,143668],{"class":279},"\u002F* Flex 弹性布局 *\u002F\n",[47,143670,143671,143674],{"class":49,"line":92},[47,143672,143673],{"class":53},".container",[47,143675,15665],{"class":221},[47,143677,143678,143680,143682,143684],{"class":49,"line":1273},[47,143679,128222],{"class":85},[47,143681,51491],{"class":221},[47,143683,51531],{"class":85},[47,143685,1384],{"class":221},[47,143687,143688,143691,143693,143696],{"class":49,"line":1288},[47,143689,143690],{"class":85},"  flex-direction",[47,143692,51491],{"class":221},[47,143694,143695],{"class":85},"row",[47,143697,1384],{"class":221},[47,143699,143700,143703,143705,143707],{"class":49,"line":1294},[47,143701,143702],{"class":85},"  justify-content",[47,143704,51491],{"class":221},[47,143706,51722],{"class":85},[47,143708,1384],{"class":221},[47,143710,143711,143714,143716,143718],{"class":49,"line":1308},[47,143712,143713],{"class":85},"  align-items",[47,143715,51491],{"class":221},[47,143717,51646],{"class":85},[47,143719,1384],{"class":221},[47,143721,143722,143725,143727,143729],{"class":49,"line":1314},[47,143723,143724],{"class":85},"  flex-wrap",[47,143726,51491],{"class":221},[47,143728,78664],{"class":85},[47,143730,1384],{"class":221},[47,143732,143733],{"class":49,"line":1405},[47,143734,1659],{"class":221},[19,143736,70507],{},[19,143738,143739],{},".form-item .male-label {",[19,143741,143742],{},"   margin-right: 20px;",[19,143744,143745],{},"   display: inline-flex;",[19,143747,143748],{},"   align-items: center;",[19,143750,1165],{},[1556,143752],{"style":126462,"src":143753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[1556,143755],{"style":126462,"src":143756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[187,143758,143760],{"id":143759},"_2052-常见父项属性","20.5.2 常见父项属性",[171,143762,143763,143766,143769,143772,143775,143778,143781],{},[109,143764,143765],{},"flex-direction：设置主轴的方向",[109,143767,143768],{},"justify-content：设置主轴上的子元素排列方式",[109,143770,143771],{},"flex-wrap：设置子元素是否换行",[109,143773,143774],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[109,143776,143777],{},"align-items：设置侧轴上的子元素排列方式（单行）",[109,143779,143780],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[109,143782,143765],{},[1556,143784],{"style":126462,"src":143785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[1556,143787],{"style":126462,"src":143788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[171,143790,143791],{"start":92},[109,143792,143768],{},[1556,143794],{"style":126462,"src":143795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,143797,143798,143801],{},[26,143799,143800],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,143803,143804],{},"跟着主轴走",[171,143806,143807],{"start":1273},[109,143808,143771],{},[1556,143810],{"style":126462,"src":143811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,143813,143814],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[171,143816,143817],{"start":1288},[109,143818,143774],{},[1556,143820],{"style":126462,"src":143821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,143823,143824],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,143826,143827],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[171,143829,143830],{"start":1294},[109,143831,143777],{},[1556,143833],{"style":126462,"src":143834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,143836,143837],{},"align-items与align-content之间的区别：",[19,143839,143840],{},"单找items，多找content",[1556,143842],{"style":126462,"src":143843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[171,143845,143846],{"start":1308},[109,143847,143780],{},[1556,143849],{"style":126462,"src":143850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[187,143852,143854],{"id":143853},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[171,143856,143857],{},[109,143858,143859],{},[369,143860,143861],{},"flex 属性",[19,143863,143864],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[1556,143866],{"style":126462,"src":143867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,143869,143870],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,143872,143873],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[171,143875,143876],{"start":92},[109,143877,143878,13888,143881],{},[369,143879,143880],{},"align-self",[369,143882,143883],{},"控制子项自己在侧轴上的排列方式",[1556,143885],{"style":126462,"src":143886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,143888,143889],{},"单个子盒子在父盒子侧轴上的排列方式",[171,143891,143892],{"start":1273},[109,143893,143894,143896],{},[369,143895,95351],{}," 属性定义项目的排列顺序",[1556,143898],{"style":126462,"src":143899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[187,143901,143903],{"id":143902},"_2054-背景线性渐变","20.5.4 背景线性渐变",[1556,143905],{"style":126462,"src":143906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,143908,143909],{},"必须要添加浏览器的私有前缀",[187,143911,143913],{"id":143912},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,143915,143916],{},"学到最重要的知识：",[19,143918,143919],{},"flex处理这样的布局思路",[1556,143921],{"style":126462,"src":143922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[38,143924,143926],{"className":126606,"code":143925,"language":126608,"meta":43,"style":43},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[26,143927,143928,143934,143944,143954,143964],{"__ignoreMap":43},[47,143929,143930,143932],{"class":49,"line":50},[47,143931,143673],{"class":53},[47,143933,15665],{"class":221},[47,143935,143936,143938,143940,143942],{"class":49,"line":92},[47,143937,128222],{"class":85},[47,143939,51491],{"class":221},[47,143941,51531],{"class":85},[47,143943,1384],{"class":221},[47,143945,143946,143948,143950,143952],{"class":49,"line":1273},[47,143947,143702],{"class":85},[47,143949,51491],{"class":221},[47,143951,51646],{"class":85},[47,143953,1384],{"class":221},[47,143955,143956,143958,143960,143962],{"class":49,"line":1288},[47,143957,143713],{"class":85},[47,143959,51491],{"class":221},[47,143961,51646],{"class":85},[47,143963,1384],{"class":221},[47,143965,143966],{"class":49,"line":1294},[47,143967,1659],{"class":221},[19,143969,143970],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,143972,143973],{},"使用属性选择器",[1556,143975],{"style":126462,"src":143976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,143978,68943],{},[38,143980,143982],{"className":127353,"code":143981,"language":127355,"meta":43,"style":43},"\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",[26,143983,143984,143989,144003,144008,144028,144033,144052,144057,144076,144081,144100],{"__ignoreMap":43},[47,143985,143986],{"class":49,"line":50},[47,143987,143988],{"class":279},"\u003C!-- 携程网移动端案例结构 -->\n",[47,143990,143991,143993,143995,143997,143999,144001],{"class":49,"line":92},[47,143992,1129],{"class":221},[47,143994,51665],{"class":51354},[47,143996,53540],{"class":53},[47,143998,267],{"class":221},[47,144000,92377],{"class":81},[47,144002,51361],{"class":221},[47,144004,144005],{"class":49,"line":1273},[47,144006,144007],{"class":279},"  \u003C!-- 搜索栏 -->\n",[47,144009,144010,144012,144014,144016,144018,144021,144024,144026],{"class":49,"line":1288},[47,144011,52198],{"class":221},[47,144013,51665],{"class":51354},[47,144015,53540],{"class":53},[47,144017,267],{"class":221},[47,144019,144020],{"class":81},"\"search-index\"",[47,144022,144023],{"class":221},">...\u003C\u002F",[47,144025,51665],{"class":51354},[47,144027,51361],{"class":221},[47,144029,144030],{"class":49,"line":1294},[47,144031,144032],{"class":279},"  \u003C!-- 焦点图 -->\n",[47,144034,144035,144037,144039,144041,144043,144046,144048,144050],{"class":49,"line":1308},[47,144036,52198],{"class":221},[47,144038,51665],{"class":51354},[47,144040,53540],{"class":53},[47,144042,267],{"class":221},[47,144044,144045],{"class":81},"\"focus\"",[47,144047,144023],{"class":221},[47,144049,51665],{"class":51354},[47,144051,51361],{"class":221},[47,144053,144054],{"class":49,"line":1314},[47,144055,144056],{"class":279},"  \u003C!-- 主导航 -->\n",[47,144058,144059,144061,144063,144065,144067,144070,144072,144074],{"class":49,"line":1405},[47,144060,52198],{"class":221},[47,144062,51665],{"class":51354},[47,144064,53540],{"class":53},[47,144066,267],{"class":221},[47,144068,144069],{"class":81},"\"local-nav\"",[47,144071,144023],{"class":221},[47,144073,51665],{"class":51354},[47,144075,51361],{"class":221},[47,144077,144078],{"class":49,"line":1411},[47,144079,144080],{"class":279},"  \u003C!-- 子导航 -->\n",[47,144082,144083,144085,144087,144089,144091,144094,144096,144098],{"class":49,"line":1423},[47,144084,52198],{"class":221},[47,144086,51665],{"class":51354},[47,144088,53540],{"class":53},[47,144090,267],{"class":221},[47,144092,144093],{"class":81},"\"nav-common\"",[47,144095,144023],{"class":221},[47,144097,51665],{"class":51354},[47,144099,51361],{"class":221},[47,144101,144102,144104,144106],{"class":49,"line":1706},[47,144103,51839],{"class":221},[47,144105,51665],{"class":51354},[47,144107,51361],{"class":221},[19,144109,70507],{},[38,144111,144112],{"className":126606,"code":137058,"language":126608,"meta":43,"style":43},[26,144113,144114,144128,144144],{"__ignoreMap":43},[47,144115,144116,144118,144120,144122,144124,144126],{"class":49,"line":50},[47,144117,53875],{"class":51354},[47,144119,1109],{"class":221},[47,144121,103161],{"class":53},[47,144123,267],{"class":217},[47,144125,62753],{"class":81},[47,144127,137075],{"class":221},[47,144129,144130,144132,144134,144136,144138,144140,144142],{"class":49,"line":92},[47,144131,70950],{"class":85},[47,144133,51491],{"class":221},[47,144135,436],{"class":85},[47,144137,51546],{"class":217},[47,144139,51575],{"class":85},[47,144141,130186],{"class":85},[47,144143,1384],{"class":221},[47,144145,144146],{"class":49,"line":1273},[47,144147,1659],{"class":221},[19,144149,144150],{},"总代码和效果展示：",[1556,144152],{"style":126462,"src":144153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,144155,68943],{},[38,144157,144158],{"className":127353,"code":143981,"language":127355,"meta":43,"style":43},[26,144159,144160,144164,144178,144182,144200,144204,144222,144226,144244,144248,144266],{"__ignoreMap":43},[47,144161,144162],{"class":49,"line":50},[47,144163,143988],{"class":279},[47,144165,144166,144168,144170,144172,144174,144176],{"class":49,"line":92},[47,144167,1129],{"class":221},[47,144169,51665],{"class":51354},[47,144171,53540],{"class":53},[47,144173,267],{"class":221},[47,144175,92377],{"class":81},[47,144177,51361],{"class":221},[47,144179,144180],{"class":49,"line":1273},[47,144181,144007],{"class":279},[47,144183,144184,144186,144188,144190,144192,144194,144196,144198],{"class":49,"line":1288},[47,144185,52198],{"class":221},[47,144187,51665],{"class":51354},[47,144189,53540],{"class":53},[47,144191,267],{"class":221},[47,144193,144020],{"class":81},[47,144195,144023],{"class":221},[47,144197,51665],{"class":51354},[47,144199,51361],{"class":221},[47,144201,144202],{"class":49,"line":1294},[47,144203,144032],{"class":279},[47,144205,144206,144208,144210,144212,144214,144216,144218,144220],{"class":49,"line":1308},[47,144207,52198],{"class":221},[47,144209,51665],{"class":51354},[47,144211,53540],{"class":53},[47,144213,267],{"class":221},[47,144215,144045],{"class":81},[47,144217,144023],{"class":221},[47,144219,51665],{"class":51354},[47,144221,51361],{"class":221},[47,144223,144224],{"class":49,"line":1314},[47,144225,144056],{"class":279},[47,144227,144228,144230,144232,144234,144236,144238,144240,144242],{"class":49,"line":1405},[47,144229,52198],{"class":221},[47,144231,51665],{"class":51354},[47,144233,53540],{"class":53},[47,144235,267],{"class":221},[47,144237,144069],{"class":81},[47,144239,144023],{"class":221},[47,144241,51665],{"class":51354},[47,144243,51361],{"class":221},[47,144245,144246],{"class":49,"line":1411},[47,144247,144080],{"class":279},[47,144249,144250,144252,144254,144256,144258,144260,144262,144264],{"class":49,"line":1423},[47,144251,52198],{"class":221},[47,144253,51665],{"class":51354},[47,144255,53540],{"class":53},[47,144257,267],{"class":221},[47,144259,144093],{"class":81},[47,144261,144023],{"class":221},[47,144263,51665],{"class":51354},[47,144265,51361],{"class":221},[47,144267,144268,144270,144272],{"class":49,"line":1706},[47,144269,51839],{"class":221},[47,144271,51665],{"class":51354},[47,144273,51361],{"class":221},[19,144275,70507],{},[38,144277,144278],{"className":127353,"code":130710,"language":127355,"meta":43,"style":43},[26,144279,144280,144284,144298,144302],{"__ignoreMap":43},[47,144281,144282],{"class":49,"line":50},[47,144283,130717],{"class":279},[47,144285,144286,144288,144290,144292,144294,144296],{"class":49,"line":92},[47,144287,1129],{"class":221},[47,144289,51665],{"class":51354},[47,144291,53540],{"class":53},[47,144293,267],{"class":221},[47,144295,130730],{"class":81},[47,144297,51361],{"class":221},[47,144299,144300],{"class":49,"line":1273},[47,144301,130737],{"class":221},[47,144303,144304,144306,144308],{"class":49,"line":1288},[47,144305,51839],{"class":221},[47,144307,51665],{"class":51354},[47,144309,51361],{"class":221},[134,144311,138007],{},{"title":43,"searchDepth":92,"depth":92,"links":144313},[144314,144315,144319,144320,144321],{"id":143458,"depth":92,"text":143459},{"id":143490,"depth":92,"text":143491,"children":144316},[144317,144318],{"id":143494,"depth":1273,"text":143495},{"id":143511,"depth":1273,"text":143512},{"id":143530,"depth":92,"text":143531},{"id":143537,"depth":92,"text":143538},{"id":143624,"depth":92,"text":143625,"children":144322},[144323,144324,144325,144326,144327],{"id":143631,"depth":1273,"text":143632},{"id":143759,"depth":1273,"text":143760},{"id":143853,"depth":1273,"text":143854},{"id":143902,"depth":1273,"text":143903},{"id":143912,"depth":1273,"text":143913},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143450,"description":142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144334,"title":144335,"body":144336,"description":142,"extension":143,"meta":145563,"navigation":145,"path":145564,"seo":145565,"stem":145566,"__hash__":145567},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144337,"toc":145541},[144338,144341,144345,144349,144352,144355,144359,144364,144367,144370,144373,144376,144379,144436,144439,144444,144447,144450,144454,144465,144469,144472,144475,144482,144487,144491,144494,144500,144503,144507,144510,144517,144520,144523,144530,144533,144540,144543,144546,144553,144556,144559,144561,144578,144582,144585,144588,144591,144595,144598,144601,144604,144607,144610,144613,144615,144618,144621,144683,144686,144796,144803,144809,144812,144815,144819,144822,144826,144831,144834,144841,144844,144850,144855,144858,144861,144864,144867,144870,144873,144876,144879,144935,144937,144963,144967,144970,144973,144976,144984,144987,144990,144994,145050,145053,145057,145063,145074,145077,145082,145085,145088,145094,145097,145100,145103,145106,145109,145112,145115,145118,145143,145149,145152,145155,145158,145161,145164,145167,145172,145175,145178,145181,145189,145192,145199,145202,145205,145207,145231,145233,145236,145239,145242,145245,145248,145251,145254,145288,145291,145294,145328,145335,145338,145341,145344,145347,145350,145353,145360,145363,145366,145369,145372,145379,145382,145385,145392,145395,145398,145402,145405,145408,145411,145414,145417,145420,145423,145426,145428,145452,145454,145478,145482,145493,145496,145499,145502,145505,145508,145511,145514,145517,145520,145523,145526,145529,145532,145535,145538],[10,144339,144335],{"id":144340},"_21-移动端布局实战下篇",[14,144342,144344],{"id":144343},"_211-rem适配布局","21.1 rem适配布局",[187,144346,144348],{"id":144347},"_2111-rem单位","21.1.1 rem单位",[1556,144350],{"style":126462,"src":144351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,144353,144354],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[187,144356,144358],{"id":144357},"_2112-媒体查询","21.1.2 媒体查询",[171,144360,144361],{},[109,144362,144363],{},"参数介绍",[1556,144365],{"style":126462,"src":144366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[1556,144368],{"style":126462,"src":144369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[1556,144371],{"style":126462,"src":144372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[1556,144374],{"style":126462,"src":144375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[1556,144377],{"style":126462,"src":144378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[38,144380,144382],{"className":126606,"code":144381,"language":126608,"meta":43,"style":43},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[26,144383,144384,144389,144408,144415,144428,144432],{"__ignoreMap":43},[47,144385,144386],{"class":49,"line":50},[47,144387,144388],{"class":279},"\u002F* 媒体查询 *\u002F\n",[47,144390,144391,144394,144396,144399,144401,144404,144406],{"class":49,"line":92},[47,144392,144393],{"class":217},"@media",[47,144395,1752],{"class":221},[47,144397,144398],{"class":85},"max-width",[47,144400,51491],{"class":221},[47,144402,144403],{"class":85},"768",[47,144405,51546],{"class":217},[47,144407,12535],{"class":221},[47,144409,144410,144413],{"class":49,"line":1273},[47,144411,144412],{"class":53},"  .container",[47,144414,15665],{"class":221},[47,144416,144417,144420,144422,144424,144426],{"class":49,"line":1288},[47,144418,144419],{"class":85},"    width",[47,144421,51491],{"class":221},[47,144423,530],{"class":85},[47,144425,547],{"class":217},[47,144427,1384],{"class":221},[47,144429,144430],{"class":49,"line":1294},[47,144431,127402],{"class":221},[47,144433,144434],{"class":49,"line":1308},[47,144435,1659],{"class":221},[19,144437,144438],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[171,144440,144441],{"start":92},[109,144442,144443],{},"引入资源",[1556,144445],{"style":126462,"src":144446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,144448,144449],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[187,144451,144453],{"id":144452},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[106,144455,144456,144459,144462],{},[109,144457,144458],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[109,144460,144461],{},"媒体查询可以根据不同设备宽度来修改样式",[109,144463,144464],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,144466,144468],{"id":144467},"_212-less基础","21.2 Less基础",[19,144470,144471],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,144473,144474],{},"Less可以解决该问题，它是css的扩展语言",[19,144476,144477,144478],{},"Less中文网址： ",[457,144479,144480],{"href":144480,"rel":144481},"http:\u002F\u002Flesscss.cn\u002F",[23956],[19,144483,144484],{},[369,144485,144486],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[187,144488,144490],{"id":144489},"_2121-less安装","21.2.1 less安装",[19,144492,144493],{},"如果使用vscode，则无需进行下方安装步骤",[19,144495,144496],{},[457,144497,144498],{"href":144498,"rel":144499},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[23956],[1556,144501],{"style":126462,"src":144502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[187,144504,144506],{"id":144505},"_2122-less使用","21.2.2 less使用",[19,144508,144509],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[171,144511,144512],{},[109,144513,144514],{},[369,144515,144516],{},"Less 变量",[1556,144518],{"style":126462,"src":144519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[1556,144521],{"style":126462,"src":144522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[171,144524,144525],{"start":92},[109,144526,144527],{},[369,144528,144529],{},"Less 编译",[1556,144531],{"style":126462,"src":144532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[171,144534,144535],{"start":1273},[109,144536,144537],{},[369,144538,144539],{},"Less 嵌套",[1556,144541],{"style":126462,"src":144542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[1556,144544],{"style":126462,"src":144545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[171,144547,144548],{"start":1288},[109,144549,144550],{},[369,144551,144552],{},"Less 运算",[1556,144554],{"style":126462,"src":144555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,144557,144558],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,144560,251],{},[106,144562,144563,144566,144569,144572,144575],{},[109,144564,144565],{},"乘号（*）和除号（\u002F）的写法",[109,144567,144568],{},"运算符中间左右有个空格隔开 1px + 5",[109,144570,144571],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[109,144573,144574],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[109,144576,144577],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,144579,144581],{"id":144580},"_213-rem-适配方案","21.3 rem 适配方案",[19,144583,144584],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,144586,144587],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[1556,144589],{"style":126462,"src":144590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[187,144592,144594],{"id":144593},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,144596,144597],{},"rem + 媒体查询 + less 技术",[1556,144599],{"style":126462,"src":144600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,144602,144603],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,144605,144606],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[1556,144608],{"style":126462,"src":144609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,144611,144612],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,144614,14726],{},[1556,144616],{"style":126462,"src":144617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,144619,144620],{},"index.html:",[38,144622,144624],{"className":126606,"code":144623,"language":126608,"meta":43,"style":43},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[26,144625,144626,144631,144637,144653,144657,144663,144679],{"__ignoreMap":43},[47,144627,144628],{"class":49,"line":50},[47,144629,144630],{"class":279},"\u002F* rem 适配方案 *\u002F\n",[47,144632,144633,144635],{"class":49,"line":92},[47,144634,50689],{"class":51354},[47,144636,15665],{"class":221},[47,144638,144639,144641,144643,144646,144648,144650],{"class":49,"line":1273},[47,144640,70680],{"class":85},[47,144642,51491],{"class":221},[47,144644,144645],{"class":85},"62.5",[47,144647,547],{"class":217},[47,144649,130469],{"class":221},[47,144651,144652],{"class":279},"\u002F* 1rem = 10px *\u002F\n",[47,144654,144655],{"class":49,"line":1288},[47,144656,1659],{"class":221},[47,144658,144659,144661],{"class":49,"line":1294},[47,144660,130454],{"class":53},[47,144662,15665],{"class":221},[47,144664,144665,144667,144669,144671,144674,144676],{"class":49,"line":1308},[47,144666,70622],{"class":85},[47,144668,51491],{"class":221},[47,144670,665],{"class":85},[47,144672,144673],{"class":217},"rem",[47,144675,130469],{"class":221},[47,144677,144678],{"class":279},"\u002F* 100px *\u002F\n",[47,144680,144681],{"class":49,"line":1314},[47,144682,1659],{"class":221},[19,144684,144685],{},"common.less",[38,144687,144689],{"className":126606,"code":144688,"language":126608,"meta":43,"style":43},"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",[26,144690,144691,144697,144712,144716,144722,144736,144740,144744,144748,144754,144768,144772,144778,144792],{"__ignoreMap":43},[47,144692,144693,144695],{"class":49,"line":50},[47,144694,50689],{"class":51354},[47,144696,15665],{"class":221},[47,144698,144699,144701,144703,144705,144707,144709],{"class":49,"line":92},[47,144700,70680],{"class":85},[47,144702,51491],{"class":221},[47,144704,144645],{"class":85},[47,144706,547],{"class":217},[47,144708,26121],{"class":221},[47,144710,144711],{"class":279},"\u002F* 10px *\u002F\n",[47,144713,144714],{"class":49,"line":1273},[47,144715,1659],{"class":221},[47,144717,144718,144720],{"class":49,"line":1288},[47,144719,51665],{"class":51354},[47,144721,15665],{"class":221},[47,144723,144724,144726,144728,144730,144732,144734],{"class":49,"line":1294},[47,144725,70622],{"class":85},[47,144727,51491],{"class":221},[47,144729,665],{"class":85},[47,144731,144673],{"class":217},[47,144733,26121],{"class":221},[47,144735,144678],{"class":279},[47,144737,144738],{"class":49,"line":1308},[47,144739,1659],{"class":221},[47,144741,144742],{"class":49,"line":1314},[47,144743,136067],{"class":221},[47,144745,144746],{"class":49,"line":1405},[47,144747,144630],{"class":279},[47,144749,144750,144752],{"class":49,"line":1411},[47,144751,50689],{"class":51354},[47,144753,15665],{"class":221},[47,144755,144756,144758,144760,144762,144764,144766],{"class":49,"line":1423},[47,144757,70680],{"class":85},[47,144759,51491],{"class":221},[47,144761,144645],{"class":85},[47,144763,547],{"class":217},[47,144765,130469],{"class":221},[47,144767,144652],{"class":279},[47,144769,144770],{"class":49,"line":1706},[47,144771,1659],{"class":221},[47,144773,144774,144776],{"class":49,"line":1711},[47,144775,130454],{"class":53},[47,144777,15665],{"class":221},[47,144779,144780,144782,144784,144786,144788,144790],{"class":49,"line":1717},[47,144781,70622],{"class":85},[47,144783,51491],{"class":221},[47,144785,665],{"class":85},[47,144787,144673],{"class":217},[47,144789,130469],{"class":221},[47,144791,144678],{"class":279},[47,144793,144794],{"class":49,"line":1722},[47,144795,1659],{"class":221},[19,144797,144798,144799,144802],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23646,144800,144801],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[38,144804,144807],{"className":144805,"code":144806,"language":5280},[5278],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[26,144808,144806],{"__ignoreMap":43},[19,144810,144811],{},"less保存时会自动变成.css文件",[19,144813,144814],{},"好好搞懂上述代码写法",[187,144816,144818],{"id":144817},"_2132-样式导入样式","21.3.2 样式导入样式",[1556,144820],{"style":126462,"src":144821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[187,144823,144825],{"id":144824},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[171,144827,144828],{},[109,144829,144830],{},"准备工作",[1556,144832],{"style":126462,"src":144833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,144835,144836,144837],{},"github地址：",[457,144838,144839],{"href":144839,"rel":144840},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[23956],[19,144842,144843],{},"下载之后，将index.js文件拖到项目中就可以了",[19,144845,144846,144847],{},"js文件引入到index.html中使用的是",[26,144848,144849],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[171,144851,144852],{"start":92},[109,144853,144854],{},"vscode插件",[1556,144856],{"style":126462,"src":144857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,144859,144860],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,144862,144863],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[1556,144865],{"style":126462,"src":144866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,144868,144869],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[1556,144871],{"style":126462,"src":144872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,144874,144875],{},"修改成75就可以，alt+z为快捷键",[19,144877,144878],{},"index.css：",[38,144880,144881],{"className":126606,"code":144623,"language":126608,"meta":43,"style":43},[26,144882,144883,144887,144893,144907,144911,144917,144931],{"__ignoreMap":43},[47,144884,144885],{"class":49,"line":50},[47,144886,144630],{"class":279},[47,144888,144889,144891],{"class":49,"line":92},[47,144890,50689],{"class":51354},[47,144892,15665],{"class":221},[47,144894,144895,144897,144899,144901,144903,144905],{"class":49,"line":1273},[47,144896,70680],{"class":85},[47,144898,51491],{"class":221},[47,144900,144645],{"class":85},[47,144902,547],{"class":217},[47,144904,130469],{"class":221},[47,144906,144652],{"class":279},[47,144908,144909],{"class":49,"line":1288},[47,144910,1659],{"class":221},[47,144912,144913,144915],{"class":49,"line":1294},[47,144914,130454],{"class":53},[47,144916,15665],{"class":221},[47,144918,144919,144921,144923,144925,144927,144929],{"class":49,"line":1308},[47,144920,70622],{"class":85},[47,144922,51491],{"class":221},[47,144924,665],{"class":85},[47,144926,144673],{"class":217},[47,144928,130469],{"class":221},[47,144930,144678],{"class":279},[47,144932,144933],{"class":49,"line":1314},[47,144934,1659],{"class":221},[19,144936,144620],{},[38,144938,144939],{"className":126606,"code":127010,"language":126608,"meta":43,"style":43},[26,144940,144941,144947,144959],{"__ignoreMap":43},[47,144942,144943,144945],{"class":49,"line":50},[47,144944,51854],{"class":51354},[47,144946,15665],{"class":221},[47,144948,144949,144951,144953,144955,144957],{"class":49,"line":92},[47,144950,70680],{"class":85},[47,144952,51491],{"class":221},[47,144954,820],{"class":85},[47,144956,51546],{"class":217},[47,144958,1384],{"class":221},[47,144960,144961],{"class":49,"line":1273},[47,144962,1659],{"class":221},[14,144964,144966],{"id":144965},"_214-响应式开发","21.4 响应式开发",[19,144968,144969],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[1556,144971],{"style":126462,"src":144972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,144974,144975],{},"做法：",[106,144977,144978,144981],{},[109,144979,144980],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[109,144982,144983],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[1556,144985],{"style":126462,"src":144986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,144988,144989],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[187,144991,144993],{"id":144992},"_2141-简单代码示范","21.4.1 简单代码示范",[38,144995,144996],{"className":126606,"code":144623,"language":126608,"meta":43,"style":43},[26,144997,144998,145002,145008,145022,145026,145032,145046],{"__ignoreMap":43},[47,144999,145000],{"class":49,"line":50},[47,145001,144630],{"class":279},[47,145003,145004,145006],{"class":49,"line":92},[47,145005,50689],{"class":51354},[47,145007,15665],{"class":221},[47,145009,145010,145012,145014,145016,145018,145020],{"class":49,"line":1273},[47,145011,70680],{"class":85},[47,145013,51491],{"class":221},[47,145015,144645],{"class":85},[47,145017,547],{"class":217},[47,145019,130469],{"class":221},[47,145021,144652],{"class":279},[47,145023,145024],{"class":49,"line":1288},[47,145025,1659],{"class":221},[47,145027,145028,145030],{"class":49,"line":1294},[47,145029,130454],{"class":53},[47,145031,15665],{"class":221},[47,145033,145034,145036,145038,145040,145042,145044],{"class":49,"line":1308},[47,145035,70622],{"class":85},[47,145037,51491],{"class":221},[47,145039,665],{"class":85},[47,145041,144673],{"class":217},[47,145043,130469],{"class":221},[47,145045,144678],{"class":279},[47,145047,145048],{"class":49,"line":1314},[47,145049,1659],{"class":221},[19,145051,145052],{},"父盒子一般命名为container",[187,145054,145056],{"id":145055},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,145058,145059,145060],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[369,145061,145062],{},"使得 Web 开发更加快捷",[106,145064,145065],{},[109,145066,145067,145068],{},"官网：",[369,145069,145070],{},[457,145071,145072],{"href":145072,"rel":145073},"http:\u002F\u002Fgetbootstrap.com\u002F",[23956],[19,145075,145076],{},"可以直接去官网拿现成的东西",[171,145078,145079],{},[109,145080,145081],{},"Bootstrap的使用",[19,145083,145084],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,145086,145087],{},"Bootstrap 使用四步曲：",[19,145089,145090,145093],{},[369,145091,145092],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[1556,145095],{"style":126462,"src":145096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,145098,145099],{},"打开Bootstrap官网，然后下载",[1556,145101],{"style":126462,"src":145102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[1556,145104],{"style":126462,"src":145105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,145107,145108],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,145110,145111],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,145113,145114],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[1556,145116],{"style":126462,"src":145117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[38,145119,145121],{"className":126606,"code":145120,"language":126608,"meta":43,"style":43},".center {\n  color: red;\n}\n",[26,145122,145123,145129,145139],{"__ignoreMap":43},[47,145124,145125,145127],{"class":49,"line":50},[47,145126,126897],{"class":53},[47,145128,15665],{"class":221},[47,145130,145131,145133,145135,145137],{"class":49,"line":92},[47,145132,70959],{"class":85},[47,145134,51491],{"class":221},[47,145136,57475],{"class":85},[47,145138,1384],{"class":221},[47,145140,145141],{"class":49,"line":1273},[47,145142,1659],{"class":221},[19,145144,145145,145148],{},[26,145146,145147],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[1556,145150],{"style":126462,"src":145151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[1556,145153],{"style":126462,"src":145154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[1556,145156],{"style":126462,"src":145157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,145159,145160],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[1556,145162],{"style":126462,"src":145163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,145165,145166],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[171,145168,145169],{"start":92},[109,145170,145171],{},"布局容器",[1556,145173],{"style":126462,"src":145174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,145176,145177],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,145179,145180],{},"container-fluid用于移动式布局比较方便",[171,145182,145183],{"start":1273},[109,145184,145185,145186],{},"bootstrap ",[369,145187,145188],{},"栅格系统原理",[1556,145190],{"style":126462,"src":145191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[171,145193,145194],{"start":1288},[109,145195,145196],{},[369,145197,145198],{},"栅格选项参数",[1556,145200],{"style":126462,"src":145201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,145203,145204],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,145206,14726],{},[38,145208,145209],{"className":126606,"code":145120,"language":126608,"meta":43,"style":43},[26,145210,145211,145217,145227],{"__ignoreMap":43},[47,145212,145213,145215],{"class":49,"line":50},[47,145214,126897],{"class":53},[47,145216,15665],{"class":221},[47,145218,145219,145221,145223,145225],{"class":49,"line":92},[47,145220,70959],{"class":85},[47,145222,51491],{"class":221},[47,145224,57475],{"class":85},[47,145226,1384],{"class":221},[47,145228,145229],{"class":49,"line":1273},[47,145230,1659],{"class":221},[19,145232,135649],{},[1556,145234],{"style":126462,"src":145235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,145237,145238],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,145240,145241],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,145243,145244],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,145246,145247],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,145249,145250],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,145252,145253],{},"汇总展示说明：",[38,145255,145256],{"className":127353,"code":130710,"language":127355,"meta":43,"style":43},[26,145257,145258,145262,145276,145280],{"__ignoreMap":43},[47,145259,145260],{"class":49,"line":50},[47,145261,130717],{"class":279},[47,145263,145264,145266,145268,145270,145272,145274],{"class":49,"line":92},[47,145265,1129],{"class":221},[47,145267,51665],{"class":51354},[47,145269,53540],{"class":53},[47,145271,267],{"class":221},[47,145273,130730],{"class":81},[47,145275,51361],{"class":221},[47,145277,145278],{"class":49,"line":1273},[47,145279,130737],{"class":221},[47,145281,145282,145284,145286],{"class":49,"line":1288},[47,145283,51839],{"class":221},[47,145285,51665],{"class":51354},[47,145287,51361],{"class":221},[1556,145289],{"style":126462,"src":145290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,145292,145293],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[38,145295,145296],{"className":127353,"code":130710,"language":127355,"meta":43,"style":43},[26,145297,145298,145302,145316,145320],{"__ignoreMap":43},[47,145299,145300],{"class":49,"line":50},[47,145301,130717],{"class":279},[47,145303,145304,145306,145308,145310,145312,145314],{"class":49,"line":92},[47,145305,1129],{"class":221},[47,145307,51665],{"class":51354},[47,145309,53540],{"class":53},[47,145311,267],{"class":221},[47,145313,130730],{"class":81},[47,145315,51361],{"class":221},[47,145317,145318],{"class":49,"line":1273},[47,145319,130737],{"class":221},[47,145321,145322,145324,145326],{"class":49,"line":1288},[47,145323,51839],{"class":221},[47,145325,51665],{"class":51354},[47,145327,51361],{"class":221},[171,145329,145330],{"start":1294},[109,145331,145332],{},[369,145333,145334],{},"列嵌套",[1556,145336],{"style":126462,"src":145337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,145339,145340],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,145342,145343],{},"没加row内部这样：",[1556,145345],{"style":126462,"src":145346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,145348,145349],{},"加上row之后内部为：",[1556,145351],{"style":126462,"src":145352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[171,145354,145355],{"start":1308},[109,145356,145357],{},[369,145358,145359],{},"列偏移",[1556,145361],{"style":126462,"src":145362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,145364,145365],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,145367,145368],{},"要加偏移量，即偏移份数",[19,145370,145371],{},"偏移的份数=12-两个盒子的份数",[171,145373,145374],{"start":1314},[109,145375,145376],{},[369,145377,145378],{},"列排序",[1556,145380],{"style":126462,"src":145381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,145383,145384],{},"pull拉左；push推右",[171,145386,145387],{"start":1405},[109,145388,145389],{},[369,145390,145391],{},"响应式工具",[1556,145393],{"style":126462,"src":145394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,145396,145397],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[187,145399,145401],{"id":145400},"_2143-响应式小项目","21.4.3 响应式小项目",[19,145403,145404],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,145406,145407],{},"ul {",[19,145409,145410],{},"list-style: none;",[19,145412,145413],{},"margin:0;",[19,145415,145416],{},"padding:0; }",[1556,145418],{"style":126462,"src":145419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[1556,145421],{"style":126462,"src":145422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,145424,145425],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,145427,68943],{},[38,145429,145430],{"className":126606,"code":139276,"language":126608,"meta":43,"style":43},[26,145431,145432,145438,145448],{"__ignoreMap":43},[47,145433,145434,145436],{"class":49,"line":50},[47,145435,130454],{"class":53},[47,145437,15665],{"class":221},[47,145439,145440,145442,145444,145446],{"class":49,"line":92},[47,145441,131086],{"class":85},[47,145443,51491],{"class":221},[47,145445,23829],{"class":85},[47,145447,1384],{"class":221},[47,145449,145450],{"class":49,"line":1273},[47,145451,1659],{"class":221},[19,145453,70507],{},[38,145455,145456],{"className":126606,"code":139276,"language":126608,"meta":43,"style":43},[26,145457,145458,145464,145474],{"__ignoreMap":43},[47,145459,145460,145462],{"class":49,"line":50},[47,145461,130454],{"class":53},[47,145463,15665],{"class":221},[47,145465,145466,145468,145470,145472],{"class":49,"line":92},[47,145467,131086],{"class":85},[47,145469,51491],{"class":221},[47,145471,23829],{"class":85},[47,145473,1384],{"class":221},[47,145475,145476],{"class":49,"line":1273},[47,145477,1659],{"class":221},[14,145479,145481],{"id":145480},"_215-swiper-插件使用","21.5 swiper 插件使用",[106,145483,145484,145487,145490],{},[109,145485,145486],{},"下载需要的css和js文件html页面中 引入相关文件",[109,145488,145489],{},"官网找到类似案例，复制html结构，css样式 js 语法",[109,145491,145492],{},"根据需求定制修改模块",[1556,145494],{"style":126462,"src":145495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,145497,145498],{},"解压后将这两部分放到项目中",[1556,145500],{"style":126462,"src":145501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,145503,145504],{},"这个插件可以帮助我们实现轮播图效果",[19,145506,145507],{},"用法：",[1556,145509],{"style":126462,"src":145510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,145512,145513],{},"找到自己喜欢的",[1556,145515],{"style":126462,"src":145516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,145518,145519],{},"右键，查看网页源代码",[1556,145521],{"style":126462,"src":145522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,145524,145525],{},"复制人家的结构内容",[19,145527,145528],{},"然后去看API文档：",[1556,145530],{"style":126462,"src":145531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,145533,145534],{},"可以看看如何修改样式",[19,145536,145537],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[134,145539,145540],{},"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":43,"searchDepth":92,"depth":92,"links":145542},[145543,145548,145552,145557,145562],{"id":144343,"depth":92,"text":144344,"children":145544},[145545,145546,145547],{"id":144347,"depth":1273,"text":144348},{"id":144357,"depth":1273,"text":144358},{"id":144452,"depth":1273,"text":144453},{"id":144467,"depth":92,"text":144468,"children":145549},[145550,145551],{"id":144489,"depth":1273,"text":144490},{"id":144505,"depth":1273,"text":144506},{"id":144580,"depth":92,"text":144581,"children":145553},[145554,145555,145556],{"id":144593,"depth":1273,"text":144594},{"id":144817,"depth":1273,"text":144818},{"id":144824,"depth":1273,"text":144825},{"id":144965,"depth":92,"text":144966,"children":145558},[145559,145560,145561],{"id":144992,"depth":1273,"text":144993},{"id":145055,"depth":1273,"text":145056},{"id":145400,"depth":1273,"text":145401},{"id":145480,"depth":92,"text":145481},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144335,"description":142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145569,"title":145570,"body":145571,"description":142,"extension":143,"meta":145791,"navigation":145,"path":145792,"seo":145793,"stem":145794,"__hash__":145795},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145572,"toc":145787},[145573,145576,145580,145583,145598,145603,145606,145611,145646,145651,145663,145668,145681,145686,145703,145708,145728,145733,145751,145754,145757,145760,145763,145767,145770,145773,145776,145779,145782,145785],[10,145574,145570],{"id":145575},"_22-代码提交与新型相对单位",[14,145577,145579],{"id":145578},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,145581,145582],{},"法1：",[171,145584,145585,145592,145595],{},[109,145586,145587,145588],{},"登录网站注册：",[457,145589,145590],{"href":145590,"rel":145591},"https:\u002F\u002Fgitee.com\u002F",[23956],[109,145593,145594],{},"码云创建新的仓库",[109,145596,145597],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[106,145599,145600],{},[109,145601,145602],{},"在网站根目录右键-- Git Bash Here",[1556,145604],{"style":126462,"src":145605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[106,145607,145608],{},[109,145609,145610],{},"如果是第一次利用git提交，请配置好全局选项",[38,145612,145614],{"className":117350,"code":145613,"language":117352,"meta":43,"style":43},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[26,145615,145616,145632],{"__ignoreMap":43},[47,145617,145618,145621,145623,145626,145629],{"class":49,"line":50},[47,145619,145620],{"class":53},"git",[47,145622,119773],{"class":81},[47,145624,145625],{"class":85}," --global",[47,145627,145628],{"class":81}," user.name",[47,145630,145631],{"class":81}," \"你的名字\"\n",[47,145633,145634,145636,145638,145640,145643],{"class":49,"line":92},[47,145635,145620],{"class":53},[47,145637,119773],{"class":81},[47,145639,145625],{"class":85},[47,145641,145642],{"class":81}," user.email",[47,145644,145645],{"class":81}," \"你的邮箱\"\n",[106,145647,145648],{},[109,145649,145650],{},"初始化仓库",[38,145652,145654],{"className":117350,"code":145653,"language":117352,"meta":43,"style":43},"git init\n",[26,145655,145656],{"__ignoreMap":43},[47,145657,145658,145660],{"class":49,"line":50},[47,145659,145620],{"class":53},[47,145661,145662],{"class":81}," init\n",[106,145664,145665],{},[109,145666,145667],{},"把本地文件放到暂存区",[38,145669,145671],{"className":117350,"code":145670,"language":117352,"meta":43,"style":43},"git add .\n",[26,145672,145673],{"__ignoreMap":43},[47,145674,145675,145677,145679],{"class":49,"line":50},[47,145676,145620],{"class":53},[47,145678,5302],{"class":81},[47,145680,28795],{"class":81},[106,145682,145683],{},[109,145684,145685],{},"把本地文件放到本地仓库里面",[38,145687,145689],{"className":117350,"code":145688,"language":117352,"meta":43,"style":43},"git commit -m \"first commit\"\n",[26,145690,145691],{"__ignoreMap":43},[47,145692,145693,145695,145698,145700],{"class":49,"line":50},[47,145694,145620],{"class":53},[47,145696,145697],{"class":81}," commit",[47,145699,100936],{"class":85},[47,145701,145702],{"class":81}," \"first commit\"\n",[106,145704,145705],{},[109,145706,145707],{},"链接远程仓库",[38,145709,145711],{"className":117350,"code":145710,"language":117352,"meta":43,"style":43},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[26,145712,145713],{"__ignoreMap":43},[47,145714,145715,145717,145720,145722,145725],{"class":49,"line":50},[47,145716,145620],{"class":53},[47,145718,145719],{"class":81}," remote",[47,145721,5302],{"class":81},[47,145723,145724],{"class":81}," origin",[47,145726,145727],{"class":81}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[106,145729,145730],{},[109,145731,145732],{},"把本地仓库的文件推送到远程仓库 push",[38,145734,145736],{"className":117350,"code":145735,"language":117352,"meta":43,"style":43},"git push -u origin master\n",[26,145737,145738],{"__ignoreMap":43},[47,145739,145740,145742,145744,145746,145748],{"class":49,"line":50},[47,145741,145620],{"class":53},[47,145743,29070],{"class":81},[47,145745,28344],{"class":85},[47,145747,145724],{"class":81},[47,145749,145750],{"class":81}," master\n",[1556,145752],{"style":126462,"src":145753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,145755,145756],{},"上方方法暂未实现，后边学完git后在整",[19,145758,145759],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[1556,145761],{"style":126462,"src":145762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,145764,145766],{"id":145765},"_222-新型相对单位","22.2 新型相对单位",[1556,145768],{"style":126462,"src":145769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[1556,145771],{"style":126462,"src":145772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,145774,145775],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,145777,145778],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[1556,145780],{"style":126462,"src":145781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,145783,145784],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[134,145786,24049],{},{"title":43,"searchDepth":92,"depth":92,"links":145788},[145789,145790],{"id":145578,"depth":92,"text":145579},{"id":145765,"depth":92,"text":145766},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145570,"description":142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145797,"title":145798,"body":145799,"description":145803,"extension":143,"meta":145804,"navigation":145,"path":145805,"seo":145806,"stem":145807,"__hash__":145808},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145800,"toc":145801},[],{"title":43,"searchDepth":92,"depth":92,"links":145802},[],"自己正经开始学编程的第一门语言！",{"category":92893},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145798,"description":145803},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145810,"title":145811,"body":145812,"description":142,"extension":143,"meta":146959,"navigation":145,"path":146960,"seo":146961,"stem":146962,"__hash__":146963},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145813,"toc":146935},[145814,145817,145821,145824,145827,145852,145855,145861,145865,145868,145895,145898,145938,145941,145953,145956,145962,145966,145970,145997,146014,146021,146025,146028,146054,146057,146061,146064,146104,146107,146124,146130,146134,146139,146183,146186,146204,146207,146275,146279,146286,146289,146304,146307,146316,146319,146330,146333,146342,146345,146362,146365,146380,146384,146388,146391,146393,146413,146417,146420,146423,146434,146437,146443,146447,146453,146480,146483,146495,146498,146509,146512,146518,146522,146528,146578,146581,146623,146626,146659,146662,146696,146700,146703,146723,146726,146762,146765,146778,146782,146786,146792,146795,146808,146812,146815,146821,146824,146828,146831,146834,146883,146887,146903,146909,146916,146922,146932],[10,145815,145811],{"id":145816},"_1-python环境与第一个程序",[14,145818,145820],{"id":145819},"_11-什么是python","1.1 什么是Python",[19,145822,145823],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,145825,145826],{},"理解 Python 时抓住三个关键词：",[171,145828,145829,145832,145835],{},[109,145830,145831],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[109,145833,145834],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[109,145836,145837,145838,60,145841,60,145844,60,145847,60,145849,28439],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[26,145839,145840],{},"os",[26,145842,145843],{},"sys",[26,145845,145846],{},"json",[26,145848,57914],{},[26,145850,145851],{},"datetime",[19,145853,145854],{},"Python 程序的运行链路：",[38,145856,145859],{"className":145857,"code":145858,"language":5280,"meta":43},[5278],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[26,145860,145858],{"__ignoreMap":43},[14,145862,145864],{"id":145863},"_12-python解释器","1.2 Python解释器",[19,145866,145867],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[38,145869,145871],{"className":40,"code":145870,"language":42,"meta":43,"style":43},"python --version\npython3 --version\npython\npython3\n",[26,145872,145873,145879,145885,145890],{"__ignoreMap":43},[47,145874,145875,145877],{"class":49,"line":50},[47,145876,30434],{"class":53},[47,145878,26347],{"class":85},[47,145880,145881,145883],{"class":49,"line":92},[47,145882,100933],{"class":53},[47,145884,26347],{"class":85},[47,145886,145887],{"class":49,"line":1273},[47,145888,145889],{"class":53},"python\n",[47,145891,145892],{"class":49,"line":1288},[47,145893,145894],{"class":53},"python3\n",[19,145896,145897],{},"进入交互模式后，可以直接输入表达式：",[38,145899,145901],{"className":30432,"code":145900,"language":30434,"meta":43,"style":43},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[26,145902,145903,145914,145919,145933],{"__ignoreMap":43},[47,145904,145905,145908,145910,145912],{"class":49,"line":50},[47,145906,145907],{"class":217},">>>",[47,145909,25172],{"class":85},[47,145911,45620],{"class":217},[47,145913,47777],{"class":85},[47,145915,145916],{"class":49,"line":92},[47,145917,145918],{"class":85},"3\n",[47,145920,145921,145923,145926,145928,145931],{"class":49,"line":1273},[47,145922,145907],{"class":217},[47,145924,145925],{"class":85}," print",[47,145927,222],{"class":221},[47,145929,145930],{"class":81},"\"hello python\"",[47,145932,228],{"class":221},[47,145934,145935],{"class":49,"line":1288},[47,145936,145937],{"class":221},"hello python\n",[19,145939,145940],{},"退出交互模式：",[38,145942,145944],{"className":30432,"code":145943,"language":30434,"meta":43,"style":43},"exit()\n",[26,145945,145946],{"__ignoreMap":43},[47,145947,145948,145951],{"class":49,"line":50},[47,145949,145950],{"class":85},"exit",[47,145952,2069],{"class":221},[19,145954,145955],{},"或使用快捷键：",[38,145957,145960],{"className":145958,"code":145959,"language":5280,"meta":43},[5278],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[26,145961,145959],{"__ignoreMap":43},[14,145963,145965],{"id":145964},"_13-安装python","1.3 安装Python",[187,145967,145969],{"id":145968},"_131-windows安装","1.3.1 Windows安装",[171,145971,145972,145979,145982,145988,145994],{},[109,145973,145974,145975],{},"打开 Python 官网：",[457,145976,145977],{"href":145977,"rel":145978},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[23956],[109,145980,145981],{},"下载 Windows Installer。",[109,145983,145984,145985,28439],{},"安装时勾选 ",[26,145986,145987],{},"Add Python to PATH",[109,145989,145990,145991,28439],{},"点击 ",[26,145992,145993],{},"Install Now",[109,145995,145996],{},"安装完成后打开命令提示符验证：",[38,145998,146000],{"className":40,"code":145999,"language":42,"meta":43,"style":43},"python --version\npip --version\n",[26,146001,146002,146008],{"__ignoreMap":43},[47,146003,146004,146006],{"class":49,"line":50},[47,146005,30434],{"class":53},[47,146007,26347],{"class":85},[47,146009,146010,146012],{"class":49,"line":92},[47,146011,23922],{"class":53},[47,146013,26347],{"class":85},[19,146015,146016,146017,146020],{},"如果提示 ",[26,146018,146019],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[187,146022,146024],{"id":146023},"_132-macos安装","1.3.2 macOS安装",[19,146026,146027],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[38,146029,146031],{"className":40,"code":146030,"language":42,"meta":43,"style":43},"brew install python\npython3 --version\npip3 --version\n",[26,146032,146033,146042,146048],{"__ignoreMap":43},[47,146034,146035,146038,146040],{"class":49,"line":50},[47,146036,146037],{"class":53},"brew",[47,146039,23925],{"class":81},[47,146041,124372],{"class":81},[47,146043,146044,146046],{"class":49,"line":92},[47,146045,100933],{"class":53},[47,146047,26347],{"class":85},[47,146049,146050,146052],{"class":49,"line":1273},[47,146051,119754],{"class":53},[47,146053,26347],{"class":85},[19,146055,146056],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[187,146058,146060],{"id":146059},"_133-linux安装","1.3.3 Linux安装",[19,146062,146063],{},"Ubuntu\u002FDebian：",[38,146065,146067],{"className":40,"code":146066,"language":42,"meta":43,"style":43},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[26,146068,146069,146077,146092,146098],{"__ignoreMap":43},[47,146070,146071,146073,146075],{"class":49,"line":50},[47,146072,78],{"class":53},[47,146074,117371],{"class":81},[47,146076,26296],{"class":81},[47,146078,146079,146081,146083,146085,146087,146089],{"class":49,"line":92},[47,146080,78],{"class":53},[47,146082,117371],{"class":81},[47,146084,23925],{"class":81},[47,146086,104457],{"class":81},[47,146088,100852],{"class":81},[47,146090,146091],{"class":81}," python3-venv\n",[47,146093,146094,146096],{"class":49,"line":1273},[47,146095,100933],{"class":53},[47,146097,26347],{"class":85},[47,146099,146100,146102],{"class":49,"line":1288},[47,146101,119754],{"class":53},[47,146103,26347],{"class":85},[19,146105,146106],{},"Fedora：",[38,146108,146110],{"className":40,"code":146109,"language":42,"meta":43,"style":43},"sudo dnf install python3 python3-pip\n",[26,146111,146112],{"__ignoreMap":43},[47,146113,146114,146116,146118,146120,146122],{"class":49,"line":50},[47,146115,78],{"class":53},[47,146117,26369],{"class":81},[47,146119,23925],{"class":81},[47,146121,104457],{"class":81},[47,146123,119819],{"class":81},[19,146125,146126,146127,146129],{},"Linux 上通常使用 ",[26,146128,100933],{}," 命令，避免和系统旧版本 Python 冲突。",[14,146131,146133],{"id":146132},"_14-pip包管理器","1.4 pip包管理器",[19,146135,146136,146138],{},[26,146137,23922],{}," 用来安装第三方库。",[38,146140,146142],{"className":40,"code":146141,"language":42,"meta":43,"style":43},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[26,146143,146144,146153,146162,146170,146176],{"__ignoreMap":43},[47,146145,146146,146148,146150],{"class":49,"line":50},[47,146147,23922],{"class":53},[47,146149,23925],{"class":81},[47,146151,146152],{"class":81}," requests\n",[47,146154,146155,146157,146160],{"class":49,"line":92},[47,146156,23922],{"class":53},[47,146158,146159],{"class":81}," uninstall",[47,146161,146152],{"class":81},[47,146163,146164,146166,146168],{"class":49,"line":1273},[47,146165,23922],{"class":53},[47,146167,117628],{"class":81},[47,146169,146152],{"class":81},[47,146171,146172,146174],{"class":49,"line":1288},[47,146173,23922],{"class":53},[47,146175,119009],{"class":81},[47,146177,146178,146180],{"class":49,"line":1294},[47,146179,23922],{"class":53},[47,146181,146182],{"class":81}," freeze\n",[19,146184,146185],{},"国内网络较慢时可以临时使用镜像：",[38,146187,146189],{"className":40,"code":146188,"language":42,"meta":43,"style":43},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[26,146190,146191],{"__ignoreMap":43},[47,146192,146193,146195,146197,146200,146202],{"class":49,"line":50},[47,146194,23922],{"class":53},[47,146196,23925],{"class":81},[47,146198,146199],{"class":81}," requests",[47,146201,26484],{"class":85},[47,146203,119782],{"class":81},[19,146205,146206],{},"常见第三方库：",[357,146208,146209,146218],{},[360,146210,146211],{},[363,146212,146213,146216],{},[366,146214,146215],{},"库",[366,146217,102750],{},[404,146219,146220,146228,146235,146243,146251,146259,146267],{},[363,146221,146222,146225],{},[409,146223,146224],{},"requests",[409,146226,146227],{},"网络请求",[363,146229,146230,146232],{},[409,146231,100680],{},[409,146233,146234],{},"数值计算",[363,146236,146237,146240],{},[409,146238,146239],{},"pandas",[409,146241,146242],{},"表格数据处理",[363,146244,146245,146248],{},[409,146246,146247],{},"matplotlib",[409,146249,146250],{},"绘图",[363,146252,146253,146256],{},[409,146254,146255],{},"pyecharts",[409,146257,146258],{},"ECharts 图表",[363,146260,146261,146264],{},[409,146262,146263],{},"flask",[409,146265,146266],{},"Web 后端",[363,146268,146269,146272],{},[409,146270,146271],{},"pytest",[409,146273,146274],{},"自动化测试",[14,146276,146278],{"id":146277},"_15-虚拟环境","1.5 虚拟环境",[19,146280,146281,146282,146285],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[26,146283,146284],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,146287,146288],{},"创建虚拟环境：",[38,146290,146292],{"className":40,"code":146291,"language":42,"meta":43,"style":43},"python -m venv .venv\n",[26,146293,146294],{"__ignoreMap":43},[47,146295,146296,146298,146300,146302],{"class":49,"line":50},[47,146297,30434],{"class":53},[47,146299,100936],{"class":85},[47,146301,100939],{"class":81},[47,146303,100942],{"class":81},[19,146305,146306],{},"Windows 激活：",[38,146308,146310],{"className":40,"code":146309,"language":42,"meta":43,"style":43},".venv\\Scripts\\activate\n",[26,146311,146312],{"__ignoreMap":43},[47,146313,146314],{"class":49,"line":50},[47,146315,146309],{"class":53},[19,146317,146318],{},"macOS\u002FLinux 激活：",[38,146320,146322],{"className":40,"code":146321,"language":42,"meta":43,"style":43},"source .venv\u002Fbin\u002Factivate\n",[26,146323,146324],{"__ignoreMap":43},[47,146325,146326,146328],{"class":49,"line":50},[47,146327,100947],{"class":85},[47,146329,100950],{"class":81},[19,146331,146332],{},"退出虚拟环境：",[38,146334,146336],{"className":40,"code":146335,"language":42,"meta":43,"style":43},"deactivate\n",[26,146337,146338],{"__ignoreMap":43},[47,146339,146340],{"class":49,"line":50},[47,146341,146335],{"class":53},[19,146343,146344],{},"保存依赖：",[38,146346,146348],{"className":40,"code":146347,"language":42,"meta":43,"style":43},"pip freeze > requirements.txt\n",[26,146349,146350],{"__ignoreMap":43},[47,146351,146352,146354,146357,146359],{"class":49,"line":50},[47,146353,23922],{"class":53},[47,146355,146356],{"class":81}," freeze",[47,146358,26276],{"class":217},[47,146360,146361],{"class":81}," requirements.txt\n",[19,146363,146364],{},"安装依赖：",[38,146366,146368],{"className":40,"code":146367,"language":42,"meta":43,"style":43},"pip install -r requirements.txt\n",[26,146369,146370],{"__ignoreMap":43},[47,146371,146372,146374,146376,146378],{"class":49,"line":50},[47,146373,23922],{"class":53},[47,146375,23925],{"class":81},[47,146377,119693],{"class":85},[47,146379,146361],{"class":81},[14,146381,146383],{"id":146382},"_16-开发工具","1.6 开发工具",[187,146385,146387],{"id":146386},"_161-pycharm","1.6.1 PyCharm",[19,146389,146390],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,146392,122116],{},[171,146394,146395,146398,146401,146407,146410],{},[109,146396,146397],{},"New Project：创建项目。",[109,146399,146400],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[109,146402,146403,146404,126037],{},"New Python File：创建 ",[26,146405,146406],{},".py",[109,146408,146409],{},"Run：运行当前文件。",[109,146411,146412],{},"Debug：断点调试。",[187,146414,146416],{"id":146415},"_162-vs-code","1.6.2 VS Code",[19,146418,146419],{},"VS Code 轻量，适合后续多语言开发。",[19,146421,146422],{},"建议安装插件：",[171,146424,146425,146428,146431],{},[109,146426,146427],{},"Python。",[109,146429,146430],{},"Pylance。",[109,146432,146433],{},"Jupyter。",[19,146435,146436],{},"选择解释器：",[38,146438,146441],{"className":146439,"code":146440,"language":5280,"meta":43},[5278],"Ctrl + Shift + P -> Python: Select Interpreter\n",[26,146442,146440],{"__ignoreMap":43},[14,146444,146446],{"id":146445},"_17-第一个python程序","1.7 第一个Python程序",[19,146448,146449,146450,125],{},"创建文件 ",[26,146451,146452],{},"hello.py",[38,146454,146456],{"className":30432,"code":146455,"language":30434,"meta":43,"style":43},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[26,146457,146458,146469],{"__ignoreMap":43},[47,146459,146460,146462,146464,146467],{"class":49,"line":50},[47,146461,30469],{"class":85},[47,146463,222],{"class":221},[47,146465,146466],{"class":81},"\"Hello World\"",[47,146468,228],{"class":221},[47,146470,146471,146473,146475,146478],{"class":49,"line":92},[47,146472,30469],{"class":85},[47,146474,222],{"class":221},[47,146476,146477],{"class":81},"\"你好，Python\"",[47,146479,228],{"class":221},[19,146481,146482],{},"在终端运行：",[38,146484,146486],{"className":40,"code":146485,"language":42,"meta":43,"style":43},"python hello.py\n",[26,146487,146488],{"__ignoreMap":43},[47,146489,146490,146492],{"class":49,"line":50},[47,146491,30434],{"class":53},[47,146493,146494],{"class":81}," hello.py\n",[19,146496,146497],{},"或：",[38,146499,146501],{"className":40,"code":146500,"language":42,"meta":43,"style":43},"python3 hello.py\n",[26,146502,146503],{"__ignoreMap":43},[47,146504,146505,146507],{"class":49,"line":50},[47,146506,100933],{"class":53},[47,146508,146494],{"class":81},[19,146510,146511],{},"输出：",[38,146513,146516],{"className":146514,"code":146515,"language":5280,"meta":43},[5278],"Hello World\n你好，Python\n",[26,146517,146515],{"__ignoreMap":43},[14,146519,146521],{"id":146520},"_18-print函数","1.8 print函数",[19,146523,146524,146527],{},[26,146525,146526],{},"print()"," 用来输出内容。",[38,146529,146531],{"className":30432,"code":146530,"language":30434,"meta":43,"style":43},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[26,146532,146533,146543,146553,146563],{"__ignoreMap":43},[47,146534,146535,146537,146539,146541],{"class":49,"line":50},[47,146536,30469],{"class":85},[47,146538,222],{"class":221},[47,146540,5937],{"class":81},[47,146542,228],{"class":221},[47,146544,146545,146547,146549,146551],{"class":49,"line":92},[47,146546,30469],{"class":85},[47,146548,222],{"class":221},[47,146550,530],{"class":85},[47,146552,228],{"class":221},[47,146554,146555,146557,146559,146561],{"class":49,"line":1273},[47,146556,30469],{"class":85},[47,146558,222],{"class":221},[47,146560,270],{"class":85},[47,146562,228],{"class":221},[47,146564,146565,146567,146569,146572,146574,146576],{"class":49,"line":1288},[47,146566,30469],{"class":85},[47,146568,222],{"class":221},[47,146570,146571],{"class":81},"\"年龄:\"",[47,146573,12528],{"class":221},[47,146575,869],{"class":85},[47,146577,228],{"class":221},[19,146579,146580],{},"多个内容用逗号隔开，默认中间加空格：",[38,146582,146584],{"className":30432,"code":146583,"language":30434,"meta":43,"style":43},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[26,146585,146586,146596,146606],{"__ignoreMap":43},[47,146587,146588,146591,146593],{"class":49,"line":50},[47,146589,146590],{"class":221},"name ",[47,146592,267],{"class":217},[47,146594,146595],{"class":81}," \"张三\"\n",[47,146597,146598,146601,146603],{"class":49,"line":92},[47,146599,146600],{"class":221},"age ",[47,146602,267],{"class":217},[47,146604,146605],{"class":85}," 18\n",[47,146607,146608,146610,146612,146615,146618,146620],{"class":49,"line":1273},[47,146609,30469],{"class":85},[47,146611,222],{"class":221},[47,146613,146614],{"class":81},"\"姓名:\"",[47,146616,146617],{"class":221},", name, ",[47,146619,146571],{"class":81},[47,146621,146622],{"class":221},", age)\n",[19,146624,146625],{},"修改分隔符：",[38,146627,146629],{"className":30432,"code":146628,"language":30434,"meta":43,"style":43},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[26,146630,146631],{"__ignoreMap":43},[47,146632,146633,146635,146637,146640,146642,146644,146646,146648,146650,146653,146655,146657],{"class":49,"line":50},[47,146634,30469],{"class":85},[47,146636,222],{"class":221},[47,146638,146639],{"class":81},"\"2024\"",[47,146641,12528],{"class":221},[47,146643,54370],{"class":81},[47,146645,12528],{"class":221},[47,146647,54370],{"class":81},[47,146649,12528],{"class":221},[47,146651,146652],{"class":5309},"sep",[47,146654,267],{"class":217},[47,146656,32537],{"class":81},[47,146658,228],{"class":221},[19,146660,146661],{},"修改结尾符：",[38,146663,146665],{"className":30432,"code":146664,"language":30434,"meta":43,"style":43},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[26,146666,146667,146685],{"__ignoreMap":43},[47,146668,146669,146671,146673,146675,146677,146679,146681,146683],{"class":49,"line":50},[47,146670,30469],{"class":85},[47,146672,222],{"class":221},[47,146674,5937],{"class":81},[47,146676,12528],{"class":221},[47,146678,45855],{"class":5309},[47,146680,267],{"class":217},[47,146682,4452],{"class":81},[47,146684,228],{"class":221},[47,146686,146687,146689,146691,146694],{"class":49,"line":92},[47,146688,30469],{"class":85},[47,146690,222],{"class":221},[47,146692,146693],{"class":81},"\"python\"",[47,146695,228],{"class":221},[14,146697,146699],{"id":146698},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,146701,146702],{},"交互运行适合临时验证：",[38,146704,146706],{"className":30432,"code":146705,"language":30434,"meta":43,"style":43},">>> 10 * 3\n30\n",[26,146707,146708,146718],{"__ignoreMap":43},[47,146709,146710,146712,146714,146716],{"class":49,"line":50},[47,146711,145907],{"class":217},[47,146713,2131],{"class":85},[47,146715,6611],{"class":217},[47,146717,120090],{"class":85},[47,146719,146720],{"class":49,"line":92},[47,146721,146722],{"class":85},"30\n",[19,146724,146725],{},"脚本运行适合保存程序：",[38,146727,146729],{"className":30432,"code":146728,"language":30434,"meta":43,"style":43},"price = 8\ncount = 5\nprint(price * count)\n",[26,146730,146731,146741,146750],{"__ignoreMap":43},[47,146732,146733,146736,146738],{"class":49,"line":50},[47,146734,146735],{"class":221},"price ",[47,146737,267],{"class":217},[47,146739,146740],{"class":85}," 8\n",[47,146742,146743,146746,146748],{"class":49,"line":92},[47,146744,146745],{"class":221},"count ",[47,146747,267],{"class":217},[47,146749,54481],{"class":85},[47,146751,146752,146754,146757,146759],{"class":49,"line":1273},[47,146753,30469],{"class":85},[47,146755,146756],{"class":221},"(price ",[47,146758,674],{"class":217},[47,146760,146761],{"class":221}," count)\n",[19,146763,146764],{},"实际学习中推荐：",[171,146766,146767,146770,146775],{},[109,146768,146769],{},"临时试一个语法，用交互模式。",[109,146771,146772,146773,126037],{},"写完整练习，用 ",[26,146774,146406],{},[109,146776,146777],{},"写项目，用独立目录和虚拟环境。",[14,146779,146781],{"id":146780},"_110-常见错误","1.10 常见错误",[187,146783,146785],{"id":146784},"_1101-命令找不到","1.10.1 命令找不到",[38,146787,146790],{"className":146788,"code":146789,"language":5280,"meta":43},[5278],"python: command not found\n",[26,146791,146789],{"__ignoreMap":43},[19,146793,146794],{},"原因：",[171,146796,146797,146800,146803],{},[109,146798,146799],{},"没安装 Python。",[109,146801,146802],{},"PATH 没配置。",[109,146804,146805,146806,28439],{},"Linux\u002FmacOS 应该使用 ",[26,146807,100933],{},[187,146809,146811],{"id":146810},"_1102-文件名冲突","1.10.2 文件名冲突",[19,146813,146814],{},"不要把文件命名为：",[38,146816,146819],{"className":146817,"code":146818,"language":5280,"meta":43},[5278],"random.py\njson.py\ntime.py\nrequests.py\n",[26,146820,146818],{"__ignoreMap":43},[19,146822,146823],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[187,146825,146827],{"id":146826},"_1103-中文乱码","1.10.3 中文乱码",[19,146829,146830],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,146832,146833],{},"如果读写文件出现乱码，要明确指定编码：",[38,146835,146837],{"className":30432,"code":146836,"language":30434,"meta":43,"style":43},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[26,146838,146839,146873],{"__ignoreMap":43},[47,146840,146841,146843,146846,146848,146851,146853,146856,146858,146861,146863,146866,146868,146870],{"class":49,"line":50},[47,146842,107887],{"class":217},[47,146844,146845],{"class":85}," open",[47,146847,222],{"class":221},[47,146849,146850],{"class":81},"\"data.txt\"",[47,146852,12528],{"class":221},[47,146854,146855],{"class":81},"\"r\"",[47,146857,12528],{"class":221},[47,146859,146860],{"class":5309},"encoding",[47,146862,267],{"class":217},[47,146864,146865],{"class":81},"\"utf-8\"",[47,146867,13807],{"class":221},[47,146869,31437],{"class":217},[47,146871,146872],{"class":221}," f:\n",[47,146874,146875,146878,146880],{"class":49,"line":92},[47,146876,146877],{"class":221},"    content ",[47,146879,267],{"class":217},[47,146881,146882],{"class":221}," f.read()\n",[14,146884,146886],{"id":146885},"_111-本章练习","1.11 本章练习",[171,146888,146889,146892,146898],{},[109,146890,146891],{},"安装 Python，并在终端输出版本号。",[109,146893,146894,146895,146897],{},"新建 ",[26,146896,146452],{},"，输出自己的姓名、年龄、学习目标。",[109,146899,104420,146900,146902],{},[26,146901,146526],{}," 输出下面格式：",[38,146904,146907],{"className":146905,"code":146906,"language":5280,"meta":43},[5278],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[26,146908,146906],{"__ignoreMap":43},[171,146910,146911],{"start":1288},[109,146912,104420,146913,146915],{},[26,146914,146652],{}," 输出日期：",[38,146917,146920],{"className":146918,"code":146919,"language":5280,"meta":43},[5278],"2024-10-10\n",[26,146921,146919],{"__ignoreMap":43},[171,146923,146924],{"start":1294},[109,146925,104420,146926,146928,146929,146931],{},[26,146927,45855],{}," 让两次 ",[26,146930,146526],{}," 输出在同一行。",[134,146933,146934],{},"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":43,"searchDepth":92,"depth":92,"links":146936},[146937,146938,146939,146944,146945,146946,146950,146951,146952,146953,146958],{"id":145819,"depth":92,"text":145820},{"id":145863,"depth":92,"text":145864},{"id":145964,"depth":92,"text":145965,"children":146940},[146941,146942,146943],{"id":145968,"depth":1273,"text":145969},{"id":146023,"depth":1273,"text":146024},{"id":146059,"depth":1273,"text":146060},{"id":146132,"depth":92,"text":146133},{"id":146277,"depth":92,"text":146278},{"id":146382,"depth":92,"text":146383,"children":146947},[146948,146949],{"id":146386,"depth":1273,"text":146387},{"id":146415,"depth":1273,"text":146416},{"id":146445,"depth":92,"text":146446},{"id":146520,"depth":92,"text":146521},{"id":146698,"depth":92,"text":146699},{"id":146780,"depth":92,"text":146781,"children":146954},[146955,146956,146957],{"id":146784,"depth":1273,"text":146785},{"id":146810,"depth":1273,"text":146811},{"id":146826,"depth":1273,"text":146827},{"id":146885,"depth":92,"text":146886},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145811,"description":142},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":146965,"title":146966,"body":146967,"description":142,"extension":143,"meta":149371,"navigation":145,"path":149372,"seo":149373,"stem":149374,"__hash__":149375},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":146968,"toc":149356},[146969,146972,146976,146979,146982,146999,147002,147044,147047,147051,147054,147057,147094,147097,147131,147134,147226,147230,147244,147247,147274,147277,147281,147384,147391,147394,147411,147415,147422,147611,147614,147687,147691,147694,147778,147781,147813,147817,148021,148024,148028,148034,148136,148139,148395,148399,148402,148405,148419,148421,148607,148611,148973,148979,148983,148986,149110,149113,149292,149295,149299,149332,149336,149353],[10,146970,146966],{"id":146971},"_10-json与pyecharts折线图",[14,146973,146975],{"id":146974},"_101-数据可视化","10.1 数据可视化",[19,146977,146978],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,146980,146981],{},"常见图表：",[171,146983,146984,146987,146990,146993,146996],{},[109,146985,146986],{},"折线图：看趋势。",[109,146988,146989],{},"柱状图：看分类对比。",[109,146991,146992],{},"饼图：看占比。",[109,146994,146995],{},"地图：看地域分布。",[109,146997,146998],{},"散点图：看两个变量之间的关系。",[19,147000,147001],{},"Python 可视化常用库：",[357,147003,147004,147012],{},[360,147005,147006],{},[363,147007,147008,147010],{},[366,147009,146215],{},[366,147011,23833],{},[404,147013,147014,147021,147029,147036],{},[363,147015,147016,147018],{},[409,147017,146247],{},[409,147019,147020],{},"基础、经典、可定制",[363,147022,147023,147026],{},[409,147024,147025],{},"seaborn",[409,147027,147028],{},"统计图表更美观",[363,147030,147031,147033],{},[409,147032,146255],{},[409,147034,147035],{},"生成交互式网页图表",[363,147037,147038,147041],{},[409,147039,147040],{},"plotly",[409,147042,147043],{},"交互图表能力强",[19,147045,147046],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,147048,147050],{"id":147049},"_102-json回顾","10.2 JSON回顾",[19,147052,147053],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,147055,147056],{},"Python 字典：",[38,147058,147060],{"className":30432,"code":147059,"language":30434,"meta":43,"style":43},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[26,147061,147062,147070,147081,147090],{"__ignoreMap":43},[47,147063,147064,147066,147068],{"class":49,"line":50},[47,147065,101712],{"class":221},[47,147067,267],{"class":217},[47,147069,15665],{"class":221},[47,147071,147072,147075,147077,147079],{"class":49,"line":92},[47,147073,147074],{"class":81},"    \"name\"",[47,147076,51491],{"class":221},[47,147078,69323],{"class":81},[47,147080,31520],{"class":221},[47,147082,147083,147086,147088],{"class":49,"line":1273},[47,147084,147085],{"class":81},"    \"value\"",[47,147087,51491],{"class":221},[47,147089,97512],{"class":85},[47,147091,147092],{"class":49,"line":1288},[47,147093,1659],{"class":221},[19,147095,147096],{},"JSON 字符串：",[38,147098,147101],{"className":147099,"code":147100,"language":145846,"meta":43,"style":43},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[26,147102,147103,147107,147118,147127],{"__ignoreMap":43},[47,147104,147105],{"class":49,"line":50},[47,147106,1640],{"class":221},[47,147108,147109,147112,147114,147116],{"class":49,"line":92},[47,147110,147111],{"class":85},"  \"name\"",[47,147113,51491],{"class":221},[47,147115,69323],{"class":81},[47,147117,31520],{"class":221},[47,147119,147120,147123,147125],{"class":49,"line":1273},[47,147121,147122],{"class":85},"  \"value\"",[47,147124,51491],{"class":221},[47,147126,97512],{"class":85},[47,147128,147129],{"class":49,"line":1288},[47,147130,1659],{"class":221},[19,147132,147133],{},"Python 与 JSON 的转换：",[38,147135,147137],{"className":30432,"code":147136,"language":30434,"meta":43,"style":43},"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",[26,147138,147139,147146,147150,147175,147179,147198,147205,147209,147219],{"__ignoreMap":43},[47,147140,147141,147143],{"class":49,"line":50},[47,147142,30446],{"class":217},[47,147144,147145],{"class":221}," json\n",[47,147147,147148],{"class":49,"line":92},[47,147149,2493],{"emptyLinePlaceholder":145},[47,147151,147152,147154,147156,147158,147160,147162,147164,147166,147169,147171,147173],{"class":49,"line":1273},[47,147153,101712],{"class":221},[47,147155,267],{"class":217},[47,147157,4541],{"class":221},[47,147159,62733],{"class":81},[47,147161,51491],{"class":221},[47,147163,69323],{"class":81},[47,147165,12528],{"class":221},[47,147167,147168],{"class":81},"\"value\"",[47,147170,51491],{"class":221},[47,147172,530],{"class":85},[47,147174,1659],{"class":221},[47,147176,147177],{"class":49,"line":1288},[47,147178,2493],{"emptyLinePlaceholder":145},[47,147180,147181,147184,147186,147189,147192,147194,147196],{"class":49,"line":1294},[47,147182,147183],{"class":221},"json_text ",[47,147185,267],{"class":217},[47,147187,147188],{"class":221}," json.dumps(data, ",[47,147190,147191],{"class":5309},"ensure_ascii",[47,147193,267],{"class":217},[47,147195,34041],{"class":85},[47,147197,228],{"class":221},[47,147199,147200,147202],{"class":49,"line":1308},[47,147201,30469],{"class":85},[47,147203,147204],{"class":221},"(json_text)\n",[47,147206,147207],{"class":49,"line":1314},[47,147208,2493],{"emptyLinePlaceholder":145},[47,147210,147211,147214,147216],{"class":49,"line":1405},[47,147212,147213],{"class":221},"new_data ",[47,147215,267],{"class":217},[47,147217,147218],{"class":221}," json.loads(json_text)\n",[47,147220,147221,147223],{"class":49,"line":1411},[47,147222,30469],{"class":85},[47,147224,147225],{"class":221},"(new_data)\n",[14,147227,147229],{"id":147228},"_103-安装pyecharts","10.3 安装pyecharts",[38,147231,147233],{"className":40,"code":147232,"language":42,"meta":43,"style":43},"pip install pyecharts\n",[26,147234,147235],{"__ignoreMap":43},[47,147236,147237,147239,147241],{"class":49,"line":50},[47,147238,23922],{"class":53},[47,147240,23925],{"class":81},[47,147242,147243],{"class":81}," pyecharts\n",[19,147245,147246],{},"验证：",[38,147248,147250],{"className":30432,"code":147249,"language":30434,"meta":43,"style":43},"import pyecharts\n\nprint(pyecharts.__version__)\n",[26,147251,147252,147258,147262],{"__ignoreMap":43},[47,147253,147254,147256],{"class":49,"line":50},[47,147255,30446],{"class":217},[47,147257,147243],{"class":221},[47,147259,147260],{"class":49,"line":92},[47,147261,2493],{"emptyLinePlaceholder":145},[47,147263,147264,147266,147269,147272],{"class":49,"line":1273},[47,147265,30469],{"class":85},[47,147267,147268],{"class":221},"(pyecharts.",[47,147270,147271],{"class":85},"__version__",[47,147273,228],{"class":221},[19,147275,147276],{},"如果使用虚拟环境，要先激活环境再安装。",[14,147278,147280],{"id":147279},"_104-第一个折线图","10.4 第一个折线图",[38,147282,147284],{"className":30432,"code":147283,"language":30434,"meta":43,"style":43},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[26,147285,147286,147298,147302,147312,147342,147374],{"__ignoreMap":43},[47,147287,147288,147290,147293,147295],{"class":49,"line":50},[47,147289,30791],{"class":217},[47,147291,147292],{"class":221}," pyecharts.charts ",[47,147294,30446],{"class":217},[47,147296,147297],{"class":221}," Line\n",[47,147299,147300],{"class":49,"line":92},[47,147301,2493],{"emptyLinePlaceholder":145},[47,147303,147304,147307,147309],{"class":49,"line":1273},[47,147305,147306],{"class":221},"line ",[47,147308,267],{"class":217},[47,147310,147311],{"class":221}," Line()\n",[47,147313,147314,147317,147320,147322,147325,147327,147330,147332,147335,147337,147340],{"class":49,"line":1288},[47,147315,147316],{"class":221},"line.add_xaxis([",[47,147318,147319],{"class":81},"\"周一\"",[47,147321,12528],{"class":221},[47,147323,147324],{"class":81},"\"周二\"",[47,147326,12528],{"class":221},[47,147328,147329],{"class":81},"\"周三\"",[47,147331,12528],{"class":221},[47,147333,147334],{"class":81},"\"周四\"",[47,147336,12528],{"class":221},[47,147338,147339],{"class":81},"\"周五\"",[47,147341,4750],{"class":221},[47,147343,147344,147347,147350,147352,147354,147356,147358,147360,147362,147364,147367,147369,147372],{"class":49,"line":1294},[47,147345,147346],{"class":221},"line.add_yaxis(",[47,147348,147349],{"class":81},"\"销售额\"",[47,147351,77572],{"class":221},[47,147353,530],{"class":85},[47,147355,12528],{"class":221},[47,147357,1036],{"class":85},[47,147359,12528],{"class":221},[47,147361,1081],{"class":85},[47,147363,12528],{"class":221},[47,147365,147366],{"class":85},"150",[47,147368,12528],{"class":221},[47,147370,147371],{"class":85},"180",[47,147373,4750],{"class":221},[47,147375,147376,147379,147382],{"class":49,"line":1308},[47,147377,147378],{"class":221},"line.render(",[47,147380,147381],{"class":81},"\"line.html\"",[47,147383,228],{"class":221},[19,147385,147386,147387,147390],{},"运行后会生成 ",[26,147388,147389],{},"line.html","，用浏览器打开即可看到图表。",[19,147392,147393],{},"核心步骤：",[171,147395,147396,147399,147402,147405,147408],{},[109,147397,147398],{},"导入图表类。",[109,147400,147401],{},"创建图表对象。",[109,147403,147404],{},"添加 x 轴数据。",[109,147406,147407],{},"添加 y 轴数据。",[109,147409,147410],{},"渲染为 HTML。",[14,147412,147414],{"id":147413},"_105-全局配置","10.5 全局配置",[19,147416,147417,147418,147421],{},"常用配置在 ",[26,147419,147420],{},"pyecharts.options"," 中。",[38,147423,147425],{"className":30432,"code":147424,"language":30434,"meta":43,"style":43},"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",[26,147426,147427,147444,147454,147458,147466,147490,147518,147523,147542,147561,147579,147599,147603],{"__ignoreMap":43},[47,147428,147429,147431,147434,147436,147439,147441],{"class":49,"line":50},[47,147430,30791],{"class":217},[47,147432,147433],{"class":221}," pyecharts ",[47,147435,30446],{"class":217},[47,147437,147438],{"class":221}," options ",[47,147440,31437],{"class":217},[47,147442,147443],{"class":221}," opts\n",[47,147445,147446,147448,147450,147452],{"class":49,"line":92},[47,147447,30791],{"class":217},[47,147449,147292],{"class":221},[47,147451,30446],{"class":217},[47,147453,147297],{"class":221},[47,147455,147456],{"class":49,"line":1273},[47,147457,2493],{"emptyLinePlaceholder":145},[47,147459,147460,147462,147464],{"class":49,"line":1288},[47,147461,147306],{"class":221},[47,147463,267],{"class":217},[47,147465,147311],{"class":221},[47,147467,147468,147470,147472,147474,147476,147478,147480,147482,147484,147486,147488],{"class":49,"line":1294},[47,147469,147316],{"class":221},[47,147471,147319],{"class":81},[47,147473,12528],{"class":221},[47,147475,147324],{"class":81},[47,147477,12528],{"class":221},[47,147479,147329],{"class":81},[47,147481,12528],{"class":221},[47,147483,147334],{"class":81},[47,147485,12528],{"class":221},[47,147487,147339],{"class":81},[47,147489,4750],{"class":221},[47,147491,147492,147494,147496,147498,147500,147502,147504,147506,147508,147510,147512,147514,147516],{"class":49,"line":1308},[47,147493,147346],{"class":221},[47,147495,147349],{"class":81},[47,147497,77572],{"class":221},[47,147499,530],{"class":85},[47,147501,12528],{"class":221},[47,147503,1036],{"class":85},[47,147505,12528],{"class":221},[47,147507,1081],{"class":85},[47,147509,12528],{"class":221},[47,147511,147366],{"class":85},[47,147513,12528],{"class":221},[47,147515,147371],{"class":85},[47,147517,4750],{"class":221},[47,147519,147520],{"class":49,"line":1314},[47,147521,147522],{"class":221},"line.set_global_opts(\n",[47,147524,147525,147528,147530,147533,147535,147537,147540],{"class":49,"line":1405},[47,147526,147527],{"class":5309},"    title_opts",[47,147529,267],{"class":217},[47,147531,147532],{"class":221},"opts.TitleOpts(",[47,147534,51461],{"class":5309},[47,147536,267],{"class":217},[47,147538,147539],{"class":81},"\"一周销售额\"",[47,147541,38101],{"class":221},[47,147543,147544,147547,147549,147552,147554,147556,147559],{"class":49,"line":1411},[47,147545,147546],{"class":5309},"    xaxis_opts",[47,147548,267],{"class":217},[47,147550,147551],{"class":221},"opts.AxisOpts(",[47,147553,79864],{"class":5309},[47,147555,267],{"class":217},[47,147557,147558],{"class":81},"\"日期\"",[47,147560,38101],{"class":221},[47,147562,147563,147566,147568,147570,147572,147574,147577],{"class":49,"line":1423},[47,147564,147565],{"class":5309},"    yaxis_opts",[47,147567,267],{"class":217},[47,147569,147551],{"class":221},[47,147571,79864],{"class":5309},[47,147573,267],{"class":217},[47,147575,147576],{"class":81},"\"金额\"",[47,147578,38101],{"class":221},[47,147580,147581,147584,147586,147589,147592,147594,147597],{"class":49,"line":1706},[47,147582,147583],{"class":5309},"    tooltip_opts",[47,147585,267],{"class":217},[47,147587,147588],{"class":221},"opts.TooltipOpts(",[47,147590,147591],{"class":5309},"trigger",[47,147593,267],{"class":217},[47,147595,147596],{"class":81},"\"axis\"",[47,147598,38101],{"class":221},[47,147600,147601],{"class":49,"line":1711},[47,147602,228],{"class":221},[47,147604,147605,147607,147609],{"class":49,"line":1717},[47,147606,147378],{"class":221},[47,147608,147381],{"class":81},[47,147610,228],{"class":221},[19,147612,147613],{},"常见全局配置：",[357,147615,147616,147625],{},[360,147617,147618],{},[363,147619,147620,147623],{},[366,147621,147622],{},"配置",[366,147624,102750],{},[404,147626,147627,147637,147647,147657,147667,147677],{},[363,147628,147629,147634],{},[409,147630,147631],{},[26,147632,147633],{},"TitleOpts",[409,147635,147636],{},"标题",[363,147638,147639,147644],{},[409,147640,147641],{},[26,147642,147643],{},"LegendOpts",[409,147645,147646],{},"图例",[363,147648,147649,147654],{},[409,147650,147651],{},[26,147652,147653],{},"TooltipOpts",[409,147655,147656],{},"提示框",[363,147658,147659,147664],{},[409,147660,147661],{},[26,147662,147663],{},"AxisOpts",[409,147665,147666],{},"坐标轴",[363,147668,147669,147674],{},[409,147670,147671],{},[26,147672,147673],{},"VisualMapOpts",[409,147675,147676],{},"视觉映射",[363,147678,147679,147684],{},[409,147680,147681],{},[26,147682,147683],{},"DataZoomOpts",[409,147685,147686],{},"区域缩放",[14,147688,147690],{"id":147689},"_106-系列配置","10.6 系列配置",[19,147692,147693],{},"系列配置作用于某一组数据。",[38,147695,147697],{"className":30432,"code":147696,"language":30434,"meta":43,"style":43},"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",[26,147698,147699,147704,147715,147744,147755,147774],{"__ignoreMap":43},[47,147700,147701],{"class":49,"line":50},[47,147702,147703],{"class":221},"line.add_yaxis(\n",[47,147705,147706,147709,147711,147713],{"class":49,"line":92},[47,147707,147708],{"class":5309},"    series_name",[47,147710,267],{"class":217},[47,147712,147349],{"class":81},[47,147714,31520],{"class":221},[47,147716,147717,147720,147722,147724,147726,147728,147730,147732,147734,147736,147738,147740,147742],{"class":49,"line":1273},[47,147718,147719],{"class":5309},"    y_axis",[47,147721,267],{"class":217},[47,147723,1109],{"class":221},[47,147725,530],{"class":85},[47,147727,12528],{"class":221},[47,147729,1036],{"class":85},[47,147731,12528],{"class":221},[47,147733,1081],{"class":85},[47,147735,12528],{"class":221},[47,147737,147366],{"class":85},[47,147739,12528],{"class":221},[47,147741,147371],{"class":85},[47,147743,87890],{"class":221},[47,147745,147746,147749,147751,147753],{"class":49,"line":1288},[47,147747,147748],{"class":5309},"    is_smooth",[47,147750,267],{"class":217},[47,147752,31530],{"class":85},[47,147754,31520],{"class":221},[47,147756,147757,147760,147762,147765,147768,147770,147772],{"class":49,"line":1294},[47,147758,147759],{"class":5309},"    label_opts",[47,147761,267],{"class":217},[47,147763,147764],{"class":221},"opts.LabelOpts(",[47,147766,147767],{"class":5309},"is_show",[47,147769,267],{"class":217},[47,147771,31530],{"class":85},[47,147773,38101],{"class":221},[47,147775,147776],{"class":49,"line":1308},[47,147777,228],{"class":221},[19,147779,147780],{},"常用参数：",[171,147782,147783,147789,147795,147801,147807],{},[109,147784,147785,147788],{},[26,147786,147787],{},"series_name","：系列名称。",[109,147790,147791,147794],{},[26,147792,147793],{},"y_axis","：y 轴数据。",[109,147796,147797,147800],{},[26,147798,147799],{},"is_smooth","：是否平滑曲线。",[109,147802,147803,147806],{},[26,147804,147805],{},"label_opts","：标签配置。",[109,147808,147809,147812],{},[26,147810,147811],{},"symbol_size","：标记点大小。",[14,147814,147816],{"id":147815},"_107-多条折线","10.7 多条折线",[38,147818,147820],{"className":30432,"code":147819,"language":30434,"meta":43,"style":43},"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",[26,147821,147822,147836,147846,147850,147879,147883,147891,147896,147934,147971,147975,147992,148008,148012],{"__ignoreMap":43},[47,147823,147824,147826,147828,147830,147832,147834],{"class":49,"line":50},[47,147825,30791],{"class":217},[47,147827,147433],{"class":221},[47,147829,30446],{"class":217},[47,147831,147438],{"class":221},[47,147833,31437],{"class":217},[47,147835,147443],{"class":221},[47,147837,147838,147840,147842,147844],{"class":49,"line":92},[47,147839,30791],{"class":217},[47,147841,147292],{"class":221},[47,147843,30446],{"class":217},[47,147845,147297],{"class":221},[47,147847,147848],{"class":49,"line":1273},[47,147849,2493],{"emptyLinePlaceholder":145},[47,147851,147852,147855,147857,147859,147861,147863,147865,147867,147869,147871,147873,147875,147877],{"class":49,"line":1288},[47,147853,147854],{"class":221},"dates ",[47,147856,267],{"class":217},[47,147858,52280],{"class":221},[47,147860,147319],{"class":81},[47,147862,12528],{"class":221},[47,147864,147324],{"class":81},[47,147866,12528],{"class":221},[47,147868,147329],{"class":81},[47,147870,12528],{"class":221},[47,147872,147334],{"class":81},[47,147874,12528],{"class":221},[47,147876,147339],{"class":81},[47,147878,33300],{"class":221},[47,147880,147881],{"class":49,"line":1294},[47,147882,2493],{"emptyLinePlaceholder":145},[47,147884,147885,147887,147889],{"class":49,"line":1308},[47,147886,147306],{"class":221},[47,147888,267],{"class":217},[47,147890,147311],{"class":221},[47,147892,147893],{"class":49,"line":1314},[47,147894,147895],{"class":221},"line.add_xaxis(dates)\n",[47,147897,147898,147900,147903,147905,147907,147909,147912,147914,147916,147918,147920,147922,147924,147926,147928,147930,147932],{"class":49,"line":1405},[47,147899,147346],{"class":221},[47,147901,147902],{"class":81},"\"线上销售\"",[47,147904,77572],{"class":221},[47,147906,530],{"class":85},[47,147908,12528],{"class":221},[47,147910,147911],{"class":85},"130",[47,147913,12528],{"class":221},[47,147915,1036],{"class":85},[47,147917,12528],{"class":221},[47,147919,21141],{"class":85},[47,147921,12528],{"class":221},[47,147923,1816],{"class":85},[47,147925,112256],{"class":221},[47,147927,147799],{"class":5309},[47,147929,267],{"class":217},[47,147931,31530],{"class":85},[47,147933,228],{"class":221},[47,147935,147936,147938,147941,147943,147945,147947,147949,147951,147953,147955,147957,147959,147961,147963,147965,147967,147969],{"class":49,"line":1411},[47,147937,147346],{"class":221},[47,147939,147940],{"class":81},"\"线下销售\"",[47,147942,77572],{"class":221},[47,147944,831],{"class":85},[47,147946,12528],{"class":221},[47,147948,1081],{"class":85},[47,147950,12528],{"class":221},[47,147952,530],{"class":85},[47,147954,12528],{"class":221},[47,147956,1036],{"class":85},[47,147958,12528],{"class":221},[47,147960,147366],{"class":85},[47,147962,112256],{"class":221},[47,147964,147799],{"class":5309},[47,147966,267],{"class":217},[47,147968,31530],{"class":85},[47,147970,228],{"class":221},[47,147972,147973],{"class":49,"line":1423},[47,147974,147522],{"class":221},[47,147976,147977,147979,147981,147983,147985,147987,147990],{"class":49,"line":1706},[47,147978,147527],{"class":5309},[47,147980,267],{"class":217},[47,147982,147532],{"class":221},[47,147984,51461],{"class":5309},[47,147986,267],{"class":217},[47,147988,147989],{"class":81},"\"线上线下销售趋势\"",[47,147991,38101],{"class":221},[47,147993,147994,147996,147998,148000,148002,148004,148006],{"class":49,"line":1711},[47,147995,147583],{"class":5309},[47,147997,267],{"class":217},[47,147999,147588],{"class":221},[47,148001,147591],{"class":5309},[47,148003,267],{"class":217},[47,148005,147596],{"class":81},[47,148007,38101],{"class":221},[47,148009,148010],{"class":49,"line":1717},[47,148011,228],{"class":221},[47,148013,148014,148016,148019],{"class":49,"line":1722},[47,148015,147378],{"class":221},[47,148017,148018],{"class":81},"\"sales.html\"",[47,148020,228],{"class":221},[19,148022,148023],{},"多条折线适合比较不同指标或不同地区。",[14,148025,148027],{"id":148026},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,148029,148030,148031,125],{},"假设 ",[26,148032,148033],{},"sales.json",[38,148035,148037],{"className":147099,"code":148036,"language":145846,"meta":43,"style":43},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[26,148038,148039,148044,148076,148104,148132],{"__ignoreMap":43},[47,148040,148041],{"class":49,"line":50},[47,148042,148043],{"class":221},"[\n",[47,148045,148046,148049,148052,148054,148056,148058,148061,148063,148065,148067,148070,148072,148074],{"class":49,"line":92},[47,148047,148048],{"class":221},"  {",[47,148050,148051],{"class":85},"\"date\"",[47,148053,51491],{"class":221},[47,148055,147319],{"class":81},[47,148057,12528],{"class":221},[47,148059,148060],{"class":85},"\"online\"",[47,148062,51491],{"class":221},[47,148064,530],{"class":85},[47,148066,12528],{"class":221},[47,148068,148069],{"class":85},"\"offline\"",[47,148071,51491],{"class":221},[47,148073,831],{"class":85},[47,148075,5023],{"class":221},[47,148077,148078,148080,148082,148084,148086,148088,148090,148092,148094,148096,148098,148100,148102],{"class":49,"line":1273},[47,148079,148048],{"class":221},[47,148081,148051],{"class":85},[47,148083,51491],{"class":221},[47,148085,147324],{"class":81},[47,148087,12528],{"class":221},[47,148089,148060],{"class":85},[47,148091,51491],{"class":221},[47,148093,147911],{"class":85},[47,148095,12528],{"class":221},[47,148097,148069],{"class":85},[47,148099,51491],{"class":221},[47,148101,1081],{"class":85},[47,148103,5023],{"class":221},[47,148105,148106,148108,148110,148112,148114,148116,148118,148120,148122,148124,148126,148128,148130],{"class":49,"line":1288},[47,148107,148048],{"class":221},[47,148109,148051],{"class":85},[47,148111,51491],{"class":221},[47,148113,147329],{"class":81},[47,148115,12528],{"class":221},[47,148117,148060],{"class":85},[47,148119,51491],{"class":221},[47,148121,1036],{"class":85},[47,148123,12528],{"class":221},[47,148125,148069],{"class":85},[47,148127,51491],{"class":221},[47,148129,530],{"class":85},[47,148131,1659],{"class":221},[47,148133,148134],{"class":49,"line":1294},[47,148135,33300],{"class":221},[19,148137,148138],{},"读取并绘图：",[38,148140,148142],{"className":30432,"code":148141,"language":30434,"meta":43,"style":43},"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",[26,148143,148144,148150,148164,148174,148178,148210,148223,148227,148235,148244,148253,148257,148269,148278,148287,148296,148300,148308,148312,148329,148346,148350,148367,148383,148387],{"__ignoreMap":43},[47,148145,148146,148148],{"class":49,"line":50},[47,148147,30446],{"class":217},[47,148149,147145],{"class":221},[47,148151,148152,148154,148156,148158,148160,148162],{"class":49,"line":92},[47,148153,30791],{"class":217},[47,148155,147433],{"class":221},[47,148157,30446],{"class":217},[47,148159,147438],{"class":221},[47,148161,31437],{"class":217},[47,148163,147443],{"class":221},[47,148165,148166,148168,148170,148172],{"class":49,"line":1273},[47,148167,30791],{"class":217},[47,148169,147292],{"class":221},[47,148171,30446],{"class":217},[47,148173,147297],{"class":221},[47,148175,148176],{"class":49,"line":1288},[47,148177,2493],{"emptyLinePlaceholder":145},[47,148179,148180,148182,148184,148186,148189,148191,148193,148195,148197,148199,148201,148203,148205,148208],{"class":49,"line":1294},[47,148181,107887],{"class":217},[47,148183,146845],{"class":85},[47,148185,222],{"class":221},[47,148187,148188],{"class":81},"\"sales.json\"",[47,148190,12528],{"class":221},[47,148192,146855],{"class":81},[47,148194,12528],{"class":221},[47,148196,146860],{"class":5309},[47,148198,267],{"class":217},[47,148200,146865],{"class":81},[47,148202,13807],{"class":221},[47,148204,31437],{"class":217},[47,148206,148207],{"class":5309}," file",[47,148209,3832],{"class":221},[47,148211,148212,148214,148216,148219,148221],{"class":49,"line":1308},[47,148213,101475],{"class":221},[47,148215,267],{"class":217},[47,148217,148218],{"class":221}," json.load(",[47,148220,45408],{"class":5309},[47,148222,228],{"class":221},[47,148224,148225],{"class":49,"line":1314},[47,148226,2493],{"emptyLinePlaceholder":145},[47,148228,148229,148231,148233],{"class":49,"line":1405},[47,148230,147854],{"class":221},[47,148232,267],{"class":217},[47,148234,51892],{"class":221},[47,148236,148237,148240,148242],{"class":49,"line":1411},[47,148238,148239],{"class":221},"online_sales ",[47,148241,267],{"class":217},[47,148243,51892],{"class":221},[47,148245,148246,148249,148251],{"class":49,"line":1423},[47,148247,148248],{"class":221},"offline_sales ",[47,148250,267],{"class":217},[47,148252,51892],{"class":221},[47,148254,148255],{"class":49,"line":1706},[47,148256,2493],{"emptyLinePlaceholder":145},[47,148258,148259,148261,148264,148266],{"class":49,"line":1711},[47,148260,3118],{"class":217},[47,148262,148263],{"class":221}," item ",[47,148265,26097],{"class":217},[47,148267,148268],{"class":221}," data:\n",[47,148270,148271,148274,148276],{"class":49,"line":1717},[47,148272,148273],{"class":221},"    dates.append(item[",[47,148275,148051],{"class":81},[47,148277,4750],{"class":221},[47,148279,148280,148283,148285],{"class":49,"line":1722},[47,148281,148282],{"class":221},"    online_sales.append(item[",[47,148284,148060],{"class":81},[47,148286,4750],{"class":221},[47,148288,148289,148292,148294],{"class":49,"line":1736},[47,148290,148291],{"class":221},"    offline_sales.append(item[",[47,148293,148069],{"class":81},[47,148295,4750],{"class":221},[47,148297,148298],{"class":49,"line":1741},[47,148299,2493],{"emptyLinePlaceholder":145},[47,148301,148302,148304,148306],{"class":49,"line":1747},[47,148303,147306],{"class":221},[47,148305,267],{"class":217},[47,148307,147311],{"class":221},[47,148309,148310],{"class":49,"line":1768},[47,148311,147895],{"class":221},[47,148313,148314,148316,148318,148321,148323,148325,148327],{"class":49,"line":1773},[47,148315,147346],{"class":221},[47,148317,147902],{"class":81},[47,148319,148320],{"class":221},", online_sales, ",[47,148322,147799],{"class":5309},[47,148324,267],{"class":217},[47,148326,31530],{"class":85},[47,148328,228],{"class":221},[47,148330,148331,148333,148335,148338,148340,148342,148344],{"class":49,"line":1787},[47,148332,147346],{"class":221},[47,148334,147940],{"class":81},[47,148336,148337],{"class":221},", offline_sales, ",[47,148339,147799],{"class":5309},[47,148341,267],{"class":217},[47,148343,31530],{"class":85},[47,148345,228],{"class":221},[47,148347,148348],{"class":49,"line":1792},[47,148349,147522],{"class":221},[47,148351,148352,148354,148356,148358,148360,148362,148365],{"class":49,"line":1821},[47,148353,147527],{"class":5309},[47,148355,267],{"class":217},[47,148357,147532],{"class":221},[47,148359,51461],{"class":5309},[47,148361,267],{"class":217},[47,148363,148364],{"class":81},"\"销售趋势\"",[47,148366,38101],{"class":221},[47,148368,148369,148371,148373,148375,148377,148379,148381],{"class":49,"line":1826},[47,148370,147583],{"class":5309},[47,148372,267],{"class":217},[47,148374,147588],{"class":221},[47,148376,147591],{"class":5309},[47,148378,267],{"class":217},[47,148380,147596],{"class":81},[47,148382,38101],{"class":221},[47,148384,148385],{"class":49,"line":1843},[47,148386,228],{"class":221},[47,148388,148389,148391,148393],{"class":49,"line":1848},[47,148390,147378],{"class":221},[47,148392,148018],{"class":81},[47,148394,228],{"class":221},[14,148396,148398],{"id":148397},"_109-数据清洗","10.9 数据清洗",[19,148400,148401],{},"真实数据经常不整齐，需要清洗。",[19,148403,148404],{},"常见问题：",[171,148406,148407,148410,148413,148416],{},[109,148408,148409],{},"数字是字符串。",[109,148411,148412],{},"字段缺失。",[109,148414,148415],{},"空值。",[109,148417,148418],{},"日期格式不统一。",[19,148420,15228],{},[38,148422,148424],{"className":30432,"code":148423,"language":30434,"meta":43,"style":43},"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",[26,148425,148426,148435,148458,148478,148499,148503,148507,148515,148524,148528,148539,148553,148562,148567,148571,148579,148589,148593,148600],{"__ignoreMap":43},[47,148427,148428,148431,148433],{"class":49,"line":50},[47,148429,148430],{"class":221},"raw_data ",[47,148432,267],{"class":217},[47,148434,55501],{"class":221},[47,148436,148437,148440,148442,148444,148446,148448,148451,148453,148456],{"class":49,"line":92},[47,148438,148439],{"class":221},"    {",[47,148441,148051],{"class":81},[47,148443,51491],{"class":221},[47,148445,147319],{"class":81},[47,148447,12528],{"class":221},[47,148449,148450],{"class":81},"\"sales\"",[47,148452,51491],{"class":221},[47,148454,148455],{"class":81},"\"100\"",[47,148457,5023],{"class":221},[47,148459,148460,148462,148464,148466,148468,148470,148472,148474,148476],{"class":49,"line":1273},[47,148461,148439],{"class":221},[47,148463,148051],{"class":81},[47,148465,51491],{"class":221},[47,148467,147324],{"class":81},[47,148469,12528],{"class":221},[47,148471,148450],{"class":81},[47,148473,51491],{"class":221},[47,148475,7745],{"class":81},[47,148477,5023],{"class":221},[47,148479,148480,148482,148484,148486,148488,148490,148492,148494,148497],{"class":49,"line":1288},[47,148481,148439],{"class":221},[47,148483,148051],{"class":81},[47,148485,51491],{"class":221},[47,148487,147329],{"class":81},[47,148489,12528],{"class":221},[47,148491,148450],{"class":81},[47,148493,51491],{"class":221},[47,148495,148496],{"class":81},"\"120\"",[47,148498,5023],{"class":221},[47,148500,148501],{"class":49,"line":1294},[47,148502,33300],{"class":221},[47,148504,148505],{"class":49,"line":1308},[47,148506,2493],{"emptyLinePlaceholder":145},[47,148508,148509,148511,148513],{"class":49,"line":1314},[47,148510,147854],{"class":221},[47,148512,267],{"class":217},[47,148514,51892],{"class":221},[47,148516,148517,148520,148522],{"class":49,"line":1405},[47,148518,148519],{"class":221},"sales ",[47,148521,267],{"class":217},[47,148523,51892],{"class":221},[47,148525,148526],{"class":49,"line":1411},[47,148527,2493],{"emptyLinePlaceholder":145},[47,148529,148530,148532,148534,148536],{"class":49,"line":1423},[47,148531,3118],{"class":217},[47,148533,148263],{"class":221},[47,148535,26097],{"class":217},[47,148537,148538],{"class":221}," raw_data:\n",[47,148540,148541,148544,148546,148549,148551],{"class":49,"line":1706},[47,148542,148543],{"class":221},"    value ",[47,148545,267],{"class":217},[47,148547,148548],{"class":221}," item.get(",[47,148550,148450],{"class":81},[47,148552,228],{"class":221},[47,148554,148555,148557,148559],{"class":49,"line":1711},[47,148556,3194],{"class":217},[47,148558,38984],{"class":217},[47,148560,148561],{"class":221}," value:\n",[47,148563,148564],{"class":49,"line":1717},[47,148565,148566],{"class":217},"        continue\n",[47,148568,148569],{"class":49,"line":1722},[47,148570,2493],{"emptyLinePlaceholder":145},[47,148572,148573,148575,148577],{"class":49,"line":1736},[47,148574,148273],{"class":221},[47,148576,148051],{"class":81},[47,148578,4750],{"class":221},[47,148580,148581,148584,148586],{"class":49,"line":1741},[47,148582,148583],{"class":221},"    sales.append(",[47,148585,225],{"class":85},[47,148587,148588],{"class":221},"(value))\n",[47,148590,148591],{"class":49,"line":1747},[47,148592,2493],{"emptyLinePlaceholder":145},[47,148594,148595,148597],{"class":49,"line":1768},[47,148596,30469],{"class":85},[47,148598,148599],{"class":221},"(dates)\n",[47,148601,148602,148604],{"class":49,"line":1773},[47,148603,30469],{"class":85},[47,148605,148606],{"class":221},"(sales)\n",[14,148608,148610],{"id":148609},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[38,148612,148614],{"className":30432,"code":148613,"language":30434,"meta":43,"style":43},"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",[26,148615,148616,148630,148640,148644,148652,148673,148695,148717,148739,148761,148765,148769,148791,148812,148816,148824,148828,148832,148842,148851,148861,148877,148881,148885,148902,148918,148934,148950,148960,148964],{"__ignoreMap":43},[47,148617,148618,148620,148622,148624,148626,148628],{"class":49,"line":50},[47,148619,30791],{"class":217},[47,148621,147433],{"class":221},[47,148623,30446],{"class":217},[47,148625,147438],{"class":221},[47,148627,31437],{"class":217},[47,148629,147443],{"class":221},[47,148631,148632,148634,148636,148638],{"class":49,"line":92},[47,148633,30791],{"class":217},[47,148635,147292],{"class":221},[47,148637,30446],{"class":217},[47,148639,147297],{"class":221},[47,148641,148642],{"class":49,"line":1273},[47,148643,2493],{"emptyLinePlaceholder":145},[47,148645,148646,148648,148650],{"class":49,"line":1288},[47,148647,148519],{"class":221},[47,148649,267],{"class":217},[47,148651,55501],{"class":221},[47,148653,148654,148656,148658,148660,148663,148665,148667,148669,148671],{"class":49,"line":1294},[47,148655,148439],{"class":221},[47,148657,148051],{"class":81},[47,148659,51491],{"class":221},[47,148661,148662],{"class":81},"\"2024-10-01\"",[47,148664,12528],{"class":221},[47,148666,84138],{"class":81},[47,148668,51491],{"class":221},[47,148670,92077],{"class":85},[47,148672,5023],{"class":221},[47,148674,148675,148677,148679,148681,148684,148686,148688,148690,148693],{"class":49,"line":1308},[47,148676,148439],{"class":221},[47,148678,148051],{"class":81},[47,148680,51491],{"class":221},[47,148682,148683],{"class":81},"\"2024-10-02\"",[47,148685,12528],{"class":221},[47,148687,84138],{"class":81},[47,148689,51491],{"class":221},[47,148691,148692],{"class":85},"1800",[47,148694,5023],{"class":221},[47,148696,148697,148699,148701,148703,148706,148708,148710,148712,148715],{"class":49,"line":1314},[47,148698,148439],{"class":221},[47,148700,148051],{"class":81},[47,148702,51491],{"class":221},[47,148704,148705],{"class":81},"\"2024-10-03\"",[47,148707,12528],{"class":221},[47,148709,84138],{"class":81},[47,148711,51491],{"class":221},[47,148713,148714],{"class":85},"1500",[47,148716,5023],{"class":221},[47,148718,148719,148721,148723,148725,148728,148730,148732,148734,148737],{"class":49,"line":1405},[47,148720,148439],{"class":221},[47,148722,148051],{"class":81},[47,148724,51491],{"class":221},[47,148726,148727],{"class":81},"\"2024-10-04\"",[47,148729,12528],{"class":221},[47,148731,84138],{"class":81},[47,148733,51491],{"class":221},[47,148735,148736],{"class":85},"2100",[47,148738,5023],{"class":221},[47,148740,148741,148743,148745,148747,148750,148752,148754,148756,148759],{"class":49,"line":1411},[47,148742,148439],{"class":221},[47,148744,148051],{"class":81},[47,148746,51491],{"class":221},[47,148748,148749],{"class":81},"\"2024-10-05\"",[47,148751,12528],{"class":221},[47,148753,84138],{"class":81},[47,148755,51491],{"class":221},[47,148757,148758],{"class":85},"2600",[47,148760,5023],{"class":221},[47,148762,148763],{"class":49,"line":1423},[47,148764,33300],{"class":221},[47,148766,148767],{"class":49,"line":1706},[47,148768,2493],{"emptyLinePlaceholder":145},[47,148770,148771,148773,148775,148778,148780,148782,148784,148786,148788],{"class":49,"line":1711},[47,148772,147854],{"class":221},[47,148774,267],{"class":217},[47,148776,148777],{"class":221}," [item[",[47,148779,148051],{"class":81},[47,148781,4536],{"class":221},[47,148783,3118],{"class":217},[47,148785,148263],{"class":221},[47,148787,26097],{"class":217},[47,148789,148790],{"class":221}," sales]\n",[47,148792,148793,148796,148798,148800,148802,148804,148806,148808,148810],{"class":49,"line":1717},[47,148794,148795],{"class":221},"amounts ",[47,148797,267],{"class":217},[47,148799,148777],{"class":221},[47,148801,84138],{"class":81},[47,148803,4536],{"class":221},[47,148805,3118],{"class":217},[47,148807,148263],{"class":221},[47,148809,26097],{"class":217},[47,148811,148790],{"class":221},[47,148813,148814],{"class":49,"line":1722},[47,148815,2493],{"emptyLinePlaceholder":145},[47,148817,148818,148820,148822],{"class":49,"line":1736},[47,148819,147306],{"class":221},[47,148821,267],{"class":217},[47,148823,147311],{"class":221},[47,148825,148826],{"class":49,"line":1741},[47,148827,147895],{"class":221},[47,148829,148830],{"class":49,"line":1747},[47,148831,147703],{"class":221},[47,148833,148834,148836,148838,148840],{"class":49,"line":1768},[47,148835,147708],{"class":5309},[47,148837,267],{"class":217},[47,148839,147349],{"class":81},[47,148841,31520],{"class":221},[47,148843,148844,148846,148848],{"class":49,"line":1773},[47,148845,147719],{"class":5309},[47,148847,267],{"class":217},[47,148849,148850],{"class":221},"amounts,\n",[47,148852,148853,148855,148857,148859],{"class":49,"line":1787},[47,148854,147748],{"class":5309},[47,148856,267],{"class":217},[47,148858,31530],{"class":85},[47,148860,31520],{"class":221},[47,148862,148863,148865,148867,148869,148871,148873,148875],{"class":49,"line":1792},[47,148864,147759],{"class":5309},[47,148866,267],{"class":217},[47,148868,147764],{"class":221},[47,148870,147767],{"class":5309},[47,148872,267],{"class":217},[47,148874,31530],{"class":85},[47,148876,38101],{"class":221},[47,148878,148879],{"class":49,"line":1821},[47,148880,228],{"class":221},[47,148882,148883],{"class":49,"line":1826},[47,148884,147522],{"class":221},[47,148886,148887,148889,148891,148893,148895,148897,148900],{"class":49,"line":1843},[47,148888,147527],{"class":5309},[47,148890,267],{"class":217},[47,148892,147532],{"class":221},[47,148894,51461],{"class":5309},[47,148896,267],{"class":217},[47,148898,148899],{"class":81},"\"每日销售额\"",[47,148901,38101],{"class":221},[47,148903,148904,148906,148908,148910,148912,148914,148916],{"class":49,"line":1848},[47,148905,147546],{"class":5309},[47,148907,267],{"class":217},[47,148909,147551],{"class":221},[47,148911,79864],{"class":5309},[47,148913,267],{"class":217},[47,148915,147558],{"class":81},[47,148917,38101],{"class":221},[47,148919,148920,148922,148924,148926,148928,148930,148932],{"class":49,"line":1853},[47,148921,147565],{"class":5309},[47,148923,267],{"class":217},[47,148925,147551],{"class":221},[47,148927,79864],{"class":5309},[47,148929,267],{"class":217},[47,148931,147576],{"class":81},[47,148933,38101],{"class":221},[47,148935,148936,148938,148940,148942,148944,148946,148948],{"class":49,"line":1858},[47,148937,147583],{"class":5309},[47,148939,267],{"class":217},[47,148941,147588],{"class":221},[47,148943,147591],{"class":5309},[47,148945,267],{"class":217},[47,148947,147596],{"class":81},[47,148949,38101],{"class":221},[47,148951,148952,148955,148957],{"class":49,"line":1872},[47,148953,148954],{"class":5309},"    datazoom_opts",[47,148956,267],{"class":217},[47,148958,148959],{"class":221},"[opts.DataZoomOpts()],\n",[47,148961,148962],{"class":49,"line":1877},[47,148963,228],{"class":221},[47,148965,148966,148968,148971],{"class":49,"line":2670},[47,148967,147378],{"class":221},[47,148969,148970],{"class":81},"\"daily_sales.html\"",[47,148972,228],{"class":221},[19,148974,148975,148978],{},[26,148976,148977],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,148980,148982],{"id":148981},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,148984,148985],{},"如果数据结构如下：",[38,148987,148989],{"className":30432,"code":148988,"language":30434,"meta":43,"style":43},"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",[26,148990,148991,148999,149007,149029,149050,149055,149062,149082,149102,149106],{"__ignoreMap":43},[47,148992,148993,148995,148997],{"class":49,"line":50},[47,148994,101712],{"class":221},[47,148996,267],{"class":217},[47,148998,15665],{"class":221},[47,149000,149001,149004],{"class":49,"line":92},[47,149002,149003],{"class":81},"    \"北京\"",[47,149005,149006],{"class":221},": [\n",[47,149008,149009,149011,149013,149015,149018,149020,149023,149025,149027],{"class":49,"line":1273},[47,149010,5010],{"class":221},[47,149012,148051],{"class":81},[47,149014,51491],{"class":221},[47,149016,149017],{"class":81},"\"2024-01-01\"",[47,149019,12528],{"class":221},[47,149021,149022],{"class":81},"\"confirm\"",[47,149024,51491],{"class":221},[47,149026,665],{"class":85},[47,149028,5023],{"class":221},[47,149030,149031,149033,149035,149037,149040,149042,149044,149046,149048],{"class":49,"line":1288},[47,149032,5010],{"class":221},[47,149034,148051],{"class":81},[47,149036,51491],{"class":221},[47,149038,149039],{"class":81},"\"2024-01-02\"",[47,149041,12528],{"class":221},[47,149043,149022],{"class":81},[47,149045,51491],{"class":221},[47,149047,717],{"class":85},[47,149049,5023],{"class":221},[47,149051,149052],{"class":49,"line":1294},[47,149053,149054],{"class":221},"    ],\n",[47,149056,149057,149060],{"class":49,"line":1308},[47,149058,149059],{"class":81},"    \"上海\"",[47,149061,149006],{"class":221},[47,149063,149064,149066,149068,149070,149072,149074,149076,149078,149080],{"class":49,"line":1314},[47,149065,5010],{"class":221},[47,149067,148051],{"class":81},[47,149069,51491],{"class":221},[47,149071,149017],{"class":81},[47,149073,12528],{"class":221},[47,149075,149022],{"class":81},[47,149077,51491],{"class":221},[47,149079,614],{"class":85},[47,149081,5023],{"class":221},[47,149083,149084,149086,149088,149090,149092,149094,149096,149098,149100],{"class":49,"line":1405},[47,149085,5010],{"class":221},[47,149087,148051],{"class":81},[47,149089,51491],{"class":221},[47,149091,149039],{"class":81},[47,149093,12528],{"class":221},[47,149095,149022],{"class":81},[47,149097,51491],{"class":221},[47,149099,742],{"class":85},[47,149101,5023],{"class":221},[47,149103,149104],{"class":49,"line":1411},[47,149105,149054],{"class":221},[47,149107,149108],{"class":49,"line":1423},[47,149109,1659],{"class":221},[19,149111,149112],{},"绘制多地区趋势：",[38,149114,149116],{"className":30432,"code":149115,"language":30434,"meta":43,"style":43},"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",[26,149117,149118,149132,149142,149146,149171,149175,149183,149187,149191,149203,149225,149238,149242,149246,149263,149279,149283],{"__ignoreMap":43},[47,149119,149120,149122,149124,149126,149128,149130],{"class":49,"line":50},[47,149121,30791],{"class":217},[47,149123,147433],{"class":221},[47,149125,30446],{"class":217},[47,149127,147438],{"class":221},[47,149129,31437],{"class":217},[47,149131,147443],{"class":221},[47,149133,149134,149136,149138,149140],{"class":49,"line":92},[47,149135,30791],{"class":217},[47,149137,147292],{"class":221},[47,149139,30446],{"class":217},[47,149141,147297],{"class":221},[47,149143,149144],{"class":49,"line":1273},[47,149145,2493],{"emptyLinePlaceholder":145},[47,149147,149148,149150,149152,149154,149156,149158,149160,149162,149164,149167,149169],{"class":49,"line":1288},[47,149149,147854],{"class":221},[47,149151,267],{"class":217},[47,149153,148777],{"class":221},[47,149155,148051],{"class":81},[47,149157,4536],{"class":221},[47,149159,3118],{"class":217},[47,149161,148263],{"class":221},[47,149163,26097],{"class":217},[47,149165,149166],{"class":221}," data[",[47,149168,69323],{"class":81},[47,149170,77581],{"class":221},[47,149172,149173],{"class":49,"line":1294},[47,149174,2493],{"emptyLinePlaceholder":145},[47,149176,149177,149179,149181],{"class":49,"line":1308},[47,149178,147306],{"class":221},[47,149180,267],{"class":217},[47,149182,147311],{"class":221},[47,149184,149185],{"class":49,"line":1314},[47,149186,147895],{"class":221},[47,149188,149189],{"class":49,"line":1405},[47,149190,2493],{"emptyLinePlaceholder":145},[47,149192,149193,149195,149198,149200],{"class":49,"line":1411},[47,149194,3118],{"class":217},[47,149196,149197],{"class":221}," city, records ",[47,149199,26097],{"class":217},[47,149201,149202],{"class":221}," data.items():\n",[47,149204,149205,149208,149210,149212,149214,149216,149218,149220,149222],{"class":49,"line":1423},[47,149206,149207],{"class":221},"    values ",[47,149209,267],{"class":217},[47,149211,148777],{"class":221},[47,149213,149022],{"class":81},[47,149215,4536],{"class":221},[47,149217,3118],{"class":217},[47,149219,148263],{"class":221},[47,149221,26097],{"class":217},[47,149223,149224],{"class":221}," records]\n",[47,149226,149227,149230,149232,149234,149236],{"class":49,"line":1706},[47,149228,149229],{"class":221},"    line.add_yaxis(city, values, ",[47,149231,147799],{"class":5309},[47,149233,267],{"class":217},[47,149235,31530],{"class":85},[47,149237,228],{"class":221},[47,149239,149240],{"class":49,"line":1711},[47,149241,2493],{"emptyLinePlaceholder":145},[47,149243,149244],{"class":49,"line":1717},[47,149245,147522],{"class":221},[47,149247,149248,149250,149252,149254,149256,149258,149261],{"class":49,"line":1722},[47,149249,147527],{"class":5309},[47,149251,267],{"class":217},[47,149253,147532],{"class":221},[47,149255,51461],{"class":5309},[47,149257,267],{"class":217},[47,149259,149260],{"class":81},"\"多地区趋势图\"",[47,149262,38101],{"class":221},[47,149264,149265,149267,149269,149271,149273,149275,149277],{"class":49,"line":1736},[47,149266,147583],{"class":5309},[47,149268,267],{"class":217},[47,149270,147588],{"class":221},[47,149272,147591],{"class":5309},[47,149274,267],{"class":217},[47,149276,147596],{"class":81},[47,149278,38101],{"class":221},[47,149280,149281],{"class":49,"line":1741},[47,149282,228],{"class":221},[47,149284,149285,149287,149290],{"class":49,"line":1747},[47,149286,147378],{"class":221},[47,149288,149289],{"class":81},"\"trend.html\"",[47,149291,228],{"class":221},[19,149293,149294],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,149296,149298],{"id":149297},"_1012-易错点","10.12 易错点",[171,149300,149301,149307,149313,149323,149329],{},[109,149302,149303,149306],{},[26,149304,149305],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[109,149308,149309,149312],{},[26,149310,149311],{},"render()"," 生成的是 HTML，不是图片。",[109,149314,149315,149316,149319,149320,28439],{},"JSON 字符串用 ",[26,149317,149318],{},"json.loads()","，JSON 文件用 ",[26,149321,149322],{},"json.load()",[109,149324,149325,149326,28439],{},"中文 JSON 保存时加 ",[26,149327,149328],{},"ensure_ascii=False",[109,149330,149331],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,149333,149335],{"id":149334},"_1013-本章练习","10.13 本章练习",[171,149337,149338,149341,149344,149347,149350],{},[109,149339,149340],{},"安装 pyecharts 并生成第一个折线图。",[109,149342,149343],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[109,149345,149346],{},"绘制两条折线，对比线上和线下销售额。",[109,149348,149349],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[109,149351,149352],{},"对含有空值的销售数据进行清洗后再绘图。",[134,149354,149355],{},"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":43,"searchDepth":92,"depth":92,"links":149357},[149358,149359,149360,149361,149362,149363,149364,149365,149366,149367,149368,149369,149370],{"id":146974,"depth":92,"text":146975},{"id":147049,"depth":92,"text":147050},{"id":147228,"depth":92,"text":147229},{"id":147279,"depth":92,"text":147280},{"id":147413,"depth":92,"text":147414},{"id":147689,"depth":92,"text":147690},{"id":147815,"depth":92,"text":147816},{"id":148026,"depth":92,"text":148027},{"id":148397,"depth":92,"text":148398},{"id":148609,"depth":92,"text":148610},{"id":148981,"depth":92,"text":148982},{"id":149297,"depth":92,"text":149298},{"id":149334,"depth":92,"text":149335},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":146966,"description":142},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149377,"title":149378,"body":149379,"description":142,"extension":143,"meta":151739,"navigation":145,"path":151740,"seo":151741,"stem":151742,"__hash__":151743},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149380,"toc":151716},[149381,149384,149388,149391,149394,149470,149473,149564,149567,149571,149574,149618,149631,149635,149638,149705,149708,149712,149715,149799,149807,149811,149816,149957,149960,149971,149977,149983,150097,150101,150104,150107,150360,150363,150367,150370,150474,150477,150481,150632,150636,150643,150756,150760,150763,150869,150872,150876,150879,150910,150913,151018,151021,151025,151029,151039,151107,151111,151118,151182,151185,151189,151195,151291,151300,151304,151628,151637,151641,151669,151673,151713],[10,149382,149378],{"id":149383},"_11-面向对象基础",[14,149385,149387],{"id":149386},"_111-什么是面向对象","11.1 什么是面向对象",[19,149389,149390],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,149392,149393],{},"面向过程：",[38,149395,149397],{"className":30432,"code":149396,"language":30434,"meta":43,"style":43},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[26,149398,149399,149408,149416,149420,149430,149461,149465],{"__ignoreMap":43},[47,149400,149401,149403,149405],{"class":49,"line":50},[47,149402,146590],{"class":221},[47,149404,267],{"class":217},[47,149406,149407],{"class":81}," \"小明\"\n",[47,149409,149410,149412,149414],{"class":49,"line":92},[47,149411,146600],{"class":221},[47,149413,267],{"class":217},[47,149415,146605],{"class":85},[47,149417,149418],{"class":49,"line":1273},[47,149419,2493],{"emptyLinePlaceholder":145},[47,149421,149422,149424,149427],{"class":49,"line":1288},[47,149423,32001],{"class":217},[47,149425,149426],{"class":53}," introduce",[47,149428,149429],{"class":221},"(name, age):\n",[47,149431,149432,149434,149436,149438,149441,149443,149445,149447,149450,149452,149454,149456,149459],{"class":49,"line":1294},[47,149433,31353],{"class":85},[47,149435,222],{"class":221},[47,149437,273],{"class":217},[47,149439,149440],{"class":81},"\"我叫",[47,149442,1115],{"class":85},[47,149444,79864],{"class":221},[47,149446,1165],{"class":85},[47,149448,149449],{"class":81},"，今年",[47,149451,1115],{"class":85},[47,149453,70275],{"class":221},[47,149455,1165],{"class":85},[47,149457,149458],{"class":81},"岁\"",[47,149460,228],{"class":221},[47,149462,149463],{"class":49,"line":1308},[47,149464,2493],{"emptyLinePlaceholder":145},[47,149466,149467],{"class":49,"line":1314},[47,149468,149469],{"class":221},"introduce(name, age)\n",[19,149471,149472],{},"面向对象：",[38,149474,149476],{"className":30432,"code":149475,"language":30434,"meta":43,"style":43},"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",[26,149477,149478,149486,149494,149523,149527,149531,149541,149550,149559],{"__ignoreMap":43},[47,149479,149480,149482,149484],{"class":49,"line":50},[47,149481,14787],{"class":217},[47,149483,7991],{"class":53},[47,149485,3832],{"class":221},[47,149487,149488,149490,149492],{"class":49,"line":92},[47,149489,30855],{"class":217},[47,149491,149426],{"class":53},[47,149493,30861],{"class":221},[47,149495,149496,149498,149500,149502,149504,149507,149509,149511,149513,149515,149517,149519,149521],{"class":49,"line":1273},[47,149497,32505],{"class":85},[47,149499,222],{"class":221},[47,149501,273],{"class":217},[47,149503,149440],{"class":81},[47,149505,149506],{"class":85},"{self",[47,149508,80355],{"class":221},[47,149510,1165],{"class":85},[47,149512,149449],{"class":81},[47,149514,149506],{"class":85},[47,149516,80367],{"class":221},[47,149518,1165],{"class":85},[47,149520,149458],{"class":81},[47,149522,228],{"class":221},[47,149524,149525],{"class":49,"line":1288},[47,149526,2493],{"emptyLinePlaceholder":145},[47,149528,149529],{"class":49,"line":1294},[47,149530,2493],{"emptyLinePlaceholder":145},[47,149532,149533,149536,149538],{"class":49,"line":1308},[47,149534,149535],{"class":221},"student ",[47,149537,267],{"class":217},[47,149539,149540],{"class":221}," Student()\n",[47,149542,149543,149546,149548],{"class":49,"line":1314},[47,149544,149545],{"class":221},"student.name ",[47,149547,267],{"class":217},[47,149549,149407],{"class":81},[47,149551,149552,149555,149557],{"class":49,"line":1405},[47,149553,149554],{"class":221},"student.age ",[47,149556,267],{"class":217},[47,149558,146605],{"class":85},[47,149560,149561],{"class":49,"line":1411},[47,149562,149563],{"class":221},"student.introduce()\n",[19,149565,149566],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,149568,149570],{"id":149569},"_112-类和对象","11.2 类和对象",[19,149572,149573],{},"类是模板，对象是根据模板创建出来的具体实例。",[38,149575,149577],{"className":30432,"code":149576,"language":30434,"meta":43,"style":43},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[26,149578,149579,149587,149592,149596,149600,149609],{"__ignoreMap":43},[47,149580,149581,149583,149585],{"class":49,"line":50},[47,149582,14787],{"class":217},[47,149584,7991],{"class":53},[47,149586,3832],{"class":221},[47,149588,149589],{"class":49,"line":92},[47,149590,149591],{"class":217},"    pass\n",[47,149593,149594],{"class":49,"line":1273},[47,149595,2493],{"emptyLinePlaceholder":145},[47,149597,149598],{"class":49,"line":1288},[47,149599,2493],{"emptyLinePlaceholder":145},[47,149601,149602,149605,149607],{"class":49,"line":1294},[47,149603,149604],{"class":221},"student1 ",[47,149606,267],{"class":217},[47,149608,149540],{"class":221},[47,149610,149611,149614,149616],{"class":49,"line":1308},[47,149612,149613],{"class":221},"student2 ",[47,149615,267],{"class":217},[47,149617,149540],{"class":221},[19,149619,149620,149623,149624,101072,149627,149630],{},[26,149621,149622],{},"Student"," 是类，",[26,149625,149626],{},"student1",[26,149628,149629],{},"student2"," 是对象。",[14,149632,149634],{"id":149633},"_113-属性","11.3 属性",[19,149636,149637],{},"属性是对象保存的数据。",[38,149639,149641],{"className":30432,"code":149640,"language":30434,"meta":43,"style":43},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[26,149642,149643,149651,149655,149659,149663,149671,149679,149687,149691,149698],{"__ignoreMap":43},[47,149644,149645,149647,149649],{"class":49,"line":50},[47,149646,14787],{"class":217},[47,149648,7991],{"class":53},[47,149650,3832],{"class":221},[47,149652,149653],{"class":49,"line":92},[47,149654,149591],{"class":217},[47,149656,149657],{"class":49,"line":1273},[47,149658,2493],{"emptyLinePlaceholder":145},[47,149660,149661],{"class":49,"line":1288},[47,149662,2493],{"emptyLinePlaceholder":145},[47,149664,149665,149667,149669],{"class":49,"line":1294},[47,149666,149535],{"class":221},[47,149668,267],{"class":217},[47,149670,149540],{"class":221},[47,149672,149673,149675,149677],{"class":49,"line":1308},[47,149674,149545],{"class":221},[47,149676,267],{"class":217},[47,149678,149407],{"class":81},[47,149680,149681,149683,149685],{"class":49,"line":1314},[47,149682,149554],{"class":221},[47,149684,267],{"class":217},[47,149686,146605],{"class":85},[47,149688,149689],{"class":49,"line":1405},[47,149690,2493],{"emptyLinePlaceholder":145},[47,149692,149693,149695],{"class":49,"line":1411},[47,149694,30469],{"class":85},[47,149696,149697],{"class":221},"(student.name)\n",[47,149699,149700,149702],{"class":49,"line":1423},[47,149701,30469],{"class":85},[47,149703,149704],{"class":221},"(student.age)\n",[19,149706,149707],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,149709,149711],{"id":149710},"_114-方法","11.4 方法",[19,149713,149714],{},"类中的函数叫方法。",[38,149716,149717],{"className":30432,"code":149475,"language":30434,"meta":43,"style":43},[26,149718,149719,149727,149735,149763,149767,149771,149779,149787,149795],{"__ignoreMap":43},[47,149720,149721,149723,149725],{"class":49,"line":50},[47,149722,14787],{"class":217},[47,149724,7991],{"class":53},[47,149726,3832],{"class":221},[47,149728,149729,149731,149733],{"class":49,"line":92},[47,149730,30855],{"class":217},[47,149732,149426],{"class":53},[47,149734,30861],{"class":221},[47,149736,149737,149739,149741,149743,149745,149747,149749,149751,149753,149755,149757,149759,149761],{"class":49,"line":1273},[47,149738,32505],{"class":85},[47,149740,222],{"class":221},[47,149742,273],{"class":217},[47,149744,149440],{"class":81},[47,149746,149506],{"class":85},[47,149748,80355],{"class":221},[47,149750,1165],{"class":85},[47,149752,149449],{"class":81},[47,149754,149506],{"class":85},[47,149756,80367],{"class":221},[47,149758,1165],{"class":85},[47,149760,149458],{"class":81},[47,149762,228],{"class":221},[47,149764,149765],{"class":49,"line":1288},[47,149766,2493],{"emptyLinePlaceholder":145},[47,149768,149769],{"class":49,"line":1294},[47,149770,2493],{"emptyLinePlaceholder":145},[47,149772,149773,149775,149777],{"class":49,"line":1308},[47,149774,149535],{"class":221},[47,149776,267],{"class":217},[47,149778,149540],{"class":221},[47,149780,149781,149783,149785],{"class":49,"line":1314},[47,149782,149545],{"class":221},[47,149784,267],{"class":217},[47,149786,149407],{"class":81},[47,149788,149789,149791,149793],{"class":49,"line":1405},[47,149790,149554],{"class":221},[47,149792,267],{"class":217},[47,149794,146605],{"class":85},[47,149796,149797],{"class":49,"line":1411},[47,149798,149563],{"class":221},[19,149800,149801,149803,149804,149806],{},[26,149802,30877],{}," 表示当前对象。调用方法时不需要手动传入 ",[26,149805,30877],{},"，Python 会自动传。",[14,149808,149810],{"id":149809},"_115-构造方法__init__","11.5 构造方法__init__",[19,149812,149813,149815],{},[26,149814,30883],{}," 在对象创建时自动执行，用于初始化属性。",[38,149817,149819],{"className":30432,"code":149818,"language":30434,"meta":43,"style":43},"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",[26,149820,149821,149829,149838,149850,149862,149873,149877,149885,149923,149927,149931,149953],{"__ignoreMap":43},[47,149822,149823,149825,149827],{"class":49,"line":50},[47,149824,14787],{"class":217},[47,149826,7991],{"class":53},[47,149828,3832],{"class":221},[47,149830,149831,149833,149835],{"class":49,"line":92},[47,149832,30855],{"class":217},[47,149834,30858],{"class":85},[47,149836,149837],{"class":221},"(self, name, age, score):\n",[47,149839,149840,149842,149845,149847],{"class":49,"line":1273},[47,149841,30899],{"class":85},[47,149843,149844],{"class":221},".name ",[47,149846,267],{"class":217},[47,149848,149849],{"class":221}," name\n",[47,149851,149852,149854,149857,149859],{"class":49,"line":1288},[47,149853,30899],{"class":85},[47,149855,149856],{"class":221},".age ",[47,149858,267],{"class":217},[47,149860,149861],{"class":221}," age\n",[47,149863,149864,149866,149869,149871],{"class":49,"line":1294},[47,149865,30899],{"class":85},[47,149867,149868],{"class":221},".score ",[47,149870,267],{"class":217},[47,149872,1673],{"class":221},[47,149874,149875],{"class":49,"line":1308},[47,149876,2493],{"emptyLinePlaceholder":145},[47,149878,149879,149881,149883],{"class":49,"line":1314},[47,149880,30855],{"class":217},[47,149882,149426],{"class":53},[47,149884,30861],{"class":221},[47,149886,149887,149889,149891,149893,149895,149897,149899,149901,149903,149905,149907,149909,149912,149914,149917,149919,149921],{"class":49,"line":1405},[47,149888,32505],{"class":85},[47,149890,222],{"class":221},[47,149892,273],{"class":217},[47,149894,149440],{"class":81},[47,149896,149506],{"class":85},[47,149898,80355],{"class":221},[47,149900,1165],{"class":85},[47,149902,149449],{"class":81},[47,149904,149506],{"class":85},[47,149906,80367],{"class":221},[47,149908,1165],{"class":85},[47,149910,149911],{"class":81},"岁，成绩",[47,149913,149506],{"class":85},[47,149915,149916],{"class":221},".score",[47,149918,1165],{"class":85},[47,149920,470],{"class":81},[47,149922,228],{"class":221},[47,149924,149925],{"class":49,"line":1411},[47,149926,2493],{"emptyLinePlaceholder":145},[47,149928,149929],{"class":49,"line":1423},[47,149930,2493],{"emptyLinePlaceholder":145},[47,149932,149933,149935,149937,149940,149943,149945,149947,149949,149951],{"class":49,"line":1706},[47,149934,149535],{"class":221},[47,149936,267],{"class":217},[47,149938,149939],{"class":221}," Student(",[47,149941,149942],{"class":81},"\"小明\"",[47,149944,12528],{"class":221},[47,149946,869],{"class":85},[47,149948,12528],{"class":221},[47,149950,1208],{"class":85},[47,149952,228],{"class":221},[47,149954,149955],{"class":49,"line":1711},[47,149956,149563],{"class":221},[19,149958,149959],{},"构造方法的好处：",[171,149961,149962,149965,149968],{},[109,149963,149964],{},"创建对象时必须提供必要数据。",[109,149966,149967],{},"属性初始化集中，不容易漏。",[109,149969,149970],{},"对象状态更完整。",[14,149972,149974,149975],{"id":149973},"_116-str","11.6 ",[369,149976,1393],{},[19,149978,149979,149980,28439],{},"直接打印对象时，默认输出不直观。可以定义 ",[26,149981,149982],{},"__str__",[38,149984,149986],{"className":30432,"code":149985,"language":30434,"meta":43,"style":43},"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",[26,149987,149988,149996,150005,150015,150025,150029,150038,150066,150070,150074,150090],{"__ignoreMap":43},[47,149989,149990,149992,149994],{"class":49,"line":50},[47,149991,14787],{"class":217},[47,149993,7991],{"class":53},[47,149995,3832],{"class":221},[47,149997,149998,150000,150002],{"class":49,"line":92},[47,149999,30855],{"class":217},[47,150001,30858],{"class":85},[47,150003,150004],{"class":221},"(self, name, age):\n",[47,150006,150007,150009,150011,150013],{"class":49,"line":1273},[47,150008,30899],{"class":85},[47,150010,149844],{"class":221},[47,150012,267],{"class":217},[47,150014,149849],{"class":221},[47,150016,150017,150019,150021,150023],{"class":49,"line":1288},[47,150018,30899],{"class":85},[47,150020,149856],{"class":221},[47,150022,267],{"class":217},[47,150024,149861],{"class":221},[47,150026,150027],{"class":49,"line":1294},[47,150028,2493],{"emptyLinePlaceholder":145},[47,150030,150031,150033,150036],{"class":49,"line":1308},[47,150032,30855],{"class":217},[47,150034,150035],{"class":85}," __str__",[47,150037,30861],{"class":221},[47,150039,150040,150042,150045,150048,150050,150052,150054,150057,150059,150061,150063],{"class":49,"line":1314},[47,150041,14845],{"class":217},[47,150043,150044],{"class":217}," f",[47,150046,150047],{"class":81},"\"Student(name=",[47,150049,149506],{"class":85},[47,150051,80355],{"class":221},[47,150053,1165],{"class":85},[47,150055,150056],{"class":81},", age=",[47,150058,149506],{"class":85},[47,150060,80367],{"class":221},[47,150062,1165],{"class":85},[47,150064,150065],{"class":81},")\"\n",[47,150067,150068],{"class":49,"line":1405},[47,150069,2493],{"emptyLinePlaceholder":145},[47,150071,150072],{"class":49,"line":1411},[47,150073,2493],{"emptyLinePlaceholder":145},[47,150075,150076,150078,150080,150082,150084,150086,150088],{"class":49,"line":1423},[47,150077,149535],{"class":221},[47,150079,267],{"class":217},[47,150081,149939],{"class":221},[47,150083,149942],{"class":81},[47,150085,12528],{"class":221},[47,150087,869],{"class":85},[47,150089,228],{"class":221},[47,150091,150092,150094],{"class":49,"line":1706},[47,150093,30469],{"class":85},[47,150095,150096],{"class":221},"(student)\n",[14,150098,150100],{"id":150099},"_117-封装","11.7 封装",[19,150102,150103],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,150105,150106],{},"Python 中以双下划线开头的属性通常视为私有属性。",[38,150108,150110],{"className":30432,"code":150109,"language":30434,"meta":43,"style":43},"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",[26,150111,150112,150121,150130,150142,150154,150158,150167,150176,150180,150190,150203,150214,150219,150230,150234,150243,150255,150266,150270,150283,150294,150298,150309,150313,150317,150335,150344,150353],{"__ignoreMap":43},[47,150113,150114,150116,150119],{"class":49,"line":50},[47,150115,14787],{"class":217},[47,150117,150118],{"class":53}," Account",[47,150120,3832],{"class":221},[47,150122,150123,150125,150127],{"class":49,"line":92},[47,150124,30855],{"class":217},[47,150126,30858],{"class":85},[47,150128,150129],{"class":221},"(self, owner, balance):\n",[47,150131,150132,150134,150137,150139],{"class":49,"line":1273},[47,150133,30899],{"class":85},[47,150135,150136],{"class":221},".owner ",[47,150138,267],{"class":217},[47,150140,150141],{"class":221}," owner\n",[47,150143,150144,150146,150149,150151],{"class":49,"line":1288},[47,150145,30899],{"class":85},[47,150147,150148],{"class":221},".__balance ",[47,150150,267],{"class":217},[47,150152,150153],{"class":221}," balance\n",[47,150155,150156],{"class":49,"line":1294},[47,150157,2493],{"emptyLinePlaceholder":145},[47,150159,150160,150162,150165],{"class":49,"line":1308},[47,150161,30855],{"class":217},[47,150163,150164],{"class":53}," get_balance",[47,150166,30861],{"class":221},[47,150168,150169,150171,150173],{"class":49,"line":1314},[47,150170,14845],{"class":217},[47,150172,38927],{"class":85},[47,150174,150175],{"class":221},".__balance\n",[47,150177,150178],{"class":49,"line":1405},[47,150179,2493],{"emptyLinePlaceholder":145},[47,150181,150182,150184,150187],{"class":49,"line":1411},[47,150183,30855],{"class":217},[47,150185,150186],{"class":53}," deposit",[47,150188,150189],{"class":221},"(self, money):\n",[47,150191,150192,150194,150197,150199,150201],{"class":49,"line":1423},[47,150193,2590],{"class":217},[47,150195,150196],{"class":221}," money ",[47,150198,1682],{"class":217},[47,150200,4186],{"class":85},[47,150202,3832],{"class":221},[47,150204,150205,150207,150209,150212],{"class":49,"line":1706},[47,150206,34704],{"class":85},[47,150208,222],{"class":221},[47,150210,150211],{"class":81},"\"存款金额必须大于0\"",[47,150213,228],{"class":221},[47,150215,150216],{"class":49,"line":1711},[47,150217,150218],{"class":217},"            return\n",[47,150220,150221,150223,150225,150227],{"class":49,"line":1717},[47,150222,30899],{"class":85},[47,150224,150148],{"class":221},[47,150226,9570],{"class":217},[47,150228,150229],{"class":221}," money\n",[47,150231,150232],{"class":49,"line":1722},[47,150233,2493],{"emptyLinePlaceholder":145},[47,150235,150236,150238,150241],{"class":49,"line":1736},[47,150237,30855],{"class":217},[47,150239,150240],{"class":53}," withdraw",[47,150242,150189],{"class":221},[47,150244,150245,150247,150249,150251,150253],{"class":49,"line":1741},[47,150246,2590],{"class":217},[47,150248,150196],{"class":221},[47,150250,1682],{"class":217},[47,150252,4186],{"class":85},[47,150254,3832],{"class":221},[47,150256,150257,150259,150261,150264],{"class":49,"line":1747},[47,150258,34704],{"class":85},[47,150260,222],{"class":221},[47,150262,150263],{"class":81},"\"取款金额必须大于0\"",[47,150265,228],{"class":221},[47,150267,150268],{"class":49,"line":1768},[47,150269,150218],{"class":217},[47,150271,150272,150274,150276,150278,150280],{"class":49,"line":1773},[47,150273,2590],{"class":217},[47,150275,150196],{"class":221},[47,150277,1179],{"class":217},[47,150279,38927],{"class":85},[47,150281,150282],{"class":221},".__balance:\n",[47,150284,150285,150287,150289,150292],{"class":49,"line":1787},[47,150286,34704],{"class":85},[47,150288,222],{"class":221},[47,150290,150291],{"class":81},"\"余额不足\"",[47,150293,228],{"class":221},[47,150295,150296],{"class":49,"line":1792},[47,150297,150218],{"class":217},[47,150299,150300,150302,150304,150307],{"class":49,"line":1821},[47,150301,30899],{"class":85},[47,150303,150148],{"class":221},[47,150305,150306],{"class":217},"-=",[47,150308,150229],{"class":221},[47,150310,150311],{"class":49,"line":1826},[47,150312,2493],{"emptyLinePlaceholder":145},[47,150314,150315],{"class":49,"line":1843},[47,150316,2493],{"emptyLinePlaceholder":145},[47,150318,150319,150322,150324,150327,150329,150331,150333],{"class":49,"line":1848},[47,150320,150321],{"class":221},"account ",[47,150323,267],{"class":217},[47,150325,150326],{"class":221}," Account(",[47,150328,149942],{"class":81},[47,150330,12528],{"class":221},[47,150332,6503],{"class":85},[47,150334,228],{"class":221},[47,150336,150337,150340,150342],{"class":49,"line":1853},[47,150338,150339],{"class":221},"account.deposit(",[47,150341,1816],{"class":85},[47,150343,228],{"class":221},[47,150345,150346,150349,150351],{"class":49,"line":1858},[47,150347,150348],{"class":221},"account.withdraw(",[47,150350,530],{"class":85},[47,150352,228],{"class":221},[47,150354,150355,150357],{"class":49,"line":1872},[47,150356,30469],{"class":85},[47,150358,150359],{"class":221},"(account.get_balance())\n",[19,150361,150362],{},"封装的意义是避免外部随意修改内部状态。",[14,150364,150366],{"id":150365},"_118-继承","11.8 继承",[19,150368,150369],{},"继承可以让子类复用父类的属性和方法。",[38,150371,150373],{"className":30432,"code":150372,"language":30434,"meta":43,"style":43},"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",[26,150374,150375,150384,150393,150404,150408,150412,150426,150435,150446,150450,150454,150464,150469],{"__ignoreMap":43},[47,150376,150377,150379,150382],{"class":49,"line":50},[47,150378,14787],{"class":217},[47,150380,150381],{"class":53}," Animal",[47,150383,3832],{"class":221},[47,150385,150386,150388,150391],{"class":49,"line":92},[47,150387,30855],{"class":217},[47,150389,150390],{"class":53}," eat",[47,150392,30861],{"class":221},[47,150394,150395,150397,150399,150402],{"class":49,"line":1273},[47,150396,32505],{"class":85},[47,150398,222],{"class":221},[47,150400,150401],{"class":81},"\"吃东西\"",[47,150403,228],{"class":221},[47,150405,150406],{"class":49,"line":1288},[47,150407,2493],{"emptyLinePlaceholder":145},[47,150409,150410],{"class":49,"line":1294},[47,150411,2493],{"emptyLinePlaceholder":145},[47,150413,150414,150416,150419,150421,150424],{"class":49,"line":1308},[47,150415,14787],{"class":217},[47,150417,150418],{"class":53}," Dog",[47,150420,222],{"class":221},[47,150422,150423],{"class":53},"Animal",[47,150425,30840],{"class":221},[47,150427,150428,150430,150433],{"class":49,"line":1314},[47,150429,30855],{"class":217},[47,150431,150432],{"class":53}," bark",[47,150434,30861],{"class":221},[47,150436,150437,150439,150441,150444],{"class":49,"line":1405},[47,150438,32505],{"class":85},[47,150440,222],{"class":221},[47,150442,150443],{"class":81},"\"汪汪\"",[47,150445,228],{"class":221},[47,150447,150448],{"class":49,"line":1411},[47,150449,2493],{"emptyLinePlaceholder":145},[47,150451,150452],{"class":49,"line":1423},[47,150453,2493],{"emptyLinePlaceholder":145},[47,150455,150456,150459,150461],{"class":49,"line":1706},[47,150457,150458],{"class":221},"dog ",[47,150460,267],{"class":217},[47,150462,150463],{"class":221}," Dog()\n",[47,150465,150466],{"class":49,"line":1711},[47,150467,150468],{"class":221},"dog.eat()\n",[47,150470,150471],{"class":49,"line":1717},[47,150472,150473],{"class":221},"dog.bark()\n",[19,150475,150476],{},"子类可以扩展新方法，也可以重写父类方法。",[14,150478,150480],{"id":150479},"_119-方法重写","11.9 方法重写",[38,150482,150484],{"className":30432,"code":150483,"language":30434,"meta":43,"style":43},"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",[26,150485,150486,150494,150503,150514,150518,150522,150534,150542,150552,150556,150560,150573,150581,150592,150596,150600,150608,150618,150622,150627],{"__ignoreMap":43},[47,150487,150488,150490,150492],{"class":49,"line":50},[47,150489,14787],{"class":217},[47,150491,150381],{"class":53},[47,150493,3832],{"class":221},[47,150495,150496,150498,150501],{"class":49,"line":92},[47,150497,30855],{"class":217},[47,150499,150500],{"class":53}," speak",[47,150502,30861],{"class":221},[47,150504,150505,150507,150509,150512],{"class":49,"line":1273},[47,150506,32505],{"class":85},[47,150508,222],{"class":221},[47,150510,150511],{"class":81},"\"动物叫\"",[47,150513,228],{"class":221},[47,150515,150516],{"class":49,"line":1288},[47,150517,2493],{"emptyLinePlaceholder":145},[47,150519,150520],{"class":49,"line":1294},[47,150521,2493],{"emptyLinePlaceholder":145},[47,150523,150524,150526,150528,150530,150532],{"class":49,"line":1308},[47,150525,14787],{"class":217},[47,150527,150418],{"class":53},[47,150529,222],{"class":221},[47,150531,150423],{"class":53},[47,150533,30840],{"class":221},[47,150535,150536,150538,150540],{"class":49,"line":1314},[47,150537,30855],{"class":217},[47,150539,150500],{"class":53},[47,150541,30861],{"class":221},[47,150543,150544,150546,150548,150550],{"class":49,"line":1405},[47,150545,32505],{"class":85},[47,150547,222],{"class":221},[47,150549,150443],{"class":81},[47,150551,228],{"class":221},[47,150553,150554],{"class":49,"line":1411},[47,150555,2493],{"emptyLinePlaceholder":145},[47,150557,150558],{"class":49,"line":1423},[47,150559,2493],{"emptyLinePlaceholder":145},[47,150561,150562,150564,150567,150569,150571],{"class":49,"line":1706},[47,150563,14787],{"class":217},[47,150565,150566],{"class":53}," Cat",[47,150568,222],{"class":221},[47,150570,150423],{"class":53},[47,150572,30840],{"class":221},[47,150574,150575,150577,150579],{"class":49,"line":1711},[47,150576,30855],{"class":217},[47,150578,150500],{"class":53},[47,150580,30861],{"class":221},[47,150582,150583,150585,150587,150590],{"class":49,"line":1717},[47,150584,32505],{"class":85},[47,150586,222],{"class":221},[47,150588,150589],{"class":81},"\"喵喵\"",[47,150591,228],{"class":221},[47,150593,150594],{"class":49,"line":1722},[47,150595,2493],{"emptyLinePlaceholder":145},[47,150597,150598],{"class":49,"line":1736},[47,150599,2493],{"emptyLinePlaceholder":145},[47,150601,150602,150604,150606],{"class":49,"line":1741},[47,150603,150458],{"class":221},[47,150605,267],{"class":217},[47,150607,150463],{"class":221},[47,150609,150610,150613,150615],{"class":49,"line":1747},[47,150611,150612],{"class":221},"cat ",[47,150614,267],{"class":217},[47,150616,150617],{"class":221}," Cat()\n",[47,150619,150620],{"class":49,"line":1768},[47,150621,2493],{"emptyLinePlaceholder":145},[47,150623,150624],{"class":49,"line":1773},[47,150625,150626],{"class":221},"dog.speak()\n",[47,150628,150629],{"class":49,"line":1787},[47,150630,150631],{"class":221},"cat.speak()\n",[14,150633,150635],{"id":150634},"_1110-super","11.10 super",[19,150637,150638,150639,150642],{},"子类可以通过 ",[26,150640,150641],{},"super()"," 调用父类方法。",[38,150644,150646],{"className":30432,"code":150645,"language":30434,"meta":43,"style":43},"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",[26,150647,150648,150656,150665,150675,150679,150683,150695,150704,150715,150725,150729,150733,150749],{"__ignoreMap":43},[47,150649,150650,150652,150654],{"class":49,"line":50},[47,150651,14787],{"class":217},[47,150653,15662],{"class":53},[47,150655,3832],{"class":221},[47,150657,150658,150660,150662],{"class":49,"line":92},[47,150659,30855],{"class":217},[47,150661,30858],{"class":85},[47,150663,150664],{"class":221},"(self, name):\n",[47,150666,150667,150669,150671,150673],{"class":49,"line":1273},[47,150668,30899],{"class":85},[47,150670,149844],{"class":221},[47,150672,267],{"class":217},[47,150674,149849],{"class":221},[47,150676,150677],{"class":49,"line":1288},[47,150678,2493],{"emptyLinePlaceholder":145},[47,150680,150681],{"class":49,"line":1294},[47,150682,2493],{"emptyLinePlaceholder":145},[47,150684,150685,150687,150689,150691,150693],{"class":49,"line":1308},[47,150686,14787],{"class":217},[47,150688,7991],{"class":53},[47,150690,222],{"class":221},[47,150692,19139],{"class":53},[47,150694,30840],{"class":221},[47,150696,150697,150699,150701],{"class":49,"line":1314},[47,150698,30855],{"class":217},[47,150700,30858],{"class":85},[47,150702,150703],{"class":221},"(self, name, score):\n",[47,150705,150706,150708,150710,150712],{"class":49,"line":1405},[47,150707,30871],{"class":85},[47,150709,17354],{"class":221},[47,150711,30883],{"class":85},[47,150713,150714],{"class":221},"(name)\n",[47,150716,150717,150719,150721,150723],{"class":49,"line":1411},[47,150718,30899],{"class":85},[47,150720,149868],{"class":221},[47,150722,267],{"class":217},[47,150724,1673],{"class":221},[47,150726,150727],{"class":49,"line":1423},[47,150728,2493],{"emptyLinePlaceholder":145},[47,150730,150731],{"class":49,"line":1706},[47,150732,2493],{"emptyLinePlaceholder":145},[47,150734,150735,150737,150739,150741,150743,150745,150747],{"class":49,"line":1711},[47,150736,149535],{"class":221},[47,150738,267],{"class":217},[47,150740,149939],{"class":221},[47,150742,149942],{"class":81},[47,150744,12528],{"class":221},[47,150746,1208],{"class":85},[47,150748,228],{"class":221},[47,150750,150751,150753],{"class":49,"line":1717},[47,150752,30469],{"class":85},[47,150754,150755],{"class":221},"(student.name, student.score)\n",[14,150757,150759],{"id":150758},"_1111-多态","11.11 多态",[19,150761,150762],{},"多态指不同对象响应同一个方法，表现出不同结果。",[38,150764,150766],{"className":30432,"code":150765,"language":30434,"meta":43,"style":43},"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",[26,150767,150768,150776,150784,150794,150798,150802,150810,150818,150828,150832,150836,150846,150851,150855,150859,150864],{"__ignoreMap":43},[47,150769,150770,150772,150774],{"class":49,"line":50},[47,150771,14787],{"class":217},[47,150773,150418],{"class":53},[47,150775,3832],{"class":221},[47,150777,150778,150780,150782],{"class":49,"line":92},[47,150779,30855],{"class":217},[47,150781,150500],{"class":53},[47,150783,30861],{"class":221},[47,150785,150786,150788,150790,150792],{"class":49,"line":1273},[47,150787,32505],{"class":85},[47,150789,222],{"class":221},[47,150791,150443],{"class":81},[47,150793,228],{"class":221},[47,150795,150796],{"class":49,"line":1288},[47,150797,2493],{"emptyLinePlaceholder":145},[47,150799,150800],{"class":49,"line":1294},[47,150801,2493],{"emptyLinePlaceholder":145},[47,150803,150804,150806,150808],{"class":49,"line":1308},[47,150805,14787],{"class":217},[47,150807,150566],{"class":53},[47,150809,3832],{"class":221},[47,150811,150812,150814,150816],{"class":49,"line":1314},[47,150813,30855],{"class":217},[47,150815,150500],{"class":53},[47,150817,30861],{"class":221},[47,150819,150820,150822,150824,150826],{"class":49,"line":1405},[47,150821,32505],{"class":85},[47,150823,222],{"class":221},[47,150825,150589],{"class":81},[47,150827,228],{"class":221},[47,150829,150830],{"class":49,"line":1411},[47,150831,2493],{"emptyLinePlaceholder":145},[47,150833,150834],{"class":49,"line":1423},[47,150835,2493],{"emptyLinePlaceholder":145},[47,150837,150838,150840,150843],{"class":49,"line":1706},[47,150839,32001],{"class":217},[47,150841,150842],{"class":53}," make_sound",[47,150844,150845],{"class":221},"(animal):\n",[47,150847,150848],{"class":49,"line":1711},[47,150849,150850],{"class":221},"    animal.speak()\n",[47,150852,150853],{"class":49,"line":1717},[47,150854,2493],{"emptyLinePlaceholder":145},[47,150856,150857],{"class":49,"line":1722},[47,150858,2493],{"emptyLinePlaceholder":145},[47,150860,150861],{"class":49,"line":1736},[47,150862,150863],{"class":221},"make_sound(Dog())\n",[47,150865,150866],{"class":49,"line":1741},[47,150867,150868],{"class":221},"make_sound(Cat())\n",[19,150870,150871],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,150873,150875],{"id":150874},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,150877,150878],{},"实例属性属于对象：",[38,150880,150882],{"className":30432,"code":150881,"language":30434,"meta":43,"style":43},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[26,150883,150884,150892,150900],{"__ignoreMap":43},[47,150885,150886,150888,150890],{"class":49,"line":50},[47,150887,14787],{"class":217},[47,150889,7991],{"class":53},[47,150891,3832],{"class":221},[47,150893,150894,150896,150898],{"class":49,"line":92},[47,150895,30855],{"class":217},[47,150897,30858],{"class":85},[47,150899,150664],{"class":221},[47,150901,150902,150904,150906,150908],{"class":49,"line":1273},[47,150903,30899],{"class":85},[47,150905,149844],{"class":221},[47,150907,267],{"class":217},[47,150909,149849],{"class":221},[19,150911,150912],{},"类属性属于类，所有对象共享：",[38,150914,150916],{"className":30432,"code":150915,"language":30434,"meta":43,"style":43},"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",[26,150917,150918,150926,150936,150940,150948,150958,150962,150966,150979,150993,150997,151004,151011],{"__ignoreMap":43},[47,150919,150920,150922,150924],{"class":49,"line":50},[47,150921,14787],{"class":217},[47,150923,7991],{"class":53},[47,150925,3832],{"class":221},[47,150927,150928,150931,150933],{"class":49,"line":92},[47,150929,150930],{"class":221},"    school ",[47,150932,267],{"class":217},[47,150934,150935],{"class":81}," \"黑马学校\"\n",[47,150937,150938],{"class":49,"line":1273},[47,150939,2493],{"emptyLinePlaceholder":145},[47,150941,150942,150944,150946],{"class":49,"line":1288},[47,150943,30855],{"class":217},[47,150945,30858],{"class":85},[47,150947,150664],{"class":221},[47,150949,150950,150952,150954,150956],{"class":49,"line":1294},[47,150951,30899],{"class":85},[47,150953,149844],{"class":221},[47,150955,267],{"class":217},[47,150957,149849],{"class":221},[47,150959,150960],{"class":49,"line":1308},[47,150961,2493],{"emptyLinePlaceholder":145},[47,150963,150964],{"class":49,"line":1314},[47,150965,2493],{"emptyLinePlaceholder":145},[47,150967,150968,150971,150973,150975,150977],{"class":49,"line":1405},[47,150969,150970],{"class":221},"s1 ",[47,150972,267],{"class":217},[47,150974,149939],{"class":221},[47,150976,149942],{"class":81},[47,150978,228],{"class":221},[47,150980,150981,150984,150986,150988,150991],{"class":49,"line":1411},[47,150982,150983],{"class":221},"s2 ",[47,150985,267],{"class":217},[47,150987,149939],{"class":221},[47,150989,150990],{"class":81},"\"小红\"",[47,150992,228],{"class":221},[47,150994,150995],{"class":49,"line":1423},[47,150996,2493],{"emptyLinePlaceholder":145},[47,150998,150999,151001],{"class":49,"line":1706},[47,151000,30469],{"class":85},[47,151002,151003],{"class":221},"(s1.school)\n",[47,151005,151006,151008],{"class":49,"line":1711},[47,151007,30469],{"class":85},[47,151009,151010],{"class":221},"(s2.school)\n",[47,151012,151013,151015],{"class":49,"line":1717},[47,151014,30469],{"class":85},[47,151016,151017],{"class":221},"(Student.school)\n",[19,151019,151020],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,151022,151024],{"id":151023},"_1113-类方法和静态方法","11.13 类方法和静态方法",[187,151026,151028],{"id":151027},"_11131-类方法","11.13.1 类方法",[19,151030,151031,151032,151035,151036,28439],{},"类方法使用 ",[26,151033,151034],{},"@classmethod","，第一个参数通常是 ",[26,151037,151038],{},"cls",[38,151040,151042],{"className":30432,"code":151041,"language":30434,"meta":43,"style":43},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[26,151043,151044,151052,151060,151064,151072,151082,151092,151096,151100],{"__ignoreMap":43},[47,151045,151046,151048,151050],{"class":49,"line":50},[47,151047,14787],{"class":217},[47,151049,7991],{"class":53},[47,151051,3832],{"class":221},[47,151053,151054,151056,151058],{"class":49,"line":92},[47,151055,150930],{"class":221},[47,151057,267],{"class":217},[47,151059,150935],{"class":81},[47,151061,151062],{"class":49,"line":1273},[47,151063,2493],{"emptyLinePlaceholder":145},[47,151065,151066,151069],{"class":49,"line":1288},[47,151067,151068],{"class":53},"    @",[47,151070,151071],{"class":85},"classmethod\n",[47,151073,151074,151076,151079],{"class":49,"line":1294},[47,151075,30855],{"class":217},[47,151077,151078],{"class":53}," get_school",[47,151080,151081],{"class":221},"(cls):\n",[47,151083,151084,151086,151089],{"class":49,"line":1308},[47,151085,14845],{"class":217},[47,151087,151088],{"class":85}," cls",[47,151090,151091],{"class":221},".school\n",[47,151093,151094],{"class":49,"line":1314},[47,151095,2493],{"emptyLinePlaceholder":145},[47,151097,151098],{"class":49,"line":1405},[47,151099,2493],{"emptyLinePlaceholder":145},[47,151101,151102,151104],{"class":49,"line":1411},[47,151103,30469],{"class":85},[47,151105,151106],{"class":221},"(Student.get_school())\n",[187,151108,151110],{"id":151109},"_11132-静态方法","11.13.2 静态方法",[19,151112,151113,151114,151117],{},"静态方法使用 ",[26,151115,151116],{},"@staticmethod","，不需要访问实例和类。",[38,151119,151121],{"className":30432,"code":151120,"language":30434,"meta":43,"style":43},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[26,151122,151123,151132,151139,151148,151159,151163,151167],{"__ignoreMap":43},[47,151124,151125,151127,151130],{"class":49,"line":50},[47,151126,14787],{"class":217},[47,151128,151129],{"class":53}," MathUtils",[47,151131,3832],{"class":221},[47,151133,151134,151136],{"class":49,"line":92},[47,151135,151068],{"class":53},[47,151137,151138],{"class":85},"staticmethod\n",[47,151140,151141,151143,151145],{"class":49,"line":1273},[47,151142,30855],{"class":217},[47,151144,5302],{"class":53},[47,151146,151147],{"class":221},"(a, b):\n",[47,151149,151150,151152,151154,151156],{"class":49,"line":1288},[47,151151,14845],{"class":217},[47,151153,10962],{"class":221},[47,151155,700],{"class":217},[47,151157,151158],{"class":221}," b\n",[47,151160,151161],{"class":49,"line":1294},[47,151162,2493],{"emptyLinePlaceholder":145},[47,151164,151165],{"class":49,"line":1308},[47,151166,2493],{"emptyLinePlaceholder":145},[47,151168,151169,151171,151174,151176,151178,151180],{"class":49,"line":1314},[47,151170,30469],{"class":85},[47,151172,151173],{"class":221},"(MathUtils.add(",[47,151175,436],{"class":85},[47,151177,12528],{"class":221},[47,151179,298],{"class":85},[47,151181,30551],{"class":221},[19,151183,151184],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,151186,151188],{"id":151187},"_1114-dataclass","11.14 dataclass",[19,151190,151191,151194],{},[26,151192,151193],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[38,151196,151198],{"className":30432,"code":151197,"language":30434,"meta":43,"style":43},"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",[26,151199,151200,151212,151216,151220,151225,151233,151241,151249,151257,151261,151265,151285],{"__ignoreMap":43},[47,151201,151202,151204,151207,151209],{"class":49,"line":50},[47,151203,30791],{"class":217},[47,151205,151206],{"class":221}," dataclasses ",[47,151208,30446],{"class":217},[47,151210,151211],{"class":221}," dataclass\n",[47,151213,151214],{"class":49,"line":92},[47,151215,2493],{"emptyLinePlaceholder":145},[47,151217,151218],{"class":49,"line":1273},[47,151219,2493],{"emptyLinePlaceholder":145},[47,151221,151222],{"class":49,"line":1288},[47,151223,151224],{"class":53},"@dataclass\n",[47,151226,151227,151229,151231],{"class":49,"line":1294},[47,151228,14787],{"class":217},[47,151230,7991],{"class":53},[47,151232,3832],{"class":221},[47,151234,151235,151238],{"class":49,"line":1308},[47,151236,151237],{"class":221},"    name: ",[47,151239,151240],{"class":85},"str\n",[47,151242,151243,151246],{"class":49,"line":1314},[47,151244,151245],{"class":221},"    age: ",[47,151247,151248],{"class":85},"int\n",[47,151250,151251,151254],{"class":49,"line":1405},[47,151252,151253],{"class":221},"    score: ",[47,151255,151256],{"class":85},"float\n",[47,151258,151259],{"class":49,"line":1411},[47,151260,2493],{"emptyLinePlaceholder":145},[47,151262,151263],{"class":49,"line":1423},[47,151264,2493],{"emptyLinePlaceholder":145},[47,151266,151267,151269,151271,151273,151275,151277,151279,151281,151283],{"class":49,"line":1706},[47,151268,149535],{"class":221},[47,151270,267],{"class":217},[47,151272,149939],{"class":221},[47,151274,149942],{"class":81},[47,151276,12528],{"class":221},[47,151278,869],{"class":85},[47,151280,12528],{"class":221},[47,151282,1208],{"class":85},[47,151284,228],{"class":221},[47,151286,151287,151289],{"class":49,"line":1711},[47,151288,30469],{"class":85},[47,151290,150096],{"class":221},[19,151292,151293,151294,60,151296,151299],{},"它会自动生成 ",[26,151295,30883],{},[26,151297,151298],{},"__repr__"," 等方法。适合数据模型类。",[14,151301,151303],{"id":151302},"_1115-小案例学生类","11.15 小案例：学生类",[38,151305,151307],{"className":30432,"code":151306,"language":30434,"meta":43,"style":43},"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",[26,151308,151309,151317,151326,151338,151348,151358,151368,151372,151381,151394,151398,151407,151413,151425,151437,151449,151461,151465,151469,151475,151485,151494,151504,151512,151520,151529,151533,151537,151545,151581,151585,151589,151614,151621],{"__ignoreMap":43},[47,151310,151311,151313,151315],{"class":49,"line":50},[47,151312,14787],{"class":217},[47,151314,7991],{"class":53},[47,151316,3832],{"class":221},[47,151318,151319,151321,151323],{"class":49,"line":92},[47,151320,30855],{"class":217},[47,151322,30858],{"class":85},[47,151324,151325],{"class":221},"(self, student_id, name, age, score):\n",[47,151327,151328,151330,151333,151335],{"class":49,"line":1273},[47,151329,30899],{"class":85},[47,151331,151332],{"class":221},".student_id ",[47,151334,267],{"class":217},[47,151336,151337],{"class":221}," student_id\n",[47,151339,151340,151342,151344,151346],{"class":49,"line":1288},[47,151341,30899],{"class":85},[47,151343,149844],{"class":221},[47,151345,267],{"class":217},[47,151347,149849],{"class":221},[47,151349,151350,151352,151354,151356],{"class":49,"line":1294},[47,151351,30899],{"class":85},[47,151353,149856],{"class":221},[47,151355,267],{"class":217},[47,151357,149861],{"class":221},[47,151359,151360,151362,151364,151366],{"class":49,"line":1308},[47,151361,30899],{"class":85},[47,151363,149868],{"class":221},[47,151365,267],{"class":217},[47,151367,1673],{"class":221},[47,151369,151370],{"class":49,"line":1314},[47,151371,2493],{"emptyLinePlaceholder":145},[47,151373,151374,151376,151379],{"class":49,"line":1405},[47,151375,30855],{"class":217},[47,151377,151378],{"class":53}," is_passed",[47,151380,30861],{"class":221},[47,151382,151383,151385,151387,151389,151391],{"class":49,"line":1411},[47,151384,14845],{"class":217},[47,151386,38927],{"class":85},[47,151388,149868],{"class":221},[47,151390,1804],{"class":217},[47,151392,151393],{"class":85}," 60\n",[47,151395,151396],{"class":49,"line":1423},[47,151397,2493],{"emptyLinePlaceholder":145},[47,151399,151400,151402,151405],{"class":49,"line":1706},[47,151401,30855],{"class":217},[47,151403,151404],{"class":53}," to_dict",[47,151406,30861],{"class":221},[47,151408,151409,151411],{"class":49,"line":1711},[47,151410,14845],{"class":217},[47,151412,15665],{"class":221},[47,151414,151415,151418,151420,151422],{"class":49,"line":1717},[47,151416,151417],{"class":81},"            \"student_id\"",[47,151419,51491],{"class":221},[47,151421,30877],{"class":85},[47,151423,151424],{"class":221},".student_id,\n",[47,151426,151427,151430,151432,151434],{"class":49,"line":1722},[47,151428,151429],{"class":81},"            \"name\"",[47,151431,51491],{"class":221},[47,151433,30877],{"class":85},[47,151435,151436],{"class":221},".name,\n",[47,151438,151439,151442,151444,151446],{"class":49,"line":1736},[47,151440,151441],{"class":81},"            \"age\"",[47,151443,51491],{"class":221},[47,151445,30877],{"class":85},[47,151447,151448],{"class":221},".age,\n",[47,151450,151451,151454,151456,151458],{"class":49,"line":1741},[47,151452,151453],{"class":81},"            \"score\"",[47,151455,51491],{"class":221},[47,151457,30877],{"class":85},[47,151459,151460],{"class":221},".score,\n",[47,151462,151463],{"class":49,"line":1747},[47,151464,2622],{"class":221},[47,151466,151467],{"class":49,"line":1768},[47,151468,2493],{"emptyLinePlaceholder":145},[47,151470,151471,151473],{"class":49,"line":1773},[47,151472,151068],{"class":53},[47,151474,151071],{"class":85},[47,151476,151477,151479,151482],{"class":49,"line":1787},[47,151478,30855],{"class":217},[47,151480,151481],{"class":53}," from_dict",[47,151483,151484],{"class":221},"(cls, data):\n",[47,151486,151487,151489,151491],{"class":49,"line":1792},[47,151488,14845],{"class":217},[47,151490,151088],{"class":85},[47,151492,151493],{"class":221},"(\n",[47,151495,151496,151499,151502],{"class":49,"line":1821},[47,151497,151498],{"class":221},"            data[",[47,151500,151501],{"class":81},"\"student_id\"",[47,151503,87890],{"class":221},[47,151505,151506,151508,151510],{"class":49,"line":1826},[47,151507,151498],{"class":221},[47,151509,62733],{"class":81},[47,151511,87890],{"class":221},[47,151513,151514,151516,151518],{"class":49,"line":1843},[47,151515,151498],{"class":221},[47,151517,69178],{"class":81},[47,151519,87890],{"class":221},[47,151521,151522,151524,151527],{"class":49,"line":1848},[47,151523,151498],{"class":221},[47,151525,151526],{"class":81},"\"score\"",[47,151528,87890],{"class":221},[47,151530,151531],{"class":49,"line":1853},[47,151532,38180],{"class":221},[47,151534,151535],{"class":49,"line":1858},[47,151536,2493],{"emptyLinePlaceholder":145},[47,151538,151539,151541,151543],{"class":49,"line":1872},[47,151540,30855],{"class":217},[47,151542,150035],{"class":85},[47,151544,30861],{"class":221},[47,151546,151547,151549,151551,151553,151555,151558,151560,151563,151565,151567,151569,151571,151573,151575,151577,151579],{"class":49,"line":1877},[47,151548,14845],{"class":217},[47,151550,150044],{"class":217},[47,151552,470],{"class":81},[47,151554,149506],{"class":85},[47,151556,151557],{"class":221},".student_id",[47,151559,1165],{"class":85},[47,151561,151562],{"class":85}," {self",[47,151564,80355],{"class":221},[47,151566,1165],{"class":85},[47,151568,151562],{"class":85},[47,151570,80367],{"class":221},[47,151572,1165],{"class":85},[47,151574,151562],{"class":85},[47,151576,149916],{"class":221},[47,151578,1165],{"class":85},[47,151580,25187],{"class":81},[47,151582,151583],{"class":49,"line":2670},[47,151584,2493],{"emptyLinePlaceholder":145},[47,151586,151587],{"class":49,"line":2684},[47,151588,2493],{"emptyLinePlaceholder":145},[47,151590,151591,151593,151595,151597,151600,151602,151604,151606,151608,151610,151612],{"class":49,"line":2692},[47,151592,149535],{"class":221},[47,151594,267],{"class":217},[47,151596,149939],{"class":221},[47,151598,151599],{"class":81},"\"001\"",[47,151601,12528],{"class":221},[47,151603,149942],{"class":81},[47,151605,12528],{"class":221},[47,151607,869],{"class":85},[47,151609,12528],{"class":221},[47,151611,1208],{"class":85},[47,151613,228],{"class":221},[47,151615,151616,151618],{"class":49,"line":2697},[47,151617,30469],{"class":85},[47,151619,151620],{"class":221},"(student.is_passed())\n",[47,151622,151623,151625],{"class":49,"line":2703},[47,151624,30469],{"class":85},[47,151626,151627],{"class":221},"(student.to_dict())\n",[19,151629,151630,101072,151633,151636],{},[26,151631,151632],{},"to_dict()",[26,151634,151635],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,151638,151640],{"id":151639},"_1116-易错点","11.16 易错点",[171,151642,151643,151649,151655,151660,151663,151666],{},[109,151644,151645,151646,28439],{},"类名推荐使用大驼峰，如 ",[26,151647,151648],{},"StudentManager",[109,151650,151651,151652,151654],{},"方法第一个参数必须写 ",[26,151653,30877],{},"，调用时不用传。",[109,151656,151657,151659],{},[26,151658,30883],{}," 不是普通方法，它在创建对象时自动执行。",[109,151661,151662],{},"私有属性不是绝对安全，只是约定和名称改写。",[109,151664,151665],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[109,151667,151668],{},"类中方法太多时，说明职责可能过重。",[14,151670,151672],{"id":151671},"_1117-本章练习","11.17 本章练习",[171,151674,151675,151681,151687,151692,151705],{},[109,151676,151677,151678,151680],{},"定义 ",[26,151679,149622],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[109,151682,151677,151683,151686],{},[26,151684,151685],{},"Account"," 类，实现存款、取款、查询余额。",[109,151688,151677,151689,151691],{},[26,151690,17319],{}," 类，计算圆的周长和面积。",[109,151693,151677,151694,60,151697,151700,151701,151704],{},[26,151695,151696],{},"Dog",[26,151698,151699],{},"Cat"," 类，并用同一个函数调用它们的 ",[26,151702,151703],{},"speak()"," 方法。",[109,151706,104420,151707,151709,151710,28439],{},[26,151708,151193],{}," 定义一个商品类 ",[26,151711,151712],{},"Product",[134,151714,151715],{},"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":43,"searchDepth":92,"depth":92,"links":151717},[151718,151719,151720,151721,151722,151723,151725,151726,151727,151728,151729,151730,151731,151735,151736,151737,151738],{"id":149386,"depth":92,"text":149387},{"id":149569,"depth":92,"text":149570},{"id":149633,"depth":92,"text":149634},{"id":149710,"depth":92,"text":149711},{"id":149809,"depth":92,"text":149810},{"id":149973,"depth":92,"text":151724},"11.6 str",{"id":150099,"depth":92,"text":150100},{"id":150365,"depth":92,"text":150366},{"id":150479,"depth":92,"text":150480},{"id":150634,"depth":92,"text":150635},{"id":150758,"depth":92,"text":150759},{"id":150874,"depth":92,"text":150875},{"id":151023,"depth":92,"text":151024,"children":151732},[151733,151734],{"id":151027,"depth":1273,"text":151028},{"id":151109,"depth":1273,"text":151110},{"id":151187,"depth":92,"text":151188},{"id":151302,"depth":92,"text":151303},{"id":151639,"depth":92,"text":151640},{"id":151671,"depth":92,"text":151672},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149378,"description":142},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151745,"title":151746,"body":151747,"description":142,"extension":143,"meta":155060,"navigation":145,"path":155061,"seo":155062,"stem":155063,"__hash__":155064},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151748,"toc":155036},[151749,151752,151756,151759,151762,151791,151794,151802,151806,151810,151813,151836,151839,151845,151849,153295,153298,153319,153323,153326,153338,153341,153525,153528,153654,153657,153661,153665,153801,153805,153891,153895,153977,153981,154018,154022,154211,154215,154218,154448,154452,154455,154636,154639,154643,154646,154652,154655,154681,154685,154688,154702,154705,154730,154733,154747,154750,154767,154770,154787,154790,154807,154811,154837,154841,154864,154868,154871,154873,154879,154881,154902,154905,154911,154917,154921,154924,155000,155003,155007,155033],[10,151750,151746],{"id":151751},"_12-综合案例与复习路线",[14,151753,151755],{"id":151754},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,151757,151758],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,151760,151761],{},"一个合格的入门综合项目最好覆盖：",[171,151763,151764,151767,151770,151773,151776,151779,151782,151785,151788],{},[109,151765,151766],{},"输入输出。",[109,151768,151769],{},"判断和循环。",[109,151771,151772],{},"函数拆分。",[109,151774,151775],{},"列表、字典等容器。",[109,151777,151778],{},"文件持久化。",[109,151780,151781],{},"异常处理。",[109,151783,151784],{},"模块拆分。",[109,151786,151787],{},"可选：面向对象。",[109,151789,151790],{},"可选：数据可视化。",[19,151792,151793],{},"本章整理两个方向：",[171,151795,151796,151799],{},[109,151797,151798],{},"学生管理系统。",[109,151800,151801],{},"销售数据统计和可视化。",[14,151803,151805],{"id":151804},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[187,151807,151809],{"id":151808},"_1221-需求","12.2.1 需求",[19,151811,151812],{},"实现一个命令行学生管理系统：",[171,151814,151815,151818,151821,151824,151827,151830,151833],{},[109,151816,151817],{},"添加学生。",[109,151819,151820],{},"删除学生。",[109,151822,151823],{},"修改学生。",[109,151825,151826],{},"查询学生。",[109,151828,151829],{},"显示所有学生。",[109,151831,151832],{},"保存到 JSON 文件。",[109,151834,151835],{},"程序启动时自动读取 JSON 文件。",[19,151837,151838],{},"学生字段：",[38,151840,151843],{"className":151841,"code":151842,"language":5280,"meta":43},[5278],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[26,151844,151842],{"__ignoreMap":43},[14,151846,151848],{"id":151847},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[38,151850,151852],{"className":30432,"code":151851,"language":30434,"meta":43,"style":43},"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",[26,151853,151854,151860,151870,151874,151888,151892,151896,151905,151917,151923,151927,151933,151964,151974,151981,151992,151998,152002,152006,152016,152047,152073,152077,152081,152090,152101,152112,152123,152134,152145,152156,152167,152171,152175,152185,152197,152213,152220,152227,152231,152235,152245,152253,152260,152273,152283,152294,152298,152302,152311,152319,152325,152337,152345,152356,152360,152364,152373,152389,152393,152400,152411,152416,152420,152436,152451,152466,152470,152475,152483,152491,152499,152507,152511,152516,152527,152531,152535,152544,152559,152569,152573,152585,152596,152600,152604,152609,152613,152624,152628,152632,152641,152656,152664,152668,152680,152690,152694,152698,152713,152726,152739,152743,152756,152768,152780,152784,152788,152799,152803,152807,152816,152831,152839,152843,152855,152865,152869,152873,152878,152882,152886,152896,152902,152924,152943,152962,152981,152986,152990,152994,153003,153011,153022,153026,153030,153056,153066,153071,153075,153079,153087,153097,153101,153109,153114,153130,153134,153148,153153,153167,153172,153185,153190,153203,153208,153221,153226,153239,153250,153254,153260,153271,153275,153279,153291],{"__ignoreMap":43},[47,151855,151856,151858],{"class":49,"line":50},[47,151857,30446],{"class":217},[47,151859,147145],{"class":221},[47,151861,151862,151864,151866,151868],{"class":49,"line":92},[47,151863,30791],{"class":217},[47,151865,108365],{"class":221},[47,151867,30446],{"class":217},[47,151869,108370],{"class":221},[47,151871,151872],{"class":49,"line":1273},[47,151873,2493],{"emptyLinePlaceholder":145},[47,151875,151876,151879,151881,151883,151886],{"class":49,"line":1288},[47,151877,151878],{"class":85},"DATA_FILE",[47,151880,13657],{"class":217},[47,151882,108599],{"class":221},[47,151884,151885],{"class":81},"\"students.json\"",[47,151887,228],{"class":221},[47,151889,151890],{"class":49,"line":1294},[47,151891,2493],{"emptyLinePlaceholder":145},[47,151893,151894],{"class":49,"line":1308},[47,151895,2493],{"emptyLinePlaceholder":145},[47,151897,151898,151900,151903],{"class":49,"line":1314},[47,151899,32001],{"class":217},[47,151901,151902],{"class":53}," load_students",[47,151904,32007],{"class":221},[47,151906,151907,151909,151911,151914],{"class":49,"line":1405},[47,151908,3194],{"class":217},[47,151910,38984],{"class":217},[47,151912,151913],{"class":85}," DATA_FILE",[47,151915,151916],{"class":221},".exists():\n",[47,151918,151919,151921],{"class":49,"line":1411},[47,151920,14845],{"class":217},[47,151922,51892],{"class":221},[47,151924,151925],{"class":49,"line":1423},[47,151926,2493],{"emptyLinePlaceholder":145},[47,151928,151929,151931],{"class":49,"line":1706},[47,151930,125838],{"class":217},[47,151932,3832],{"class":221},[47,151934,151935,151938,151940,151942,151944,151946,151948,151950,151952,151954,151956,151958,151960,151962],{"class":49,"line":1711},[47,151936,151937],{"class":217},"        with",[47,151939,146845],{"class":85},[47,151941,222],{"class":221},[47,151943,151878],{"class":85},[47,151945,12528],{"class":221},[47,151947,146855],{"class":81},[47,151949,12528],{"class":221},[47,151951,146860],{"class":5309},[47,151953,267],{"class":217},[47,151955,146865],{"class":81},[47,151957,13807],{"class":221},[47,151959,31437],{"class":217},[47,151961,148207],{"class":5309},[47,151963,3832],{"class":221},[47,151965,151966,151968,151970,151972],{"class":49,"line":1717},[47,151967,15825],{"class":217},[47,151969,148218],{"class":221},[47,151971,45408],{"class":5309},[47,151973,228],{"class":221},[47,151975,151976,151978],{"class":49,"line":1722},[47,151977,125866],{"class":217},[47,151979,151980],{"class":221}," json.JSONDecodeError:\n",[47,151982,151983,151985,151987,151990],{"class":49,"line":1736},[47,151984,32505],{"class":85},[47,151986,222],{"class":221},[47,151988,151989],{"class":81},"\"数据文件格式错误，已使用空数据启动\"",[47,151991,228],{"class":221},[47,151993,151994,151996],{"class":49,"line":1741},[47,151995,14845],{"class":217},[47,151997,51892],{"class":221},[47,151999,152000],{"class":49,"line":1747},[47,152001,2493],{"emptyLinePlaceholder":145},[47,152003,152004],{"class":49,"line":1768},[47,152005,2493],{"emptyLinePlaceholder":145},[47,152007,152008,152010,152013],{"class":49,"line":1773},[47,152009,32001],{"class":217},[47,152011,152012],{"class":53}," save_students",[47,152014,152015],{"class":221},"(students):\n",[47,152017,152018,152020,152022,152024,152026,152028,152031,152033,152035,152037,152039,152041,152043,152045],{"class":49,"line":1787},[47,152019,34232],{"class":217},[47,152021,146845],{"class":85},[47,152023,222],{"class":221},[47,152025,151878],{"class":85},[47,152027,12528],{"class":221},[47,152029,152030],{"class":81},"\"w\"",[47,152032,12528],{"class":221},[47,152034,146860],{"class":5309},[47,152036,267],{"class":217},[47,152038,146865],{"class":81},[47,152040,13807],{"class":221},[47,152042,31437],{"class":217},[47,152044,148207],{"class":5309},[47,152046,3832],{"class":221},[47,152048,152049,152052,152054,152056,152058,152060,152062,152064,152067,152069,152071],{"class":49,"line":1792},[47,152050,152051],{"class":221},"        json.dump(students, ",[47,152053,45408],{"class":5309},[47,152055,12528],{"class":221},[47,152057,147191],{"class":5309},[47,152059,267],{"class":217},[47,152061,34041],{"class":85},[47,152063,12528],{"class":221},[47,152065,152066],{"class":5309},"indent",[47,152068,267],{"class":217},[47,152070,298],{"class":85},[47,152072,228],{"class":221},[47,152074,152075],{"class":49,"line":1821},[47,152076,2493],{"emptyLinePlaceholder":145},[47,152078,152079],{"class":49,"line":1826},[47,152080,2493],{"emptyLinePlaceholder":145},[47,152082,152083,152085,152088],{"class":49,"line":1843},[47,152084,32001],{"class":217},[47,152086,152087],{"class":53}," show_menu",[47,152089,32007],{"class":221},[47,152091,152092,152094,152096,152099],{"class":49,"line":1848},[47,152093,31353],{"class":85},[47,152095,222],{"class":221},[47,152097,152098],{"class":81},"\"====== 学生管理系统 ======\"",[47,152100,228],{"class":221},[47,152102,152103,152105,152107,152110],{"class":49,"line":1853},[47,152104,31353],{"class":85},[47,152106,222],{"class":221},[47,152108,152109],{"class":81},"\"1. 添加学生\"",[47,152111,228],{"class":221},[47,152113,152114,152116,152118,152121],{"class":49,"line":1858},[47,152115,31353],{"class":85},[47,152117,222],{"class":221},[47,152119,152120],{"class":81},"\"2. 删除学生\"",[47,152122,228],{"class":221},[47,152124,152125,152127,152129,152132],{"class":49,"line":1872},[47,152126,31353],{"class":85},[47,152128,222],{"class":221},[47,152130,152131],{"class":81},"\"3. 修改学生\"",[47,152133,228],{"class":221},[47,152135,152136,152138,152140,152143],{"class":49,"line":1877},[47,152137,31353],{"class":85},[47,152139,222],{"class":221},[47,152141,152142],{"class":81},"\"4. 查询学生\"",[47,152144,228],{"class":221},[47,152146,152147,152149,152151,152154],{"class":49,"line":2670},[47,152148,31353],{"class":85},[47,152150,222],{"class":221},[47,152152,152153],{"class":81},"\"5. 显示所有学生\"",[47,152155,228],{"class":221},[47,152157,152158,152160,152162,152165],{"class":49,"line":2684},[47,152159,31353],{"class":85},[47,152161,222],{"class":221},[47,152163,152164],{"class":81},"\"0. 退出系统\"",[47,152166,228],{"class":221},[47,152168,152169],{"class":49,"line":2692},[47,152170,2493],{"emptyLinePlaceholder":145},[47,152172,152173],{"class":49,"line":2697},[47,152174,2493],{"emptyLinePlaceholder":145},[47,152176,152177,152179,152182],{"class":49,"line":2703},[47,152178,32001],{"class":217},[47,152180,152181],{"class":53}," find_student",[47,152183,152184],{"class":221},"(students, student_id):\n",[47,152186,152187,152189,152192,152194],{"class":49,"line":2709},[47,152188,3294],{"class":217},[47,152190,152191],{"class":221}," student ",[47,152193,26097],{"class":217},[47,152195,152196],{"class":221}," students:\n",[47,152198,152199,152201,152204,152206,152208,152210],{"class":49,"line":2714},[47,152200,2590],{"class":217},[47,152202,152203],{"class":221}," student[",[47,152205,151501],{"class":81},[47,152207,4536],{"class":221},[47,152209,3042],{"class":217},[47,152211,152212],{"class":221}," student_id:\n",[47,152214,152215,152217],{"class":49,"line":8041},[47,152216,15825],{"class":217},[47,152218,152219],{"class":221}," student\n",[47,152221,152222,152224],{"class":49,"line":8065},[47,152223,4183],{"class":217},[47,152225,152226],{"class":85}," None\n",[47,152228,152229],{"class":49,"line":8070},[47,152230,2493],{"emptyLinePlaceholder":145},[47,152232,152233],{"class":49,"line":8076},[47,152234,2493],{"emptyLinePlaceholder":145},[47,152236,152237,152239,152242],{"class":49,"line":8103},[47,152238,32001],{"class":217},[47,152240,152241],{"class":53}," input_int",[47,152243,152244],{"class":221},"(prompt):\n",[47,152246,152247,152249,152251],{"class":49,"line":8108},[47,152248,2344],{"class":217},[47,152250,95346],{"class":85},[47,152252,3832],{"class":221},[47,152254,152255,152258],{"class":49,"line":8114},[47,152256,152257],{"class":217},"        try",[47,152259,3832],{"class":221},[47,152261,152262,152264,152266,152268,152270],{"class":49,"line":8126},[47,152263,15825],{"class":217},[47,152265,2475],{"class":85},[47,152267,222],{"class":221},[47,152269,53875],{"class":85},[47,152271,152272],{"class":221},"(prompt))\n",[47,152274,152275,152278,152281],{"class":49,"line":8138},[47,152276,152277],{"class":217},"        except",[47,152279,152280],{"class":85}," ValueError",[47,152282,3832],{"class":221},[47,152284,152285,152287,152289,152292],{"class":49,"line":8150},[47,152286,34704],{"class":85},[47,152288,222],{"class":221},[47,152290,152291],{"class":81},"\"请输入整数\"",[47,152293,228],{"class":221},[47,152295,152296],{"class":49,"line":9809},[47,152297,2493],{"emptyLinePlaceholder":145},[47,152299,152300],{"class":49,"line":9834},[47,152301,2493],{"emptyLinePlaceholder":145},[47,152303,152304,152306,152309],{"class":49,"line":9857},[47,152305,32001],{"class":217},[47,152307,152308],{"class":53}," input_float",[47,152310,152244],{"class":221},[47,152312,152313,152315,152317],{"class":49,"line":9881},[47,152314,2344],{"class":217},[47,152316,95346],{"class":85},[47,152318,3832],{"class":221},[47,152320,152321,152323],{"class":49,"line":9886},[47,152322,152257],{"class":217},[47,152324,3832],{"class":221},[47,152326,152327,152329,152331,152333,152335],{"class":49,"line":9891},[47,152328,15825],{"class":217},[47,152330,109851],{"class":85},[47,152332,222],{"class":221},[47,152334,53875],{"class":85},[47,152336,152272],{"class":221},[47,152338,152339,152341,152343],{"class":49,"line":9896},[47,152340,152277],{"class":217},[47,152342,152280],{"class":85},[47,152344,3832],{"class":221},[47,152346,152347,152349,152351,152354],{"class":49,"line":9905},[47,152348,34704],{"class":85},[47,152350,222],{"class":221},[47,152352,152353],{"class":81},"\"请输入数字\"",[47,152355,228],{"class":221},[47,152357,152358],{"class":49,"line":9910},[47,152359,2493],{"emptyLinePlaceholder":145},[47,152361,152362],{"class":49,"line":9916},[47,152363,2493],{"emptyLinePlaceholder":145},[47,152365,152366,152368,152371],{"class":49,"line":9937},[47,152367,32001],{"class":217},[47,152369,152370],{"class":53}," add_student",[47,152372,152015],{"class":221},[47,152374,152375,152378,152380,152382,152384,152387],{"class":49,"line":9943},[47,152376,152377],{"class":221},"    student_id ",[47,152379,267],{"class":217},[47,152381,60659],{"class":85},[47,152383,222],{"class":221},[47,152385,152386],{"class":81},"\"请输入学号:\"",[47,152388,228],{"class":221},[47,152390,152391],{"class":49,"line":9957},[47,152392,2493],{"emptyLinePlaceholder":145},[47,152394,152395,152397],{"class":49,"line":9963},[47,152396,3194],{"class":217},[47,152398,152399],{"class":221}," find_student(students, student_id):\n",[47,152401,152402,152404,152406,152409],{"class":49,"line":9990},[47,152403,32505],{"class":85},[47,152405,222],{"class":221},[47,152407,152408],{"class":81},"\"学号已存在\"",[47,152410,228],{"class":221},[47,152412,152413],{"class":49,"line":9999},[47,152414,152415],{"class":217},"        return\n",[47,152417,152418],{"class":49,"line":10005},[47,152419,2493],{"emptyLinePlaceholder":145},[47,152421,152422,152425,152427,152429,152431,152434],{"class":49,"line":10013},[47,152423,152424],{"class":221},"    name ",[47,152426,267],{"class":217},[47,152428,60659],{"class":85},[47,152430,222],{"class":221},[47,152432,152433],{"class":81},"\"请输入姓名:\"",[47,152435,228],{"class":221},[47,152437,152438,152441,152443,152446,152449],{"class":49,"line":10018},[47,152439,152440],{"class":221},"    age ",[47,152442,267],{"class":217},[47,152444,152445],{"class":221}," input_int(",[47,152447,152448],{"class":81},"\"请输入年龄:\"",[47,152450,228],{"class":221},[47,152452,152453,152456,152458,152461,152464],{"class":49,"line":16697},[47,152454,152455],{"class":221},"    score ",[47,152457,267],{"class":217},[47,152459,152460],{"class":221}," input_float(",[47,152462,152463],{"class":81},"\"请输入成绩:\"",[47,152465,228],{"class":221},[47,152467,152468],{"class":49,"line":16703},[47,152469,2493],{"emptyLinePlaceholder":145},[47,152471,152472],{"class":49,"line":16726},[47,152473,152474],{"class":221},"    students.append({\n",[47,152476,152477,152480],{"class":49,"line":16732},[47,152478,152479],{"class":81},"        \"student_id\"",[47,152481,152482],{"class":221},": student_id,\n",[47,152484,152485,152488],{"class":49,"line":16755},[47,152486,152487],{"class":81},"        \"name\"",[47,152489,152490],{"class":221},": name,\n",[47,152492,152493,152496],{"class":49,"line":16769},[47,152494,152495],{"class":81},"        \"age\"",[47,152497,152498],{"class":221},": age,\n",[47,152500,152501,152504],{"class":49,"line":16789},[47,152502,152503],{"class":81},"        \"score\"",[47,152505,152506],{"class":221},": score,\n",[47,152508,152509],{"class":49,"line":16795},[47,152510,33515],{"class":221},[47,152512,152513],{"class":49,"line":16806},[47,152514,152515],{"class":221},"    save_students(students)\n",[47,152517,152518,152520,152522,152525],{"class":49,"line":16829},[47,152519,31353],{"class":85},[47,152521,222],{"class":221},[47,152523,152524],{"class":81},"\"添加成功\"",[47,152526,228],{"class":221},[47,152528,152529],{"class":49,"line":16851},[47,152530,2493],{"emptyLinePlaceholder":145},[47,152532,152533],{"class":49,"line":16856},[47,152534,2493],{"emptyLinePlaceholder":145},[47,152536,152537,152539,152542],{"class":49,"line":16862},[47,152538,32001],{"class":217},[47,152540,152541],{"class":53}," delete_student",[47,152543,152015],{"class":221},[47,152545,152546,152548,152550,152552,152554,152557],{"class":49,"line":16876},[47,152547,152377],{"class":221},[47,152549,267],{"class":217},[47,152551,60659],{"class":85},[47,152553,222],{"class":221},[47,152555,152556],{"class":81},"\"请输入要删除的学号:\"",[47,152558,228],{"class":221},[47,152560,152561,152564,152566],{"class":49,"line":16889},[47,152562,152563],{"class":221},"    student ",[47,152565,267],{"class":217},[47,152567,152568],{"class":221}," find_student(students, student_id)\n",[47,152570,152571],{"class":49,"line":16894},[47,152572,2493],{"emptyLinePlaceholder":145},[47,152574,152575,152577,152579,152581,152583],{"class":49,"line":16908},[47,152576,3194],{"class":217},[47,152578,152191],{"class":221},[47,152580,38981],{"class":217},[47,152582,38987],{"class":85},[47,152584,3832],{"class":221},[47,152586,152587,152589,152591,152594],{"class":49,"line":16913},[47,152588,32505],{"class":85},[47,152590,222],{"class":221},[47,152592,152593],{"class":81},"\"学生不存在\"",[47,152595,228],{"class":221},[47,152597,152598],{"class":49,"line":16919},[47,152599,152415],{"class":217},[47,152601,152602],{"class":49,"line":16924},[47,152603,2493],{"emptyLinePlaceholder":145},[47,152605,152606],{"class":49,"line":16938},[47,152607,152608],{"class":221},"    students.remove(student)\n",[47,152610,152611],{"class":49,"line":16943},[47,152612,152515],{"class":221},[47,152614,152615,152617,152619,152622],{"class":49,"line":16948},[47,152616,31353],{"class":85},[47,152618,222],{"class":221},[47,152620,152621],{"class":81},"\"删除成功\"",[47,152623,228],{"class":221},[47,152625,152626],{"class":49,"line":16962},[47,152627,2493],{"emptyLinePlaceholder":145},[47,152629,152630],{"class":49,"line":16974},[47,152631,2493],{"emptyLinePlaceholder":145},[47,152633,152634,152636,152639],{"class":49,"line":16979},[47,152635,32001],{"class":217},[47,152637,152638],{"class":53}," update_student",[47,152640,152015],{"class":221},[47,152642,152643,152645,152647,152649,152651,152654],{"class":49,"line":16992},[47,152644,152377],{"class":221},[47,152646,267],{"class":217},[47,152648,60659],{"class":85},[47,152650,222],{"class":221},[47,152652,152653],{"class":81},"\"请输入要修改的学号:\"",[47,152655,228],{"class":221},[47,152657,152658,152660,152662],{"class":49,"line":16997},[47,152659,152563],{"class":221},[47,152661,267],{"class":217},[47,152663,152568],{"class":221},[47,152665,152666],{"class":49,"line":17002},[47,152667,2493],{"emptyLinePlaceholder":145},[47,152669,152670,152672,152674,152676,152678],{"class":49,"line":17007},[47,152671,3194],{"class":217},[47,152673,152191],{"class":221},[47,152675,38981],{"class":217},[47,152677,38987],{"class":85},[47,152679,3832],{"class":221},[47,152681,152682,152684,152686,152688],{"class":49,"line":17020},[47,152683,32505],{"class":85},[47,152685,222],{"class":221},[47,152687,152593],{"class":81},[47,152689,228],{"class":221},[47,152691,152692],{"class":49,"line":17025},[47,152693,152415],{"class":217},[47,152695,152696],{"class":49,"line":32687},[47,152697,2493],{"emptyLinePlaceholder":145},[47,152699,152700,152702,152704,152706,152708,152711],{"class":49,"line":32693},[47,152701,152424],{"class":221},[47,152703,267],{"class":217},[47,152705,60659],{"class":85},[47,152707,222],{"class":221},[47,152709,152710],{"class":81},"\"请输入新姓名:\"",[47,152712,228],{"class":221},[47,152714,152715,152717,152719,152721,152724],{"class":49,"line":32699},[47,152716,152440],{"class":221},[47,152718,267],{"class":217},[47,152720,152445],{"class":221},[47,152722,152723],{"class":81},"\"请输入新年龄:\"",[47,152725,228],{"class":221},[47,152727,152728,152730,152732,152734,152737],{"class":49,"line":32705},[47,152729,152455],{"class":221},[47,152731,267],{"class":217},[47,152733,152460],{"class":221},[47,152735,152736],{"class":81},"\"请输入新成绩:\"",[47,152738,228],{"class":221},[47,152740,152741],{"class":49,"line":32711},[47,152742,2493],{"emptyLinePlaceholder":145},[47,152744,152745,152748,152750,152752,152754],{"class":49,"line":32722},[47,152746,152747],{"class":221},"    student[",[47,152749,62733],{"class":81},[47,152751,4536],{"class":221},[47,152753,267],{"class":217},[47,152755,149849],{"class":221},[47,152757,152758,152760,152762,152764,152766],{"class":49,"line":32728},[47,152759,152747],{"class":221},[47,152761,69178],{"class":81},[47,152763,4536],{"class":221},[47,152765,267],{"class":217},[47,152767,149861],{"class":221},[47,152769,152770,152772,152774,152776,152778],{"class":49,"line":32748},[47,152771,152747],{"class":221},[47,152773,151526],{"class":81},[47,152775,4536],{"class":221},[47,152777,267],{"class":217},[47,152779,1673],{"class":221},[47,152781,152782],{"class":49,"line":32754},[47,152783,2493],{"emptyLinePlaceholder":145},[47,152785,152786],{"class":49,"line":32765},[47,152787,152515],{"class":221},[47,152789,152790,152792,152794,152797],{"class":49,"line":32771},[47,152791,31353],{"class":85},[47,152793,222],{"class":221},[47,152795,152796],{"class":81},"\"修改成功\"",[47,152798,228],{"class":221},[47,152800,152801],{"class":49,"line":32777},[47,152802,2493],{"emptyLinePlaceholder":145},[47,152804,152805],{"class":49,"line":32783},[47,152806,2493],{"emptyLinePlaceholder":145},[47,152808,152809,152811,152814],{"class":49,"line":32789},[47,152810,32001],{"class":217},[47,152812,152813],{"class":53}," query_student",[47,152815,152015],{"class":221},[47,152817,152818,152820,152822,152824,152826,152829],{"class":49,"line":32795},[47,152819,152377],{"class":221},[47,152821,267],{"class":217},[47,152823,60659],{"class":85},[47,152825,222],{"class":221},[47,152827,152828],{"class":81},"\"请输入要查询的学号:\"",[47,152830,228],{"class":221},[47,152832,152833,152835,152837],{"class":49,"line":32801},[47,152834,152563],{"class":221},[47,152836,267],{"class":217},[47,152838,152568],{"class":221},[47,152840,152841],{"class":49,"line":32807},[47,152842,2493],{"emptyLinePlaceholder":145},[47,152844,152845,152847,152849,152851,152853],{"class":49,"line":32827},[47,152846,3194],{"class":217},[47,152848,152191],{"class":221},[47,152850,38981],{"class":217},[47,152852,38987],{"class":85},[47,152854,3832],{"class":221},[47,152856,152857,152859,152861,152863],{"class":49,"line":32833},[47,152858,32505],{"class":85},[47,152860,222],{"class":221},[47,152862,152593],{"class":81},[47,152864,228],{"class":221},[47,152866,152867],{"class":49,"line":32849},[47,152868,152415],{"class":217},[47,152870,152871],{"class":49,"line":32855},[47,152872,2493],{"emptyLinePlaceholder":145},[47,152874,152875],{"class":49,"line":32869},[47,152876,152877],{"class":221},"    print_student(student)\n",[47,152879,152880],{"class":49,"line":32875},[47,152881,2493],{"emptyLinePlaceholder":145},[47,152883,152884],{"class":49,"line":32890},[47,152885,2493],{"emptyLinePlaceholder":145},[47,152887,152888,152890,152893],{"class":49,"line":32896},[47,152889,32001],{"class":217},[47,152891,152892],{"class":53}," print_student",[47,152894,152895],{"class":221},"(student):\n",[47,152897,152898,152900],{"class":49,"line":32905},[47,152899,31353],{"class":85},[47,152901,151493],{"class":221},[47,152903,152904,152907,152909,152911,152914,152917,152919,152922],{"class":49,"line":32911},[47,152905,152906],{"class":217},"        f",[47,152908,470],{"class":81},[47,152910,1115],{"class":85},[47,152912,152913],{"class":221},"student[",[47,152915,152916],{"class":81},"'student_id'",[47,152918,1159],{"class":221},[47,152920,152921],{"class":85},"}\\t",[47,152923,25187],{"class":81},[47,152925,152926,152928,152930,152932,152934,152937,152939,152941],{"class":49,"line":32920},[47,152927,152906],{"class":217},[47,152929,470],{"class":81},[47,152931,1115],{"class":85},[47,152933,152913],{"class":221},[47,152935,152936],{"class":81},"'name'",[47,152938,1159],{"class":221},[47,152940,152921],{"class":85},[47,152942,25187],{"class":81},[47,152944,152945,152947,152949,152951,152953,152956,152958,152960],{"class":49,"line":32926},[47,152946,152906],{"class":217},[47,152948,470],{"class":81},[47,152950,1115],{"class":85},[47,152952,152913],{"class":221},[47,152954,152955],{"class":81},"'age'",[47,152957,1159],{"class":221},[47,152959,152921],{"class":85},[47,152961,25187],{"class":81},[47,152963,152964,152966,152968,152970,152972,152975,152977,152979],{"class":49,"line":32932},[47,152965,152906],{"class":217},[47,152967,470],{"class":81},[47,152969,1115],{"class":85},[47,152971,152913],{"class":221},[47,152973,152974],{"class":81},"'score'",[47,152976,1159],{"class":221},[47,152978,1165],{"class":85},[47,152980,25187],{"class":81},[47,152982,152983],{"class":49,"line":32941},[47,152984,152985],{"class":221},"    )\n",[47,152987,152988],{"class":49,"line":32947},[47,152989,2493],{"emptyLinePlaceholder":145},[47,152991,152992],{"class":49,"line":32958},[47,152993,2493],{"emptyLinePlaceholder":145},[47,152995,152996,152998,153001],{"class":49,"line":32964},[47,152997,32001],{"class":217},[47,152999,153000],{"class":53}," show_all_students",[47,153002,152015],{"class":221},[47,153004,153005,153007,153009],{"class":49,"line":32983},[47,153006,3194],{"class":217},[47,153008,38984],{"class":217},[47,153010,152196],{"class":221},[47,153012,153013,153015,153017,153020],{"class":49,"line":32989},[47,153014,32505],{"class":85},[47,153016,222],{"class":221},[47,153018,153019],{"class":81},"\"暂无学生\"",[47,153021,228],{"class":221},[47,153023,153024],{"class":49,"line":33000},[47,153025,152415],{"class":217},[47,153027,153028],{"class":49,"line":33006},[47,153029,2493],{"emptyLinePlaceholder":145},[47,153031,153032,153034,153036,153039,153041,153044,153046,153049,153051,153054],{"class":49,"line":33026},[47,153033,31353],{"class":85},[47,153035,222],{"class":221},[47,153037,153038],{"class":81},"\"学号",[47,153040,1324],{"class":85},[47,153042,153043],{"class":81},"姓名",[47,153045,1324],{"class":85},[47,153047,153048],{"class":81},"年龄",[47,153050,1324],{"class":85},[47,153052,153053],{"class":81},"成绩\"",[47,153055,228],{"class":221},[47,153057,153058,153060,153062,153064],{"class":49,"line":33042},[47,153059,3294],{"class":217},[47,153061,152191],{"class":221},[47,153063,26097],{"class":217},[47,153065,152196],{"class":221},[47,153067,153068],{"class":49,"line":33048},[47,153069,153070],{"class":221},"        print_student(student)\n",[47,153072,153073],{"class":49,"line":33062},[47,153074,2493],{"emptyLinePlaceholder":145},[47,153076,153077],{"class":49,"line":33068},[47,153078,2493],{"emptyLinePlaceholder":145},[47,153080,153081,153083,153085],{"class":49,"line":33074},[47,153082,32001],{"class":217},[47,153084,2066],{"class":53},[47,153086,32007],{"class":221},[47,153088,153089,153092,153094],{"class":49,"line":33085},[47,153090,153091],{"class":221},"    students ",[47,153093,267],{"class":217},[47,153095,153096],{"class":221}," load_students()\n",[47,153098,153099],{"class":49,"line":33091},[47,153100,2493],{"emptyLinePlaceholder":145},[47,153102,153103,153105,153107],{"class":49,"line":33097},[47,153104,2344],{"class":217},[47,153106,95346],{"class":85},[47,153108,3832],{"class":221},[47,153110,153111],{"class":49,"line":33107},[47,153112,153113],{"class":221},"        show_menu()\n",[47,153115,153116,153119,153121,153123,153125,153128],{"class":49,"line":33113},[47,153117,153118],{"class":221},"        choice ",[47,153120,267],{"class":217},[47,153122,60659],{"class":85},[47,153124,222],{"class":221},[47,153126,153127],{"class":81},"\"请输入操作:\"",[47,153129,228],{"class":221},[47,153131,153132],{"class":49,"line":33124},[47,153133,2493],{"emptyLinePlaceholder":145},[47,153135,153136,153138,153141,153143,153146],{"class":49,"line":33130},[47,153137,2590],{"class":217},[47,153139,153140],{"class":221}," choice ",[47,153142,3042],{"class":217},[47,153144,153145],{"class":81}," \"1\"",[47,153147,3832],{"class":221},[47,153149,153150],{"class":49,"line":33140},[47,153151,153152],{"class":221},"            add_student(students)\n",[47,153154,153155,153158,153160,153162,153165],{"class":49,"line":33145},[47,153156,153157],{"class":217},"        elif",[47,153159,153140],{"class":221},[47,153161,3042],{"class":217},[47,153163,153164],{"class":81}," \"2\"",[47,153166,3832],{"class":221},[47,153168,153169],{"class":49,"line":33151},[47,153170,153171],{"class":221},"            delete_student(students)\n",[47,153173,153174,153176,153178,153180,153183],{"class":49,"line":33200},[47,153175,153157],{"class":217},[47,153177,153140],{"class":221},[47,153179,3042],{"class":217},[47,153181,153182],{"class":81}," \"3\"",[47,153184,3832],{"class":221},[47,153186,153187],{"class":49,"line":33247},[47,153188,153189],{"class":221},"            update_student(students)\n",[47,153191,153192,153194,153196,153198,153201],{"class":49,"line":33252},[47,153193,153157],{"class":217},[47,153195,153140],{"class":221},[47,153197,3042],{"class":217},[47,153199,153200],{"class":81}," \"4\"",[47,153202,3832],{"class":221},[47,153204,153205],{"class":49,"line":33258},[47,153206,153207],{"class":221},"            query_student(students)\n",[47,153209,153210,153212,153214,153216,153219],{"class":49,"line":33277},[47,153211,153157],{"class":217},[47,153213,153140],{"class":221},[47,153215,3042],{"class":217},[47,153217,153218],{"class":81}," \"5\"",[47,153220,3832],{"class":221},[47,153222,153223],{"class":49,"line":33283},[47,153224,153225],{"class":221},"            show_all_students(students)\n",[47,153227,153228,153230,153232,153234,153237],{"class":49,"line":33303},[47,153229,153157],{"class":217},[47,153231,153140],{"class":221},[47,153233,3042],{"class":217},[47,153235,153236],{"class":81}," \"0\"",[47,153238,3832],{"class":221},[47,153240,153241,153243,153245,153248],{"class":49,"line":33309},[47,153242,34704],{"class":85},[47,153244,222],{"class":221},[47,153246,153247],{"class":81},"\"退出系统\"",[47,153249,228],{"class":221},[47,153251,153252],{"class":49,"line":33315},[47,153253,115152],{"class":217},[47,153255,153256,153258],{"class":49,"line":33325},[47,153257,2627],{"class":217},[47,153259,3832],{"class":221},[47,153261,153262,153264,153266,153269],{"class":49,"line":33330},[47,153263,34704],{"class":85},[47,153265,222],{"class":221},[47,153267,153268],{"class":81},"\"输入错误\"",[47,153270,228],{"class":221},[47,153272,153273],{"class":49,"line":33336},[47,153274,2493],{"emptyLinePlaceholder":145},[47,153276,153277],{"class":49,"line":33352},[47,153278,2493],{"emptyLinePlaceholder":145},[47,153280,153281,153283,153285,153287,153289],{"class":49,"line":33397},[47,153282,1625],{"class":217},[47,153284,31274],{"class":85},[47,153286,101613],{"class":217},[47,153288,101616],{"class":81},[47,153290,3832],{"class":221},[47,153292,153293],{"class":49,"line":33403},[47,153294,101623],{"class":221},[19,153296,153297],{},"这个项目串联了：",[171,153299,153300,153303,153306,153309,153312,153314],{},[109,153301,153302],{},"菜单循环。",[109,153304,153305],{},"函数封装。",[109,153307,153308],{},"列表字典。",[109,153310,153311],{},"JSON 读写。",[109,153313,151781],{},[109,153315,153316,28439],{},[26,153317,153318],{},"if __name__ == \"__main__\"",[14,153320,153322],{"id":153321},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,153324,153325],{},"可以进一步拆成两个类：",[171,153327,153328,153333],{},[109,153329,153330,153332],{},[26,153331,149622],{},"：表示单个学生。",[109,153334,153335,153337],{},[26,153336,151648],{},"：负责学生增删改查和文件保存。",[19,153339,153340],{},"示意代码：",[38,153342,153344],{"className":30432,"code":153343,"language":30434,"meta":43,"style":43},"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",[26,153345,153346,153356,153360,153364,153368,153376,153383,153389,153395,153401,153405,153413,153419,153429,153439,153449,153459,153463,153467,153473,153481,153489,153497,153505,153513,153521],{"__ignoreMap":43},[47,153347,153348,153350,153352,153354],{"class":49,"line":50},[47,153349,30791],{"class":217},[47,153351,151206],{"class":221},[47,153353,30446],{"class":217},[47,153355,151211],{"class":221},[47,153357,153358],{"class":49,"line":92},[47,153359,2493],{"emptyLinePlaceholder":145},[47,153361,153362],{"class":49,"line":1273},[47,153363,2493],{"emptyLinePlaceholder":145},[47,153365,153366],{"class":49,"line":1288},[47,153367,151224],{"class":53},[47,153369,153370,153372,153374],{"class":49,"line":1294},[47,153371,14787],{"class":217},[47,153373,7991],{"class":53},[47,153375,3832],{"class":221},[47,153377,153378,153381],{"class":49,"line":1308},[47,153379,153380],{"class":221},"    student_id: ",[47,153382,151240],{"class":85},[47,153384,153385,153387],{"class":49,"line":1314},[47,153386,151237],{"class":221},[47,153388,151240],{"class":85},[47,153390,153391,153393],{"class":49,"line":1405},[47,153392,151245],{"class":221},[47,153394,151248],{"class":85},[47,153396,153397,153399],{"class":49,"line":1411},[47,153398,151253],{"class":221},[47,153400,151256],{"class":85},[47,153402,153403],{"class":49,"line":1423},[47,153404,2493],{"emptyLinePlaceholder":145},[47,153406,153407,153409,153411],{"class":49,"line":1706},[47,153408,30855],{"class":217},[47,153410,151404],{"class":53},[47,153412,30861],{"class":221},[47,153414,153415,153417],{"class":49,"line":1711},[47,153416,14845],{"class":217},[47,153418,15665],{"class":221},[47,153420,153421,153423,153425,153427],{"class":49,"line":1717},[47,153422,151417],{"class":81},[47,153424,51491],{"class":221},[47,153426,30877],{"class":85},[47,153428,151424],{"class":221},[47,153430,153431,153433,153435,153437],{"class":49,"line":1722},[47,153432,151429],{"class":81},[47,153434,51491],{"class":221},[47,153436,30877],{"class":85},[47,153438,151436],{"class":221},[47,153440,153441,153443,153445,153447],{"class":49,"line":1736},[47,153442,151441],{"class":81},[47,153444,51491],{"class":221},[47,153446,30877],{"class":85},[47,153448,151448],{"class":221},[47,153450,153451,153453,153455,153457],{"class":49,"line":1741},[47,153452,151453],{"class":81},[47,153454,51491],{"class":221},[47,153456,30877],{"class":85},[47,153458,151460],{"class":221},[47,153460,153461],{"class":49,"line":1747},[47,153462,2622],{"class":221},[47,153464,153465],{"class":49,"line":1768},[47,153466,2493],{"emptyLinePlaceholder":145},[47,153468,153469,153471],{"class":49,"line":1773},[47,153470,151068],{"class":53},[47,153472,151071],{"class":85},[47,153474,153475,153477,153479],{"class":49,"line":1787},[47,153476,30855],{"class":217},[47,153478,151481],{"class":53},[47,153480,151484],{"class":221},[47,153482,153483,153485,153487],{"class":49,"line":1792},[47,153484,14845],{"class":217},[47,153486,151088],{"class":85},[47,153488,151493],{"class":221},[47,153490,153491,153493,153495],{"class":49,"line":1821},[47,153492,151498],{"class":221},[47,153494,151501],{"class":81},[47,153496,87890],{"class":221},[47,153498,153499,153501,153503],{"class":49,"line":1826},[47,153500,151498],{"class":221},[47,153502,62733],{"class":81},[47,153504,87890],{"class":221},[47,153506,153507,153509,153511],{"class":49,"line":1843},[47,153508,151498],{"class":221},[47,153510,69178],{"class":81},[47,153512,87890],{"class":221},[47,153514,153515,153517,153519],{"class":49,"line":1848},[47,153516,151498],{"class":221},[47,153518,151526],{"class":81},[47,153520,87890],{"class":221},[47,153522,153523],{"class":49,"line":1853},[47,153524,38180],{"class":221},[19,153526,153527],{},"管理器示意：",[38,153529,153531],{"className":30432,"code":153530,"language":30434,"meta":43,"style":43},"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",[26,153532,153533,153542,153550,153561,153565,153575,153588,153599,153606,153612,153616,153625,153634,153640,153647],{"__ignoreMap":43},[47,153534,153535,153537,153540],{"class":49,"line":50},[47,153536,14787],{"class":217},[47,153538,153539],{"class":53}," StudentManager",[47,153541,3832],{"class":221},[47,153543,153544,153546,153548],{"class":49,"line":92},[47,153545,30855],{"class":217},[47,153547,30858],{"class":85},[47,153549,30861],{"class":221},[47,153551,153552,153554,153557,153559],{"class":49,"line":1273},[47,153553,30899],{"class":85},[47,153555,153556],{"class":221},".students ",[47,153558,267],{"class":217},[47,153560,51892],{"class":221},[47,153562,153563],{"class":49,"line":1288},[47,153564,2493],{"emptyLinePlaceholder":145},[47,153566,153567,153569,153572],{"class":49,"line":1294},[47,153568,30855],{"class":217},[47,153570,153571],{"class":53}," find_by_id",[47,153573,153574],{"class":221},"(self, student_id):\n",[47,153576,153577,153579,153581,153583,153585],{"class":49,"line":1308},[47,153578,3496],{"class":217},[47,153580,152191],{"class":221},[47,153582,26097],{"class":217},[47,153584,38927],{"class":85},[47,153586,153587],{"class":221},".students:\n",[47,153589,153590,153592,153595,153597],{"class":49,"line":1314},[47,153591,4735],{"class":217},[47,153593,153594],{"class":221}," student.student_id ",[47,153596,3042],{"class":217},[47,153598,152212],{"class":221},[47,153600,153601,153604],{"class":49,"line":1405},[47,153602,153603],{"class":217},"                return",[47,153605,152219],{"class":221},[47,153607,153608,153610],{"class":49,"line":1411},[47,153609,14845],{"class":217},[47,153611,152226],{"class":85},[47,153613,153614],{"class":49,"line":1423},[47,153615,2493],{"emptyLinePlaceholder":145},[47,153617,153618,153620,153622],{"class":49,"line":1706},[47,153619,30855],{"class":217},[47,153621,5302],{"class":53},[47,153623,153624],{"class":221},"(self, student):\n",[47,153626,153627,153629,153631],{"class":49,"line":1711},[47,153628,2590],{"class":217},[47,153630,38927],{"class":85},[47,153632,153633],{"class":221},".find_by_id(student.student_id):\n",[47,153635,153636,153638],{"class":49,"line":1717},[47,153637,15825],{"class":217},[47,153639,125861],{"class":85},[47,153641,153642,153644],{"class":49,"line":1722},[47,153643,30899],{"class":85},[47,153645,153646],{"class":221},".students.append(student)\n",[47,153648,153649,153651],{"class":49,"line":1736},[47,153650,14845],{"class":217},[47,153652,153653],{"class":85}," True\n",[19,153655,153656],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,153658,153660],{"id":153659},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[187,153662,153664],{"id":153663},"_1251-数据结构","12.5.1 数据结构",[38,153666,153668],{"className":30432,"code":153667,"language":30434,"meta":43,"style":43},"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",[26,153669,153670,153678,153709,153739,153768,153797],{"__ignoreMap":43},[47,153671,153672,153674,153676],{"class":49,"line":50},[47,153673,148519],{"class":221},[47,153675,267],{"class":217},[47,153677,55501],{"class":221},[47,153679,153680,153682,153684,153686,153688,153690,153693,153695,153698,153700,153702,153704,153707],{"class":49,"line":92},[47,153681,148439],{"class":221},[47,153683,148051],{"class":81},[47,153685,51491],{"class":221},[47,153687,148662],{"class":81},[47,153689,12528],{"class":221},[47,153691,153692],{"class":81},"\"category\"",[47,153694,51491],{"class":221},[47,153696,153697],{"class":81},"\"手机\"",[47,153699,12528],{"class":221},[47,153701,84138],{"class":81},[47,153703,51491],{"class":221},[47,153705,153706],{"class":85},"12000",[47,153708,5023],{"class":221},[47,153710,153711,153713,153715,153717,153719,153721,153723,153725,153728,153730,153732,153734,153737],{"class":49,"line":1273},[47,153712,148439],{"class":221},[47,153714,148051],{"class":81},[47,153716,51491],{"class":221},[47,153718,148662],{"class":81},[47,153720,12528],{"class":221},[47,153722,153692],{"class":81},[47,153724,51491],{"class":221},[47,153726,153727],{"class":81},"\"电脑\"",[47,153729,12528],{"class":221},[47,153731,84138],{"class":81},[47,153733,51491],{"class":221},[47,153735,153736],{"class":85},"18000",[47,153738,5023],{"class":221},[47,153740,153741,153743,153745,153747,153749,153751,153753,153755,153757,153759,153761,153763,153766],{"class":49,"line":1288},[47,153742,148439],{"class":221},[47,153744,148051],{"class":81},[47,153746,51491],{"class":221},[47,153748,148683],{"class":81},[47,153750,12528],{"class":221},[47,153752,153692],{"class":81},[47,153754,51491],{"class":221},[47,153756,153697],{"class":81},[47,153758,12528],{"class":221},[47,153760,84138],{"class":81},[47,153762,51491],{"class":221},[47,153764,153765],{"class":85},"15000",[47,153767,5023],{"class":221},[47,153769,153770,153772,153774,153776,153778,153780,153782,153784,153786,153788,153790,153792,153795],{"class":49,"line":1294},[47,153771,148439],{"class":221},[47,153773,148051],{"class":81},[47,153775,51491],{"class":221},[47,153777,148683],{"class":81},[47,153779,12528],{"class":221},[47,153781,153692],{"class":81},[47,153783,51491],{"class":221},[47,153785,153727],{"class":81},[47,153787,12528],{"class":221},[47,153789,84138],{"class":81},[47,153791,51491],{"class":221},[47,153793,153794],{"class":85},"16000",[47,153796,5023],{"class":221},[47,153798,153799],{"class":49,"line":1308},[47,153800,33300],{"class":221},[187,153802,153804],{"id":153803},"_1252-按日期统计","12.5.2 按日期统计",[38,153806,153808],{"className":30432,"code":153807,"language":30434,"meta":43,"style":43},"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",[26,153809,153810,153819,153823,153834,153848,153861,153880,153884],{"__ignoreMap":43},[47,153811,153812,153815,153817],{"class":49,"line":50},[47,153813,153814],{"class":221},"daily_total ",[47,153816,267],{"class":217},[47,153818,87922],{"class":221},[47,153820,153821],{"class":49,"line":92},[47,153822,2493],{"emptyLinePlaceholder":145},[47,153824,153825,153827,153829,153831],{"class":49,"line":1273},[47,153826,3118],{"class":217},[47,153828,148263],{"class":221},[47,153830,26097],{"class":217},[47,153832,153833],{"class":221}," sales:\n",[47,153835,153836,153839,153841,153844,153846],{"class":49,"line":1288},[47,153837,153838],{"class":221},"    date ",[47,153840,267],{"class":217},[47,153842,153843],{"class":221}," item[",[47,153845,148051],{"class":81},[47,153847,33300],{"class":221},[47,153849,153850,153853,153855,153857,153859],{"class":49,"line":1294},[47,153851,153852],{"class":221},"    amount ",[47,153854,267],{"class":217},[47,153856,153843],{"class":221},[47,153858,84138],{"class":81},[47,153860,33300],{"class":221},[47,153862,153863,153866,153868,153871,153873,153875,153877],{"class":49,"line":1308},[47,153864,153865],{"class":221},"    daily_total[date] ",[47,153867,267],{"class":217},[47,153869,153870],{"class":221}," daily_total.get(date, ",[47,153872,411],{"class":85},[47,153874,13807],{"class":221},[47,153876,700],{"class":217},[47,153878,153879],{"class":221}," amount\n",[47,153881,153882],{"class":49,"line":1314},[47,153883,2493],{"emptyLinePlaceholder":145},[47,153885,153886,153888],{"class":49,"line":1405},[47,153887,30469],{"class":85},[47,153889,153890],{"class":221},"(daily_total)\n",[187,153892,153894],{"id":153893},"_1253-按类别统计","12.5.3 按类别统计",[38,153896,153898],{"className":30432,"code":153897,"language":30434,"meta":43,"style":43},"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",[26,153899,153900,153909,153913,153923,153936,153948,153966,153970],{"__ignoreMap":43},[47,153901,153902,153905,153907],{"class":49,"line":50},[47,153903,153904],{"class":221},"category_total ",[47,153906,267],{"class":217},[47,153908,87922],{"class":221},[47,153910,153911],{"class":49,"line":92},[47,153912,2493],{"emptyLinePlaceholder":145},[47,153914,153915,153917,153919,153921],{"class":49,"line":1273},[47,153916,3118],{"class":217},[47,153918,148263],{"class":221},[47,153920,26097],{"class":217},[47,153922,153833],{"class":221},[47,153924,153925,153928,153930,153932,153934],{"class":49,"line":1288},[47,153926,153927],{"class":221},"    category ",[47,153929,267],{"class":217},[47,153931,153843],{"class":221},[47,153933,153692],{"class":81},[47,153935,33300],{"class":221},[47,153937,153938,153940,153942,153944,153946],{"class":49,"line":1294},[47,153939,153852],{"class":221},[47,153941,267],{"class":217},[47,153943,153843],{"class":221},[47,153945,84138],{"class":81},[47,153947,33300],{"class":221},[47,153949,153950,153953,153955,153958,153960,153962,153964],{"class":49,"line":1308},[47,153951,153952],{"class":221},"    category_total[category] ",[47,153954,267],{"class":217},[47,153956,153957],{"class":221}," category_total.get(category, ",[47,153959,411],{"class":85},[47,153961,13807],{"class":221},[47,153963,700],{"class":217},[47,153965,153879],{"class":221},[47,153967,153968],{"class":49,"line":1314},[47,153969,2493],{"emptyLinePlaceholder":145},[47,153971,153972,153974],{"class":49,"line":1405},[47,153973,30469],{"class":85},[47,153975,153976],{"class":221},"(category_total)\n",[187,153978,153980],{"id":153979},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[38,153982,153984],{"className":30432,"code":153983,"language":30434,"meta":43,"style":43},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[26,153985,153986,154011],{"__ignoreMap":43},[47,153987,153988,153991,153993,153995,153998,154001,154004,154007,154009],{"class":49,"line":50},[47,153989,153990],{"class":221},"top_date, top_amount ",[47,153992,267],{"class":217},[47,153994,6044],{"class":85},[47,153996,153997],{"class":221},"(daily_total.items(), ",[47,153999,154000],{"class":5309},"key",[47,154002,154003],{"class":217},"=lambda",[47,154005,154006],{"class":221}," item: item[",[47,154008,436],{"class":85},[47,154010,4750],{"class":221},[47,154012,154013,154015],{"class":49,"line":92},[47,154014,30469],{"class":85},[47,154016,154017],{"class":221},"(top_date, top_amount)\n",[14,154019,154021],{"id":154020},"_126-绘制柱状图","12.6 绘制柱状图",[38,154023,154025],{"className":30432,"code":154024,"language":30434,"meta":43,"style":43},"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",[26,154026,154027,154041,154052,154056,154064,154076,154088,154099,154103,154107,154117,154128,154142,154147,154164,154181,154197,154201],{"__ignoreMap":43},[47,154028,154029,154031,154033,154035,154037,154039],{"class":49,"line":50},[47,154030,30791],{"class":217},[47,154032,147433],{"class":221},[47,154034,30446],{"class":217},[47,154036,147438],{"class":221},[47,154038,31437],{"class":217},[47,154040,147443],{"class":221},[47,154042,154043,154045,154047,154049],{"class":49,"line":92},[47,154044,30791],{"class":217},[47,154046,147292],{"class":221},[47,154048,30446],{"class":217},[47,154050,154051],{"class":221}," Bar\n",[47,154053,154054],{"class":49,"line":1273},[47,154055,2493],{"emptyLinePlaceholder":145},[47,154057,154058,154060,154062],{"class":49,"line":1288},[47,154059,153904],{"class":221},[47,154061,267],{"class":217},[47,154063,15665],{"class":221},[47,154065,154066,154069,154071,154074],{"class":49,"line":1294},[47,154067,154068],{"class":81},"    \"手机\"",[47,154070,51491],{"class":221},[47,154072,154073],{"class":85},"27000",[47,154075,31520],{"class":221},[47,154077,154078,154081,154083,154086],{"class":49,"line":1308},[47,154079,154080],{"class":81},"    \"电脑\"",[47,154082,51491],{"class":221},[47,154084,154085],{"class":85},"34000",[47,154087,31520],{"class":221},[47,154089,154090,154093,154095,154097],{"class":49,"line":1314},[47,154091,154092],{"class":81},"    \"耳机\"",[47,154094,51491],{"class":221},[47,154096,124453],{"class":85},[47,154098,31520],{"class":221},[47,154100,154101],{"class":49,"line":1405},[47,154102,1659],{"class":221},[47,154104,154105],{"class":49,"line":1411},[47,154106,2493],{"emptyLinePlaceholder":145},[47,154108,154109,154112,154114],{"class":49,"line":1423},[47,154110,154111],{"class":221},"bar ",[47,154113,267],{"class":217},[47,154115,154116],{"class":221}," Bar()\n",[47,154118,154119,154122,154125],{"class":49,"line":1706},[47,154120,154121],{"class":221},"bar.add_xaxis(",[47,154123,154124],{"class":85},"list",[47,154126,154127],{"class":221},"(category_total.keys()))\n",[47,154129,154130,154133,154135,154137,154139],{"class":49,"line":1711},[47,154131,154132],{"class":221},"bar.add_yaxis(",[47,154134,147349],{"class":81},[47,154136,12528],{"class":221},[47,154138,154124],{"class":85},[47,154140,154141],{"class":221},"(category_total.values()))\n",[47,154143,154144],{"class":49,"line":1717},[47,154145,154146],{"class":221},"bar.set_global_opts(\n",[47,154148,154149,154151,154153,154155,154157,154159,154162],{"class":49,"line":1722},[47,154150,147527],{"class":5309},[47,154152,267],{"class":217},[47,154154,147532],{"class":221},[47,154156,51461],{"class":5309},[47,154158,267],{"class":217},[47,154160,154161],{"class":81},"\"品类销售额\"",[47,154163,38101],{"class":221},[47,154165,154166,154168,154170,154172,154174,154176,154179],{"class":49,"line":1736},[47,154167,147546],{"class":5309},[47,154169,267],{"class":217},[47,154171,147551],{"class":221},[47,154173,79864],{"class":5309},[47,154175,267],{"class":217},[47,154177,154178],{"class":81},"\"品类\"",[47,154180,38101],{"class":221},[47,154182,154183,154185,154187,154189,154191,154193,154195],{"class":49,"line":1741},[47,154184,147565],{"class":5309},[47,154186,267],{"class":217},[47,154188,147551],{"class":221},[47,154190,79864],{"class":5309},[47,154192,267],{"class":217},[47,154194,147349],{"class":81},[47,154196,38101],{"class":221},[47,154198,154199],{"class":49,"line":1747},[47,154200,228],{"class":221},[47,154202,154203,154206,154209],{"class":49,"line":1768},[47,154204,154205],{"class":221},"bar.render(",[47,154207,154208],{"class":81},"\"category_sales.html\"",[47,154210,228],{"class":221},[14,154212,154214],{"id":154213},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,154216,154217],{},"时间线适合展示不同日期、月份、年份的数据变化。",[38,154219,154221],{"className":30432,"code":154220,"language":30434,"meta":43,"style":43},"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",[26,154222,154223,154237,154248,154252,154260,154284,154307,154332,154336,154340,154350,154354,154365,154374,154384,154398,154429,154434,154438],{"__ignoreMap":43},[47,154224,154225,154227,154229,154231,154233,154235],{"class":49,"line":50},[47,154226,30791],{"class":217},[47,154228,147433],{"class":221},[47,154230,30446],{"class":217},[47,154232,147438],{"class":221},[47,154234,31437],{"class":217},[47,154236,147443],{"class":221},[47,154238,154239,154241,154243,154245],{"class":49,"line":92},[47,154240,30791],{"class":217},[47,154242,147292],{"class":221},[47,154244,30446],{"class":217},[47,154246,154247],{"class":221}," Bar, Timeline\n",[47,154249,154250],{"class":49,"line":1273},[47,154251,2493],{"emptyLinePlaceholder":145},[47,154253,154254,154256,154258],{"class":49,"line":1288},[47,154255,101712],{"class":221},[47,154257,267],{"class":217},[47,154259,15665],{"class":221},[47,154261,154262,154265,154268,154270,154272,154274,154276,154278,154280,154282],{"class":49,"line":1294},[47,154263,154264],{"class":81},"    \"2024-10-01\"",[47,154266,154267],{"class":221},": {",[47,154269,153697],{"class":81},[47,154271,51491],{"class":221},[47,154273,153706],{"class":85},[47,154275,12528],{"class":221},[47,154277,153727],{"class":81},[47,154279,51491],{"class":221},[47,154281,153736],{"class":85},[47,154283,5023],{"class":221},[47,154285,154286,154289,154291,154293,154295,154297,154299,154301,154303,154305],{"class":49,"line":1308},[47,154287,154288],{"class":81},"    \"2024-10-02\"",[47,154290,154267],{"class":221},[47,154292,153697],{"class":81},[47,154294,51491],{"class":221},[47,154296,153765],{"class":85},[47,154298,12528],{"class":221},[47,154300,153727],{"class":81},[47,154302,51491],{"class":221},[47,154304,153794],{"class":85},[47,154306,5023],{"class":221},[47,154308,154309,154312,154314,154316,154318,154321,154323,154325,154327,154330],{"class":49,"line":1314},[47,154310,154311],{"class":81},"    \"2024-10-03\"",[47,154313,154267],{"class":221},[47,154315,153697],{"class":81},[47,154317,51491],{"class":221},[47,154319,154320],{"class":85},"17000",[47,154322,12528],{"class":221},[47,154324,153727],{"class":81},[47,154326,51491],{"class":221},[47,154328,154329],{"class":85},"19000",[47,154331,5023],{"class":221},[47,154333,154334],{"class":49,"line":1405},[47,154335,1659],{"class":221},[47,154337,154338],{"class":49,"line":1411},[47,154339,2493],{"emptyLinePlaceholder":145},[47,154341,154342,154345,154347],{"class":49,"line":1423},[47,154343,154344],{"class":221},"timeline ",[47,154346,267],{"class":217},[47,154348,154349],{"class":221}," Timeline()\n",[47,154351,154352],{"class":49,"line":1706},[47,154353,2493],{"emptyLinePlaceholder":145},[47,154355,154356,154358,154361,154363],{"class":49,"line":1711},[47,154357,3118],{"class":217},[47,154359,154360],{"class":221}," date, category_data ",[47,154362,26097],{"class":217},[47,154364,149202],{"class":221},[47,154366,154367,154370,154372],{"class":49,"line":1717},[47,154368,154369],{"class":221},"    bar ",[47,154371,267],{"class":217},[47,154373,154116],{"class":221},[47,154375,154376,154379,154381],{"class":49,"line":1722},[47,154377,154378],{"class":221},"    bar.add_xaxis(",[47,154380,154124],{"class":85},[47,154382,154383],{"class":221},"(category_data.keys()))\n",[47,154385,154386,154389,154391,154393,154395],{"class":49,"line":1736},[47,154387,154388],{"class":221},"    bar.add_yaxis(",[47,154390,147349],{"class":81},[47,154392,12528],{"class":221},[47,154394,154124],{"class":85},[47,154396,154397],{"class":221},"(category_data.values()))\n",[47,154399,154400,154403,154406,154408,154410,154412,154414,154416,154418,154420,154422,154424,154427],{"class":49,"line":1741},[47,154401,154402],{"class":221},"    bar.set_global_opts(",[47,154404,154405],{"class":5309},"title_opts",[47,154407,267],{"class":217},[47,154409,147532],{"class":221},[47,154411,51461],{"class":5309},[47,154413,267],{"class":217},[47,154415,273],{"class":217},[47,154417,470],{"class":81},[47,154419,1115],{"class":85},[47,154421,73980],{"class":221},[47,154423,1165],{"class":85},[47,154425,154426],{"class":81},"销售额\"",[47,154428,30551],{"class":221},[47,154430,154431],{"class":49,"line":1747},[47,154432,154433],{"class":221},"    timeline.add(bar, date)\n",[47,154435,154436],{"class":49,"line":1768},[47,154437,2493],{"emptyLinePlaceholder":145},[47,154439,154440,154443,154446],{"class":49,"line":1773},[47,154441,154442],{"class":221},"timeline.render(",[47,154444,154445],{"class":81},"\"timeline_sales.html\"",[47,154447,228],{"class":221},[14,154449,154451],{"id":154450},"_128-绘制地图","12.8 绘制地图",[19,154453,154454],{},"地图适合展示地区数据。",[38,154456,154458],{"className":30432,"code":154457,"language":30434,"meta":43,"style":43},"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",[26,154459,154460,154474,154485,154489,154497,154510,154522,154535,154548,154552,154556,154566,154581,154586,154603,154622,154626],{"__ignoreMap":43},[47,154461,154462,154464,154466,154468,154470,154472],{"class":49,"line":50},[47,154463,30791],{"class":217},[47,154465,147433],{"class":221},[47,154467,30446],{"class":217},[47,154469,147438],{"class":221},[47,154471,31437],{"class":217},[47,154473,147443],{"class":221},[47,154475,154476,154478,154480,154482],{"class":49,"line":92},[47,154477,30791],{"class":217},[47,154479,147292],{"class":221},[47,154481,30446],{"class":217},[47,154483,154484],{"class":221}," Map\n",[47,154486,154487],{"class":49,"line":1273},[47,154488,2493],{"emptyLinePlaceholder":145},[47,154490,154491,154493,154495],{"class":49,"line":1288},[47,154492,101712],{"class":221},[47,154494,267],{"class":217},[47,154496,55501],{"class":221},[47,154498,154499,154502,154504,154506,154508],{"class":49,"line":1294},[47,154500,154501],{"class":221},"    (",[47,154503,69323],{"class":81},[47,154505,12528],{"class":221},[47,154507,1036],{"class":85},[47,154509,38101],{"class":221},[47,154511,154512,154514,154516,154518,154520],{"class":49,"line":1308},[47,154513,154501],{"class":221},[47,154515,69343],{"class":81},[47,154517,12528],{"class":221},[47,154519,147366],{"class":85},[47,154521,38101],{"class":221},[47,154523,154524,154526,154529,154531,154533],{"class":49,"line":1314},[47,154525,154501],{"class":221},[47,154527,154528],{"class":81},"\"广东\"",[47,154530,12528],{"class":221},[47,154532,1816],{"class":85},[47,154534,38101],{"class":221},[47,154536,154537,154539,154542,154544,154546],{"class":49,"line":1405},[47,154538,154501],{"class":221},[47,154540,154541],{"class":81},"\"浙江\"",[47,154543,12528],{"class":221},[47,154545,147371],{"class":85},[47,154547,38101],{"class":221},[47,154549,154550],{"class":49,"line":1411},[47,154551,33300],{"class":221},[47,154553,154554],{"class":49,"line":1423},[47,154555,2493],{"emptyLinePlaceholder":145},[47,154557,154558,154561,154563],{"class":49,"line":1706},[47,154559,154560],{"class":221},"map_chart ",[47,154562,267],{"class":217},[47,154564,154565],{"class":221}," Map()\n",[47,154567,154568,154571,154573,154576,154579],{"class":49,"line":1711},[47,154569,154570],{"class":221},"map_chart.add(",[47,154572,147349],{"class":81},[47,154574,154575],{"class":221},", data, ",[47,154577,154578],{"class":81},"\"china\"",[47,154580,228],{"class":221},[47,154582,154583],{"class":49,"line":1717},[47,154584,154585],{"class":221},"map_chart.set_global_opts(\n",[47,154587,154588,154590,154592,154594,154596,154598,154601],{"class":49,"line":1722},[47,154589,147527],{"class":5309},[47,154591,267],{"class":217},[47,154593,147532],{"class":221},[47,154595,51461],{"class":5309},[47,154597,267],{"class":217},[47,154599,154600],{"class":81},"\"地区销售额\"",[47,154602,38101],{"class":221},[47,154604,154605,154608,154610,154613,154616,154618,154620],{"class":49,"line":1736},[47,154606,154607],{"class":5309},"    visualmap_opts",[47,154609,267],{"class":217},[47,154611,154612],{"class":221},"opts.VisualMapOpts(",[47,154614,154615],{"class":5309},"max_",[47,154617,267],{"class":217},[47,154619,1816],{"class":85},[47,154621,38101],{"class":221},[47,154623,154624],{"class":49,"line":1741},[47,154625,228],{"class":221},[47,154627,154628,154631,154634],{"class":49,"line":1747},[47,154629,154630],{"class":221},"map_chart.render(",[47,154632,154633],{"class":81},"\"map_sales.html\"",[47,154635,228],{"class":221},[19,154637,154638],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,154640,154642],{"id":154641},"_129-项目拆分建议","12.9 项目拆分建议",[19,154644,154645],{},"当代码超过一个文件时，可以这样组织：",[38,154647,154650],{"className":154648,"code":154649,"language":5280,"meta":43},[5278],"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",[26,154651,154649],{"__ignoreMap":43},[19,154653,154654],{},"职责：",[171,154656,154657,154663,154669,154675],{},[109,154658,154659,154662],{},[26,154660,154661],{},"main.py","：程序入口。",[109,154664,154665,154668],{},[26,154666,154667],{},"file_utils.py","：读写 JSON。",[109,154670,154671,154674],{},[26,154672,154673],{},"sales_service.py","：统计销售数据。",[109,154676,154677,154680],{},[26,154678,154679],{},"chart_builder.py","：生成图表。",[14,154682,154684],{"id":154683},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,154686,154687],{},"语法基础：",[171,154689,154690,154693,154696,154699],{},[109,154691,154692],{},"会写变量、注释、输入输出。",[109,154694,154695],{},"会使用 int、float、str、bool。",[109,154697,154698],{},"会做类型转换。",[109,154700,154701],{},"会使用 f-string 格式化输出。",[19,154703,154704],{},"流程控制：",[171,154706,154707,154713,154719,154727],{},[109,154708,154709,154710,28439],{},"会写 ",[26,154711,154712],{},"if elif else",[109,154714,154709,154715,101072,154717,28439],{},[26,154716,108717],{},[26,154718,3118],{},[109,154720,154721,154722,101072,154724,28439],{},"理解 ",[26,154723,2146],{},[26,154725,154726],{},"continue",[109,154728,154729],{},"能写嵌套循环。",[19,154731,154732],{},"函数：",[171,154734,154735,154738,154741,154744],{},[109,154736,154737],{},"会定义和调用函数。",[109,154739,154740],{},"理解参数和返回值。",[109,154742,154743],{},"知道局部变量和全局变量。",[109,154745,154746],{},"会使用默认参数、关键字参数、不定长参数。",[19,154748,154749],{},"容器：",[171,154751,154752,154755,154758,154761,154764],{},[109,154753,154754],{},"会使用列表增删改查。",[109,154756,154757],{},"会遍历列表、字典。",[109,154759,154760],{},"会使用切片。",[109,154762,154763],{},"会用集合去重。",[109,154765,154766],{},"会处理列表嵌套字典。",[19,154768,154769],{},"文件和模块：",[171,154771,154772,154775,154778,154781,154784],{},[109,154773,154774],{},"会读写文本文件。",[109,154776,154777],{},"会读写 JSON。",[109,154779,154780],{},"会捕获常见异常。",[109,154782,154783],{},"会导入模块和第三方包。",[109,154785,154786],{},"会创建简单包结构。",[19,154788,154789],{},"项目能力：",[171,154791,154792,154795,154798,154801,154804],{},[109,154793,154794],{},"能把代码拆成函数。",[109,154796,154797],{},"能把数据保存到文件。",[109,154799,154800],{},"能处理用户输入错误。",[109,154802,154803],{},"能写一个完整菜单程序。",[109,154805,154806],{},"能用 pyecharts 生成图表。",[14,154808,154810],{"id":154809},"_1211-推荐练习顺序","12.11 推荐练习顺序",[171,154812,154813,154816,154819,154822,154825,154828,154831,154834],{},[109,154814,154815],{},"猜数字游戏。",[109,154817,154818],{},"ATM 菜单程序。",[109,154820,154821],{},"学生成绩统计。",[109,154823,154824],{},"学生管理系统函数版。",[109,154826,154827],{},"学生管理系统文件持久化版。",[109,154829,154830],{},"学生管理系统面向对象版。",[109,154832,154833],{},"销售数据统计。",[109,154835,154836],{},"销售数据可视化。",[14,154838,154840],{"id":154839},"_1212-常见学习误区","12.12 常见学习误区",[171,154842,154843,154846,154849,154852,154855,154858,154861],{},[109,154844,154845],{},"只看视频不敲代码。",[109,154847,154848],{},"一报错就复制错误去搜，不先读报错位置。",[109,154850,154851],{},"变量名随便写，后续自己看不懂。",[109,154853,154854],{},"所有代码都写在一个文件一个函数里。",[109,154856,154857],{},"不保存练习代码，复习时没有材料。",[109,154859,154860],{},"还没掌握列表字典就急着学框架。",[109,154862,154863],{},"不会读官方文档，只依赖教程。",[14,154865,154867],{"id":154866},"_1213-如何读报错","12.13 如何读报错",[19,154869,154870],{},"报错通常从下往上看最后几行。",[19,154872,15228],{},[38,154874,154877],{"className":154875,"code":154876,"language":5280,"meta":43},[5278],"ValueError: invalid literal for int() with base 10: 'abc'\n",[26,154878,154876],{"__ignoreMap":43},[19,154880,104],{},[171,154882,154883,154889,154899],{},[109,154884,154885,154886,28439],{},"异常类型是 ",[26,154887,154888],{},"ValueError",[109,154890,107399,154891,154894,154895,154898],{},[26,154892,154893],{},"int()"," 无法把 ",[26,154896,154897],{},"'abc'"," 转成整数。",[109,154900,154901],{},"应该检查输入内容或增加异常处理。",[19,154903,154904],{},"再看文件名和行号：",[38,154906,154909],{"className":154907,"code":154908,"language":5280,"meta":43},[5278],"File \"main.py\", line 10, in \u003Cmodule>\n",[26,154910,154908],{"__ignoreMap":43},[19,154912,154913,154914,154916],{},"表示错误发生在 ",[26,154915,154661],{}," 第 10 行。",[14,154918,154920],{"id":154919},"_1214-后续学习方向","12.14 后续学习方向",[19,154922,154923],{},"Python 基础完成后，可以按兴趣选择方向：",[171,154925,154926,154938,154947,154959,154970,154979,154989],{},[109,154927,154928,154929,60,154932,60,154935,28439],{},"自动化办公：",[26,154930,154931],{},"openpyxl",[26,154933,154934],{},"python-docx",[26,154936,154937],{},"pdfplumber",[109,154939,154940,154941,60,154943,60,154945,28439],{},"数据分析：",[26,154942,100680],{},[26,154944,146239],{},[26,154946,146247],{},[109,154948,154949,154950,60,154953,60,154956,28439],{},"Web 后端：",[26,154951,154952],{},"Flask",[26,154954,154955],{},"FastAPI",[26,154957,154958],{},"Django",[109,154960,154961,154962,60,154964,60,154967,28439],{},"爬虫：",[26,154963,146224],{},[26,154965,154966],{},"BeautifulSoup",[26,154968,154969],{},"Scrapy",[109,154971,154972,154973,60,154975,154978],{},"测试开发：",[26,154974,146271],{},[26,154976,154977],{},"selenium","、接口测试。",[109,154980,154981,154982,60,154984,60,154986,28439],{},"人工智能：",[26,154983,100680],{},[26,154985,146239],{},[26,154987,154988],{},"pytorch",[109,154990,154991,154992,60,154994,60,154997,28439],{},"运维脚本：",[26,154993,145840],{},[26,154995,154996],{},"subprocess",[26,154998,154999],{},"paramiko",[19,155001,155002],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,155004,155006],{"id":155005},"_1215-结课练习","12.15 结课练习",[171,155008,155009,155012,155015,155018,155021,155024,155027,155030],{},[109,155010,155011],{},"完成函数版学生管理系统。",[109,155013,155014],{},"给学生管理系统增加 JSON 持久化。",[109,155016,155017],{},"给学生管理系统增加异常处理。",[109,155019,155020],{},"把学生管理系统改成面向对象版。",[109,155022,155023],{},"使用 pyecharts 绘制学生成绩柱状图。",[109,155025,155026],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[109,155028,155029],{},"按品类统计销售额并绘制柱状图。",[109,155031,155032],{},"写一份自己的 Python 学习路线图。",[134,155034,155035],{},"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":43,"searchDepth":92,"depth":92,"links":155037},[155038,155039,155042,155043,155044,155050,155051,155052,155053,155054,155055,155056,155057,155058,155059],{"id":151754,"depth":92,"text":151755},{"id":151804,"depth":92,"text":151805,"children":155040},[155041],{"id":151808,"depth":1273,"text":151809},{"id":151847,"depth":92,"text":151848},{"id":153321,"depth":92,"text":153322},{"id":153659,"depth":92,"text":153660,"children":155045},[155046,155047,155048,155049],{"id":153663,"depth":1273,"text":153664},{"id":153803,"depth":1273,"text":153804},{"id":153893,"depth":1273,"text":153894},{"id":153979,"depth":1273,"text":153980},{"id":154020,"depth":92,"text":154021},{"id":154213,"depth":92,"text":154214},{"id":154450,"depth":92,"text":154451},{"id":154641,"depth":92,"text":154642},{"id":154683,"depth":92,"text":154684},{"id":154809,"depth":92,"text":154810},{"id":154839,"depth":92,"text":154840},{"id":154866,"depth":92,"text":154867},{"id":154919,"depth":92,"text":154920},{"id":155005,"depth":92,"text":155006},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151746,"description":142},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155066,"title":155067,"body":155068,"description":142,"extension":143,"meta":157537,"navigation":145,"path":157538,"seo":157539,"stem":157540,"__hash__":157541},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155069,"toc":157512},[155070,155073,155077,155080,155083,155103,155106,155129,155132,155135,155157,155160,155182,155186,155189,155229,155232,155353,155357,155360,155400,155403,155427,155430,155434,155437,155451,155484,155487,155522,155525,155548,155551,155584,155587,155589,155595,155670,155673,155679,155696,155736,155740,155743,155789,155791,155829,155832,155867,155870,155905,155908,155940,155943,155962,155966,155970,156083,156085,156160,156164,156210,156213,156239,156248,156252,156255,156318,156326,156354,156358,156398,156463,156467,156470,156509,156512,156557,156560,156621,156625,156652,156655,156683,156686,156690,156694,156759,156762,156800,156803,156835,156839,156938,156942,156945,157018,157021,157069,157073,157079,157119,157122,157169,157172,157221,157225,157227,157241,157243,157424,157428,157455,157475,157482,157486,157503,157509],[10,155071,155067],{"id":155072},"_2-基础语法变量与字符串",[14,155074,155076],{"id":155075},"_21-注释","2.1 注释",[19,155078,155079],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,155081,155082],{},"单行注释：",[38,155084,155086],{"className":30432,"code":155085,"language":30434,"meta":43,"style":43},"# 这是单行注释\nprint(\"hello\")\n",[26,155087,155088,155093],{"__ignoreMap":43},[47,155089,155090],{"class":49,"line":50},[47,155091,155092],{"class":279},"# 这是单行注释\n",[47,155094,155095,155097,155099,155101],{"class":49,"line":92},[47,155096,30469],{"class":85},[47,155098,222],{"class":221},[47,155100,5937],{"class":81},[47,155102,228],{"class":221},[19,155104,155105],{},"多行说明常用三引号：",[38,155107,155109],{"className":30432,"code":155108,"language":30434,"meta":43,"style":43},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[26,155110,155111,155115,155120,155125],{"__ignoreMap":43},[47,155112,155113],{"class":49,"line":50},[47,155114,95752],{"class":81},[47,155116,155117],{"class":49,"line":92},[47,155118,155119],{"class":81},"这是多行说明。\n",[47,155121,155122],{"class":49,"line":1273},[47,155123,155124],{"class":81},"常用于文件顶部说明、函数说明等。\n",[47,155126,155127],{"class":49,"line":1288},[47,155128,95752],{"class":81},[19,155130,155131],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,155133,155134],{},"不好：",[38,155136,155138],{"className":30432,"code":155137,"language":30434,"meta":43,"style":43},"# age 加 1\nage = age + 1\n",[26,155139,155140,155145],{"__ignoreMap":43},[47,155141,155142],{"class":49,"line":50},[47,155143,155144],{"class":279},"# age 加 1\n",[47,155146,155147,155149,155151,155153,155155],{"class":49,"line":92},[47,155148,146600],{"class":221},[47,155150,267],{"class":217},[47,155152,15800],{"class":221},[47,155154,700],{"class":217},[47,155156,55753],{"class":85},[19,155158,155159],{},"较好：",[38,155161,155163],{"className":30432,"code":155162,"language":30434,"meta":43,"style":43},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[26,155164,155165,155170],{"__ignoreMap":43},[47,155166,155167],{"class":49,"line":50},[47,155168,155169],{"class":279},"# 用户过完生日后，年龄增加一岁\n",[47,155171,155172,155174,155176,155178,155180],{"class":49,"line":92},[47,155173,146600],{"class":221},[47,155175,267],{"class":217},[47,155177,15800],{"class":221},[47,155179,700],{"class":217},[47,155181,55753],{"class":85},[14,155183,155185],{"id":155184},"_22-字面量","2.2 字面量",[19,155187,155188],{},"字面量就是代码中直接写出来的数据。",[38,155190,155192],{"className":30432,"code":155191,"language":30434,"meta":43,"style":43},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[26,155193,155194,155201,155208,155215,155222],{"__ignoreMap":43},[47,155195,155196,155198],{"class":49,"line":50},[47,155197,530],{"class":85},[47,155199,155200],{"class":279},"          # 整数\n",[47,155202,155203,155205],{"class":49,"line":92},[47,155204,270],{"class":85},[47,155206,155207],{"class":279},"         # 小数\n",[47,155209,155210,155212],{"class":49,"line":1273},[47,155211,5937],{"class":81},[47,155213,155214],{"class":279},"      # 字符串\n",[47,155216,155217,155219],{"class":49,"line":1288},[47,155218,31530],{"class":85},[47,155220,155221],{"class":279},"         # 布尔值\n",[47,155223,155224,155226],{"class":49,"line":1294},[47,155225,95740],{"class":85},[47,155227,155228],{"class":279},"         # 空值\n",[19,155230,155231],{},"常见字面量类型：",[357,155233,155234,155244],{},[360,155235,155236],{},[363,155237,155238,155240,155242],{},[366,155239,23830],{},[366,155241,27546],{},[366,155243,25923],{},[404,155245,155246,155257,155268,155279,155291,155303,155315,155328,155340],{},[363,155247,155248,155250,155254],{},[409,155249,225],{},[409,155251,155252],{},[26,155253,530],{},[409,155255,155256],{},"整数",[363,155258,155259,155261,155265],{},[409,155260,261],{},[409,155262,155263],{},[26,155264,270],{},[409,155266,155267],{},"浮点数",[363,155269,155270,155272,155276],{},[409,155271,1393],{},[409,155273,155274],{},[26,155275,5937],{},[409,155277,155278],{},"字符串",[363,155280,155281,155283,155289],{},[409,155282,1448],{},[409,155284,155285,60,155287],{},[26,155286,31530],{},[26,155288,34041],{},[409,155290,66069],{},[363,155292,155293,155296,155300],{},[409,155294,155295],{},"NoneType",[409,155297,155298],{},[26,155299,95740],{},[409,155301,155302],{},"空值",[363,155304,155305,155307,155312],{},[409,155306,154124],{},[409,155308,155309],{},[26,155310,155311],{},"[1, 2, 3]",[409,155313,155314],{},"列表",[363,155316,155317,155320,155325],{},[409,155318,155319],{},"tuple",[409,155321,155322],{},[26,155323,155324],{},"(1, 2, 3)",[409,155326,155327],{},"元组",[363,155329,155330,155332,155337],{},[409,155331,114600],{},[409,155333,155334],{},[26,155335,155336],{},"{\"name\": \"张三\"}",[409,155338,155339],{},"字典",[363,155341,155342,155345,155350],{},[409,155343,155344],{},"set",[409,155346,155347],{},[26,155348,155349],{},"{1, 2, 3}",[409,155351,155352],{},"集合",[14,155354,155356],{"id":155355},"_23-变量","2.3 变量",[19,155358,155359],{},"变量是保存数据的名字。",[38,155361,155363],{"className":30432,"code":155362,"language":30434,"meta":43,"style":43},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[26,155364,155365,155373,155381,155391],{"__ignoreMap":43},[47,155366,155367,155369,155371],{"class":49,"line":50},[47,155368,146590],{"class":221},[47,155370,267],{"class":217},[47,155372,149407],{"class":81},[47,155374,155375,155377,155379],{"class":49,"line":92},[47,155376,146600],{"class":221},[47,155378,267],{"class":217},[47,155380,146605],{"class":85},[47,155382,155383,155386,155388],{"class":49,"line":1273},[47,155384,155385],{"class":221},"height ",[47,155387,267],{"class":217},[47,155389,155390],{"class":85}," 1.75\n",[47,155392,155393,155396,155398],{"class":49,"line":1288},[47,155394,155395],{"class":221},"is_student ",[47,155397,267],{"class":217},[47,155399,153653],{"class":85},[19,155401,155402],{},"Python 的变量不需要提前声明类型：",[38,155404,155406],{"className":30432,"code":155405,"language":30434,"meta":43,"style":43},"score = 100\nscore = \"满分\"\n",[26,155407,155408,155418],{"__ignoreMap":43},[47,155409,155410,155413,155415],{"class":49,"line":50},[47,155411,155412],{"class":221},"score ",[47,155414,267],{"class":217},[47,155416,155417],{"class":85}," 100\n",[47,155419,155420,155422,155424],{"class":49,"line":92},[47,155421,155412],{"class":221},[47,155423,267],{"class":217},[47,155425,155426],{"class":81}," \"满分\"\n",[19,155428,155429],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,155431,155433],{"id":155432},"_24-变量命名规则","2.4 变量命名规则",[19,155435,155436],{},"硬性规则：",[171,155438,155439,155442,155445,155448],{},[109,155440,155441],{},"只能由字母、数字、下划线组成。",[109,155443,155444],{},"不能以数字开头。",[109,155446,155447],{},"不能使用 Python 关键字。",[109,155449,155450],{},"区分大小写。",[38,155452,155454],{"className":30432,"code":155453,"language":30434,"meta":43,"style":43},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[26,155455,155456,155465,155474],{"__ignoreMap":43},[47,155457,155458,155461,155463],{"class":49,"line":50},[47,155459,155460],{"class":221},"user_name ",[47,155462,267],{"class":217},[47,155464,146595],{"class":81},[47,155466,155467,155470,155472],{"class":49,"line":92},[47,155468,155469],{"class":221},"age2 ",[47,155471,267],{"class":217},[47,155473,146605],{"class":85},[47,155475,155476,155479,155481],{"class":49,"line":1273},[47,155477,155478],{"class":221},"_token ",[47,155480,267],{"class":217},[47,155482,155483],{"class":81}," \"abc\"\n",[19,155485,155486],{},"错误写法：",[38,155488,155490],{"className":30432,"code":155489,"language":30434,"meta":43,"style":43},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[26,155491,155492,155501,155513],{"__ignoreMap":43},[47,155493,155494,155497,155499],{"class":49,"line":50},[47,155495,155496],{"class":77457},"2age",[47,155498,13657],{"class":217},[47,155500,146605],{"class":85},[47,155502,155503,155505,155507,155509,155511],{"class":49,"line":92},[47,155504,131638],{"class":221},[47,155506,751],{"class":217},[47,155508,146590],{"class":221},[47,155510,267],{"class":217},[47,155512,146595],{"class":81},[47,155514,155515,155517,155519],{"class":49,"line":1273},[47,155516,14787],{"class":217},[47,155518,13657],{"class":217},[47,155520,155521],{"class":81}," \"一班\"\n",[19,155523,155524],{},"查看关键字：",[38,155526,155528],{"className":30432,"code":155527,"language":30434,"meta":43,"style":43},"import keyword\n\nprint(keyword.kwlist)\n",[26,155529,155530,155537,155541],{"__ignoreMap":43},[47,155531,155532,155534],{"class":49,"line":50},[47,155533,30446],{"class":217},[47,155535,155536],{"class":221}," keyword\n",[47,155538,155539],{"class":49,"line":92},[47,155540,2493],{"emptyLinePlaceholder":145},[47,155542,155543,155545],{"class":49,"line":1273},[47,155544,30469],{"class":85},[47,155546,155547],{"class":221},"(keyword.kwlist)\n",[19,155549,155550],{},"推荐命名风格：",[38,155552,155554],{"className":30432,"code":155553,"language":30434,"meta":43,"style":43},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[26,155555,155556,155565,155575],{"__ignoreMap":43},[47,155557,155558,155561,155563],{"class":49,"line":50},[47,155559,155560],{"class":221},"student_name ",[47,155562,267],{"class":217},[47,155564,149407],{"class":81},[47,155566,155567,155570,155572],{"class":49,"line":92},[47,155568,155569],{"class":221},"total_price ",[47,155571,267],{"class":217},[47,155573,155574],{"class":85}," 99.8\n",[47,155576,155577,155580,155582],{"class":49,"line":1273},[47,155578,155579],{"class":221},"is_finished ",[47,155581,267],{"class":217},[47,155583,125861],{"class":85},[19,155585,155586],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,155588,50786],{"id":50785},[19,155590,104420,155591,155594],{},[26,155592,155593],{},"type()"," 查看数据类型：",[38,155596,155598],{"className":30432,"code":155597,"language":30434,"meta":43,"style":43},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[26,155599,155600,155614,155628,155642,155656],{"__ignoreMap":43},[47,155601,155602,155604,155606,155608,155610,155612],{"class":49,"line":50},[47,155603,30469],{"class":85},[47,155605,222],{"class":221},[47,155607,103161],{"class":85},[47,155609,222],{"class":221},[47,155611,530],{"class":85},[47,155613,30551],{"class":221},[47,155615,155616,155618,155620,155622,155624,155626],{"class":49,"line":92},[47,155617,30469],{"class":85},[47,155619,222],{"class":221},[47,155621,103161],{"class":85},[47,155623,222],{"class":221},[47,155625,270],{"class":85},[47,155627,30551],{"class":221},[47,155629,155630,155632,155634,155636,155638,155640],{"class":49,"line":1273},[47,155631,30469],{"class":85},[47,155633,222],{"class":221},[47,155635,103161],{"class":85},[47,155637,222],{"class":221},[47,155639,5937],{"class":81},[47,155641,30551],{"class":221},[47,155643,155644,155646,155648,155650,155652,155654],{"class":49,"line":1288},[47,155645,30469],{"class":85},[47,155647,222],{"class":221},[47,155649,103161],{"class":85},[47,155651,222],{"class":221},[47,155653,31530],{"class":85},[47,155655,30551],{"class":221},[47,155657,155658,155660,155662,155664,155666,155668],{"class":49,"line":1294},[47,155659,30469],{"class":85},[47,155661,222],{"class":221},[47,155663,103161],{"class":85},[47,155665,222],{"class":221},[47,155667,95740],{"class":85},[47,155669,30551],{"class":221},[19,155671,155672],{},"输出类似：",[38,155674,155677],{"className":155675,"code":155676,"language":5280,"meta":43},[5278],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[26,155678,155676],{"__ignoreMap":43},[19,155680,9118,155681,107337,155683,155685,155686,155688,155689,21593,155691,155688,155693,155695],{},[26,155682,1448],{},[26,155684,225],{}," 的子类，",[26,155687,31530],{}," 可以当作 ",[26,155690,436],{},[26,155692,34041],{},[26,155694,411],{},"，但业务代码中不要滥用。",[38,155697,155699],{"className":30432,"code":155698,"language":30434,"meta":43,"style":43},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[26,155700,155701,155719],{"__ignoreMap":43},[47,155702,155703,155705,155707,155709,155711,155713,155716],{"class":49,"line":50},[47,155704,30469],{"class":85},[47,155706,222],{"class":221},[47,155708,31530],{"class":85},[47,155710,45620],{"class":217},[47,155712,25172],{"class":85},[47,155714,155715],{"class":221},")   ",[47,155717,155718],{"class":279},"# 2\n",[47,155720,155721,155723,155725,155727,155729,155731,155733],{"class":49,"line":92},[47,155722,30469],{"class":85},[47,155724,222],{"class":221},[47,155726,34041],{"class":85},[47,155728,45620],{"class":217},[47,155730,25172],{"class":85},[47,155732,45862],{"class":221},[47,155734,155735],{"class":279},"# 1\n",[14,155737,155739],{"id":155738},"_26-类型转换","2.6 类型转换",[19,155741,155742],{},"常用转换函数：",[38,155744,155746],{"className":30432,"code":155745,"language":30434,"meta":43,"style":43},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[26,155747,155748,155758,155769,155779],{"__ignoreMap":43},[47,155749,155750,155752,155754,155756],{"class":49,"line":50},[47,155751,225],{"class":85},[47,155753,222],{"class":221},[47,155755,54370],{"class":81},[47,155757,228],{"class":221},[47,155759,155760,155762,155764,155767],{"class":49,"line":92},[47,155761,261],{"class":85},[47,155763,222],{"class":221},[47,155765,155766],{"class":81},"\"3.14\"",[47,155768,228],{"class":221},[47,155770,155771,155773,155775,155777],{"class":49,"line":1273},[47,155772,1393],{"class":85},[47,155774,222],{"class":221},[47,155776,530],{"class":85},[47,155778,228],{"class":221},[47,155780,155781,155783,155785,155787],{"class":49,"line":1288},[47,155782,1448],{"class":85},[47,155784,222],{"class":221},[47,155786,436],{"class":85},[47,155788,228],{"class":221},[19,155790,15228],{},[38,155792,155794],{"className":30432,"code":155793,"language":30434,"meta":43,"style":43},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[26,155795,155796,155805,155816],{"__ignoreMap":43},[47,155797,155798,155800,155802],{"class":49,"line":50},[47,155799,146600],{"class":221},[47,155801,267],{"class":217},[47,155803,155804],{"class":81}," \"18\"\n",[47,155806,155807,155809,155811,155813],{"class":49,"line":92},[47,155808,146600],{"class":221},[47,155810,267],{"class":217},[47,155812,2475],{"class":85},[47,155814,155815],{"class":221},"(age)\n",[47,155817,155818,155820,155823,155825,155827],{"class":49,"line":1273},[47,155819,30469],{"class":85},[47,155821,155822],{"class":221},"(age ",[47,155824,700],{"class":217},[47,155826,25172],{"class":85},[47,155828,228],{"class":221},[19,155830,155831],{},"输入得到的内容永远是字符串：",[38,155833,155835],{"className":30432,"code":155834,"language":30434,"meta":43,"style":43},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[26,155836,155837,155853],{"__ignoreMap":43},[47,155838,155839,155842,155844,155846,155848,155851],{"class":49,"line":50},[47,155840,155841],{"class":221},"num ",[47,155843,267],{"class":217},[47,155845,60659],{"class":85},[47,155847,222],{"class":221},[47,155849,155850],{"class":81},"\"请输入数字:\"",[47,155852,228],{"class":221},[47,155854,155855,155857,155859,155861,155864],{"class":49,"line":92},[47,155856,30469],{"class":85},[47,155858,222],{"class":221},[47,155860,103161],{"class":85},[47,155862,155863],{"class":221},"(num))  ",[47,155865,155866],{"class":279},"# str\n",[19,155868,155869],{},"如果要做数学运算，必须转换：",[38,155871,155873],{"className":30432,"code":155872,"language":30434,"meta":43,"style":43},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[26,155874,155875,155893],{"__ignoreMap":43},[47,155876,155877,155879,155881,155883,155885,155887,155889,155891],{"class":49,"line":50},[47,155878,155841],{"class":221},[47,155880,267],{"class":217},[47,155882,2475],{"class":85},[47,155884,222],{"class":221},[47,155886,53875],{"class":85},[47,155888,222],{"class":221},[47,155890,155850],{"class":81},[47,155892,30551],{"class":221},[47,155894,155895,155897,155899,155901,155903],{"class":49,"line":92},[47,155896,30469],{"class":85},[47,155898,45673],{"class":221},[47,155900,700],{"class":217},[47,155902,2131],{"class":85},[47,155904,228],{"class":221},[19,155906,155907],{},"常见错误：",[38,155909,155911],{"className":30432,"code":155910,"language":30434,"meta":43,"style":43},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[26,155912,155913,155926],{"__ignoreMap":43},[47,155914,155915,155917,155919,155921,155923],{"class":49,"line":50},[47,155916,225],{"class":85},[47,155918,222],{"class":221},[47,155920,155766],{"class":81},[47,155922,155715],{"class":221},[47,155924,155925],{"class":279},"# 错误\n",[47,155927,155928,155930,155932,155935,155938],{"class":49,"line":92},[47,155929,225],{"class":85},[47,155931,222],{"class":221},[47,155933,155934],{"class":81},"\"abc\"",[47,155936,155937],{"class":221},")    ",[47,155939,155925],{"class":279},[19,155941,155942],{},"正确写法：",[38,155944,155946],{"className":30432,"code":155945,"language":30434,"meta":43,"style":43},"num = float(\"3.14\")\n",[26,155947,155948],{"__ignoreMap":43},[47,155949,155950,155952,155954,155956,155958,155960],{"class":49,"line":50},[47,155951,155841],{"class":221},[47,155953,267],{"class":217},[47,155955,109851],{"class":85},[47,155957,222],{"class":221},[47,155959,155766],{"class":81},[47,155961,228],{"class":221},[14,155963,155965],{"id":155964},"_27-运算符","2.7 运算符",[187,155967,155969],{"id":155968},"_271-算术运算符","2.7.1 算术运算符",[357,155971,155972,155983],{},[360,155973,155974],{},[363,155975,155976,155979,155981],{},[366,155977,155978],{},"运算符",[366,155980,25923],{},[366,155982,27546],{},[404,155984,155985,155999,156013,156027,156041,156055,156069],{},[363,155986,155987,155991,155994],{},[409,155988,155989],{},[26,155990,700],{},[409,155992,155993],{},"加法",[409,155995,155996],{},[26,155997,155998],{},"1 + 2",[363,156000,156001,156005,156008],{},[409,156002,156003],{},[26,156004,751],{},[409,156006,156007],{},"减法",[409,156009,156010],{},[26,156011,156012],{},"5 - 3",[363,156014,156015,156019,156022],{},[409,156016,156017],{},[26,156018,674],{},[409,156020,156021],{},"乘法",[409,156023,156024],{},[26,156025,156026],{},"2 * 3",[363,156028,156029,156033,156036],{},[409,156030,156031],{},[26,156032,803],{},[409,156034,156035],{},"除法，结果是浮点数",[409,156037,156038],{},[26,156039,156040],{},"5 \u002F 2",[363,156042,156043,156047,156050],{},[409,156044,156045],{},[26,156046,33383],{},[409,156048,156049],{},"整除",[409,156051,156052],{},[26,156053,156054],{},"5 \u002F\u002F 2",[363,156056,156057,156061,156064],{},[409,156058,156059],{},[26,156060,547],{},[409,156062,156063],{},"取余",[409,156065,156066],{},[26,156067,156068],{},"5 % 2",[363,156070,156071,156075,156078],{},[409,156072,156073],{},[26,156074,10754],{},[409,156076,156077],{},"幂运算",[409,156079,156080],{},[26,156081,156082],{},"2 ** 3",[19,156084,15228],{},[38,156086,156088],{"className":30432,"code":156087,"language":30434,"meta":43,"style":43},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[26,156089,156090,156108,156125,156142],{"__ignoreMap":43},[47,156091,156092,156094,156096,156098,156101,156103,156105],{"class":49,"line":50},[47,156093,30469],{"class":85},[47,156095,222],{"class":221},[47,156097,538],{"class":85},[47,156099,156100],{"class":217}," \u002F",[47,156102,14848],{"class":85},[47,156104,155715],{"class":221},[47,156106,156107],{"class":279},"# 2.5\n",[47,156109,156110,156112,156114,156116,156119,156121,156123],{"class":49,"line":92},[47,156111,30469],{"class":85},[47,156113,222],{"class":221},[47,156115,538],{"class":85},[47,156117,156118],{"class":217}," \u002F\u002F",[47,156120,14848],{"class":85},[47,156122,45862],{"class":221},[47,156124,155718],{"class":279},[47,156126,156127,156129,156131,156133,156136,156138,156140],{"class":49,"line":1273},[47,156128,30469],{"class":85},[47,156130,222],{"class":221},[47,156132,538],{"class":85},[47,156134,156135],{"class":217}," %",[47,156137,14848],{"class":85},[47,156139,155715],{"class":221},[47,156141,155735],{"class":279},[47,156143,156144,156146,156148,156150,156153,156155,156157],{"class":49,"line":1288},[47,156145,30469],{"class":85},[47,156147,222],{"class":221},[47,156149,298],{"class":85},[47,156151,156152],{"class":217}," **",[47,156154,78124],{"class":85},[47,156156,45862],{"class":221},[47,156158,156159],{"class":279},"# 8\n",[187,156161,156163],{"id":156162},"_272-赋值运算符","2.7.2 赋值运算符",[38,156165,156167],{"className":30432,"code":156166,"language":30434,"meta":43,"style":43},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[26,156168,156169,156177,156185,156193,156201],{"__ignoreMap":43},[47,156170,156171,156173,156175],{"class":49,"line":50},[47,156172,155841],{"class":221},[47,156174,267],{"class":217},[47,156176,58482],{"class":85},[47,156178,156179,156181,156183],{"class":49,"line":92},[47,156180,155841],{"class":221},[47,156182,9570],{"class":217},[47,156184,54481],{"class":85},[47,156186,156187,156189,156191],{"class":49,"line":1273},[47,156188,155841],{"class":221},[47,156190,150306],{"class":217},[47,156192,47777],{"class":85},[47,156194,156195,156197,156199],{"class":49,"line":1288},[47,156196,155841],{"class":221},[47,156198,137202],{"class":217},[47,156200,120090],{"class":85},[47,156202,156203,156205,156208],{"class":49,"line":1294},[47,156204,155841],{"class":221},[47,156206,156207],{"class":217},"\u002F=",[47,156209,47777],{"class":85},[19,156211,156212],{},"等价关系：",[38,156214,156216],{"className":30432,"code":156215,"language":30434,"meta":43,"style":43},"num += 1\nnum = num + 1\n",[26,156217,156218,156226],{"__ignoreMap":43},[47,156219,156220,156222,156224],{"class":49,"line":50},[47,156221,155841],{"class":221},[47,156223,9570],{"class":217},[47,156225,55753],{"class":85},[47,156227,156228,156230,156232,156235,156237],{"class":49,"line":92},[47,156229,155841],{"class":221},[47,156231,267],{"class":217},[47,156233,156234],{"class":221}," num ",[47,156236,700],{"class":217},[47,156238,55753],{"class":85},[19,156240,156241,156242,101072,156245,28439],{},"Python 没有 ",[26,156243,156244],{},"num++",[26,156246,156247],{},"num--",[187,156249,156251],{"id":156250},"_273-比较运算符","2.7.3 比较运算符",[19,156253,156254],{},"比较运算结果是布尔值。",[38,156256,156258],{"className":30432,"code":156257,"language":30434,"meta":43,"style":43},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[26,156259,156260,156274,156289,156303],{"__ignoreMap":43},[47,156261,156262,156264,156266,156268,156270,156272],{"class":49,"line":50},[47,156263,30469],{"class":85},[47,156265,222],{"class":221},[47,156267,665],{"class":85},[47,156269,26276],{"class":217},[47,156271,2241],{"class":85},[47,156273,228],{"class":221},[47,156275,156276,156278,156280,156282,156285,156287],{"class":49,"line":92},[47,156277,30469],{"class":85},[47,156279,222],{"class":221},[47,156281,665],{"class":85},[47,156283,156284],{"class":217}," >=",[47,156286,2131],{"class":85},[47,156288,228],{"class":221},[47,156290,156291,156293,156295,156297,156299,156301],{"class":49,"line":1273},[47,156292,30469],{"class":85},[47,156294,222],{"class":221},[47,156296,665],{"class":85},[47,156298,101613],{"class":217},[47,156300,2176],{"class":85},[47,156302,228],{"class":221},[47,156304,156305,156307,156309,156311,156314,156316],{"class":49,"line":1288},[47,156306,30469],{"class":85},[47,156308,222],{"class":221},[47,156310,665],{"class":85},[47,156312,156313],{"class":217}," !=",[47,156315,2176],{"class":85},[47,156317,228],{"class":221},[19,156319,156320,156321,156323,156324,28439],{},"注意：判断相等用 ",[26,156322,3042],{},"，赋值用 ",[26,156325,267],{},[38,156327,156329],{"className":30432,"code":156328,"language":30434,"meta":43,"style":43},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[26,156330,156331,156343],{"__ignoreMap":43},[47,156332,156333,156335,156337,156340],{"class":49,"line":50},[47,156334,146600],{"class":221},[47,156336,267],{"class":217},[47,156338,156339],{"class":85}," 18",[47,156341,156342],{"class":279},"       # 赋值\n",[47,156344,156345,156347,156349,156351],{"class":49,"line":92},[47,156346,146600],{"class":221},[47,156348,3042],{"class":217},[47,156350,156339],{"class":85},[47,156352,156353],{"class":279},"      # 判断是否相等\n",[187,156355,156357],{"id":156356},"_274-逻辑运算符","2.7.4 逻辑运算符",[357,156359,156360,156368],{},[360,156361,156362],{},[363,156363,156364,156366],{},[366,156365,155978],{},[366,156367,25923],{},[404,156369,156370,156379,156388],{},[363,156371,156372,156376],{},[409,156373,156374],{},[26,156375,30516],{},[409,156377,156378],{},"并且",[363,156380,156381,156385],{},[409,156382,156383],{},[26,156384,115144],{},[409,156386,156387],{},"或者",[363,156389,156390,156395],{},[409,156391,156392],{},[26,156393,156394],{},"not",[409,156396,156397],{},"取反",[38,156399,156401],{"className":30432,"code":156400,"language":30434,"meta":43,"style":43},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[26,156402,156403,156411,156420,156424,156439,156453],{"__ignoreMap":43},[47,156404,156405,156407,156409],{"class":49,"line":50},[47,156406,146600],{"class":221},[47,156408,267],{"class":217},[47,156410,88119],{"class":85},[47,156412,156413,156416,156418],{"class":49,"line":92},[47,156414,156415],{"class":221},"has_ticket ",[47,156417,267],{"class":217},[47,156419,153653],{"class":85},[47,156421,156422],{"class":49,"line":1273},[47,156423,2493],{"emptyLinePlaceholder":145},[47,156425,156426,156428,156430,156432,156434,156436],{"class":49,"line":1288},[47,156427,30469],{"class":85},[47,156429,155822],{"class":221},[47,156431,1804],{"class":217},[47,156433,156339],{"class":85},[47,156435,120483],{"class":217},[47,156437,156438],{"class":221}," has_ticket)\n",[47,156440,156441,156443,156445,156447,156449,156451],{"class":49,"line":1294},[47,156442,30469],{"class":85},[47,156444,155822],{"class":221},[47,156446,1129],{"class":217},[47,156448,156339],{"class":85},[47,156450,114255],{"class":217},[47,156452,156438],{"class":221},[47,156454,156455,156457,156459,156461],{"class":49,"line":1308},[47,156456,30469],{"class":85},[47,156458,222],{"class":221},[47,156460,156394],{"class":217},[47,156462,156438],{"class":221},[14,156464,156466],{"id":156465},"_28-字符串定义","2.8 字符串定义",[19,156468,156469],{},"三种常见写法：",[38,156471,156473],{"className":30432,"code":156472,"language":30434,"meta":43,"style":43},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[26,156474,156475,156485,156494,156504],{"__ignoreMap":43},[47,156476,156477,156480,156482],{"class":49,"line":50},[47,156478,156479],{"class":221},"name1 ",[47,156481,267],{"class":217},[47,156483,156484],{"class":81}," '小明'\n",[47,156486,156487,156490,156492],{"class":49,"line":92},[47,156488,156489],{"class":221},"name2 ",[47,156491,267],{"class":217},[47,156493,149407],{"class":81},[47,156495,156496,156499,156501],{"class":49,"line":1273},[47,156497,156498],{"class":221},"text ",[47,156500,267],{"class":217},[47,156502,156503],{"class":81}," \"\"\"这是多行字符串\n",[47,156505,156506],{"class":49,"line":1288},[47,156507,156508],{"class":81},"可以换行\"\"\"\n",[19,156510,156511],{},"字符串中包含引号：",[38,156513,156515],{"className":30432,"code":156514,"language":30434,"meta":43,"style":43},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[26,156516,156517,156527,156537],{"__ignoreMap":43},[47,156518,156519,156522,156524],{"class":49,"line":50},[47,156520,156521],{"class":221},"msg ",[47,156523,267],{"class":217},[47,156525,156526],{"class":81}," \"他说:'你好'\"\n",[47,156528,156529,156532,156534],{"class":49,"line":92},[47,156530,156531],{"class":221},"msg2 ",[47,156533,267],{"class":217},[47,156535,156536],{"class":81}," '他说:\"你好\"'\n",[47,156538,156539,156542,156544,156547,156550,156553,156555],{"class":49,"line":1273},[47,156540,156541],{"class":221},"msg3 ",[47,156543,267],{"class":217},[47,156545,156546],{"class":81}," \"他说:",[47,156548,156549],{"class":85},"\\\"",[47,156551,156552],{"class":81},"你好",[47,156554,156549],{"class":85},[47,156556,25187],{"class":81},[19,156558,156559],{},"常见转义字符：",[357,156561,156562,156571],{},[360,156563,156564],{},[363,156565,156566,156569],{},[366,156567,156568],{},"写法",[366,156570,100754],{},[404,156572,156573,156583,156592,156602,156611],{},[363,156574,156575,156580],{},[409,156576,156577],{},[26,156578,156579],{},"\\n",[409,156581,156582],{},"换行",[363,156584,156585,156589],{},[409,156586,156587],{},[26,156588,1324],{},[409,156590,156591],{},"制表符",[363,156593,156594,156599],{},[409,156595,156596],{},[26,156597,156598],{},"\\\\",[409,156600,156601],{},"反斜杠",[363,156603,156604,156608],{},[409,156605,156606],{},[26,156607,156549],{},[409,156609,156610],{},"双引号",[363,156612,156613,156618],{},[409,156614,156615],{},[26,156616,156617],{},"\\'",[409,156619,156620],{},"单引号",[14,156622,156624],{"id":156623},"_29-字符串拼接","2.9 字符串拼接",[38,156626,156628],{"className":30432,"code":156627,"language":30434,"meta":43,"style":43},"name = \"小明\"\nprint(\"你好，\" + name)\n",[26,156629,156630,156638],{"__ignoreMap":43},[47,156631,156632,156634,156636],{"class":49,"line":50},[47,156633,146590],{"class":221},[47,156635,267],{"class":217},[47,156637,149407],{"class":81},[47,156639,156640,156642,156644,156647,156649],{"class":49,"line":92},[47,156641,30469],{"class":85},[47,156643,222],{"class":221},[47,156645,156646],{"class":81},"\"你好，\"",[47,156648,45620],{"class":217},[47,156650,156651],{"class":221}," name)\n",[19,156653,156654],{},"字符串只能和字符串拼接：",[38,156656,156658],{"className":30432,"code":156657,"language":30434,"meta":43,"style":43},"age = 18\nprint(\"年龄:\" + str(age))\n",[26,156659,156660,156668],{"__ignoreMap":43},[47,156661,156662,156664,156666],{"class":49,"line":50},[47,156663,146600],{"class":221},[47,156665,267],{"class":217},[47,156667,146605],{"class":85},[47,156669,156670,156672,156674,156676,156678,156680],{"class":49,"line":92},[47,156671,30469],{"class":85},[47,156673,222],{"class":221},[47,156675,146571],{"class":81},[47,156677,45620],{"class":217},[47,156679,73973],{"class":85},[47,156681,156682],{"class":221},"(age))\n",[19,156684,156685],{},"更推荐使用格式化字符串。",[14,156687,156689],{"id":156688},"_210-字符串格式化","2.10 字符串格式化",[187,156691,156693],{"id":156692},"_2101-百分号格式化","2.10.1 百分号格式化",[38,156695,156697],{"className":30432,"code":156696,"language":30434,"meta":43,"style":43},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[26,156698,156699,156707,156715,156724,156728],{"__ignoreMap":43},[47,156700,156701,156703,156705],{"class":49,"line":50},[47,156702,146590],{"class":221},[47,156704,267],{"class":217},[47,156706,149407],{"class":81},[47,156708,156709,156711,156713],{"class":49,"line":92},[47,156710,146600],{"class":221},[47,156712,267],{"class":217},[47,156714,146605],{"class":85},[47,156716,156717,156719,156721],{"class":49,"line":1273},[47,156718,155412],{"class":221},[47,156720,267],{"class":217},[47,156722,156723],{"class":85}," 95.5\n",[47,156725,156726],{"class":49,"line":1288},[47,156727,2493],{"emptyLinePlaceholder":145},[47,156729,156730,156732,156734,156737,156740,156743,156746,156749,156752,156754,156756],{"class":49,"line":1294},[47,156731,30469],{"class":85},[47,156733,222],{"class":221},[47,156735,156736],{"class":81},"\"姓名:",[47,156738,156739],{"class":85},"%s",[47,156741,156742],{"class":81}," 年龄:",[47,156744,156745],{"class":85},"%d",[47,156747,156748],{"class":81}," 分数:",[47,156750,156751],{"class":85},"%.1f",[47,156753,470],{"class":81},[47,156755,156135],{"class":217},[47,156757,156758],{"class":221}," (name, age, score))\n",[19,156760,156761],{},"常用占位符：",[357,156763,156764,156773],{},[360,156765,156766],{},[363,156767,156768,156771],{},[366,156769,156770],{},"占位符",[366,156772,25923],{},[404,156774,156775,156783,156791],{},[363,156776,156777,156781],{},[409,156778,156779],{},[26,156780,156739],{},[409,156782,155278],{},[363,156784,156785,156789],{},[409,156786,156787],{},[26,156788,156745],{},[409,156790,155256],{},[363,156792,156793,156798],{},[409,156794,156795],{},[26,156796,156797],{},"%f",[409,156799,155267],{},[19,156801,156802],{},"精度控制：",[38,156804,156806],{"className":30432,"code":156805,"language":30434,"meta":43,"style":43},"price = 12.3456\nprint(\"%.2f\" % price)\n",[26,156807,156808,156817],{"__ignoreMap":43},[47,156809,156810,156812,156814],{"class":49,"line":50},[47,156811,146735],{"class":221},[47,156813,267],{"class":217},[47,156815,156816],{"class":85}," 12.3456\n",[47,156818,156819,156821,156823,156825,156828,156830,156832],{"class":49,"line":92},[47,156820,30469],{"class":85},[47,156822,222],{"class":221},[47,156824,470],{"class":81},[47,156826,156827],{"class":85},"%.2f",[47,156829,470],{"class":81},[47,156831,156135],{"class":217},[47,156833,156834],{"class":221}," price)\n",[187,156836,156838],{"id":156837},"_2102-format方法","2.10.2 format方法",[38,156840,156842],{"className":30432,"code":156841,"language":30434,"meta":43,"style":43},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[26,156843,156844,156852,156860,156864,156883,156903],{"__ignoreMap":43},[47,156845,156846,156848,156850],{"class":49,"line":50},[47,156847,146590],{"class":221},[47,156849,267],{"class":217},[47,156851,149407],{"class":81},[47,156853,156854,156856,156858],{"class":49,"line":92},[47,156855,146600],{"class":221},[47,156857,267],{"class":217},[47,156859,146605],{"class":85},[47,156861,156862],{"class":49,"line":1273},[47,156863,2493],{"emptyLinePlaceholder":145},[47,156865,156866,156868,156870,156872,156874,156876,156878,156880],{"class":49,"line":1288},[47,156867,30469],{"class":85},[47,156869,222],{"class":221},[47,156871,156736],{"class":81},[47,156873,32513],{"class":85},[47,156875,156742],{"class":81},[47,156877,32513],{"class":85},[47,156879,470],{"class":81},[47,156881,156882],{"class":221},".format(name, age))\n",[47,156884,156885,156887,156889,156891,156894,156896,156899,156901],{"class":49,"line":1294},[47,156886,30469],{"class":85},[47,156888,222],{"class":221},[47,156890,156736],{"class":81},[47,156892,156893],{"class":85},"{0}",[47,156895,156742],{"class":81},[47,156897,156898],{"class":85},"{1}",[47,156900,470],{"class":81},[47,156902,156882],{"class":221},[47,156904,156905,156907,156909,156911,156914,156916,156919,156921,156924,156926,156928,156931,156933,156935],{"class":49,"line":1308},[47,156906,30469],{"class":85},[47,156908,222],{"class":221},[47,156910,156736],{"class":81},[47,156912,156913],{"class":85},"{name}",[47,156915,156742],{"class":81},[47,156917,156918],{"class":85},"{age}",[47,156920,470],{"class":81},[47,156922,156923],{"class":221},".format(",[47,156925,79864],{"class":5309},[47,156927,267],{"class":217},[47,156929,156930],{"class":221},"name, ",[47,156932,70275],{"class":5309},[47,156934,267],{"class":217},[47,156936,156937],{"class":221},"age))\n",[187,156939,156941],{"id":156940},"_2103-f-string","2.10.3 f-string",[19,156943,156944],{},"推荐写法：",[38,156946,156948],{"className":30432,"code":156947,"language":30434,"meta":43,"style":43},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[26,156949,156950,156958,156966,156974,156978],{"__ignoreMap":43},[47,156951,156952,156954,156956],{"class":49,"line":50},[47,156953,146590],{"class":221},[47,156955,267],{"class":217},[47,156957,149407],{"class":81},[47,156959,156960,156962,156964],{"class":49,"line":92},[47,156961,146600],{"class":221},[47,156963,267],{"class":217},[47,156965,146605],{"class":85},[47,156967,156968,156970,156972],{"class":49,"line":1273},[47,156969,155412],{"class":221},[47,156971,267],{"class":217},[47,156973,156723],{"class":85},[47,156975,156976],{"class":49,"line":1288},[47,156977,2493],{"emptyLinePlaceholder":145},[47,156979,156980,156982,156984,156986,156988,156990,156992,156994,156996,156998,157000,157002,157004,157006,157009,157012,157014,157016],{"class":49,"line":1294},[47,156981,30469],{"class":85},[47,156983,222],{"class":221},[47,156985,273],{"class":217},[47,156987,156736],{"class":81},[47,156989,1115],{"class":85},[47,156991,79864],{"class":221},[47,156993,1165],{"class":85},[47,156995,156742],{"class":81},[47,156997,1115],{"class":85},[47,156999,70275],{"class":221},[47,157001,1165],{"class":85},[47,157003,156748],{"class":81},[47,157005,1115],{"class":85},[47,157007,157008],{"class":221},"score",[47,157010,157011],{"class":217},":.1f",[47,157013,1165],{"class":85},[47,157015,470],{"class":81},[47,157017,228],{"class":221},[19,157019,157020],{},"表达式也可以放进去：",[38,157022,157024],{"className":30432,"code":157023,"language":30434,"meta":43,"style":43},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[26,157025,157026,157034,157042],{"__ignoreMap":43},[47,157027,157028,157030,157032],{"class":49,"line":50},[47,157029,146735],{"class":221},[47,157031,267],{"class":217},[47,157033,146740],{"class":85},[47,157035,157036,157038,157040],{"class":49,"line":92},[47,157037,146745],{"class":221},[47,157039,267],{"class":217},[47,157041,54481],{"class":85},[47,157043,157044,157046,157048,157050,157053,157055,157057,157059,157062,157064,157067],{"class":49,"line":1273},[47,157045,30469],{"class":85},[47,157047,222],{"class":221},[47,157049,273],{"class":217},[47,157051,157052],{"class":81},"\"总价:",[47,157054,1115],{"class":85},[47,157056,146735],{"class":221},[47,157058,674],{"class":217},[47,157060,157061],{"class":221}," count",[47,157063,1165],{"class":85},[47,157065,157066],{"class":81},"元\"",[47,157068,228],{"class":221},[14,157070,157072],{"id":157071},"_211-input输入","2.11 input输入",[19,157074,157075,157078],{},[26,157076,157077],{},"input()"," 会暂停程序，等待用户输入。",[38,157080,157082],{"className":30432,"code":157081,"language":30434,"meta":43,"style":43},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[26,157083,157084,157098],{"__ignoreMap":43},[47,157085,157086,157088,157090,157092,157094,157096],{"class":49,"line":50},[47,157087,146590],{"class":221},[47,157089,267],{"class":217},[47,157091,60659],{"class":85},[47,157093,222],{"class":221},[47,157095,152433],{"class":81},[47,157097,228],{"class":221},[47,157099,157100,157102,157104,157106,157109,157111,157113,157115,157117],{"class":49,"line":92},[47,157101,30469],{"class":85},[47,157103,222],{"class":221},[47,157105,273],{"class":217},[47,157107,157108],{"class":81},"\"你好，",[47,157110,1115],{"class":85},[47,157112,79864],{"class":221},[47,157114,1165],{"class":85},[47,157116,470],{"class":81},[47,157118,228],{"class":221},[19,157120,157121],{},"输入整数：",[38,157123,157125],{"className":30432,"code":157124,"language":30434,"meta":43,"style":43},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[26,157126,157127,157145],{"__ignoreMap":43},[47,157128,157129,157131,157133,157135,157137,157139,157141,157143],{"class":49,"line":50},[47,157130,146600],{"class":221},[47,157132,267],{"class":217},[47,157134,2475],{"class":85},[47,157136,222],{"class":221},[47,157138,53875],{"class":85},[47,157140,222],{"class":221},[47,157142,152448],{"class":81},[47,157144,30551],{"class":221},[47,157146,157147,157149,157151,157153,157156,157158,157160,157162,157165,157167],{"class":49,"line":92},[47,157148,30469],{"class":85},[47,157150,222],{"class":221},[47,157152,273],{"class":217},[47,157154,157155],{"class":81},"\"明年你",[47,157157,1115],{"class":85},[47,157159,146600],{"class":221},[47,157161,700],{"class":217},[47,157163,157164],{"class":85}," 1}",[47,157166,149458],{"class":81},[47,157168,228],{"class":221},[19,157170,157171],{},"输入小数：",[38,157173,157175],{"className":30432,"code":157174,"language":30434,"meta":43,"style":43},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[26,157176,157177,157196],{"__ignoreMap":43},[47,157178,157179,157181,157183,157185,157187,157189,157191,157194],{"class":49,"line":50},[47,157180,155385],{"class":221},[47,157182,267],{"class":217},[47,157184,109851],{"class":85},[47,157186,222],{"class":221},[47,157188,53875],{"class":85},[47,157190,222],{"class":221},[47,157192,157193],{"class":81},"\"请输入身高:\"",[47,157195,30551],{"class":221},[47,157197,157198,157200,157202,157204,157207,157209,157211,157214,157216,157219],{"class":49,"line":92},[47,157199,30469],{"class":85},[47,157201,222],{"class":221},[47,157203,273],{"class":217},[47,157205,157206],{"class":81},"\"身高:",[47,157208,1115],{"class":85},[47,157210,25035],{"class":221},[47,157212,157213],{"class":217},":.2f",[47,157215,1165],{"class":85},[47,157217,157218],{"class":81},"米\"",[47,157220,228],{"class":221},[14,157222,157224],{"id":157223},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,157226,123346],{},[171,157228,157229,157232,157235,157238],{},[109,157230,157231],{},"输入商品单价。",[109,157233,157234],{},"输入购买数量。",[109,157236,157237],{},"输入折扣，例如 0.8 表示八折。",[109,157239,157240],{},"输出最终金额，保留两位小数。",[19,157242,10128],{},[38,157244,157246],{"className":30432,"code":157245,"language":30434,"meta":43,"style":43},"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",[26,157247,157248,157267,157286,157306,157310,157330,157334,157357,157378,157400],{"__ignoreMap":43},[47,157249,157250,157252,157254,157256,157258,157260,157262,157265],{"class":49,"line":50},[47,157251,146735],{"class":221},[47,157253,267],{"class":217},[47,157255,109851],{"class":85},[47,157257,222],{"class":221},[47,157259,53875],{"class":85},[47,157261,222],{"class":221},[47,157263,157264],{"class":81},"\"请输入商品单价:\"",[47,157266,30551],{"class":221},[47,157268,157269,157271,157273,157275,157277,157279,157281,157284],{"class":49,"line":92},[47,157270,146745],{"class":221},[47,157272,267],{"class":217},[47,157274,2475],{"class":85},[47,157276,222],{"class":221},[47,157278,53875],{"class":85},[47,157280,222],{"class":221},[47,157282,157283],{"class":81},"\"请输入购买数量:\"",[47,157285,30551],{"class":221},[47,157287,157288,157291,157293,157295,157297,157299,157301,157304],{"class":49,"line":1273},[47,157289,157290],{"class":221},"discount ",[47,157292,267],{"class":217},[47,157294,109851],{"class":85},[47,157296,222],{"class":221},[47,157298,53875],{"class":85},[47,157300,222],{"class":221},[47,157302,157303],{"class":81},"\"请输入折扣:\"",[47,157305,30551],{"class":221},[47,157307,157308],{"class":49,"line":1288},[47,157309,2493],{"emptyLinePlaceholder":145},[47,157311,157312,157315,157317,157320,157322,157325,157327],{"class":49,"line":1294},[47,157313,157314],{"class":221},"total ",[47,157316,267],{"class":217},[47,157318,157319],{"class":221}," price ",[47,157321,674],{"class":217},[47,157323,157324],{"class":221}," count ",[47,157326,674],{"class":217},[47,157328,157329],{"class":221}," discount\n",[47,157331,157332],{"class":49,"line":1308},[47,157333,2493],{"emptyLinePlaceholder":145},[47,157335,157336,157338,157340,157342,157345,157347,157349,157351,157353,157355],{"class":49,"line":1314},[47,157337,30469],{"class":85},[47,157339,222],{"class":221},[47,157341,273],{"class":217},[47,157343,157344],{"class":81},"\"商品单价:",[47,157346,1115],{"class":85},[47,157348,79869],{"class":221},[47,157350,157213],{"class":217},[47,157352,1165],{"class":85},[47,157354,470],{"class":81},[47,157356,228],{"class":221},[47,157358,157359,157361,157363,157365,157368,157370,157372,157374,157376],{"class":49,"line":1405},[47,157360,30469],{"class":85},[47,157362,222],{"class":221},[47,157364,273],{"class":217},[47,157366,157367],{"class":81},"\"购买数量:",[47,157369,1115],{"class":85},[47,157371,84488],{"class":221},[47,157373,1165],{"class":85},[47,157375,470],{"class":81},[47,157377,228],{"class":221},[47,157379,157380,157382,157384,157386,157389,157391,157394,157396,157398],{"class":49,"line":1411},[47,157381,30469],{"class":85},[47,157383,222],{"class":221},[47,157385,273],{"class":217},[47,157387,157388],{"class":81},"\"折扣:",[47,157390,1115],{"class":85},[47,157392,157393],{"class":221},"discount",[47,157395,1165],{"class":85},[47,157397,470],{"class":81},[47,157399,228],{"class":221},[47,157401,157402,157404,157406,157408,157411,157413,157416,157418,157420,157422],{"class":49,"line":1423},[47,157403,30469],{"class":85},[47,157405,222],{"class":221},[47,157407,273],{"class":217},[47,157409,157410],{"class":81},"\"应付金额:",[47,157412,1115],{"class":85},[47,157414,157415],{"class":221},"total",[47,157417,157213],{"class":217},[47,157419,1165],{"class":85},[47,157421,157066],{"class":81},[47,157423,228],{"class":221},[14,157425,157427],{"id":157426},"_213-易错点","2.13 易错点",[171,157429,157430,157435,157441,157449,157452],{},[109,157431,157432,157434],{},[26,157433,157077],{}," 的结果是字符串，做运算前要转换。",[109,157436,157437,157438,28439],{},"字符串拼接时，数字要先 ",[26,157439,157440],{},"str()",[109,157442,157443,157445,157446,157448],{},[26,157444,267],{}," 是赋值，",[26,157447,3042],{}," 是比较。",[109,157450,157451],{},"Python 没有自增自减运算符。",[109,157453,157454],{},"浮点数计算可能有精度误差：",[38,157456,157458],{"className":30432,"code":157457,"language":30434,"meta":43,"style":43},"print(0.1 + 0.2)\n",[26,157459,157460],{"__ignoreMap":43},[47,157461,157462,157464,157466,157468,157470,157473],{"class":49,"line":50},[47,157463,30469],{"class":85},[47,157465,222],{"class":221},[47,157467,86264],{"class":85},[47,157469,45620],{"class":217},[47,157471,157472],{"class":85}," 0.2",[47,157474,228],{"class":221},[19,157476,157477,157478,157481],{},"金额计算如果要求严格，可以后续学习 ",[26,157479,157480],{},"decimal"," 模块。",[14,157483,157485],{"id":157484},"_214-本章练习","2.14 本章练习",[171,157487,157488,157491,157494,157497,157500],{},[109,157489,157490],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[109,157492,157493],{},"输入圆的半径，计算面积，保留两位小数。",[109,157495,157496],{},"输入工资和奖金，计算总收入。",[109,157498,157499],{},"输入摄氏温度，转换为华氏温度。",[109,157501,157502],{},"写一个 BMI 计算程序：",[38,157504,157507],{"className":157505,"code":157506,"language":5280,"meta":43},[5278],"BMI = 体重kg \u002F 身高m ** 2\n",[26,157508,157506],{"__ignoreMap":43},[134,157510,157511],{},"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":43,"searchDepth":92,"depth":92,"links":157513},[157514,157515,157516,157517,157518,157519,157520,157526,157527,157528,157533,157534,157535,157536],{"id":155075,"depth":92,"text":155076},{"id":155184,"depth":92,"text":155185},{"id":155355,"depth":92,"text":155356},{"id":155432,"depth":92,"text":155433},{"id":50785,"depth":92,"text":50786},{"id":155738,"depth":92,"text":155739},{"id":155964,"depth":92,"text":155965,"children":157521},[157522,157523,157524,157525],{"id":155968,"depth":1273,"text":155969},{"id":156162,"depth":1273,"text":156163},{"id":156250,"depth":1273,"text":156251},{"id":156356,"depth":1273,"text":156357},{"id":156465,"depth":92,"text":156466},{"id":156623,"depth":92,"text":156624},{"id":156688,"depth":92,"text":156689,"children":157529},[157530,157531,157532],{"id":156692,"depth":1273,"text":156693},{"id":156837,"depth":1273,"text":156838},{"id":156940,"depth":1273,"text":156941},{"id":157071,"depth":92,"text":157072},{"id":157223,"depth":92,"text":157224},{"id":157426,"depth":92,"text":157427},{"id":157484,"depth":92,"text":157485},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155067,"description":142},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157543,"title":157544,"body":157545,"description":142,"extension":143,"meta":159181,"navigation":145,"path":159182,"seo":159183,"stem":159184,"__hash__":159185},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157546,"toc":159162},[157547,157550,157554,157557,157572,157575,157603,157607,157657,157659,157675,157678,157704,157707,157711,157778,157781,157797,157801,157804,157922,157925,157932,157981,157987,157991,157994,158107,158110,158114,158118,158121,158171,158175,158178,158228,158232,158235,158273,158277,158280,158326,158329,158364,158368,158373,158376,158422,158424,158491,158495,158501,158612,158621,158625,158627,158638,158640,158806,158810,158812,158826,158828,159042,159046,159065,159082,159085,159131,159135,159159],[10,157548,157544],{"id":157549},"_3-判断语句",[14,157551,157553],{"id":157552},"_31-布尔值","3.1 布尔值",[19,157555,157556],{},"判断语句依赖布尔值：",[38,157558,157560],{"className":30432,"code":157559,"language":30434,"meta":43,"style":43},"True\nFalse\n",[26,157561,157562,157567],{"__ignoreMap":43},[47,157563,157564],{"class":49,"line":50},[47,157565,157566],{"class":85},"True\n",[47,157568,157569],{"class":49,"line":92},[47,157570,157571],{"class":85},"False\n",[19,157573,157574],{},"比较表达式会产生布尔值：",[38,157576,157578],{"className":30432,"code":157577,"language":30434,"meta":43,"style":43},"age = 18\nprint(age >= 18)  # True\n",[26,157579,157580,157588],{"__ignoreMap":43},[47,157581,157582,157584,157586],{"class":49,"line":50},[47,157583,146600],{"class":221},[47,157585,267],{"class":217},[47,157587,146605],{"class":85},[47,157589,157590,157592,157594,157596,157598,157600],{"class":49,"line":92},[47,157591,30469],{"class":85},[47,157593,155822],{"class":221},[47,157595,1804],{"class":217},[47,157597,156339],{"class":85},[47,157599,45862],{"class":221},[47,157601,157602],{"class":279},"# True\n",[14,157604,157606],{"id":157605},"_32-if基础语法","3.2 if基础语法",[38,157608,157610],{"className":30432,"code":157609,"language":30434,"meta":43,"style":43},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[26,157611,157612,157630,157634,157646],{"__ignoreMap":43},[47,157613,157614,157616,157618,157620,157622,157624,157626,157628],{"class":49,"line":50},[47,157615,146600],{"class":221},[47,157617,267],{"class":217},[47,157619,2475],{"class":85},[47,157621,222],{"class":221},[47,157623,53875],{"class":85},[47,157625,222],{"class":221},[47,157627,152448],{"class":81},[47,157629,30551],{"class":221},[47,157631,157632],{"class":49,"line":92},[47,157633,2493],{"emptyLinePlaceholder":145},[47,157635,157636,157638,157640,157642,157644],{"class":49,"line":1273},[47,157637,1625],{"class":217},[47,157639,15800],{"class":221},[47,157641,1804],{"class":217},[47,157643,156339],{"class":85},[47,157645,3832],{"class":221},[47,157647,157648,157650,157652,157655],{"class":49,"line":1288},[47,157649,31353],{"class":85},[47,157651,222],{"class":221},[47,157653,157654],{"class":81},"\"可以进入网吧\"",[47,157656,228],{"class":221},[19,157658,9118],{},[171,157660,157661,157666,157669,157672],{},[109,157662,157663,157665],{},[26,157664,1625],{}," 后面是条件表达式。",[109,157667,157668],{},"条件后面必须写冒号。",[109,157670,157671],{},"条件成立时执行缩进代码块。",[109,157673,157674],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,157676,157677],{},"错误示例：",[38,157679,157681],{"className":30432,"code":157680,"language":30434,"meta":43,"style":43},"if age >= 18\n    print(\"可以进入\")\n",[26,157682,157683,157693],{"__ignoreMap":43},[47,157684,157685,157687,157689,157691],{"class":49,"line":50},[47,157686,1625],{"class":217},[47,157688,15800],{"class":221},[47,157690,1804],{"class":217},[47,157692,146605],{"class":85},[47,157694,157695,157697,157699,157702],{"class":49,"line":92},[47,157696,31353],{"class":85},[47,157698,222],{"class":221},[47,157700,157701],{"class":81},"\"可以进入\"",[47,157703,228],{"class":221},[19,157705,157706],{},"缺少冒号。",[14,157708,157710],{"id":157709},"_33-if-else","3.3 if else",[38,157712,157714],{"className":30432,"code":157713,"language":30434,"meta":43,"style":43},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[26,157715,157716,157734,157738,157750,157761,157767],{"__ignoreMap":43},[47,157717,157718,157720,157722,157724,157726,157728,157730,157732],{"class":49,"line":50},[47,157719,146600],{"class":221},[47,157721,267],{"class":217},[47,157723,2475],{"class":85},[47,157725,222],{"class":221},[47,157727,53875],{"class":85},[47,157729,222],{"class":221},[47,157731,152448],{"class":81},[47,157733,30551],{"class":221},[47,157735,157736],{"class":49,"line":92},[47,157737,2493],{"emptyLinePlaceholder":145},[47,157739,157740,157742,157744,157746,157748],{"class":49,"line":1273},[47,157741,1625],{"class":217},[47,157743,15800],{"class":221},[47,157745,1804],{"class":217},[47,157747,156339],{"class":85},[47,157749,3832],{"class":221},[47,157751,157752,157754,157756,157759],{"class":49,"line":1288},[47,157753,31353],{"class":85},[47,157755,222],{"class":221},[47,157757,157758],{"class":81},"\"成年人\"",[47,157760,228],{"class":221},[47,157762,157763,157765],{"class":49,"line":1294},[47,157764,1795],{"class":217},[47,157766,3832],{"class":221},[47,157768,157769,157771,157773,157776],{"class":49,"line":1308},[47,157770,31353],{"class":85},[47,157772,222],{"class":221},[47,157774,157775],{"class":81},"\"未成年人\"",[47,157777,228],{"class":221},[19,157779,157780],{},"执行逻辑：",[171,157782,157783,157789,157794],{},[109,157784,157785,157786,157788],{},"条件成立，执行 ",[26,157787,1625],{}," 代码块。",[109,157790,157791,157792,157788],{},"条件不成立，执行 ",[26,157793,1795],{},[109,157795,157796],{},"两个代码块只会执行其中一个。",[14,157798,157800],{"id":157799},"_34-if-elif-else","3.4 if elif else",[19,157802,157803],{},"多条件判断：",[38,157805,157807],{"className":30432,"code":157806,"language":30434,"meta":43,"style":43},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[26,157808,157809,157827,157831,157845,157856,157870,157881,157894,157905,157911],{"__ignoreMap":43},[47,157810,157811,157813,157815,157817,157819,157821,157823,157825],{"class":49,"line":50},[47,157812,155412],{"class":221},[47,157814,267],{"class":217},[47,157816,2475],{"class":85},[47,157818,222],{"class":221},[47,157820,53875],{"class":85},[47,157822,222],{"class":221},[47,157824,152463],{"class":81},[47,157826,30551],{"class":221},[47,157828,157829],{"class":49,"line":92},[47,157830,2493],{"emptyLinePlaceholder":145},[47,157832,157833,157835,157838,157840,157843],{"class":49,"line":1273},[47,157834,1625],{"class":217},[47,157836,157837],{"class":221}," score ",[47,157839,1804],{"class":217},[47,157841,157842],{"class":85}," 90",[47,157844,3832],{"class":221},[47,157846,157847,157849,157851,157854],{"class":49,"line":1288},[47,157848,31353],{"class":85},[47,157850,222],{"class":221},[47,157852,157853],{"class":81},"\"优秀\"",[47,157855,228],{"class":221},[47,157857,157858,157861,157863,157865,157868],{"class":49,"line":1294},[47,157859,157860],{"class":217},"elif",[47,157862,157837],{"class":221},[47,157864,1804],{"class":217},[47,157866,157867],{"class":85}," 80",[47,157869,3832],{"class":221},[47,157871,157872,157874,157876,157879],{"class":49,"line":1308},[47,157873,31353],{"class":85},[47,157875,222],{"class":221},[47,157877,157878],{"class":81},"\"良好\"",[47,157880,228],{"class":221},[47,157882,157883,157885,157887,157889,157892],{"class":49,"line":1314},[47,157884,157860],{"class":217},[47,157886,157837],{"class":221},[47,157888,1804],{"class":217},[47,157890,157891],{"class":85}," 60",[47,157893,3832],{"class":221},[47,157895,157896,157898,157900,157903],{"class":49,"line":1405},[47,157897,31353],{"class":85},[47,157899,222],{"class":221},[47,157901,157902],{"class":81},"\"及格\"",[47,157904,228],{"class":221},[47,157906,157907,157909],{"class":49,"line":1411},[47,157908,1795],{"class":217},[47,157910,3832],{"class":221},[47,157912,157913,157915,157917,157920],{"class":49,"line":1423},[47,157914,31353],{"class":85},[47,157916,222],{"class":221},[47,157918,157919],{"class":81},"\"不及格\"",[47,157921,228],{"class":221},[19,157923,157924],{},"注意判断顺序很重要。",[19,157926,157927,157928,157931],{},"如果把 ",[26,157929,157930],{},"score >= 60"," 放在最前面：",[38,157933,157935],{"className":30432,"code":157934,"language":30434,"meta":43,"style":43},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[26,157936,157937,157949,157959,157971],{"__ignoreMap":43},[47,157938,157939,157941,157943,157945,157947],{"class":49,"line":50},[47,157940,1625],{"class":217},[47,157942,157837],{"class":221},[47,157944,1804],{"class":217},[47,157946,157891],{"class":85},[47,157948,3832],{"class":221},[47,157950,157951,157953,157955,157957],{"class":49,"line":92},[47,157952,31353],{"class":85},[47,157954,222],{"class":221},[47,157956,157902],{"class":81},[47,157958,228],{"class":221},[47,157960,157961,157963,157965,157967,157969],{"class":49,"line":1273},[47,157962,157860],{"class":217},[47,157964,157837],{"class":221},[47,157966,1804],{"class":217},[47,157968,157842],{"class":85},[47,157970,3832],{"class":221},[47,157972,157973,157975,157977,157979],{"class":49,"line":1288},[47,157974,31353],{"class":85},[47,157976,222],{"class":221},[47,157978,157853],{"class":81},[47,157980,228],{"class":221},[19,157982,157983,157984,157986],{},"成绩 95 会先满足 ",[26,157985,157930],{},"，后面的优秀分支就不会执行。",[14,157988,157990],{"id":157989},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,157992,157993],{},"嵌套判断就是在一个判断内部再写判断。",[38,157995,157997],{"className":30432,"code":157996,"language":30434,"meta":43,"style":43},"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",[26,157998,157999,158017,158032,158036,158048,158062,158072,158079,158090,158096],{"__ignoreMap":43},[47,158000,158001,158003,158005,158007,158009,158011,158013,158015],{"class":49,"line":50},[47,158002,146600],{"class":221},[47,158004,267],{"class":217},[47,158006,2475],{"class":85},[47,158008,222],{"class":221},[47,158010,53875],{"class":85},[47,158012,222],{"class":221},[47,158014,152448],{"class":81},[47,158016,30551],{"class":221},[47,158018,158019,158021,158023,158025,158027,158030],{"class":49,"line":92},[47,158020,156415],{"class":221},[47,158022,267],{"class":217},[47,158024,60659],{"class":85},[47,158026,222],{"class":221},[47,158028,158029],{"class":81},"\"是否有票(y\u002Fn):\"",[47,158031,228],{"class":221},[47,158033,158034],{"class":49,"line":1273},[47,158035,2493],{"emptyLinePlaceholder":145},[47,158037,158038,158040,158042,158044,158046],{"class":49,"line":1288},[47,158039,1625],{"class":217},[47,158041,15800],{"class":221},[47,158043,1804],{"class":217},[47,158045,156339],{"class":85},[47,158047,3832],{"class":221},[47,158049,158050,158052,158055,158057,158060],{"class":49,"line":1294},[47,158051,3194],{"class":217},[47,158053,158054],{"class":221}," has_ticket ",[47,158056,3042],{"class":217},[47,158058,158059],{"class":81}," \"y\"",[47,158061,3832],{"class":221},[47,158063,158064,158066,158068,158070],{"class":49,"line":1308},[47,158065,32505],{"class":85},[47,158067,222],{"class":221},[47,158069,157701],{"class":81},[47,158071,228],{"class":221},[47,158073,158074,158077],{"class":49,"line":1314},[47,158075,158076],{"class":217},"    else",[47,158078,3832],{"class":221},[47,158080,158081,158083,158085,158088],{"class":49,"line":1405},[47,158082,32505],{"class":85},[47,158084,222],{"class":221},[47,158086,158087],{"class":81},"\"请先买票\"",[47,158089,228],{"class":221},[47,158091,158092,158094],{"class":49,"line":1411},[47,158093,1795],{"class":217},[47,158095,3832],{"class":221},[47,158097,158098,158100,158102,158105],{"class":49,"line":1423},[47,158099,31353],{"class":85},[47,158101,222],{"class":221},[47,158103,158104],{"class":81},"\"未成年人禁止进入\"",[47,158106,228],{"class":221},[19,158108,158109],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,158111,158113],{"id":158112},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[187,158115,158117],{"id":158116},"_361-and","3.6.1 and",[19,158119,158120],{},"两个条件都成立才成立。",[38,158122,158124],{"className":30432,"code":158123,"language":30434,"meta":43,"style":43},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[26,158125,158126,158134,158142,158146,158161],{"__ignoreMap":43},[47,158127,158128,158130,158132],{"class":49,"line":50},[47,158129,146600],{"class":221},[47,158131,267],{"class":217},[47,158133,88119],{"class":85},[47,158135,158136,158138,158140],{"class":49,"line":92},[47,158137,156415],{"class":221},[47,158139,267],{"class":217},[47,158141,153653],{"class":85},[47,158143,158144],{"class":49,"line":1273},[47,158145,2493],{"emptyLinePlaceholder":145},[47,158147,158148,158150,158152,158154,158156,158158],{"class":49,"line":1288},[47,158149,1625],{"class":217},[47,158151,15800],{"class":221},[47,158153,1804],{"class":217},[47,158155,156339],{"class":85},[47,158157,120483],{"class":217},[47,158159,158160],{"class":221}," has_ticket:\n",[47,158162,158163,158165,158167,158169],{"class":49,"line":1294},[47,158164,31353],{"class":85},[47,158166,222],{"class":221},[47,158168,157701],{"class":81},[47,158170,228],{"class":221},[187,158172,158174],{"id":158173},"_362-or","3.6.2 or",[19,158176,158177],{},"只要一个条件成立就成立。",[38,158179,158181],{"className":30432,"code":158180,"language":30434,"meta":43,"style":43},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[26,158182,158183,158192,158201,158205,158217],{"__ignoreMap":43},[47,158184,158185,158188,158190],{"class":49,"line":50},[47,158186,158187],{"class":221},"is_vip ",[47,158189,267],{"class":217},[47,158191,125861],{"class":85},[47,158193,158194,158197,158199],{"class":49,"line":92},[47,158195,158196],{"class":221},"coupon ",[47,158198,267],{"class":217},[47,158200,153653],{"class":85},[47,158202,158203],{"class":49,"line":1273},[47,158204,2493],{"emptyLinePlaceholder":145},[47,158206,158207,158209,158212,158214],{"class":49,"line":1288},[47,158208,1625],{"class":217},[47,158210,158211],{"class":221}," is_vip ",[47,158213,115144],{"class":217},[47,158215,158216],{"class":221}," coupon:\n",[47,158218,158219,158221,158223,158226],{"class":49,"line":1294},[47,158220,31353],{"class":85},[47,158222,222],{"class":221},[47,158224,158225],{"class":81},"\"可以享受优惠\"",[47,158227,228],{"class":221},[187,158229,158231],{"id":158230},"_363-not","3.6.3 not",[19,158233,158234],{},"取反。",[38,158236,158238],{"className":30432,"code":158237,"language":30434,"meta":43,"style":43},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[26,158239,158240,158249,158253,158262],{"__ignoreMap":43},[47,158241,158242,158245,158247],{"class":49,"line":50},[47,158243,158244],{"class":221},"is_closed ",[47,158246,267],{"class":217},[47,158248,125861],{"class":85},[47,158250,158251],{"class":49,"line":92},[47,158252,2493],{"emptyLinePlaceholder":145},[47,158254,158255,158257,158259],{"class":49,"line":1273},[47,158256,1625],{"class":217},[47,158258,38984],{"class":217},[47,158260,158261],{"class":221}," is_closed:\n",[47,158263,158264,158266,158268,158271],{"class":49,"line":1288},[47,158265,31353],{"class":85},[47,158267,222],{"class":221},[47,158269,158270],{"class":81},"\"店铺营业中\"",[47,158272,228],{"class":221},[14,158274,158276],{"id":158275},"_37-链式比较","3.7 链式比较",[19,158278,158279],{},"Python 支持链式比较：",[38,158281,158283],{"className":30432,"code":158282,"language":30434,"meta":43,"style":43},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[26,158284,158285,158294,158298,158315],{"__ignoreMap":43},[47,158286,158287,158289,158291],{"class":49,"line":50},[47,158288,155412],{"class":221},[47,158290,267],{"class":217},[47,158292,158293],{"class":85}," 85\n",[47,158295,158296],{"class":49,"line":92},[47,158297,2493],{"emptyLinePlaceholder":145},[47,158299,158300,158302,158304,158307,158309,158311,158313],{"class":49,"line":1273},[47,158301,1625],{"class":217},[47,158303,4186],{"class":85},[47,158305,158306],{"class":217}," \u003C=",[47,158308,157837],{"class":221},[47,158310,1682],{"class":217},[47,158312,5847],{"class":85},[47,158314,3832],{"class":221},[47,158316,158317,158319,158321,158324],{"class":49,"line":1288},[47,158318,31353],{"class":85},[47,158320,222],{"class":221},[47,158322,158323],{"class":81},"\"成绩合法\"",[47,158325,228],{"class":221},[19,158327,158328],{},"等价于：",[38,158330,158332],{"className":30432,"code":158331,"language":30434,"meta":43,"style":43},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[26,158333,158334,158354],{"__ignoreMap":43},[47,158335,158336,158338,158340,158342,158344,158346,158348,158350,158352],{"class":49,"line":50},[47,158337,1625],{"class":217},[47,158339,157837],{"class":221},[47,158341,1804],{"class":217},[47,158343,4186],{"class":85},[47,158345,120483],{"class":217},[47,158347,157837],{"class":221},[47,158349,1682],{"class":217},[47,158351,5847],{"class":85},[47,158353,3832],{"class":221},[47,158355,158356,158358,158360,158362],{"class":49,"line":92},[47,158357,31353],{"class":85},[47,158359,222],{"class":221},[47,158361,158323],{"class":81},[47,158363,228],{"class":221},[14,158365,158367],{"id":158366},"_38-真值和假值","3.8 真值和假值",[19,158369,116521,158370,158372],{},[26,158371,1625],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,158374,158375],{},"假值：",[38,158377,158379],{"className":30432,"code":158378,"language":30434,"meta":43,"style":43},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[26,158380,158381,158385,158390,158394,158398,158403,158407,158411,158416],{"__ignoreMap":43},[47,158382,158383],{"class":49,"line":50},[47,158384,157571],{"class":85},[47,158386,158387],{"class":49,"line":92},[47,158388,158389],{"class":85},"None\n",[47,158391,158392],{"class":49,"line":1273},[47,158393,3178],{"class":85},[47,158395,158396],{"class":49,"line":1288},[47,158397,32396],{"class":85},[47,158399,158400],{"class":49,"line":1294},[47,158401,158402],{"class":81},"\"\"\n",[47,158404,158405],{"class":49,"line":1308},[47,158406,32411],{"class":221},[47,158408,158409],{"class":49,"line":1314},[47,158410,2069],{"class":221},[47,158412,158413],{"class":49,"line":1405},[47,158414,158415],{"class":221},"{}\n",[47,158417,158418,158420],{"class":49,"line":1411},[47,158419,155344],{"class":85},[47,158421,2069],{"class":221},[19,158423,15228],{},[38,158425,158427],{"className":30432,"code":158426,"language":30434,"meta":43,"style":43},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[26,158428,158429,158443,158447,158454,158474,158480],{"__ignoreMap":43},[47,158430,158431,158433,158435,158437,158439,158441],{"class":49,"line":50},[47,158432,146590],{"class":221},[47,158434,267],{"class":217},[47,158436,60659],{"class":85},[47,158438,222],{"class":221},[47,158440,152433],{"class":81},[47,158442,228],{"class":221},[47,158444,158445],{"class":49,"line":92},[47,158446,2493],{"emptyLinePlaceholder":145},[47,158448,158449,158451],{"class":49,"line":1273},[47,158450,1625],{"class":217},[47,158452,158453],{"class":221}," name:\n",[47,158455,158456,158458,158460,158462,158464,158466,158468,158470,158472],{"class":49,"line":1288},[47,158457,31353],{"class":85},[47,158459,222],{"class":221},[47,158461,273],{"class":217},[47,158463,157108],{"class":81},[47,158465,1115],{"class":85},[47,158467,79864],{"class":221},[47,158469,1165],{"class":85},[47,158471,470],{"class":81},[47,158473,228],{"class":221},[47,158475,158476,158478],{"class":49,"line":1294},[47,158477,1795],{"class":217},[47,158479,3832],{"class":221},[47,158481,158482,158484,158486,158489],{"class":49,"line":1308},[47,158483,31353],{"class":85},[47,158485,222],{"class":221},[47,158487,158488],{"class":81},"\"姓名不能为空\"",[47,158490,228],{"class":221},[14,158492,158494],{"id":158493},"_39-match语句","3.9 match语句",[19,158496,158497,158498,158500],{},"Python 3.10 开始支持 ",[26,158499,71319],{},"。它适合处理固定选项。",[38,158502,158504],{"className":30432,"code":158503,"language":30434,"meta":43,"style":43},"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",[26,158505,158506,158522,158526,158533,158543,158554,158563,158574,158583,158594,158601],{"__ignoreMap":43},[47,158507,158508,158511,158513,158515,158517,158520],{"class":49,"line":50},[47,158509,158510],{"class":221},"command ",[47,158512,267],{"class":217},[47,158514,60659],{"class":85},[47,158516,222],{"class":221},[47,158518,158519],{"class":81},"\"请输入命令:\"",[47,158521,228],{"class":221},[47,158523,158524],{"class":49,"line":92},[47,158525,2493],{"emptyLinePlaceholder":145},[47,158527,158528,158530],{"class":49,"line":1273},[47,158529,71319],{"class":217},[47,158531,158532],{"class":221}," command:\n",[47,158534,158535,158538,158541],{"class":49,"line":1288},[47,158536,158537],{"class":217},"    case",[47,158539,158540],{"class":81}," \"start\"",[47,158542,3832],{"class":221},[47,158544,158545,158547,158549,158552],{"class":49,"line":1294},[47,158546,32505],{"class":85},[47,158548,222],{"class":221},[47,158550,158551],{"class":81},"\"启动\"",[47,158553,228],{"class":221},[47,158555,158556,158558,158561],{"class":49,"line":1308},[47,158557,158537],{"class":217},[47,158559,158560],{"class":81}," \"stop\"",[47,158562,3832],{"class":221},[47,158564,158565,158567,158569,158572],{"class":49,"line":1314},[47,158566,32505],{"class":85},[47,158568,222],{"class":221},[47,158570,158571],{"class":81},"\"停止\"",[47,158573,228],{"class":221},[47,158575,158576,158578,158581],{"class":49,"line":1405},[47,158577,158537],{"class":217},[47,158579,158580],{"class":81}," \"restart\"",[47,158582,3832],{"class":221},[47,158584,158585,158587,158589,158592],{"class":49,"line":1411},[47,158586,32505],{"class":85},[47,158588,222],{"class":221},[47,158590,158591],{"class":81},"\"重启\"",[47,158593,228],{"class":221},[47,158595,158596,158598],{"class":49,"line":1423},[47,158597,158537],{"class":217},[47,158599,158600],{"class":221}," _:\n",[47,158602,158603,158605,158607,158610],{"class":49,"line":1706},[47,158604,32505],{"class":85},[47,158606,222],{"class":221},[47,158608,158609],{"class":81},"\"未知命令\"",[47,158611,228],{"class":221},[19,158613,158614,158615,158617,158618,158620],{},"入门阶段掌握 ",[26,158616,154712],{}," 更重要，",[26,158619,71319],{}," 可以作为补充。",[14,158622,158624],{"id":158623},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,158626,123346],{},[171,158628,158629,158632,158635],{},[109,158630,158631],{},"输入成绩。",[109,158633,158634],{},"判断成绩是否合法。",[109,158636,158637],{},"输出等级。",[19,158639,10128],{},[38,158641,158643],{"className":30432,"code":158642,"language":30434,"meta":43,"style":43},"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",[26,158644,158645,158663,158667,158685,158696,158708,158719,158731,158742,158755,158766,158778,158789,158795],{"__ignoreMap":43},[47,158646,158647,158649,158651,158653,158655,158657,158659,158661],{"class":49,"line":50},[47,158648,155412],{"class":221},[47,158650,267],{"class":217},[47,158652,109851],{"class":85},[47,158654,222],{"class":221},[47,158656,53875],{"class":85},[47,158658,222],{"class":221},[47,158660,152463],{"class":81},[47,158662,30551],{"class":221},[47,158664,158665],{"class":49,"line":92},[47,158666,2493],{"emptyLinePlaceholder":145},[47,158668,158669,158671,158673,158675,158677,158679,158681,158683],{"class":49,"line":1273},[47,158670,1625],{"class":217},[47,158672,38984],{"class":217},[47,158674,4186],{"class":85},[47,158676,158306],{"class":217},[47,158678,157837],{"class":221},[47,158680,1682],{"class":217},[47,158682,5847],{"class":85},[47,158684,3832],{"class":221},[47,158686,158687,158689,158691,158694],{"class":49,"line":1288},[47,158688,31353],{"class":85},[47,158690,222],{"class":221},[47,158692,158693],{"class":81},"\"成绩不合法\"",[47,158695,228],{"class":221},[47,158697,158698,158700,158702,158704,158706],{"class":49,"line":1294},[47,158699,157860],{"class":217},[47,158701,157837],{"class":221},[47,158703,1804],{"class":217},[47,158705,157842],{"class":85},[47,158707,3832],{"class":221},[47,158709,158710,158712,158714,158717],{"class":49,"line":1308},[47,158711,31353],{"class":85},[47,158713,222],{"class":221},[47,158715,158716],{"class":81},"\"等级:A\"",[47,158718,228],{"class":221},[47,158720,158721,158723,158725,158727,158729],{"class":49,"line":1314},[47,158722,157860],{"class":217},[47,158724,157837],{"class":221},[47,158726,1804],{"class":217},[47,158728,157867],{"class":85},[47,158730,3832],{"class":221},[47,158732,158733,158735,158737,158740],{"class":49,"line":1405},[47,158734,31353],{"class":85},[47,158736,222],{"class":221},[47,158738,158739],{"class":81},"\"等级:B\"",[47,158741,228],{"class":221},[47,158743,158744,158746,158748,158750,158753],{"class":49,"line":1411},[47,158745,157860],{"class":217},[47,158747,157837],{"class":221},[47,158749,1804],{"class":217},[47,158751,158752],{"class":85}," 70",[47,158754,3832],{"class":221},[47,158756,158757,158759,158761,158764],{"class":49,"line":1423},[47,158758,31353],{"class":85},[47,158760,222],{"class":221},[47,158762,158763],{"class":81},"\"等级:C\"",[47,158765,228],{"class":221},[47,158767,158768,158770,158772,158774,158776],{"class":49,"line":1706},[47,158769,157860],{"class":217},[47,158771,157837],{"class":221},[47,158773,1804],{"class":217},[47,158775,157891],{"class":85},[47,158777,3832],{"class":221},[47,158779,158780,158782,158784,158787],{"class":49,"line":1711},[47,158781,31353],{"class":85},[47,158783,222],{"class":221},[47,158785,158786],{"class":81},"\"等级:D\"",[47,158788,228],{"class":221},[47,158790,158791,158793],{"class":49,"line":1717},[47,158792,1795],{"class":217},[47,158794,3832],{"class":221},[47,158796,158797,158799,158801,158804],{"class":49,"line":1722},[47,158798,31353],{"class":85},[47,158800,222],{"class":221},[47,158802,158803],{"class":81},"\"等级:E\"",[47,158805,228],{"class":221},[14,158807,158809],{"id":158808},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,158811,123346],{},[171,158813,158814,158817,158820,158823],{},[109,158815,158816],{},"输入消费金额。",[109,158818,158819],{},"输入会员等级，普通、银卡、金卡。",[109,158821,158822],{},"普通不打折，银卡 9 折，金卡 8 折。",[109,158824,158825],{},"满 500 再减 50。",[19,158827,10128],{},[38,158829,158831],{"className":30432,"code":158830,"language":30434,"meta":43,"style":43},"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",[26,158832,158833,158853,158869,158873,158881,158885,158899,158909,158922,158931,158944,158952,158958,158969,158973,158987,158991,159005,159015,159019],{"__ignoreMap":43},[47,158834,158835,158838,158840,158842,158844,158846,158848,158851],{"class":49,"line":50},[47,158836,158837],{"class":221},"amount ",[47,158839,267],{"class":217},[47,158841,109851],{"class":85},[47,158843,222],{"class":221},[47,158845,53875],{"class":85},[47,158847,222],{"class":221},[47,158849,158850],{"class":81},"\"请输入消费金额:\"",[47,158852,30551],{"class":221},[47,158854,158855,158858,158860,158862,158864,158867],{"class":49,"line":92},[47,158856,158857],{"class":221},"level ",[47,158859,267],{"class":217},[47,158861,60659],{"class":85},[47,158863,222],{"class":221},[47,158865,158866],{"class":81},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[47,158868,228],{"class":221},[47,158870,158871],{"class":49,"line":1273},[47,158872,2493],{"emptyLinePlaceholder":145},[47,158874,158875,158877,158879],{"class":49,"line":1288},[47,158876,157290],{"class":221},[47,158878,267],{"class":217},[47,158880,55753],{"class":85},[47,158882,158883],{"class":49,"line":1294},[47,158884,2493],{"emptyLinePlaceholder":145},[47,158886,158887,158889,158892,158894,158897],{"class":49,"line":1308},[47,158888,1625],{"class":217},[47,158890,158891],{"class":221}," level ",[47,158893,3042],{"class":217},[47,158895,158896],{"class":81}," \"银卡\"",[47,158898,3832],{"class":221},[47,158900,158901,158904,158906],{"class":49,"line":1314},[47,158902,158903],{"class":221},"    discount ",[47,158905,267],{"class":217},[47,158907,158908],{"class":85}," 0.9\n",[47,158910,158911,158913,158915,158917,158920],{"class":49,"line":1405},[47,158912,157860],{"class":217},[47,158914,158891],{"class":221},[47,158916,3042],{"class":217},[47,158918,158919],{"class":81}," \"金卡\"",[47,158921,3832],{"class":221},[47,158923,158924,158926,158928],{"class":49,"line":1411},[47,158925,158903],{"class":221},[47,158927,267],{"class":217},[47,158929,158930],{"class":85}," 0.8\n",[47,158932,158933,158935,158937,158939,158942],{"class":49,"line":1423},[47,158934,157860],{"class":217},[47,158936,158891],{"class":221},[47,158938,3042],{"class":217},[47,158940,158941],{"class":81}," \"普通\"",[47,158943,3832],{"class":221},[47,158945,158946,158948,158950],{"class":49,"line":1706},[47,158947,158903],{"class":221},[47,158949,267],{"class":217},[47,158951,55753],{"class":85},[47,158953,158954,158956],{"class":49,"line":1711},[47,158955,1795],{"class":217},[47,158957,3832],{"class":221},[47,158959,158960,158962,158964,158967],{"class":49,"line":1717},[47,158961,31353],{"class":85},[47,158963,222],{"class":221},[47,158965,158966],{"class":81},"\"会员等级输入错误，按普通会员计算\"",[47,158968,228],{"class":221},[47,158970,158971],{"class":49,"line":1722},[47,158972,2493],{"emptyLinePlaceholder":145},[47,158974,158975,158978,158980,158983,158985],{"class":49,"line":1736},[47,158976,158977],{"class":221},"pay ",[47,158979,267],{"class":217},[47,158981,158982],{"class":221}," amount ",[47,158984,674],{"class":217},[47,158986,157329],{"class":221},[47,158988,158989],{"class":49,"line":1741},[47,158990,2493],{"emptyLinePlaceholder":145},[47,158992,158993,158995,158998,159000,159003],{"class":49,"line":1747},[47,158994,1625],{"class":217},[47,158996,158997],{"class":221}," pay ",[47,158999,1804],{"class":217},[47,159001,159002],{"class":85}," 500",[47,159004,3832],{"class":221},[47,159006,159007,159010,159012],{"class":49,"line":1768},[47,159008,159009],{"class":221},"    pay ",[47,159011,150306],{"class":217},[47,159013,159014],{"class":85}," 50\n",[47,159016,159017],{"class":49,"line":1773},[47,159018,2493],{"emptyLinePlaceholder":145},[47,159020,159021,159023,159025,159027,159029,159031,159034,159036,159038,159040],{"class":49,"line":1787},[47,159022,30469],{"class":85},[47,159024,222],{"class":221},[47,159026,273],{"class":217},[47,159028,157410],{"class":81},[47,159030,1115],{"class":85},[47,159032,159033],{"class":221},"pay",[47,159035,157213],{"class":217},[47,159037,1165],{"class":85},[47,159039,157066],{"class":81},[47,159041,228],{"class":221},[14,159043,159045],{"id":159044},"_312-易错点","3.12 易错点",[171,159047,159048,159051,159054,159057,159062],{},[109,159049,159050],{},"冒号不能漏。",[109,159052,159053],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[109,159055,159056],{},"多分支判断要注意顺序。",[109,159058,159059,159060,28439],{},"判断相等用 ",[26,159061,3042],{},[109,159063,159064],{},"字符串比较区分大小写：",[38,159066,159068],{"className":30432,"code":159067,"language":30434,"meta":43,"style":43},"\"Y\" == \"y\"  # False\n",[26,159069,159070],{"__ignoreMap":43},[47,159071,159072,159075,159077,159079],{"class":49,"line":50},[47,159073,159074],{"class":81},"\"Y\"",[47,159076,101613],{"class":217},[47,159078,158059],{"class":81},[47,159080,159081],{"class":279},"  # False\n",[19,159083,159084],{},"可转换后再判断：",[38,159086,159088],{"className":30432,"code":159087,"language":30434,"meta":43,"style":43},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[26,159089,159090,159107,159120],{"__ignoreMap":43},[47,159091,159092,159095,159097,159099,159101,159104],{"class":49,"line":50},[47,159093,159094],{"class":221},"answer ",[47,159096,267],{"class":217},[47,159098,60659],{"class":85},[47,159100,222],{"class":221},[47,159102,159103],{"class":81},"\"是否继续(y\u002Fn):\"",[47,159105,159106],{"class":221},").lower()\n",[47,159108,159109,159111,159114,159116,159118],{"class":49,"line":92},[47,159110,1625],{"class":217},[47,159112,159113],{"class":221}," answer ",[47,159115,3042],{"class":217},[47,159117,158059],{"class":81},[47,159119,3832],{"class":221},[47,159121,159122,159124,159126,159129],{"class":49,"line":1273},[47,159123,31353],{"class":85},[47,159125,222],{"class":221},[47,159127,159128],{"class":81},"\"继续\"",[47,159130,228],{"class":221},[14,159132,159134],{"id":159133},"_313-本章练习","3.13 本章练习",[171,159136,159137,159140,159143,159146,159156],{},[109,159138,159139],{},"输入年龄，判断是否成年。",[109,159141,159142],{},"输入年份，判断是否为闰年。",[109,159144,159145],{},"输入三个数字，输出最大值。",[109,159147,159148,159149,159152,159153,159155],{},"写登录判断：用户名是 ",[26,159150,159151],{},"admin"," 且密码是 ",[26,159154,15177],{}," 才登录成功。",[109,159157,159158],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[134,159160,159161],{},"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":43,"searchDepth":92,"depth":92,"links":159163},[159164,159165,159166,159167,159168,159169,159174,159175,159176,159177,159178,159179,159180],{"id":157552,"depth":92,"text":157553},{"id":157605,"depth":92,"text":157606},{"id":157709,"depth":92,"text":157710},{"id":157799,"depth":92,"text":157800},{"id":157989,"depth":92,"text":157990},{"id":158112,"depth":92,"text":158113,"children":159170},[159171,159172,159173],{"id":158116,"depth":1273,"text":158117},{"id":158173,"depth":1273,"text":158174},{"id":158230,"depth":1273,"text":158231},{"id":158275,"depth":92,"text":158276},{"id":158366,"depth":92,"text":158367},{"id":158493,"depth":92,"text":158494},{"id":158623,"depth":92,"text":158624},{"id":158808,"depth":92,"text":158809},{"id":159044,"depth":92,"text":159045},{"id":159133,"depth":92,"text":159134},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157544,"description":142},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159187,"title":159188,"body":159189,"description":142,"extension":143,"meta":160958,"navigation":145,"path":160959,"seo":160960,"stem":160961,"__hash__":160962},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159190,"toc":160938},[159191,159194,159198,159204,159207,159224,159228,159230,159247,159249,159294,159296,159313,159317,159320,159386,159389,159407,159411,159572,159581,159585,159589,159594,159641,159643,159649,159653,159658,159705,159707,159713,159717,159722,159758,159761,159808,159812,159818,159876,159881,159912,159917,159921,159976,159979,160051,160054,160113,160117,160120,160195,160198,160202,160308,160311,160337,160341,160353,160422,160425,160517,160521,160523,160534,160536,160666,160670,160872,160880,160884,160914,160918,160935],[10,159192,159188],{"id":159193},"_4-循环语句",[14,159195,159197],{"id":159196},"_41-为什么需要循环","4.1 为什么需要循环",[19,159199,159200,159201,159203],{},"如果要输出 1 到 100，不应该写 100 行 ",[26,159202,146526],{},"，而应该用循环。",[19,159205,159206],{},"循环适合处理重复任务：",[171,159208,159209,159212,159215,159218,159221],{},[109,159210,159211],{},"重复输出。",[109,159213,159214],{},"重复输入。",[109,159216,159217],{},"遍历数据。",[109,159219,159220],{},"持续执行菜单。",[109,159222,159223],{},"批量处理文件或数据。",[14,159225,159227],{"id":159226},"_42-while循环","4.2 while循环",[19,159229,5274],{},[38,159231,159233],{"className":30432,"code":159232,"language":30434,"meta":43,"style":43},"while 条件:\n    循环体\n",[26,159234,159235,159242],{"__ignoreMap":43},[47,159236,159237,159239],{"class":49,"line":50},[47,159238,108717],{"class":217},[47,159240,159241],{"class":221}," 条件:\n",[47,159243,159244],{"class":49,"line":92},[47,159245,159246],{"class":221},"    循环体\n",[19,159248,15228],{},[38,159250,159252],{"className":30432,"code":159251,"language":30434,"meta":43,"style":43},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[26,159253,159254,159262,159266,159278,159285],{"__ignoreMap":43},[47,159255,159256,159258,159260],{"class":49,"line":50},[47,159257,100202],{"class":221},[47,159259,267],{"class":217},[47,159261,55753],{"class":85},[47,159263,159264],{"class":49,"line":92},[47,159265,2493],{"emptyLinePlaceholder":145},[47,159267,159268,159270,159272,159274,159276],{"class":49,"line":1273},[47,159269,108717],{"class":217},[47,159271,9531],{"class":221},[47,159273,1682],{"class":217},[47,159275,2241],{"class":85},[47,159277,3832],{"class":221},[47,159279,159280,159282],{"class":49,"line":1288},[47,159281,31353],{"class":85},[47,159283,159284],{"class":221},"(i)\n",[47,159286,159287,159290,159292],{"class":49,"line":1294},[47,159288,159289],{"class":221},"    i ",[47,159291,9570],{"class":217},[47,159293,55753],{"class":85},[19,159295,80983],{},[171,159297,159298,159304,159307,159310],{},[109,159299,159300,159301,28439],{},"判断条件 ",[26,159302,159303],{},"i \u003C= 5",[109,159305,159306],{},"条件成立，执行循环体。",[109,159308,159309],{},"执行完后回到条件判断。",[109,159311,159312],{},"条件不成立，退出循环。",[14,159314,159316],{"id":159315},"_43-while累加","4.3 while累加",[19,159318,159319],{},"计算 1 到 100 的和：",[38,159321,159323],{"className":30432,"code":159322,"language":30434,"meta":43,"style":43},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[26,159324,159325,159333,159341,159345,159357,159367,159375,159379],{"__ignoreMap":43},[47,159326,159327,159329,159331],{"class":49,"line":50},[47,159328,100202],{"class":221},[47,159330,267],{"class":217},[47,159332,55753],{"class":85},[47,159334,159335,159337,159339],{"class":49,"line":92},[47,159336,157314],{"class":221},[47,159338,267],{"class":217},[47,159340,47387],{"class":85},[47,159342,159343],{"class":49,"line":1273},[47,159344,2493],{"emptyLinePlaceholder":145},[47,159346,159347,159349,159351,159353,159355],{"class":49,"line":1288},[47,159348,108717],{"class":217},[47,159350,9531],{"class":221},[47,159352,1682],{"class":217},[47,159354,5847],{"class":85},[47,159356,3832],{"class":221},[47,159358,159359,159362,159364],{"class":49,"line":1294},[47,159360,159361],{"class":221},"    total ",[47,159363,9570],{"class":217},[47,159365,159366],{"class":221}," i\n",[47,159368,159369,159371,159373],{"class":49,"line":1308},[47,159370,159289],{"class":221},[47,159372,9570],{"class":217},[47,159374,55753],{"class":85},[47,159376,159377],{"class":49,"line":1314},[47,159378,2493],{"emptyLinePlaceholder":145},[47,159380,159381,159383],{"class":49,"line":1405},[47,159382,30469],{"class":85},[47,159384,159385],{"class":221},"(total)\n",[19,159387,159388],{},"核心思想：",[171,159390,159391,159396,159401],{},[109,159392,159393,159395],{},[26,159394,660],{}," 控制循环次数。",[109,159397,159398,159400],{},[26,159399,157415],{}," 保存累加结果。",[109,159402,159403,159404,159406],{},"每轮循环都要更新 ",[26,159405,660],{},"，否则可能死循环。",[14,159408,159410],{"id":159409},"_44-while猜数字","4.4 while猜数字",[38,159412,159414],{"className":30432,"code":159413,"language":30434,"meta":43,"style":43},"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",[26,159415,159416,159422,159426,159443,159451,159455,159463,159483,159492,159496,159508,159519,159529,159540,159546,159568],{"__ignoreMap":43},[47,159417,159418,159420],{"class":49,"line":50},[47,159419,30446],{"class":217},[47,159421,45382],{"class":221},[47,159423,159424],{"class":49,"line":92},[47,159425,2493],{"emptyLinePlaceholder":145},[47,159427,159428,159430,159432,159435,159437,159439,159441],{"class":49,"line":1273},[47,159429,159094],{"class":221},[47,159431,267],{"class":217},[47,159433,159434],{"class":221}," random.randint(",[47,159436,436],{"class":85},[47,159438,12528],{"class":221},[47,159440,530],{"class":85},[47,159442,228],{"class":221},[47,159444,159445,159447,159449],{"class":49,"line":1288},[47,159446,146745],{"class":221},[47,159448,267],{"class":217},[47,159450,47387],{"class":85},[47,159452,159453],{"class":49,"line":1294},[47,159454,2493],{"emptyLinePlaceholder":145},[47,159456,159457,159459,159461],{"class":49,"line":1308},[47,159458,108717],{"class":217},[47,159460,95346],{"class":85},[47,159462,3832],{"class":221},[47,159464,159465,159468,159470,159472,159474,159476,159478,159481],{"class":49,"line":1314},[47,159466,159467],{"class":221},"    guess ",[47,159469,267],{"class":217},[47,159471,2475],{"class":85},[47,159473,222],{"class":221},[47,159475,53875],{"class":85},[47,159477,222],{"class":221},[47,159479,159480],{"class":81},"\"请输入1到100之间的数字:\"",[47,159482,30551],{"class":221},[47,159484,159485,159488,159490],{"class":49,"line":1405},[47,159486,159487],{"class":221},"    count ",[47,159489,9570],{"class":217},[47,159491,55753],{"class":85},[47,159493,159494],{"class":49,"line":1411},[47,159495,2493],{"emptyLinePlaceholder":145},[47,159497,159498,159500,159503,159505],{"class":49,"line":1423},[47,159499,3194],{"class":217},[47,159501,159502],{"class":221}," guess ",[47,159504,1179],{"class":217},[47,159506,159507],{"class":221}," answer:\n",[47,159509,159510,159512,159514,159517],{"class":49,"line":1706},[47,159511,32505],{"class":85},[47,159513,222],{"class":221},[47,159515,159516],{"class":81},"\"猜大了\"",[47,159518,228],{"class":221},[47,159520,159521,159523,159525,159527],{"class":49,"line":1711},[47,159522,39347],{"class":217},[47,159524,159502],{"class":221},[47,159526,1129],{"class":217},[47,159528,159507],{"class":221},[47,159530,159531,159533,159535,159538],{"class":49,"line":1717},[47,159532,32505],{"class":85},[47,159534,222],{"class":221},[47,159536,159537],{"class":81},"\"猜小了\"",[47,159539,228],{"class":221},[47,159541,159542,159544],{"class":49,"line":1722},[47,159543,158076],{"class":217},[47,159545,3832],{"class":221},[47,159547,159548,159550,159552,159554,159557,159559,159561,159563,159566],{"class":49,"line":1736},[47,159549,32505],{"class":85},[47,159551,222],{"class":221},[47,159553,273],{"class":217},[47,159555,159556],{"class":81},"\"猜对了，一共猜了",[47,159558,1115],{"class":85},[47,159560,84488],{"class":221},[47,159562,1165],{"class":85},[47,159564,159565],{"class":81},"次\"",[47,159567,228],{"class":221},[47,159569,159570],{"class":49,"line":1741},[47,159571,31681],{"class":217},[19,159573,159574,159577,159578,159580],{},[26,159575,159576],{},"while True"," 表示无限循环，通常配合 ",[26,159579,2146],{}," 使用。",[14,159582,159584],{"id":159583},"_45-break和continue","4.5 break和continue",[187,159586,159588],{"id":159587},"_451-break","4.5.1 break",[19,159590,159591,159593],{},[26,159592,2146],{}," 直接结束整个循环。",[38,159595,159597],{"className":30432,"code":159596,"language":30434,"meta":43,"style":43},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[26,159598,159599,159619,159631,159635],{"__ignoreMap":43},[47,159600,159601,159603,159605,159607,159609,159611,159613,159615,159617],{"class":49,"line":50},[47,159602,3118],{"class":217},[47,159604,9531],{"class":221},[47,159606,26097],{"class":217},[47,159608,32497],{"class":85},[47,159610,222],{"class":221},[47,159612,436],{"class":85},[47,159614,12528],{"class":221},[47,159616,563],{"class":85},[47,159618,30840],{"class":221},[47,159620,159621,159623,159625,159627,159629],{"class":49,"line":92},[47,159622,3194],{"class":217},[47,159624,9531],{"class":221},[47,159626,3042],{"class":217},[47,159628,78124],{"class":85},[47,159630,3832],{"class":221},[47,159632,159633],{"class":49,"line":1273},[47,159634,31681],{"class":217},[47,159636,159637,159639],{"class":49,"line":1288},[47,159638,31353],{"class":85},[47,159640,159284],{"class":221},[19,159642,146511],{},[38,159644,159647],{"className":159645,"code":159646,"language":5280,"meta":43},[5278],"1\n2\n",[26,159648,159646],{"__ignoreMap":43},[187,159650,159652],{"id":159651},"_452-continue","4.5.2 continue",[19,159654,159655,159657],{},[26,159656,154726],{}," 跳过本轮剩余代码，进入下一轮循环。",[38,159659,159661],{"className":30432,"code":159660,"language":30434,"meta":43,"style":43},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[26,159662,159663,159683,159695,159699],{"__ignoreMap":43},[47,159664,159665,159667,159669,159671,159673,159675,159677,159679,159681],{"class":49,"line":50},[47,159666,3118],{"class":217},[47,159668,9531],{"class":221},[47,159670,26097],{"class":217},[47,159672,32497],{"class":85},[47,159674,222],{"class":221},[47,159676,436],{"class":85},[47,159678,12528],{"class":221},[47,159680,563],{"class":85},[47,159682,30840],{"class":221},[47,159684,159685,159687,159689,159691,159693],{"class":49,"line":92},[47,159686,3194],{"class":217},[47,159688,9531],{"class":221},[47,159690,3042],{"class":217},[47,159692,78124],{"class":85},[47,159694,3832],{"class":221},[47,159696,159697],{"class":49,"line":1273},[47,159698,148566],{"class":217},[47,159700,159701,159703],{"class":49,"line":1288},[47,159702,31353],{"class":85},[47,159704,159284],{"class":221},[19,159706,146511],{},[38,159708,159711],{"className":159709,"code":159710,"language":5280,"meta":43},[5278],"1\n2\n4\n5\n",[26,159712,159710],{"__ignoreMap":43},[14,159714,159716],{"id":159715},"_46-for循环","4.6 for循环",[19,159718,159719,159721],{},[26,159720,3118],{}," 常用于遍历序列。",[38,159723,159725],{"className":30432,"code":159724,"language":30434,"meta":43,"style":43},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[26,159726,159727,159736,159740,159751],{"__ignoreMap":43},[47,159728,159729,159731,159733],{"class":49,"line":50},[47,159730,146590],{"class":221},[47,159732,267],{"class":217},[47,159734,159735],{"class":81}," \"python\"\n",[47,159737,159738],{"class":49,"line":92},[47,159739,2493],{"emptyLinePlaceholder":145},[47,159741,159742,159744,159747,159749],{"class":49,"line":1273},[47,159743,3118],{"class":217},[47,159745,159746],{"class":221}," ch ",[47,159748,26097],{"class":217},[47,159750,158453],{"class":221},[47,159752,159753,159755],{"class":49,"line":1288},[47,159754,31353],{"class":85},[47,159756,159757],{"class":221},"(ch)\n",[19,159759,159760],{},"遍历列表：",[38,159762,159764],{"className":30432,"code":159763,"language":30434,"meta":43,"style":43},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[26,159765,159766,159788,159792,159802],{"__ignoreMap":43},[47,159767,159768,159771,159773,159775,159777,159779,159781,159783,159786],{"class":49,"line":50},[47,159769,159770],{"class":221},"students ",[47,159772,267],{"class":217},[47,159774,52280],{"class":221},[47,159776,149942],{"class":81},[47,159778,12528],{"class":221},[47,159780,150990],{"class":81},[47,159782,12528],{"class":221},[47,159784,159785],{"class":81},"\"小刚\"",[47,159787,33300],{"class":221},[47,159789,159790],{"class":49,"line":92},[47,159791,2493],{"emptyLinePlaceholder":145},[47,159793,159794,159796,159798,159800],{"class":49,"line":1273},[47,159795,3118],{"class":217},[47,159797,152191],{"class":221},[47,159799,26097],{"class":217},[47,159801,152196],{"class":221},[47,159803,159804,159806],{"class":49,"line":1288},[47,159805,31353],{"class":85},[47,159807,150096],{"class":221},[14,159809,159811],{"id":159810},"_47-range函数","4.7 range函数",[19,159813,159814,159817],{},[26,159815,159816],{},"range()"," 用于生成整数序列。",[38,159819,159821],{"className":30432,"code":159820,"language":30434,"meta":43,"style":43},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[26,159822,159823,159837,159855],{"__ignoreMap":43},[47,159824,159825,159827,159829,159831,159834],{"class":49,"line":50},[47,159826,33470],{"class":85},[47,159828,222],{"class":221},[47,159830,538],{"class":85},[47,159832,159833],{"class":221},")          ",[47,159835,159836],{"class":279},"# 0,1,2,3,4\n",[47,159838,159839,159841,159843,159845,159847,159849,159852],{"class":49,"line":92},[47,159840,33470],{"class":85},[47,159842,222],{"class":221},[47,159844,436],{"class":85},[47,159846,12528],{"class":221},[47,159848,538],{"class":85},[47,159850,159851],{"class":221},")       ",[47,159853,159854],{"class":279},"# 1,2,3,4\n",[47,159856,159857,159859,159861,159863,159865,159867,159869,159871,159873],{"class":49,"line":1273},[47,159858,33470],{"class":85},[47,159860,222],{"class":221},[47,159862,436],{"class":85},[47,159864,12528],{"class":221},[47,159866,665],{"class":85},[47,159868,12528],{"class":221},[47,159870,298],{"class":85},[47,159872,155715],{"class":221},[47,159874,159875],{"class":279},"# 1,3,5,7,9\n",[19,159877,159878,159879,125],{},"配合 ",[26,159880,3118],{},[38,159882,159884],{"className":30432,"code":159883,"language":30434,"meta":43,"style":43},"for i in range(1, 6):\n    print(i)\n",[26,159885,159886,159906],{"__ignoreMap":43},[47,159887,159888,159890,159892,159894,159896,159898,159900,159902,159904],{"class":49,"line":50},[47,159889,3118],{"class":217},[47,159891,9531],{"class":221},[47,159893,26097],{"class":217},[47,159895,32497],{"class":85},[47,159897,222],{"class":221},[47,159899,436],{"class":85},[47,159901,12528],{"class":221},[47,159903,563],{"class":85},[47,159905,30840],{"class":221},[47,159907,159908,159910],{"class":49,"line":92},[47,159909,31353],{"class":85},[47,159911,159284],{"class":221},[19,159913,9118,159914,159916],{},[26,159915,33470],{}," 的结束值不包含在内。",[14,159918,159920],{"id":159919},"_48-for循环求和","4.8 for循环求和",[38,159922,159924],{"className":30432,"code":159923,"language":30434,"meta":43,"style":43},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[26,159925,159926,159934,159938,159958,159966,159970],{"__ignoreMap":43},[47,159927,159928,159930,159932],{"class":49,"line":50},[47,159929,157314],{"class":221},[47,159931,267],{"class":217},[47,159933,47387],{"class":85},[47,159935,159936],{"class":49,"line":92},[47,159937,2493],{"emptyLinePlaceholder":145},[47,159939,159940,159942,159944,159946,159948,159950,159952,159954,159956],{"class":49,"line":1273},[47,159941,3118],{"class":217},[47,159943,9531],{"class":221},[47,159945,26097],{"class":217},[47,159947,32497],{"class":85},[47,159949,222],{"class":221},[47,159951,436],{"class":85},[47,159953,12528],{"class":221},[47,159955,556],{"class":85},[47,159957,30840],{"class":221},[47,159959,159960,159962,159964],{"class":49,"line":1288},[47,159961,159361],{"class":221},[47,159963,9570],{"class":217},[47,159965,159366],{"class":221},[47,159967,159968],{"class":49,"line":1294},[47,159969,2493],{"emptyLinePlaceholder":145},[47,159971,159972,159974],{"class":49,"line":1308},[47,159973,30469],{"class":85},[47,159975,159385],{"class":221},[19,159977,159978],{},"求偶数和：",[38,159980,159982],{"className":30432,"code":159981,"language":30434,"meta":43,"style":43},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[26,159983,159984,159992,159996,160016,160032,160041,160045],{"__ignoreMap":43},[47,159985,159986,159988,159990],{"class":49,"line":50},[47,159987,157314],{"class":221},[47,159989,267],{"class":217},[47,159991,47387],{"class":85},[47,159993,159994],{"class":49,"line":92},[47,159995,2493],{"emptyLinePlaceholder":145},[47,159997,159998,160000,160002,160004,160006,160008,160010,160012,160014],{"class":49,"line":1273},[47,159999,3118],{"class":217},[47,160001,9531],{"class":221},[47,160003,26097],{"class":217},[47,160005,32497],{"class":85},[47,160007,222],{"class":221},[47,160009,436],{"class":85},[47,160011,12528],{"class":221},[47,160013,556],{"class":85},[47,160015,30840],{"class":221},[47,160017,160018,160020,160022,160024,160026,160028,160030],{"class":49,"line":1288},[47,160019,3194],{"class":217},[47,160021,9531],{"class":221},[47,160023,547],{"class":217},[47,160025,14848],{"class":85},[47,160027,101613],{"class":217},[47,160029,4186],{"class":85},[47,160031,3832],{"class":221},[47,160033,160034,160037,160039],{"class":49,"line":1294},[47,160035,160036],{"class":221},"        total ",[47,160038,9570],{"class":217},[47,160040,159366],{"class":221},[47,160042,160043],{"class":49,"line":1308},[47,160044,2493],{"emptyLinePlaceholder":145},[47,160046,160047,160049],{"class":49,"line":1314},[47,160048,30469],{"class":85},[47,160050,159385],{"class":221},[19,160052,160053],{},"也可以：",[38,160055,160057],{"className":30432,"code":160056,"language":30434,"meta":43,"style":43},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[26,160058,160059,160067,160071,160095,160103,160107],{"__ignoreMap":43},[47,160060,160061,160063,160065],{"class":49,"line":50},[47,160062,157314],{"class":221},[47,160064,267],{"class":217},[47,160066,47387],{"class":85},[47,160068,160069],{"class":49,"line":92},[47,160070,2493],{"emptyLinePlaceholder":145},[47,160072,160073,160075,160077,160079,160081,160083,160085,160087,160089,160091,160093],{"class":49,"line":1273},[47,160074,3118],{"class":217},[47,160076,9531],{"class":221},[47,160078,26097],{"class":217},[47,160080,32497],{"class":85},[47,160082,222],{"class":221},[47,160084,298],{"class":85},[47,160086,12528],{"class":221},[47,160088,556],{"class":85},[47,160090,12528],{"class":221},[47,160092,298],{"class":85},[47,160094,30840],{"class":221},[47,160096,160097,160099,160101],{"class":49,"line":1288},[47,160098,159361],{"class":221},[47,160100,9570],{"class":217},[47,160102,159366],{"class":221},[47,160104,160105],{"class":49,"line":1294},[47,160106,2493],{"emptyLinePlaceholder":145},[47,160108,160109,160111],{"class":49,"line":1308},[47,160110,30469],{"class":85},[47,160112,159385],{"class":221},[14,160114,160116],{"id":160115},"_49-循环嵌套","4.9 循环嵌套",[19,160118,160119],{},"嵌套循环就是循环里面再写循环。",[38,160121,160123],{"className":30432,"code":160122,"language":30434,"meta":43,"style":43},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[26,160124,160125,160145,160165],{"__ignoreMap":43},[47,160126,160127,160129,160131,160133,160135,160137,160139,160141,160143],{"class":49,"line":50},[47,160128,3118],{"class":217},[47,160130,9531],{"class":221},[47,160132,26097],{"class":217},[47,160134,32497],{"class":85},[47,160136,222],{"class":221},[47,160138,436],{"class":85},[47,160140,12528],{"class":221},[47,160142,512],{"class":85},[47,160144,30840],{"class":221},[47,160146,160147,160149,160151,160153,160155,160157,160159,160161,160163],{"class":49,"line":92},[47,160148,3294],{"class":217},[47,160150,9593],{"class":221},[47,160152,26097],{"class":217},[47,160154,32497],{"class":85},[47,160156,222],{"class":221},[47,160158,436],{"class":85},[47,160160,12528],{"class":221},[47,160162,512],{"class":85},[47,160164,30840],{"class":221},[47,160166,160167,160169,160171,160173,160176,160178,160180,160182,160185,160187,160189,160191,160193],{"class":49,"line":1273},[47,160168,32505],{"class":85},[47,160170,222],{"class":221},[47,160172,273],{"class":217},[47,160174,160175],{"class":81},"\"i=",[47,160177,1115],{"class":85},[47,160179,660],{"class":221},[47,160181,1165],{"class":85},[47,160183,160184],{"class":81},", j=",[47,160186,1115],{"class":85},[47,160188,686],{"class":221},[47,160190,1165],{"class":85},[47,160192,470],{"class":81},[47,160194,228],{"class":221},[19,160196,160197],{},"外层循环执行一次，内层循环执行完整一轮。",[14,160199,160201],{"id":160200},"_410-九九乘法表","4.10 九九乘法表",[38,160203,160205],{"className":30432,"code":160204,"language":30434,"meta":43,"style":43},"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",[26,160206,160207,160227,160250,160302],{"__ignoreMap":43},[47,160208,160209,160211,160213,160215,160217,160219,160221,160223,160225],{"class":49,"line":50},[47,160210,3118],{"class":217},[47,160212,9531],{"class":221},[47,160214,26097],{"class":217},[47,160216,32497],{"class":85},[47,160218,222],{"class":221},[47,160220,436],{"class":85},[47,160222,12528],{"class":221},[47,160224,665],{"class":85},[47,160226,30840],{"class":221},[47,160228,160229,160231,160233,160235,160237,160239,160241,160244,160246,160248],{"class":49,"line":92},[47,160230,3294],{"class":217},[47,160232,9593],{"class":221},[47,160234,26097],{"class":217},[47,160236,32497],{"class":85},[47,160238,222],{"class":221},[47,160240,436],{"class":85},[47,160242,160243],{"class":221},", i ",[47,160245,700],{"class":217},[47,160247,25172],{"class":85},[47,160249,30840],{"class":221},[47,160251,160252,160254,160256,160258,160260,160262,160264,160266,160268,160270,160272,160274,160276,160278,160280,160282,160284,160286,160288,160290,160292,160294,160296,160298,160300],{"class":49,"line":1273},[47,160253,32505],{"class":85},[47,160255,222],{"class":221},[47,160257,273],{"class":217},[47,160259,470],{"class":81},[47,160261,1115],{"class":85},[47,160263,686],{"class":221},[47,160265,1165],{"class":85},[47,160267,674],{"class":81},[47,160269,1115],{"class":85},[47,160271,660],{"class":221},[47,160273,1165],{"class":85},[47,160275,267],{"class":81},[47,160277,1115],{"class":85},[47,160279,100202],{"class":221},[47,160281,674],{"class":217},[47,160283,3503],{"class":221},[47,160285,1165],{"class":85},[47,160287,470],{"class":81},[47,160289,12528],{"class":221},[47,160291,45855],{"class":5309},[47,160293,267],{"class":217},[47,160295,470],{"class":81},[47,160297,1324],{"class":85},[47,160299,470],{"class":81},[47,160301,228],{"class":221},[47,160303,160304,160306],{"class":49,"line":1288},[47,160305,31353],{"class":85},[47,160307,2069],{"class":221},[19,160309,160310],{},"关键点：",[171,160312,160313,160319,160325,160331],{},[109,160314,160315,160316,160318],{},"外层 ",[26,160317,660],{}," 控制行。",[109,160320,160321,160322,160324],{},"内层 ",[26,160323,686],{}," 控制列。",[109,160326,160327,160328,160330],{},"每行结束后用 ",[26,160329,146526],{}," 换行。",[109,160332,160333,160336],{},[26,160334,160335],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,160338,160340],{"id":160339},"_411-循环else","4.11 循环else",[19,160342,160343,160344,160346,160347,160349,160350,160352],{},"Python 的循环可以带 ",[26,160345,1795],{},"。当循环正常结束时执行 ",[26,160348,1795],{},"，如果被 ",[26,160351,2146],{}," 打断，则不执行。",[38,160354,160356],{"className":30432,"code":160355,"language":30434,"meta":43,"style":43},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[26,160357,160358,160378,160390,160401,160405,160411],{"__ignoreMap":43},[47,160359,160360,160362,160364,160366,160368,160370,160372,160374,160376],{"class":49,"line":50},[47,160361,3118],{"class":217},[47,160363,9531],{"class":221},[47,160365,26097],{"class":217},[47,160367,32497],{"class":85},[47,160369,222],{"class":221},[47,160371,436],{"class":85},[47,160373,12528],{"class":221},[47,160375,563],{"class":85},[47,160377,30840],{"class":221},[47,160379,160380,160382,160384,160386,160388],{"class":49,"line":92},[47,160381,3194],{"class":217},[47,160383,9531],{"class":221},[47,160385,3042],{"class":217},[47,160387,2131],{"class":85},[47,160389,3832],{"class":221},[47,160391,160392,160394,160396,160399],{"class":49,"line":1273},[47,160393,32505],{"class":85},[47,160395,222],{"class":221},[47,160397,160398],{"class":81},"\"找到了\"",[47,160400,228],{"class":221},[47,160402,160403],{"class":49,"line":1288},[47,160404,31681],{"class":217},[47,160406,160407,160409],{"class":49,"line":1294},[47,160408,1795],{"class":217},[47,160410,3832],{"class":221},[47,160412,160413,160415,160417,160420],{"class":49,"line":1308},[47,160414,31353],{"class":85},[47,160416,222],{"class":221},[47,160418,160419],{"class":81},"\"没找到\"",[47,160421,228],{"class":221},[19,160423,160424],{},"常用于搜索。",[38,160426,160428],{"className":30432,"code":160427,"language":30434,"meta":43,"style":43},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[26,160429,160430,160451,160460,160464,160476,160487,160497,160501,160507],{"__ignoreMap":43},[47,160431,160432,160435,160437,160439,160441,160443,160445,160447,160449],{"class":49,"line":50},[47,160433,160434],{"class":221},"names ",[47,160436,267],{"class":217},[47,160438,52280],{"class":221},[47,160440,149942],{"class":81},[47,160442,12528],{"class":221},[47,160444,150990],{"class":81},[47,160446,12528],{"class":221},[47,160448,159785],{"class":81},[47,160450,33300],{"class":221},[47,160452,160453,160455,160457],{"class":49,"line":92},[47,160454,111632],{"class":221},[47,160456,267],{"class":217},[47,160458,160459],{"class":81}," \"小李\"\n",[47,160461,160462],{"class":49,"line":1273},[47,160463,2493],{"emptyLinePlaceholder":145},[47,160465,160466,160468,160471,160473],{"class":49,"line":1288},[47,160467,3118],{"class":217},[47,160469,160470],{"class":221}," name ",[47,160472,26097],{"class":217},[47,160474,160475],{"class":221}," names:\n",[47,160477,160478,160480,160482,160484],{"class":49,"line":1294},[47,160479,3194],{"class":217},[47,160481,160470],{"class":221},[47,160483,3042],{"class":217},[47,160485,160486],{"class":221}," target:\n",[47,160488,160489,160491,160493,160495],{"class":49,"line":1308},[47,160490,32505],{"class":85},[47,160492,222],{"class":221},[47,160494,160398],{"class":81},[47,160496,228],{"class":221},[47,160498,160499],{"class":49,"line":1314},[47,160500,31681],{"class":217},[47,160502,160503,160505],{"class":49,"line":1405},[47,160504,1795],{"class":217},[47,160506,3832],{"class":221},[47,160508,160509,160511,160513,160515],{"class":49,"line":1411},[47,160510,31353],{"class":85},[47,160512,222],{"class":221},[47,160514,160419],{"class":81},[47,160516,228],{"class":221},[14,160518,160520],{"id":160519},"_412-小案例登录重试","4.12 小案例：登录重试",[19,160522,123346],{},[171,160524,160525,160528,160531],{},[109,160526,160527],{},"用户最多输入 3 次密码。",[109,160529,160530],{},"密码正确则登录成功。",[109,160532,160533],{},"3 次都错误则锁定账号。",[19,160535,10128],{},[38,160537,160539],{"className":30432,"code":160538,"language":30434,"meta":43,"style":43},"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",[26,160540,160541,160551,160555,160571,160587,160591,160603,160614,160618,160624,160649,160655],{"__ignoreMap":43},[47,160542,160543,160546,160548],{"class":49,"line":50},[47,160544,160545],{"class":221},"password ",[47,160547,267],{"class":217},[47,160549,160550],{"class":81}," \"123456\"\n",[47,160552,160553],{"class":49,"line":92},[47,160554,2493],{"emptyLinePlaceholder":145},[47,160556,160557,160559,160561,160563,160565,160567,160569],{"class":49,"line":1273},[47,160558,3118],{"class":217},[47,160560,9531],{"class":221},[47,160562,26097],{"class":217},[47,160564,32497],{"class":85},[47,160566,222],{"class":221},[47,160568,292],{"class":85},[47,160570,30840],{"class":221},[47,160572,160573,160576,160578,160580,160582,160585],{"class":49,"line":1288},[47,160574,160575],{"class":221},"    user_password ",[47,160577,267],{"class":217},[47,160579,60659],{"class":85},[47,160581,222],{"class":221},[47,160583,160584],{"class":81},"\"请输入密码:\"",[47,160586,228],{"class":221},[47,160588,160589],{"class":49,"line":1294},[47,160590,2493],{"emptyLinePlaceholder":145},[47,160592,160593,160595,160598,160600],{"class":49,"line":1308},[47,160594,3194],{"class":217},[47,160596,160597],{"class":221}," user_password ",[47,160599,3042],{"class":217},[47,160601,160602],{"class":221}," password:\n",[47,160604,160605,160607,160609,160612],{"class":49,"line":1314},[47,160606,32505],{"class":85},[47,160608,222],{"class":221},[47,160610,160611],{"class":81},"\"登录成功\"",[47,160613,228],{"class":221},[47,160615,160616],{"class":49,"line":1405},[47,160617,31681],{"class":217},[47,160619,160620,160622],{"class":49,"line":1411},[47,160621,158076],{"class":217},[47,160623,3832],{"class":221},[47,160625,160626,160628,160630,160632,160635,160638,160640,160642,160644,160647],{"class":49,"line":1423},[47,160627,32505],{"class":85},[47,160629,222],{"class":221},[47,160631,273],{"class":217},[47,160633,160634],{"class":81},"\"密码错误，还剩",[47,160636,160637],{"class":85},"{2",[47,160639,52325],{"class":217},[47,160641,3125],{"class":221},[47,160643,1165],{"class":85},[47,160645,160646],{"class":81},"次机会\"",[47,160648,228],{"class":221},[47,160650,160651,160653],{"class":49,"line":1706},[47,160652,1795],{"class":217},[47,160654,3832],{"class":221},[47,160656,160657,160659,160661,160664],{"class":49,"line":1711},[47,160658,31353],{"class":85},[47,160660,222],{"class":221},[47,160662,160663],{"class":81},"\"账号已锁定\"",[47,160665,228],{"class":221},[14,160667,160669],{"id":160668},"_413-小案例菜单程序","4.13 小案例：菜单程序",[38,160671,160673],{"className":30432,"code":160672,"language":30434,"meta":43,"style":43},"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",[26,160674,160675,160683,160694,160705,160716,160727,160738,160742,160757,160761,160773,160784,160796,160807,160819,160830,160842,160852,160856,160862],{"__ignoreMap":43},[47,160676,160677,160679,160681],{"class":49,"line":50},[47,160678,108717],{"class":217},[47,160680,95346],{"class":85},[47,160682,3832],{"class":221},[47,160684,160685,160687,160689,160692],{"class":49,"line":92},[47,160686,31353],{"class":85},[47,160688,222],{"class":221},[47,160690,160691],{"class":81},"\"====== 菜单 ======\"",[47,160693,228],{"class":221},[47,160695,160696,160698,160700,160703],{"class":49,"line":1273},[47,160697,31353],{"class":85},[47,160699,222],{"class":221},[47,160701,160702],{"class":81},"\"1. 查询余额\"",[47,160704,228],{"class":221},[47,160706,160707,160709,160711,160714],{"class":49,"line":1288},[47,160708,31353],{"class":85},[47,160710,222],{"class":221},[47,160712,160713],{"class":81},"\"2. 存款\"",[47,160715,228],{"class":221},[47,160717,160718,160720,160722,160725],{"class":49,"line":1294},[47,160719,31353],{"class":85},[47,160721,222],{"class":221},[47,160723,160724],{"class":81},"\"3. 取款\"",[47,160726,228],{"class":221},[47,160728,160729,160731,160733,160736],{"class":49,"line":1308},[47,160730,31353],{"class":85},[47,160732,222],{"class":221},[47,160734,160735],{"class":81},"\"0. 退出\"",[47,160737,228],{"class":221},[47,160739,160740],{"class":49,"line":1314},[47,160741,2493],{"emptyLinePlaceholder":145},[47,160743,160744,160747,160749,160751,160753,160755],{"class":49,"line":1405},[47,160745,160746],{"class":221},"    choice ",[47,160748,267],{"class":217},[47,160750,60659],{"class":85},[47,160752,222],{"class":221},[47,160754,153127],{"class":81},[47,160756,228],{"class":221},[47,160758,160759],{"class":49,"line":1411},[47,160760,2493],{"emptyLinePlaceholder":145},[47,160762,160763,160765,160767,160769,160771],{"class":49,"line":1423},[47,160764,3194],{"class":217},[47,160766,153140],{"class":221},[47,160768,3042],{"class":217},[47,160770,153145],{"class":81},[47,160772,3832],{"class":221},[47,160774,160775,160777,160779,160782],{"class":49,"line":1706},[47,160776,32505],{"class":85},[47,160778,222],{"class":221},[47,160780,160781],{"class":81},"\"余额为1000元\"",[47,160783,228],{"class":221},[47,160785,160786,160788,160790,160792,160794],{"class":49,"line":1711},[47,160787,39347],{"class":217},[47,160789,153140],{"class":221},[47,160791,3042],{"class":217},[47,160793,153164],{"class":81},[47,160795,3832],{"class":221},[47,160797,160798,160800,160802,160805],{"class":49,"line":1717},[47,160799,32505],{"class":85},[47,160801,222],{"class":221},[47,160803,160804],{"class":81},"\"存款功能\"",[47,160806,228],{"class":221},[47,160808,160809,160811,160813,160815,160817],{"class":49,"line":1722},[47,160810,39347],{"class":217},[47,160812,153140],{"class":221},[47,160814,3042],{"class":217},[47,160816,153182],{"class":81},[47,160818,3832],{"class":221},[47,160820,160821,160823,160825,160828],{"class":49,"line":1736},[47,160822,32505],{"class":85},[47,160824,222],{"class":221},[47,160826,160827],{"class":81},"\"取款功能\"",[47,160829,228],{"class":221},[47,160831,160832,160834,160836,160838,160840],{"class":49,"line":1741},[47,160833,39347],{"class":217},[47,160835,153140],{"class":221},[47,160837,3042],{"class":217},[47,160839,153236],{"class":81},[47,160841,3832],{"class":221},[47,160843,160844,160846,160848,160850],{"class":49,"line":1747},[47,160845,32505],{"class":85},[47,160847,222],{"class":221},[47,160849,153247],{"class":81},[47,160851,228],{"class":221},[47,160853,160854],{"class":49,"line":1768},[47,160855,31681],{"class":217},[47,160857,160858,160860],{"class":49,"line":1773},[47,160859,158076],{"class":217},[47,160861,3832],{"class":221},[47,160863,160864,160866,160868,160870],{"class":49,"line":1787},[47,160865,32505],{"class":85},[47,160867,222],{"class":221},[47,160869,153268],{"class":81},[47,160871,228],{"class":221},[19,160873,160874,160875,160877,160878,28439],{},"菜单类程序通常使用 ",[26,160876,159576],{},"，用户选择退出时 ",[26,160879,2146],{},[14,160881,160883],{"id":160882},"_414-易错点","4.14 易错点",[171,160885,160886,160891,160897,160905,160911],{},[109,160887,160888,160890],{},[26,160889,108717],{}," 循环必须更新控制变量。",[109,160892,160893,160896],{},[26,160894,160895],{},"range(1, 10)"," 不包含 10。",[109,160898,160899,160901,160902,160904],{},[26,160900,2146],{}," 结束整个循环，",[26,160903,154726],{}," 只跳过本轮。",[109,160906,160907,160908,160910],{},"嵌套循环中，",[26,160909,2146],{}," 只跳出当前所在的一层循环。",[109,160912,160913],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,160915,160917],{"id":160916},"_415-本章练习","4.15 本章练习",[171,160919,160920,160923,160926,160929,160932],{},[109,160921,160922],{},"输出 1 到 100。",[109,160924,160925],{},"计算 1 到 100 的偶数和。",[109,160927,160928],{},"输出 100 以内能被 3 和 5 同时整除的数。",[109,160930,160931],{},"编写猜数字游戏，限制最多猜 7 次。",[109,160933,160934],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[134,160936,160937],{},"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":43,"searchDepth":92,"depth":92,"links":160939},[160940,160941,160942,160943,160944,160948,160949,160950,160951,160952,160953,160954,160955,160956,160957],{"id":159196,"depth":92,"text":159197},{"id":159226,"depth":92,"text":159227},{"id":159315,"depth":92,"text":159316},{"id":159409,"depth":92,"text":159410},{"id":159583,"depth":92,"text":159584,"children":160945},[160946,160947],{"id":159587,"depth":1273,"text":159588},{"id":159651,"depth":1273,"text":159652},{"id":159715,"depth":92,"text":159716},{"id":159810,"depth":92,"text":159811},{"id":159919,"depth":92,"text":159920},{"id":160115,"depth":92,"text":160116},{"id":160200,"depth":92,"text":160201},{"id":160339,"depth":92,"text":160340},{"id":160519,"depth":92,"text":160520},{"id":160668,"depth":92,"text":160669},{"id":160882,"depth":92,"text":160883},{"id":160916,"depth":92,"text":160917},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159188,"description":142},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":160964,"title":160965,"body":160966,"description":142,"extension":143,"meta":162971,"navigation":145,"path":162972,"seo":162973,"stem":162974,"__hash__":162975},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":160967,"toc":162951},[160968,160971,160975,160978,160981,160995,160998,161012,161016,161018,161037,161039,161086,161088,161102,161106,161180,161183,161187,161190,161249,161257,161260,161313,161316,161320,161325,161380,161388,161438,161442,161447,161455,161554,161560,161564,161569,161572,161583,161624,161637,161641,161644,161680,161683,161696,161699,161759,161763,161767,161770,161821,161825,161828,161875,161881,161947,161950,161954,161957,162073,162076,162080,162083,162189,162193,162196,162234,162237,162279,162282,162342,162345,162349,162813,162816,162820,162847,162853,162914,162918,162948],[10,160969,160965],{"id":160970},"_5-函数基础",[14,160972,160974],{"id":160973},"_51-为什么需要函数","5.1 为什么需要函数",[19,160976,160977],{},"函数用于封装一段可以重复使用的代码。",[19,160979,160980],{},"不使用函数的问题：",[171,160982,160983,160986,160989,160992],{},[109,160984,160985],{},"重复代码多。",[109,160987,160988],{},"修改逻辑时容易漏改。",[109,160990,160991],{},"主流程不清晰。",[109,160993,160994],{},"程序越写越长，难以维护。",[19,160996,160997],{},"使用函数后的好处：",[171,160999,161000,161003,161006,161009],{},[109,161001,161002],{},"提高复用性。",[109,161004,161005],{},"提高可读性。",[109,161007,161008],{},"便于调试。",[109,161010,161011],{},"便于分工。",[14,161013,161015],{"id":161014},"_52-函数定义","5.2 函数定义",[19,161017,5274],{},[38,161019,161021],{"className":30432,"code":161020,"language":30434,"meta":43,"style":43},"def 函数名():\n    函数体\n",[26,161022,161023,161032],{"__ignoreMap":43},[47,161024,161025,161027,161030],{"class":49,"line":50},[47,161026,32001],{"class":217},[47,161028,161029],{"class":53}," 函数名",[47,161031,32007],{"class":221},[47,161033,161034],{"class":49,"line":92},[47,161035,161036],{"class":221},"    函数体\n",[19,161038,15228],{},[38,161040,161042],{"className":30432,"code":161041,"language":30434,"meta":43,"style":43},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[26,161043,161044,161053,161063,161073,161077,161081],{"__ignoreMap":43},[47,161045,161046,161048,161051],{"class":49,"line":50},[47,161047,32001],{"class":217},[47,161049,161050],{"class":53}," say_hello",[47,161052,32007],{"class":221},[47,161054,161055,161057,161059,161061],{"class":49,"line":92},[47,161056,31353],{"class":85},[47,161058,222],{"class":221},[47,161060,5937],{"class":81},[47,161062,228],{"class":221},[47,161064,161065,161067,161069,161071],{"class":49,"line":1273},[47,161066,31353],{"class":85},[47,161068,222],{"class":221},[47,161070,146693],{"class":81},[47,161072,228],{"class":221},[47,161074,161075],{"class":49,"line":1288},[47,161076,2493],{"emptyLinePlaceholder":145},[47,161078,161079],{"class":49,"line":1294},[47,161080,2493],{"emptyLinePlaceholder":145},[47,161082,161083],{"class":49,"line":1308},[47,161084,161085],{"class":221},"say_hello()\n",[19,161087,9118],{},[171,161089,161090,161093,161096,161099],{},[109,161091,161092],{},"函数必须先定义，再调用。",[109,161094,161095],{},"函数名遵循变量命名规则。",[109,161097,161098],{},"函数体需要缩进。",[109,161100,161101],{},"函数不调用就不会执行。",[14,161103,161105],{"id":161104},"_53-函数调用","5.3 函数调用",[38,161107,161109],{"className":30432,"code":161108,"language":30434,"meta":43,"style":43},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[26,161110,161111,161120,161131,161142,161153,161163,161167,161171,161176],{"__ignoreMap":43},[47,161112,161113,161115,161118],{"class":49,"line":50},[47,161114,32001],{"class":217},[47,161116,161117],{"class":53}," print_menu",[47,161119,32007],{"class":221},[47,161121,161122,161124,161126,161129],{"class":49,"line":92},[47,161123,31353],{"class":85},[47,161125,222],{"class":221},[47,161127,161128],{"class":81},"\"1. 查询\"",[47,161130,228],{"class":221},[47,161132,161133,161135,161137,161140],{"class":49,"line":1273},[47,161134,31353],{"class":85},[47,161136,222],{"class":221},[47,161138,161139],{"class":81},"\"2. 添加\"",[47,161141,228],{"class":221},[47,161143,161144,161146,161148,161151],{"class":49,"line":1288},[47,161145,31353],{"class":85},[47,161147,222],{"class":221},[47,161149,161150],{"class":81},"\"3. 删除\"",[47,161152,228],{"class":221},[47,161154,161155,161157,161159,161161],{"class":49,"line":1294},[47,161156,31353],{"class":85},[47,161158,222],{"class":221},[47,161160,160735],{"class":81},[47,161162,228],{"class":221},[47,161164,161165],{"class":49,"line":1308},[47,161166,2493],{"emptyLinePlaceholder":145},[47,161168,161169],{"class":49,"line":1314},[47,161170,2493],{"emptyLinePlaceholder":145},[47,161172,161173],{"class":49,"line":1405},[47,161174,161175],{"class":221},"print_menu()\n",[47,161177,161178],{"class":49,"line":1411},[47,161179,161175],{"class":221},[19,161181,161182],{},"函数可以多次调用，每次调用都会执行函数体。",[14,161184,161186],{"id":161185},"_54-参数","5.4 参数",[19,161188,161189],{},"参数用于向函数传递数据。",[38,161191,161193],{"className":30432,"code":161192,"language":30434,"meta":43,"style":43},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[26,161194,161195,161204,161224,161228,161232,161241],{"__ignoreMap":43},[47,161196,161197,161199,161201],{"class":49,"line":50},[47,161198,32001],{"class":217},[47,161200,161050],{"class":53},[47,161202,161203],{"class":221},"(name):\n",[47,161205,161206,161208,161210,161212,161214,161216,161218,161220,161222],{"class":49,"line":92},[47,161207,31353],{"class":85},[47,161209,222],{"class":221},[47,161211,273],{"class":217},[47,161213,157108],{"class":81},[47,161215,1115],{"class":85},[47,161217,79864],{"class":221},[47,161219,1165],{"class":85},[47,161221,470],{"class":81},[47,161223,228],{"class":221},[47,161225,161226],{"class":49,"line":1273},[47,161227,2493],{"emptyLinePlaceholder":145},[47,161229,161230],{"class":49,"line":1288},[47,161231,2493],{"emptyLinePlaceholder":145},[47,161233,161234,161237,161239],{"class":49,"line":1294},[47,161235,161236],{"class":221},"say_hello(",[47,161238,149942],{"class":81},[47,161240,228],{"class":221},[47,161242,161243,161245,161247],{"class":49,"line":1308},[47,161244,161236],{"class":221},[47,161246,150990],{"class":81},[47,161248,228],{"class":221},[19,161250,161251,161253,161254,161256],{},[26,161252,79864],{}," 是形参，",[26,161255,149942],{}," 是实参。",[19,161258,161259],{},"多个参数：",[38,161261,161263],{"className":30432,"code":161262,"language":30434,"meta":43,"style":43},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[26,161264,161265,161273,161286,161292,161296,161300],{"__ignoreMap":43},[47,161266,161267,161269,161271],{"class":49,"line":50},[47,161268,32001],{"class":217},[47,161270,5302],{"class":53},[47,161272,151147],{"class":221},[47,161274,161275,161278,161280,161282,161284],{"class":49,"line":92},[47,161276,161277],{"class":221},"    result ",[47,161279,267],{"class":217},[47,161281,10962],{"class":221},[47,161283,700],{"class":217},[47,161285,151158],{"class":221},[47,161287,161288,161290],{"class":49,"line":1273},[47,161289,31353],{"class":85},[47,161291,76639],{"class":221},[47,161293,161294],{"class":49,"line":1288},[47,161295,2493],{"emptyLinePlaceholder":145},[47,161297,161298],{"class":49,"line":1294},[47,161299,2493],{"emptyLinePlaceholder":145},[47,161301,161302,161305,161307,161309,161311],{"class":49,"line":1308},[47,161303,161304],{"class":221},"add(",[47,161306,665],{"class":85},[47,161308,12528],{"class":221},[47,161310,919],{"class":85},[47,161312,228],{"class":221},[19,161314,161315],{},"调用时参数数量必须匹配。",[14,161317,161319],{"id":161318},"_55-返回值","5.5 返回值",[19,161321,161322,161324],{},[26,161323,17139],{}," 用于把函数内部的结果返回给调用者。",[38,161326,161328],{"className":30432,"code":161327,"language":30434,"meta":43,"style":43},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[26,161329,161330,161338,161348,161352,161356,161374],{"__ignoreMap":43},[47,161331,161332,161334,161336],{"class":49,"line":50},[47,161333,32001],{"class":217},[47,161335,5302],{"class":53},[47,161337,151147],{"class":221},[47,161339,161340,161342,161344,161346],{"class":49,"line":92},[47,161341,4183],{"class":217},[47,161343,10962],{"class":221},[47,161345,700],{"class":217},[47,161347,151158],{"class":221},[47,161349,161350],{"class":49,"line":1273},[47,161351,2493],{"emptyLinePlaceholder":145},[47,161353,161354],{"class":49,"line":1288},[47,161355,2493],{"emptyLinePlaceholder":145},[47,161357,161358,161361,161363,161366,161368,161370,161372],{"class":49,"line":1294},[47,161359,161360],{"class":221},"result ",[47,161362,267],{"class":217},[47,161364,161365],{"class":221}," add(",[47,161367,665],{"class":85},[47,161369,12528],{"class":221},[47,161371,919],{"class":85},[47,161373,228],{"class":221},[47,161375,161376,161378],{"class":49,"line":1308},[47,161377,30469],{"class":85},[47,161379,76639],{"class":221},[19,161381,161382,161383,161385,161386,28439],{},"如果函数没有写 ",[26,161384,17139],{},"，默认返回 ",[26,161387,95740],{},[38,161389,161391],{"className":30432,"code":161390,"language":30434,"meta":43,"style":43},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[26,161392,161393,161401,161411,161415,161419,161428],{"__ignoreMap":43},[47,161394,161395,161397,161399],{"class":49,"line":50},[47,161396,32001],{"class":217},[47,161398,161050],{"class":53},[47,161400,32007],{"class":221},[47,161402,161403,161405,161407,161409],{"class":49,"line":92},[47,161404,31353],{"class":85},[47,161406,222],{"class":221},[47,161408,5937],{"class":81},[47,161410,228],{"class":221},[47,161412,161413],{"class":49,"line":1273},[47,161414,2493],{"emptyLinePlaceholder":145},[47,161416,161417],{"class":49,"line":1288},[47,161418,2493],{"emptyLinePlaceholder":145},[47,161420,161421,161423,161425],{"class":49,"line":1294},[47,161422,161360],{"class":221},[47,161424,267],{"class":217},[47,161426,161427],{"class":221}," say_hello()\n",[47,161429,161430,161432,161435],{"class":49,"line":1308},[47,161431,30469],{"class":85},[47,161433,161434],{"class":221},"(result)  ",[47,161436,161437],{"class":279},"# None\n",[14,161439,161441],{"id":161440},"_56-return的作用","5.6 return的作用",[19,161443,161444,161446],{},[26,161445,17139],{}," 有两个作用：",[171,161448,161449,161452],{},[109,161450,161451],{},"返回结果。",[109,161453,161454],{},"结束函数。",[38,161456,161458],{"className":30432,"code":161457,"language":30434,"meta":43,"style":43},"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",[26,161459,161460,161470,161482,161489,161493,161505,161512,161516,161523,161527,161531,161542],{"__ignoreMap":43},[47,161461,161462,161464,161467],{"class":49,"line":50},[47,161463,32001],{"class":217},[47,161465,161466],{"class":53}," check_age",[47,161468,161469],{"class":221},"(age):\n",[47,161471,161472,161474,161476,161478,161480],{"class":49,"line":92},[47,161473,3194],{"class":217},[47,161475,15800],{"class":221},[47,161477,1129],{"class":217},[47,161479,4186],{"class":85},[47,161481,3832],{"class":221},[47,161483,161484,161486],{"class":49,"line":1273},[47,161485,14845],{"class":217},[47,161487,161488],{"class":81}," \"年龄不合法\"\n",[47,161490,161491],{"class":49,"line":1288},[47,161492,2493],{"emptyLinePlaceholder":145},[47,161494,161495,161497,161499,161501,161503],{"class":49,"line":1294},[47,161496,3194],{"class":217},[47,161498,15800],{"class":221},[47,161500,1804],{"class":217},[47,161502,156339],{"class":85},[47,161504,3832],{"class":221},[47,161506,161507,161509],{"class":49,"line":1308},[47,161508,14845],{"class":217},[47,161510,161511],{"class":81}," \"成年人\"\n",[47,161513,161514],{"class":49,"line":1314},[47,161515,2493],{"emptyLinePlaceholder":145},[47,161517,161518,161520],{"class":49,"line":1405},[47,161519,4183],{"class":217},[47,161521,161522],{"class":81}," \"未成年人\"\n",[47,161524,161525],{"class":49,"line":1411},[47,161526,2493],{"emptyLinePlaceholder":145},[47,161528,161529],{"class":49,"line":1423},[47,161530,2493],{"emptyLinePlaceholder":145},[47,161532,161533,161535,161538,161540],{"class":49,"line":1706},[47,161534,30469],{"class":85},[47,161536,161537],{"class":221},"(check_age(",[47,161539,919],{"class":85},[47,161541,30551],{"class":221},[47,161543,161544,161546,161548,161550,161552],{"class":49,"line":1711},[47,161545,30469],{"class":85},[47,161547,161537],{"class":221},[47,161549,751],{"class":217},[47,161551,436],{"class":85},[47,161553,30551],{"class":221},[19,161555,161556,161557,161559],{},"函数执行到 ",[26,161558,17139],{}," 后，后面的代码不会继续执行。",[14,161561,161563],{"id":161562},"_57-none","5.7 None",[19,161565,161566,161568],{},[26,161567,95740],{}," 表示空值或没有结果。",[19,161570,161571],{},"常见使用场景：",[171,161573,161574,161577,161580],{},[109,161575,161576],{},"函数没有返回值。",[109,161578,161579],{},"变量暂时没有具体值。",[109,161581,161582],{},"表示查询不到结果。",[38,161584,161586],{"className":30432,"code":161585,"language":30434,"meta":43,"style":43},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[26,161587,161588,161596,161600,161613],{"__ignoreMap":43},[47,161589,161590,161592,161594],{"class":49,"line":50},[47,161591,161360],{"class":221},[47,161593,267],{"class":217},[47,161595,152226],{"class":85},[47,161597,161598],{"class":49,"line":92},[47,161599,2493],{"emptyLinePlaceholder":145},[47,161601,161602,161604,161607,161609,161611],{"class":49,"line":1273},[47,161603,1625],{"class":217},[47,161605,161606],{"class":221}," result ",[47,161608,38981],{"class":217},[47,161610,38987],{"class":85},[47,161612,3832],{"class":221},[47,161614,161615,161617,161619,161622],{"class":49,"line":1288},[47,161616,31353],{"class":85},[47,161618,222],{"class":221},[47,161620,161621],{"class":81},"\"没有数据\"",[47,161623,228],{"class":221},[19,161625,161626,161627,161629,161630,161633,161634,28439],{},"判断 ",[26,161628,95740],{}," 推荐使用 ",[26,161631,161632],{},"is None","，不要写成 ",[26,161635,161636],{},"== None",[14,161638,161640],{"id":161639},"_58-函数文档字符串","5.8 函数文档字符串",[19,161642,161643],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[38,161645,161647],{"className":30432,"code":161646,"language":30434,"meta":43,"style":43},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[26,161648,161649,161659,161664],{"__ignoreMap":43},[47,161650,161651,161653,161656],{"class":49,"line":50},[47,161652,32001],{"class":217},[47,161654,161655],{"class":53}," calculate_bmi",[47,161657,161658],{"class":221},"(weight, height):\n",[47,161660,161661],{"class":49,"line":92},[47,161662,161663],{"class":81},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[47,161665,161666,161668,161671,161673,161676,161678],{"class":49,"line":1273},[47,161667,4183],{"class":217},[47,161669,161670],{"class":221}," weight ",[47,161672,803],{"class":217},[47,161674,161675],{"class":221}," height ",[47,161677,10754],{"class":217},[47,161679,47777],{"class":85},[19,161681,161682],{},"查看说明：",[38,161684,161686],{"className":30432,"code":161685,"language":30434,"meta":43,"style":43},"help(calculate_bmi)\n",[26,161687,161688],{"__ignoreMap":43},[47,161689,161690,161693],{"class":49,"line":50},[47,161691,161692],{"class":85},"help",[47,161694,161695],{"class":221},"(calculate_bmi)\n",[19,161697,161698],{},"较完整的写法：",[38,161700,161702],{"className":30432,"code":161701,"language":30434,"meta":43,"style":43},"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",[26,161703,161704,161712,161717,161722,161726,161731,161736,161741,161745],{"__ignoreMap":43},[47,161705,161706,161708,161710],{"class":49,"line":50},[47,161707,32001],{"class":217},[47,161709,161655],{"class":53},[47,161711,161658],{"class":221},[47,161713,161714],{"class":49,"line":92},[47,161715,161716],{"class":81},"    \"\"\"\n",[47,161718,161719],{"class":49,"line":1273},[47,161720,161721],{"class":81},"    计算BMI。\n",[47,161723,161724],{"class":49,"line":1288},[47,161725,2493],{"emptyLinePlaceholder":145},[47,161727,161728],{"class":49,"line":1294},[47,161729,161730],{"class":81},"    :param weight: 体重，单位kg\n",[47,161732,161733],{"class":49,"line":1308},[47,161734,161735],{"class":81},"    :param height: 身高，单位m\n",[47,161737,161738],{"class":49,"line":1314},[47,161739,161740],{"class":81},"    :return: BMI数值\n",[47,161742,161743],{"class":49,"line":1405},[47,161744,161716],{"class":81},[47,161746,161747,161749,161751,161753,161755,161757],{"class":49,"line":1411},[47,161748,4183],{"class":217},[47,161750,161670],{"class":221},[47,161752,803],{"class":217},[47,161754,161675],{"class":221},[47,161756,10754],{"class":217},[47,161758,47777],{"class":85},[14,161760,161762],{"id":161761},"_59-变量作用域","5.9 变量作用域",[187,161764,161766],{"id":161765},"_591-局部变量","5.9.1 局部变量",[19,161768,161769],{},"在函数内部定义的变量，只能在函数内部使用。",[38,161771,161773],{"className":30432,"code":161772,"language":30434,"meta":43,"style":43},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[26,161774,161775,161784,161792,161798,161802,161806,161811],{"__ignoreMap":43},[47,161776,161777,161779,161782],{"class":49,"line":50},[47,161778,32001],{"class":217},[47,161780,161781],{"class":53}," test",[47,161783,32007],{"class":221},[47,161785,161786,161788,161790],{"class":49,"line":92},[47,161787,45647],{"class":221},[47,161789,267],{"class":217},[47,161791,58482],{"class":85},[47,161793,161794,161796],{"class":49,"line":1273},[47,161795,31353],{"class":85},[47,161797,235],{"class":221},[47,161799,161800],{"class":49,"line":1288},[47,161801,2493],{"emptyLinePlaceholder":145},[47,161803,161804],{"class":49,"line":1294},[47,161805,2493],{"emptyLinePlaceholder":145},[47,161807,161808],{"class":49,"line":1308},[47,161809,161810],{"class":221},"test()\n",[47,161812,161813,161815,161818],{"class":49,"line":1314},[47,161814,30469],{"class":85},[47,161816,161817],{"class":221},"(num)  ",[47,161819,161820],{"class":279},"# 报错\n",[187,161822,161824],{"id":161823},"_592-全局变量","5.9.2 全局变量",[19,161826,161827],{},"在函数外部定义的变量，可以在函数内部读取。",[38,161829,161831],{"className":30432,"code":161830,"language":30434,"meta":43,"style":43},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[26,161832,161833,161841,161845,161849,161857,161863,161867,161871],{"__ignoreMap":43},[47,161834,161835,161837,161839],{"class":49,"line":50},[47,161836,146590],{"class":221},[47,161838,267],{"class":217},[47,161840,149407],{"class":81},[47,161842,161843],{"class":49,"line":92},[47,161844,2493],{"emptyLinePlaceholder":145},[47,161846,161847],{"class":49,"line":1273},[47,161848,2493],{"emptyLinePlaceholder":145},[47,161850,161851,161853,161855],{"class":49,"line":1288},[47,161852,32001],{"class":217},[47,161854,161050],{"class":53},[47,161856,32007],{"class":221},[47,161858,161859,161861],{"class":49,"line":1294},[47,161860,31353],{"class":85},[47,161862,150714],{"class":221},[47,161864,161865],{"class":49,"line":1308},[47,161866,2493],{"emptyLinePlaceholder":145},[47,161868,161869],{"class":49,"line":1314},[47,161870,2493],{"emptyLinePlaceholder":145},[47,161872,161873],{"class":49,"line":1405},[47,161874,161085],{"class":221},[19,161876,161877,161878,28439],{},"如果要在函数内部修改全局变量，需要 ",[26,161879,161880],{},"global",[38,161882,161884],{"className":30432,"code":161883,"language":30434,"meta":43,"style":43},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[26,161885,161886,161894,161898,161902,161911,161919,161927,161931,161935,161940],{"__ignoreMap":43},[47,161887,161888,161890,161892],{"class":49,"line":50},[47,161889,146745],{"class":221},[47,161891,267],{"class":217},[47,161893,47387],{"class":85},[47,161895,161896],{"class":49,"line":92},[47,161897,2493],{"emptyLinePlaceholder":145},[47,161899,161900],{"class":49,"line":1273},[47,161901,2493],{"emptyLinePlaceholder":145},[47,161903,161904,161906,161909],{"class":49,"line":1288},[47,161905,32001],{"class":217},[47,161907,161908],{"class":53}," add_count",[47,161910,32007],{"class":221},[47,161912,161913,161916],{"class":49,"line":1294},[47,161914,161915],{"class":217},"    global",[47,161917,161918],{"class":221}," count\n",[47,161920,161921,161923,161925],{"class":49,"line":1308},[47,161922,159487],{"class":221},[47,161924,9570],{"class":217},[47,161926,55753],{"class":85},[47,161928,161929],{"class":49,"line":1314},[47,161930,2493],{"emptyLinePlaceholder":145},[47,161932,161933],{"class":49,"line":1405},[47,161934,2493],{"emptyLinePlaceholder":145},[47,161936,161937],{"class":49,"line":1411},[47,161938,161939],{"class":221},"add_count()\n",[47,161941,161942,161944],{"class":49,"line":1423},[47,161943,30469],{"class":85},[47,161945,161946],{"class":221},"(count)\n",[19,161948,161949],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,161951,161953],{"id":161952},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,161955,161956],{},"一个函数中可以调用另一个函数。",[38,161958,161960],{"className":30432,"code":161959,"language":30434,"meta":43,"style":43},"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",[26,161961,161962,161971,161985,161989,161993,162002,162007,162027,162048,162052,162056,162060],{"__ignoreMap":43},[47,161963,161964,161966,161969],{"class":49,"line":50},[47,161965,32001],{"class":217},[47,161967,161968],{"class":53}," print_line",[47,161970,32007],{"class":221},[47,161972,161973,161975,161977,161979,161981,161983],{"class":49,"line":92},[47,161974,31353],{"class":85},[47,161976,222],{"class":221},[47,161978,32537],{"class":81},[47,161980,6611],{"class":217},[47,161982,78719],{"class":85},[47,161984,228],{"class":221},[47,161986,161987],{"class":49,"line":1273},[47,161988,2493],{"emptyLinePlaceholder":145},[47,161990,161991],{"class":49,"line":1288},[47,161992,2493],{"emptyLinePlaceholder":145},[47,161994,161995,161997,162000],{"class":49,"line":1294},[47,161996,32001],{"class":217},[47,161998,161999],{"class":53}," print_info",[47,162001,149429],{"class":221},[47,162003,162004],{"class":49,"line":1308},[47,162005,162006],{"class":221},"    print_line()\n",[47,162008,162009,162011,162013,162015,162017,162019,162021,162023,162025],{"class":49,"line":1314},[47,162010,31353],{"class":85},[47,162012,222],{"class":221},[47,162014,273],{"class":217},[47,162016,156736],{"class":81},[47,162018,1115],{"class":85},[47,162020,79864],{"class":221},[47,162022,1165],{"class":85},[47,162024,470],{"class":81},[47,162026,228],{"class":221},[47,162028,162029,162031,162033,162035,162038,162040,162042,162044,162046],{"class":49,"line":1405},[47,162030,31353],{"class":85},[47,162032,222],{"class":221},[47,162034,273],{"class":217},[47,162036,162037],{"class":81},"\"年龄:",[47,162039,1115],{"class":85},[47,162041,70275],{"class":221},[47,162043,1165],{"class":85},[47,162045,470],{"class":81},[47,162047,228],{"class":221},[47,162049,162050],{"class":49,"line":1411},[47,162051,162006],{"class":221},[47,162053,162054],{"class":49,"line":1423},[47,162055,2493],{"emptyLinePlaceholder":145},[47,162057,162058],{"class":49,"line":1706},[47,162059,2493],{"emptyLinePlaceholder":145},[47,162061,162062,162065,162067,162069,162071],{"class":49,"line":1711},[47,162063,162064],{"class":221},"print_info(",[47,162066,149942],{"class":81},[47,162068,12528],{"class":221},[47,162070,869],{"class":85},[47,162072,228],{"class":221},[19,162074,162075],{},"这种方式可以把小功能组合成大功能。",[14,162077,162079],{"id":162078},"_511-参数检查","5.11 参数检查",[19,162081,162082],{},"函数内部可以检查参数是否合法。",[38,162084,162086],{"className":30432,"code":162085,"language":30434,"meta":43,"style":43},"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",[26,162087,162088,162097,162109,162115,162125,162129,162133,162150,162154,162166,162177,162183],{"__ignoreMap":43},[47,162089,162090,162092,162095],{"class":49,"line":50},[47,162091,32001],{"class":217},[47,162093,162094],{"class":53}," divide",[47,162096,151147],{"class":221},[47,162098,162099,162101,162103,162105,162107],{"class":49,"line":92},[47,162100,3194],{"class":217},[47,162102,10975],{"class":221},[47,162104,3042],{"class":217},[47,162106,4186],{"class":85},[47,162108,3832],{"class":221},[47,162110,162111,162113],{"class":49,"line":1273},[47,162112,14845],{"class":217},[47,162114,152226],{"class":85},[47,162116,162117,162119,162121,162123],{"class":49,"line":1288},[47,162118,4183],{"class":217},[47,162120,10962],{"class":221},[47,162122,803],{"class":217},[47,162124,151158],{"class":221},[47,162126,162127],{"class":49,"line":1294},[47,162128,2493],{"emptyLinePlaceholder":145},[47,162130,162131],{"class":49,"line":1308},[47,162132,2493],{"emptyLinePlaceholder":145},[47,162134,162135,162137,162139,162142,162144,162146,162148],{"class":49,"line":1314},[47,162136,161360],{"class":221},[47,162138,267],{"class":217},[47,162140,162141],{"class":221}," divide(",[47,162143,665],{"class":85},[47,162145,12528],{"class":221},[47,162147,411],{"class":85},[47,162149,228],{"class":221},[47,162151,162152],{"class":49,"line":1405},[47,162153,2493],{"emptyLinePlaceholder":145},[47,162155,162156,162158,162160,162162,162164],{"class":49,"line":1411},[47,162157,1625],{"class":217},[47,162159,161606],{"class":221},[47,162161,38981],{"class":217},[47,162163,38987],{"class":85},[47,162165,3832],{"class":221},[47,162167,162168,162170,162172,162175],{"class":49,"line":1423},[47,162169,31353],{"class":85},[47,162171,222],{"class":221},[47,162173,162174],{"class":81},"\"除数不能为0\"",[47,162176,228],{"class":221},[47,162178,162179,162181],{"class":49,"line":1706},[47,162180,1795],{"class":217},[47,162182,3832],{"class":221},[47,162184,162185,162187],{"class":49,"line":1711},[47,162186,31353],{"class":85},[47,162188,76639],{"class":221},[14,162190,162192],{"id":162191},"_512-类型提示","5.12 类型提示",[19,162194,162195],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[38,162197,162199],{"className":30432,"code":162198,"language":30434,"meta":43,"style":43},"def add(a: int, b: int) -> int:\n    return a + b\n",[26,162200,162201,162224],{"__ignoreMap":43},[47,162202,162203,162205,162207,162210,162212,162215,162217,162220,162222],{"class":49,"line":50},[47,162204,32001],{"class":217},[47,162206,5302],{"class":53},[47,162208,162209],{"class":221},"(a: ",[47,162211,225],{"class":85},[47,162213,162214],{"class":221},", b: ",[47,162216,225],{"class":85},[47,162218,162219],{"class":221},") -> ",[47,162221,225],{"class":85},[47,162223,3832],{"class":221},[47,162225,162226,162228,162230,162232],{"class":49,"line":92},[47,162227,4183],{"class":217},[47,162229,10962],{"class":221},[47,162231,700],{"class":217},[47,162233,151158],{"class":221},[19,162235,162236],{},"字符串参数：",[38,162238,162240],{"className":30432,"code":162239,"language":30434,"meta":43,"style":43},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[26,162241,162242,162259],{"__ignoreMap":43},[47,162243,162244,162246,162248,162251,162253,162255,162257],{"class":49,"line":50},[47,162245,32001],{"class":217},[47,162247,161050],{"class":53},[47,162249,162250],{"class":221},"(name: ",[47,162252,1393],{"class":85},[47,162254,162219],{"class":221},[47,162256,95740],{"class":85},[47,162258,3832],{"class":221},[47,162260,162261,162263,162265,162267,162269,162271,162273,162275,162277],{"class":49,"line":92},[47,162262,31353],{"class":85},[47,162264,222],{"class":221},[47,162266,273],{"class":217},[47,162268,157108],{"class":81},[47,162270,1115],{"class":85},[47,162272,79864],{"class":221},[47,162274,1165],{"class":85},[47,162276,470],{"class":81},[47,162278,228],{"class":221},[19,162280,162281],{},"列表参数：",[38,162283,162285],{"className":30432,"code":162284,"language":30434,"meta":43,"style":43},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[26,162286,162287,162306,162314,162326,162335],{"__ignoreMap":43},[47,162288,162289,162291,162294,162297,162299,162302,162304],{"class":49,"line":50},[47,162290,32001],{"class":217},[47,162292,162293],{"class":53}," get_total",[47,162295,162296],{"class":221},"(numbers: list[",[47,162298,225],{"class":85},[47,162300,162301],{"class":221},"]) -> ",[47,162303,225],{"class":85},[47,162305,3832],{"class":221},[47,162307,162308,162310,162312],{"class":49,"line":92},[47,162309,159361],{"class":221},[47,162311,267],{"class":217},[47,162313,47387],{"class":85},[47,162315,162316,162318,162321,162323],{"class":49,"line":1273},[47,162317,3294],{"class":217},[47,162319,162320],{"class":221}," number ",[47,162322,26097],{"class":217},[47,162324,162325],{"class":221}," numbers:\n",[47,162327,162328,162330,162332],{"class":49,"line":1288},[47,162329,160036],{"class":221},[47,162331,9570],{"class":217},[47,162333,162334],{"class":221}," number\n",[47,162336,162337,162339],{"class":49,"line":1294},[47,162338,4183],{"class":217},[47,162340,162341],{"class":221}," total\n",[19,162343,162344],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,162346,162348],{"id":162347},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[38,162350,162352],{"className":30432,"code":162351,"language":30434,"meta":43,"style":43},"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",[26,162353,162354,162364,162368,162372,162380,162391,162401,162411,162421,162431,162435,162439,162448,162470,162474,162478,162487,162493,162513,162525,162536,162540,162549,162560,162565,162569,162573,162582,162588,162607,162619,162629,162633,162644,162654,162658,162666,162677,162681,162685,162689,162697,162702,162716,162720,162732,162737,162749,162754,162766,162771,162783,162793,162797,162803],{"__ignoreMap":43},[47,162355,162356,162359,162361],{"class":49,"line":50},[47,162357,162358],{"class":221},"balance ",[47,162360,267],{"class":217},[47,162362,162363],{"class":85}," 1000\n",[47,162365,162366],{"class":49,"line":92},[47,162367,2493],{"emptyLinePlaceholder":145},[47,162369,162370],{"class":49,"line":1273},[47,162371,2493],{"emptyLinePlaceholder":145},[47,162373,162374,162376,162378],{"class":49,"line":1288},[47,162375,32001],{"class":217},[47,162377,152087],{"class":53},[47,162379,32007],{"class":221},[47,162381,162382,162384,162386,162389],{"class":49,"line":1294},[47,162383,31353],{"class":85},[47,162385,222],{"class":221},[47,162387,162388],{"class":81},"\"====== ATM ======\"",[47,162390,228],{"class":221},[47,162392,162393,162395,162397,162399],{"class":49,"line":1308},[47,162394,31353],{"class":85},[47,162396,222],{"class":221},[47,162398,160702],{"class":81},[47,162400,228],{"class":221},[47,162402,162403,162405,162407,162409],{"class":49,"line":1314},[47,162404,31353],{"class":85},[47,162406,222],{"class":221},[47,162408,160713],{"class":81},[47,162410,228],{"class":221},[47,162412,162413,162415,162417,162419],{"class":49,"line":1405},[47,162414,31353],{"class":85},[47,162416,222],{"class":221},[47,162418,160724],{"class":81},[47,162420,228],{"class":221},[47,162422,162423,162425,162427,162429],{"class":49,"line":1411},[47,162424,31353],{"class":85},[47,162426,222],{"class":221},[47,162428,160735],{"class":81},[47,162430,228],{"class":221},[47,162432,162433],{"class":49,"line":1423},[47,162434,2493],{"emptyLinePlaceholder":145},[47,162436,162437],{"class":49,"line":1706},[47,162438,2493],{"emptyLinePlaceholder":145},[47,162440,162441,162443,162446],{"class":49,"line":1711},[47,162442,32001],{"class":217},[47,162444,162445],{"class":53}," show_balance",[47,162447,32007],{"class":221},[47,162449,162450,162452,162454,162456,162459,162461,162464,162466,162468],{"class":49,"line":1717},[47,162451,31353],{"class":85},[47,162453,222],{"class":221},[47,162455,273],{"class":217},[47,162457,162458],{"class":81},"\"当前余额:",[47,162460,1115],{"class":85},[47,162462,162463],{"class":221},"balance",[47,162465,1165],{"class":85},[47,162467,157066],{"class":81},[47,162469,228],{"class":221},[47,162471,162472],{"class":49,"line":1722},[47,162473,2493],{"emptyLinePlaceholder":145},[47,162475,162476],{"class":49,"line":1736},[47,162477,2493],{"emptyLinePlaceholder":145},[47,162479,162480,162482,162485],{"class":49,"line":1741},[47,162481,32001],{"class":217},[47,162483,162484],{"class":53}," save_money",[47,162486,32007],{"class":221},[47,162488,162489,162491],{"class":49,"line":1747},[47,162490,161915],{"class":217},[47,162492,150153],{"class":221},[47,162494,162495,162498,162500,162502,162504,162506,162508,162511],{"class":49,"line":1768},[47,162496,162497],{"class":221},"    money ",[47,162499,267],{"class":217},[47,162501,109851],{"class":85},[47,162503,222],{"class":221},[47,162505,53875],{"class":85},[47,162507,222],{"class":221},[47,162509,162510],{"class":81},"\"请输入存款金额:\"",[47,162512,30551],{"class":221},[47,162514,162515,162517,162519,162521,162523],{"class":49,"line":1773},[47,162516,3194],{"class":217},[47,162518,150196],{"class":221},[47,162520,1682],{"class":217},[47,162522,4186],{"class":85},[47,162524,3832],{"class":221},[47,162526,162527,162529,162531,162534],{"class":49,"line":1787},[47,162528,32505],{"class":85},[47,162530,222],{"class":221},[47,162532,162533],{"class":81},"\"金额必须大于0\"",[47,162535,228],{"class":221},[47,162537,162538],{"class":49,"line":1792},[47,162539,152415],{"class":217},[47,162541,162542,162545,162547],{"class":49,"line":1821},[47,162543,162544],{"class":221},"    balance ",[47,162546,9570],{"class":217},[47,162548,150229],{"class":221},[47,162550,162551,162553,162555,162558],{"class":49,"line":1826},[47,162552,31353],{"class":85},[47,162554,222],{"class":221},[47,162556,162557],{"class":81},"\"存款成功\"",[47,162559,228],{"class":221},[47,162561,162562],{"class":49,"line":1843},[47,162563,162564],{"class":221},"    show_balance()\n",[47,162566,162567],{"class":49,"line":1848},[47,162568,2493],{"emptyLinePlaceholder":145},[47,162570,162571],{"class":49,"line":1853},[47,162572,2493],{"emptyLinePlaceholder":145},[47,162574,162575,162577,162580],{"class":49,"line":1858},[47,162576,32001],{"class":217},[47,162578,162579],{"class":53}," withdraw_money",[47,162581,32007],{"class":221},[47,162583,162584,162586],{"class":49,"line":1872},[47,162585,161915],{"class":217},[47,162587,150153],{"class":221},[47,162589,162590,162592,162594,162596,162598,162600,162602,162605],{"class":49,"line":1877},[47,162591,162497],{"class":221},[47,162593,267],{"class":217},[47,162595,109851],{"class":85},[47,162597,222],{"class":221},[47,162599,53875],{"class":85},[47,162601,222],{"class":221},[47,162603,162604],{"class":81},"\"请输入取款金额:\"",[47,162606,30551],{"class":221},[47,162608,162609,162611,162613,162615,162617],{"class":49,"line":2670},[47,162610,3194],{"class":217},[47,162612,150196],{"class":221},[47,162614,1682],{"class":217},[47,162616,4186],{"class":85},[47,162618,3832],{"class":221},[47,162620,162621,162623,162625,162627],{"class":49,"line":2684},[47,162622,32505],{"class":85},[47,162624,222],{"class":221},[47,162626,162533],{"class":81},[47,162628,228],{"class":221},[47,162630,162631],{"class":49,"line":2692},[47,162632,152415],{"class":217},[47,162634,162635,162637,162639,162641],{"class":49,"line":2697},[47,162636,3194],{"class":217},[47,162638,150196],{"class":221},[47,162640,1179],{"class":217},[47,162642,162643],{"class":221}," balance:\n",[47,162645,162646,162648,162650,162652],{"class":49,"line":2703},[47,162647,32505],{"class":85},[47,162649,222],{"class":221},[47,162651,150291],{"class":81},[47,162653,228],{"class":221},[47,162655,162656],{"class":49,"line":2709},[47,162657,152415],{"class":217},[47,162659,162660,162662,162664],{"class":49,"line":2714},[47,162661,162544],{"class":221},[47,162663,150306],{"class":217},[47,162665,150229],{"class":221},[47,162667,162668,162670,162672,162675],{"class":49,"line":8041},[47,162669,31353],{"class":85},[47,162671,222],{"class":221},[47,162673,162674],{"class":81},"\"取款成功\"",[47,162676,228],{"class":221},[47,162678,162679],{"class":49,"line":8065},[47,162680,162564],{"class":221},[47,162682,162683],{"class":49,"line":8070},[47,162684,2493],{"emptyLinePlaceholder":145},[47,162686,162687],{"class":49,"line":8076},[47,162688,2493],{"emptyLinePlaceholder":145},[47,162690,162691,162693,162695],{"class":49,"line":8103},[47,162692,108717],{"class":217},[47,162694,95346],{"class":85},[47,162696,3832],{"class":221},[47,162698,162699],{"class":49,"line":8108},[47,162700,162701],{"class":221},"    show_menu()\n",[47,162703,162704,162706,162708,162710,162712,162714],{"class":49,"line":8114},[47,162705,160746],{"class":221},[47,162707,267],{"class":217},[47,162709,60659],{"class":85},[47,162711,222],{"class":221},[47,162713,153127],{"class":81},[47,162715,228],{"class":221},[47,162717,162718],{"class":49,"line":8126},[47,162719,2493],{"emptyLinePlaceholder":145},[47,162721,162722,162724,162726,162728,162730],{"class":49,"line":8138},[47,162723,3194],{"class":217},[47,162725,153140],{"class":221},[47,162727,3042],{"class":217},[47,162729,153145],{"class":81},[47,162731,3832],{"class":221},[47,162733,162734],{"class":49,"line":8150},[47,162735,162736],{"class":221},"        show_balance()\n",[47,162738,162739,162741,162743,162745,162747],{"class":49,"line":9809},[47,162740,39347],{"class":217},[47,162742,153140],{"class":221},[47,162744,3042],{"class":217},[47,162746,153164],{"class":81},[47,162748,3832],{"class":221},[47,162750,162751],{"class":49,"line":9834},[47,162752,162753],{"class":221},"        save_money()\n",[47,162755,162756,162758,162760,162762,162764],{"class":49,"line":9857},[47,162757,39347],{"class":217},[47,162759,153140],{"class":221},[47,162761,3042],{"class":217},[47,162763,153182],{"class":81},[47,162765,3832],{"class":221},[47,162767,162768],{"class":49,"line":9881},[47,162769,162770],{"class":221},"        withdraw_money()\n",[47,162772,162773,162775,162777,162779,162781],{"class":49,"line":9886},[47,162774,39347],{"class":217},[47,162776,153140],{"class":221},[47,162778,3042],{"class":217},[47,162780,153236],{"class":81},[47,162782,3832],{"class":221},[47,162784,162785,162787,162789,162791],{"class":49,"line":9891},[47,162786,32505],{"class":85},[47,162788,222],{"class":221},[47,162790,153247],{"class":81},[47,162792,228],{"class":221},[47,162794,162795],{"class":49,"line":9896},[47,162796,31681],{"class":217},[47,162798,162799,162801],{"class":49,"line":9905},[47,162800,158076],{"class":217},[47,162802,3832],{"class":221},[47,162804,162805,162807,162809,162811],{"class":49,"line":9910},[47,162806,32505],{"class":85},[47,162808,222],{"class":221},[47,162810,153268],{"class":81},[47,162812,228],{"class":221},[19,162814,162815],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,162817,162819],{"id":162818},"_514-易错点","5.14 易错点",[171,162821,162822,162825,162828,162833,162838,162841],{},[109,162823,162824],{},"函数定义后必须调用才会执行。",[109,162826,162827],{},"函数名后面有括号才是调用。",[109,162829,162830,162832],{},[26,162831,17139],{}," 后面的代码不会执行。",[109,162834,162835,162836,28439],{},"没有返回值的函数默认返回 ",[26,162837,95740],{},[109,162839,162840],{},"局部变量不能在函数外部访问。",[109,162842,162843,162844,162846],{},"不要滥用 ",[26,162845,161880],{},"，更好的方式是让函数返回新值。",[19,162848,162849,162850,162852],{},"例如不用 ",[26,162851,161880],{}," 改写存款：",[38,162854,162856],{"className":30432,"code":162855,"language":30434,"meta":43,"style":43},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[26,162857,162858,162867,162878,162882,162886,162894,162907],{"__ignoreMap":43},[47,162859,162860,162862,162864],{"class":49,"line":50},[47,162861,32001],{"class":217},[47,162863,162484],{"class":53},[47,162865,162866],{"class":221},"(balance, money):\n",[47,162868,162869,162871,162874,162876],{"class":49,"line":92},[47,162870,4183],{"class":217},[47,162872,162873],{"class":221}," balance ",[47,162875,700],{"class":217},[47,162877,150229],{"class":221},[47,162879,162880],{"class":49,"line":1273},[47,162881,2493],{"emptyLinePlaceholder":145},[47,162883,162884],{"class":49,"line":1288},[47,162885,2493],{"emptyLinePlaceholder":145},[47,162887,162888,162890,162892],{"class":49,"line":1294},[47,162889,162358],{"class":221},[47,162891,267],{"class":217},[47,162893,162363],{"class":85},[47,162895,162896,162898,162900,162903,162905],{"class":49,"line":1308},[47,162897,162358],{"class":221},[47,162899,267],{"class":217},[47,162901,162902],{"class":221}," save_money(balance, ",[47,162904,1816],{"class":85},[47,162906,228],{"class":221},[47,162908,162909,162911],{"class":49,"line":1314},[47,162910,30469],{"class":85},[47,162912,162913],{"class":221},"(balance)\n",[14,162915,162917],{"id":162916},"_515-本章练习","5.15 本章练习",[171,162919,162920,162927,162933,162939,162945],{},[109,162921,162922,162923,162926],{},"定义函数 ",[26,162924,162925],{},"print_student(name, age)","，输出学生信息。",[109,162928,162922,162929,162932],{},[26,162930,162931],{},"get_max(a, b, c)","，返回三个数中的最大值。",[109,162934,162922,162935,162938],{},[26,162936,162937],{},"is_even(num)","，判断一个数是否为偶数。",[109,162940,162922,162941,162944],{},[26,162942,162943],{},"calculate_bmi(weight, height)","，返回 BMI。",[109,162946,162947],{},"把第 4 章的菜单程序拆分成多个函数。",[134,162949,162950],{},"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":43,"searchDepth":92,"depth":92,"links":162952},[162953,162954,162955,162956,162957,162958,162959,162960,162961,162965,162966,162967,162968,162969,162970],{"id":160973,"depth":92,"text":160974},{"id":161014,"depth":92,"text":161015},{"id":161104,"depth":92,"text":161105},{"id":161185,"depth":92,"text":161186},{"id":161318,"depth":92,"text":161319},{"id":161440,"depth":92,"text":161441},{"id":161562,"depth":92,"text":161563},{"id":161639,"depth":92,"text":161640},{"id":161761,"depth":92,"text":161762,"children":162962},[162963,162964],{"id":161765,"depth":1273,"text":161766},{"id":161823,"depth":1273,"text":161824},{"id":161952,"depth":92,"text":161953},{"id":162078,"depth":92,"text":162079},{"id":162191,"depth":92,"text":162192},{"id":162347,"depth":92,"text":162348},{"id":162818,"depth":92,"text":162819},{"id":162916,"depth":92,"text":162917},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":160965,"description":142},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":162977,"title":162978,"body":162979,"description":142,"extension":143,"meta":166023,"navigation":145,"path":166024,"seo":166025,"stem":166026,"__hash__":166027},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":162980,"toc":166004},[162981,162984,162988,162991,162994,163098,163101,163105,163108,163188,163191,163195,163198,163258,163261,163297,163300,163315,163319,163392,163395,163450,163453,163523,163526,163610,163620,163678,163682,163727,163730,163756,163759,163865,163869,163872,163914,163917,163981,163984,163988,163991,164052,164055,164085,164088,164126,164130,164133,164142,164145,164269,164272,164313,164317,164320,164331,164371,164374,164389,164394,164397,164464,164467,164557,164561,164564,164612,164615,164642,164644,164674,164677,164697,164700,164731,164734,164767,164771,164774,164798,164801,164825,164828,164852,164856,164859,164989,164992,165072,165075,165150,165154,165157,165207,165210,165252,165255,165279,165281,165305,165308,165363,165366,165432,165436,165439,165442,165480,165483,165536,165539,165585,165588,165621,165624,165628,165947,165951,165980,165984,166001],[10,162982,162978],{"id":162983},"_6-数据容器",[14,162985,162987],{"id":162986},"_61-什么是数据容器","6.1 什么是数据容器",[19,162989,162990],{},"数据容器用于一次保存多个数据。",[19,162992,162993],{},"常见容器：",[357,162995,162996,163013],{},[360,162997,162998],{},[363,162999,163000,163002,163005,163008,163011],{},[366,163001,25825],{},[366,163003,163004],{},"是否有序",[366,163006,163007],{},"是否可变",[366,163009,163010],{},"是否允许重复",[366,163012,27546],{},[404,163014,163015,163033,163049,163064,163081],{},[363,163016,163017,163020,163023,163026,163029],{},[409,163018,163019],{},"list列表",[409,163021,163022],{},"有序",[409,163024,163025],{},"可变",[409,163027,163028],{},"允许",[409,163030,163031],{},[26,163032,155311],{},[363,163034,163035,163038,163040,163043,163045],{},[409,163036,163037],{},"tuple元组",[409,163039,163022],{},[409,163041,163042],{},"不可变",[409,163044,163028],{},[409,163046,163047],{},[26,163048,155324],{},[363,163050,163051,163054,163056,163058,163060],{},[409,163052,163053],{},"str字符串",[409,163055,163022],{},[409,163057,163042],{},[409,163059,163028],{},[409,163061,163062],{},[26,163063,155934],{},[363,163065,163066,163069,163072,163074,163077],{},[409,163067,163068],{},"set集合",[409,163070,163071],{},"无序",[409,163073,163025],{},[409,163075,163076],{},"不允许",[409,163078,163079],{},[26,163080,155349],{},[363,163082,163083,163086,163088,163090,163093],{},[409,163084,163085],{},"dict字典",[409,163087,163022],{},[409,163089,163025],{},[409,163091,163092],{},"key不允许重复",[409,163094,163095],{},[26,163096,163097],{},"{\"name\": \"小明\"}",[19,163099,163100],{},"Python 3.7 之后，字典保持插入顺序。",[14,163102,163104],{"id":163103},"_62-列表list","6.2 列表list",[19,163106,163107],{},"列表用于保存一组有顺序的数据。",[38,163109,163111],{"className":30432,"code":163110,"language":30434,"meta":43,"style":43},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[26,163112,163113,163133,163158,163179],{"__ignoreMap":43},[47,163114,163115,163117,163119,163121,163123,163125,163127,163129,163131],{"class":49,"line":50},[47,163116,160434],{"class":221},[47,163118,267],{"class":217},[47,163120,52280],{"class":221},[47,163122,149942],{"class":81},[47,163124,12528],{"class":221},[47,163126,150990],{"class":81},[47,163128,12528],{"class":221},[47,163130,159785],{"class":81},[47,163132,33300],{"class":221},[47,163134,163135,163138,163140,163142,163144,163146,163148,163150,163152,163154,163156],{"class":49,"line":92},[47,163136,163137],{"class":221},"numbers ",[47,163139,267],{"class":217},[47,163141,52280],{"class":221},[47,163143,436],{"class":85},[47,163145,12528],{"class":221},[47,163147,298],{"class":85},[47,163149,12528],{"class":221},[47,163151,292],{"class":85},[47,163153,12528],{"class":221},[47,163155,512],{"class":85},[47,163157,33300],{"class":221},[47,163159,163160,163163,163165,163167,163169,163171,163173,163175,163177],{"class":49,"line":1273},[47,163161,163162],{"class":221},"mixed ",[47,163164,267],{"class":217},[47,163166,52280],{"class":221},[47,163168,149942],{"class":81},[47,163170,12528],{"class":221},[47,163172,869],{"class":85},[47,163174,12528],{"class":221},[47,163176,31530],{"class":85},[47,163178,33300],{"class":221},[47,163180,163181,163184,163186],{"class":49,"line":1288},[47,163182,163183],{"class":221},"empty ",[47,163185,267],{"class":217},[47,163187,51892],{"class":221},[19,163189,163190],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,163192,163194],{"id":163193},"_63-列表索引","6.3 列表索引",[19,163196,163197],{},"正向索引从 0 开始：",[38,163199,163201],{"className":30432,"code":163200,"language":30434,"meta":43,"style":43},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[26,163202,163203,163223,163227,163238,163248],{"__ignoreMap":43},[47,163204,163205,163207,163209,163211,163213,163215,163217,163219,163221],{"class":49,"line":50},[47,163206,160434],{"class":221},[47,163208,267],{"class":217},[47,163210,52280],{"class":221},[47,163212,149942],{"class":81},[47,163214,12528],{"class":221},[47,163216,150990],{"class":81},[47,163218,12528],{"class":221},[47,163220,159785],{"class":81},[47,163222,33300],{"class":221},[47,163224,163225],{"class":49,"line":92},[47,163226,2493],{"emptyLinePlaceholder":145},[47,163228,163229,163231,163234,163236],{"class":49,"line":1273},[47,163230,30469],{"class":85},[47,163232,163233],{"class":221},"(names[",[47,163235,411],{"class":85},[47,163237,4750],{"class":221},[47,163239,163240,163242,163244,163246],{"class":49,"line":1288},[47,163241,30469],{"class":85},[47,163243,163233],{"class":221},[47,163245,436],{"class":85},[47,163247,4750],{"class":221},[47,163249,163250,163252,163254,163256],{"class":49,"line":1294},[47,163251,30469],{"class":85},[47,163253,163233],{"class":221},[47,163255,298],{"class":85},[47,163257,4750],{"class":221},[19,163259,163260],{},"反向索引从 -1 开始：",[38,163262,163264],{"className":30432,"code":163263,"language":30434,"meta":43,"style":43},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[26,163265,163266,163282],{"__ignoreMap":43},[47,163267,163268,163270,163272,163274,163276,163279],{"class":49,"line":50},[47,163269,30469],{"class":85},[47,163271,163233],{"class":221},[47,163273,751],{"class":217},[47,163275,436],{"class":85},[47,163277,163278],{"class":221},"])  ",[47,163280,163281],{"class":279},"# 小刚\n",[47,163283,163284,163286,163288,163290,163292,163294],{"class":49,"line":92},[47,163285,30469],{"class":85},[47,163287,163233],{"class":221},[47,163289,751],{"class":217},[47,163291,298],{"class":85},[47,163293,163278],{"class":221},[47,163295,163296],{"class":279},"# 小红\n",[19,163298,163299],{},"索引越界会报错：",[38,163301,163303],{"className":30432,"code":163302,"language":30434,"meta":43,"style":43},"print(names[3])\n",[26,163304,163305],{"__ignoreMap":43},[47,163306,163307,163309,163311,163313],{"class":49,"line":50},[47,163308,30469],{"class":85},[47,163310,163233],{"class":221},[47,163312,292],{"class":85},[47,163314,4750],{"class":221},[14,163316,163318],{"id":163317},"_64-列表常用方法","6.4 列表常用方法",[38,163320,163322],{"className":30432,"code":163321,"language":30434,"meta":43,"style":43},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[26,163323,163324,163340,163344,163353,163367,163381,163385],{"__ignoreMap":43},[47,163325,163326,163328,163330,163332,163334,163336,163338],{"class":49,"line":50},[47,163327,160434],{"class":221},[47,163329,267],{"class":217},[47,163331,52280],{"class":221},[47,163333,149942],{"class":81},[47,163335,12528],{"class":221},[47,163337,150990],{"class":81},[47,163339,33300],{"class":221},[47,163341,163342],{"class":49,"line":92},[47,163343,2493],{"emptyLinePlaceholder":145},[47,163345,163346,163349,163351],{"class":49,"line":1273},[47,163347,163348],{"class":221},"names.append(",[47,163350,159785],{"class":81},[47,163352,228],{"class":221},[47,163354,163355,163358,163360,163362,163365],{"class":49,"line":1288},[47,163356,163357],{"class":221},"names.insert(",[47,163359,436],{"class":85},[47,163361,12528],{"class":221},[47,163363,163364],{"class":81},"\"小李\"",[47,163366,228],{"class":221},[47,163368,163369,163372,163374,163376,163379],{"class":49,"line":1294},[47,163370,163371],{"class":221},"names.extend([",[47,163373,8776],{"class":81},[47,163375,12528],{"class":221},[47,163377,163378],{"class":81},"\"小赵\"",[47,163380,4750],{"class":221},[47,163382,163383],{"class":49,"line":1308},[47,163384,2493],{"emptyLinePlaceholder":145},[47,163386,163387,163389],{"class":49,"line":1314},[47,163388,30469],{"class":85},[47,163390,163391],{"class":221},"(names)\n",[19,163393,163394],{},"删除元素：",[38,163396,163398],{"className":30432,"code":163397,"language":30434,"meta":43,"style":43},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[26,163399,163400,163409,163419,163433,163445],{"__ignoreMap":43},[47,163401,163402,163405,163407],{"class":49,"line":50},[47,163403,163404],{"class":221},"names.remove(",[47,163406,150990],{"class":81},[47,163408,228],{"class":221},[47,163410,163411,163414,163416],{"class":49,"line":92},[47,163412,163413],{"class":221},"last ",[47,163415,267],{"class":217},[47,163417,163418],{"class":221}," names.pop()\n",[47,163420,163421,163424,163426,163429,163431],{"class":49,"line":1273},[47,163422,163423],{"class":221},"first ",[47,163425,267],{"class":217},[47,163427,163428],{"class":221}," names.pop(",[47,163430,411],{"class":85},[47,163432,228],{"class":221},[47,163434,163435,163438,163441,163443],{"class":49,"line":1288},[47,163436,163437],{"class":217},"del",[47,163439,163440],{"class":221}," names[",[47,163442,411],{"class":85},[47,163444,33300],{"class":221},[47,163446,163447],{"class":49,"line":1294},[47,163448,163449],{"class":221},"names.clear()\n",[19,163451,163452],{},"查询和统计：",[38,163454,163456],{"className":30432,"code":163455,"language":30434,"meta":43,"style":43},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[26,163457,163458,163486,163490,163501,163512],{"__ignoreMap":43},[47,163459,163460,163462,163464,163466,163468,163470,163472,163474,163476,163478,163480,163482,163484],{"class":49,"line":50},[47,163461,163137],{"class":221},[47,163463,267],{"class":217},[47,163465,52280],{"class":221},[47,163467,436],{"class":85},[47,163469,12528],{"class":221},[47,163471,298],{"class":85},[47,163473,12528],{"class":221},[47,163475,292],{"class":85},[47,163477,12528],{"class":221},[47,163479,298],{"class":85},[47,163481,12528],{"class":221},[47,163483,512],{"class":85},[47,163485,33300],{"class":221},[47,163487,163488],{"class":49,"line":92},[47,163489,2493],{"emptyLinePlaceholder":145},[47,163491,163492,163494,163497,163499],{"class":49,"line":1273},[47,163493,30469],{"class":85},[47,163495,163496],{"class":221},"(numbers.index(",[47,163498,292],{"class":85},[47,163500,30551],{"class":221},[47,163502,163503,163505,163508,163510],{"class":49,"line":1288},[47,163504,30469],{"class":85},[47,163506,163507],{"class":221},"(numbers.count(",[47,163509,298],{"class":85},[47,163511,30551],{"class":221},[47,163513,163514,163516,163518,163520],{"class":49,"line":1294},[47,163515,30469],{"class":85},[47,163517,222],{"class":221},[47,163519,7451],{"class":85},[47,163521,163522],{"class":221},"(numbers))\n",[19,163524,163525],{},"排序：",[38,163527,163529],{"className":30432,"code":163528,"language":30434,"meta":43,"style":43},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[26,163530,163531,163555,163559,163564,163571,163575,163589,163595,163599,163604],{"__ignoreMap":43},[47,163532,163533,163535,163537,163539,163541,163543,163545,163547,163549,163551,163553],{"class":49,"line":50},[47,163534,163137],{"class":221},[47,163536,267],{"class":217},[47,163538,52280],{"class":221},[47,163540,292],{"class":85},[47,163542,12528],{"class":221},[47,163544,436],{"class":85},[47,163546,12528],{"class":221},[47,163548,538],{"class":85},[47,163550,12528],{"class":221},[47,163552,298],{"class":85},[47,163554,33300],{"class":221},[47,163556,163557],{"class":49,"line":92},[47,163558,2493],{"emptyLinePlaceholder":145},[47,163560,163561],{"class":49,"line":1273},[47,163562,163563],{"class":221},"numbers.sort()\n",[47,163565,163566,163568],{"class":49,"line":1288},[47,163567,30469],{"class":85},[47,163569,163570],{"class":221},"(numbers)\n",[47,163572,163573],{"class":49,"line":1294},[47,163574,2493],{"emptyLinePlaceholder":145},[47,163576,163577,163580,163583,163585,163587],{"class":49,"line":1308},[47,163578,163579],{"class":221},"numbers.sort(",[47,163581,163582],{"class":5309},"reverse",[47,163584,267],{"class":217},[47,163586,31530],{"class":85},[47,163588,228],{"class":221},[47,163590,163591,163593],{"class":49,"line":1314},[47,163592,30469],{"class":85},[47,163594,163570],{"class":221},[47,163596,163597],{"class":49,"line":1405},[47,163598,2493],{"emptyLinePlaceholder":145},[47,163600,163601],{"class":49,"line":1411},[47,163602,163603],{"class":221},"numbers.reverse()\n",[47,163605,163606,163608],{"class":49,"line":1423},[47,163607,30469],{"class":85},[47,163609,163570],{"class":221},[19,163611,163612,163615,163616,163619],{},[26,163613,163614],{},"sort()"," 会修改原列表，",[26,163617,163618],{},"sorted()"," 返回新列表。",[38,163621,163623],{"className":30432,"code":163622,"language":30434,"meta":43,"style":43},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[26,163624,163625,163649,163661,163665,163671],{"__ignoreMap":43},[47,163626,163627,163629,163631,163633,163635,163637,163639,163641,163643,163645,163647],{"class":49,"line":50},[47,163628,163137],{"class":221},[47,163630,267],{"class":217},[47,163632,52280],{"class":221},[47,163634,292],{"class":85},[47,163636,12528],{"class":221},[47,163638,436],{"class":85},[47,163640,12528],{"class":221},[47,163642,538],{"class":85},[47,163644,12528],{"class":221},[47,163646,298],{"class":85},[47,163648,33300],{"class":221},[47,163650,163651,163654,163656,163659],{"class":49,"line":92},[47,163652,163653],{"class":221},"new_numbers ",[47,163655,267],{"class":217},[47,163657,163658],{"class":85}," sorted",[47,163660,163570],{"class":221},[47,163662,163663],{"class":49,"line":1273},[47,163664,2493],{"emptyLinePlaceholder":145},[47,163666,163667,163669],{"class":49,"line":1288},[47,163668,30469],{"class":85},[47,163670,163570],{"class":221},[47,163672,163673,163675],{"class":49,"line":1294},[47,163674,30469],{"class":85},[47,163676,163677],{"class":221},"(new_numbers)\n",[14,163679,163681],{"id":163680},"_65-列表遍历","6.5 列表遍历",[38,163683,163685],{"className":30432,"code":163684,"language":30434,"meta":43,"style":43},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[26,163686,163687,163707,163711,163721],{"__ignoreMap":43},[47,163688,163689,163691,163693,163695,163697,163699,163701,163703,163705],{"class":49,"line":50},[47,163690,160434],{"class":221},[47,163692,267],{"class":217},[47,163694,52280],{"class":221},[47,163696,149942],{"class":81},[47,163698,12528],{"class":221},[47,163700,150990],{"class":81},[47,163702,12528],{"class":221},[47,163704,159785],{"class":81},[47,163706,33300],{"class":221},[47,163708,163709],{"class":49,"line":92},[47,163710,2493],{"emptyLinePlaceholder":145},[47,163712,163713,163715,163717,163719],{"class":49,"line":1273},[47,163714,3118],{"class":217},[47,163716,160470],{"class":221},[47,163718,26097],{"class":217},[47,163720,160475],{"class":221},[47,163722,163723,163725],{"class":49,"line":1288},[47,163724,31353],{"class":85},[47,163726,150714],{"class":221},[19,163728,163729],{},"需要索引时：",[38,163731,163733],{"className":30432,"code":163732,"language":30434,"meta":43,"style":43},"for index, name in enumerate(names):\n    print(index, name)\n",[26,163734,163735,163749],{"__ignoreMap":43},[47,163736,163737,163739,163742,163744,163746],{"class":49,"line":50},[47,163738,3118],{"class":217},[47,163740,163741],{"class":221}," index, name ",[47,163743,26097],{"class":217},[47,163745,31660],{"class":85},[47,163747,163748],{"class":221},"(names):\n",[47,163750,163751,163753],{"class":49,"line":92},[47,163752,31353],{"class":85},[47,163754,163755],{"class":221},"(index, name)\n",[19,163757,163758],{},"统计总分：",[38,163760,163762],{"className":30432,"code":163761,"language":30434,"meta":43,"style":43},"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",[26,163763,163764,163789,163797,163801,163812,163820,163824,163841],{"__ignoreMap":43},[47,163765,163766,163769,163771,163773,163775,163777,163779,163781,163783,163785,163787],{"class":49,"line":50},[47,163767,163768],{"class":221},"scores ",[47,163770,267],{"class":217},[47,163772,52280],{"class":221},[47,163774,1081],{"class":85},[47,163776,12528],{"class":221},[47,163778,955],{"class":85},[47,163780,12528],{"class":221},[47,163782,473],{"class":85},[47,163784,12528],{"class":221},[47,163786,780],{"class":85},[47,163788,33300],{"class":221},[47,163790,163791,163793,163795],{"class":49,"line":92},[47,163792,157314],{"class":221},[47,163794,267],{"class":217},[47,163796,47387],{"class":85},[47,163798,163799],{"class":49,"line":1273},[47,163800,2493],{"emptyLinePlaceholder":145},[47,163802,163803,163805,163807,163809],{"class":49,"line":1288},[47,163804,3118],{"class":217},[47,163806,157837],{"class":221},[47,163808,26097],{"class":217},[47,163810,163811],{"class":221}," scores:\n",[47,163813,163814,163816,163818],{"class":49,"line":1294},[47,163815,159361],{"class":221},[47,163817,9570],{"class":217},[47,163819,1673],{"class":221},[47,163821,163822],{"class":49,"line":1308},[47,163823,2493],{"emptyLinePlaceholder":145},[47,163825,163826,163829,163831,163834,163836,163838],{"class":49,"line":1314},[47,163827,163828],{"class":221},"avg ",[47,163830,267],{"class":217},[47,163832,163833],{"class":221}," total ",[47,163835,803],{"class":217},[47,163837,7424],{"class":85},[47,163839,163840],{"class":221},"(scores)\n",[47,163842,163843,163845,163847,163849,163852,163854,163857,163859,163861,163863],{"class":49,"line":1405},[47,163844,30469],{"class":85},[47,163846,222],{"class":221},[47,163848,273],{"class":217},[47,163850,163851],{"class":81},"\"平均分:",[47,163853,1115],{"class":85},[47,163855,163856],{"class":221},"avg",[47,163858,157213],{"class":217},[47,163860,1165],{"class":85},[47,163862,470],{"class":81},[47,163864,228],{"class":221},[14,163866,163868],{"id":163867},"_66-元组tuple","6.6 元组tuple",[19,163870,163871],{},"元组和列表类似，但不可修改。",[38,163873,163875],{"className":30432,"code":163874,"language":30434,"meta":43,"style":43},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[26,163876,163877,163894],{"__ignoreMap":43},[47,163878,163879,163882,163884,163886,163888,163890,163892],{"class":49,"line":50},[47,163880,163881],{"class":221},"point ",[47,163883,267],{"class":217},[47,163885,1752],{"class":221},[47,163887,665],{"class":85},[47,163889,12528],{"class":221},[47,163891,919],{"class":85},[47,163893,228],{"class":221},[47,163895,163896,163898,163900,163902,163904,163906,163908,163910,163912],{"class":49,"line":92},[47,163897,116368],{"class":221},[47,163899,267],{"class":217},[47,163901,1752],{"class":221},[47,163903,149942],{"class":81},[47,163905,12528],{"class":221},[47,163907,869],{"class":85},[47,163909,12528],{"class":221},[47,163911,69323],{"class":81},[47,163913,228],{"class":221},[19,163915,163916],{},"单元素元组必须加逗号：",[38,163918,163920],{"className":30432,"code":163919,"language":30434,"meta":43,"style":43},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[26,163921,163922,163936,163949,163953,163967],{"__ignoreMap":43},[47,163923,163924,163927,163929,163931,163933],{"class":49,"line":50},[47,163925,163926],{"class":221},"t1 ",[47,163928,267],{"class":217},[47,163930,1752],{"class":221},[47,163932,665],{"class":85},[47,163934,163935],{"class":221},",)\n",[47,163937,163938,163941,163943,163945,163947],{"class":49,"line":92},[47,163939,163940],{"class":221},"t2 ",[47,163942,267],{"class":217},[47,163944,1752],{"class":221},[47,163946,665],{"class":85},[47,163948,228],{"class":221},[47,163950,163951],{"class":49,"line":1273},[47,163952,2493],{"emptyLinePlaceholder":145},[47,163954,163955,163957,163959,163961,163964],{"class":49,"line":1288},[47,163956,30469],{"class":85},[47,163958,222],{"class":221},[47,163960,103161],{"class":85},[47,163962,163963],{"class":221},"(t1))  ",[47,163965,163966],{"class":279},"# tuple\n",[47,163968,163969,163971,163973,163975,163978],{"class":49,"line":1294},[47,163970,30469],{"class":85},[47,163972,222],{"class":221},[47,163974,103161],{"class":85},[47,163976,163977],{"class":221},"(t2))  ",[47,163979,163980],{"class":279},"# int\n",[19,163982,163983],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,163985,163987],{"id":163986},"_67-字符串str","6.7 字符串str",[19,163989,163990],{},"字符串也是序列，可以索引、切片和遍历。",[38,163992,163994],{"className":30432,"code":163993,"language":30434,"meta":43,"style":43},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[26,163995,163996,164004,164008,164019,164031,164035,164046],{"__ignoreMap":43},[47,163997,163998,164000,164002],{"class":49,"line":50},[47,163999,156498],{"class":221},[47,164001,267],{"class":217},[47,164003,159735],{"class":81},[47,164005,164006],{"class":49,"line":92},[47,164007,2493],{"emptyLinePlaceholder":145},[47,164009,164010,164012,164015,164017],{"class":49,"line":1273},[47,164011,30469],{"class":85},[47,164013,164014],{"class":221},"(text[",[47,164016,411],{"class":85},[47,164018,4750],{"class":221},[47,164020,164021,164023,164025,164027,164029],{"class":49,"line":1288},[47,164022,30469],{"class":85},[47,164024,164014],{"class":221},[47,164026,751],{"class":217},[47,164028,436],{"class":85},[47,164030,4750],{"class":221},[47,164032,164033],{"class":49,"line":1294},[47,164034,2493],{"emptyLinePlaceholder":145},[47,164036,164037,164039,164041,164043],{"class":49,"line":1308},[47,164038,3118],{"class":217},[47,164040,159746],{"class":221},[47,164042,26097],{"class":217},[47,164044,164045],{"class":221}," text:\n",[47,164047,164048,164050],{"class":49,"line":1314},[47,164049,31353],{"class":85},[47,164051,159757],{"class":221},[19,164053,164054],{},"字符串不可变：",[38,164056,164058],{"className":30432,"code":164057,"language":30434,"meta":43,"style":43},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[26,164059,164060,164068],{"__ignoreMap":43},[47,164061,164062,164064,164066],{"class":49,"line":50},[47,164063,156498],{"class":221},[47,164065,267],{"class":217},[47,164067,159735],{"class":81},[47,164069,164070,164073,164075,164077,164079,164082],{"class":49,"line":92},[47,164071,164072],{"class":221},"text[",[47,164074,411],{"class":85},[47,164076,4536],{"class":221},[47,164078,267],{"class":217},[47,164080,164081],{"class":81}," \"P\"",[47,164083,164084],{"class":279},"  # 报错\n",[19,164086,164087],{},"如果要得到新字符串：",[38,164089,164091],{"className":30432,"code":164090,"language":30434,"meta":43,"style":43},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[26,164092,164093,164101,164119],{"__ignoreMap":43},[47,164094,164095,164097,164099],{"class":49,"line":50},[47,164096,156498],{"class":221},[47,164098,267],{"class":217},[47,164100,159735],{"class":81},[47,164102,164103,164105,164107,164109,164111,164114,164116],{"class":49,"line":92},[47,164104,156498],{"class":221},[47,164106,267],{"class":217},[47,164108,164081],{"class":81},[47,164110,45620],{"class":217},[47,164112,164113],{"class":221}," text[",[47,164115,436],{"class":85},[47,164117,164118],{"class":221},":]\n",[47,164120,164121,164123],{"class":49,"line":1273},[47,164122,30469],{"class":85},[47,164124,164125],{"class":221},"(text)\n",[14,164127,164129],{"id":164128},"_68-切片","6.8 切片",[19,164131,164132],{},"切片用于从序列中取一部分。",[38,164134,164136],{"className":30432,"code":164135,"language":30434,"meta":43,"style":43},"序列[开始:结束:步长]\n",[26,164137,164138],{"__ignoreMap":43},[47,164139,164140],{"class":49,"line":50},[47,164141,164135],{"class":221},[19,164143,164144],{},"结束位置不包含。",[38,164146,164148],{"className":30432,"code":164147,"language":30434,"meta":43,"style":43},"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",[26,164149,164150,164187,164191,164210,164225,164239,164253],{"__ignoreMap":43},[47,164151,164152,164155,164157,164159,164161,164163,164165,164167,164169,164171,164173,164175,164177,164179,164181,164183,164185],{"class":49,"line":50},[47,164153,164154],{"class":221},"nums ",[47,164156,267],{"class":217},[47,164158,52280],{"class":221},[47,164160,411],{"class":85},[47,164162,12528],{"class":221},[47,164164,436],{"class":85},[47,164166,12528],{"class":221},[47,164168,298],{"class":85},[47,164170,12528],{"class":221},[47,164172,292],{"class":85},[47,164174,12528],{"class":221},[47,164176,512],{"class":85},[47,164178,12528],{"class":221},[47,164180,538],{"class":85},[47,164182,12528],{"class":221},[47,164184,563],{"class":85},[47,164186,33300],{"class":221},[47,164188,164189],{"class":49,"line":92},[47,164190,2493],{"emptyLinePlaceholder":145},[47,164192,164193,164195,164198,164200,164202,164204,164207],{"class":49,"line":1273},[47,164194,30469],{"class":85},[47,164196,164197],{"class":221},"(nums[",[47,164199,436],{"class":85},[47,164201,1078],{"class":221},[47,164203,512],{"class":85},[47,164205,164206],{"class":221},"])    ",[47,164208,164209],{"class":279},"# [1, 2, 3]\n",[47,164211,164212,164214,164217,164219,164222],{"class":49,"line":1288},[47,164213,30469],{"class":85},[47,164215,164216],{"class":221},"(nums[:",[47,164218,292],{"class":85},[47,164220,164221],{"class":221},"])     ",[47,164223,164224],{"class":279},"# [0, 1, 2]\n",[47,164226,164227,164229,164231,164233,164236],{"class":49,"line":1294},[47,164228,30469],{"class":85},[47,164230,164197],{"class":221},[47,164232,292],{"class":85},[47,164234,164235],{"class":221},":])     ",[47,164237,164238],{"class":279},"# [3, 4, 5, 6]\n",[47,164240,164241,164243,164246,164248,164250],{"class":49,"line":1308},[47,164242,30469],{"class":85},[47,164244,164245],{"class":221},"(nums[::",[47,164247,298],{"class":85},[47,164249,164206],{"class":221},[47,164251,164252],{"class":279},"# [0, 2, 4, 6]\n",[47,164254,164255,164257,164259,164261,164263,164266],{"class":49,"line":1314},[47,164256,30469],{"class":85},[47,164258,164245],{"class":221},[47,164260,751],{"class":217},[47,164262,436],{"class":85},[47,164264,164265],{"class":221},"])   ",[47,164267,164268],{"class":279},"# 反转\n",[19,164270,164271],{},"字符串切片：",[38,164273,164275],{"className":30432,"code":164274,"language":30434,"meta":43,"style":43},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[26,164276,164277,164286,164300],{"__ignoreMap":43},[47,164278,164279,164281,164283],{"class":49,"line":50},[47,164280,156498],{"class":221},[47,164282,267],{"class":217},[47,164284,164285],{"class":81}," \"abcdef\"\n",[47,164287,164288,164290,164292,164294,164296,164298],{"class":49,"line":92},[47,164289,30469],{"class":85},[47,164291,164014],{"class":221},[47,164293,436],{"class":85},[47,164295,1078],{"class":221},[47,164297,512],{"class":85},[47,164299,4750],{"class":221},[47,164301,164302,164304,164307,164309,164311],{"class":49,"line":1273},[47,164303,30469],{"class":85},[47,164305,164306],{"class":221},"(text[::",[47,164308,751],{"class":217},[47,164310,436],{"class":85},[47,164312,4750],{"class":221},[14,164314,164316],{"id":164315},"_69-集合set","6.9 集合set",[19,164318,164319],{},"集合特点：",[171,164321,164322,164325,164328],{},[109,164323,164324],{},"无序。",[109,164326,164327],{},"元素不重复。",[109,164329,164330],{},"可以做交集、并集、差集。",[38,164332,164334],{"className":30432,"code":164333,"language":30434,"meta":43,"style":43},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[26,164335,164336,164364],{"__ignoreMap":43},[47,164337,164338,164340,164342,164344,164346,164348,164350,164352,164354,164356,164358,164360,164362],{"class":49,"line":50},[47,164339,164154],{"class":221},[47,164341,267],{"class":217},[47,164343,4541],{"class":221},[47,164345,436],{"class":85},[47,164347,12528],{"class":221},[47,164349,298],{"class":85},[47,164351,12528],{"class":221},[47,164353,292],{"class":85},[47,164355,12528],{"class":221},[47,164357,292],{"class":85},[47,164359,12528],{"class":221},[47,164361,512],{"class":85},[47,164363,1659],{"class":221},[47,164365,164366,164368],{"class":49,"line":92},[47,164367,30469],{"class":85},[47,164369,164370],{"class":221},"(nums)\n",[19,164372,164373],{},"创建空集合：",[38,164375,164377],{"className":30432,"code":164376,"language":30434,"meta":43,"style":43},"s = set()\n",[26,164378,164379],{"__ignoreMap":43},[47,164380,164381,164383,164385,164387],{"class":49,"line":50},[47,164382,10672],{"class":221},[47,164384,267],{"class":217},[47,164386,119776],{"class":85},[47,164388,2069],{"class":221},[19,164390,9118,164391,164393],{},[26,164392,32513],{}," 是空字典，不是空集合。",[19,164395,164396],{},"集合常用操作：",[38,164398,164400],{"className":30432,"code":164399,"language":30434,"meta":43,"style":43},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[26,164401,164402,164422,164426,164435,164444,164453],{"__ignoreMap":43},[47,164403,164404,164406,164408,164410,164412,164414,164416,164418,164420],{"class":49,"line":50},[47,164405,10672],{"class":221},[47,164407,267],{"class":217},[47,164409,4541],{"class":221},[47,164411,436],{"class":85},[47,164413,12528],{"class":221},[47,164415,298],{"class":85},[47,164417,12528],{"class":221},[47,164419,292],{"class":85},[47,164421,1659],{"class":221},[47,164423,164424],{"class":49,"line":92},[47,164425,2493],{"emptyLinePlaceholder":145},[47,164427,164428,164431,164433],{"class":49,"line":1273},[47,164429,164430],{"class":221},"s.add(",[47,164432,512],{"class":85},[47,164434,228],{"class":221},[47,164436,164437,164440,164442],{"class":49,"line":1288},[47,164438,164439],{"class":221},"s.remove(",[47,164441,298],{"class":85},[47,164443,228],{"class":221},[47,164445,164446,164449,164451],{"class":49,"line":1294},[47,164447,164448],{"class":221},"s.discard(",[47,164450,665],{"class":85},[47,164452,228],{"class":221},[47,164454,164455,164457,164459,164461],{"class":49,"line":1308},[47,164456,30469],{"class":85},[47,164458,222],{"class":221},[47,164460,7451],{"class":85},[47,164462,164463],{"class":221},"(s))\n",[19,164465,164466],{},"交并差：",[38,164468,164470],{"className":30432,"code":164469,"language":30434,"meta":43,"style":43},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[26,164471,164472,164492,164512,164516,164531,164544],{"__ignoreMap":43},[47,164473,164474,164476,164478,164480,164482,164484,164486,164488,164490],{"class":49,"line":50},[47,164475,11012],{"class":221},[47,164477,267],{"class":217},[47,164479,4541],{"class":221},[47,164481,436],{"class":85},[47,164483,12528],{"class":221},[47,164485,298],{"class":85},[47,164487,12528],{"class":221},[47,164489,292],{"class":85},[47,164491,1659],{"class":221},[47,164493,164494,164496,164498,164500,164502,164504,164506,164508,164510],{"class":49,"line":92},[47,164495,11038],{"class":221},[47,164497,267],{"class":217},[47,164499,4541],{"class":221},[47,164501,292],{"class":85},[47,164503,12528],{"class":221},[47,164505,512],{"class":85},[47,164507,12528],{"class":221},[47,164509,538],{"class":85},[47,164511,1659],{"class":221},[47,164513,164514],{"class":49,"line":1273},[47,164515,2493],{"emptyLinePlaceholder":145},[47,164517,164518,164520,164523,164525,164528],{"class":49,"line":1288},[47,164519,30469],{"class":85},[47,164521,164522],{"class":221},"(a ",[47,164524,572],{"class":217},[47,164526,164527],{"class":221}," b)  ",[47,164529,164530],{"class":279},"# 交集\n",[47,164532,164533,164535,164537,164539,164541],{"class":49,"line":1294},[47,164534,30469],{"class":85},[47,164536,164522],{"class":221},[47,164538,1140],{"class":217},[47,164540,164527],{"class":221},[47,164542,164543],{"class":279},"# 并集\n",[47,164545,164546,164548,164550,164552,164554],{"class":49,"line":1308},[47,164547,30469],{"class":85},[47,164549,164522],{"class":221},[47,164551,751],{"class":217},[47,164553,164527],{"class":221},[47,164555,164556],{"class":279},"# 差集\n",[14,164558,164560],{"id":164559},"_610-字典dict","6.10 字典dict",[19,164562,164563],{},"字典通过 key-value 保存数据。",[38,164565,164567],{"className":30432,"code":164566,"language":30434,"meta":43,"style":43},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[26,164568,164569,164577,164587,164598,164608],{"__ignoreMap":43},[47,164570,164571,164573,164575],{"class":49,"line":50},[47,164572,149535],{"class":221},[47,164574,267],{"class":217},[47,164576,15665],{"class":221},[47,164578,164579,164581,164583,164585],{"class":49,"line":92},[47,164580,147074],{"class":81},[47,164582,51491],{"class":221},[47,164584,149942],{"class":81},[47,164586,31520],{"class":221},[47,164588,164589,164592,164594,164596],{"class":49,"line":1273},[47,164590,164591],{"class":81},"    \"age\"",[47,164593,51491],{"class":221},[47,164595,869],{"class":85},[47,164597,31520],{"class":221},[47,164599,164600,164603,164605],{"class":49,"line":1288},[47,164601,164602],{"class":81},"    \"score\"",[47,164604,51491],{"class":221},[47,164606,164607],{"class":85},"95\n",[47,164609,164610],{"class":49,"line":1294},[47,164611,1659],{"class":221},[19,164613,164614],{},"获取值：",[38,164616,164618],{"className":30432,"code":164617,"language":30434,"meta":43,"style":43},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[26,164619,164620,164631],{"__ignoreMap":43},[47,164621,164622,164624,164627,164629],{"class":49,"line":50},[47,164623,30469],{"class":85},[47,164625,164626],{"class":221},"(student[",[47,164628,62733],{"class":81},[47,164630,4750],{"class":221},[47,164632,164633,164635,164638,164640],{"class":49,"line":92},[47,164634,30469],{"class":85},[47,164636,164637],{"class":221},"(student.get(",[47,164639,62733],{"class":81},[47,164641,30551],{"class":221},[19,164643,15481],{},[38,164645,164647],{"className":30432,"code":164646,"language":30434,"meta":43,"style":43},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[26,164648,164649,164662],{"__ignoreMap":43},[47,164650,164651,164653,164656,164659],{"class":49,"line":50},[47,164652,152913],{"class":221},[47,164654,164655],{"class":81},"\"address\"",[47,164657,164658],{"class":221},"]     ",[47,164660,164661],{"class":279},"# key不存在会报错\n",[47,164663,164664,164667,164669,164671],{"class":49,"line":92},[47,164665,164666],{"class":221},"student.get(",[47,164668,164655],{"class":81},[47,164670,13807],{"class":221},[47,164672,164673],{"class":279},"# key不存在返回None\n",[19,164675,164676],{},"设置默认值：",[38,164678,164680],{"className":30432,"code":164679,"language":30434,"meta":43,"style":43},"print(student.get(\"address\", \"未知\"))\n",[26,164681,164682],{"__ignoreMap":43},[47,164683,164684,164686,164688,164690,164692,164695],{"class":49,"line":50},[47,164685,30469],{"class":85},[47,164687,164637],{"class":221},[47,164689,164655],{"class":81},[47,164691,12528],{"class":221},[47,164693,164694],{"class":81},"\"未知\"",[47,164696,30551],{"class":221},[19,164698,164699],{},"新增和修改：",[38,164701,164703],{"className":30432,"code":164702,"language":30434,"meta":43,"style":43},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[26,164704,164705,164718],{"__ignoreMap":43},[47,164706,164707,164709,164711,164713,164715],{"class":49,"line":50},[47,164708,152913],{"class":221},[47,164710,69178],{"class":81},[47,164712,4536],{"class":221},[47,164714,267],{"class":217},[47,164716,164717],{"class":85}," 19\n",[47,164719,164720,164722,164724,164726,164728],{"class":49,"line":92},[47,164721,152913],{"class":221},[47,164723,164655],{"class":81},[47,164725,4536],{"class":221},[47,164727,267],{"class":217},[47,164729,164730],{"class":81}," \"北京\"\n",[19,164732,164733],{},"删除：",[38,164735,164737],{"className":30432,"code":164736,"language":30434,"meta":43,"style":43},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[26,164738,164739,164752,164762],{"__ignoreMap":43},[47,164740,164741,164743,164745,164748,164750],{"class":49,"line":50},[47,164742,155412],{"class":221},[47,164744,267],{"class":217},[47,164746,164747],{"class":221}," student.pop(",[47,164749,151526],{"class":81},[47,164751,228],{"class":221},[47,164753,164754,164756,164758,164760],{"class":49,"line":92},[47,164755,163437],{"class":217},[47,164757,152203],{"class":221},[47,164759,69178],{"class":81},[47,164761,33300],{"class":221},[47,164763,164764],{"class":49,"line":1273},[47,164765,164766],{"class":221},"student.clear()\n",[14,164768,164770],{"id":164769},"_611-字典遍历","6.11 字典遍历",[19,164772,164773],{},"遍历 key：",[38,164775,164777],{"className":30432,"code":164776,"language":30434,"meta":43,"style":43},"for key in student:\n    print(key, student[key])\n",[26,164778,164779,164791],{"__ignoreMap":43},[47,164780,164781,164783,164786,164788],{"class":49,"line":50},[47,164782,3118],{"class":217},[47,164784,164785],{"class":221}," key ",[47,164787,26097],{"class":217},[47,164789,164790],{"class":221}," student:\n",[47,164792,164793,164795],{"class":49,"line":92},[47,164794,31353],{"class":85},[47,164796,164797],{"class":221},"(key, student[key])\n",[19,164799,164800],{},"遍历 value：",[38,164802,164804],{"className":30432,"code":164803,"language":30434,"meta":43,"style":43},"for value in student.values():\n    print(value)\n",[26,164805,164806,164818],{"__ignoreMap":43},[47,164807,164808,164810,164813,164815],{"class":49,"line":50},[47,164809,3118],{"class":217},[47,164811,164812],{"class":221}," value ",[47,164814,26097],{"class":217},[47,164816,164817],{"class":221}," student.values():\n",[47,164819,164820,164822],{"class":49,"line":92},[47,164821,31353],{"class":85},[47,164823,164824],{"class":221},"(value)\n",[19,164826,164827],{},"遍历 key 和 value：",[38,164829,164831],{"className":30432,"code":164830,"language":30434,"meta":43,"style":43},"for key, value in student.items():\n    print(key, value)\n",[26,164832,164833,164845],{"__ignoreMap":43},[47,164834,164835,164837,164840,164842],{"class":49,"line":50},[47,164836,3118],{"class":217},[47,164838,164839],{"class":221}," key, value ",[47,164841,26097],{"class":217},[47,164843,164844],{"class":221}," student.items():\n",[47,164846,164847,164849],{"class":49,"line":92},[47,164848,31353],{"class":85},[47,164850,164851],{"class":221},"(key, value)\n",[14,164853,164855],{"id":164854},"_612-嵌套容器","6.12 嵌套容器",[19,164857,164858],{},"列表中保存字典，是项目中最常见的结构之一。",[38,164860,164862],{"className":30432,"code":164861,"language":30434,"meta":43,"style":43},"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",[26,164863,164864,164872,164900,164928,164956,164960,164964,164974],{"__ignoreMap":43},[47,164865,164866,164868,164870],{"class":49,"line":50},[47,164867,159770],{"class":221},[47,164869,267],{"class":217},[47,164871,55501],{"class":221},[47,164873,164874,164876,164878,164880,164882,164884,164886,164888,164890,164892,164894,164896,164898],{"class":49,"line":92},[47,164875,148439],{"class":221},[47,164877,62733],{"class":81},[47,164879,51491],{"class":221},[47,164881,149942],{"class":81},[47,164883,12528],{"class":221},[47,164885,69178],{"class":81},[47,164887,51491],{"class":221},[47,164889,869],{"class":85},[47,164891,12528],{"class":221},[47,164893,151526],{"class":81},[47,164895,51491],{"class":221},[47,164897,1208],{"class":85},[47,164899,5023],{"class":221},[47,164901,164902,164904,164906,164908,164910,164912,164914,164916,164918,164920,164922,164924,164926],{"class":49,"line":1273},[47,164903,148439],{"class":221},[47,164905,62733],{"class":81},[47,164907,51491],{"class":221},[47,164909,150990],{"class":81},[47,164911,12528],{"class":221},[47,164913,69178],{"class":81},[47,164915,51491],{"class":221},[47,164917,844],{"class":85},[47,164919,12528],{"class":221},[47,164921,151526],{"class":81},[47,164923,51491],{"class":221},[47,164925,1030],{"class":85},[47,164927,5023],{"class":221},[47,164929,164930,164932,164934,164936,164938,164940,164942,164944,164946,164948,164950,164952,164954],{"class":49,"line":1288},[47,164931,148439],{"class":221},[47,164933,62733],{"class":81},[47,164935,51491],{"class":221},[47,164937,159785],{"class":81},[47,164939,12528],{"class":221},[47,164941,69178],{"class":81},[47,164943,51491],{"class":221},[47,164945,894],{"class":85},[47,164947,12528],{"class":221},[47,164949,151526],{"class":81},[47,164951,51491],{"class":221},[47,164953,625],{"class":85},[47,164955,5023],{"class":221},[47,164957,164958],{"class":49,"line":1294},[47,164959,33300],{"class":221},[47,164961,164962],{"class":49,"line":1308},[47,164963,2493],{"emptyLinePlaceholder":145},[47,164965,164966,164968,164970,164972],{"class":49,"line":1314},[47,164967,3118],{"class":217},[47,164969,152191],{"class":221},[47,164971,26097],{"class":217},[47,164973,152196],{"class":221},[47,164975,164976,164978,164980,164982,164985,164987],{"class":49,"line":1405},[47,164977,31353],{"class":85},[47,164979,164626],{"class":221},[47,164981,62733],{"class":81},[47,164983,164984],{"class":221},"], student[",[47,164986,151526],{"class":81},[47,164988,4750],{"class":221},[19,164990,164991],{},"统计平均分：",[38,164993,164995],{"className":30432,"code":164994,"language":30434,"meta":43,"style":43},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[26,164996,164997,165005,165009,165019,165031,165035,165050],{"__ignoreMap":43},[47,164998,164999,165001,165003],{"class":49,"line":50},[47,165000,157314],{"class":221},[47,165002,267],{"class":217},[47,165004,47387],{"class":85},[47,165006,165007],{"class":49,"line":92},[47,165008,2493],{"emptyLinePlaceholder":145},[47,165010,165011,165013,165015,165017],{"class":49,"line":1273},[47,165012,3118],{"class":217},[47,165014,152191],{"class":221},[47,165016,26097],{"class":217},[47,165018,152196],{"class":221},[47,165020,165021,165023,165025,165027,165029],{"class":49,"line":1288},[47,165022,159361],{"class":221},[47,165024,9570],{"class":217},[47,165026,152203],{"class":221},[47,165028,151526],{"class":81},[47,165030,33300],{"class":221},[47,165032,165033],{"class":49,"line":1294},[47,165034,2493],{"emptyLinePlaceholder":145},[47,165036,165037,165039,165041,165043,165045,165047],{"class":49,"line":1308},[47,165038,163828],{"class":221},[47,165040,267],{"class":217},[47,165042,163833],{"class":221},[47,165044,803],{"class":217},[47,165046,7424],{"class":85},[47,165048,165049],{"class":221},"(students)\n",[47,165051,165052,165054,165056,165058,165060,165062,165064,165066,165068,165070],{"class":49,"line":1314},[47,165053,30469],{"class":85},[47,165055,222],{"class":221},[47,165057,273],{"class":217},[47,165059,163851],{"class":81},[47,165061,1115],{"class":85},[47,165063,163856],{"class":221},[47,165065,157213],{"class":217},[47,165067,1165],{"class":85},[47,165069,470],{"class":81},[47,165071,228],{"class":221},[19,165073,165074],{},"查找学生：",[38,165076,165078],{"className":30432,"code":165077,"language":30434,"meta":43,"style":43},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[26,165079,165080,165095,165099,165109,165123,165129,165133,165139],{"__ignoreMap":43},[47,165081,165082,165084,165086,165088,165090,165093],{"class":49,"line":50},[47,165083,111632],{"class":221},[47,165085,267],{"class":217},[47,165087,60659],{"class":85},[47,165089,222],{"class":221},[47,165091,165092],{"class":81},"\"请输入学生姓名:\"",[47,165094,228],{"class":221},[47,165096,165097],{"class":49,"line":92},[47,165098,2493],{"emptyLinePlaceholder":145},[47,165100,165101,165103,165105,165107],{"class":49,"line":1273},[47,165102,3118],{"class":217},[47,165104,152191],{"class":221},[47,165106,26097],{"class":217},[47,165108,152196],{"class":221},[47,165110,165111,165113,165115,165117,165119,165121],{"class":49,"line":1288},[47,165112,3194],{"class":217},[47,165114,152203],{"class":221},[47,165116,62733],{"class":81},[47,165118,4536],{"class":221},[47,165120,3042],{"class":217},[47,165122,160486],{"class":221},[47,165124,165125,165127],{"class":49,"line":1294},[47,165126,32505],{"class":85},[47,165128,150096],{"class":221},[47,165130,165131],{"class":49,"line":1308},[47,165132,31681],{"class":217},[47,165134,165135,165137],{"class":49,"line":1314},[47,165136,1795],{"class":217},[47,165138,3832],{"class":221},[47,165140,165141,165143,165145,165148],{"class":49,"line":1405},[47,165142,31353],{"class":85},[47,165144,222],{"class":221},[47,165146,165147],{"class":81},"\"没有找到\"",[47,165149,228],{"class":221},[14,165151,165153],{"id":165152},"_613-容器通用操作","6.13 容器通用操作",[19,165155,165156],{},"长度：",[38,165158,165160],{"className":30432,"code":165159,"language":30434,"meta":43,"style":43},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[26,165161,165162,165181,165191],{"__ignoreMap":43},[47,165163,165164,165166,165169,165171,165173,165175,165177,165179],{"class":49,"line":50},[47,165165,7451],{"class":85},[47,165167,165168],{"class":221},"([",[47,165170,436],{"class":85},[47,165172,12528],{"class":221},[47,165174,298],{"class":85},[47,165176,12528],{"class":221},[47,165178,292],{"class":85},[47,165180,4750],{"class":221},[47,165182,165183,165185,165187,165189],{"class":49,"line":92},[47,165184,7451],{"class":85},[47,165186,222],{"class":221},[47,165188,155934],{"class":81},[47,165190,228],{"class":221},[47,165192,165193,165195,165198,165200,165202,165204],{"class":49,"line":1273},[47,165194,7451],{"class":85},[47,165196,165197],{"class":221},"({",[47,165199,62733],{"class":81},[47,165201,51491],{"class":221},[47,165203,149942],{"class":81},[47,165205,165206],{"class":221},"})\n",[19,165208,165209],{},"最大最小：",[38,165211,165213],{"className":30432,"code":165212,"language":30434,"meta":43,"style":43},"max([1, 2, 3])\nmin([1, 2, 3])\n",[26,165214,165215,165233],{"__ignoreMap":43},[47,165216,165217,165219,165221,165223,165225,165227,165229,165231],{"class":49,"line":50},[47,165218,6108],{"class":85},[47,165220,165168],{"class":221},[47,165222,436],{"class":85},[47,165224,12528],{"class":221},[47,165226,298],{"class":85},[47,165228,12528],{"class":221},[47,165230,292],{"class":85},[47,165232,4750],{"class":221},[47,165234,165235,165238,165240,165242,165244,165246,165248,165250],{"class":49,"line":92},[47,165236,165237],{"class":85},"min",[47,165239,165168],{"class":221},[47,165241,436],{"class":85},[47,165243,12528],{"class":221},[47,165245,298],{"class":85},[47,165247,12528],{"class":221},[47,165249,292],{"class":85},[47,165251,4750],{"class":221},[19,165253,165254],{},"求和：",[38,165256,165258],{"className":30432,"code":165257,"language":30434,"meta":43,"style":43},"sum([1, 2, 3])\n",[26,165259,165260],{"__ignoreMap":43},[47,165261,165262,165265,165267,165269,165271,165273,165275,165277],{"class":49,"line":50},[47,165263,165264],{"class":85},"sum",[47,165266,165168],{"class":221},[47,165268,436],{"class":85},[47,165270,12528],{"class":221},[47,165272,298],{"class":85},[47,165274,12528],{"class":221},[47,165276,292],{"class":85},[47,165278,4750],{"class":221},[19,165280,163525],{},[38,165282,165284],{"className":30432,"code":165283,"language":30434,"meta":43,"style":43},"sorted([3, 1, 2])\n",[26,165285,165286],{"__ignoreMap":43},[47,165287,165288,165291,165293,165295,165297,165299,165301,165303],{"class":49,"line":50},[47,165289,165290],{"class":85},"sorted",[47,165292,165168],{"class":221},[47,165294,292],{"class":85},[47,165296,12528],{"class":221},[47,165298,436],{"class":85},[47,165300,12528],{"class":221},[47,165302,298],{"class":85},[47,165304,4750],{"class":221},[19,165306,165307],{},"类型转换：",[38,165309,165311],{"className":30432,"code":165310,"language":30434,"meta":43,"style":43},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[26,165312,165313,165323,165341],{"__ignoreMap":43},[47,165314,165315,165317,165319,165321],{"class":49,"line":50},[47,165316,154124],{"class":85},[47,165318,222],{"class":221},[47,165320,155934],{"class":81},[47,165322,228],{"class":221},[47,165324,165325,165327,165329,165331,165333,165335,165337,165339],{"class":49,"line":92},[47,165326,155319],{"class":85},[47,165328,165168],{"class":221},[47,165330,436],{"class":85},[47,165332,12528],{"class":221},[47,165334,298],{"class":85},[47,165336,12528],{"class":221},[47,165338,292],{"class":85},[47,165340,4750],{"class":221},[47,165342,165343,165345,165347,165349,165351,165353,165355,165357,165359,165361],{"class":49,"line":1273},[47,165344,155344],{"class":85},[47,165346,165168],{"class":221},[47,165348,436],{"class":85},[47,165350,12528],{"class":221},[47,165352,436],{"class":85},[47,165354,12528],{"class":221},[47,165356,298],{"class":85},[47,165358,12528],{"class":221},[47,165360,292],{"class":85},[47,165362,4750],{"class":221},[19,165364,165365],{},"成员判断：",[38,165367,165369],{"className":30432,"code":165368,"language":30434,"meta":43,"style":43},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[26,165370,165371,165388,165412],{"__ignoreMap":43},[47,165372,165373,165375,165377,165380,165383,165386],{"class":49,"line":50},[47,165374,30469],{"class":85},[47,165376,222],{"class":221},[47,165378,165379],{"class":81},"\"a\"",[47,165381,165382],{"class":217}," in",[47,165384,165385],{"class":81}," \"abc\"",[47,165387,228],{"class":221},[47,165389,165390,165392,165394,165396,165398,165400,165402,165404,165406,165408,165410],{"class":49,"line":92},[47,165391,30469],{"class":85},[47,165393,222],{"class":221},[47,165395,436],{"class":85},[47,165397,165382],{"class":217},[47,165399,52280],{"class":221},[47,165401,436],{"class":85},[47,165403,12528],{"class":221},[47,165405,298],{"class":85},[47,165407,12528],{"class":221},[47,165409,292],{"class":85},[47,165411,4750],{"class":221},[47,165413,165414,165416,165418,165420,165422,165424,165426,165428,165430],{"class":49,"line":1273},[47,165415,30469],{"class":85},[47,165417,222],{"class":221},[47,165419,62733],{"class":81},[47,165421,165382],{"class":217},[47,165423,4541],{"class":221},[47,165425,62733],{"class":81},[47,165427,51491],{"class":221},[47,165429,149942],{"class":81},[47,165431,165206],{"class":221},[14,165433,165435],{"id":165434},"_614-推导式","6.14 推导式",[19,165437,165438],{},"推导式用于快速生成容器。",[19,165440,165441],{},"列表推导式：",[38,165443,165445],{"className":30432,"code":165444,"language":30434,"meta":43,"style":43},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[26,165446,165447,165474],{"__ignoreMap":43},[47,165448,165449,165451,165453,165456,165458,165460,165462,165464,165466,165468,165470,165472],{"class":49,"line":50},[47,165450,164154],{"class":221},[47,165452,267],{"class":217},[47,165454,165455],{"class":221}," [i ",[47,165457,3118],{"class":217},[47,165459,9531],{"class":221},[47,165461,26097],{"class":217},[47,165463,32497],{"class":85},[47,165465,222],{"class":221},[47,165467,436],{"class":85},[47,165469,12528],{"class":221},[47,165471,563],{"class":85},[47,165473,97354],{"class":221},[47,165475,165476,165478],{"class":49,"line":92},[47,165477,30469],{"class":85},[47,165479,164370],{"class":221},[19,165481,165482],{},"带条件：",[38,165484,165486],{"className":30432,"code":165485,"language":30434,"meta":43,"style":43},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[26,165487,165488,165529],{"__ignoreMap":43},[47,165489,165490,165493,165495,165497,165499,165501,165503,165505,165507,165509,165511,165513,165515,165517,165519,165521,165523,165525,165527],{"class":49,"line":50},[47,165491,165492],{"class":221},"even_nums ",[47,165494,267],{"class":217},[47,165496,165455],{"class":221},[47,165498,3118],{"class":217},[47,165500,9531],{"class":221},[47,165502,26097],{"class":217},[47,165504,32497],{"class":85},[47,165506,222],{"class":221},[47,165508,436],{"class":85},[47,165510,12528],{"class":221},[47,165512,556],{"class":85},[47,165514,13807],{"class":221},[47,165516,1625],{"class":217},[47,165518,9531],{"class":221},[47,165520,547],{"class":217},[47,165522,14848],{"class":85},[47,165524,101613],{"class":217},[47,165526,4186],{"class":85},[47,165528,33300],{"class":221},[47,165530,165531,165533],{"class":49,"line":92},[47,165532,30469],{"class":85},[47,165534,165535],{"class":221},"(even_nums)\n",[19,165537,165538],{},"字典推导式：",[38,165540,165542],{"className":30432,"code":165541,"language":30434,"meta":43,"style":43},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[26,165543,165544,165578],{"__ignoreMap":43},[47,165545,165546,165549,165551,165554,165556,165558,165561,165563,165565,165567,165569,165571,165573,165575],{"class":49,"line":50},[47,165547,165548],{"class":221},"squares ",[47,165550,267],{"class":217},[47,165552,165553],{"class":221}," {i: i ",[47,165555,10754],{"class":217},[47,165557,14848],{"class":85},[47,165559,165560],{"class":217}," for",[47,165562,9531],{"class":221},[47,165564,26097],{"class":217},[47,165566,32497],{"class":85},[47,165568,222],{"class":221},[47,165570,436],{"class":85},[47,165572,12528],{"class":221},[47,165574,563],{"class":85},[47,165576,165577],{"class":221},")}\n",[47,165579,165580,165582],{"class":49,"line":92},[47,165581,30469],{"class":85},[47,165583,165584],{"class":221},"(squares)\n",[19,165586,165587],{},"集合推导式：",[38,165589,165591],{"className":30432,"code":165590,"language":30434,"meta":43,"style":43},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[26,165592,165593,165614],{"__ignoreMap":43},[47,165594,165595,165598,165600,165603,165605,165607,165609,165612],{"class":49,"line":50},[47,165596,165597],{"class":221},"chars ",[47,165599,267],{"class":217},[47,165601,165602],{"class":221}," {ch ",[47,165604,3118],{"class":217},[47,165606,159746],{"class":221},[47,165608,26097],{"class":217},[47,165610,165611],{"class":81}," \"hello\"",[47,165613,1659],{"class":221},[47,165615,165616,165618],{"class":49,"line":92},[47,165617,30469],{"class":85},[47,165619,165620],{"class":221},"(chars)\n",[19,165622,165623],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,165625,165627],{"id":165626},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[38,165629,165631],{"className":30432,"code":165630,"language":30434,"meta":43,"style":43},"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",[26,165632,165633,165641,165661,165681,165701,165721,165725,165729,165737,165751,165760,165764,165774,165786,165790,165810,165819,165823,165839,165844,165848,165862,165866,165888,165924],{"__ignoreMap":43},[47,165634,165635,165637,165639],{"class":49,"line":50},[47,165636,159770],{"class":221},[47,165638,267],{"class":217},[47,165640,55501],{"class":221},[47,165642,165643,165645,165647,165649,165651,165653,165655,165657,165659],{"class":49,"line":92},[47,165644,148439],{"class":221},[47,165646,62733],{"class":81},[47,165648,51491],{"class":221},[47,165650,149942],{"class":81},[47,165652,12528],{"class":221},[47,165654,151526],{"class":81},[47,165656,51491],{"class":221},[47,165658,1208],{"class":85},[47,165660,5023],{"class":221},[47,165662,165663,165665,165667,165669,165671,165673,165675,165677,165679],{"class":49,"line":1273},[47,165664,148439],{"class":221},[47,165666,62733],{"class":81},[47,165668,51491],{"class":221},[47,165670,150990],{"class":81},[47,165672,12528],{"class":221},[47,165674,151526],{"class":81},[47,165676,51491],{"class":221},[47,165678,1030],{"class":85},[47,165680,5023],{"class":221},[47,165682,165683,165685,165687,165689,165691,165693,165695,165697,165699],{"class":49,"line":1288},[47,165684,148439],{"class":221},[47,165686,62733],{"class":81},[47,165688,51491],{"class":221},[47,165690,159785],{"class":81},[47,165692,12528],{"class":221},[47,165694,151526],{"class":81},[47,165696,51491],{"class":221},[47,165698,625],{"class":85},[47,165700,5023],{"class":221},[47,165702,165703,165705,165707,165709,165711,165713,165715,165717,165719],{"class":49,"line":1294},[47,165704,148439],{"class":221},[47,165706,62733],{"class":81},[47,165708,51491],{"class":221},[47,165710,163364],{"class":81},[47,165712,12528],{"class":221},[47,165714,151526],{"class":81},[47,165716,51491],{"class":221},[47,165718,1101],{"class":85},[47,165720,5023],{"class":221},[47,165722,165723],{"class":49,"line":1308},[47,165724,33300],{"class":221},[47,165726,165727],{"class":49,"line":1314},[47,165728,2493],{"emptyLinePlaceholder":145},[47,165730,165731,165733,165735],{"class":49,"line":1405},[47,165732,157314],{"class":221},[47,165734,267],{"class":217},[47,165736,47387],{"class":85},[47,165738,165739,165742,165744,165747,165749],{"class":49,"line":1411},[47,165740,165741],{"class":221},"max_student ",[47,165743,267],{"class":217},[47,165745,165746],{"class":221}," students[",[47,165748,411],{"class":85},[47,165750,33300],{"class":221},[47,165752,165753,165756,165758],{"class":49,"line":1423},[47,165754,165755],{"class":221},"passed ",[47,165757,267],{"class":217},[47,165759,51892],{"class":221},[47,165761,165762],{"class":49,"line":1706},[47,165763,2493],{"emptyLinePlaceholder":145},[47,165765,165766,165768,165770,165772],{"class":49,"line":1711},[47,165767,3118],{"class":217},[47,165769,152191],{"class":221},[47,165771,26097],{"class":217},[47,165773,152196],{"class":221},[47,165775,165776,165778,165780,165782,165784],{"class":49,"line":1717},[47,165777,159361],{"class":221},[47,165779,9570],{"class":217},[47,165781,152203],{"class":221},[47,165783,151526],{"class":81},[47,165785,33300],{"class":221},[47,165787,165788],{"class":49,"line":1722},[47,165789,2493],{"emptyLinePlaceholder":145},[47,165791,165792,165794,165796,165798,165800,165802,165805,165807],{"class":49,"line":1736},[47,165793,3194],{"class":217},[47,165795,152203],{"class":221},[47,165797,151526],{"class":81},[47,165799,4536],{"class":221},[47,165801,1179],{"class":217},[47,165803,165804],{"class":221}," max_student[",[47,165806,151526],{"class":81},[47,165808,165809],{"class":221},"]:\n",[47,165811,165812,165815,165817],{"class":49,"line":1741},[47,165813,165814],{"class":221},"        max_student ",[47,165816,267],{"class":217},[47,165818,152219],{"class":221},[47,165820,165821],{"class":49,"line":1747},[47,165822,2493],{"emptyLinePlaceholder":145},[47,165824,165825,165827,165829,165831,165833,165835,165837],{"class":49,"line":1768},[47,165826,3194],{"class":217},[47,165828,152203],{"class":221},[47,165830,151526],{"class":81},[47,165832,4536],{"class":221},[47,165834,1804],{"class":217},[47,165836,157891],{"class":85},[47,165838,3832],{"class":221},[47,165840,165841],{"class":49,"line":1773},[47,165842,165843],{"class":221},"        passed.append(student)\n",[47,165845,165846],{"class":49,"line":1787},[47,165847,2493],{"emptyLinePlaceholder":145},[47,165849,165850,165852,165854,165856,165858,165860],{"class":49,"line":1792},[47,165851,163828],{"class":221},[47,165853,267],{"class":217},[47,165855,163833],{"class":221},[47,165857,803],{"class":217},[47,165859,7424],{"class":85},[47,165861,165049],{"class":221},[47,165863,165864],{"class":49,"line":1821},[47,165865,2493],{"emptyLinePlaceholder":145},[47,165867,165868,165870,165872,165874,165876,165878,165880,165882,165884,165886],{"class":49,"line":1826},[47,165869,30469],{"class":85},[47,165871,222],{"class":221},[47,165873,273],{"class":217},[47,165875,163851],{"class":81},[47,165877,1115],{"class":85},[47,165879,163856],{"class":221},[47,165881,157213],{"class":217},[47,165883,1165],{"class":85},[47,165885,470],{"class":81},[47,165887,228],{"class":221},[47,165889,165890,165892,165894,165896,165899,165901,165904,165906,165908,165910,165912,165914,165916,165918,165920,165922],{"class":49,"line":1843},[47,165891,30469],{"class":85},[47,165893,222],{"class":221},[47,165895,273],{"class":217},[47,165897,165898],{"class":81},"\"最高分学生:",[47,165900,1115],{"class":85},[47,165902,165903],{"class":221},"max_student[",[47,165905,152936],{"class":81},[47,165907,1159],{"class":221},[47,165909,1165],{"class":85},[47,165911,4541],{"class":85},[47,165913,165903],{"class":221},[47,165915,152974],{"class":81},[47,165917,1159],{"class":221},[47,165919,1165],{"class":85},[47,165921,470],{"class":81},[47,165923,228],{"class":221},[47,165925,165926,165928,165930,165932,165935,165938,165941,165943,165945],{"class":49,"line":1848},[47,165927,30469],{"class":85},[47,165929,222],{"class":221},[47,165931,273],{"class":217},[47,165933,165934],{"class":81},"\"及格人数:",[47,165936,165937],{"class":85},"{len",[47,165939,165940],{"class":221},"(passed)",[47,165942,1165],{"class":85},[47,165944,470],{"class":81},[47,165946,228],{"class":221},[14,165948,165950],{"id":165949},"_616-易错点","6.16 易错点",[171,165952,165953,165956,165959,165962,165968,165977],{},[109,165954,165955],{},"列表可变，元组和字符串不可变。",[109,165957,165958],{},"切片结束位置不包含。",[109,165960,165961],{},"字典通过 key 取值，不是通过索引。",[109,165963,165964,165965,28439],{},"空集合要用 ",[26,165966,165967],{},"set()",[109,165969,104420,165970,165973,165974,28439],{},[26,165971,165972],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[26,165975,165976],{},"get()",[109,165978,165979],{},"嵌套容器要先看清楚每一层是什么类型。",[14,165981,165983],{"id":165982},"_617-本章练习","6.17 本章练习",[171,165985,165986,165989,165992,165995,165998],{},[109,165987,165988],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[109,165990,165991],{},"输入一句话，统计每个字符出现次数。",[109,165993,165994],{},"使用集合去除列表中的重复元素。",[109,165996,165997],{},"使用字典保存一个学生的信息，并实现修改成绩。",[109,165999,166000],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[134,166002,166003],{},"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":43,"searchDepth":92,"depth":92,"links":166005},[166006,166007,166008,166009,166010,166011,166012,166013,166014,166015,166016,166017,166018,166019,166020,166021,166022],{"id":162986,"depth":92,"text":162987},{"id":163103,"depth":92,"text":163104},{"id":163193,"depth":92,"text":163194},{"id":163317,"depth":92,"text":163318},{"id":163680,"depth":92,"text":163681},{"id":163867,"depth":92,"text":163868},{"id":163986,"depth":92,"text":163987},{"id":164128,"depth":92,"text":164129},{"id":164315,"depth":92,"text":164316},{"id":164559,"depth":92,"text":164560},{"id":164769,"depth":92,"text":164770},{"id":164854,"depth":92,"text":164855},{"id":165152,"depth":92,"text":165153},{"id":165434,"depth":92,"text":165435},{"id":165626,"depth":92,"text":165627},{"id":165949,"depth":92,"text":165950},{"id":165982,"depth":92,"text":165983},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":162978,"description":142},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166029,"title":166030,"body":166031,"description":142,"extension":143,"meta":168203,"navigation":145,"path":168204,"seo":168205,"stem":168206,"__hash__":168207},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166032,"toc":168178},[166033,166036,166040,166043,166123,166126,166147,166150,166154,166157,166219,166222,166239,166243,166246,166291,166293,166301,166305,166308,166390,166393,166396,166421,166424,166447,166451,166454,166456,166518,166521,166523,166574,166578,166582,166588,166693,166697,166703,166774,166778,166781,166849,166852,166932,166936,166942,166978,166981,166984,167094,167100,167104,167107,167179,167182,167186,167190,167195,167257,167261,167266,167334,167338,167343,167459,167463,167466,167546,167549,167553,167556,167660,167662,167677,167680,167684,167822,167830,167834,167836,167847,167849,168107,168111,168143,168147,168175],[10,166034,166030],{"id":166035},"_7-函数进阶",[14,166037,166039],{"id":166038},"_71-多返回值","7.1 多返回值",[19,166041,166042],{},"Python 函数可以返回多个值，本质上返回的是元组。",[38,166044,166046],{"className":30432,"code":166045,"language":30434,"meta":43,"style":43},"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",[26,166047,166048,166057,166065,166073,166082,166089,166093,166097,166106,166112],{"__ignoreMap":43},[47,166049,166050,166052,166055],{"class":49,"line":50},[47,166051,32001],{"class":217},[47,166053,166054],{"class":53}," get_info",[47,166056,32007],{"class":221},[47,166058,166059,166061,166063],{"class":49,"line":92},[47,166060,152424],{"class":221},[47,166062,267],{"class":217},[47,166064,149407],{"class":81},[47,166066,166067,166069,166071],{"class":49,"line":1273},[47,166068,152440],{"class":221},[47,166070,267],{"class":217},[47,166072,146605],{"class":85},[47,166074,166075,166077,166079],{"class":49,"line":1288},[47,166076,152455],{"class":221},[47,166078,267],{"class":217},[47,166080,166081],{"class":85}," 95\n",[47,166083,166084,166086],{"class":49,"line":1294},[47,166085,4183],{"class":217},[47,166087,166088],{"class":221}," name, age, score\n",[47,166090,166091],{"class":49,"line":1308},[47,166092,2493],{"emptyLinePlaceholder":145},[47,166094,166095],{"class":49,"line":1314},[47,166096,2493],{"emptyLinePlaceholder":145},[47,166098,166099,166101,166103],{"class":49,"line":1405},[47,166100,161360],{"class":221},[47,166102,267],{"class":217},[47,166104,166105],{"class":221}," get_info()\n",[47,166107,166108,166110],{"class":49,"line":1411},[47,166109,30469],{"class":85},[47,166111,76639],{"class":221},[47,166113,166114,166116,166118,166120],{"class":49,"line":1423},[47,166115,30469],{"class":85},[47,166117,222],{"class":221},[47,166119,103161],{"class":85},[47,166121,166122],{"class":221},"(result))\n",[19,166124,166125],{},"可以直接解包：",[38,166127,166129],{"className":30432,"code":166128,"language":30434,"meta":43,"style":43},"name, age, score = get_info()\nprint(name, age, score)\n",[26,166130,166131,166140],{"__ignoreMap":43},[47,166132,166133,166136,166138],{"class":49,"line":50},[47,166134,166135],{"class":221},"name, age, score ",[47,166137,267],{"class":217},[47,166139,166105],{"class":221},[47,166141,166142,166144],{"class":49,"line":92},[47,166143,30469],{"class":85},[47,166145,166146],{"class":221},"(name, age, score)\n",[19,166148,166149],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,166151,166153],{"id":166152},"_72-位置参数","7.2 位置参数",[19,166155,166156],{},"位置参数按顺序传递。",[38,166158,166160],{"className":30432,"code":166159,"language":30434,"meta":43,"style":43},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[26,166161,166162,166170,166198,166202,166206],{"__ignoreMap":43},[47,166163,166164,166166,166168],{"class":49,"line":50},[47,166165,32001],{"class":217},[47,166167,149426],{"class":53},[47,166169,149429],{"class":221},[47,166171,166172,166174,166176,166178,166180,166182,166184,166186,166188,166190,166192,166194,166196],{"class":49,"line":92},[47,166173,31353],{"class":85},[47,166175,222],{"class":221},[47,166177,273],{"class":217},[47,166179,149440],{"class":81},[47,166181,1115],{"class":85},[47,166183,79864],{"class":221},[47,166185,1165],{"class":85},[47,166187,149449],{"class":81},[47,166189,1115],{"class":85},[47,166191,70275],{"class":221},[47,166193,1165],{"class":85},[47,166195,149458],{"class":81},[47,166197,228],{"class":221},[47,166199,166200],{"class":49,"line":1273},[47,166201,2493],{"emptyLinePlaceholder":145},[47,166203,166204],{"class":49,"line":1288},[47,166205,2493],{"emptyLinePlaceholder":145},[47,166207,166208,166211,166213,166215,166217],{"class":49,"line":1294},[47,166209,166210],{"class":221},"introduce(",[47,166212,149942],{"class":81},[47,166214,12528],{"class":221},[47,166216,869],{"class":85},[47,166218,228],{"class":221},[19,166220,166221],{},"顺序错了就会得到错误含义：",[38,166223,166225],{"className":30432,"code":166224,"language":30434,"meta":43,"style":43},"introduce(18, \"小明\")\n",[26,166226,166227],{"__ignoreMap":43},[47,166228,166229,166231,166233,166235,166237],{"class":49,"line":50},[47,166230,166210],{"class":221},[47,166232,869],{"class":85},[47,166234,12528],{"class":221},[47,166236,149942],{"class":81},[47,166238,228],{"class":221},[14,166240,166242],{"id":166241},"_73-关键字参数","7.3 关键字参数",[19,166244,166245],{},"关键字参数按参数名传递。",[38,166247,166249],{"className":30432,"code":166248,"language":30434,"meta":43,"style":43},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[26,166250,166251,166271],{"__ignoreMap":43},[47,166252,166253,166255,166257,166259,166261,166263,166265,166267,166269],{"class":49,"line":50},[47,166254,166210],{"class":221},[47,166256,79864],{"class":5309},[47,166258,267],{"class":217},[47,166260,149942],{"class":81},[47,166262,12528],{"class":221},[47,166264,70275],{"class":5309},[47,166266,267],{"class":217},[47,166268,869],{"class":85},[47,166270,228],{"class":221},[47,166272,166273,166275,166277,166279,166281,166283,166285,166287,166289],{"class":49,"line":92},[47,166274,166210],{"class":221},[47,166276,70275],{"class":5309},[47,166278,267],{"class":217},[47,166280,869],{"class":85},[47,166282,12528],{"class":221},[47,166284,79864],{"class":5309},[47,166286,267],{"class":217},[47,166288,149942],{"class":81},[47,166290,228],{"class":221},[19,166292,117988],{},[171,166294,166295,166298],{},[109,166296,166297],{},"顺序不容易错。",[109,166299,166300],{},"调用时可读性更强。",[14,166302,166304],{"id":166303},"_74-默认参数","7.4 默认参数",[19,166306,166307],{},"默认参数给参数设置默认值。",[38,166309,166311],{"className":30432,"code":166310,"language":30434,"meta":43,"style":43},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[26,166312,166313,166329,166359,166363,166367,166377],{"__ignoreMap":43},[47,166314,166315,166317,166319,166322,166324,166327],{"class":49,"line":50},[47,166316,32001],{"class":217},[47,166318,122147],{"class":53},[47,166320,166321],{"class":221},"(host, port",[47,166323,267],{"class":217},[47,166325,166326],{"class":85},"3306",[47,166328,30840],{"class":221},[47,166330,166331,166333,166335,166337,166340,166342,166344,166346,166348,166350,166353,166355,166357],{"class":49,"line":92},[47,166332,31353],{"class":85},[47,166334,222],{"class":221},[47,166336,273],{"class":217},[47,166338,166339],{"class":81},"\"连接",[47,166341,1115],{"class":85},[47,166343,27449],{"class":221},[47,166345,1165],{"class":85},[47,166347,1078],{"class":81},[47,166349,1115],{"class":85},[47,166351,166352],{"class":221},"port",[47,166354,1165],{"class":85},[47,166356,470],{"class":81},[47,166358,228],{"class":221},[47,166360,166361],{"class":49,"line":1273},[47,166362,2493],{"emptyLinePlaceholder":145},[47,166364,166365],{"class":49,"line":1288},[47,166366,2493],{"emptyLinePlaceholder":145},[47,166368,166369,166372,166375],{"class":49,"line":1294},[47,166370,166371],{"class":221},"connect(",[47,166373,166374],{"class":81},"\"localhost\"",[47,166376,228],{"class":221},[47,166378,166379,166381,166383,166385,166388],{"class":49,"line":1308},[47,166380,166371],{"class":221},[47,166382,166374],{"class":81},[47,166384,12528],{"class":221},[47,166386,166387],{"class":85},"6379",[47,166389,228],{"class":221},[19,166391,166392],{},"注意：默认参数必须放在非默认参数后面。",[19,166394,166395],{},"错误：",[38,166397,166399],{"className":30432,"code":166398,"language":30434,"meta":43,"style":43},"def connect(port=3306, host):\n    pass\n",[26,166400,166401,166417],{"__ignoreMap":43},[47,166402,166403,166405,166407,166410,166412,166414],{"class":49,"line":50},[47,166404,32001],{"class":217},[47,166406,122147],{"class":53},[47,166408,166409],{"class":221},"(port",[47,166411,267],{"class":217},[47,166413,166326],{"class":85},[47,166415,166416],{"class":221},", host):\n",[47,166418,166419],{"class":49,"line":92},[47,166420,149591],{"class":217},[19,166422,166423],{},"正确：",[38,166425,166427],{"className":30432,"code":166426,"language":30434,"meta":43,"style":43},"def connect(host, port=3306):\n    pass\n",[26,166428,166429,166443],{"__ignoreMap":43},[47,166430,166431,166433,166435,166437,166439,166441],{"class":49,"line":50},[47,166432,32001],{"class":217},[47,166434,122147],{"class":53},[47,166436,166321],{"class":221},[47,166438,267],{"class":217},[47,166440,166326],{"class":85},[47,166442,30840],{"class":221},[47,166444,166445],{"class":49,"line":92},[47,166446,149591],{"class":217},[14,166448,166450],{"id":166449},"_75-默认参数的坑","7.5 默认参数的坑",[19,166452,166453],{},"不要使用可变对象作为默认参数。",[19,166455,157677],{},[38,166457,166459],{"className":30432,"code":166458,"language":30434,"meta":43,"style":43},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[26,166460,166461,166476,166481,166488,166492,166496,166507],{"__ignoreMap":43},[47,166462,166463,166465,166468,166471,166473],{"class":49,"line":50},[47,166464,32001],{"class":217},[47,166466,166467],{"class":53}," add_item",[47,166469,166470],{"class":221},"(item, items",[47,166472,267],{"class":217},[47,166474,166475],{"class":221},"[]):\n",[47,166477,166478],{"class":49,"line":92},[47,166479,166480],{"class":221},"    items.append(item)\n",[47,166482,166483,166485],{"class":49,"line":1273},[47,166484,4183],{"class":217},[47,166486,166487],{"class":221}," items\n",[47,166489,166490],{"class":49,"line":1288},[47,166491,2493],{"emptyLinePlaceholder":145},[47,166493,166494],{"class":49,"line":1294},[47,166495,2493],{"emptyLinePlaceholder":145},[47,166497,166498,166500,166503,166505],{"class":49,"line":1308},[47,166499,30469],{"class":85},[47,166501,166502],{"class":221},"(add_item(",[47,166504,165379],{"class":81},[47,166506,30551],{"class":221},[47,166508,166509,166511,166513,166516],{"class":49,"line":1314},[47,166510,30469],{"class":85},[47,166512,166502],{"class":221},[47,166514,166515],{"class":81},"\"b\"",[47,166517,30551],{"class":221},[19,166519,166520],{},"第二次调用会复用第一次的列表。",[19,166522,155942],{},[38,166524,166526],{"className":30432,"code":166525,"language":30434,"meta":43,"style":43},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[26,166527,166528,166542,166555,166564,166568],{"__ignoreMap":43},[47,166529,166530,166532,166534,166536,166538,166540],{"class":49,"line":50},[47,166531,32001],{"class":217},[47,166533,166467],{"class":53},[47,166535,166470],{"class":221},[47,166537,267],{"class":217},[47,166539,95740],{"class":85},[47,166541,30840],{"class":221},[47,166543,166544,166546,166549,166551,166553],{"class":49,"line":92},[47,166545,3194],{"class":217},[47,166547,166548],{"class":221}," items ",[47,166550,38981],{"class":217},[47,166552,38987],{"class":85},[47,166554,3832],{"class":221},[47,166556,166557,166560,166562],{"class":49,"line":1273},[47,166558,166559],{"class":221},"        items ",[47,166561,267],{"class":217},[47,166563,51892],{"class":221},[47,166565,166566],{"class":49,"line":1288},[47,166567,166480],{"class":221},[47,166569,166570,166572],{"class":49,"line":1294},[47,166571,4183],{"class":217},[47,166573,166487],{"class":221},[14,166575,166577],{"id":166576},"_76-不定长参数","7.6 不定长参数",[187,166579,166581],{"id":166580},"_761-args","7.6.1 *args",[19,166583,166584,166587],{},[26,166585,166586],{},"*args"," 接收任意数量的位置参数，得到元组。",[38,166589,166591],{"className":30432,"code":166590,"language":30434,"meta":43,"style":43},"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",[26,166592,166593,166606,166614,166625,166634,166640,166644,166648,166667],{"__ignoreMap":43},[47,166594,166595,166597,166599,166601,166603],{"class":49,"line":50},[47,166596,32001],{"class":217},[47,166598,5302],{"class":53},[47,166600,222],{"class":221},[47,166602,674],{"class":217},[47,166604,166605],{"class":221},"args):\n",[47,166607,166608,166610,166612],{"class":49,"line":92},[47,166609,159361],{"class":221},[47,166611,267],{"class":217},[47,166613,47387],{"class":85},[47,166615,166616,166618,166620,166622],{"class":49,"line":1273},[47,166617,3294],{"class":217},[47,166619,156234],{"class":221},[47,166621,26097],{"class":217},[47,166623,166624],{"class":221}," args:\n",[47,166626,166627,166629,166631],{"class":49,"line":1288},[47,166628,160036],{"class":221},[47,166630,9570],{"class":217},[47,166632,166633],{"class":221}," num\n",[47,166635,166636,166638],{"class":49,"line":1294},[47,166637,4183],{"class":217},[47,166639,162341],{"class":221},[47,166641,166642],{"class":49,"line":1308},[47,166643,2493],{"emptyLinePlaceholder":145},[47,166645,166646],{"class":49,"line":1314},[47,166647,2493],{"emptyLinePlaceholder":145},[47,166649,166650,166652,166655,166657,166659,166661,166663,166665],{"class":49,"line":1405},[47,166651,30469],{"class":85},[47,166653,166654],{"class":221},"(add(",[47,166656,436],{"class":85},[47,166658,12528],{"class":221},[47,166660,298],{"class":85},[47,166662,12528],{"class":221},[47,166664,292],{"class":85},[47,166666,30551],{"class":221},[47,166668,166669,166671,166673,166675,166677,166679,166681,166683,166685,166687,166689,166691],{"class":49,"line":1411},[47,166670,30469],{"class":85},[47,166672,166654],{"class":221},[47,166674,436],{"class":85},[47,166676,12528],{"class":221},[47,166678,298],{"class":85},[47,166680,12528],{"class":221},[47,166682,292],{"class":85},[47,166684,12528],{"class":221},[47,166686,512],{"class":85},[47,166688,12528],{"class":221},[47,166690,538],{"class":85},[47,166692,30551],{"class":221},[187,166694,166696],{"id":166695},"_762-kwargs","7.6.2 **kwargs",[19,166698,166699,166702],{},[26,166700,166701],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[38,166704,166706],{"className":30432,"code":166705,"language":30434,"meta":43,"style":43},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[26,166707,166708,166721,166732,166738,166742,166746],{"__ignoreMap":43},[47,166709,166710,166712,166714,166716,166718],{"class":49,"line":50},[47,166711,32001],{"class":217},[47,166713,161999],{"class":53},[47,166715,222],{"class":221},[47,166717,10754],{"class":217},[47,166719,166720],{"class":221},"kwargs):\n",[47,166722,166723,166725,166727,166729],{"class":49,"line":92},[47,166724,3294],{"class":217},[47,166726,164839],{"class":221},[47,166728,26097],{"class":217},[47,166730,166731],{"class":221}," kwargs.items():\n",[47,166733,166734,166736],{"class":49,"line":1273},[47,166735,32505],{"class":85},[47,166737,164851],{"class":221},[47,166739,166740],{"class":49,"line":1288},[47,166741,2493],{"emptyLinePlaceholder":145},[47,166743,166744],{"class":49,"line":1294},[47,166745,2493],{"emptyLinePlaceholder":145},[47,166747,166748,166750,166752,166754,166756,166758,166760,166762,166764,166766,166768,166770,166772],{"class":49,"line":1308},[47,166749,162064],{"class":221},[47,166751,79864],{"class":5309},[47,166753,267],{"class":217},[47,166755,149942],{"class":81},[47,166757,12528],{"class":221},[47,166759,70275],{"class":5309},[47,166761,267],{"class":217},[47,166763,869],{"class":85},[47,166765,12528],{"class":221},[47,166767,70326],{"class":5309},[47,166769,267],{"class":217},[47,166771,69323],{"class":81},[47,166773,228],{"class":221},[14,166775,166777],{"id":166776},"_77-参数解包","7.7 参数解包",[19,166779,166780],{},"列表或元组解包为位置参数：",[38,166782,166784],{"className":30432,"code":166783,"language":30434,"meta":43,"style":43},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[26,166785,166786,166795,166810,166814,166818,166838],{"__ignoreMap":43},[47,166787,166788,166790,166792],{"class":49,"line":50},[47,166789,32001],{"class":217},[47,166791,5302],{"class":53},[47,166793,166794],{"class":221},"(a, b, c):\n",[47,166796,166797,166799,166801,166803,166805,166807],{"class":49,"line":92},[47,166798,4183],{"class":217},[47,166800,10962],{"class":221},[47,166802,700],{"class":217},[47,166804,10975],{"class":221},[47,166806,700],{"class":217},[47,166808,166809],{"class":221}," c\n",[47,166811,166812],{"class":49,"line":1273},[47,166813,2493],{"emptyLinePlaceholder":145},[47,166815,166816],{"class":49,"line":1288},[47,166817,2493],{"emptyLinePlaceholder":145},[47,166819,166820,166822,166824,166826,166828,166830,166832,166834,166836],{"class":49,"line":1294},[47,166821,164154],{"class":221},[47,166823,267],{"class":217},[47,166825,52280],{"class":221},[47,166827,436],{"class":85},[47,166829,12528],{"class":221},[47,166831,298],{"class":85},[47,166833,12528],{"class":221},[47,166835,292],{"class":85},[47,166837,33300],{"class":221},[47,166839,166840,166842,166844,166846],{"class":49,"line":1308},[47,166841,30469],{"class":85},[47,166843,166654],{"class":221},[47,166845,674],{"class":217},[47,166847,166848],{"class":221},"nums))\n",[19,166850,166851],{},"字典解包为关键字参数：",[38,166853,166855],{"className":30432,"code":166854,"language":30434,"meta":43,"style":43},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[26,166856,166857,166865,166891,166895,166899,166923],{"__ignoreMap":43},[47,166858,166859,166861,166863],{"class":49,"line":50},[47,166860,32001],{"class":217},[47,166862,149426],{"class":53},[47,166864,149429],{"class":221},[47,166866,166867,166869,166871,166873,166875,166877,166879,166881,166883,166885,166887,166889],{"class":49,"line":92},[47,166868,31353],{"class":85},[47,166870,222],{"class":221},[47,166872,273],{"class":217},[47,166874,470],{"class":81},[47,166876,1115],{"class":85},[47,166878,79864],{"class":221},[47,166880,1165],{"class":85},[47,166882,4541],{"class":85},[47,166884,70275],{"class":221},[47,166886,1165],{"class":85},[47,166888,470],{"class":81},[47,166890,228],{"class":221},[47,166892,166893],{"class":49,"line":1273},[47,166894,2493],{"emptyLinePlaceholder":145},[47,166896,166897],{"class":49,"line":1288},[47,166898,2493],{"emptyLinePlaceholder":145},[47,166900,166901,166903,166905,166907,166909,166911,166913,166915,166917,166919,166921],{"class":49,"line":1294},[47,166902,116368],{"class":221},[47,166904,267],{"class":217},[47,166906,4541],{"class":221},[47,166908,62733],{"class":81},[47,166910,51491],{"class":221},[47,166912,149942],{"class":81},[47,166914,12528],{"class":221},[47,166916,69178],{"class":81},[47,166918,51491],{"class":221},[47,166920,869],{"class":85},[47,166922,1659],{"class":221},[47,166924,166925,166927,166929],{"class":49,"line":1308},[47,166926,166210],{"class":221},[47,166928,10754],{"class":217},[47,166930,166931],{"class":221},"info)\n",[14,166933,166935],{"id":166934},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,166937,166938,166941],{},[26,166939,166940],{},"lambda"," 用于定义简单匿名函数。",[38,166943,166945],{"className":30432,"code":166944,"language":30434,"meta":43,"style":43},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[26,166946,166947,166964],{"__ignoreMap":43},[47,166948,166949,166952,166954,166957,166960,166962],{"class":49,"line":50},[47,166950,166951],{"class":221},"add ",[47,166953,267],{"class":217},[47,166955,166956],{"class":217}," lambda",[47,166958,166959],{"class":221}," a, b: a ",[47,166961,700],{"class":217},[47,166963,151158],{"class":221},[47,166965,166966,166968,166970,166972,166974,166976],{"class":49,"line":92},[47,166967,30469],{"class":85},[47,166969,166654],{"class":221},[47,166971,436],{"class":85},[47,166973,12528],{"class":221},[47,166975,298],{"class":85},[47,166977,30551],{"class":221},[19,166979,166980],{},"常和排序、过滤等函数一起使用。",[19,166982,166983],{},"按分数排序：",[38,166985,166987],{"className":30432,"code":166986,"language":30434,"meta":43,"style":43},"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",[26,166988,166989,166997,167017,167037,167057,167061,167065,167088],{"__ignoreMap":43},[47,166990,166991,166993,166995],{"class":49,"line":50},[47,166992,159770],{"class":221},[47,166994,267],{"class":217},[47,166996,55501],{"class":221},[47,166998,166999,167001,167003,167005,167007,167009,167011,167013,167015],{"class":49,"line":92},[47,167000,148439],{"class":221},[47,167002,62733],{"class":81},[47,167004,51491],{"class":221},[47,167006,149942],{"class":81},[47,167008,12528],{"class":221},[47,167010,151526],{"class":81},[47,167012,51491],{"class":221},[47,167014,1208],{"class":85},[47,167016,5023],{"class":221},[47,167018,167019,167021,167023,167025,167027,167029,167031,167033,167035],{"class":49,"line":1273},[47,167020,148439],{"class":221},[47,167022,62733],{"class":81},[47,167024,51491],{"class":221},[47,167026,150990],{"class":81},[47,167028,12528],{"class":221},[47,167030,151526],{"class":81},[47,167032,51491],{"class":221},[47,167034,1030],{"class":85},[47,167036,5023],{"class":221},[47,167038,167039,167041,167043,167045,167047,167049,167051,167053,167055],{"class":49,"line":1288},[47,167040,148439],{"class":221},[47,167042,62733],{"class":81},[47,167044,51491],{"class":221},[47,167046,159785],{"class":81},[47,167048,12528],{"class":221},[47,167050,151526],{"class":81},[47,167052,51491],{"class":221},[47,167054,625],{"class":85},[47,167056,5023],{"class":221},[47,167058,167059],{"class":49,"line":1294},[47,167060,33300],{"class":221},[47,167062,167063],{"class":49,"line":1308},[47,167064,2493],{"emptyLinePlaceholder":145},[47,167066,167067,167070,167072,167074,167076,167078,167080,167082,167084,167086],{"class":49,"line":1314},[47,167068,167069],{"class":221},"students.sort(",[47,167071,154000],{"class":5309},[47,167073,154003],{"class":217},[47,167075,154006],{"class":221},[47,167077,151526],{"class":81},[47,167079,112256],{"class":221},[47,167081,163582],{"class":5309},[47,167083,267],{"class":217},[47,167085,31530],{"class":85},[47,167087,228],{"class":221},[47,167089,167090,167092],{"class":49,"line":1405},[47,167091,30469],{"class":85},[47,167093,165049],{"class":221},[19,167095,167096,167097,167099],{},"如果逻辑复杂，不要硬写 ",[26,167098,166940],{},"，定义普通函数更清晰。",[14,167101,167103],{"id":167102},"_79-函数作为参数","7.9 函数作为参数",[19,167105,167106],{},"函数可以作为参数传给另一个函数。",[38,167108,167110],{"className":30432,"code":167109,"language":30434,"meta":43,"style":43},"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",[26,167111,167112,167120,167130,167134,167138,167148,167155,167159,167163],{"__ignoreMap":43},[47,167113,167114,167116,167118],{"class":49,"line":50},[47,167115,32001],{"class":217},[47,167117,5302],{"class":53},[47,167119,151147],{"class":221},[47,167121,167122,167124,167126,167128],{"class":49,"line":92},[47,167123,4183],{"class":217},[47,167125,10962],{"class":221},[47,167127,700],{"class":217},[47,167129,151158],{"class":221},[47,167131,167132],{"class":49,"line":1273},[47,167133,2493],{"emptyLinePlaceholder":145},[47,167135,167136],{"class":49,"line":1288},[47,167137,2493],{"emptyLinePlaceholder":145},[47,167139,167140,167142,167145],{"class":49,"line":1294},[47,167141,32001],{"class":217},[47,167143,167144],{"class":53}," calculate",[47,167146,167147],{"class":221},"(a, b, func):\n",[47,167149,167150,167152],{"class":49,"line":1308},[47,167151,4183],{"class":217},[47,167153,167154],{"class":221}," func(a, b)\n",[47,167156,167157],{"class":49,"line":1314},[47,167158,2493],{"emptyLinePlaceholder":145},[47,167160,167161],{"class":49,"line":1405},[47,167162,2493],{"emptyLinePlaceholder":145},[47,167164,167165,167167,167170,167172,167174,167176],{"class":49,"line":1411},[47,167166,30469],{"class":85},[47,167168,167169],{"class":221},"(calculate(",[47,167171,665],{"class":85},[47,167173,12528],{"class":221},[47,167175,919],{"class":85},[47,167177,167178],{"class":221},", add))\n",[19,167180,167181],{},"这种思想在排序、回调、框架中经常出现。",[14,167183,167185],{"id":167184},"_710-mapfiltersorted","7.10 map、filter、sorted",[187,167187,167189],{"id":167188},"_7101-map","7.10.1 map",[19,167191,167192,167194],{},[26,167193,74098],{}," 对每个元素执行函数。",[38,167196,167198],{"className":30432,"code":167197,"language":30434,"meta":43,"style":43},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[26,167199,167200,167224,167247],{"__ignoreMap":43},[47,167201,167202,167204,167206,167208,167210,167212,167214,167216,167218,167220,167222],{"class":49,"line":50},[47,167203,164154],{"class":221},[47,167205,267],{"class":217},[47,167207,52280],{"class":221},[47,167209,436],{"class":85},[47,167211,12528],{"class":221},[47,167213,298],{"class":85},[47,167215,12528],{"class":221},[47,167217,292],{"class":85},[47,167219,12528],{"class":221},[47,167221,512],{"class":85},[47,167223,33300],{"class":221},[47,167225,167226,167228,167230,167233,167235,167237,167240,167242,167244],{"class":49,"line":92},[47,167227,161360],{"class":221},[47,167229,267],{"class":217},[47,167231,167232],{"class":85}," map",[47,167234,222],{"class":221},[47,167236,166940],{"class":217},[47,167238,167239],{"class":221}," x: x ",[47,167241,674],{"class":217},[47,167243,14848],{"class":85},[47,167245,167246],{"class":221},", nums)\n",[47,167248,167249,167251,167253,167255],{"class":49,"line":1273},[47,167250,30469],{"class":85},[47,167252,222],{"class":221},[47,167254,154124],{"class":85},[47,167256,166122],{"class":221},[187,167258,167260],{"id":167259},"_7102-filter","7.10.2 filter",[19,167262,167263,167265],{},[26,167264,80105],{}," 保留满足条件的元素。",[38,167267,167269],{"className":30432,"code":167268,"language":30434,"meta":43,"style":43},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[26,167270,167271,167299,167324],{"__ignoreMap":43},[47,167272,167273,167275,167277,167279,167281,167283,167285,167287,167289,167291,167293,167295,167297],{"class":49,"line":50},[47,167274,164154],{"class":221},[47,167276,267],{"class":217},[47,167278,52280],{"class":221},[47,167280,436],{"class":85},[47,167282,12528],{"class":221},[47,167284,298],{"class":85},[47,167286,12528],{"class":221},[47,167288,292],{"class":85},[47,167290,12528],{"class":221},[47,167292,512],{"class":85},[47,167294,12528],{"class":221},[47,167296,538],{"class":85},[47,167298,33300],{"class":221},[47,167300,167301,167303,167305,167308,167310,167312,167314,167316,167318,167320,167322],{"class":49,"line":92},[47,167302,161360],{"class":221},[47,167304,267],{"class":217},[47,167306,167307],{"class":85}," filter",[47,167309,222],{"class":221},[47,167311,166940],{"class":217},[47,167313,167239],{"class":221},[47,167315,547],{"class":217},[47,167317,14848],{"class":85},[47,167319,101613],{"class":217},[47,167321,4186],{"class":85},[47,167323,167246],{"class":221},[47,167325,167326,167328,167330,167332],{"class":49,"line":1273},[47,167327,30469],{"class":85},[47,167329,222],{"class":221},[47,167331,154124],{"class":85},[47,167333,166122],{"class":221},[187,167335,167337],{"id":167336},"_7103-sorted","7.10.3 sorted",[19,167339,167340,167342],{},[26,167341,165290],{}," 返回排序后的新列表。",[38,167344,167346],{"className":30432,"code":167345,"language":30434,"meta":43,"style":43},"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",[26,167347,167348,167356,167376,167396,167416,167420,167424,167453],{"__ignoreMap":43},[47,167349,167350,167352,167354],{"class":49,"line":50},[47,167351,159770],{"class":221},[47,167353,267],{"class":217},[47,167355,55501],{"class":221},[47,167357,167358,167360,167362,167364,167366,167368,167370,167372,167374],{"class":49,"line":92},[47,167359,148439],{"class":221},[47,167361,62733],{"class":81},[47,167363,51491],{"class":221},[47,167365,149942],{"class":81},[47,167367,12528],{"class":221},[47,167369,151526],{"class":81},[47,167371,51491],{"class":221},[47,167373,1208],{"class":85},[47,167375,5023],{"class":221},[47,167377,167378,167380,167382,167384,167386,167388,167390,167392,167394],{"class":49,"line":1273},[47,167379,148439],{"class":221},[47,167381,62733],{"class":81},[47,167383,51491],{"class":221},[47,167385,150990],{"class":81},[47,167387,12528],{"class":221},[47,167389,151526],{"class":81},[47,167391,51491],{"class":221},[47,167393,1030],{"class":85},[47,167395,5023],{"class":221},[47,167397,167398,167400,167402,167404,167406,167408,167410,167412,167414],{"class":49,"line":1288},[47,167399,148439],{"class":221},[47,167401,62733],{"class":81},[47,167403,51491],{"class":221},[47,167405,159785],{"class":81},[47,167407,12528],{"class":221},[47,167409,151526],{"class":81},[47,167411,51491],{"class":221},[47,167413,625],{"class":85},[47,167415,5023],{"class":221},[47,167417,167418],{"class":49,"line":1294},[47,167419,33300],{"class":221},[47,167421,167422],{"class":49,"line":1308},[47,167423,2493],{"emptyLinePlaceholder":145},[47,167425,167426,167428,167430,167432,167435,167437,167439,167441,167443,167445,167447,167449,167451],{"class":49,"line":1314},[47,167427,161360],{"class":221},[47,167429,267],{"class":217},[47,167431,163658],{"class":85},[47,167433,167434],{"class":221},"(students, ",[47,167436,154000],{"class":5309},[47,167438,154003],{"class":217},[47,167440,154006],{"class":221},[47,167442,151526],{"class":81},[47,167444,112256],{"class":221},[47,167446,163582],{"class":5309},[47,167448,267],{"class":217},[47,167450,31530],{"class":85},[47,167452,228],{"class":221},[47,167454,167455,167457],{"class":49,"line":1405},[47,167456,30469],{"class":85},[47,167458,76639],{"class":221},[14,167460,167462],{"id":167461},"_711-闭包入门","7.11 闭包入门",[19,167464,167465],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[38,167467,167469],{"className":30432,"code":167468,"language":30434,"meta":43,"style":43},"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",[26,167470,167471,167481,167491,167502,167506,167513,167517,167521,167535],{"__ignoreMap":43},[47,167472,167473,167475,167478],{"class":49,"line":50},[47,167474,32001],{"class":217},[47,167476,167477],{"class":53}," outer",[47,167479,167480],{"class":221},"(base):\n",[47,167482,167483,167485,167488],{"class":49,"line":92},[47,167484,30855],{"class":217},[47,167486,167487],{"class":53}," inner",[47,167489,167490],{"class":221},"(num):\n",[47,167492,167493,167495,167498,167500],{"class":49,"line":1273},[47,167494,14845],{"class":217},[47,167496,167497],{"class":221}," base ",[47,167499,700],{"class":217},[47,167501,166633],{"class":221},[47,167503,167504],{"class":49,"line":1288},[47,167505,2493],{"emptyLinePlaceholder":145},[47,167507,167508,167510],{"class":49,"line":1294},[47,167509,4183],{"class":217},[47,167511,167512],{"class":221}," inner\n",[47,167514,167515],{"class":49,"line":1308},[47,167516,2493],{"emptyLinePlaceholder":145},[47,167518,167519],{"class":49,"line":1314},[47,167520,2493],{"emptyLinePlaceholder":145},[47,167522,167523,167526,167528,167531,167533],{"class":49,"line":1405},[47,167524,167525],{"class":221},"add_10 ",[47,167527,267],{"class":217},[47,167529,167530],{"class":221}," outer(",[47,167532,665],{"class":85},[47,167534,228],{"class":221},[47,167536,167537,167539,167542,167544],{"class":49,"line":1411},[47,167538,30469],{"class":85},[47,167540,167541],{"class":221},"(add_10(",[47,167543,538],{"class":85},[47,167545,30551],{"class":221},[19,167547,167548],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,167550,167552],{"id":167551},"_712-装饰器入门","7.12 装饰器入门",[19,167554,167555],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[38,167557,167559],{"className":30432,"code":167558,"language":30434,"meta":43,"style":43},"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",[26,167560,167561,167570,167579,167590,167595,167606,167610,167617,167621,167625,167630,167638,167648,167652,167656],{"__ignoreMap":43},[47,167562,167563,167565,167567],{"class":49,"line":50},[47,167564,32001],{"class":217},[47,167566,87245],{"class":53},[47,167568,167569],{"class":221},"(func):\n",[47,167571,167572,167574,167577],{"class":49,"line":92},[47,167573,30855],{"class":217},[47,167575,167576],{"class":53}," wrapper",[47,167578,32007],{"class":221},[47,167580,167581,167583,167585,167588],{"class":49,"line":1273},[47,167582,32505],{"class":85},[47,167584,222],{"class":221},[47,167586,167587],{"class":81},"\"函数开始执行\"",[47,167589,228],{"class":221},[47,167591,167592],{"class":49,"line":1288},[47,167593,167594],{"class":221},"        func()\n",[47,167596,167597,167599,167601,167604],{"class":49,"line":1294},[47,167598,32505],{"class":85},[47,167600,222],{"class":221},[47,167602,167603],{"class":81},"\"函数执行结束\"",[47,167605,228],{"class":221},[47,167607,167608],{"class":49,"line":1308},[47,167609,2493],{"emptyLinePlaceholder":145},[47,167611,167612,167614],{"class":49,"line":1314},[47,167613,4183],{"class":217},[47,167615,167616],{"class":221}," wrapper\n",[47,167618,167619],{"class":49,"line":1405},[47,167620,2493],{"emptyLinePlaceholder":145},[47,167622,167623],{"class":49,"line":1411},[47,167624,2493],{"emptyLinePlaceholder":145},[47,167626,167627],{"class":49,"line":1423},[47,167628,167629],{"class":53},"@log\n",[47,167631,167632,167634,167636],{"class":49,"line":1706},[47,167633,32001],{"class":217},[47,167635,161050],{"class":53},[47,167637,32007],{"class":221},[47,167639,167640,167642,167644,167646],{"class":49,"line":1711},[47,167641,31353],{"class":85},[47,167643,222],{"class":221},[47,167645,5937],{"class":81},[47,167647,228],{"class":221},[47,167649,167650],{"class":49,"line":1717},[47,167651,2493],{"emptyLinePlaceholder":145},[47,167653,167654],{"class":49,"line":1722},[47,167655,2493],{"emptyLinePlaceholder":145},[47,167657,167658],{"class":49,"line":1736},[47,167659,161085],{"class":221},[19,167661,158328],{},[38,167663,167665],{"className":30432,"code":167664,"language":30434,"meta":43,"style":43},"say_hello = log(say_hello)\n",[26,167666,167667],{"__ignoreMap":43},[47,167668,167669,167672,167674],{"class":49,"line":50},[47,167670,167671],{"class":221},"say_hello ",[47,167673,267],{"class":217},[47,167675,167676],{"class":221}," log(say_hello)\n",[19,167678,167679],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,167681,167683],{"id":167682},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[38,167685,167687],{"className":30432,"code":167686,"language":30434,"meta":43,"style":43},"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",[26,167688,167689,167697,167714,167724,167743,167753,167760,167764,167770,167774,167778,167782,167790,167800,167804,167808],{"__ignoreMap":43},[47,167690,167691,167693,167695],{"class":49,"line":50},[47,167692,32001],{"class":217},[47,167694,87245],{"class":53},[47,167696,167569],{"class":221},[47,167698,167699,167701,167703,167705,167707,167710,167712],{"class":49,"line":92},[47,167700,30855],{"class":217},[47,167702,167576],{"class":53},[47,167704,222],{"class":221},[47,167706,674],{"class":217},[47,167708,167709],{"class":221},"args, ",[47,167711,10754],{"class":217},[47,167713,166720],{"class":221},[47,167715,167716,167718,167720,167722],{"class":49,"line":1273},[47,167717,32505],{"class":85},[47,167719,222],{"class":221},[47,167721,167587],{"class":81},[47,167723,228],{"class":221},[47,167725,167726,167729,167731,167734,167736,167738,167740],{"class":49,"line":1288},[47,167727,167728],{"class":221},"        result ",[47,167730,267],{"class":217},[47,167732,167733],{"class":221}," func(",[47,167735,674],{"class":217},[47,167737,167709],{"class":221},[47,167739,10754],{"class":217},[47,167741,167742],{"class":221},"kwargs)\n",[47,167744,167745,167747,167749,167751],{"class":49,"line":1294},[47,167746,32505],{"class":85},[47,167748,222],{"class":221},[47,167750,167603],{"class":81},[47,167752,228],{"class":221},[47,167754,167755,167757],{"class":49,"line":1308},[47,167756,14845],{"class":217},[47,167758,167759],{"class":221}," result\n",[47,167761,167762],{"class":49,"line":1314},[47,167763,2493],{"emptyLinePlaceholder":145},[47,167765,167766,167768],{"class":49,"line":1405},[47,167767,4183],{"class":217},[47,167769,167616],{"class":221},[47,167771,167772],{"class":49,"line":1411},[47,167773,2493],{"emptyLinePlaceholder":145},[47,167775,167776],{"class":49,"line":1423},[47,167777,2493],{"emptyLinePlaceholder":145},[47,167779,167780],{"class":49,"line":1706},[47,167781,167629],{"class":53},[47,167783,167784,167786,167788],{"class":49,"line":1711},[47,167785,32001],{"class":217},[47,167787,5302],{"class":53},[47,167789,151147],{"class":221},[47,167791,167792,167794,167796,167798],{"class":49,"line":1717},[47,167793,4183],{"class":217},[47,167795,10962],{"class":221},[47,167797,700],{"class":217},[47,167799,151158],{"class":221},[47,167801,167802],{"class":49,"line":1722},[47,167803,2493],{"emptyLinePlaceholder":145},[47,167805,167806],{"class":49,"line":1736},[47,167807,2493],{"emptyLinePlaceholder":145},[47,167809,167810,167812,167814,167816,167818,167820],{"class":49,"line":1741},[47,167811,30469],{"class":85},[47,167813,166654],{"class":221},[47,167815,665],{"class":85},[47,167817,12528],{"class":221},[47,167819,919],{"class":85},[47,167821,30551],{"class":221},[19,167823,167824,167825,101072,167827,167829],{},"这个写法使用 ",[26,167826,166586],{},[26,167828,166701],{}," 接收原函数的所有参数。",[14,167831,167833],{"id":167832},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,167835,123346],{},[171,167837,167838,167841,167844],{},[109,167839,167840],{},"给定一组学生数据。",[109,167842,167843],{},"封装函数，根据传入规则筛选学生。",[109,167845,167846],{},"筛选及格、优秀、未成年学生。",[19,167848,10128],{},[38,167850,167852],{"className":30432,"code":167851,"language":30434,"meta":43,"style":43},"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",[26,167853,167854,167862,167890,167918,167946,167950,167954,167958,167968,167976,167986,167993,167998,168004,168008,168012,168036,168059,168082,168086,168093,168100],{"__ignoreMap":43},[47,167855,167856,167858,167860],{"class":49,"line":50},[47,167857,159770],{"class":221},[47,167859,267],{"class":217},[47,167861,55501],{"class":221},[47,167863,167864,167866,167868,167870,167872,167874,167876,167878,167880,167882,167884,167886,167888],{"class":49,"line":92},[47,167865,148439],{"class":221},[47,167867,62733],{"class":81},[47,167869,51491],{"class":221},[47,167871,149942],{"class":81},[47,167873,12528],{"class":221},[47,167875,69178],{"class":81},[47,167877,51491],{"class":221},[47,167879,869],{"class":85},[47,167881,12528],{"class":221},[47,167883,151526],{"class":81},[47,167885,51491],{"class":221},[47,167887,1208],{"class":85},[47,167889,5023],{"class":221},[47,167891,167892,167894,167896,167898,167900,167902,167904,167906,167908,167910,167912,167914,167916],{"class":49,"line":1273},[47,167893,148439],{"class":221},[47,167895,62733],{"class":81},[47,167897,51491],{"class":221},[47,167899,150990],{"class":81},[47,167901,12528],{"class":221},[47,167903,69178],{"class":81},[47,167905,51491],{"class":221},[47,167907,844],{"class":85},[47,167909,12528],{"class":221},[47,167911,151526],{"class":81},[47,167913,51491],{"class":221},[47,167915,1030],{"class":85},[47,167917,5023],{"class":221},[47,167919,167920,167922,167924,167926,167928,167930,167932,167934,167936,167938,167940,167942,167944],{"class":49,"line":1288},[47,167921,148439],{"class":221},[47,167923,62733],{"class":81},[47,167925,51491],{"class":221},[47,167927,159785],{"class":81},[47,167929,12528],{"class":221},[47,167931,69178],{"class":81},[47,167933,51491],{"class":221},[47,167935,894],{"class":85},[47,167937,12528],{"class":221},[47,167939,151526],{"class":81},[47,167941,51491],{"class":221},[47,167943,1101],{"class":85},[47,167945,5023],{"class":221},[47,167947,167948],{"class":49,"line":1294},[47,167949,33300],{"class":221},[47,167951,167952],{"class":49,"line":1308},[47,167953,2493],{"emptyLinePlaceholder":145},[47,167955,167956],{"class":49,"line":1314},[47,167957,2493],{"emptyLinePlaceholder":145},[47,167959,167960,167962,167965],{"class":49,"line":1405},[47,167961,32001],{"class":217},[47,167963,167964],{"class":53}," filter_students",[47,167966,167967],{"class":221},"(students, condition):\n",[47,167969,167970,167972,167974],{"class":49,"line":1411},[47,167971,161277],{"class":221},[47,167973,267],{"class":217},[47,167975,51892],{"class":221},[47,167977,167978,167980,167982,167984],{"class":49,"line":1423},[47,167979,3294],{"class":217},[47,167981,152191],{"class":221},[47,167983,26097],{"class":217},[47,167985,152196],{"class":221},[47,167987,167988,167990],{"class":49,"line":1706},[47,167989,2590],{"class":217},[47,167991,167992],{"class":221}," condition(student):\n",[47,167994,167995],{"class":49,"line":1711},[47,167996,167997],{"class":221},"            result.append(student)\n",[47,167999,168000,168002],{"class":49,"line":1717},[47,168001,4183],{"class":217},[47,168003,167759],{"class":221},[47,168005,168006],{"class":49,"line":1722},[47,168007,2493],{"emptyLinePlaceholder":145},[47,168009,168010],{"class":49,"line":1736},[47,168011,2493],{"emptyLinePlaceholder":145},[47,168013,168014,168016,168018,168021,168023,168026,168028,168030,168032,168034],{"class":49,"line":1741},[47,168015,165755],{"class":221},[47,168017,267],{"class":217},[47,168019,168020],{"class":221}," filter_students(students, ",[47,168022,166940],{"class":217},[47,168024,168025],{"class":221}," s: s[",[47,168027,151526],{"class":81},[47,168029,4536],{"class":221},[47,168031,1804],{"class":217},[47,168033,157891],{"class":85},[47,168035,228],{"class":221},[47,168037,168038,168041,168043,168045,168047,168049,168051,168053,168055,168057],{"class":49,"line":1747},[47,168039,168040],{"class":221},"excellent ",[47,168042,267],{"class":217},[47,168044,168020],{"class":221},[47,168046,166940],{"class":217},[47,168048,168025],{"class":221},[47,168050,151526],{"class":81},[47,168052,4536],{"class":221},[47,168054,1804],{"class":217},[47,168056,157842],{"class":85},[47,168058,228],{"class":221},[47,168060,168061,168064,168066,168068,168070,168072,168074,168076,168078,168080],{"class":49,"line":1768},[47,168062,168063],{"class":221},"under_age ",[47,168065,267],{"class":217},[47,168067,168020],{"class":221},[47,168069,166940],{"class":217},[47,168071,168025],{"class":221},[47,168073,69178],{"class":81},[47,168075,4536],{"class":221},[47,168077,1129],{"class":217},[47,168079,156339],{"class":85},[47,168081,228],{"class":221},[47,168083,168084],{"class":49,"line":1773},[47,168085,2493],{"emptyLinePlaceholder":145},[47,168087,168088,168090],{"class":49,"line":1787},[47,168089,30469],{"class":85},[47,168091,168092],{"class":221},"(passed)\n",[47,168094,168095,168097],{"class":49,"line":1792},[47,168096,30469],{"class":85},[47,168098,168099],{"class":221},"(excellent)\n",[47,168101,168102,168104],{"class":49,"line":1821},[47,168103,30469],{"class":85},[47,168105,168106],{"class":221},"(under_age)\n",[14,168108,168110],{"id":168109},"_715-易错点","7.15 易错点",[171,168112,168113,168116,168124,168129,168140],{},[109,168114,168115],{},"默认参数不要写可变对象。",[109,168117,168118,168120,168121,168123],{},[26,168119,166586],{}," 是元组，",[26,168122,166701],{}," 是字典。",[109,168125,168126,168128],{},[26,168127,166940],{}," 只适合简单表达式。",[109,168130,168131,101072,168133,168135,168136,168139],{},[26,168132,74098],{},[26,168134,80105],{}," 的结果是迭代器，常用 ",[26,168137,168138],{},"list()"," 转换查看。",[109,168141,168142],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,168144,168146],{"id":168145},"_716-本章练习","7.16 本章练习",[171,168148,168149,168156,168162,168167,168172],{},[109,168150,168151,168152,168155],{},"写函数 ",[26,168153,168154],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[109,168157,168151,168158,168161],{},[26,168159,168160],{},"print_user(**kwargs)","，输出用户所有字段。",[109,168163,104420,168164,168166],{},[26,168165,166940],{}," 对学生列表按年龄排序。",[109,168168,104420,168169,168171],{},[26,168170,80105],{}," 找出成绩不及格的学生。",[109,168173,168174],{},"写一个装饰器，统计函数执行前后的提示信息。",[134,168176,168177],{},"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":43,"searchDepth":92,"depth":92,"links":168179},[168180,168181,168182,168183,168184,168185,168189,168190,168191,168192,168197,168198,168199,168200,168201,168202],{"id":166038,"depth":92,"text":166039},{"id":166152,"depth":92,"text":166153},{"id":166241,"depth":92,"text":166242},{"id":166303,"depth":92,"text":166304},{"id":166449,"depth":92,"text":166450},{"id":166576,"depth":92,"text":166577,"children":168186},[168187,168188],{"id":166580,"depth":1273,"text":166581},{"id":166695,"depth":1273,"text":166696},{"id":166776,"depth":92,"text":166777},{"id":166934,"depth":92,"text":166935},{"id":167102,"depth":92,"text":167103},{"id":167184,"depth":92,"text":167185,"children":168193},[168194,168195,168196],{"id":167188,"depth":1273,"text":167189},{"id":167259,"depth":1273,"text":167260},{"id":167336,"depth":1273,"text":167337},{"id":167461,"depth":92,"text":167462},{"id":167551,"depth":92,"text":167552},{"id":167682,"depth":92,"text":167683},{"id":167832,"depth":92,"text":167833},{"id":168109,"depth":92,"text":168110},{"id":168145,"depth":92,"text":168146},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166030,"description":142},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168209,"title":168210,"body":168211,"description":142,"extension":143,"meta":170730,"navigation":145,"path":170731,"seo":170732,"stem":170733,"__hash__":170734},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168212,"toc":170705},[168213,168216,168220,168223,168226,168257,168261,168265,168268,168295,168299,168302,168353,168356,168371,168374,168409,168413,168415,168439,168442,168502,168506,168510,168513,168570,168573,168593,168597,168600,168663,168667,168670,168726,168733,168757,168761,168764,168827,168831,168836,168887,168890,168894,168899,168966,168969,169051,169055,169060,169111,169114,169118,169121,169124,169132,169135,169181,169184,169230,169234,169240,169284,169287,169333,169336,169376,169379,169440,169444,169447,169537,169540,169682,169685,169752,169756,169759,169762,169903,169906,169984,169987,170163,170167,170169,170180,170182,170381,170385,170629,170633,170667,170671,170702],[10,168214,168210],{"id":168215},"_8-文件操作",[14,168217,168219],{"id":168218},"_81-文件操作的意义","8.1 文件操作的意义",[19,168221,168222],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,168224,168225],{},"常见文件类型：",[171,168227,168228,168234,168240,168246,168252],{},[109,168229,168230,168233],{},[26,168231,168232],{},".txt","：普通文本。",[109,168235,168236,168239],{},[26,168237,168238],{},".csv","：表格文本。",[109,168241,168242,168245],{},[26,168243,168244],{},".json","：结构化数据。",[109,168247,168248,168251],{},[26,168249,168250],{},".log","：日志文件。",[109,168253,168254,168256],{},[26,168255,146406],{},"：Python 源代码。",[14,168258,168260],{"id":168259},"_82-路径","8.2 路径",[187,168262,168264],{"id":168263},"_821-相对路径","8.2.1 相对路径",[19,168266,168267],{},"相对当前运行目录：",[38,168269,168271],{"className":30432,"code":168270,"language":30434,"meta":43,"style":43},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[26,168272,168273],{"__ignoreMap":43},[47,168274,168275,168277,168279,168281,168283,168285,168287,168289,168291,168293],{"class":49,"line":50},[47,168276,86969],{"class":85},[47,168278,222],{"class":221},[47,168280,146850],{"class":81},[47,168282,12528],{"class":221},[47,168284,146855],{"class":81},[47,168286,12528],{"class":221},[47,168288,146860],{"class":5309},[47,168290,267],{"class":217},[47,168292,146865],{"class":81},[47,168294,228],{"class":221},[187,168296,168298],{"id":168297},"_822-绝对路径","8.2.2 绝对路径",[19,168300,168301],{},"从根目录或盘符开始：",[38,168303,168305],{"className":30432,"code":168304,"language":30434,"meta":43,"style":43},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[26,168306,168307,168330],{"__ignoreMap":43},[47,168308,168309,168311,168313,168316,168318,168320,168322,168324,168326,168328],{"class":49,"line":50},[47,168310,86969],{"class":85},[47,168312,222],{"class":221},[47,168314,168315],{"class":81},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[47,168317,12528],{"class":221},[47,168319,146855],{"class":81},[47,168321,12528],{"class":221},[47,168323,146860],{"class":5309},[47,168325,267],{"class":217},[47,168327,146865],{"class":81},[47,168329,228],{"class":221},[47,168331,168332,168334,168336,168339,168341,168343,168345,168347,168349,168351],{"class":49,"line":92},[47,168333,86969],{"class":85},[47,168335,222],{"class":221},[47,168337,168338],{"class":81},"\"D:\u002Fdata\u002Fdata.txt\"",[47,168340,12528],{"class":221},[47,168342,146855],{"class":81},[47,168344,12528],{"class":221},[47,168346,146860],{"class":5309},[47,168348,267],{"class":217},[47,168350,146865],{"class":81},[47,168352,228],{"class":221},[19,168354,168355],{},"Windows 路径建议写成：",[38,168357,168359],{"className":30432,"code":168358,"language":30434,"meta":43,"style":43},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[26,168360,168361],{"__ignoreMap":43},[47,168362,168363,168366,168368],{"class":49,"line":50},[47,168364,168365],{"class":221},"path ",[47,168367,267],{"class":217},[47,168369,168370],{"class":81}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,168372,168373],{},"或原始字符串：",[38,168375,168377],{"className":30432,"code":168376,"language":30434,"meta":43,"style":43},"path = r\"D:\\data\\data.txt\"\n",[26,168378,168379],{"__ignoreMap":43},[47,168380,168381,168383,168385,168387,168389,168392,168395,168398,168400,168402,168404,168407],{"class":49,"line":50},[47,168382,168365],{"class":221},[47,168384,267],{"class":217},[47,168386,17214],{"class":217},[47,168388,470],{"class":81},[47,168390,168391],{"class":48031},"D:",[47,168393,168394],{"class":85},"\\d",[47,168396,168397],{"class":48031},"ata",[47,168399,168394],{"class":85},[47,168401,168397],{"class":48031},[47,168403,777],{"class":85},[47,168405,168406],{"class":48031},"txt",[47,168408,25187],{"class":81},[14,168410,168412],{"id":168411},"_83-open函数","8.3 open函数",[19,168414,5274],{},[38,168416,168418],{"className":30432,"code":168417,"language":30434,"meta":43,"style":43},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[26,168419,168420],{"__ignoreMap":43},[47,168421,168422,168424,168426,168428,168431,168433,168435,168437],{"class":49,"line":50},[47,168423,45408],{"class":5309},[47,168425,13657],{"class":217},[47,168427,146845],{"class":85},[47,168429,168430],{"class":221},"(文件路径, 打开模式, ",[47,168432,146860],{"class":5309},[47,168434,267],{"class":217},[47,168436,146865],{"class":81},[47,168438,228],{"class":221},[19,168440,168441],{},"常见模式：",[357,168443,168444,168453],{},[360,168445,168446],{},[363,168447,168448,168451],{},[366,168449,168450],{},"模式",[366,168452,25923],{},[404,168454,168455,168464,168473,168482,168492],{},[363,168456,168457,168461],{},[409,168458,168459],{},[26,168460,889],{},[409,168462,168463],{},"只读，文件不存在会报错",[363,168465,168466,168470],{},[409,168467,168468],{},[26,168469,1014],{},[409,168471,168472],{},"只写，文件不存在会创建，存在会清空",[363,168474,168475,168479],{},[409,168476,168477],{},[26,168478,457],{},[409,168480,168481],{},"追加，文件不存在会创建",[363,168483,168484,168489],{},[409,168485,168486],{},[26,168487,168488],{},"rb",[409,168490,168491],{},"二进制只读",[363,168493,168494,168499],{},[409,168495,168496],{},[26,168497,168498],{},"wb",[409,168500,168501],{},"二进制只写",[14,168503,168505],{"id":168504},"_84-读取文件","8.4 读取文件",[187,168507,168509],{"id":168508},"_841-read","8.4.1 read",[19,168511,168512],{},"一次读取全部内容：",[38,168514,168516],{"className":30432,"code":168515,"language":30434,"meta":43,"style":43},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[26,168517,168518,168544,168556,168563],{"__ignoreMap":43},[47,168519,168520,168522,168524,168526,168528,168530,168532,168534,168536,168538,168540,168542],{"class":49,"line":50},[47,168521,45408],{"class":5309},[47,168523,13657],{"class":217},[47,168525,146845],{"class":85},[47,168527,222],{"class":221},[47,168529,146850],{"class":81},[47,168531,12528],{"class":221},[47,168533,146855],{"class":81},[47,168535,12528],{"class":221},[47,168537,146860],{"class":5309},[47,168539,267],{"class":217},[47,168541,146865],{"class":81},[47,168543,228],{"class":221},[47,168545,168546,168549,168551,168553],{"class":49,"line":92},[47,168547,168548],{"class":221},"content ",[47,168550,267],{"class":217},[47,168552,148207],{"class":5309},[47,168554,168555],{"class":221},".read()\n",[47,168557,168558,168560],{"class":49,"line":1273},[47,168559,30469],{"class":85},[47,168561,168562],{"class":221},"(content)\n",[47,168564,168565,168567],{"class":49,"line":1288},[47,168566,45408],{"class":5309},[47,168568,168569],{"class":221},".close()\n",[19,168571,168572],{},"可以指定读取字符数：",[38,168574,168576],{"className":30432,"code":168575,"language":30434,"meta":43,"style":43},"content = file.read(10)\n",[26,168577,168578],{"__ignoreMap":43},[47,168579,168580,168582,168584,168586,168589,168591],{"class":49,"line":50},[47,168581,168548],{"class":221},[47,168583,267],{"class":217},[47,168585,148207],{"class":5309},[47,168587,168588],{"class":221},".read(",[47,168590,665],{"class":85},[47,168592,228],{"class":221},[187,168594,168596],{"id":168595},"_842-readline","8.4.2 readline",[19,168598,168599],{},"一次读取一行：",[38,168601,168603],{"className":30432,"code":168602,"language":30434,"meta":43,"style":43},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[26,168604,168605,168631,168635,168646,168653,168657],{"__ignoreMap":43},[47,168606,168607,168609,168611,168613,168615,168617,168619,168621,168623,168625,168627,168629],{"class":49,"line":50},[47,168608,45408],{"class":5309},[47,168610,13657],{"class":217},[47,168612,146845],{"class":85},[47,168614,222],{"class":221},[47,168616,146850],{"class":81},[47,168618,12528],{"class":221},[47,168620,146855],{"class":81},[47,168622,12528],{"class":221},[47,168624,146860],{"class":5309},[47,168626,267],{"class":217},[47,168628,146865],{"class":81},[47,168630,228],{"class":221},[47,168632,168633],{"class":49,"line":92},[47,168634,2493],{"emptyLinePlaceholder":145},[47,168636,168637,168639,168641,168643],{"class":49,"line":1273},[47,168638,147306],{"class":221},[47,168640,267],{"class":217},[47,168642,148207],{"class":5309},[47,168644,168645],{"class":221},".readline()\n",[47,168647,168648,168650],{"class":49,"line":1288},[47,168649,30469],{"class":85},[47,168651,168652],{"class":221},"(line)\n",[47,168654,168655],{"class":49,"line":1294},[47,168656,2493],{"emptyLinePlaceholder":145},[47,168658,168659,168661],{"class":49,"line":1308},[47,168660,45408],{"class":5309},[47,168662,168569],{"class":221},[187,168664,168666],{"id":168665},"_843-readlines","8.4.3 readlines",[19,168668,168669],{},"读取所有行，返回列表：",[38,168671,168673],{"className":30432,"code":168672,"language":30434,"meta":43,"style":43},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[26,168674,168675,168701,168713,168720],{"__ignoreMap":43},[47,168676,168677,168679,168681,168683,168685,168687,168689,168691,168693,168695,168697,168699],{"class":49,"line":50},[47,168678,45408],{"class":5309},[47,168680,13657],{"class":217},[47,168682,146845],{"class":85},[47,168684,222],{"class":221},[47,168686,146850],{"class":81},[47,168688,12528],{"class":221},[47,168690,146855],{"class":81},[47,168692,12528],{"class":221},[47,168694,146860],{"class":5309},[47,168696,267],{"class":217},[47,168698,146865],{"class":81},[47,168700,228],{"class":221},[47,168702,168703,168706,168708,168710],{"class":49,"line":92},[47,168704,168705],{"class":221},"lines ",[47,168707,267],{"class":217},[47,168709,148207],{"class":5309},[47,168711,168712],{"class":221},".readlines()\n",[47,168714,168715,168717],{"class":49,"line":1273},[47,168716,30469],{"class":85},[47,168718,168719],{"class":221},"(lines)\n",[47,168721,168722,168724],{"class":49,"line":1288},[47,168723,45408],{"class":5309},[47,168725,168569],{"class":221},[19,168727,168728,168729,168732],{},"每一行通常带有换行符，可以用 ",[26,168730,168731],{},"strip()"," 去掉：",[38,168734,168736],{"className":30432,"code":168735,"language":30434,"meta":43,"style":43},"for line in lines:\n    print(line.strip())\n",[26,168737,168738,168750],{"__ignoreMap":43},[47,168739,168740,168742,168745,168747],{"class":49,"line":50},[47,168741,3118],{"class":217},[47,168743,168744],{"class":221}," line ",[47,168746,26097],{"class":217},[47,168748,168749],{"class":221}," lines:\n",[47,168751,168752,168754],{"class":49,"line":92},[47,168753,31353],{"class":85},[47,168755,168756],{"class":221},"(line.strip())\n",[187,168758,168760],{"id":168759},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,168762,168763],{},"推荐读取大文件时使用：",[38,168765,168767],{"className":30432,"code":168766,"language":30434,"meta":43,"style":43},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[26,168768,168769,168795,168799,168811,168817,168821],{"__ignoreMap":43},[47,168770,168771,168773,168775,168777,168779,168781,168783,168785,168787,168789,168791,168793],{"class":49,"line":50},[47,168772,45408],{"class":5309},[47,168774,13657],{"class":217},[47,168776,146845],{"class":85},[47,168778,222],{"class":221},[47,168780,146850],{"class":81},[47,168782,12528],{"class":221},[47,168784,146855],{"class":81},[47,168786,12528],{"class":221},[47,168788,146860],{"class":5309},[47,168790,267],{"class":217},[47,168792,146865],{"class":81},[47,168794,228],{"class":221},[47,168796,168797],{"class":49,"line":92},[47,168798,2493],{"emptyLinePlaceholder":145},[47,168800,168801,168803,168805,168807,168809],{"class":49,"line":1273},[47,168802,3118],{"class":217},[47,168804,168744],{"class":221},[47,168806,26097],{"class":217},[47,168808,148207],{"class":5309},[47,168810,3832],{"class":221},[47,168812,168813,168815],{"class":49,"line":1288},[47,168814,31353],{"class":85},[47,168816,168756],{"class":221},[47,168818,168819],{"class":49,"line":1294},[47,168820,2493],{"emptyLinePlaceholder":145},[47,168822,168823,168825],{"class":49,"line":1308},[47,168824,45408],{"class":5309},[47,168826,168569],{"class":221},[14,168828,168830],{"id":168829},"_85-with语句","8.5 with语句",[19,168832,168833,168835],{},[26,168834,107887],{}," 会自动关闭文件，推荐使用。",[38,168837,168839],{"className":30432,"code":168838,"language":30434,"meta":43,"style":43},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[26,168840,168841,168871,168881],{"__ignoreMap":43},[47,168842,168843,168845,168847,168849,168851,168853,168855,168857,168859,168861,168863,168865,168867,168869],{"class":49,"line":50},[47,168844,107887],{"class":217},[47,168846,146845],{"class":85},[47,168848,222],{"class":221},[47,168850,146850],{"class":81},[47,168852,12528],{"class":221},[47,168854,146855],{"class":81},[47,168856,12528],{"class":221},[47,168858,146860],{"class":5309},[47,168860,267],{"class":217},[47,168862,146865],{"class":81},[47,168864,13807],{"class":221},[47,168866,31437],{"class":217},[47,168868,148207],{"class":5309},[47,168870,3832],{"class":221},[47,168872,168873,168875,168877,168879],{"class":49,"line":92},[47,168874,146877],{"class":221},[47,168876,267],{"class":217},[47,168878,148207],{"class":5309},[47,168880,168555],{"class":221},[47,168882,168883,168885],{"class":49,"line":1273},[47,168884,31353],{"class":85},[47,168886,168562],{"class":221},[19,168888,168889],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,168891,168893],{"id":168892},"_86-写入文件","8.6 写入文件",[19,168895,168896,168898],{},[26,168897,1014],{}," 模式会清空原文件。",[38,168900,168902],{"className":30432,"code":168901,"language":30434,"meta":43,"style":43},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[26,168903,168904,168934,168951],{"__ignoreMap":43},[47,168905,168906,168908,168910,168912,168914,168916,168918,168920,168922,168924,168926,168928,168930,168932],{"class":49,"line":50},[47,168907,107887],{"class":217},[47,168909,146845],{"class":85},[47,168911,222],{"class":221},[47,168913,146850],{"class":81},[47,168915,12528],{"class":221},[47,168917,152030],{"class":81},[47,168919,12528],{"class":221},[47,168921,146860],{"class":5309},[47,168923,267],{"class":217},[47,168925,146865],{"class":81},[47,168927,13807],{"class":221},[47,168929,31437],{"class":217},[47,168931,148207],{"class":5309},[47,168933,3832],{"class":221},[47,168935,168936,168939,168942,168945,168947,168949],{"class":49,"line":92},[47,168937,168938],{"class":5309},"    file",[47,168940,168941],{"class":221},".write(",[47,168943,168944],{"class":81},"\"hello",[47,168946,156579],{"class":85},[47,168948,470],{"class":81},[47,168950,228],{"class":221},[47,168952,168953,168955,168957,168960,168962,168964],{"class":49,"line":1273},[47,168954,168938],{"class":5309},[47,168956,168941],{"class":221},[47,168958,168959],{"class":81},"\"python",[47,168961,156579],{"class":85},[47,168963,470],{"class":81},[47,168965,228],{"class":221},[19,168967,168968],{},"写入多行：",[38,168970,168972],{"className":30432,"code":168971,"language":30434,"meta":43,"style":43},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[26,168973,168974,169009,169013,169044],{"__ignoreMap":43},[47,168975,168976,168978,168980,168982,168985,168987,168989,168991,168994,168996,168998,169000,169003,169005,169007],{"class":49,"line":50},[47,168977,168705],{"class":221},[47,168979,267],{"class":217},[47,168981,52280],{"class":221},[47,168983,168984],{"class":81},"\"小明,18",[47,168986,156579],{"class":85},[47,168988,470],{"class":81},[47,168990,12528],{"class":221},[47,168992,168993],{"class":81},"\"小红,17",[47,168995,156579],{"class":85},[47,168997,470],{"class":81},[47,168999,12528],{"class":221},[47,169001,169002],{"class":81},"\"小刚,19",[47,169004,156579],{"class":85},[47,169006,470],{"class":81},[47,169008,33300],{"class":221},[47,169010,169011],{"class":49,"line":92},[47,169012,2493],{"emptyLinePlaceholder":145},[47,169014,169015,169017,169019,169021,169024,169026,169028,169030,169032,169034,169036,169038,169040,169042],{"class":49,"line":1273},[47,169016,107887],{"class":217},[47,169018,146845],{"class":85},[47,169020,222],{"class":221},[47,169022,169023],{"class":81},"\"students.txt\"",[47,169025,12528],{"class":221},[47,169027,152030],{"class":81},[47,169029,12528],{"class":221},[47,169031,146860],{"class":5309},[47,169033,267],{"class":217},[47,169035,146865],{"class":81},[47,169037,13807],{"class":221},[47,169039,31437],{"class":217},[47,169041,148207],{"class":5309},[47,169043,3832],{"class":221},[47,169045,169046,169048],{"class":49,"line":1288},[47,169047,168938],{"class":5309},[47,169049,169050],{"class":221},".writelines(lines)\n",[14,169052,169054],{"id":169053},"_87-追加文件","8.7 追加文件",[19,169056,169057,169059],{},[26,169058,457],{}," 模式不会清空原内容，而是在末尾追加。",[38,169061,169063],{"className":30432,"code":169062,"language":30434,"meta":43,"style":43},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[26,169064,169065,169096],{"__ignoreMap":43},[47,169066,169067,169069,169071,169073,169076,169078,169080,169082,169084,169086,169088,169090,169092,169094],{"class":49,"line":50},[47,169068,107887],{"class":217},[47,169070,146845],{"class":85},[47,169072,222],{"class":221},[47,169074,169075],{"class":81},"\"log.txt\"",[47,169077,12528],{"class":221},[47,169079,165379],{"class":81},[47,169081,12528],{"class":221},[47,169083,146860],{"class":5309},[47,169085,267],{"class":217},[47,169087,146865],{"class":81},[47,169089,13807],{"class":221},[47,169091,31437],{"class":217},[47,169093,148207],{"class":5309},[47,169095,3832],{"class":221},[47,169097,169098,169100,169102,169105,169107,169109],{"class":49,"line":92},[47,169099,168938],{"class":5309},[47,169101,168941],{"class":221},[47,169103,169104],{"class":81},"\"程序启动",[47,169106,156579],{"class":85},[47,169108,470],{"class":81},[47,169110,228],{"class":221},[19,169112,169113],{},"日志类文件常用追加模式。",[14,169115,169117],{"id":169116},"_88-文件编码","8.8 文件编码",[19,169119,169120],{},"编码决定文字如何保存为字节。",[19,169122,169123],{},"常见编码：",[171,169125,169126,169129],{},[109,169127,169128],{},"UTF-8：推荐。",[109,169130,169131],{},"GBK：部分 Windows 中文文件常见。",[19,169133,169134],{},"读取文件乱码时，可以尝试：",[38,169136,169138],{"className":30432,"code":169137,"language":30434,"meta":43,"style":43},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[26,169139,169140,169171],{"__ignoreMap":43},[47,169141,169142,169144,169146,169148,169150,169152,169154,169156,169158,169160,169163,169165,169167,169169],{"class":49,"line":50},[47,169143,107887],{"class":217},[47,169145,146845],{"class":85},[47,169147,222],{"class":221},[47,169149,146850],{"class":81},[47,169151,12528],{"class":221},[47,169153,146855],{"class":81},[47,169155,12528],{"class":221},[47,169157,146860],{"class":5309},[47,169159,267],{"class":217},[47,169161,169162],{"class":81},"\"gbk\"",[47,169164,13807],{"class":221},[47,169166,31437],{"class":217},[47,169168,148207],{"class":5309},[47,169170,3832],{"class":221},[47,169172,169173,169175,169177,169179],{"class":49,"line":92},[47,169174,146877],{"class":221},[47,169176,267],{"class":217},[47,169178,148207],{"class":5309},[47,169180,168555],{"class":221},[19,169182,169183],{},"写文件时建议统一 UTF-8：",[38,169185,169187],{"className":30432,"code":169186,"language":30434,"meta":43,"style":43},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[26,169188,169189,169219],{"__ignoreMap":43},[47,169190,169191,169193,169195,169197,169199,169201,169203,169205,169207,169209,169211,169213,169215,169217],{"class":49,"line":50},[47,169192,107887],{"class":217},[47,169194,146845],{"class":85},[47,169196,222],{"class":221},[47,169198,146850],{"class":81},[47,169200,12528],{"class":221},[47,169202,152030],{"class":81},[47,169204,12528],{"class":221},[47,169206,146860],{"class":5309},[47,169208,267],{"class":217},[47,169210,146865],{"class":81},[47,169212,13807],{"class":221},[47,169214,31437],{"class":217},[47,169216,148207],{"class":5309},[47,169218,3832],{"class":221},[47,169220,169221,169223,169225,169228],{"class":49,"line":92},[47,169222,168938],{"class":5309},[47,169224,168941],{"class":221},[47,169226,169227],{"class":81},"\"中文内容\"",[47,169229,228],{"class":221},[14,169231,169233],{"id":169232},"_89-pathlib","8.9 pathlib",[19,169235,169236,169239],{},[26,169237,169238],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[38,169241,169243],{"className":30432,"code":169242,"language":30434,"meta":43,"style":43},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[26,169244,169245,169255,169259,169277],{"__ignoreMap":43},[47,169246,169247,169249,169251,169253],{"class":49,"line":50},[47,169248,30791],{"class":217},[47,169250,108365],{"class":221},[47,169252,30446],{"class":217},[47,169254,108370],{"class":221},[47,169256,169257],{"class":49,"line":92},[47,169258,2493],{"emptyLinePlaceholder":145},[47,169260,169261,169263,169265,169267,169270,169272,169274],{"class":49,"line":1273},[47,169262,168365],{"class":221},[47,169264,267],{"class":217},[47,169266,108599],{"class":221},[47,169268,169269],{"class":81},"\"data\"",[47,169271,13807],{"class":221},[47,169273,803],{"class":217},[47,169275,169276],{"class":81}," \"students.txt\"\n",[47,169278,169279,169281],{"class":49,"line":1288},[47,169280,30469],{"class":85},[47,169282,169283],{"class":221},"(path)\n",[19,169285,169286],{},"创建目录：",[38,169288,169290],{"className":30432,"code":169289,"language":30434,"meta":43,"style":43},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[26,169291,169292,169302,169306,169319],{"__ignoreMap":43},[47,169293,169294,169296,169298,169300],{"class":49,"line":50},[47,169295,30791],{"class":217},[47,169297,108365],{"class":221},[47,169299,30446],{"class":217},[47,169301,108370],{"class":221},[47,169303,169304],{"class":49,"line":92},[47,169305,2493],{"emptyLinePlaceholder":145},[47,169307,169308,169311,169313,169315,169317],{"class":49,"line":1273},[47,169309,169310],{"class":221},"data_dir ",[47,169312,267],{"class":217},[47,169314,108599],{"class":221},[47,169316,169269],{"class":81},[47,169318,228],{"class":221},[47,169320,169321,169324,169327,169329,169331],{"class":49,"line":1288},[47,169322,169323],{"class":221},"data_dir.mkdir(",[47,169325,169326],{"class":5309},"exist_ok",[47,169328,267],{"class":217},[47,169330,31530],{"class":85},[47,169332,228],{"class":221},[19,169334,169335],{},"判断文件是否存在：",[38,169337,169339],{"className":30432,"code":169338,"language":30434,"meta":43,"style":43},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[26,169340,169341,169354,169358,169365],{"__ignoreMap":43},[47,169342,169343,169345,169347,169349,169352],{"class":49,"line":50},[47,169344,168365],{"class":221},[47,169346,267],{"class":217},[47,169348,108599],{"class":221},[47,169350,169351],{"class":81},"\"data\u002Fstudents.txt\"",[47,169353,228],{"class":221},[47,169355,169356],{"class":49,"line":92},[47,169357,2493],{"emptyLinePlaceholder":145},[47,169359,169360,169362],{"class":49,"line":1273},[47,169361,1625],{"class":217},[47,169363,169364],{"class":221}," path.exists():\n",[47,169366,169367,169369,169371,169374],{"class":49,"line":1288},[47,169368,31353],{"class":85},[47,169370,222],{"class":221},[47,169372,169373],{"class":81},"\"文件存在\"",[47,169375,228],{"class":221},[19,169377,169378],{},"读写文本：",[38,169380,169382],{"className":30432,"code":169381,"language":30434,"meta":43,"style":43},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[26,169383,169384,169396,169400,169417,169434],{"__ignoreMap":43},[47,169385,169386,169388,169390,169392,169394],{"class":49,"line":50},[47,169387,168365],{"class":221},[47,169389,267],{"class":217},[47,169391,108599],{"class":221},[47,169393,146850],{"class":81},[47,169395,228],{"class":221},[47,169397,169398],{"class":49,"line":92},[47,169399,2493],{"emptyLinePlaceholder":145},[47,169401,169402,169405,169407,169409,169411,169413,169415],{"class":49,"line":1273},[47,169403,169404],{"class":221},"path.write_text(",[47,169406,145930],{"class":81},[47,169408,12528],{"class":221},[47,169410,146860],{"class":5309},[47,169412,267],{"class":217},[47,169414,146865],{"class":81},[47,169416,228],{"class":221},[47,169418,169419,169421,169423,169426,169428,169430,169432],{"class":49,"line":1288},[47,169420,168548],{"class":221},[47,169422,267],{"class":217},[47,169424,169425],{"class":221}," path.read_text(",[47,169427,146860],{"class":5309},[47,169429,267],{"class":217},[47,169431,146865],{"class":81},[47,169433,228],{"class":221},[47,169435,169436,169438],{"class":49,"line":1294},[47,169437,30469],{"class":85},[47,169439,168562],{"class":221},[14,169441,169443],{"id":169442},"_810-json文件","8.10 JSON文件",[19,169445,169446],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[38,169448,169450],{"className":30432,"code":169449,"language":30434,"meta":43,"style":43},"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",[26,169451,169452,169458,169462,169470,169480,169490,169498,169502,169506,169531],{"__ignoreMap":43},[47,169453,169454,169456],{"class":49,"line":50},[47,169455,30446],{"class":217},[47,169457,147145],{"class":221},[47,169459,169460],{"class":49,"line":92},[47,169461,2493],{"emptyLinePlaceholder":145},[47,169463,169464,169466,169468],{"class":49,"line":1273},[47,169465,149535],{"class":221},[47,169467,267],{"class":217},[47,169469,15665],{"class":221},[47,169471,169472,169474,169476,169478],{"class":49,"line":1288},[47,169473,147074],{"class":81},[47,169475,51491],{"class":221},[47,169477,149942],{"class":81},[47,169479,31520],{"class":221},[47,169481,169482,169484,169486,169488],{"class":49,"line":1294},[47,169483,164591],{"class":81},[47,169485,51491],{"class":221},[47,169487,869],{"class":85},[47,169489,31520],{"class":221},[47,169491,169492,169494,169496],{"class":49,"line":1308},[47,169493,164602],{"class":81},[47,169495,51491],{"class":221},[47,169497,164607],{"class":85},[47,169499,169500],{"class":49,"line":1314},[47,169501,1659],{"class":221},[47,169503,169504],{"class":49,"line":1405},[47,169505,2493],{"emptyLinePlaceholder":145},[47,169507,169508,169510,169512,169515,169517,169519,169521,169523,169525,169527,169529],{"class":49,"line":1411},[47,169509,156498],{"class":221},[47,169511,267],{"class":217},[47,169513,169514],{"class":221}," json.dumps(student, ",[47,169516,147191],{"class":5309},[47,169518,267],{"class":217},[47,169520,34041],{"class":85},[47,169522,12528],{"class":221},[47,169524,152066],{"class":5309},[47,169526,267],{"class":217},[47,169528,298],{"class":85},[47,169530,228],{"class":221},[47,169532,169533,169535],{"class":49,"line":1423},[47,169534,30469],{"class":85},[47,169536,164125],{"class":221},[19,169538,169539],{},"写入 JSON 文件：",[38,169541,169543],{"className":30432,"code":169542,"language":30434,"meta":43,"style":43},"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",[26,169544,169545,169551,169555,169563,169591,169619,169623,169627,169657],{"__ignoreMap":43},[47,169546,169547,169549],{"class":49,"line":50},[47,169548,30446],{"class":217},[47,169550,147145],{"class":221},[47,169552,169553],{"class":49,"line":92},[47,169554,2493],{"emptyLinePlaceholder":145},[47,169556,169557,169559,169561],{"class":49,"line":1273},[47,169558,159770],{"class":221},[47,169560,267],{"class":217},[47,169562,55501],{"class":221},[47,169564,169565,169567,169569,169571,169573,169575,169577,169579,169581,169583,169585,169587,169589],{"class":49,"line":1288},[47,169566,148439],{"class":221},[47,169568,62733],{"class":81},[47,169570,51491],{"class":221},[47,169572,149942],{"class":81},[47,169574,12528],{"class":221},[47,169576,69178],{"class":81},[47,169578,51491],{"class":221},[47,169580,869],{"class":85},[47,169582,12528],{"class":221},[47,169584,151526],{"class":81},[47,169586,51491],{"class":221},[47,169588,1208],{"class":85},[47,169590,5023],{"class":221},[47,169592,169593,169595,169597,169599,169601,169603,169605,169607,169609,169611,169613,169615,169617],{"class":49,"line":1294},[47,169594,148439],{"class":221},[47,169596,62733],{"class":81},[47,169598,51491],{"class":221},[47,169600,150990],{"class":81},[47,169602,12528],{"class":221},[47,169604,69178],{"class":81},[47,169606,51491],{"class":221},[47,169608,844],{"class":85},[47,169610,12528],{"class":221},[47,169612,151526],{"class":81},[47,169614,51491],{"class":221},[47,169616,1030],{"class":85},[47,169618,5023],{"class":221},[47,169620,169621],{"class":49,"line":1308},[47,169622,33300],{"class":221},[47,169624,169625],{"class":49,"line":1314},[47,169626,2493],{"emptyLinePlaceholder":145},[47,169628,169629,169631,169633,169635,169637,169639,169641,169643,169645,169647,169649,169651,169653,169655],{"class":49,"line":1405},[47,169630,107887],{"class":217},[47,169632,146845],{"class":85},[47,169634,222],{"class":221},[47,169636,151885],{"class":81},[47,169638,12528],{"class":221},[47,169640,152030],{"class":81},[47,169642,12528],{"class":221},[47,169644,146860],{"class":5309},[47,169646,267],{"class":217},[47,169648,146865],{"class":81},[47,169650,13807],{"class":221},[47,169652,31437],{"class":217},[47,169654,148207],{"class":5309},[47,169656,3832],{"class":221},[47,169658,169659,169662,169664,169666,169668,169670,169672,169674,169676,169678,169680],{"class":49,"line":1411},[47,169660,169661],{"class":221},"    json.dump(students, ",[47,169663,45408],{"class":5309},[47,169665,12528],{"class":221},[47,169667,147191],{"class":5309},[47,169669,267],{"class":217},[47,169671,34041],{"class":85},[47,169673,12528],{"class":221},[47,169675,152066],{"class":5309},[47,169677,267],{"class":217},[47,169679,298],{"class":85},[47,169681,228],{"class":221},[19,169683,169684],{},"读取 JSON 文件：",[38,169686,169688],{"className":30432,"code":169687,"language":30434,"meta":43,"style":43},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[26,169689,169690,169696,169700,169730,169742,169746],{"__ignoreMap":43},[47,169691,169692,169694],{"class":49,"line":50},[47,169693,30446],{"class":217},[47,169695,147145],{"class":221},[47,169697,169698],{"class":49,"line":92},[47,169699,2493],{"emptyLinePlaceholder":145},[47,169701,169702,169704,169706,169708,169710,169712,169714,169716,169718,169720,169722,169724,169726,169728],{"class":49,"line":1273},[47,169703,107887],{"class":217},[47,169705,146845],{"class":85},[47,169707,222],{"class":221},[47,169709,151885],{"class":81},[47,169711,12528],{"class":221},[47,169713,146855],{"class":81},[47,169715,12528],{"class":221},[47,169717,146860],{"class":5309},[47,169719,267],{"class":217},[47,169721,146865],{"class":81},[47,169723,13807],{"class":221},[47,169725,31437],{"class":217},[47,169727,148207],{"class":5309},[47,169729,3832],{"class":221},[47,169731,169732,169734,169736,169738,169740],{"class":49,"line":1288},[47,169733,153091],{"class":221},[47,169735,267],{"class":217},[47,169737,148218],{"class":221},[47,169739,45408],{"class":5309},[47,169741,228],{"class":221},[47,169743,169744],{"class":49,"line":1294},[47,169745,2493],{"emptyLinePlaceholder":145},[47,169747,169748,169750],{"class":49,"line":1308},[47,169749,30469],{"class":85},[47,169751,165049],{"class":221},[14,169753,169755],{"id":169754},"_811-csv文件","8.11 CSV文件",[19,169757,169758],{},"CSV 是逗号分隔值，常用于表格数据。",[19,169760,169761],{},"写入 CSV：",[38,169763,169765],{"className":30432,"code":169764,"language":30434,"meta":43,"style":43},"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",[26,169766,169767,169774,169778,169786,169804,169820,169836,169840,169844,169884,169898],{"__ignoreMap":43},[47,169768,169769,169771],{"class":49,"line":50},[47,169770,30446],{"class":217},[47,169772,169773],{"class":221}," csv\n",[47,169775,169776],{"class":49,"line":92},[47,169777,2493],{"emptyLinePlaceholder":145},[47,169779,169780,169782,169784],{"class":49,"line":1273},[47,169781,159770],{"class":221},[47,169783,267],{"class":217},[47,169785,55501],{"class":221},[47,169787,169788,169791,169793,169795,169797,169799,169802],{"class":49,"line":1288},[47,169789,169790],{"class":221},"    [",[47,169792,73153],{"class":81},[47,169794,12528],{"class":221},[47,169796,73186],{"class":81},[47,169798,12528],{"class":221},[47,169800,169801],{"class":81},"\"成绩\"",[47,169803,87890],{"class":221},[47,169805,169806,169808,169810,169812,169814,169816,169818],{"class":49,"line":1294},[47,169807,169790],{"class":221},[47,169809,149942],{"class":81},[47,169811,12528],{"class":221},[47,169813,869],{"class":85},[47,169815,12528],{"class":221},[47,169817,1208],{"class":85},[47,169819,87890],{"class":221},[47,169821,169822,169824,169826,169828,169830,169832,169834],{"class":49,"line":1308},[47,169823,169790],{"class":221},[47,169825,150990],{"class":81},[47,169827,12528],{"class":221},[47,169829,844],{"class":85},[47,169831,12528],{"class":221},[47,169833,1030],{"class":85},[47,169835,87890],{"class":221},[47,169837,169838],{"class":49,"line":1314},[47,169839,33300],{"class":221},[47,169841,169842],{"class":49,"line":1405},[47,169843,2493],{"emptyLinePlaceholder":145},[47,169845,169846,169848,169850,169852,169855,169857,169859,169861,169863,169865,169867,169869,169872,169874,169876,169878,169880,169882],{"class":49,"line":1411},[47,169847,107887],{"class":217},[47,169849,146845],{"class":85},[47,169851,222],{"class":221},[47,169853,169854],{"class":81},"\"students.csv\"",[47,169856,12528],{"class":221},[47,169858,152030],{"class":81},[47,169860,12528],{"class":221},[47,169862,146860],{"class":5309},[47,169864,267],{"class":217},[47,169866,146865],{"class":81},[47,169868,12528],{"class":221},[47,169870,169871],{"class":5309},"newline",[47,169873,267],{"class":217},[47,169875,7745],{"class":81},[47,169877,13807],{"class":221},[47,169879,31437],{"class":217},[47,169881,148207],{"class":5309},[47,169883,3832],{"class":221},[47,169885,169886,169889,169891,169894,169896],{"class":49,"line":1423},[47,169887,169888],{"class":221},"    writer ",[47,169890,267],{"class":217},[47,169892,169893],{"class":221}," csv.writer(",[47,169895,45408],{"class":5309},[47,169897,228],{"class":221},[47,169899,169900],{"class":49,"line":1706},[47,169901,169902],{"class":221},"    writer.writerows(students)\n",[19,169904,169905],{},"读取 CSV：",[38,169907,169909],{"className":30432,"code":169908,"language":30434,"meta":43,"style":43},"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",[26,169910,169911,169917,169921,169951,169965,169977],{"__ignoreMap":43},[47,169912,169913,169915],{"class":49,"line":50},[47,169914,30446],{"class":217},[47,169916,169773],{"class":221},[47,169918,169919],{"class":49,"line":92},[47,169920,2493],{"emptyLinePlaceholder":145},[47,169922,169923,169925,169927,169929,169931,169933,169935,169937,169939,169941,169943,169945,169947,169949],{"class":49,"line":1273},[47,169924,107887],{"class":217},[47,169926,146845],{"class":85},[47,169928,222],{"class":221},[47,169930,169854],{"class":81},[47,169932,12528],{"class":221},[47,169934,146855],{"class":81},[47,169936,12528],{"class":221},[47,169938,146860],{"class":5309},[47,169940,267],{"class":217},[47,169942,146865],{"class":81},[47,169944,13807],{"class":221},[47,169946,31437],{"class":217},[47,169948,148207],{"class":5309},[47,169950,3832],{"class":221},[47,169952,169953,169956,169958,169961,169963],{"class":49,"line":1288},[47,169954,169955],{"class":221},"    reader ",[47,169957,267],{"class":217},[47,169959,169960],{"class":221}," csv.reader(",[47,169962,45408],{"class":5309},[47,169964,228],{"class":221},[47,169966,169967,169969,169972,169974],{"class":49,"line":1294},[47,169968,3294],{"class":217},[47,169970,169971],{"class":221}," row ",[47,169973,26097],{"class":217},[47,169975,169976],{"class":221}," reader:\n",[47,169978,169979,169981],{"class":49,"line":1308},[47,169980,32505],{"class":85},[47,169982,169983],{"class":221},"(row)\n",[19,169985,169986],{},"使用字典写入：",[38,169988,169990],{"className":30432,"code":169989,"language":30434,"meta":43,"style":43},"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",[26,169991,169992,169998,170002,170010,170038,170066,170070,170074,170112,170133,170154,170159],{"__ignoreMap":43},[47,169993,169994,169996],{"class":49,"line":50},[47,169995,30446],{"class":217},[47,169997,169773],{"class":221},[47,169999,170000],{"class":49,"line":92},[47,170001,2493],{"emptyLinePlaceholder":145},[47,170003,170004,170006,170008],{"class":49,"line":1273},[47,170005,159770],{"class":221},[47,170007,267],{"class":217},[47,170009,55501],{"class":221},[47,170011,170012,170014,170016,170018,170020,170022,170024,170026,170028,170030,170032,170034,170036],{"class":49,"line":1288},[47,170013,148439],{"class":221},[47,170015,62733],{"class":81},[47,170017,51491],{"class":221},[47,170019,149942],{"class":81},[47,170021,12528],{"class":221},[47,170023,69178],{"class":81},[47,170025,51491],{"class":221},[47,170027,869],{"class":85},[47,170029,12528],{"class":221},[47,170031,151526],{"class":81},[47,170033,51491],{"class":221},[47,170035,1208],{"class":85},[47,170037,5023],{"class":221},[47,170039,170040,170042,170044,170046,170048,170050,170052,170054,170056,170058,170060,170062,170064],{"class":49,"line":1294},[47,170041,148439],{"class":221},[47,170043,62733],{"class":81},[47,170045,51491],{"class":221},[47,170047,150990],{"class":81},[47,170049,12528],{"class":221},[47,170051,69178],{"class":81},[47,170053,51491],{"class":221},[47,170055,844],{"class":85},[47,170057,12528],{"class":221},[47,170059,151526],{"class":81},[47,170061,51491],{"class":221},[47,170063,1030],{"class":85},[47,170065,5023],{"class":221},[47,170067,170068],{"class":49,"line":1308},[47,170069,33300],{"class":221},[47,170071,170072],{"class":49,"line":1314},[47,170073,2493],{"emptyLinePlaceholder":145},[47,170075,170076,170078,170080,170082,170084,170086,170088,170090,170092,170094,170096,170098,170100,170102,170104,170106,170108,170110],{"class":49,"line":1405},[47,170077,107887],{"class":217},[47,170079,146845],{"class":85},[47,170081,222],{"class":221},[47,170083,169854],{"class":81},[47,170085,12528],{"class":221},[47,170087,152030],{"class":81},[47,170089,12528],{"class":221},[47,170091,146860],{"class":5309},[47,170093,267],{"class":217},[47,170095,146865],{"class":81},[47,170097,12528],{"class":221},[47,170099,169871],{"class":5309},[47,170101,267],{"class":217},[47,170103,7745],{"class":81},[47,170105,13807],{"class":221},[47,170107,31437],{"class":217},[47,170109,148207],{"class":5309},[47,170111,3832],{"class":221},[47,170113,170114,170117,170119,170121,170123,170125,170127,170129,170131],{"class":49,"line":1411},[47,170115,170116],{"class":221},"    fieldnames ",[47,170118,267],{"class":217},[47,170120,52280],{"class":221},[47,170122,62733],{"class":81},[47,170124,12528],{"class":221},[47,170126,69178],{"class":81},[47,170128,12528],{"class":221},[47,170130,151526],{"class":81},[47,170132,33300],{"class":221},[47,170134,170135,170137,170139,170142,170144,170146,170149,170151],{"class":49,"line":1423},[47,170136,169888],{"class":221},[47,170138,267],{"class":217},[47,170140,170141],{"class":221}," csv.DictWriter(",[47,170143,45408],{"class":5309},[47,170145,12528],{"class":221},[47,170147,170148],{"class":5309},"fieldnames",[47,170150,267],{"class":217},[47,170152,170153],{"class":221},"fieldnames)\n",[47,170155,170156],{"class":49,"line":1706},[47,170157,170158],{"class":221},"    writer.writeheader()\n",[47,170160,170161],{"class":49,"line":1711},[47,170162,169902],{"class":221},[14,170164,170166],{"id":170165},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,170168,123346],{},[171,170170,170171,170174,170177],{},[109,170172,170173],{},"读取文本文件。",[109,170175,170176],{},"统计每个单词出现次数。",[109,170178,170179],{},"输出出现次数最多的前 10 个单词。",[19,170181,10128],{},[38,170183,170185],{"className":30432,"code":170184,"language":30434,"meta":43,"style":43},"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",[26,170186,170187,170197,170201,170214,170230,170234,170244,170253,170257,170269,170289,170298,170302,170320,170324,170354,170358,170374],{"__ignoreMap":43},[47,170188,170189,170191,170193,170195],{"class":49,"line":50},[47,170190,30791],{"class":217},[47,170192,108365],{"class":221},[47,170194,30446],{"class":217},[47,170196,108370],{"class":221},[47,170198,170199],{"class":49,"line":92},[47,170200,2493],{"emptyLinePlaceholder":145},[47,170202,170203,170205,170207,170209,170212],{"class":49,"line":1273},[47,170204,168365],{"class":221},[47,170206,267],{"class":217},[47,170208,108599],{"class":221},[47,170210,170211],{"class":81},"\"article.txt\"",[47,170213,228],{"class":221},[47,170215,170216,170218,170220,170222,170224,170226,170228],{"class":49,"line":1288},[47,170217,168548],{"class":221},[47,170219,267],{"class":217},[47,170221,169425],{"class":221},[47,170223,146860],{"class":5309},[47,170225,267],{"class":217},[47,170227,146865],{"class":81},[47,170229,228],{"class":221},[47,170231,170232],{"class":49,"line":1294},[47,170233,2493],{"emptyLinePlaceholder":145},[47,170235,170236,170239,170241],{"class":49,"line":1308},[47,170237,170238],{"class":221},"words ",[47,170240,267],{"class":217},[47,170242,170243],{"class":221}," content.lower().split()\n",[47,170245,170246,170249,170251],{"class":49,"line":1314},[47,170247,170248],{"class":221},"counter ",[47,170250,267],{"class":217},[47,170252,87922],{"class":221},[47,170254,170255],{"class":49,"line":1405},[47,170256,2493],{"emptyLinePlaceholder":145},[47,170258,170259,170261,170264,170266],{"class":49,"line":1411},[47,170260,3118],{"class":217},[47,170262,170263],{"class":221}," word ",[47,170265,26097],{"class":217},[47,170267,170268],{"class":221}," words:\n",[47,170270,170271,170274,170276,170279,170282,170284,170287],{"class":49,"line":1423},[47,170272,170273],{"class":221},"    word ",[47,170275,267],{"class":217},[47,170277,170278],{"class":221}," word.strip(",[47,170280,170281],{"class":81},"\".,!?;:",[47,170283,156549],{"class":85},[47,170285,170286],{"class":81},"'()[]\"",[47,170288,228],{"class":221},[47,170290,170291,170293,170295],{"class":49,"line":1706},[47,170292,3194],{"class":217},[47,170294,38984],{"class":217},[47,170296,170297],{"class":221}," word:\n",[47,170299,170300],{"class":49,"line":1711},[47,170301,148566],{"class":217},[47,170303,170304,170307,170309,170312,170314,170316,170318],{"class":49,"line":1717},[47,170305,170306],{"class":221},"    counter[word] ",[47,170308,267],{"class":217},[47,170310,170311],{"class":221}," counter.get(word, ",[47,170313,411],{"class":85},[47,170315,13807],{"class":221},[47,170317,700],{"class":217},[47,170319,55753],{"class":85},[47,170321,170322],{"class":49,"line":1722},[47,170323,2493],{"emptyLinePlaceholder":145},[47,170325,170326,170329,170331,170333,170336,170338,170340,170342,170344,170346,170348,170350,170352],{"class":49,"line":1736},[47,170327,170328],{"class":221},"items ",[47,170330,267],{"class":217},[47,170332,163658],{"class":85},[47,170334,170335],{"class":221},"(counter.items(), ",[47,170337,154000],{"class":5309},[47,170339,154003],{"class":217},[47,170341,154006],{"class":221},[47,170343,436],{"class":85},[47,170345,112256],{"class":221},[47,170347,163582],{"class":5309},[47,170349,267],{"class":217},[47,170351,31530],{"class":85},[47,170353,228],{"class":221},[47,170355,170356],{"class":49,"line":1741},[47,170357,2493],{"emptyLinePlaceholder":145},[47,170359,170360,170362,170365,170367,170370,170372],{"class":49,"line":1747},[47,170361,3118],{"class":217},[47,170363,170364],{"class":221}," word, count ",[47,170366,26097],{"class":217},[47,170368,170369],{"class":221}," items[:",[47,170371,665],{"class":85},[47,170373,165809],{"class":221},[47,170375,170376,170378],{"class":49,"line":1768},[47,170377,31353],{"class":85},[47,170379,170380],{"class":221},"(word, count)\n",[14,170382,170384],{"id":170383},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[38,170386,170388],{"className":30432,"code":170387,"language":30434,"meta":43,"style":43},"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",[26,170389,170390,170396,170406,170410,170422,170426,170430,170438,170448,170454,170458,170488,170498,170502,170506,170514,170544,170568,170572,170576,170584,170613,170618],{"__ignoreMap":43},[47,170391,170392,170394],{"class":49,"line":50},[47,170393,30446],{"class":217},[47,170395,147145],{"class":221},[47,170397,170398,170400,170402,170404],{"class":49,"line":92},[47,170399,30791],{"class":217},[47,170401,108365],{"class":221},[47,170403,30446],{"class":217},[47,170405,108370],{"class":221},[47,170407,170408],{"class":49,"line":1273},[47,170409,2493],{"emptyLinePlaceholder":145},[47,170411,170412,170414,170416,170418,170420],{"class":49,"line":1288},[47,170413,151878],{"class":85},[47,170415,13657],{"class":217},[47,170417,108599],{"class":221},[47,170419,151885],{"class":81},[47,170421,228],{"class":221},[47,170423,170424],{"class":49,"line":1294},[47,170425,2493],{"emptyLinePlaceholder":145},[47,170427,170428],{"class":49,"line":1308},[47,170429,2493],{"emptyLinePlaceholder":145},[47,170431,170432,170434,170436],{"class":49,"line":1314},[47,170433,32001],{"class":217},[47,170435,151902],{"class":53},[47,170437,32007],{"class":221},[47,170439,170440,170442,170444,170446],{"class":49,"line":1405},[47,170441,3194],{"class":217},[47,170443,38984],{"class":217},[47,170445,151913],{"class":85},[47,170447,151916],{"class":221},[47,170449,170450,170452],{"class":49,"line":1411},[47,170451,14845],{"class":217},[47,170453,51892],{"class":221},[47,170455,170456],{"class":49,"line":1423},[47,170457,2493],{"emptyLinePlaceholder":145},[47,170459,170460,170462,170464,170466,170468,170470,170472,170474,170476,170478,170480,170482,170484,170486],{"class":49,"line":1706},[47,170461,34232],{"class":217},[47,170463,146845],{"class":85},[47,170465,222],{"class":221},[47,170467,151878],{"class":85},[47,170469,12528],{"class":221},[47,170471,146855],{"class":81},[47,170473,12528],{"class":221},[47,170475,146860],{"class":5309},[47,170477,267],{"class":217},[47,170479,146865],{"class":81},[47,170481,13807],{"class":221},[47,170483,31437],{"class":217},[47,170485,148207],{"class":5309},[47,170487,3832],{"class":221},[47,170489,170490,170492,170494,170496],{"class":49,"line":1711},[47,170491,14845],{"class":217},[47,170493,148218],{"class":221},[47,170495,45408],{"class":5309},[47,170497,228],{"class":221},[47,170499,170500],{"class":49,"line":1717},[47,170501,2493],{"emptyLinePlaceholder":145},[47,170503,170504],{"class":49,"line":1722},[47,170505,2493],{"emptyLinePlaceholder":145},[47,170507,170508,170510,170512],{"class":49,"line":1736},[47,170509,32001],{"class":217},[47,170511,152012],{"class":53},[47,170513,152015],{"class":221},[47,170515,170516,170518,170520,170522,170524,170526,170528,170530,170532,170534,170536,170538,170540,170542],{"class":49,"line":1741},[47,170517,34232],{"class":217},[47,170519,146845],{"class":85},[47,170521,222],{"class":221},[47,170523,151878],{"class":85},[47,170525,12528],{"class":221},[47,170527,152030],{"class":81},[47,170529,12528],{"class":221},[47,170531,146860],{"class":5309},[47,170533,267],{"class":217},[47,170535,146865],{"class":81},[47,170537,13807],{"class":221},[47,170539,31437],{"class":217},[47,170541,148207],{"class":5309},[47,170543,3832],{"class":221},[47,170545,170546,170548,170550,170552,170554,170556,170558,170560,170562,170564,170566],{"class":49,"line":1747},[47,170547,152051],{"class":221},[47,170549,45408],{"class":5309},[47,170551,12528],{"class":221},[47,170553,147191],{"class":5309},[47,170555,267],{"class":217},[47,170557,34041],{"class":85},[47,170559,12528],{"class":221},[47,170561,152066],{"class":5309},[47,170563,267],{"class":217},[47,170565,298],{"class":85},[47,170567,228],{"class":221},[47,170569,170570],{"class":49,"line":1768},[47,170571,2493],{"emptyLinePlaceholder":145},[47,170573,170574],{"class":49,"line":1773},[47,170575,2493],{"emptyLinePlaceholder":145},[47,170577,170578,170580,170582],{"class":49,"line":1787},[47,170579,159770],{"class":221},[47,170581,267],{"class":217},[47,170583,153096],{"class":221},[47,170585,170586,170589,170591,170593,170595,170597,170599,170601,170603,170605,170607,170609,170611],{"class":49,"line":1792},[47,170587,170588],{"class":221},"students.append({",[47,170590,62733],{"class":81},[47,170592,51491],{"class":221},[47,170594,149942],{"class":81},[47,170596,12528],{"class":221},[47,170598,69178],{"class":81},[47,170600,51491],{"class":221},[47,170602,869],{"class":85},[47,170604,12528],{"class":221},[47,170606,151526],{"class":81},[47,170608,51491],{"class":221},[47,170610,1208],{"class":85},[47,170612,165206],{"class":221},[47,170614,170615],{"class":49,"line":1821},[47,170616,170617],{"class":221},"save_students(students)\n",[47,170619,170620,170622,170624,170627],{"class":49,"line":1826},[47,170621,30469],{"class":85},[47,170623,222],{"class":221},[47,170625,170626],{"class":81},"\"保存成功\"",[47,170628,228],{"class":221},[14,170630,170632],{"id":170631},"_814-易错点","8.14 易错点",[171,170634,170635,170639,170645,170650,170657,170664],{},[109,170636,170637,168898],{},[26,170638,1014],{},[109,170640,170641,170642,28439],{},"读写中文要指定 ",[26,170643,170644],{},"encoding=\"utf-8\"",[109,170646,170647,170648,28439],{},"打开文件后要关闭，推荐使用 ",[26,170649,107887],{},[109,170651,170652,170653,170656],{},"读取大文件不要直接 ",[26,170654,170655],{},"read()"," 全部内容。",[109,170658,170659,170660,170663],{},"Windows 写 CSV 时建议加 ",[26,170661,170662],{},"newline=\"\"","，避免空行。",[109,170665,170666],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,170668,170670],{"id":170669},"_815-本章练习","8.15 本章练习",[171,170672,170673,170680,170685,170688,170691],{},[109,170674,170675,170676,170679],{},"写入一个 ",[26,170677,170678],{},"students.txt","，每行保存一个学生姓名。",[109,170681,104409,170682,170684],{},[26,170683,170678],{}," 并输出所有学生。",[109,170686,170687],{},"把学生列表保存为 JSON 文件。",[109,170689,170690],{},"从 JSON 文件读取学生数据，计算平均分。",[109,170692,170693,170694,170697,170698,170701],{},"写一个日志函数 ",[26,170695,170696],{},"write_log(message)","，每次调用向 ",[26,170699,170700],{},"app.log"," 追加一行。",[134,170703,170704],{},"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":43,"searchDepth":92,"depth":92,"links":170706},[170707,170708,170712,170713,170719,170720,170721,170722,170723,170724,170725,170726,170727,170728,170729],{"id":168218,"depth":92,"text":168219},{"id":168259,"depth":92,"text":168260,"children":170709},[170710,170711],{"id":168263,"depth":1273,"text":168264},{"id":168297,"depth":1273,"text":168298},{"id":168411,"depth":92,"text":168412},{"id":168504,"depth":92,"text":168505,"children":170714},[170715,170716,170717,170718],{"id":168508,"depth":1273,"text":168509},{"id":168595,"depth":1273,"text":168596},{"id":168665,"depth":1273,"text":168666},{"id":168759,"depth":1273,"text":168760},{"id":168829,"depth":92,"text":168830},{"id":168892,"depth":92,"text":168893},{"id":169053,"depth":92,"text":169054},{"id":169116,"depth":92,"text":169117},{"id":169232,"depth":92,"text":169233},{"id":169442,"depth":92,"text":169443},{"id":169754,"depth":92,"text":169755},{"id":170165,"depth":92,"text":170166},{"id":170383,"depth":92,"text":170384},{"id":170631,"depth":92,"text":170632},{"id":170669,"depth":92,"text":170670},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168210,"description":142},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170736,"title":170737,"body":170738,"description":142,"extension":143,"meta":172924,"navigation":145,"path":172925,"seo":172926,"stem":172927,"__hash__":172928},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170739,"toc":172891},[170740,170743,170747,170750,170753,170845,170847,170866,170871,170875,170878,170881,170910,170917,170920,170924,170927,170956,170958,171010,171016,171069,171073,171171,171174,171241,171245,171302,171304,171310,171314,171319,171325,171416,171421,171425,171428,171506,171509,171547,171551,171669,171672,171676,171679,171724,171727,171731,171736,171742,171792,171795,171826,171830,171834,171864,171868,171903,171907,171942,171982,171986,172002,172005,172009,172013,172092,172096,172137,172141,172196,172200,172234,172238,172268,172277,172284,172290,172347,172350,172358,172361,172365,172372,172375,172381,172384,172401,172406,172410,172416,172429,172432,172469,172472,172483,172486,172500,172503,172517,172521,172528,172561,172564,172566,172572,172575,172579,172581,172587,172592,172765,172769,172832,172836,172860,172864,172888],[10,170741,170737],{"id":170742},"_9-异常模块与包",[14,170744,170746],{"id":170745},"_91-什么是异常","9.1 什么是异常",[19,170748,170749],{},"异常是程序运行过程中出现的错误。",[19,170751,170752],{},"常见异常：",[357,170754,170755,170764],{},[360,170756,170757],{},[363,170758,170759,170762],{},[366,170760,170761],{},"异常",[366,170763,25923],{},[404,170765,170766,170776,170786,170795,170805,170815,170825,170835],{},[363,170767,170768,170773],{},[409,170769,170770],{},[26,170771,170772],{},"NameError",[409,170774,170775],{},"使用了未定义变量",[363,170777,170778,170783],{},[409,170779,170780],{},[26,170781,170782],{},"TypeError",[409,170784,170785],{},"类型不匹配",[363,170787,170788,170792],{},[409,170789,170790],{},[26,170791,154888],{},[409,170793,170794],{},"值不合法",[363,170796,170797,170802],{},[409,170798,170799],{},[26,170800,170801],{},"IndexError",[409,170803,170804],{},"列表索引越界",[363,170806,170807,170812],{},[409,170808,170809],{},[26,170810,170811],{},"KeyError",[409,170813,170814],{},"字典 key 不存在",[363,170816,170817,170822],{},[409,170818,170819],{},[26,170820,170821],{},"FileNotFoundError",[409,170823,170824],{},"文件不存在",[363,170826,170827,170832],{},[409,170828,170829],{},[26,170830,170831],{},"ZeroDivisionError",[409,170833,170834],{},"除数为 0",[363,170836,170837,170842],{},[409,170838,170839],{},[26,170840,170841],{},"ImportError",[409,170843,170844],{},"导入失败",[19,170846,15228],{},[38,170848,170850],{"className":30432,"code":170849,"language":30434,"meta":43,"style":43},"num = int(\"abc\")\n",[26,170851,170852],{"__ignoreMap":43},[47,170853,170854,170856,170858,170860,170862,170864],{"class":49,"line":50},[47,170855,155841],{"class":221},[47,170857,267],{"class":217},[47,170859,2475],{"class":85},[47,170861,222],{"class":221},[47,170863,155934],{"class":81},[47,170865,228],{"class":221},[19,170867,170868,170869,28439],{},"会触发 ",[26,170870,154888],{},[14,170872,170874],{"id":170873},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,170876,170877],{},"如果不处理异常，程序会直接终止。",[19,170879,170880],{},"例如用户输入年龄：",[38,170882,170884],{"className":30432,"code":170883,"language":30434,"meta":43,"style":43},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[26,170885,170886,170904],{"__ignoreMap":43},[47,170887,170888,170890,170892,170894,170896,170898,170900,170902],{"class":49,"line":50},[47,170889,146600],{"class":221},[47,170891,267],{"class":217},[47,170893,2475],{"class":85},[47,170895,222],{"class":221},[47,170897,53875],{"class":85},[47,170899,222],{"class":221},[47,170901,152448],{"class":81},[47,170903,30551],{"class":221},[47,170905,170906,170908],{"class":49,"line":92},[47,170907,30469],{"class":85},[47,170909,155815],{"class":221},[19,170911,170912,170913,170916],{},"用户输入 ",[26,170914,170915],{},"abc","，程序就会报错退出。",[19,170918,170919],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,170921,170923],{"id":170922},"_93-try-except","9.3 try except",[19,170925,170926],{},"基础语法：",[38,170928,170930],{"className":30432,"code":170929,"language":30434,"meta":43,"style":43},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[26,170931,170932,170939,170944,170951],{"__ignoreMap":43},[47,170933,170934,170937],{"class":49,"line":50},[47,170935,170936],{"class":217},"try",[47,170938,3832],{"class":221},[47,170940,170941],{"class":49,"line":92},[47,170942,170943],{"class":221},"    可能出错的代码\n",[47,170945,170946,170949],{"class":49,"line":1273},[47,170947,170948],{"class":217},"except",[47,170950,3832],{"class":221},[47,170952,170953],{"class":49,"line":1288},[47,170954,170955],{"class":221},"    出错后的处理代码\n",[19,170957,15228],{},[38,170959,170961],{"className":30432,"code":170960,"language":30434,"meta":43,"style":43},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[26,170962,170963,170969,170987,170993,170999],{"__ignoreMap":43},[47,170964,170965,170967],{"class":49,"line":50},[47,170966,170936],{"class":217},[47,170968,3832],{"class":221},[47,170970,170971,170973,170975,170977,170979,170981,170983,170985],{"class":49,"line":92},[47,170972,152440],{"class":221},[47,170974,267],{"class":217},[47,170976,2475],{"class":85},[47,170978,222],{"class":221},[47,170980,53875],{"class":85},[47,170982,222],{"class":221},[47,170984,152448],{"class":81},[47,170986,30551],{"class":221},[47,170988,170989,170991],{"class":49,"line":1273},[47,170990,31353],{"class":85},[47,170992,155815],{"class":221},[47,170994,170995,170997],{"class":49,"line":1288},[47,170996,170948],{"class":217},[47,170998,3832],{"class":221},[47,171000,171001,171003,171005,171008],{"class":49,"line":1294},[47,171002,31353],{"class":85},[47,171004,222],{"class":221},[47,171006,171007],{"class":81},"\"年龄必须是数字\"",[47,171009,228],{"class":221},[19,171011,171012,171013,171015],{},"不建议裸写 ",[26,171014,170948],{},"，最好指定异常类型。",[38,171017,171019],{"className":30432,"code":171018,"language":30434,"meta":43,"style":43},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[26,171020,171021,171027,171045,171051,171059],{"__ignoreMap":43},[47,171022,171023,171025],{"class":49,"line":50},[47,171024,170936],{"class":217},[47,171026,3832],{"class":221},[47,171028,171029,171031,171033,171035,171037,171039,171041,171043],{"class":49,"line":92},[47,171030,152440],{"class":221},[47,171032,267],{"class":217},[47,171034,2475],{"class":85},[47,171036,222],{"class":221},[47,171038,53875],{"class":85},[47,171040,222],{"class":221},[47,171042,152448],{"class":81},[47,171044,30551],{"class":221},[47,171046,171047,171049],{"class":49,"line":1273},[47,171048,31353],{"class":85},[47,171050,155815],{"class":221},[47,171052,171053,171055,171057],{"class":49,"line":1288},[47,171054,170948],{"class":217},[47,171056,152280],{"class":85},[47,171058,3832],{"class":221},[47,171060,171061,171063,171065,171067],{"class":49,"line":1294},[47,171062,31353],{"class":85},[47,171064,222],{"class":221},[47,171066,171007],{"class":81},[47,171068,228],{"class":221},[14,171070,171072],{"id":171071},"_94-捕获多个异常","9.4 捕获多个异常",[38,171074,171076],{"className":30432,"code":171075,"language":30434,"meta":43,"style":43},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[26,171077,171078,171084,171105,171125,171132,171140,171151,171160],{"__ignoreMap":43},[47,171079,171080,171082],{"class":49,"line":50},[47,171081,170936],{"class":217},[47,171083,3832],{"class":221},[47,171085,171086,171089,171091,171093,171095,171097,171099,171101,171103],{"class":49,"line":92},[47,171087,171088],{"class":221},"    nums ",[47,171090,267],{"class":217},[47,171092,52280],{"class":221},[47,171094,436],{"class":85},[47,171096,12528],{"class":221},[47,171098,298],{"class":85},[47,171100,12528],{"class":221},[47,171102,292],{"class":85},[47,171104,33300],{"class":221},[47,171106,171107,171110,171112,171114,171116,171118,171120,171123],{"class":49,"line":1273},[47,171108,171109],{"class":221},"    index ",[47,171111,267],{"class":217},[47,171113,2475],{"class":85},[47,171115,222],{"class":221},[47,171117,53875],{"class":85},[47,171119,222],{"class":221},[47,171121,171122],{"class":81},"\"请输入索引:\"",[47,171124,30551],{"class":221},[47,171126,171127,171129],{"class":49,"line":1288},[47,171128,31353],{"class":85},[47,171130,171131],{"class":221},"(nums[index])\n",[47,171133,171134,171136,171138],{"class":49,"line":1294},[47,171135,170948],{"class":217},[47,171137,152280],{"class":85},[47,171139,3832],{"class":221},[47,171141,171142,171144,171146,171149],{"class":49,"line":1308},[47,171143,31353],{"class":85},[47,171145,222],{"class":221},[47,171147,171148],{"class":81},"\"索引必须是整数\"",[47,171150,228],{"class":221},[47,171152,171153,171155,171158],{"class":49,"line":1314},[47,171154,170948],{"class":217},[47,171156,171157],{"class":85}," IndexError",[47,171159,3832],{"class":221},[47,171161,171162,171164,171166,171169],{"class":49,"line":1405},[47,171163,31353],{"class":85},[47,171165,222],{"class":221},[47,171167,171168],{"class":81},"\"索引越界\"",[47,171170,228],{"class":221},[19,171172,171173],{},"多个异常使用相同处理逻辑：",[38,171175,171177],{"className":30432,"code":171176,"language":30434,"meta":43,"style":43},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[26,171178,171179,171185,171203,171216,171230],{"__ignoreMap":43},[47,171180,171181,171183],{"class":49,"line":50},[47,171182,170936],{"class":217},[47,171184,3832],{"class":221},[47,171186,171187,171189,171191,171193,171195,171197,171199,171201],{"class":49,"line":92},[47,171188,45647],{"class":221},[47,171190,267],{"class":217},[47,171192,2475],{"class":85},[47,171194,222],{"class":221},[47,171196,53875],{"class":85},[47,171198,222],{"class":221},[47,171200,155850],{"class":81},[47,171202,30551],{"class":221},[47,171204,171205,171207,171209,171211,171213],{"class":49,"line":1273},[47,171206,31353],{"class":85},[47,171208,222],{"class":221},[47,171210,665],{"class":85},[47,171212,156100],{"class":217},[47,171214,171215],{"class":221}," num)\n",[47,171217,171218,171220,171222,171224,171226,171228],{"class":49,"line":1288},[47,171219,170948],{"class":217},[47,171221,1752],{"class":221},[47,171223,154888],{"class":85},[47,171225,12528],{"class":221},[47,171227,170831],{"class":85},[47,171229,30840],{"class":221},[47,171231,171232,171234,171236,171239],{"class":49,"line":1294},[47,171233,31353],{"class":85},[47,171235,222],{"class":221},[47,171237,171238],{"class":81},"\"输入不合法\"",[47,171240,228],{"class":221},[14,171242,171244],{"id":171243},"_95-获取异常信息","9.5 获取异常信息",[38,171246,171248],{"className":30432,"code":171247,"language":30434,"meta":43,"style":43},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[26,171249,171250,171256,171270,171281],{"__ignoreMap":43},[47,171251,171252,171254],{"class":49,"line":50},[47,171253,170936],{"class":217},[47,171255,3832],{"class":221},[47,171257,171258,171260,171262,171264,171266,171268],{"class":49,"line":92},[47,171259,45647],{"class":221},[47,171261,267],{"class":217},[47,171263,2475],{"class":85},[47,171265,222],{"class":221},[47,171267,155934],{"class":81},[47,171269,228],{"class":221},[47,171271,171272,171274,171276,171278],{"class":49,"line":1273},[47,171273,170948],{"class":217},[47,171275,152280],{"class":85},[47,171277,64658],{"class":217},[47,171279,171280],{"class":221}," e:\n",[47,171282,171283,171285,171287,171289,171292,171294,171296,171298,171300],{"class":49,"line":1288},[47,171284,31353],{"class":85},[47,171286,222],{"class":221},[47,171288,273],{"class":217},[47,171290,171291],{"class":81},"\"出错了:",[47,171293,1115],{"class":85},[47,171295,295],{"class":221},[47,171297,1165],{"class":85},[47,171299,470],{"class":81},[47,171301,228],{"class":221},[19,171303,146511],{},[38,171305,171308],{"className":171306,"code":171307,"language":5280,"meta":43},[5278],"出错了:invalid literal for int() with base 10: 'abc'\n",[26,171309,171307],{"__ignoreMap":43},[14,171311,171313],{"id":171312},"_96-else和finally","9.6 else和finally",[19,171315,171316,171318],{},[26,171317,1795],{},"：没有异常时执行。",[19,171320,171321,171324],{},[26,171322,171323],{},"finally","：无论是否异常都会执行。",[38,171326,171328],{"className":30432,"code":171327,"language":30434,"meta":43,"style":43},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[26,171329,171330,171336,171354,171362,171372,171378,171399,171405],{"__ignoreMap":43},[47,171331,171332,171334],{"class":49,"line":50},[47,171333,170936],{"class":217},[47,171335,3832],{"class":221},[47,171337,171338,171340,171342,171344,171346,171348,171350,171352],{"class":49,"line":92},[47,171339,45647],{"class":221},[47,171341,267],{"class":217},[47,171343,2475],{"class":85},[47,171345,222],{"class":221},[47,171347,53875],{"class":85},[47,171349,222],{"class":221},[47,171351,155850],{"class":81},[47,171353,30551],{"class":221},[47,171355,171356,171358,171360],{"class":49,"line":1273},[47,171357,170948],{"class":217},[47,171359,152280],{"class":85},[47,171361,3832],{"class":221},[47,171363,171364,171366,171368,171370],{"class":49,"line":1288},[47,171365,31353],{"class":85},[47,171367,222],{"class":221},[47,171369,153268],{"class":81},[47,171371,228],{"class":221},[47,171373,171374,171376],{"class":49,"line":1294},[47,171375,1795],{"class":217},[47,171377,3832],{"class":221},[47,171379,171380,171382,171384,171386,171389,171391,171393,171395,171397],{"class":49,"line":1308},[47,171381,31353],{"class":85},[47,171383,222],{"class":221},[47,171385,273],{"class":217},[47,171387,171388],{"class":81},"\"输入正确:",[47,171390,1115],{"class":85},[47,171392,1759],{"class":221},[47,171394,1165],{"class":85},[47,171396,470],{"class":81},[47,171398,228],{"class":221},[47,171400,171401,171403],{"class":49,"line":1314},[47,171402,171323],{"class":217},[47,171404,3832],{"class":221},[47,171406,171407,171409,171411,171414],{"class":49,"line":1405},[47,171408,31353],{"class":85},[47,171410,222],{"class":221},[47,171412,171413],{"class":81},"\"程序结束\"",[47,171415,228],{"class":221},[19,171417,171418,171420],{},[26,171419,171323],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,171422,171424],{"id":171423},"_97-抛出异常","9.7 抛出异常",[19,171426,171427],{},"程序可以主动抛出异常。",[38,171429,171431],{"className":30432,"code":171430,"language":30434,"meta":43,"style":43},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[26,171432,171433,171442,171454,171467,171487,171491,171495],{"__ignoreMap":43},[47,171434,171435,171437,171440],{"class":49,"line":50},[47,171436,32001],{"class":217},[47,171438,171439],{"class":53}," set_age",[47,171441,161469],{"class":221},[47,171443,171444,171446,171448,171450,171452],{"class":49,"line":92},[47,171445,3194],{"class":217},[47,171447,15800],{"class":221},[47,171449,1129],{"class":217},[47,171451,4186],{"class":85},[47,171453,3832],{"class":221},[47,171455,171456,171458,171460,171462,171465],{"class":49,"line":1273},[47,171457,103486],{"class":217},[47,171459,152280],{"class":85},[47,171461,222],{"class":221},[47,171463,171464],{"class":81},"\"年龄不能为负数\"",[47,171466,228],{"class":221},[47,171468,171469,171471,171473,171475,171477,171479,171481,171483,171485],{"class":49,"line":1288},[47,171470,31353],{"class":85},[47,171472,222],{"class":221},[47,171474,273],{"class":217},[47,171476,162037],{"class":81},[47,171478,1115],{"class":85},[47,171480,70275],{"class":221},[47,171482,1165],{"class":85},[47,171484,470],{"class":81},[47,171486,228],{"class":221},[47,171488,171489],{"class":49,"line":1294},[47,171490,2493],{"emptyLinePlaceholder":145},[47,171492,171493],{"class":49,"line":1308},[47,171494,2493],{"emptyLinePlaceholder":145},[47,171496,171497,171500,171502,171504],{"class":49,"line":1314},[47,171498,171499],{"class":221},"set_age(",[47,171501,751],{"class":217},[47,171503,436],{"class":85},[47,171505,228],{"class":221},[19,171507,171508],{},"调用者可以捕获：",[38,171510,171512],{"className":30432,"code":171511,"language":30434,"meta":43,"style":43},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[26,171513,171514,171520,171531,171541],{"__ignoreMap":43},[47,171515,171516,171518],{"class":49,"line":50},[47,171517,170936],{"class":217},[47,171519,3832],{"class":221},[47,171521,171522,171525,171527,171529],{"class":49,"line":92},[47,171523,171524],{"class":221},"    set_age(",[47,171526,751],{"class":217},[47,171528,436],{"class":85},[47,171530,228],{"class":221},[47,171532,171533,171535,171537,171539],{"class":49,"line":1273},[47,171534,170948],{"class":217},[47,171536,152280],{"class":85},[47,171538,64658],{"class":217},[47,171540,171280],{"class":221},[47,171542,171543,171545],{"class":49,"line":1288},[47,171544,31353],{"class":85},[47,171546,67053],{"class":221},[14,171548,171550],{"id":171549},"_98-自定义异常","9.8 自定义异常",[38,171552,171554],{"className":30432,"code":171553,"language":30434,"meta":43,"style":43},"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",[26,171555,171556,171570,171574,171578,171582,171590,171600,171611,171621,171625,171629,171635,171652,171663],{"__ignoreMap":43},[47,171557,171558,171560,171563,171565,171568],{"class":49,"line":50},[47,171559,14787],{"class":217},[47,171561,171562],{"class":53}," BalanceNotEnoughError",[47,171564,222],{"class":221},[47,171566,171567],{"class":85},"Exception",[47,171569,30840],{"class":221},[47,171571,171572],{"class":49,"line":92},[47,171573,149591],{"class":217},[47,171575,171576],{"class":49,"line":1273},[47,171577,2493],{"emptyLinePlaceholder":145},[47,171579,171580],{"class":49,"line":1288},[47,171581,2493],{"emptyLinePlaceholder":145},[47,171583,171584,171586,171588],{"class":49,"line":1294},[47,171585,32001],{"class":217},[47,171587,150240],{"class":53},[47,171589,162866],{"class":221},[47,171591,171592,171594,171596,171598],{"class":49,"line":1308},[47,171593,3194],{"class":217},[47,171595,150196],{"class":221},[47,171597,1179],{"class":217},[47,171599,162643],{"class":221},[47,171601,171602,171604,171607,171609],{"class":49,"line":1314},[47,171603,103486],{"class":217},[47,171605,171606],{"class":221}," BalanceNotEnoughError(",[47,171608,150291],{"class":81},[47,171610,228],{"class":221},[47,171612,171613,171615,171617,171619],{"class":49,"line":1405},[47,171614,4183],{"class":217},[47,171616,162873],{"class":221},[47,171618,751],{"class":217},[47,171620,150229],{"class":221},[47,171622,171623],{"class":49,"line":1411},[47,171624,2493],{"emptyLinePlaceholder":145},[47,171626,171627],{"class":49,"line":1423},[47,171628,2493],{"emptyLinePlaceholder":145},[47,171630,171631,171633],{"class":49,"line":1706},[47,171632,170936],{"class":217},[47,171634,3832],{"class":221},[47,171636,171637,171639,171641,171644,171646,171648,171650],{"class":49,"line":1711},[47,171638,162544],{"class":221},[47,171640,267],{"class":217},[47,171642,171643],{"class":221}," withdraw(",[47,171645,530],{"class":85},[47,171647,12528],{"class":221},[47,171649,1816],{"class":85},[47,171651,228],{"class":221},[47,171653,171654,171656,171659,171661],{"class":49,"line":1717},[47,171655,170948],{"class":217},[47,171657,171658],{"class":221}," BalanceNotEnoughError ",[47,171660,31437],{"class":217},[47,171662,171280],{"class":221},[47,171664,171665,171667],{"class":49,"line":1722},[47,171666,31353],{"class":85},[47,171668,67053],{"class":221},[19,171670,171671],{},"入门阶段大多数情况使用内置异常即可。",[14,171673,171675],{"id":171674},"_99-traceback","9.9 traceback",[19,171677,171678],{},"调试时可以输出完整异常堆栈。",[38,171680,171682],{"className":30432,"code":171681,"language":30434,"meta":43,"style":43},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[26,171683,171684,171691,171695,171701,171711,171719],{"__ignoreMap":43},[47,171685,171686,171688],{"class":49,"line":50},[47,171687,30446],{"class":217},[47,171689,171690],{"class":221}," traceback\n",[47,171692,171693],{"class":49,"line":92},[47,171694,2493],{"emptyLinePlaceholder":145},[47,171696,171697,171699],{"class":49,"line":1273},[47,171698,170936],{"class":217},[47,171700,3832],{"class":221},[47,171702,171703,171705,171707,171709],{"class":49,"line":1288},[47,171704,2078],{"class":85},[47,171706,222],{"class":221},[47,171708,155934],{"class":81},[47,171710,228],{"class":221},[47,171712,171713,171715,171717],{"class":49,"line":1294},[47,171714,170948],{"class":217},[47,171716,152280],{"class":85},[47,171718,3832],{"class":221},[47,171720,171721],{"class":49,"line":1308},[47,171722,171723],{"class":221},"    traceback.print_exc()\n",[19,171725,171726],{},"日志系统中常把异常堆栈记录到文件。",[14,171728,171730],{"id":171729},"_910-什么是模块","9.10 什么是模块",[19,171732,171733,171734,126037],{},"模块就是一个 ",[26,171735,146406],{},[19,171737,171738,171739,125],{},"例如创建 ",[26,171740,171741],{},"my_math.py",[38,171743,171745],{"className":30432,"code":171744,"language":30434,"meta":43,"style":43},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[26,171746,171747,171755,171765,171769,171773,171782],{"__ignoreMap":43},[47,171748,171749,171751,171753],{"class":49,"line":50},[47,171750,32001],{"class":217},[47,171752,5302],{"class":53},[47,171754,151147],{"class":221},[47,171756,171757,171759,171761,171763],{"class":49,"line":92},[47,171758,4183],{"class":217},[47,171760,10962],{"class":221},[47,171762,700],{"class":217},[47,171764,151158],{"class":221},[47,171766,171767],{"class":49,"line":1273},[47,171768,2493],{"emptyLinePlaceholder":145},[47,171770,171771],{"class":49,"line":1288},[47,171772,2493],{"emptyLinePlaceholder":145},[47,171774,171775,171777,171780],{"class":49,"line":1294},[47,171776,32001],{"class":217},[47,171778,171779],{"class":53}," sub",[47,171781,151147],{"class":221},[47,171783,171784,171786,171788,171790],{"class":49,"line":1308},[47,171785,4183],{"class":217},[47,171787,10962],{"class":221},[47,171789,751],{"class":217},[47,171791,151158],{"class":221},[19,171793,171794],{},"在另一个文件中导入：",[38,171796,171798],{"className":30432,"code":171797,"language":30434,"meta":43,"style":43},"import my_math\n\nprint(my_math.add(1, 2))\n",[26,171799,171800,171807,171811],{"__ignoreMap":43},[47,171801,171802,171804],{"class":49,"line":50},[47,171803,30446],{"class":217},[47,171805,171806],{"class":221}," my_math\n",[47,171808,171809],{"class":49,"line":92},[47,171810,2493],{"emptyLinePlaceholder":145},[47,171812,171813,171815,171818,171820,171822,171824],{"class":49,"line":1273},[47,171814,30469],{"class":85},[47,171816,171817],{"class":221},"(my_math.add(",[47,171819,436],{"class":85},[47,171821,12528],{"class":221},[47,171823,298],{"class":85},[47,171825,30551],{"class":221},[14,171827,171829],{"id":171828},"_911-import导入","9.11 import导入",[187,171831,171833],{"id":171832},"_9111-导入模块","9.11.1 导入模块",[38,171835,171837],{"className":30432,"code":171836,"language":30434,"meta":43,"style":43},"import random\n\nprint(random.randint(1, 10))\n",[26,171838,171839,171845,171849],{"__ignoreMap":43},[47,171840,171841,171843],{"class":49,"line":50},[47,171842,30446],{"class":217},[47,171844,45382],{"class":221},[47,171846,171847],{"class":49,"line":92},[47,171848,2493],{"emptyLinePlaceholder":145},[47,171850,171851,171853,171856,171858,171860,171862],{"class":49,"line":1273},[47,171852,30469],{"class":85},[47,171854,171855],{"class":221},"(random.randint(",[47,171857,436],{"class":85},[47,171859,12528],{"class":221},[47,171861,665],{"class":85},[47,171863,30551],{"class":221},[187,171865,171867],{"id":171866},"_9112-导入指定内容","9.11.2 导入指定内容",[38,171869,171871],{"className":30432,"code":171870,"language":30434,"meta":43,"style":43},"from random import randint\n\nprint(randint(1, 10))\n",[26,171872,171873,171884,171888],{"__ignoreMap":43},[47,171874,171875,171877,171879,171881],{"class":49,"line":50},[47,171876,30791],{"class":217},[47,171878,57850],{"class":221},[47,171880,30446],{"class":217},[47,171882,171883],{"class":221}," randint\n",[47,171885,171886],{"class":49,"line":92},[47,171887,2493],{"emptyLinePlaceholder":145},[47,171889,171890,171892,171895,171897,171899,171901],{"class":49,"line":1273},[47,171891,30469],{"class":85},[47,171893,171894],{"class":221},"(randint(",[47,171896,436],{"class":85},[47,171898,12528],{"class":221},[47,171900,665],{"class":85},[47,171902,30551],{"class":221},[187,171904,171906],{"id":171905},"_9113-起别名","9.11.3 起别名",[38,171908,171910],{"className":30432,"code":171909,"language":30434,"meta":43,"style":43},"import random as rd\n\nprint(rd.randint(1, 10))\n",[26,171911,171912,171923,171927],{"__ignoreMap":43},[47,171913,171914,171916,171918,171920],{"class":49,"line":50},[47,171915,30446],{"class":217},[47,171917,57850],{"class":221},[47,171919,31437],{"class":217},[47,171921,171922],{"class":221}," rd\n",[47,171924,171925],{"class":49,"line":92},[47,171926,2493],{"emptyLinePlaceholder":145},[47,171928,171929,171931,171934,171936,171938,171940],{"class":49,"line":1273},[47,171930,30469],{"class":85},[47,171932,171933],{"class":221},"(rd.randint(",[47,171935,436],{"class":85},[47,171937,12528],{"class":221},[47,171939,665],{"class":85},[47,171941,30551],{"class":221},[38,171943,171945],{"className":30432,"code":171944,"language":30434,"meta":43,"style":43},"from random import randint as rint\n\nprint(rint(1, 10))\n",[26,171946,171947,171963,171967],{"__ignoreMap":43},[47,171948,171949,171951,171953,171955,171958,171960],{"class":49,"line":50},[47,171950,30791],{"class":217},[47,171952,57850],{"class":221},[47,171954,30446],{"class":217},[47,171956,171957],{"class":221}," randint ",[47,171959,31437],{"class":217},[47,171961,171962],{"class":221}," rint\n",[47,171964,171965],{"class":49,"line":92},[47,171966,2493],{"emptyLinePlaceholder":145},[47,171968,171969,171971,171974,171976,171978,171980],{"class":49,"line":1273},[47,171970,30469],{"class":85},[47,171972,171973],{"class":221},"(rint(",[47,171975,436],{"class":85},[47,171977,12528],{"class":221},[47,171979,665],{"class":85},[47,171981,30551],{"class":221},[187,171983,171985],{"id":171984},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[38,171987,171989],{"className":30432,"code":171988,"language":30434,"meta":43,"style":43},"from random import *\n",[26,171990,171991],{"__ignoreMap":43},[47,171992,171993,171995,171997,171999],{"class":49,"line":50},[47,171994,30791],{"class":217},[47,171996,57850],{"class":221},[47,171998,30446],{"class":217},[47,172000,172001],{"class":217}," *\n",[19,172003,172004],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,172006,172008],{"id":172007},"_912-常用内置模块","9.12 常用内置模块",[187,172010,172012],{"id":172011},"_9121-random","9.12.1 random",[38,172014,172016],{"className":30432,"code":172015,"language":30434,"meta":43,"style":43},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[26,172017,172018,172024,172028,172042,172061],{"__ignoreMap":43},[47,172019,172020,172022],{"class":49,"line":50},[47,172021,30446],{"class":217},[47,172023,45382],{"class":221},[47,172025,172026],{"class":49,"line":92},[47,172027,2493],{"emptyLinePlaceholder":145},[47,172029,172030,172032,172034,172036,172038,172040],{"class":49,"line":1273},[47,172031,30469],{"class":85},[47,172033,171855],{"class":221},[47,172035,436],{"class":85},[47,172037,12528],{"class":221},[47,172039,665],{"class":85},[47,172041,30551],{"class":221},[47,172043,172044,172046,172049,172051,172053,172055,172057,172059],{"class":49,"line":1288},[47,172045,30469],{"class":85},[47,172047,172048],{"class":221},"(random.choice([",[47,172050,149942],{"class":81},[47,172052,12528],{"class":221},[47,172054,150990],{"class":81},[47,172056,12528],{"class":221},[47,172058,159785],{"class":81},[47,172060,33197],{"class":221},[47,172062,172063,172065,172068,172070,172072,172074,172076,172078,172080,172082,172084,172086,172088,172090],{"class":49,"line":1294},[47,172064,30469],{"class":85},[47,172066,172067],{"class":221},"(random.sample([",[47,172069,436],{"class":85},[47,172071,12528],{"class":221},[47,172073,298],{"class":85},[47,172075,12528],{"class":221},[47,172077,292],{"class":85},[47,172079,12528],{"class":221},[47,172081,512],{"class":85},[47,172083,12528],{"class":221},[47,172085,538],{"class":85},[47,172087,112256],{"class":221},[47,172089,298],{"class":85},[47,172091,30551],{"class":221},[187,172093,172095],{"id":172094},"_9122-time","9.12.2 time",[38,172097,172099],{"className":30432,"code":172098,"language":30434,"meta":43,"style":43},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[26,172100,172101,172107,172111,172118,172126],{"__ignoreMap":43},[47,172102,172103,172105],{"class":49,"line":50},[47,172104,30446],{"class":217},[47,172106,31883],{"class":221},[47,172108,172109],{"class":49,"line":92},[47,172110,2493],{"emptyLinePlaceholder":145},[47,172112,172113,172115],{"class":49,"line":1273},[47,172114,30469],{"class":85},[47,172116,172117],{"class":221},"(time.time())\n",[47,172119,172120,172122,172124],{"class":49,"line":1288},[47,172121,95125],{"class":221},[47,172123,436],{"class":85},[47,172125,228],{"class":221},[47,172127,172128,172130,172132,172135],{"class":49,"line":1294},[47,172129,30469],{"class":85},[47,172131,222],{"class":221},[47,172133,172134],{"class":81},"\"1秒后执行\"",[47,172136,228],{"class":221},[187,172138,172140],{"id":172139},"_9123-datetime","9.12.3 datetime",[38,172142,172144],{"className":30432,"code":172143,"language":30434,"meta":43,"style":43},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[26,172145,172146,172158,172162,172172,172179],{"__ignoreMap":43},[47,172147,172148,172150,172153,172155],{"class":49,"line":50},[47,172149,30791],{"class":217},[47,172151,172152],{"class":221}," datetime ",[47,172154,30446],{"class":217},[47,172156,172157],{"class":221}," datetime\n",[47,172159,172160],{"class":49,"line":92},[47,172161,2493],{"emptyLinePlaceholder":145},[47,172163,172164,172167,172169],{"class":49,"line":1273},[47,172165,172166],{"class":221},"now ",[47,172168,267],{"class":217},[47,172170,172171],{"class":221}," datetime.now()\n",[47,172173,172174,172176],{"class":49,"line":1288},[47,172175,30469],{"class":85},[47,172177,172178],{"class":221},"(now)\n",[47,172180,172181,172183,172186,172189,172191,172194],{"class":49,"line":1294},[47,172182,30469],{"class":85},[47,172184,172185],{"class":221},"(now.strftime(",[47,172187,172188],{"class":81},"\"%Y-%m-",[47,172190,156745],{"class":85},[47,172192,172193],{"class":81}," %H:%M:%S\"",[47,172195,30551],{"class":221},[187,172197,172199],{"id":172198},"_9124-os","9.12.4 os",[38,172201,172203],{"className":30432,"code":172202,"language":30434,"meta":43,"style":43},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[26,172204,172205,172211,172215,172222],{"__ignoreMap":43},[47,172206,172207,172209],{"class":49,"line":50},[47,172208,30446],{"class":217},[47,172210,45359],{"class":221},[47,172212,172213],{"class":49,"line":92},[47,172214,2493],{"emptyLinePlaceholder":145},[47,172216,172217,172219],{"class":49,"line":1273},[47,172218,30469],{"class":85},[47,172220,172221],{"class":221},"(os.getcwd())\n",[47,172223,172224,172226,172229,172232],{"class":49,"line":1288},[47,172225,30469],{"class":85},[47,172227,172228],{"class":221},"(os.listdir(",[47,172230,172231],{"class":81},"\".\"",[47,172233,30551],{"class":221},[187,172235,172237],{"id":172236},"_9125-sys","9.12.5 sys",[38,172239,172241],{"className":30432,"code":172240,"language":30434,"meta":43,"style":43},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[26,172242,172243,172250,172254,172261],{"__ignoreMap":43},[47,172244,172245,172247],{"class":49,"line":50},[47,172246,30446],{"class":217},[47,172248,172249],{"class":221}," sys\n",[47,172251,172252],{"class":49,"line":92},[47,172253,2493],{"emptyLinePlaceholder":145},[47,172255,172256,172258],{"class":49,"line":1273},[47,172257,30469],{"class":85},[47,172259,172260],{"class":221},"(sys.version)\n",[47,172262,172263,172265],{"class":49,"line":1288},[47,172264,30469],{"class":85},[47,172266,172267],{"class":221},"(sys.path)\n",[14,172269,172271,172272,172274,172275,470],{"id":172270},"_913-if-name-main","9.13 if ",[369,172273,79864],{}," == \"",[369,172276,102112],{},[19,172278,172279,172280,172283],{},"模块被直接运行和被导入时，",[26,172281,172282],{},"__name__"," 的值不同。",[19,172285,172286,172287,125],{},"创建 ",[26,172288,172289],{},"my_module.py",[38,172291,172293],{"className":30432,"code":172292,"language":30434,"meta":43,"style":43},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[26,172294,172295,172303,172313,172317,172321,172333],{"__ignoreMap":43},[47,172296,172297,172299,172301],{"class":49,"line":50},[47,172298,32001],{"class":217},[47,172300,5302],{"class":53},[47,172302,151147],{"class":221},[47,172304,172305,172307,172309,172311],{"class":49,"line":92},[47,172306,4183],{"class":217},[47,172308,10962],{"class":221},[47,172310,700],{"class":217},[47,172312,151158],{"class":221},[47,172314,172315],{"class":49,"line":1273},[47,172316,2493],{"emptyLinePlaceholder":145},[47,172318,172319],{"class":49,"line":1288},[47,172320,2493],{"emptyLinePlaceholder":145},[47,172322,172323,172325,172327,172329,172331],{"class":49,"line":1294},[47,172324,1625],{"class":217},[47,172326,31274],{"class":85},[47,172328,101613],{"class":217},[47,172330,101616],{"class":81},[47,172332,3832],{"class":221},[47,172334,172335,172337,172339,172341,172343,172345],{"class":49,"line":1308},[47,172336,31353],{"class":85},[47,172338,166654],{"class":221},[47,172340,436],{"class":85},[47,172342,12528],{"class":221},[47,172344,298],{"class":85},[47,172346,30551],{"class":221},[19,172348,172349],{},"作用：",[171,172351,172352,172355],{},[109,172353,172354],{},"直接运行该文件时，执行测试代码。",[109,172356,172357],{},"被其他文件导入时，不执行测试代码。",[19,172359,172360],{},"这是写模块时很常用的习惯。",[14,172362,172364],{"id":172363},"_914-包","9.14 包",[19,172366,172367,172368,172371],{},"包是包含 ",[26,172369,172370],{},"__init__.py"," 的目录，用于组织多个模块。",[19,172373,172374],{},"目录结构：",[38,172376,172379],{"className":172377,"code":172378,"language":5280,"meta":43},[5278],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[26,172380,172378],{"__ignoreMap":43},[19,172382,172383],{},"导入：",[38,172385,172387],{"className":30432,"code":172386,"language":30434,"meta":43,"style":43},"from utils.file_utils import read_file\n",[26,172388,172389],{"__ignoreMap":43},[47,172390,172391,172393,172396,172398],{"class":49,"line":50},[47,172392,30791],{"class":217},[47,172394,172395],{"class":221}," utils.file_utils ",[47,172397,30446],{"class":217},[47,172399,172400],{"class":221}," read_file\n",[19,172402,172403,172405],{},[26,172404,172370],{}," 可以为空，也可以写包初始化逻辑。",[14,172407,172409],{"id":172408},"_915-第三方包","9.15 第三方包",[19,172411,172412,172413,172415],{},"第三方包通过 ",[26,172414,23922],{}," 安装。",[38,172417,172419],{"className":40,"code":172418,"language":42,"meta":43,"style":43},"pip install requests\n",[26,172420,172421],{"__ignoreMap":43},[47,172422,172423,172425,172427],{"class":49,"line":50},[47,172424,23922],{"class":53},[47,172426,23925],{"class":81},[47,172428,146152],{"class":81},[19,172430,172431],{},"使用：",[38,172433,172435],{"className":30432,"code":172434,"language":30434,"meta":43,"style":43},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[26,172436,172437,172443,172447,172462],{"__ignoreMap":43},[47,172438,172439,172441],{"class":49,"line":50},[47,172440,30446],{"class":217},[47,172442,146152],{"class":221},[47,172444,172445],{"class":49,"line":92},[47,172446,2493],{"emptyLinePlaceholder":145},[47,172448,172449,172452,172454,172457,172460],{"class":49,"line":1273},[47,172450,172451],{"class":221},"response ",[47,172453,267],{"class":217},[47,172455,172456],{"class":221}," requests.get(",[47,172458,172459],{"class":81},"\"https:\u002F\u002Fwww.example.com\"",[47,172461,228],{"class":221},[47,172463,172464,172466],{"class":49,"line":1288},[47,172465,30469],{"class":85},[47,172467,172468],{"class":221},"(response.status_code)\n",[19,172470,172471],{},"查看已安装包：",[38,172473,172475],{"className":40,"code":172474,"language":42,"meta":43,"style":43},"pip list\n",[26,172476,172477],{"__ignoreMap":43},[47,172478,172479,172481],{"class":49,"line":50},[47,172480,23922],{"class":53},[47,172482,119009],{"class":81},[19,172484,172485],{},"导出项目依赖：",[38,172487,172488],{"className":40,"code":146347,"language":42,"meta":43,"style":43},[26,172489,172490],{"__ignoreMap":43},[47,172491,172492,172494,172496,172498],{"class":49,"line":50},[47,172493,23922],{"class":53},[47,172495,146356],{"class":81},[47,172497,26276],{"class":217},[47,172499,146361],{"class":81},[19,172501,172502],{},"安装项目依赖：",[38,172504,172505],{"className":40,"code":146367,"language":42,"meta":43,"style":43},[26,172506,172507],{"__ignoreMap":43},[47,172508,172509,172511,172513,172515],{"class":49,"line":50},[47,172510,23922],{"class":53},[47,172512,23925],{"class":81},[47,172514,119693],{"class":85},[47,172516,146361],{"class":81},[14,172518,172520],{"id":172519},"_916-模块搜索路径","9.16 模块搜索路径",[19,172522,172523,172524,172527],{},"Python 导入模块时会在 ",[26,172525,172526],{},"sys.path"," 中查找。",[38,172529,172531],{"className":30432,"code":172530,"language":30434,"meta":43,"style":43},"import sys\n\nfor path in sys.path:\n    print(path)\n",[26,172532,172533,172539,172543,172555],{"__ignoreMap":43},[47,172534,172535,172537],{"class":49,"line":50},[47,172536,30446],{"class":217},[47,172538,172249],{"class":221},[47,172540,172541],{"class":49,"line":92},[47,172542,2493],{"emptyLinePlaceholder":145},[47,172544,172545,172547,172550,172552],{"class":49,"line":1273},[47,172546,3118],{"class":217},[47,172548,172549],{"class":221}," path ",[47,172551,26097],{"class":217},[47,172553,172554],{"class":221}," sys.path:\n",[47,172556,172557,172559],{"class":49,"line":1288},[47,172558,31353],{"class":85},[47,172560,169283],{"class":221},[19,172562,172563],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,172565,157677],{},[38,172567,172570],{"className":172568,"code":172569,"language":5280,"meta":43},[5278],"random.py\njson.py\ntime.py\n",[26,172571,172569],{"__ignoreMap":43},[19,172573,172574],{},"这些文件名可能导致导入异常。",[14,172576,172578],{"id":172577},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,172580,172374],{},[38,172582,172585],{"className":172583,"code":172584,"language":5280,"meta":43},[5278],"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",[26,172586,172584],{"__ignoreMap":43},[19,172588,172589,125],{},[26,172590,172591],{},"utils\u002Ffile_utils.py",[38,172593,172595],{"className":30432,"code":172594,"language":30434,"meta":43,"style":43},"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",[26,172596,172597,172603,172613,172617,172621,172631,172641,172649,172655,172659,172686,172696,172700,172704,172714,172740],{"__ignoreMap":43},[47,172598,172599,172601],{"class":49,"line":50},[47,172600,30446],{"class":217},[47,172602,147145],{"class":221},[47,172604,172605,172607,172609,172611],{"class":49,"line":92},[47,172606,30791],{"class":217},[47,172608,108365],{"class":221},[47,172610,30446],{"class":217},[47,172612,108370],{"class":221},[47,172614,172615],{"class":49,"line":1273},[47,172616,2493],{"emptyLinePlaceholder":145},[47,172618,172619],{"class":49,"line":1288},[47,172620,2493],{"emptyLinePlaceholder":145},[47,172622,172623,172625,172628],{"class":49,"line":1294},[47,172624,32001],{"class":217},[47,172626,172627],{"class":53}," read_json",[47,172629,172630],{"class":221},"(path):\n",[47,172632,172633,172636,172638],{"class":49,"line":1308},[47,172634,172635],{"class":221},"    path ",[47,172637,267],{"class":217},[47,172639,172640],{"class":221}," Path(path)\n",[47,172642,172643,172645,172647],{"class":49,"line":1314},[47,172644,3194],{"class":217},[47,172646,38984],{"class":217},[47,172648,169364],{"class":221},[47,172650,172651,172653],{"class":49,"line":1405},[47,172652,14845],{"class":217},[47,172654,51892],{"class":221},[47,172656,172657],{"class":49,"line":1411},[47,172658,2493],{"emptyLinePlaceholder":145},[47,172660,172661,172663,172665,172668,172670,172672,172674,172676,172678,172680,172682,172684],{"class":49,"line":1423},[47,172662,34232],{"class":217},[47,172664,146845],{"class":85},[47,172666,172667],{"class":221},"(path, ",[47,172669,146855],{"class":81},[47,172671,12528],{"class":221},[47,172673,146860],{"class":5309},[47,172675,267],{"class":217},[47,172677,146865],{"class":81},[47,172679,13807],{"class":221},[47,172681,31437],{"class":217},[47,172683,148207],{"class":5309},[47,172685,3832],{"class":221},[47,172687,172688,172690,172692,172694],{"class":49,"line":1706},[47,172689,14845],{"class":217},[47,172691,148218],{"class":221},[47,172693,45408],{"class":5309},[47,172695,228],{"class":221},[47,172697,172698],{"class":49,"line":1711},[47,172699,2493],{"emptyLinePlaceholder":145},[47,172701,172702],{"class":49,"line":1717},[47,172703,2493],{"emptyLinePlaceholder":145},[47,172705,172706,172708,172711],{"class":49,"line":1722},[47,172707,32001],{"class":217},[47,172709,172710],{"class":53}," write_json",[47,172712,172713],{"class":221},"(path, data):\n",[47,172715,172716,172718,172720,172722,172724,172726,172728,172730,172732,172734,172736,172738],{"class":49,"line":1736},[47,172717,34232],{"class":217},[47,172719,146845],{"class":85},[47,172721,172667],{"class":221},[47,172723,152030],{"class":81},[47,172725,12528],{"class":221},[47,172727,146860],{"class":5309},[47,172729,267],{"class":217},[47,172731,146865],{"class":81},[47,172733,13807],{"class":221},[47,172735,31437],{"class":217},[47,172737,148207],{"class":5309},[47,172739,3832],{"class":221},[47,172741,172742,172745,172747,172749,172751,172753,172755,172757,172759,172761,172763],{"class":49,"line":1741},[47,172743,172744],{"class":221},"        json.dump(data, ",[47,172746,45408],{"class":5309},[47,172748,12528],{"class":221},[47,172750,147191],{"class":5309},[47,172752,267],{"class":217},[47,172754,34041],{"class":85},[47,172756,12528],{"class":221},[47,172758,152066],{"class":5309},[47,172760,267],{"class":217},[47,172762,298],{"class":85},[47,172764,228],{"class":221},[19,172766,172767,125],{},[26,172768,154661],{},[38,172770,172772],{"className":30432,"code":172771,"language":30434,"meta":43,"style":43},"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",[26,172773,172774,172785,172789,172802,172822],{"__ignoreMap":43},[47,172775,172776,172778,172780,172782],{"class":49,"line":50},[47,172777,30791],{"class":217},[47,172779,172395],{"class":221},[47,172781,30446],{"class":217},[47,172783,172784],{"class":221}," read_json, write_json\n",[47,172786,172787],{"class":49,"line":92},[47,172788,2493],{"emptyLinePlaceholder":145},[47,172790,172791,172793,172795,172798,172800],{"class":49,"line":1273},[47,172792,159770],{"class":221},[47,172794,267],{"class":217},[47,172796,172797],{"class":221}," read_json(",[47,172799,151885],{"class":81},[47,172801,228],{"class":221},[47,172803,172804,172806,172808,172810,172812,172814,172816,172818,172820],{"class":49,"line":1288},[47,172805,170588],{"class":221},[47,172807,62733],{"class":81},[47,172809,51491],{"class":221},[47,172811,149942],{"class":81},[47,172813,12528],{"class":221},[47,172815,151526],{"class":81},[47,172817,51491],{"class":221},[47,172819,1208],{"class":85},[47,172821,165206],{"class":221},[47,172823,172824,172827,172829],{"class":49,"line":1294},[47,172825,172826],{"class":221},"write_json(",[47,172828,151885],{"class":81},[47,172830,172831],{"class":221},", students)\n",[14,172833,172835],{"id":172834},"_918-易错点","9.18 易错点",[171,172837,172838,172841,172846,172851,172854,172857],{},[109,172839,172840],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[109,172842,172843,172844,28439],{},"能指定异常类型就不要裸写 ",[26,172845,170948],{},[109,172847,172848,172850],{},[26,172849,171323],{}," 无论是否出错都会执行。",[109,172852,172853],{},"模块文件名不要和标准库重名。",[109,172855,172856],{},"导入自己写的模块时，要注意运行目录。",[109,172858,172859],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,172861,172863],{"id":172862},"_919-本章练习","9.19 本章练习",[171,172865,172866,172869,172872,172878,172885],{},[109,172867,172868],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[109,172870,172871],{},"写函数读取文件，如果文件不存在则返回空字符串。",[109,172873,172286,172874,172877],{},[26,172875,172876],{},"math_utils.py","，实现加减乘除函数并导入使用。",[109,172879,172880,172881,172884],{},"创建一个 ",[26,172882,172883],{},"utils"," 包，把 JSON 读写函数放进去。",[109,172886,172887],{},"写一个程序，捕获除零异常和输入格式异常。",[134,172889,172890],{},"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":43,"searchDepth":92,"depth":92,"links":172892},[172893,172894,172895,172896,172897,172898,172899,172900,172901,172902,172903,172909,172916,172918,172919,172920,172921,172922,172923],{"id":170745,"depth":92,"text":170746},{"id":170873,"depth":92,"text":170874},{"id":170922,"depth":92,"text":170923},{"id":171071,"depth":92,"text":171072},{"id":171243,"depth":92,"text":171244},{"id":171312,"depth":92,"text":171313},{"id":171423,"depth":92,"text":171424},{"id":171549,"depth":92,"text":171550},{"id":171674,"depth":92,"text":171675},{"id":171729,"depth":92,"text":171730},{"id":171828,"depth":92,"text":171829,"children":172904},[172905,172906,172907,172908],{"id":171832,"depth":1273,"text":171833},{"id":171866,"depth":1273,"text":171867},{"id":171905,"depth":1273,"text":171906},{"id":171984,"depth":1273,"text":171985},{"id":172007,"depth":92,"text":172008,"children":172910},[172911,172912,172913,172914,172915],{"id":172011,"depth":1273,"text":172012},{"id":172094,"depth":1273,"text":172095},{"id":172139,"depth":1273,"text":172140},{"id":172198,"depth":1273,"text":172199},{"id":172236,"depth":1273,"text":172237},{"id":172270,"depth":92,"text":172917},"9.13 if name == \"main\"",{"id":172363,"depth":92,"text":172364},{"id":172408,"depth":92,"text":172409},{"id":172519,"depth":92,"text":172520},{"id":172577,"depth":92,"text":172578},{"id":172834,"depth":92,"text":172835},{"id":172862,"depth":92,"text":172863},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170737,"description":142},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":172930,"title":172931,"body":172932,"description":173095,"extension":143,"meta":173096,"navigation":145,"path":173097,"seo":173098,"stem":173099,"__hash__":173100},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":172933,"toc":173090},[172934,172937,172940,172943,172954,172956,173030,173033,173036,173039,173042,173045,173048,173051,173054,173057,173060],[10,172935,172931],{"id":172936},"python教程",[19,172938,172939],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,172941,172942],{},"建议学习环境：",[171,172944,172945,172948,172951],{},[109,172946,172947],{},"Python 版本：Python 3.10 及以上。",[109,172949,172950],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[109,172952,172953],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,172955,117132],{"id":117132},[171,172957,172958,172964,172970,172976,172982,172988,172994,173000,173006,173012,173018,173024],{},[109,172959,172960],{},[457,172961,172963],{"href":172962},".\u002Fch1-Python","Python环境与第一个程序",[109,172965,172966],{},[457,172967,172969],{"href":172968},".\u002Fch2","基础语法、变量与字符串",[109,172971,172972],{},[457,172973,172975],{"href":172974},".\u002Fch3","判断语句",[109,172977,172978],{},[457,172979,172981],{"href":172980},".\u002Fch4","循环语句",[109,172983,172984],{},[457,172985,172987],{"href":172986},".\u002Fch5","函数基础",[109,172989,172990],{},[457,172991,172993],{"href":172992},".\u002Fch6","数据容器",[109,172995,172996],{},[457,172997,172999],{"href":172998},".\u002Fch7","函数进阶",[109,173001,173002],{},[457,173003,173005],{"href":173004},".\u002Fch8","文件操作",[109,173007,173008],{},[457,173009,173011],{"href":173010},".\u002Fch9","异常、模块与包",[109,173013,173014],{},[457,173015,173017],{"href":173016},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[109,173019,173020],{},[457,173021,173023],{"href":173022},".\u002Fch11","面向对象基础",[109,173025,173026],{},[457,173027,173029],{"href":173028},".\u002Fch12","综合案例与复习路线",[14,173031,173032],{"id":173032},"学习路线",[19,173034,173035],{},"第一阶段：能运行程序。",[19,173037,173038],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,173040,173041],{},"第二阶段：能组织数据。",[19,173043,173044],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,173046,173047],{},"第三阶段：能封装逻辑。",[19,173049,173050],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,173052,173053],{},"第四阶段：能做小项目。",[19,173055,173056],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,173058,173059],{"id":173059},"参考资料",[171,173061,173062,173069,173076,173083],{},[109,173063,173064,173065],{},"黑马程序员 Python 入门教程推荐：",[457,173066,173067],{"href":173067,"rel":173068},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[23956],[109,173070,173071,173072],{},"Python 官方中文教程：",[457,173073,173074],{"href":173074,"rel":173075},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[23956],[109,173077,173078,173079],{},"Python 标准库文档：",[457,173080,173081],{"href":173081,"rel":173082},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[23956],[109,173084,173085,173086],{},"pyecharts 文档：",[457,173087,173088],{"href":173088,"rel":173089},"https:\u002F\u002Fpyecharts.org\u002F",[23956],{"title":43,"searchDepth":92,"depth":92,"links":173091},[173092,173093,173094],{"id":117132,"depth":92,"text":117132},{"id":173032,"depth":92,"text":173032},{"id":173059,"depth":92,"text":173059},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23471},"\u002Fwiki\u002F2024-10-10-python",{"title":172931,"description":173095},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331398635]